import React, { useEffect } from 'react';
|
import { useForm, Controller } from 'react-hook-form';
|
import {
|
Box,
|
Grid,
|
Typography,
|
TextField,
|
Slider,
|
Button,
|
Select,
|
MenuItem,
|
InputLabel,
|
FormControl,
|
Stack,
|
Divider,
|
} from '@mui/material';
|
import { useTranslate } from 'react-admin';
|
import * as Tool from '../tool';
|
import ConfirmButton from '../../page/components/ConfirmButton';
|
import {
|
DEVICE_TYPE,
|
} from '../constants';
|
import { useNotification } from '../Notification';
|
|
const ConfigSettings = (props) => {
|
const { sprite, onSubmit } = props;
|
const notify = useNotification();
|
const translate = useTranslate();
|
|
const { control, handleSubmit, reset, watch, setValue, formState: { errors } } = useForm({
|
defaultValues: { ...sprite?.data },
|
});
|
|
useEffect(() => {
|
if (sprite?.data) {
|
reset({
|
...sprite.data
|
});
|
}
|
}, [sprite, reset]);
|
|
const deviceType = sprite?.data?.type;
|
|
const rowValue = watch('row');
|
const bayValue = watch('bay');
|
|
useEffect(() => {
|
if (deviceType === DEVICE_TYPE.SHELF) {
|
if (rowValue != null && bayValue != null && rowValue !== '' && bayValue !== '') {
|
setValue('no', `${rowValue}-${bayValue}`);
|
} else {
|
setValue('no', '');
|
}
|
}
|
}, [
|
setValue,
|
deviceType,
|
rowValue,
|
bayValue,
|
]);
|
|
const onFormSubmit = (data) => {
|
if (sprite?.data) {
|
Object.keys(data).forEach((key) => {
|
sprite.data[key] = data[key];
|
});
|
}
|
if (onSubmit) {
|
onSubmit(data);
|
}
|
notify.info(translate('common.response.success'));
|
};
|
|
return (
|
<>
|
<Box component="form" onSubmit={handleSubmit(onFormSubmit)} noValidate sx={{ mt: 0 }}>
|
<Grid container spacing={1.4}>
|
|
{deviceType === DEVICE_TYPE.SHELF && (
|
<>
|
<Grid item xs={6}>
|
<Controller
|
name="row"
|
control={control}
|
render={({ field }) => (
|
<TextField
|
{...field}
|
label={translate('page.map.settings.config.shelf.row')}
|
type="number"
|
value={field.value ?? ''}
|
fullWidth
|
onChange={(e) => {
|
field.onChange(e.target.value === '' ? '' : Number(e.target.value));
|
}}
|
/>
|
)}
|
/>
|
</Grid>
|
<Grid item xs={6}>
|
<Controller
|
name="bay"
|
control={control}
|
render={({ field }) => (
|
<TextField
|
{...field}
|
label={translate('page.map.settings.config.shelf.bay')}
|
type="number"
|
value={field.value ?? ''}
|
fullWidth
|
onChange={(e) => {
|
field.onChange(e.target.value === '' ? '' : Number(e.target.value));
|
}}
|
/>
|
)}
|
/>
|
</Grid>
|
</>
|
)}
|
|
{deviceType === DEVICE_TYPE.CHARGE && (
|
<>
|
</>
|
)}
|
|
{deviceType === DEVICE_TYPE.STATION && (
|
<>
|
</>
|
)}
|
|
{deviceType === DEVICE_TYPE.POINT && (
|
<>
|
</>
|
)}
|
|
<Grid item xs={12}>
|
<Divider />
|
</Grid>
|
|
<Grid item xs={6}>
|
<Controller
|
name="no"
|
control={control}
|
rules={{
|
required: translate('ra.validation.required') // warn msg
|
}}
|
render={({ field }) => {
|
return (
|
<TextField
|
{...field}
|
label={translate('page.map.settings.config.base.no')}
|
type="text"
|
value={field.value ?? ''}
|
error={!!errors.no} // show red warn
|
helperText={errors.no ? errors.no.message : null} // show warn msg
|
fullWidth
|
onChange={(e) => {
|
field.onChange(e);
|
}}
|
/>
|
)
|
}}
|
/>
|
</Grid>
|
|
<Grid item xs={12} mt={2}>
|
<Stack direction="row" spacing={2}>
|
<Button variant="contained" color="primary" type="submit">
|
{translate('ra.action.confirm')}
|
</Button>
|
</Stack>
|
</Grid>
|
</Grid>
|
</Box>
|
</>
|
);
|
};
|
|
export default ConfigSettings;
|