import { fetchType, getFetch } from "@/components/ui/api"; import type { DmStatusDataType, DmStatusChartType, DmStatusBoardType, } from "./type"; import type { SelectDataType } from "../common"; import { makeRegion } from "@/app/common/comFunction"; export type DmStatusActions = { getDmStatusData(cityCd: SelectDataType[]): void; // 데이터의 연도 반환 }; export type DmStatusType = { dmStatus: { year : string; statusData: DmStatusDataType[]; facilityTotals: string[]; chartData: DmStatusChartType[]; }; }; export const dmStatusState: DmStatusType = { dmStatus: { year : '', statusData: [], facilityTotals: [], chartData: [], }, }; export type DmStatusStore = DmStatusType & DmStatusActions; export const DmStatusReducer = (set: any): DmStatusActions => { return { getDmStatusData: async (cityCd: SelectDataType[]) => { const data = await getFetch(fetchType.FO, "/dashBoard/daemin"); const year = data.data[0]?.year; // API 응답에서 year 값을 할당합니다. console.log('cityCd ', cityCd) const dataSum = data.data.reduce( (acc: DmStatusDataType, item: DmStatusDataType) => { acc.sewage = ( parseInt(acc.sewage.replaceAll(",", "")) + parseInt(item.sewage.replaceAll(",", "")) ).toLocaleString(); acc.rainwater = ( parseInt(acc.rainwater.replaceAll(",", "")) + parseInt(item.rainwater.replaceAll(",", "")) ).toLocaleString(); acc.reclaimed = ( parseInt(acc.reclaimed.replaceAll(",", "")) + parseInt(item.reclaimed.replaceAll(",", "")) ).toLocaleString(); acc.sewageCnt = ( parseInt(acc.sewageCnt.replaceAll(",", "")) + parseInt(item.sewageCnt.replaceAll(",", "")) ).toLocaleString(); acc.rainwaterCnt = ( parseInt(acc.rainwaterCnt.replaceAll(",", "")) + parseInt(item.rainwaterCnt.replaceAll(",", "")) ).toLocaleString(); acc.reclaimedCnt = ( parseInt(acc.reclaimedCnt.replaceAll(",", "")) + parseInt(item.reclaimedCnt.replaceAll(",", "")) ).toLocaleString(); return acc; }, { region: "합계", sewage: "0", rainwater: "0", reclaimed: "0", sewageCnt: "0", rainwaterCnt: "0", reclaimedCnt: "0", } ); data.data.unshift(dataSum); //console.log("dataSum ", dataSum); const facilityTotals = [ "하수재이용시설" + "(총" + dataSum?.sewageCnt + "개소)", "빗물재이용시설" + "(총" + dataSum?.rainwaterCnt + "개소)", "중수도재이용시설" + "(총" + dataSum?.reclaimedCnt + "개소)", ]; const boardData: DmStatusBoardType[] = data.data.map( (item: DmStatusDataType) => { const regionText = item.sidoNm; //cityCd.find((city) => item.region === city.val); const sewage = item.sewage; const rainwater = item.rainwater; const reclaimed = item.reclaimed; const sewageCnt = item.sewageCnt; const rainwaterCnt = item.rainwaterCnt; const reclaimedCnt = item.reclaimedCnt; return { region: regionText ? regionText : item.region, sewage: sewageCnt + "(" + sewage.toLocaleString() + ")", rainwater: rainwaterCnt + "(" + rainwater.toLocaleString() + ")", reclaimed: reclaimedCnt + "(" + reclaimed.toLocaleString() + ")", }; } ).filter((item): item is DmStatusBoardType => item !== undefined); //console.log("boardData ", boardData); const chartData = data.data.map((item) => ({ label: makeRegion( cityCd.find((city) => item.region === city.val)?.text ?? "" ), 하수: item.sewage, 빗물: item.rainwater, 중수도: item.reclaimed, })); set((state: DmStatusType) => ({ ...state, dmStatus: { ...state.dmStatus, year : year, statusData: boardData, chartData: chartData, facilityTotals: facilityTotals, }, })); }, }; };