import { Grid, LoadingOverlay, Paper, Stack, TextInput } from '@mantine/core' import { useForm, zodResolver } from '@mantine/form' import { showNotification } from '@mantine/notifications' import { IconCheck } from '@tabler/icons-react' import { useMutation } from '@tanstack/react-query' import _ from 'lodash' import Router, { useRouter } from 'next/router' import { useState } from 'react' import ActionFrom from '~/core/components/MyForm/Actions' import MyTitlePage from '~/core/components/MyTitle/MyTitlePage' import { RoleAttributes } from '~/data/entities/Role' import useRoleById from '~/data/query/Role/useRoleById' import RoleRepository from '~/data/repository/RoleRepository' import roleSchema from '~/data/validation/master/role.schema' import { queryClient } from '~/layouts/core' interface AbstractFormProps { initialValues: Record validate: Record isEdit?: boolean pageProps?: any mutation: ReturnType> } function AbstractForm({ initialValues, validate, mutation, isEdit = false, }: AbstractFormProps) { const [visible, setVisible] = useState(false) const baseURL = `/account?tabs=role` const form = useForm({ initialValues, validate, }) const onFormSubmit = async () => { setVisible(true) try { const response = await mutation.mutateAsync(form.values) const message = _.get(response, 'data.message', '') as string showNotification({ title: 'Submit Successfully', message, icon: , color: 'green', }) // redirect Router.push(baseURL) } catch (error) { const description = _.get(error, 'response.data.message', '') console.log(description) } finally { setVisible(false) } } return ( Router.push(baseURL)} />
Router.push(baseURL)} />
) } export function FormAdd() { const createData = useMutation( (data: RoleAttributes) => RoleRepository.create(data), { onSettled() { queryClient.invalidateQueries(['/role']) }, } ) return ( ) } export function FormEdit(props: any) { const { pageProps } = props const router = useRouter() const id = router?.query?.id const isEdit = Boolean(id) const queryById = useRoleById(String(id), {}, { enabled: !!id }) const { isLoading, remove, data } = queryById const updateData = useMutation( (data: RoleAttributes) => RoleRepository.update(String(id), data), { onSettled() { remove() queryClient.invalidateQueries(['/role']) }, } ) if (isLoading) { return } return ( ) }