|  |  |  | 
|---|
|  |  |  | import React, { useState, useRef, useEffect, useMemo } from "react"; | 
|---|
|  |  |  | import { | 
|---|
|  |  |  | CreateBase, | 
|---|
|  |  |  | useTranslate, | 
|---|
|  |  |  | TextInput, | 
|---|
|  |  |  | NumberInput, | 
|---|
|  |  |  | BooleanInput, | 
|---|
|  |  |  | DateInput, | 
|---|
|  |  |  | SaveButton, | 
|---|
|  |  |  | SelectInput, | 
|---|
|  |  |  | ReferenceInput, | 
|---|
|  |  |  | ReferenceArrayInput, | 
|---|
|  |  |  | AutocompleteInput, | 
|---|
|  |  |  | Toolbar, | 
|---|
|  |  |  | required, | 
|---|
|  |  |  | useDataProvider, | 
|---|
|  |  |  | useNotify, | 
|---|
|  |  |  | Form, | 
|---|
|  |  |  | useCreateController, | 
|---|
|  |  |  | } from 'react-admin'; | 
|---|
|  |  |  | CreateBase, | 
|---|
|  |  |  | useTranslate, | 
|---|
|  |  |  | TextInput, | 
|---|
|  |  |  | NumberInput, | 
|---|
|  |  |  | BooleanInput, | 
|---|
|  |  |  | DateInput, | 
|---|
|  |  |  | SaveButton, | 
|---|
|  |  |  | SelectInput, | 
|---|
|  |  |  | ReferenceInput, | 
|---|
|  |  |  | ReferenceArrayInput, | 
|---|
|  |  |  | AutocompleteInput, | 
|---|
|  |  |  | Toolbar, | 
|---|
|  |  |  | required, | 
|---|
|  |  |  | useDataProvider, | 
|---|
|  |  |  | useNotify, | 
|---|
|  |  |  | Form, | 
|---|
|  |  |  | useCreateController, | 
|---|
|  |  |  | } from "react-admin"; | 
|---|
|  |  |  | import { | 
|---|
|  |  |  | Dialog, | 
|---|
|  |  |  | DialogActions, | 
|---|
|  |  |  | DialogContent, | 
|---|
|  |  |  | DialogTitle, | 
|---|
|  |  |  | Stack, | 
|---|
|  |  |  | Grid, | 
|---|
|  |  |  | Box, | 
|---|
|  |  |  | } from '@mui/material'; | 
|---|
|  |  |  | 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"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const WarehouseAreasCreate = (props) => { | 
|---|
|  |  |  | const { open, setOpen } = props; | 
|---|
|  |  |  | const { open, setOpen } = props; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const translate = useTranslate(); | 
|---|
|  |  |  | const notify = useNotify(); | 
|---|
|  |  |  | const translate = useTranslate(); | 
|---|
|  |  |  | const notify = useNotify(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const handleClose = (event, reason) => { | 
|---|
|  |  |  | if (reason !== "backdropClick") { | 
|---|
|  |  |  | setOpen(false); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | const handleClose = (event, reason) => { | 
|---|
|  |  |  | if (reason !== "backdropClick") { | 
|---|
|  |  |  | setOpen(false); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const handleSuccess = async (data) => { | 
|---|
|  |  |  | setOpen(false); | 
|---|
|  |  |  | notify('common.response.success'); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | const handleSuccess = async (data) => { | 
|---|
|  |  |  | setOpen(false); | 
|---|
|  |  |  | notify("common.response.success"); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const handleError = async (error) => { | 
|---|
|  |  |  | notify(error.message || 'common.response.fail', { type: 'error', messageArgs: { _: error.message } }); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | const handleError = async (error) => { | 
|---|
|  |  |  | notify(error.message || "common.response.fail", { | 
|---|
|  |  |  | type: "error", | 
|---|
|  |  |  | messageArgs: { _: error.message }, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return ( | 
|---|
|  |  |  | <> | 
|---|
|  |  |  | <CreateBase | 
|---|
|  |  |  | record={{}} | 
|---|
|  |  |  | transform={(data) => { | 
|---|
|  |  |  | return data; | 
|---|
|  |  |  | }} | 
|---|
|  |  |  | mutationOptions={{ onSuccess: handleSuccess, onError: handleError }} | 
|---|
|  |  |  | return ( | 
|---|
|  |  |  | <> | 
|---|
|  |  |  | <CreateBase | 
|---|
|  |  |  | record={{}} | 
|---|
|  |  |  | transform={(data) => { | 
|---|
|  |  |  | return data; | 
|---|
|  |  |  | }} | 
|---|
|  |  |  | mutationOptions={{ onSuccess: handleSuccess, onError: handleError }} | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <Dialog | 
|---|
|  |  |  | open={open} | 
|---|
|  |  |  | onClose={handleClose} | 
|---|
|  |  |  | aria-labelledby="form-dialog-title" | 
|---|
|  |  |  | fullWidth | 
|---|
|  |  |  | disableRestoreFocus | 
|---|
|  |  |  | maxWidth="md" // 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <Form> | 
|---|
|  |  |  | <DialogTitle | 
|---|
|  |  |  | id="form-dialog-title" | 
|---|
|  |  |  | sx={{ | 
|---|
|  |  |  | position: "sticky", | 
|---|
|  |  |  | top: 0, | 
|---|
|  |  |  | backgroundColor: "background.paper", | 
|---|
|  |  |  | zIndex: 1000, | 
|---|
|  |  |  | }} | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <Dialog | 
|---|
|  |  |  | open={open} | 
|---|
|  |  |  | onClose={handleClose} | 
|---|
|  |  |  | aria-labelledby="form-dialog-title" | 
|---|
|  |  |  | fullWidth | 
|---|
|  |  |  | disableRestoreFocus | 
|---|
|  |  |  | maxWidth="md"   // 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <Form> | 
|---|
|  |  |  | <DialogTitle id="form-dialog-title" sx={{ | 
|---|
|  |  |  | position: 'sticky', | 
|---|
|  |  |  | top: 0, | 
|---|
|  |  |  | backgroundColor: 'background.paper', | 
|---|
|  |  |  | zIndex: 1000 | 
|---|
|  |  |  | }} | 
|---|
|  |  |  | > | 
|---|
|  |  |  | {translate('create.title')} | 
|---|
|  |  |  | <Box sx={{ position: 'absolute', top: 8, right: 8, zIndex: 1001 }}> | 
|---|
|  |  |  | <DialogCloseButton onClose={handleClose} /> | 
|---|
|  |  |  | </Box> | 
|---|
|  |  |  | </DialogTitle> | 
|---|
|  |  |  | <DialogContent sx={{ mt: 2 }}> | 
|---|
|  |  |  | <Grid container rowSpacing={2} columnSpacing={2}> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <TextInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.uuid" | 
|---|
|  |  |  | source="uuid" | 
|---|
|  |  |  | parse={v => v} | 
|---|
|  |  |  | autoFocus | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <TextInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.name" | 
|---|
|  |  |  | source="name" | 
|---|
|  |  |  | parse={v => v} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <TextInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.code" | 
|---|
|  |  |  | source="code" | 
|---|
|  |  |  | parse={v => v} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <ReferenceInput | 
|---|
|  |  |  | source="shipperId" | 
|---|
|  |  |  | reference="shipper" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <AutocompleteInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.shipperId" | 
|---|
|  |  |  | optionText="name" | 
|---|
|  |  |  | filterToQuery={(val) => ({ name: val })} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </ReferenceInput> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <NumberInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.supplierId" | 
|---|
|  |  |  | source="supplierId" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <SelectInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.flagMinus" | 
|---|
|  |  |  | source="flagMinus" | 
|---|
|  |  |  | choices={[ | 
|---|
|  |  |  | { id: 0, name: '否' }, | 
|---|
|  |  |  | { id:  1, name: '是' }, | 
|---|
|  |  |  | ]} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <SelectInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.flagLabelMange" | 
|---|
|  |  |  | source="flagLabelMange" | 
|---|
|  |  |  | choices={[ | 
|---|
|  |  |  | { id: 0, name: ' 否' }, | 
|---|
|  |  |  | { id:  1, name: ' 是' }, | 
|---|
|  |  |  | ]} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <SelectInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.flagMix" | 
|---|
|  |  |  | source="flagMix" | 
|---|
|  |  |  | choices={[ | 
|---|
|  |  |  | { id: 0, name: '否' }, | 
|---|
|  |  |  | { id:  1, name: '是' }, | 
|---|
|  |  |  | ]} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | {translate("create.title")} | 
|---|
|  |  |  | <Box | 
|---|
|  |  |  | sx={{ position: "absolute", top: 8, right: 8, zIndex: 1001 }} | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <DialogCloseButton onClose={handleClose} /> | 
|---|
|  |  |  | </Box> | 
|---|
|  |  |  | </DialogTitle> | 
|---|
|  |  |  | <DialogContent sx={{ mt: 2 }}> | 
|---|
|  |  |  | <Grid container rowSpacing={2} columnSpacing={2}> | 
|---|
|  |  |  | {/* <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <TextInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.uuid" | 
|---|
|  |  |  | source="uuid" | 
|---|
|  |  |  | parse={(v) => v} | 
|---|
|  |  |  | validate={[required()]} | 
|---|
|  |  |  | autoFocus | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </Grid> */} | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <TextInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.name" | 
|---|
|  |  |  | source="name" | 
|---|
|  |  |  | validate={[required()]} | 
|---|
|  |  |  | parse={(v) => v} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <TextInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.code" | 
|---|
|  |  |  | source="code" | 
|---|
|  |  |  | validate={[required()]} | 
|---|
|  |  |  | parse={(v) => v} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <ReferenceInput | 
|---|
|  |  |  | source="warehouseId" | 
|---|
|  |  |  | reference="warehouse" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <AutocompleteInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.wareId" | 
|---|
|  |  |  | optionText="name" | 
|---|
|  |  |  | validate={[required()]} | 
|---|
|  |  |  | filterToQuery={(val) => ({ name: val })} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </ReferenceInput> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <ReferenceInput source="shipperId" reference="companys" filter={{ type: 'shipper' }}> | 
|---|
|  |  |  | <AutocompleteInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.shipperId" | 
|---|
|  |  |  | optionText="name" | 
|---|
|  |  |  | filterToQuery={(val) => ({ name: val })} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </ReferenceInput> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <ReferenceInput source="supplierId" reference="companys" filter={{ type: 'supplier' }}> | 
|---|
|  |  |  | <AutocompleteInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.supplierId" | 
|---|
|  |  |  | optionText="name" | 
|---|
|  |  |  | filterToQuery={(val) => ({ name: val })} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </ReferenceInput> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <SelectInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.flagMinus" | 
|---|
|  |  |  | source="flagMinus" | 
|---|
|  |  |  | validate={[required()]} | 
|---|
|  |  |  | choices={[ | 
|---|
|  |  |  | { id: 0, name: "否" }, | 
|---|
|  |  |  | { id: 1, name: "是" }, | 
|---|
|  |  |  | ]} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <SelectInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.flagLabelMange" | 
|---|
|  |  |  | source="flagLabelMange" | 
|---|
|  |  |  | validate={[required()]} | 
|---|
|  |  |  | choices={[ | 
|---|
|  |  |  | { id: 0, name: " 否" }, | 
|---|
|  |  |  | { id: 1, name: " 是" }, | 
|---|
|  |  |  | ]} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | <Grid item xs={6} display="flex" gap={1}> | 
|---|
|  |  |  | <SelectInput | 
|---|
|  |  |  | label="table.field.warehouseAreas.flagMix" | 
|---|
|  |  |  | source="flagMix" | 
|---|
|  |  |  | validate={[required()]} | 
|---|
|  |  |  | choices={[ | 
|---|
|  |  |  | { id: 0, name: "否" }, | 
|---|
|  |  |  | { id: 1, name: "是" }, | 
|---|
|  |  |  | ]} | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </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> | 
|---|
|  |  |  | </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> | 
|---|
|  |  |  | </> | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | <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> | 
|---|
|  |  |  | </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 WarehouseAreasCreate; | 
|---|