| import React, { useState, useRef, useEffect, useMemo } from "react"; | 
| import { | 
|     CreateBase, | 
|     useTranslate, | 
|     TextInput, | 
|     NumberInput, | 
|     BooleanInput, | 
|     DateInput, | 
|     SaveButton, | 
|     SelectInput, | 
|     ReferenceInput, | 
|     ReferenceArrayInput, | 
|     AutocompleteInput, | 
|     Toolbar, | 
|     required, | 
|     useNotify, | 
|     Form, | 
|     useUpdate, | 
|     useCreate, | 
|     useCreateContext, | 
| } from 'react-admin'; | 
| import { | 
|     Dialog, | 
|     DialogActions, | 
|     DialogContent, | 
|     DialogTitle, | 
|     Stack, | 
|     Grid, | 
|     Box, | 
| } from '@mui/material'; | 
| import DialogCloseButton from "../components/DialogCloseButton"; | 
| import StatusSelectInput from "../components/StatusSelectInput"; | 
| import MemoInput from "../components/MemoInput"; | 
| import TreeSelectInput from "../components/TreeSelectInput"; | 
|   | 
| const EditContent = ({ editRecord }) => { | 
|     const { resource } = useCreateContext(); | 
|     return ( | 
|         <Grid container rowSpacing={2} columnSpacing={2}> | 
|             <Grid item xs={6} display="flex" gap={1}> | 
|                 <TreeSelectInput | 
|                     label="table.field.dept.parentName" | 
|                     value={editRecord?.parentId} | 
|                     resource={resource} | 
|                 /> | 
|             </Grid> | 
|             <Grid item xs={6} display="flex" gap={1}> | 
|                 <TextInput | 
|                     label="table.field.dept.name" | 
|                     source="name" | 
|                     parse={v => v} | 
|                     validate={required()} | 
|                 /> | 
|             </Grid> | 
|             <Grid item xs={6} display="flex" gap={1}> | 
|                 <TextInput | 
|                     label="table.field.dept.fullName" | 
|                     source="fullName" | 
|                     parse={v => v} | 
|                 /> | 
|             </Grid> | 
|             {/* <Grid item xs={6} display="flex" gap={1}> | 
|             <TextInput | 
|                 label="table.field.dept.brief" | 
|                 source="brief" | 
|                 parse={v => v} | 
|             /> | 
|         </Grid> | 
|         <Grid item xs={6} display="flex" gap={1}> | 
|             <TextInput | 
|                 label="table.field.dept.code" | 
|                 source="code" | 
|                 parse={v => v} | 
|             /> | 
|         </Grid> */} | 
|             <Grid item xs={6} display="flex" gap={1}> | 
|                 <TextInput | 
|                     label="table.field.dept.leader" | 
|                     source="leader" | 
|                     parse={v => v} | 
|                 /> | 
|             </Grid> | 
|             <Grid item xs={6} display="flex" gap={1}> | 
|                 <NumberInput | 
|                     label="table.field.dept.sort" | 
|                     source="sort" | 
|                 /> | 
|             </Grid> | 
|   | 
|             <Grid item xs={6} display="flex" gap={1}> | 
|                 <StatusSelectInput /> | 
|             </Grid> | 
|             <Grid item xs={12} display="flex" gap={1}> | 
|                 <Stack direction="column" spacing={1} width={'100%'}> | 
|                     <MemoInput /> | 
|                 </Stack> | 
|             </Grid> | 
|         </Grid> | 
|     ) | 
| } | 
|   | 
| const DeptEdit = (props) => { | 
|     const { editRecord, open, setOpen, callback, resource } = props; | 
|   | 
|     const translate = useTranslate(); | 
|     const notify = useNotify(); | 
|   | 
|     const [update] = useUpdate(); | 
|     const [create] = useCreate(); | 
|   | 
|     const handleClose = (event, reason) => { | 
|         if (reason !== "backdropClick") { | 
|             setOpen(false); | 
|         } | 
|     }; | 
|   | 
|     const handleSuccess = async (data) => { | 
|         setOpen(false); | 
|         callback(); | 
|         notify('common.response.success', { type: 'info' }); | 
|     }; | 
|   | 
|     const handleError = async (data) => { | 
|         notify('common.response.fail', { type: 'error' }); | 
|     }; | 
|   | 
|     const onSubmit = (data) => { | 
|         const _params = { ...data }; | 
|         if (editRecord) { | 
|             if (_params.parentId === editRecord.id) { | 
|                 notify('common.response.dataError', { type: 'error' }); | 
|                 return; | 
|             } | 
|             update( | 
|                 resource, | 
|                 { | 
|                     id: editRecord.id, | 
|                     data: _params, | 
|                 }, | 
|                 { | 
|                     onSuccess: () => { | 
|                         handleSuccess(); | 
|                     }, | 
|                     onError: (error) => { | 
|                         handleError(); | 
|                     }, | 
|                 } | 
|             ); | 
|         } else { | 
|             create( | 
|                 resource, | 
|                 { data: _params }, | 
|                 { | 
|                     onSuccess: () => { | 
|                         handleSuccess(); | 
|                     }, | 
|                     onError: (error) => { | 
|                         handleError(); | 
|                     }, | 
|                 } | 
|             ); | 
|         } | 
|     }; | 
|   | 
|     return ( | 
|         <> | 
|             <CreateBase> | 
|                 <Dialog | 
|                     open={open} | 
|                     onClose={handleClose} | 
|                     aria-labelledby="form-dialog-title" | 
|                     fullWidth | 
|                     disableRestoreFocus | 
|                     maxWidth="md"   // 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 
|                 > | 
|                     <Form record={editRecord} onSubmit={onSubmit}> | 
|                         <DialogTitle id="form-dialog-title" sx={{ | 
|                             position: 'sticky', | 
|                             top: 0, | 
|                             backgroundColor: 'background.paper', | 
|                             zIndex: 1000 | 
|                         }} | 
|                         > | 
|                             {editRecord ? translate('update.title') : translate('create.title')} | 
|                             <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}> | 
|                                 <DialogCloseButton onClose={handleClose} /> | 
|                             </Box> | 
|                         </DialogTitle> | 
|                         <DialogContent> | 
|                             <EditContent | 
|                                 editRecord={editRecord} | 
|                             /> | 
|                         </DialogContent> | 
|                         <DialogActions sx={{ position: 'sticky', bottom: 0, backgroundColor: 'background.paper', zIndex: 1000 }}> | 
|                             <Toolbar sx={{ width: '100%', justifyContent: 'space-between' }}  > | 
|                                 <SaveButton /> | 
|                             </Toolbar> | 
|                         </DialogActions> | 
|                     </Form> | 
|                 </Dialog> | 
|             </CreateBase> | 
|         </> | 
|     ) | 
| } | 
|   | 
| export default DeptEdit; |