Files
frontend/apps/st/src/components/statistics/input/SewagePipeInp.tsx
T
2026-03-17 10:47:51 +09:00

129 lines
4.9 KiB
TypeScript

import { useState, useMemo } from "react";
import SearchForm from "@/components/module/SearchForm";
import TabDataGrid from "@/components/module/TabDataGrid";
import SubmitButton from "@/components/button/SumitButton";
import SaveButton from "@/components/button/SaveButton";
import LastYearDataButton from "@/components/button/LastYearDataButton";
import SubmitExceptionButton from "@/components/button/SubmitExceptionButton";
import { SewagePipeInpColumnInfoList } from "@/components/util/column/input/sewagePipe/SewagePipeInpColumn";
import type { ColumnInfoList, ColumnConfig } from "@/components/type/DataGrid.type";
import type { SearchFormValues } from "@/components/type/SearchForm.type";
import { useAlertStore } from "@/shared/lib";
import { useAdminStore } from "@/store/admin-store";
// 하수도 통계 관리 > 02. 하수관로
const SewagePipeInp = () => {
const [rowDataMap, setRowDataMap] = useState<Map<string, Record<string, string | number>[]>>(new Map());
const { setMessage: alert } = useAlertStore((state) => state);
const [_isLoading, setIsLoading] = useState<boolean>(false);
const [activeTab, setActiveTab] = useState<string>(SewagePipeInpColumnInfoList[0]?.tabKey ?? "ST00020001");
const [isEnterable, _setIsEnterable] = useState<boolean>(true);
const { isAdminInfo } = useAdminStore();
const columnInfo = useMemo(() => {
const canEdit = isEnterable || isAdminInfo;
return SewagePipeInpColumnInfoList.map((tab: ColumnInfoList) => {
const applyEditable = (cols: ColumnConfig[] | undefined) =>
(cols ?? []).map((col: ColumnConfig) =>
canEdit
? col
: { ...col, editable: false as const, styleName: col.styleName ?? "rg-cell-readonly" }
);
if (tab.left && tab.right) {
return {
...tab,
left: { ...tab.left, columns: applyEditable(tab.left.columns) },
right: { ...tab.right, columns: applyEditable(tab.right.columns) },
};
}
return {
...tab,
columns: applyEditable(tab.columns),
};
});
}, [isEnterable, isAdminInfo]);
// const handleSearch = async (values: SearchFormValues) => {
// if (!values.sido || values.sido === 'ALL') {
// alert('시도를 선택해주세요.');
// return;
// }
// setActiveTab('ST00020001');
// setRowDataMap(new Map());
// try {
// setIsLoading(true);
// // const searchParam: SewagePipeReviewRequestParams = {
// // statsYr: values.year,
// // sewerBzmnCd: values.bsnmCd,
// // ctpvNm: values.sido,
// // sggNm: values.gugun === 'ALL' ? '' : values.gugun
// // };
// // searchParamRef.current = searchParam;
// // const response = await statisticsManagementApi.getSewagePipeReviewRegionalList(searchParam);
// // if (response?.status === 'success' && response.data) {
// // const newRowDataMap = new Map<string, Record<string, string | number>[]>();
// // newRowDataMap.set('ST00020001', toGridRows(response.data as object[]));
// // setRowDataMap(newRowDataMap);
// // } else {
// // alert(response?.message || "데이터가 없습니다.");
// // }
// } catch {
// alert('데이터 조회 중 오류가 발생했습니다.');
// } finally {
// setIsLoading(false);
// }
// };
const SubmitExceptionFunc = () => {
console.log('submit exception');
// 예외 제출 로직
};
const getLastYearDataFunc = () => {
console.log('get last year data');
// 지난연도 데이터 가져오기 로직
};
const submitFunc = () => {
console.log('submit');
// 제출 로직
};
const saveFunc = () => {
console.log('save');
// 저장 로직
};
return (
<>
<SearchForm />
<div className="card !py-0">
<div className="flex justify-end items-center gap-[0.6rem] mx-[0.6rem]">
<SubmitExceptionButton SubmitExceptionFunc={SubmitExceptionFunc} />
<LastYearDataButton getLastYearDataFunc={getLastYearDataFunc} />
<SubmitButton submitFunc={submitFunc} />
<SaveButton saveFunc={saveFunc} />
</div>
</div>
<TabDataGrid
columnInfo={columnInfo}
rowDataMap={rowDataMap}
setRowDataMap={setRowDataMap}
activeTab={activeTab}
onActiveTabChange={setActiveTab}
/>
</>
);
};
export default SewagePipeInp;