kontenhumas-fe/app/[locale]/(admin)/admin/settings/banner/component/banner-table.tsx

173 lines
4.6 KiB
TypeScript
Raw Normal View History

2026-02-09 02:45:47 +00:00
"use client";
import * as React from "react";
import {
ColumnDef,
ColumnFiltersState,
PaginationState,
SortingState,
VisibilityState,
flexRender,
getCoreRowModel,
getFilteredRowModel,
getPaginationRowModel,
getSortedRowModel,
useReactTable,
} from "@tanstack/react-table";
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table";
import { useSearchParams } from "next/navigation";
import { close, loading } from "@/config/swal";
import { Link, useRouter } from "@/i18n/routing";
import columns from "./banner-column";
import { listBanner } from "@/service/service/settings/settings";
const BannerListTable = () => {
const router = useRouter();
const searchParams = useSearchParams();
const [showData, setShowData] = React.useState("10");
const [sorting, setSorting] = React.useState<SortingState>([]);
const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>(
2026-02-09 07:49:39 +00:00
[],
2026-02-09 02:45:47 +00:00
);
const [columnVisibility, setColumnVisibility] =
React.useState<VisibilityState>({});
const [rowSelection, setRowSelection] = React.useState({});
const [pagination, setPagination] = React.useState<PaginationState>({
pageIndex: 0,
pageSize: Number(showData),
});
2026-02-09 07:49:39 +00:00
const [getData, setGetData] = React.useState<any[]>([]);
2026-02-09 02:45:47 +00:00
const dataChange = searchParams?.get("dataChange");
const [page, setPage] = React.useState(1);
const [totalPage, setTotalPage] = React.useState(1);
const table = useReactTable({
data: getData,
columns,
onSortingChange: setSorting,
onColumnFiltersChange: setColumnFilters,
getCoreRowModel: getCoreRowModel(),
getPaginationRowModel: getPaginationRowModel(),
getSortedRowModel: getSortedRowModel(),
getFilteredRowModel: getFilteredRowModel(),
onColumnVisibilityChange: setColumnVisibility,
onRowSelectionChange: setRowSelection,
onPaginationChange: setPagination,
state: {
sorting,
columnFilters,
columnVisibility,
rowSelection,
pagination,
},
});
React.useEffect(() => {
const pageFromUrl = searchParams?.get("page");
if (pageFromUrl) {
setPage(Number(pageFromUrl));
}
}, [searchParams]);
React.useEffect(() => {
if (dataChange) {
router.push("/admin/settings/banner");
}
getListBanner();
}, [dataChange]);
React.useEffect(() => {
getListBanner();
// getListStaticBanner();
}, [page, showData]);
async function getListBanner() {
2026-02-09 07:49:39 +00:00
try {
loading();
2026-02-09 02:45:47 +00:00
2026-02-09 07:49:39 +00:00
const response = await listBanner();
2026-02-09 02:45:47 +00:00
2026-02-09 07:49:39 +00:00
const data = Array.isArray(response?.data?.data?.content)
? response.data.data.content
: [];
console.log("banner", data);
setGetData(data);
} catch (error) {
console.error("Error fetching banner list:", error);
setGetData([]);
} finally {
close();
}
2026-02-09 02:45:47 +00:00
}
2026-02-09 07:49:39 +00:00
// async function getListBanner() {
// loading();
// let temp: any;
// const response = await listBanner();
// const data = response?.data?.data?.content;
// console.log("banner", data);
// setGetData(data);
// close();
// }
2026-02-09 02:45:47 +00:00
return (
<>
<Table className="overflow-hidden mt-10">
<TableHeader>
{table.getHeaderGroups().map((headerGroup) => (
<TableRow key={headerGroup.id} className="bg-default-200">
{headerGroup.headers.map((header) => (
<TableHead key={header.id}>
{header.isPlaceholder
? null
: flexRender(
header.column.columnDef.header,
2026-02-09 07:49:39 +00:00
header.getContext(),
2026-02-09 02:45:47 +00:00
)}
</TableHead>
))}
</TableRow>
))}
</TableHeader>
<TableBody>
{table.getRowModel().rows?.length ? (
table.getRowModel().rows.map((row) => (
<TableRow
key={row.id}
data-state={row.getIsSelected() && "selected"}
className="h-[75px]"
>
{row.getVisibleCells().map((cell) => (
<TableCell key={cell.id}>
{flexRender(cell.column.columnDef.cell, cell.getContext())}
</TableCell>
))}
</TableRow>
))
) : (
<TableRow>
<TableCell colSpan={columns.length} className="h-24 text-center">
No results.
</TableCell>
</TableRow>
)}
</TableBody>
</Table>
</>
);
};
export default BannerListTable;