| import { TextField, useUpdate, useNotify, useRefresh, useRecordContext, useTranslate, useGetResourceLabel } from 'react-admin'; | 
| import { TextField as MuiTextField } from '@mui/material'; | 
| import { useState } from 'react'; | 
|   | 
| const EditableTextField = ({ source, label, resource, isBlur }) => { | 
|     const record = useRecordContext(); | 
|     const translate = useTranslate(); | 
|     const [value, setValue] = useState(record[source]); | 
|     const [update] = useUpdate(); | 
|     const notify = useNotify(); | 
|     const refresh = useRefresh(); | 
|     label = label ? label : "" | 
|     isBlur = isBlur == undefined ? false : isBlur | 
|   | 
|     const handleBlur = () => { | 
|         isBlur ? | 
|         update( | 
|             resource, | 
|             { id: record.id, data: { [source]: value } }, | 
|             { | 
|                 onSuccess: () => { | 
|                     const succ = translate('common.action.updateSucc') | 
|                     notify(succ, { type: 'success' }); | 
|                     refresh(); | 
|                 }, | 
|                 onError: () => { | 
|                     const failed = translate('common.action.updateSucc') | 
|                     notify(failed, { type: 'error' }); | 
|                     setValue(record[source]); | 
|                 } | 
|             } | 
|         ) : | 
|         {} | 
|     }; | 
|   | 
|     return ( | 
|         <MuiTextField | 
|             value={value} | 
|             onChange={(e) => setValue(e.target.value)} | 
|             label={translate(label)} | 
|             onBlur={handleBlur} | 
|             fullWidth | 
|         /> | 
|     ); | 
| }; | 
|   | 
|   | 
| export default EditableTextField; |