import { ActionIcon, Button, Grid, Group, InputWrapper, Modal, Text, Textarea, TextInput, } from '@mantine/core' import { useForm, yupResolver } from '@mantine/form' import { useDisclosure, useMediaQuery } from '@mantine/hooks' import { IconAddressBook, IconCirclePlus, IconFileDescription, } from '@tabler/icons-react' import { useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { v4 as uuidv4 } from 'uuid' import * as yup from 'yup' import AreaItem from './AreaItem' import { errorTip, labelWithIcon } from './Common' const areaSchema = (t) => yup.object({ name: yup .string() .min(3, t('message_min_three_char')) .required(t('message_is_required', { field: t('ui_area_name') })), desc: yup .string() .min(3, t('message_min_three_char')) .required(t('message_is_required', { field: t('ui_area_desc') })), }) export default function AreaInput(props) { const { t } = useTranslation() const [editData, setEditData] = useState(null) const [opened, { open, close }] = useDisclosure(false) const isMobile = useMediaQuery('(max-width: 62em)') const { value, onChange, error } = props const form = useForm({ initialValues: { name: '', desc: '', }, validate: yupResolver(areaSchema(t)), enhanceGetInputProps: (payload) => ({ error: errorTip(payload.inputProps.error), }), }) useEffect(() => { if (editData) { form.setValues(editData) } }, [editData]) const onCloseModal = () => { form.reset() setEditData(null) close() } const addArea = (area) => { area.id = uuidv4() area.isCreate = true onChange([...value, area]) onCloseModal() } const updateArea = (area) => { onChange(value.map((item) => (item.id === area.id ? area : item))) form.reset() onCloseModal() } const onEditArea = (area) => { setEditData(area) open() } const onDeleteArea = (area) => { onChange(value.filter((item) => item.id !== area.id)) } return ( <> {value.length > 0 ? ( value.map((area) => ( )) ) : ( {t('ui_empty')} )}