import { zodResolver } from "@hookform/resolvers/zod"; import React, { useEffect, useState } from "react"; import { defaultProjectValues } from "./ServiceProjectSchema"; import Label from "../common/Label"; import { FormProvider, useForm } from "react-hook-form"; import { useGlobalServices, useServices, } from "../../hooks/masterHook/useMaster"; import { ITEMS_PER_PAGE, PROJECT_STATUS } from "../../utils/constants"; import DatePicker from "../common/DatePicker"; import SelectMultiple from "../common/SelectMultiple"; import { projectSchema } from "./ServiceProjectSchema"; import { useOrganization, useOrganizationModal, useOrganizationsList, } from "../../hooks/useOrganization"; import { error } from "pdf-lib"; import { useCreateServiceProject, useServiceProject, useUpdateServiceProject, } from "../../hooks/useServiceProject"; const ManageServiceProject = ({ serviceProjectId, onClose }) => { const { data: projectdata, isLoading: isProjectLoading, isProjectError, } = useServiceProject(serviceProjectId); const [searchText, setSearchText] = useState(""); const methods = useForm({ resolver: zodResolver(projectSchema), defaultValues: defaultProjectValues, }); const { register, handleSubmit, control, reset, formState: { errors }, } = methods; const { data, isError, isLoading } = useServices(); const { data: organization, isLoading: isLoadingOrganization } = useOrganizationsList(ITEMS_PER_PAGE, 1, true); const { mutate: CreateServiceProject, isPending } = useCreateServiceProject( () => { reset(); onClose(); } ); const { mutate: UpdateServiceProject, isPending: isUpdating } = useUpdateServiceProject(() => { reset(); onClose(); }); const onSubmit = (formData) => { if (serviceProjectId) { let existingServiceIds = projectdata?.services?.map((s) => s.id) || []; const oldServices = projectdata.services.map((service) => ({ serviceId: service.id, isActive: formData.services.includes(service.id), })); const newServices = formData.services .filter((s) => !existingServiceIds.includes(s)) .map((service) => ({ serviceId: service, isActive: true })); formData.services = [...oldServices, ...newServices]; } else { formData.services = formData.services.map((service) => ({ serviceId: service, isActive: true, })); } if (serviceProjectId) { let payload = { ...formData, id: serviceProjectId }; UpdateServiceProject({ id: serviceProjectId, payload }); } else { CreateServiceProject(formData); } }; useEffect(() => { if (projectdata) { const activeServiceIds = (projectdata.services || []) .map((s) => s.serviceId || s.id) .filter(Boolean); reset({ name: projectdata.name, shortName: projectdata.shortName, clientId: projectdata.client.id, assignedDate: projectdata.assignedDate, address: projectdata.address, statusId: projectdata.status.id, contactEmail: projectdata.contactEmail, contactPhone: projectdata.contactPhone, contactName: projectdata.contactName, services: activeServiceIds, }); } }, [projectdata]); const { onOpen: openOrgModal } = useOrganizationModal(); return (
{serviceProjectId ? "Update Service Project" : "Create Service Project"}
{ onClose(); openOrgModal({ startStep: 2 }); // Step 4 = ManagOrg }} />
{errors?.clientId && ( {errors.clientId.message} )}
{errors?.name && ( {errors.name.message} )}
{errors?.shortName && ( {errors.shortName.message} )}
{errors?.statusId && ( {errors.statusId.message} )}
{errors?.services && ( {errors.services.message} )}
{errors?.contactName && ( {errors.contactName.message} )}
{errors?.contactEmail && ( {errors.contactEmail.message} )}
{ e.target.value = e.target.value.replace(/[^0-9]/g, ""); }} /> {errors?.contactPhone && ( {errors.contactPhone.message} )}