/** @jsx h */ import { h } from 'preact'; import { cx } from '@algolia/ui-components-shared'; import { isSpecialClick } from '../../lib/utils'; import type { PaginationCSSClasses, PaginationTemplates, } from '../../widgets/pagination/pagination'; import type { ComponentCSSClasses } from '../../types'; export type PaginationComponentCSSClasses = ComponentCSSClasses; export type PaginationComponentTemplates = Required; export type PaginationProps = { createURL(value: number): string; cssClasses: PaginationComponentCSSClasses; templates: PaginationComponentTemplates; currentPage: number; nbPages: number; pages: number[]; isFirstPage: boolean; isLastPage: boolean; setCurrentPage(value: number): void; showFirst?: boolean; showLast?: boolean; showPrevious?: boolean; showNext?: boolean; }; function Pagination(props: PaginationProps) { function createClickHandler(pageNumber: number) { return (event: MouseEvent) => { if (isSpecialClick(event)) { // do not alter the default browser behavior // if one special key is down return; } event.preventDefault(); props.setCurrentPage(pageNumber); }; } return (
    {props.showFirst && ( )} {props.showPrevious && ( )} {props.pages.map((pageNumber) => ( ))} {props.showNext && ( )} {props.showLast && ( )}
); } type PaginationLinkProps = { label: string; ariaLabel: string; pageNumber: number; isDisabled?: boolean; isSelected?: boolean; className?: string; cssClasses: PaginationComponentCSSClasses; createURL(value: number): string; createClickHandler: (pageNumber: number) => (event: MouseEvent) => void; }; function PaginationLink({ label, ariaLabel, pageNumber, className, isDisabled = false, isSelected = false, cssClasses, createURL, createClickHandler, }: PaginationLinkProps) { return (
  • {isDisabled ? ( ) : ( )}
  • ); } export default Pagination;