"use client"; import { RefreshCwIcon } from "lucide-react"; import { Button } from "@/shared/components/ui/button"; import { DataTable } from "./data-table"; import { EmptyState } from "./empty-state"; import LoadingSpinner from "@/shared/components/loading-spinner"; import SearchAndActionBar from "./search-action-bar"; import Image from "next/image"; import { ColumnDef, SortingState } from "@tanstack/react-table"; import { useState } from "react"; interface FilterOption { label: string; value: string; group: string; groupLabel: string; } interface ResourceTableProps { data: T[]; columns: ColumnDef[]; total: number; isLoading: boolean; isError: boolean; refetchAction: () => void; searchValue: string; onSearchChangeAction: (e: React.ChangeEvent) => void; sorting: SortingState; onSortingChangeAction: (sorting: SortingState) => void; pageIndex: number; pageCount: number; pageSize: number; onPaginationChangeAction: (params: { pageIndex: number; pageSize: number; }) => void; emptyStateProps: { title: string; icon?: React.ReactNode; description?: string; }; actionBarProps: { buttonLabel: string; buttonLink: string; bulkLabel?: string; showBulkAction?: boolean; onBulkAction?: (selectedRows: T[]) => void; }; enableRowSelection?: boolean; filterOptions?: FilterOption[]; } export function ResourceTable({ data, columns, total, isLoading, isError, refetchAction, searchValue, onSearchChangeAction, sorting, onSortingChangeAction, pageIndex, pageCount, pageSize, onPaginationChangeAction, emptyStateProps, actionBarProps, enableRowSelection, filterOptions = [], }: ResourceTableProps) { const [selectedRows, setSelectedRows] = useState([]); const defaultEmptyIcon = (
Data tidak ditemukan
); const handleBulkAction = () => { if (actionBarProps.onBulkAction) { actionBarProps.onBulkAction(selectedRows); } }; const handleRowSelectionChange = (rows: T[]) => { setSelectedRows(rows); }; return (
{(() => { if (isLoading) { return (
); } else if (isError) { return ( } title="Gagal memuat data" description="Terjadi kesalahan saat memuat data. Silakan coba lagi." action={ } /> ); } else if (data.length === 0) { return ( ); } else { return ( data={data} columns={columns} pageCount={pageCount} pageIndex={pageIndex} pageSize={pageSize} onPaginationChangeAction={onPaginationChangeAction} onRowSelectionChange={handleRowSelectionChange} manualPagination rowCount={total} sorting={sorting} onSortingChangeAction={onSortingChangeAction} enableRowSelection={enableRowSelection} /> ); } })()}
); }