129 lines
4.9 KiB
TypeScript
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; |