diff --git a/apps/as/src/entities/sewer-bsc-plan/api/queries.ts b/apps/as/src/entities/sewer-bsc-plan/api/queries.ts index 5afd9bebd..6c3893b6b 100644 --- a/apps/as/src/entities/sewer-bsc-plan/api/queries.ts +++ b/apps/as/src/entities/sewer-bsc-plan/api/queries.ts @@ -94,8 +94,12 @@ export function useSaveApplySewerBscPlan() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (body: SewerBscPlanApplySaveRequestDto) => sewerBscPlanService.saveApply(body), - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: sewerBscPlanKeys.all }); + onSuccess: (data) => { + if (data?.sewerBscPlanDocNo) { + queryClient.removeQueries({ queryKey: sewerBscPlanKeys.detail(data.sewerBscPlanDocNo) }); + queryClient.removeQueries({ queryKey: sewerBscPlanKeys.details(data.sewerBscPlanDocNo) }); + } + queryClient.invalidateQueries({ queryKey: sewerBscPlanKeys.all, refetchType: "all" }); }, }); } @@ -106,10 +110,9 @@ export function useSubmitSupplementSewerBscPlan() { mutationFn: ({ id, body }: { id: string; body: SewerBscPlanApplySaveRequestDto }) => sewerBscPlanService.submitSupplement(id, body), onSuccess: (_data, { id }) => { - queryClient.invalidateQueries({ queryKey: sewerBscPlanKeys.all }); - queryClient.invalidateQueries({ - queryKey: sewerBscPlanKeys.detail(id), - }); + queryClient.removeQueries({ queryKey: sewerBscPlanKeys.detail(id) }); + queryClient.removeQueries({ queryKey: sewerBscPlanKeys.details(id) }); + queryClient.invalidateQueries({ queryKey: sewerBscPlanKeys.all, refetchType: "all" }); }, }); } diff --git a/apps/as/src/pages/sewer-bsc-plan/ui/sewer-bsc-plan-detail-gate.tsx b/apps/as/src/pages/sewer-bsc-plan/ui/sewer-bsc-plan-detail-gate.tsx index 22e4ffdd5..07ec15f08 100644 --- a/apps/as/src/pages/sewer-bsc-plan/ui/sewer-bsc-plan-detail-gate.tsx +++ b/apps/as/src/pages/sewer-bsc-plan/ui/sewer-bsc-plan-detail-gate.tsx @@ -13,7 +13,7 @@ interface SewerBscPlanDetailGateProps { function SewerBscPlanDetailGate({ id, propChgCycl }: SewerBscPlanDetailGateProps) { const userInfo = useUserStore((state) => state.userInfo); - const { data, isLoading, isError } = useSewerBscPlan(id); + const { data, isLoading, isFetching, isError } = useSewerBscPlan(id); const shouldRedirectToEdit = canEditPbadmsDoc({ docSeComCd: "SEWER", prgrsSttsComCd: data?.detDto?.prgrsSttsComCd, @@ -24,7 +24,7 @@ function SewerBscPlanDetailGate({ id, propChgCycl }: SewerBscPlanDetailGateProps return ( state.userInfo); const chgCycl = propChgCycl ?? 1; const { data, isLoading: isDetailsLoading } = useSewerBscPlanDetails(id, chgCycl); - if (isDetailsLoading) { + const canEdit = canEditPbadmsDoc({ + docSeComCd: "SEWER", + prgrsSttsComCd: data?.detDto?.prgrsSttsComCd, + rgtr: data?.detDto?.rgtr, + loggedInUserUnqId: userInfo?.userUnqId, + }); + + useEffect(() => { + if (isDetailsLoading || !data?.detDto || !userInfo) return; + if (!canEdit) { + router.replace(withListQs(`/sewer-bsc-plan/${id}?chgCycl=${chgCycl}`)); + } + }, [canEdit, chgCycl, data?.detDto, id, isDetailsLoading, router, userInfo]); + + if (isDetailsLoading || (Boolean(data?.detDto) && !canEdit && Boolean(userInfo))) { return (
diff --git a/apps/as/src/pages/sewer-bsc-plan/ui/sewer-bsc-plan-form-page.tsx b/apps/as/src/pages/sewer-bsc-plan/ui/sewer-bsc-plan-form-page.tsx index b050aca4b..b1539c931 100644 --- a/apps/as/src/pages/sewer-bsc-plan/ui/sewer-bsc-plan-form-page.tsx +++ b/apps/as/src/pages/sewer-bsc-plan/ui/sewer-bsc-plan-form-page.tsx @@ -77,7 +77,9 @@ function SewerBscPlanFormPage({ const alert = useAlertStore((state) => state.setMessage); const [isSubmitting, setIsSubmitting] = useState(false); const isEditMode = mode === "edit"; - const isSplmntPrgrsStts = initialData?.detDto?.prgrsSttsComCd === "SL"; + const prgrsSttsComCd = initialData?.detDto?.prgrsSttsComCd ?? ""; + const isDraftStatus = !isEditMode || prgrsSttsComCd === "SV" || prgrsSttsComCd === ""; + const isSplmntPrgrsStts = isEditMode && prgrsSttsComCd === "SL"; const { data: acntgTree = [] } = useAcntgSeMngTree(); const { data: essentialFiles = [] } = useEsntlAtchFileMngTree({ docSeComCd: "SEWER" }); @@ -164,10 +166,12 @@ function SewerBscPlanFormPage({ if (!result?.sewerBscPlanDocNo) return; alert("신청 완료되었습니다."); - router.push( + queryClient.removeQueries({ queryKey: sewerBscPlanKeys.detail(result.sewerBscPlanDocNo) }); + queryClient.removeQueries({ queryKey: sewerBscPlanKeys.details(result.sewerBscPlanDocNo) }); + await queryClient.invalidateQueries({ queryKey: sewerBscPlanKeys.all, refetchType: "all" }); + router.replace( withListQs(`/sewer-bsc-plan/${result.sewerBscPlanDocNo}?chgCycl=${result.chgCycl ?? 1}`), ); - queryClient.invalidateQueries({ queryKey: sewerBscPlanKeys.all }); } catch (error) { console.error("신청 실패:", error); alert("신청 중 오류가 발생했습니다."); @@ -202,9 +206,11 @@ function SewerBscPlanFormPage({ if (!result) return; alert("보완 완료 처리되었습니다."); - await queryClient.invalidateQueries({ queryKey: sewerBscPlanKeys.all }); + queryClient.removeQueries({ queryKey: sewerBscPlanKeys.detail(docNo) }); + queryClient.removeQueries({ queryKey: sewerBscPlanKeys.details(docNo) }); + await queryClient.invalidateQueries({ queryKey: sewerBscPlanKeys.all, refetchType: "all" }); const chgCycl = data.sewerBscPlanDtl.chgCycl ?? initialData?.detDto?.chgCycl ?? 1; - router.push(withListQs(`/sewer-bsc-plan/${docNo}?chgCycl=${chgCycl}`)); + router.replace(withListQs(`/sewer-bsc-plan/${docNo}?chgCycl=${chgCycl}`)); } catch (error) { console.error("보완 완료 실패:", error); alert("보완 완료 처리 중 오류가 발생했습니다."); @@ -286,7 +292,15 @@ function SewerBscPlanFormPage({ > 목록 - {!isSplmntPrgrsStts ? ( + {isSplmntPrgrsStts ? ( + + ) : isDraftStatus ? ( <> - )} + ) : null}