"use client";
import type { HTMLAttributes } from "react";
import type { UseQueryResult } from "@tanstack/react-query";
import { type TableOptions, useReactTable } from "@tanstack/react-table";
import type { PageResponse } from "@/shared/model";
import { NoData } from "@/shared/ui/no-data";
import { DataTable, Skeleton } from "@common/components";
import { matchQueryStatus } from "./match-query-status";
interface DataTableOptions {
variant?: "default" | "secondary" | "line";
className?: HTMLAttributes["className"];
viewPagination?: boolean;
onRowClick?: (row: T) => void;
}
interface UseDataTableOptions {
query: UseQueryResult>;
tableOptions: Omit, "data" | "rowCount">;
dataTableOptions?: DataTableOptions;
}
export function useDataTable({ query, tableOptions, dataTableOptions }: UseDataTableOptions) {
const table = useReactTable({
...tableOptions,
data: query.data?.content ?? [],
rowCount: query.data?.totalElements ?? 0,
});
return {
tableComponent: matchQueryStatus(query, {
Pending: (
),
Empty: ,
Error: (
데이터를 불러오는 중 오류가 발생했습니다.
),
Success: () => ,
}),
tableInstance: table,
};
}