import React, { MouseEventHandler } from "react"; import { Pagination, ToggleTemplateProps, ToolbarItem, } from "@patternfly/react-core"; import { TableToolbar } from "./TableToolbar"; type TableToolbarProps = { count: number; first: number; max: number; onNextClick: (page: number) => void; onPreviousClick: (page: number) => void; onPerPageSelect: (max: number, first: number) => void; toolbarItem?: React.ReactNode; children: React.ReactNode; inputGroupName?: string; inputGroupPlaceholder?: string; inputGroupOnChange?: ( newInput: string, event: React.FormEvent ) => void; inputGroupOnClick?: MouseEventHandler; }; export const PaginatingTableToolbar = ({ count, first, max, onNextClick, onPreviousClick, onPerPageSelect, toolbarItem, children, inputGroupName, inputGroupPlaceholder, inputGroupOnChange, inputGroupOnClick, }: TableToolbarProps) => { const page = first / max; const pagination = (variant: "top" | "bottom" = "top") => ( ( {firstIndex} - {lastIndex} )} itemCount={count + page * max + (count <= max ? 1 : 0)} page={page + 1} perPage={max} onNextClick={(_, p) => onNextClick((p - 1) * max)} onPreviousClick={(_, p) => onPreviousClick((p - 1) * max)} onPerPageSelect={(_, m, f) => onPerPageSelect(f, m)} variant={variant} /> ); return ( {toolbarItem} {pagination()} } toolbarItemFooter={{pagination("bottom")}} inputGroupName={inputGroupName} inputGroupPlaceholder={inputGroupPlaceholder} inputGroupOnChange={inputGroupOnChange} inputGroupOnClick={inputGroupOnClick} > {children} ); };