diff --git a/apps/web/app/[locale]/dashboard/team-dashboard/[teamId]/components/team-stats-table.tsx b/apps/web/app/[locale]/dashboard/team-dashboard/[teamId]/components/team-stats-table.tsx
index 076ac9fc0..984583aff 100644
--- a/apps/web/app/[locale]/dashboard/team-dashboard/[teamId]/components/team-stats-table.tsx
+++ b/apps/web/app/[locale]/dashboard/team-dashboard/[teamId]/components/team-stats-table.tsx
@@ -3,6 +3,7 @@
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
import { Button } from '@/components/ui/button';
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table';
+import { PaginationDropdown } from '@/lib/settings/page-dropdown';
import { format } from 'date-fns';
import { ITimerLogGrouped } from '@/app/interfaces';
import { Spinner } from '@/components/ui/loaders/spinner';
@@ -34,8 +35,6 @@ const formatPercentage = (value: number) => {
return `${Math.round(value)}%`;
};
-const ITEMS_PER_PAGE = 10;
-
export function TeamStatsTable({
rapportDailyActivity,
isLoading
@@ -44,9 +43,10 @@ export function TeamStatsTable({
isLoading?: boolean;
}) {
const [currentPage, setCurrentPage] = useState(1);
- const totalPages = rapportDailyActivity ? Math.ceil(rapportDailyActivity.length / ITEMS_PER_PAGE) : 0;
- const startIndex = (currentPage - 1) * ITEMS_PER_PAGE;
- const endIndex = startIndex + ITEMS_PER_PAGE;
+ const [pageSize, setPageSize] = useState(10);
+ const totalPages = rapportDailyActivity ? Math.ceil(rapportDailyActivity.length / pageSize) : 0;
+ const startIndex = (currentPage - 1) * pageSize;
+ const endIndex = startIndex + pageSize;
const { openModal, closeModal, isOpen } = useModal();
const paginatedData = rapportDailyActivity?.slice(startIndex, endIndex);
@@ -68,7 +68,11 @@ export function TeamStatsTable({
}
if (!rapportDailyActivity?.length) {
- return
No data available
;
+ return (
+
+ No data available
+
+ );
}
return (
@@ -94,9 +98,7 @@ export function TeamStatsTable({
{paginatedData?.map((dayData) => (
-
+
{format(new Date(dayData.date), 'EEEE dd MMM yyyy')}
@@ -188,11 +190,7 @@ export function TeamStatsTable({
-
-
- Showing {startIndex + 1} to {Math.min(endIndex, rapportDailyActivity.length)} of{' '}
- {rapportDailyActivity.length} entries
-
+
+
+
{
+ setPageSize(value);
+ setCurrentPage(1);
+ }}
+ total={rapportDailyActivity?.length}
+ />
+
+ Showing {startIndex + 1} to {Math.min(endIndex, rapportDailyActivity?.length || 0)} of{' '}
+ {rapportDailyActivity?.length || 0} entries
+
+
);
diff --git a/apps/web/lib/settings/page-dropdown.tsx b/apps/web/lib/settings/page-dropdown.tsx
index 2ec58e82e..0899827b5 100644
--- a/apps/web/lib/settings/page-dropdown.tsx
+++ b/apps/web/lib/settings/page-dropdown.tsx
@@ -10,11 +10,29 @@ import { ChevronDownIcon } from 'lucide-react';
export const PaginationDropdown = ({
setValue,
- active
+ active,
+ total
}: {
setValue: Dispatch>;
active?: IPagination | null;
+ total?: number;
}) => {
+ const calculatePaginationOptions = useCallback((total = 0) => {
+ const baseOptions = [10, 20, 30,40, 50];
+
+ if (total > 50) {
+ const nextOption = Math.ceil(total / 10) * 10;
+ if (!baseOptions.includes(nextOption)) {
+ baseOptions.push(nextOption);
+ }
+ }
+ baseOptions.sort((a, b) => a - b);
+
+ return baseOptions.map(size => ({
+ title: size.toString()
+ }));
+ }, []);
+
const [paginationList, setPagination] = useState([
{
title: '10'
@@ -33,6 +51,12 @@ export const PaginationDropdown = ({
}
]);
+ useEffect(() => {
+ if (total) {
+ setPagination(calculatePaginationOptions(total));
+ }
+ }, [total, calculatePaginationOptions]);
+
const items: PaginationItems[] = useMemo(() => mappaginationItems(paginationList), [paginationList]);
const [open, setOpen] = useState(false);
const [paginationItem, setPaginationItem] = useState();
@@ -72,9 +96,9 @@ export const PaginationDropdown = ({
onClick={() => setOpen(!open)}
className={clsxm(
'input-border',
- 'w-full flex justify-between rounded-xl px-3 py-2 text-sm items-center',
+ 'flex justify-between items-center px-3 py-2 w-full text-sm rounded-xl',
'font-normal outline-none',
- 'py-0 font-medium h-[45px] w-[145px] z-10 outline-none dark:bg-dark--theme-light'
+ 'z-10 py-0 font-medium outline-none h-[45px] w-[145px] dark:bg-dark--theme-light'
)}
>
{paginationItem?.selectedLabel || (paginationItem?.Label && )}{' '}