"use client"; import { useCallback } from "react"; import { useConfirm } from "@frontend-opensource/use-react-hooks"; import { useAlertStore } from "@/shared/lib"; import { useCnstpSeMngPage, useSaveMultiCnstpSeMng } from "@/entities/cnstp"; import { Button, Skeleton, Table, TableBody, TableHead, TableHeader, TableRow, } from "@common/components"; import { cnstpGridConfig } from "../lib/configs/cnstp-config"; import { useSeGridRows } from "../lib/use-se-grid-rows"; import type { CnstpSeRow } from "../model/cnstp/cnstp-se-row-types"; import { CnstpSeRowComponent } from "./cnstp-se-row"; function CnstpCodeTabPanel() { const { confirm } = useConfirm(); const alert = useAlertStore((state) => state.setMessage); const pageQuery = useCnstpSeMngPage({ page: 0, size: 500, sort: "sortSeq,asc", }); const saveMultiMutation = useSaveMultiCnstpSeMng(); const handlePersist = useCallback( async (payload: Parameters[0]) => { await saveMultiMutation.mutateAsync(payload); }, [saveMultiMutation], ); const { displayRows, canSave, updateRow, addRootRow, addChildRow, removeDraft, markDeleted, resetFromServer, save, } = useSeGridRows(cnstpGridConfig, { serverContent: pageQuery.data?.content, onAlert: alert, onSave: handlePersist, }); const handleDelete = async (row: CnstpSeRow) => { if (!(await confirm("삭제하시겠습니까?"))) return; if (row.isNew) { removeDraft(row.rowKey); return; } markDeleted(row.rowKey); }; const handleSave = async () => { if (!(await confirm("저장하시겠습니까?"))) return; const saved = await save(); if (!saved) return; alert("저장되었습니다."); const result = await pageQuery.refetch(); resetFromServer(result.data?.content ?? []); }; const isSaving = saveMultiMutation.isPending; return (
{pageQuery.isPending ? (
) : displayRows.length === 0 ? (

등록된 코드가 없습니다. [코드 추가]로 1단계 코드를 등록하세요.

) : (
코드 코드명 설명 숫자 여부 소숫점 단위 사용 여부 정렬순서 구분 관리 {displayRows.map(({ row, depth }) => ( updateRow(row.rowKey, patch)} onAddChild={() => addChildRow(row)} onDelete={() => handleDelete(row)} /> ))}
)}
); } export { CnstpCodeTabPanel };