import {UseQueryResult} from '@tanstack/react-query'; import { hasNextPage, LengthAwarePaginationResponse, PaginatedBackendResponse, } from '../http/backend-response/pagination-response'; import {useNumberFormatter} from '../i18n/use-number-formatter'; import {Select} from '../ui/forms/select/select'; import {Trans} from '../i18n/trans'; import {Item} from '../ui/forms/listbox/item'; import {IconButton} from '../ui/buttons/icon-button'; import {KeyboardArrowLeftIcon} from '../icons/material/KeyboardArrowLeft'; import {KeyboardArrowRightIcon} from '../icons/material/KeyboardArrowRight'; import React from 'react'; import {useIsMobileMediaQuery} from '../utils/hooks/is-mobile-media-query'; import clsx from 'clsx'; const defaultPerPage = 15; const perPageOptions = [{key: 10}, {key: 15}, {key: 20}, {key: 50}, {key: 100}]; type DataTablePaginationFooterProps = { query: UseQueryResult, unknown>; onPerPageChange?: (perPage: number) => void; onPageChange?: (page: number) => void; className?: string; }; export function DataTablePaginationFooter({ query, onPerPageChange, onPageChange, className, }: DataTablePaginationFooterProps) { const isMobile = useIsMobileMediaQuery(); const numberFormatter = useNumberFormatter(); const pagination = query.data ?.pagination as LengthAwarePaginationResponse; if (!pagination) return null; const perPageSelect = onPerPageChange ? ( ) : null; return (
{!isMobile && perPageSelect} {pagination.from && pagination.to && 'total' in pagination && (
)}
{ onPageChange?.(pagination?.current_page - 1); }} > { onPageChange?.(pagination?.current_page + 1); }} >
); }