From f8829985f69e17268be7dda1a50f7abb4c8e87b2 Mon Sep 17 00:00:00 2001 From: Rama Priyanto Date: Mon, 9 Jun 2025 16:04:03 +0700 Subject: [PATCH] fix:pagination media traking-tracking berita, setting banner, media tracking result --- .../results/component/column.tsx | 21 ++- .../tracking-berita/component/table.tsx | 107 ++++++------- .../admin/settings/banner/component/table.tsx | 22 ++- components/table/custom-pagination.tsx | 143 ++++++++++++++++++ 4 files changed, 221 insertions(+), 72 deletions(-) create mode 100644 components/table/custom-pagination.tsx diff --git a/app/[locale]/(protected)/admin/media-tracking/results/component/column.tsx b/app/[locale]/(protected)/admin/media-tracking/results/component/column.tsx index b6bfa497..69d40134 100644 --- a/app/[locale]/(protected)/admin/media-tracking/results/component/column.tsx +++ b/app/[locale]/(protected)/admin/media-tracking/results/component/column.tsx @@ -49,11 +49,11 @@ const columns: ColumnDef[] = [ header: "Jumlah Amplifikasi", cell: ({ row }) => {row.getValue("link")}, }, - { - accessorKey: "status", - header: "Status", - cell: ({ row }) => {row.getValue("status")}, - }, + // { + // accessorKey: "status", + // header: "Status", + // cell: ({ row }) => {row.getValue("status")}, + // }, { accessorKey: "date", header: "Tanggal Penarikan", @@ -77,10 +77,17 @@ const columns: ColumnDef[] = [ - + - View + View{" "} + {row.original.mediaUpload.fileType.secondaryName && + row.original.mediaUpload.fileType.secondaryName.toLowerCase()} diff --git a/app/[locale]/(protected)/admin/media-tracking/tracking-berita/component/table.tsx b/app/[locale]/(protected)/admin/media-tracking/tracking-berita/component/table.tsx index e60c0b89..33d03582 100644 --- a/app/[locale]/(protected)/admin/media-tracking/tracking-berita/component/table.tsx +++ b/app/[locale]/(protected)/admin/media-tracking/tracking-berita/component/table.tsx @@ -9,7 +9,7 @@ import { listDataTracking, mediaTrackingSave, } from "@/service/media-tracking/media-tracking"; -import { error, loading } from "@/lib/swal"; +import { error } from "@/lib/swal"; import { toast } from "sonner"; import { DropdownMenu, @@ -20,31 +20,32 @@ import { } from "@/components/ui/dropdown-menu"; import { PaginationState } from "@tanstack/react-table"; import page from "../page"; +import CustomPagination from "@/components/table/custom-pagination"; +import { close, loading } from "@/config/swal"; export default function TrackingBeritaCard() { const [search, setSearch] = useState(""); const [content, setContent] = useState([]); const [selectedItems, setSelectedItems] = useState([]); - const [currentPage, setCurrentPage] = useState(1); - const [page, setPage] = React.useState(1); - const [showData, setShowData] = React.useState("10"); - const [pagination, setPagination] = React.useState({ - pageIndex: 0, - pageSize: Number(showData), - }); + const [page, setPage] = useState(1); + const [totalPage, setTotalPage] = useState(1); + const [showData, setShowData] = useState("6"); useEffect(() => { initFecth(); - }, [showData]); + }, [showData, page]); const initFecth = async () => { + loading(); const response = await listDataTracking(showData, page - 1); const data = response?.data?.data; const newData = data?.content; + setTotalPage(data?.totalPages || 1); newData.forEach((item: any, index: number) => { item.no = (page - 1) * Number(showData) + index + 1; }); setContent(response?.data?.data?.content || []); + close(); }; const fecthAll = async (keyword: string) => { @@ -117,17 +118,17 @@ export default function TrackingBeritaCard() { value={showData} onValueChange={setShowData} > - - 1 - 10 Data + + 1 - 6 Data - - 1 - 50 Data + + 1 - 12 Data - - 1 - 100 Data + + 1 - 60 Data - - 1 - 250 Data + + 1 - 120 Data @@ -150,48 +151,40 @@ export default function TrackingBeritaCard() { )}
- {content.map((item: any) => ( - handleSelect(item.id)} - > - {item.title} -
-
- {selectedItems.includes(item.id) && ( -
- )} + {content?.length > 1 && + content.map((item: any) => ( + handleSelect(item.id)} + > + {item.title} +
+
+ {selectedItems.includes(item.id) && ( +
+ )} +
-
-

- {item.title} -

-
- ))} +

+ {item.title} +

+ + ))}
- -
- -
{currentPage}
- +
+ {content && content?.length > 0 ? ( + setPage(data)} + /> + ) : ( +

No Data

+ )}
diff --git a/app/[locale]/(protected)/admin/settings/banner/component/table.tsx b/app/[locale]/(protected)/admin/settings/banner/component/table.tsx index 5b57778c..44d98ec7 100644 --- a/app/[locale]/(protected)/admin/settings/banner/component/table.tsx +++ b/app/[locale]/(protected)/admin/settings/banner/component/table.tsx @@ -69,6 +69,7 @@ import { data } from "jquery"; import { useToast } from "@/components/ui/use-toast"; import { setBanner } from "@/service/settings/settings"; import { id } from "date-fns/locale"; +import CustomPagination from "@/components/table/custom-pagination"; const ContentListBanner = () => { const router = useRouter(); @@ -120,10 +121,10 @@ const ContentListBanner = () => { React.useEffect(() => { fetchData(); - setPagination({ - pageIndex: 0, - pageSize: Number(showData), - }); + // setPagination({ + // pageIndex: 0, + // pageSize: Number(showData), + // }); }, [page, showData]); async function fetchData() { @@ -398,10 +399,15 @@ const ContentListBanner = () => {
))}
-
-
- 1 -
+
+ {data && data?.length > 0 ? ( + setPage(data)} + /> + ) : ( +

No Data

+ )}
diff --git a/components/table/custom-pagination.tsx b/components/table/custom-pagination.tsx new file mode 100644 index 00000000..cd3adfb6 --- /dev/null +++ b/components/table/custom-pagination.tsx @@ -0,0 +1,143 @@ +"use client"; +import { + Pagination, + PaginationContent, + PaginationEllipsis, + PaginationItem, + PaginationLink, + PaginationNext, + PaginationPrevious, +} from "@/components/ui/pagination"; + +import { useEffect, useState } from "react"; + +export default function CustomPagination(props: { + totalPage: number; + onPageChange: (data: number) => void; +}) { + const { totalPage, onPageChange } = props; + const [page, setPage] = useState(1); + + useEffect(() => { + onPageChange(page); + }, [page]); + + const renderPageNumbers = () => { + const pageNumbers = []; + const halfWindow = Math.floor(5 / 2); + let startPage = Math.max(2, page - halfWindow); + let endPage = Math.min(totalPage - 1, page + halfWindow); + + if (endPage - startPage + 1 < 5) { + if (page <= halfWindow) { + endPage = Math.min( + totalPage, + endPage + (5 - (endPage - startPage + 1)) + ); + } else if (page + halfWindow >= totalPage) { + startPage = Math.max(1, startPage - (5 - (endPage - startPage + 1))); + } + } + + if (startPage === endPage) { + return ""; + } + + for (let i = startPage; i <= endPage; i++) { + pageNumbers.push( + setPage(i)}> + {i} + + ); + } + + return pageNumbers; + }; + return ( + + + {page - 10 >= 1 && ( + + (page > 10 ? setPage(page - 10) : setPage(1))} + > + {/* */} + + + + + + )} + + + (page > 1 ? setPage(page - 1) : "")} + /> + + + setPage(1)} isActive={page === 1}> + {1} + + + {page > 4 && ( + + setPage(page - 1)} /> + + )} + {renderPageNumbers()} + {page < totalPage - 3 && ( + + setPage(page + 1)} /> + + )} + {totalPage > 1 && ( + + setPage(totalPage)} + isActive={page === totalPage} + > + {totalPage} + + + )} + + + (page < totalPage ? setPage(page + 1) : "")} + /> + + + {page + 10 <= totalPage && totalPage > 9 && ( + + + page < totalPage - 10 ? setPage(page + 10) : setPage(totalPage) + } + > + {/* */} + + + + + + )} + + + ); +}