'use client'; import { useState } from 'react'; import { Box, Typography, Button, TextField, IconButton, Paper } from '@mui/material'; import EditIcon from '@mui/icons-material/Edit'; import SaveIcon from '@mui/icons-material/Save'; import CancelIcon from '@mui/icons-material/Cancel'; import { useTheme, alpha } from '@mui/material/styles'; import { useTranslation } from 'react-i18next'; export default function EvalEditableField({ label, value, multiline = true, onSave, placeholder, renderPreview, // Optional custom preview renderer renderEditor // Optional custom editor renderer (currentValue, onChange) => ReactNode }) { const { t } = useTranslation(); const theme = useTheme(); const [editing, setEditing] = useState(false); const [editValue, setEditValue] = useState(''); const handleStartEdit = () => { setEditValue(value || ''); setEditing(true); }; const handleCancel = () => { setEditing(false); setEditValue(''); }; const handleSave = async () => { if (onSave) { await onSave(editValue); } setEditing(false); }; return ( {label} {!editing && ( )} {editing ? ( {renderEditor && renderEditor(editValue, setEditValue) ? ( {renderEditor(editValue, setEditValue)} ) : ( setEditValue(e.target.value)} placeholder={placeholder} variant="outlined" size="small" sx={{ mb: 2 }} /> )} ) : ( {renderPreview ? ( renderPreview(value) ) : ( {value || t('common.noData')} )} )} ); }