diff --git a/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx b/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx index e8e0d36e3..304fea591 100644 --- a/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx +++ b/apps/st/src/components/statistics/verification/ImrVerificationHistory.tsx @@ -23,9 +23,9 @@ import { import dayjs from "dayjs"; import { ENDPOINT } from "@/shared/config"; +import { useUserStore } from "@/shared/lib"; import { CodeSelect } from "@/entities/code"; import { - type AdstZoneResponseDto, IMR_DETAIL_VISIBLE_COLUMNS_BY_STATS_CD, IMR_DETAIL_VISIBLE_COLUMNS_DEFAULT, imrApi, @@ -36,8 +36,8 @@ import { stAnlsRsltApi, type StAnlsRsltResponse, statisticsAnalysisMasterService, - useStAnlsSidoCombo, - useStAnlsSigunguCombo, + useSggList, + useSidoList, } from "@/entities/statistics"; import { Button, @@ -54,6 +54,7 @@ import { import DataGrid from "@/components/module/DataGrid"; import type { ColumnInfo } from "@/components/type/DataGrid.type"; +import { doList } from "@/components/util/column/input/DoList"; ChartJS.register( CategoryScale, @@ -71,7 +72,6 @@ type DateRangeValue = { }; const EMPTY_DATA: never[] = []; -const EMPTY_ADST_LIST: AdstZoneResponseDto[] = []; function getImrDetailGridColumnInfo(statsCd: string): ColumnInfo { const visible = @@ -139,10 +139,17 @@ const ImrVerificationHistory = () => { pageSize: 5, }); - const { data: sidoData } = useStAnlsSidoCombo(); - const { data: sigunguData } = useStAnlsSigunguCombo(searchSido); - const sidoOptions = sidoData ?? EMPTY_ADST_LIST; - const sigunguOptions = sigunguData ?? EMPTY_ADST_LIST; + const userInfo = useUserStore((state) => state.userInfo); + const userInstSeCd = userInfo?.instSeCd; + const { data: sidoData } = useSidoList({ instSeCd: userInstSeCd }); + const sidoOptions = sidoData?.sidoList ?? []; + const selectedSidoBsnmCd = + sidoOptions.find((item) => item.sido === searchSido)?.bsnmCd ?? ""; + const { data: sigunguData } = useSggList(searchSido, { + instSeCd: userInstSeCd, + gugunSkipYn: doList.includes(selectedSidoBsnmCd) ? "N" : "Y", + }); + const sigunguOptions = sigunguData ?? []; const imrDetailColumnInfo = useMemo( () => getImrDetailGridColumnInfo(selectedHistory?.statsCd ?? ""), @@ -241,9 +248,15 @@ const ImrVerificationHistory = () => { vrfcMthdCd: "IMR", sort: "anlsSn,desc", }; - if (searchSido !== "") + if (searchSido !== "") { + const selectedSggBsnmCd = sigunguOptions.find( + (item) => item.gugun === searchSigungu, + )?.bsnmCd; params.sewerBzmnCd = - searchSigungu !== "" ? searchSigungu : searchSido; + searchSigungu !== "" + ? (selectedSggBsnmCd ?? "") + : selectedSidoBsnmCd; + } if (searchStatsYr) params.statsYr = searchStatsYr; if (searchStatsCd) params.statsCd = searchStatsCd; if (dateRange?.from) @@ -406,10 +419,10 @@ const ImrVerificationHistory = () => { {sidoOptions.map((opt) => ( - {opt.adstNm} + {opt.sido} ))} @@ -431,10 +444,10 @@ const ImrVerificationHistory = () => { {sigunguOptions.map((opt) => ( - {opt.adstNm} + {opt.gugun} ))} diff --git a/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx b/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx index 76bd6c0ae..f30dc87d7 100644 --- a/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx +++ b/apps/st/src/components/statistics/verification/StatisticsVerificationReport.tsx @@ -20,8 +20,8 @@ import { statisticsVerificationResultColumnInfo, type StatisticsVerificationSubFilterState, type StatsInputStatusList, - useStAnlsSidoCombo, - useStAnlsSigunguCombo, + useSggList, + useSidoList, useStatsVrfcRptData, useStatsVrfcRsltData, type VerifyResultItem, @@ -53,6 +53,7 @@ import { ApprovalInputDialog, } from "@/components/statistics/verification/ApprovalInputDialog"; import type { CellEditedCallbackParams } from "@/components/type/DataGrid.type"; +import { doList } from "@/components/util/column/input/DoList"; import { toGridRows } from "@/components/util/grid/gridFunction"; const getYearOptions = () => { @@ -175,10 +176,15 @@ function StatisticsVerificationReport() { const prevLengthRef = useRef(0); const rejectedVrfcSnRef = useRef>(new Set()); - const { data: sidoData } = useStAnlsSidoCombo(); - const { data: sigunguData } = useStAnlsSigunguCombo( - filters.sewerBzmnCd ?? "", - ); + const userInstSeCd = userInfo?.instSeCd; + const { data: sidoData } = useSidoList({ instSeCd: userInstSeCd }); + const sidoList = sidoData?.sidoList ?? []; + const selectedSidoBsnmCd = filters.ctpvSewerBzmnCd ?? ""; + const { data: sigunguData } = useSggList(filters.ctpvNm ?? "", { + instSeCd: userInstSeCd, + gugunSkipYn: doList.includes(selectedSidoBsnmCd) ? "N" : "Y", + }); + const detailParams = useMemo( () => ({ statsYr: filters.statsYr, @@ -577,12 +583,10 @@ function StatisticsVerificationReport() { label="시도" value={filters.ctpvSewerBzmnCd ?? ""} onChange={handleFilterChange("ctpvNm")} - options={ - sidoData?.map((item) => ({ - label: item.adstNm, - value: item.adstCd, - })) ?? [] - } + options={sidoList.map((item) => ({ + label: item.sido, + value: item.bsnmCd, + }))} /> ({ - label: item.adstNm, - value: item.adstCd, + label: item.gugun, + value: item.bsnmCd, })) ?? [] } /> diff --git a/apps/st/src/entities/statistics/api/queries.ts b/apps/st/src/entities/statistics/api/queries.ts index 5335864f4..3b5fad7d8 100644 --- a/apps/st/src/entities/statistics/api/queries.ts +++ b/apps/st/src/entities/statistics/api/queries.ts @@ -4,6 +4,7 @@ import { ENDPOINT } from "@/shared/config"; import type { VerifyResultPageData } from "../model/general-verification-interface"; import type { SewerStUserSearchParams } from "../model/sewer-st-user-interface"; +import type { SearchCondition } from "../model/statistics-interface"; import type { StatisticsVerificationFilterState, StatisticsVerificationSubFilterState, @@ -14,9 +15,53 @@ import { generalverificationApiService } from "./general-verification-service"; import { sewerStUserApi } from "./sewer-st-user-service"; import { statisticsAnalysisMasterService } from "./statistics-analysis-master-service"; import { stAnlsRsltApi } from "./statistics-analysis-result-api"; +import { statisticsApi } from "./statistics-service"; const DETAIL_PAGE_SIZE = 100; +const EMPTY_SEARCH_CONDITION: SearchCondition = { + yearList: [], + sidoList: [], +}; + +export function useSidoList(params?: { instSeCd?: string }) { + return useQuery({ + queryKey: [ + ENDPOINT.ST_SERVICE.COMMON, + "search-condition", + params?.instSeCd ?? "", + ], + queryFn: async () => { + const response = await statisticsApi.getSidoList(params); + if (response.status !== "success") + throw new Error(response.message); + return response.data ?? EMPTY_SEARCH_CONDITION; + }, + }); +} + +export function useSggList( + sidoName: string, + params?: { instSeCd?: string; gugunSkipYn?: "Y" | "N" }, +) { + return useQuery({ + queryKey: [ + ENDPOINT.ST_SERVICE.COMMON, + "sgg", + sidoName, + params?.instSeCd ?? "", + params?.gugunSkipYn ?? "", + ], + queryFn: async () => { + const response = await statisticsApi.getSggList(sidoName, params); + if (response.status !== "success") + throw new Error(response.message); + return response.data ?? []; + }, + enabled: Boolean(sidoName) && sidoName !== "ALL", + }); +} + export const useStAnlsSidoCombo = () => { return useQuery({ queryKey: [ENDPOINT.STATVERIFY_SERVICE.ST_ANLS_MST, "sido"], diff --git a/apps/st/src/entities/statistics/index.ts b/apps/st/src/entities/statistics/index.ts index c8045b1f3..90dfb00f6 100644 --- a/apps/st/src/entities/statistics/index.ts +++ b/apps/st/src/entities/statistics/index.ts @@ -17,6 +17,8 @@ export { } from "./api/notice-talk/queries"; export { useSewerStUserList, + useSggList, + useSidoList, useStAnlsSidoCombo, useStAnlsSigunguCombo, useStatsVrfcRptData, @@ -74,12 +76,6 @@ export { type ImrLogResponse, } from "./model/imr/imr-interface"; export { imrVerificationHistoryColumns } from "./model/imr/imr-verification-history-columns"; -export { - type StatsInputStatusApproveBatchRequest, - type StatsInputStatusApproveItem, - type StatsInputStatusApproveKind, - type StatsInputStatusApproveResponse, -} from "./model/statistics-interface"; export { type StatsInputStatusList } from "./model/input/statistics-input-status-interface"; export { userListColumns } from "./model/notice-talk/notice-talk-sending-columns"; export { @@ -130,6 +126,12 @@ export { type ApproveRequest, type RejectRequest, } from "./model/statistics-approval-interface"; +export { + type StatsInputStatusApproveBatchRequest, + type StatsInputStatusApproveItem, + type StatsInputStatusApproveKind, + type StatsInputStatusApproveResponse, +} from "./model/statistics-interface"; export { statisticsVerificationReportColumnInfo, statisticsVerificationResultColumnInfo,