import React, { useState, useEffect,useCallback } from "react"; import { useFieldArray, useForm } from "react-hook-form"; import { z } from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import { MasterRespository } from "../../repositories/MastersRepository"; import { clearApiCacheKey } from "../../slices/apiCacheSlice"; import { getCachedData, cacheData } from "../../slices/apiDataManager"; import showToast from "../../services/toastService"; import {useCreateActivity} from "../../hooks/masterHook/useMaster"; const schema = z.object({ activityName: z.string().min(1, { message: "Activity Name is required" }), unitOfMeasurement: z.string().min(1, { message: "Unit of Measurement is required" }), checkList: z .array( z.object({ description: z.string().min(1, { message: "descriptionlist item cannot be empty" }), isMandatory: z.boolean().default(false), id: z.any().default(null), }) ) .optional(), }); const CreateActivity = ({ onClose }) => { const maxDescriptionLength = 255; const { mutate: createActivity, isPending: isLoading } = useCreateActivity(() => onClose?.()); const { register, handleSubmit, control, setValue, clearErrors, setError, getValues, reset, formState: { errors }, } = useForm({ resolver: zodResolver(schema), defaultValues: { activityName: "", unitOfMeasurement: "", checkList: [], }, }); const { fields: checkListItems, append, remove, } = useFieldArray({ control, name: "checkList", }); const addChecklistItem = useCallback(() => { const values = getValues("checkList"); const lastIndex = checkListItems.length - 1; if ( checkListItems.length > 0 && (!values?.[lastIndex] || values[lastIndex].description.trim() === "") ) { setError(`checkList.${lastIndex}.description`, { type: "manual", message: "Please fill this checklist item before adding another.", }); return; } clearErrors(`checkList.${lastIndex}.description`); append({ id: null, description: "", isMandatory: false }); }, [checkListItems, getValues, append, setError, clearErrors]); const removeChecklistItem = useCallback((index) => { remove(index); }, [remove]); const handleChecklistChange = useCallback((index, value) => { setValue(`checkList.${index}`, value); }, [setValue]); const onSubmit = (formData) => { createActivity(formData); }; // const onSubmit = (data) => { // setIsLoading(true); // MasterRespository.createActivity(data) // .then( ( resp ) => // { // const cachedData = getCachedData("Activity"); // const updatedData = [ ...cachedData, resp?.data ]; // cacheData("Activity", updatedData); // showToast("Activity Successfully Added.", "success"); // setIsLoading(false); // handleClose() // }) // .catch((error) => { // showToast(error.message, "error"); // setIsLoading(false); // }); // }; const handleClose = useCallback(() => { reset(); onClose(); }, [reset, onClose]); useEffect(() => { const tooltipTriggerList = Array.from(document.querySelectorAll('[data-bs-toggle="tooltip"]')); tooltipTriggerList.forEach((el) => new bootstrap.Tooltip(el)); }, []); return (
); }; export default CreateActivity;