import { Flex, Modal, Text } from "@mantine/core"; import { Button } from "@/shadcn/components/ui/button"; import { useForm } from "@mantine/form"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { getRouteApi } from "@tanstack/react-router"; import { useEffect } from "react"; import { notifications } from "@mantine/notifications"; import FormResponseError from "@/errors/FormResponseError"; import createInputComponents from "@/utils/createInputComponents"; import { assessmentRequestQueryOptions, createAssessmentRequest } from "../queries/assessmentRequestQueries"; /** * Change this */ const routeApi = getRouteApi("/_dashboardLayout/assessmentRequest/"); export default function UserFormModal() { const queryClient = useQueryClient(); const navigate = routeApi.useNavigate(); const searchParams = routeApi.useSearch(); const isModalOpen = Boolean(searchParams.create); const formType = "create"; const userQuery = useQuery(assessmentRequestQueryOptions(0, 10)); const modalTitle = Konfirmasi const form = useForm({ initialValues: { respondentsId: "", name: "", }, }); // used to get the respondentId of the currently logged in user // and then set respondentsId in the form to create an assessment request useEffect(() => { const data = userQuery.data; if (!data) { form.reset(); return; } form.setValues({ respondentsId: data.data[0].respondentId ?? "", name: data.data[0].name ?? "", }); form.setErrors({}); }, [userQuery.data]); // Mutation function to create a new assessment request and refresh query after success const mutation = useMutation({ mutationKey: ["usersMutation"], mutationFn: async (options: { action: "create"; data: { respondentsId: string } }) => { console.log("called"); if (options.action === "create") { return await createAssessmentRequest(options.data); } }, // auto refresh after mutation onSuccess: () => { // force a query-reaction to retrieve the latest data queryClient.invalidateQueries({ queryKey: ["assessmentRequest"] }); notifications.show({ message: "Permohonan Asesmen berhasil dibuat!", color: "green", }); // close modal navigate({ search: {} }); }, onError: (error: unknown) => { console.log(error); if (error instanceof FormResponseError) { form.setErrors(error.formErrors); return; } if (error instanceof Error) { notifications.show({ message: error.message, color: "red", }); } }, }); // Handle submit form, mutate data to server and close modal after success const handleSubmit = async (values: typeof form.values) => { if (formType === "create") { try { await mutation.mutateAsync({ action: "create", data: { respondentsId: values.respondentsId, }, }); } catch (error) { console.error(error); } } queryClient.invalidateQueries({ queryKey: ["users"] }); navigate({ search: {} }); }; return ( navigate({ search: {} })} title= {modalTitle} size="md" >
handleSubmit(values))}> Apakah anda yakin ingin membuat Permohonan Asesmen Baru? {/* Fields to display data will be sent but only respondentId */} {createInputComponents({ disableAll: mutation.isPending, readonlyAll: formType === "create", inputs: [ { type: "text", label: "Respondent ID", ...form.getInputProps("respondentsId"), hidden: true, }, { type: "text", label: "Name", ...form.getInputProps("name"), hidden: true, }, ], })} {/* Buttons */}
); }