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 "@/page/components/DialogCloseButton"; 
 | 
import StatusSelectInput from "@/page/components/StatusSelectInput"; 
 | 
import MemoInput from "@/page/components/MemoInput"; 
 | 
import TreeSelectInput from "@/page/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 sx={{ mt: 2 }}> 
 | 
                            <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; 
 |