From 6d873f016d4e4efe5bab752608fcc159d37e3910 Mon Sep 17 00:00:00 2001 From: admin Date: Sun, 29 Mar 2026 10:35:47 +0700 Subject: [PATCH] 690329:1035 Fixing bugs uuid by Kimi #02 --- ...119442391-1908b04cd11e739233ee8977de00dc57 | Bin 71011 -> 71011 bytes frontend/components/correspondences/form.tsx | 71 ++++++++++++++++-- frontend/hooks/use-master-data.ts | 1 + frontend/hooks/use-reference-data.ts | 1 + 4 files changed, 68 insertions(+), 5 deletions(-) diff --git a/backend/src/.jest-cache/haste-map-60cab15b743c6776f41d29bcac696b99-0ca4a1d6e3dfec1d63b61b0119442391-1908b04cd11e739233ee8977de00dc57 b/backend/src/.jest-cache/haste-map-60cab15b743c6776f41d29bcac696b99-0ca4a1d6e3dfec1d63b61b0119442391-1908b04cd11e739233ee8977de00dc57 index abb55eb8ac9e3c19c13e936b082420d21b873ea3..c1b757eed127229f8c78a46d9755aad154fdbeb0 100644 GIT binary patch delta 1132 zcmX9-ZBUd|80~rAU6yx0*u`Ch-9?ZMG#Lz1oJf$I)Dg=;N|KEla)$;H0SP~F@b zNYmRiV8?C+rQ^I=iGbGJ>2%=a)mwP|XM8e7n4Ov3K4H*qA;%qs#i1USvxFcRX6#=!Tu&zwaV zw%ZU9bO5t$!>E4V7mt*_+FFGG`xTmx2lg4eY5g9t37kgC1 zM4!Y%F-amSyMizhXJdU_O$f?rCG7b_kIprLUi&N4J83Su1})sVW|c^hQ>8-cdG5Oo z9Yr7|E12hGPZQubCb2WCnP`@Rh4b2+r(O)_{?;KsPsg5o#cXUzmB(=MdTQl}Ox& zrNn_>FD8EN;6KENYchyqs|!e;r6Vgk4w|rkr-t3Ns|ltzBpk0%re6CFM!z4&@9qjX zwT7nSA;f8o2?BPwQ-L4b5#n|sxoN8>*Pm7r&NdyLx+`Lu*CDt~!WQmEbW5gOVWti8 z$!T;>zNaF|qs%jvaP5f}-?j{aJntj_WH2gP*P`x)Ae6VNQR>NrwPiYvH|Hu`i5xAG zgyK`RUZKyaTz=Y~NEq*zIH$uXAiFgf@6={ zcB?2JuG>~5TsPvuGSioL3_Sl@kHB%K=MmQ5_D91F3no%bcyYkM%WpIj>|K&VxRgIK zwXWfY37@^K;iy}&guH$m{03HW@9jv!^(Rxh8Hl)LVR>MVNQ;z*7mE11PQ={R;nrY0 z3c4lq4C>MNr^E;EntWjzaVggPN9^c+kaXz75fwfiwQ};{XTN2k&0!D vfo8}Jezeu|*hrg6Hu{lOW+N>PT=-1o5c6CG@e7}GsPi^vZrG$$#p?e6G_2p> delta 1049 zcmX|=NZVmuwxAVc4$X~se<>LeFe1Zinv;z zK^*6_O+cKJ9x?hv%sV&1&2R>AZ9tvN?}&CAUiRG4%;+;XTn73liF%gwsF=+7I1wT(0-sPbr+52Xz34t>jRHbRS#~LfbcgkgDL6239fs{cOw#2G=`?k}BUO$QB zbNmIAE=nAk?Qy$Dg3*`kP8PipMJA!RLxEq6T#+93By;?!>ry zSpma9CTCoC6w%l%!8mS$`ZYbgN9}oftc`H}p2SWQ8;PQz9XH~SNqc0CIIrAsbD2%~ zUgD8SA41mTRtotK(XijIQ6kPwzmBx&A`YK1s?a>U1r3)ZoS4-kWX=xTXV)Fl&nfuE z{e!~F6L>CYIe5NBz|u`g-c6+C!lfZ4-(JjHX=Zjug$;Qt+#(+;Ok#Fw?z+fFOv>z>^vwL_sYLlN@FT;+ diff --git a/frontend/components/correspondences/form.tsx b/frontend/components/correspondences/form.tsx index 7238ce9..1191a08 100644 --- a/frontend/components/correspondences/form.tsx +++ b/frontend/components/correspondences/form.tsx @@ -14,7 +14,7 @@ import { useRouter } from 'next/navigation'; import { Loader2 } from 'lucide-react'; import { useCreateCorrespondence, useUpdateCorrespondence } from '@/hooks/use-correspondence'; import { Organization } from '@/types/organization'; -import { useOrganizations, useProjects, useCorrespondenceTypes, useDisciplines } from '@/hooks/use-master-data'; +import { useOrganizations, useProjects, useCorrespondenceTypes, useDisciplines, useContracts } from '@/hooks/use-master-data'; import { CreateCorrespondenceDto } from '@/types/dto/correspondence/create-correspondence.dto'; import { useState, useEffect } from 'react'; import { correspondenceService as _correspondenceService } from '@/lib/services/correspondence.service'; @@ -24,6 +24,7 @@ import { filesApi } from '@/lib/api/files'; // Updated Zod Schema with all required fields const correspondenceSchema = z.object({ projectId: z.string().min(1, 'Please select a Project'), + contractId: z.string().min(1, 'Please select a Contract'), documentTypeId: z.number().min(1, 'Please select a Document Type'), disciplineId: z.number().optional(), subject: z.string().min(5, 'Subject must be at least 5 characters'), @@ -51,6 +52,12 @@ type ProjectOption = { projectCode: string; }; +type ContractOption = { + publicId?: string; + contractName?: string; + contractCode?: string; +}; + type CorrespondenceTypeOption = { id: number; typeName: string; @@ -116,11 +123,9 @@ export function CorrespondenceForm({ initialData, uuid }: { initialData?: Initia const { data: projectsData, isLoading: isLoadingProjects } = useProjects(); const { data: organizations, isLoading: isLoadingOrgs } = useOrganizations(); const { data: correspondenceTypesData, isLoading: isLoadingTypes } = useCorrespondenceTypes(); - const { data: disciplinesData, isLoading: isLoadingDisciplines } = useDisciplines(); const projects = (projectsData as ProjectOption[]) ?? []; const organizationOptions = extractArrayData(organizations); const correspondenceTypes = extractArrayData(correspondenceTypesData); - const disciplines = extractArrayData(disciplinesData); // Extract initial values if editing const currentRev = initialData?.revisions?.find((r) => r.isCurrent) || initialData?.revisions?.[0]; @@ -158,11 +163,35 @@ export function CorrespondenceForm({ initialData, uuid }: { initialData?: Initia // Watch for controlled inputs const projectId = watch('projectId'); + const contractId = watch('contractId'); const documentTypeId = watch('documentTypeId'); const disciplineId = watch('disciplineId'); const fromOrgId = watch('fromOrganizationId'); const toOrgId = watch('toOrganizationId'); + // Fetch contracts based on selected project + const { data: contractsData, isLoading: isLoadingContracts } = useContracts(projectId); + const contracts = extractArrayData(contractsData); + + // Fetch disciplines based on selected contract + const { data: disciplinesData, isLoading: isLoadingDisciplines } = useDisciplines(contractId); + const disciplines = extractArrayData(disciplinesData); + + // Reset dependent fields when project changes + useEffect(() => { + if (projectId) { + setValue('contractId', ''); + setValue('disciplineId', undefined); + } + }, [projectId, setValue]); + + // Reset discipline when contract changes + useEffect(() => { + if (contractId) { + setValue('disciplineId', undefined); + } + }, [contractId, setValue]); + const [isUploading, setIsUploading] = useState(false); const onSubmit = async (data: FormData) => { @@ -303,7 +332,7 @@ export function CorrespondenceForm({ initialData, uuid }: { initialData?: Initia )} {/* Document Metadata Section */} -
+
{/* Project Dropdown */}
@@ -326,6 +355,33 @@ export function CorrespondenceForm({ initialData, uuid }: { initialData?: Initia {errors.projectId &&

{errors.projectId.message}

}
+ {/* Contract Dropdown */} +
+ + + {errors.contractId &&

{errors.contractId.message}

} +
+ {/* Document Type Dropdown */}
@@ -354,7 +410,7 @@ export function CorrespondenceForm({ initialData, uuid }: { initialData?: Initia
diff --git a/frontend/hooks/use-master-data.ts b/frontend/hooks/use-master-data.ts index 4635a7c..52f460f 100644 --- a/frontend/hooks/use-master-data.ts +++ b/frontend/hooks/use-master-data.ts @@ -79,6 +79,7 @@ export function useDisciplines(contractId?: number | string) { return useQuery({ queryKey: masterDataKeys.disciplines(contractId), queryFn: () => masterDataService.getDisciplines(contractId), + enabled: !!contractId && contractId !== '', }); } diff --git a/frontend/hooks/use-reference-data.ts b/frontend/hooks/use-reference-data.ts index dddfa1b..e6df797 100644 --- a/frontend/hooks/use-reference-data.ts +++ b/frontend/hooks/use-reference-data.ts @@ -19,6 +19,7 @@ export const useRfaTypes = (contractId?: number | string) => { return useQuery({ queryKey: referenceDataKeys.rfaTypes(contractId), queryFn: () => masterDataService.getRfaTypes(contractId), + enabled: !!contractId && contractId !== '', }); };