"use client" import * as React from "react" import type { DataTableAdvancedFilterField, DataTableFilterField, DataTableRowAction, } from "@/types/table" import { useDataTable } from "@/hooks/use-data-table" import { DataTable } from "@/components/data-table/data-table" import { DataTableAdvancedToolbar } from "@/components/data-table/data-table-advanced-toolbar" import { useFeatureFlags } from "./feature-flags-provider" import { getFormLists } from "../service" import { getColumns } from "./formLists-table-columns" import { FormListsTableToolbarActions } from "./formLists-table-toolbar-actions" import { ViewMetas } from "./meta-sheet" import { FormListsView } from "@/db/schema" interface ItemsTableProps { promises: Promise< [ Awaited>, ] > } export function FormListsTable({ promises }: ItemsTableProps) { const { featureFlags } = useFeatureFlags() // 1. 데이터 로딩 상태 관리 추가 const [isLoading, setIsLoading] = React.useState(true) const [tableData, setTableData] = React.useState<{ data: FormListsView[] pageCount: number }>({ data: [], pageCount: 0 }) // 2. Promise 해결을 useEffect로 처리 React.useEffect(() => { promises .then(([result]) => { setTableData(result) setIsLoading(false) }) // .catch((error) => { // console.error('Failed to load table data:', error) // setIsLoading(false) // }) }, [promises]) const [rowAction, setRowAction] = React.useState | null>(null) const columns = React.useMemo( () => getColumns({ setRowAction }), [setRowAction] ) const filterFields: DataTableFilterField[] = [] const advancedFilterFields: DataTableAdvancedFilterField[] = [ { id: "projectCode", label: "Project Code", type: "text", }, { id: "projectName", label: "Project Name", type: "text", }, { id: "formCode", label: "Register ID", type: "text", }, { id: "formName", label: "Register Description", type: "text", }, { id: "tagTypeLabel", label: "TAG TYPE ID", type: "text", }, { id: "classLabel", label: "Class Description", type: "text", }, { id: "ep", label: "EP", type: "text", }, { id: "remark", label: "remark", type: "text", }, { id: "createdAt", label: "Created At", type: "date", }, { id: "updatedAt", label: "Updated At", type: "date", }, ] // 3. 로딩 중이거나 데이터가 없을 때 처리 const { table } = useDataTable({ data: tableData.data, columns, pageCount: tableData.pageCount, filterFields, enablePinning: true, enableAdvancedFilter: true, initialState: { sorting: [{ id: "createdAt", desc: true }], columnPinning: { right: ["actions"] }, }, getRowId: (originalRow) => String(originalRow.id), shallow: false, clearOnDefault: true, }) // 4. 로딩 상태 표시 if (isLoading) { return (
Loading...
) } return ( <> setRowAction(null)} form={rowAction?.row.original ?? null} /> ) }