130 lines
4.2 KiB
TypeScript
130 lines
4.2 KiB
TypeScript
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,
|
|
},
|
|
}));
|
|
|
|
},
|
|
};
|
|
};
|