All checks were successful
		
		
	
	Playwright Tests / test (pull_request) Has been skipped
				
			Check usage of free licenses / build-static-assets (pull_request) Successful in 1m12s
				
			Add copyright notice / copyright_notice (pull_request) Successful in 1m32s
				
			Build Nginx-based docker image / build-static-assets (push) Successful in 6m2s
				
			
		
			
				
	
	
		
			34 lines
		
	
	
		
			1006 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			1006 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /* Copyright (C) 2024-2025 LibreWeddingPlanner contributors*/
 | |
| 
 | |
| import React, { useState } from 'react';
 | |
| 
 | |
| export default function InlineTextField({ initialValue, onChange }: { initialValue: string, onChange: (value: string) => void }) {
 | |
|     const [editing, setEditing] = useState(false);
 | |
|     const [value, setValue] = useState(initialValue);
 | |
| 
 | |
|     const renderText = () => <span onClick={() => setEditing(true)}>{value}</span>
 | |
| 
 | |
|     const onConfirm = () => {
 | |
|         onChange(value);
 | |
|         setEditing(false);
 | |
|     }
 | |
| 
 | |
|     function renderForm() {
 | |
|         return (
 | |
|             <div className="flex flex-row">
 | |
|                 <input
 | |
|                     type="text"
 | |
|                     value={value}
 | |
|                     className="px-2 py-0 h-5 max-w-48"
 | |
|                     onChange={(e) => setValue(e.target.value)}
 | |
|                     onBlur={onConfirm}
 | |
|                     autoFocus
 | |
|                 />
 | |
|             </div>
 | |
|         )
 | |
|     }
 | |
| 
 | |
|     return (
 | |
|         editing ? (renderForm()) : (renderText())
 | |
|     );
 | |
| } |