import * as React from 'react'; import {TertiaryButton} from '@workday/canvas-kit-react/button'; import {ExtractProps, createComponent} from '@workday/canvas-kit-react/common'; import {systemIconStencil} from '@workday/canvas-kit-react/icon'; import {mergeStyles} from '@workday/canvas-kit-react/layout'; import {createStencil} from '@workday/canvas-kit-styling'; import { chevron2xLeftSmallIcon, chevron2xRightSmallIcon, chevronLeftSmallIcon, chevronRightSmallIcon, } from '@workday/canvas-system-icons-web'; import {component, system} from '@workday/canvas-tokens-web'; import {PaginationContext} from './usePaginationModel'; export interface ControlButtonProps extends ExtractProps { onClick?: React.MouseEventHandler; } export interface PaginationControlsProps {} export const paginationControlsStencil = createStencil({ base: { display: 'flex', gap: system.legacy.gap.xs, alignItems: 'center', }, }); const controlButtonStencil = createStencil({ base: { '& > span': { [systemIconStencil.vars.size]: component.legacy.systemIcon.size.xs, [systemIconStencil.vars.color]: system.color.fg.strong, }, '&:dir(rtl)': { '& .wd-icon': { transform: 'scaleX(-1)', }, }, }, }); export const PaginationControls = createComponent('div')({ displayName: 'Pagination.Controls', Component(elemProps: PaginationControlsProps, ref, Element) { return ; }, }); export const JumpToFirstButton = createComponent('button')({ displayName: 'Pagination.JumpToFirstButton', Component({onClick, ...restProps}: ControlButtonProps, ref, Element) { const model = React.useContext(PaginationContext); const isDisabled = model.state.currentPage <= model.state.firstPage; const handleClick = (e: React.MouseEvent) => { if (isDisabled) { return; } onClick?.(e); model.events.setCurrentPage(model.state.firstPage); }; return ( ); }, }); export const StepToPreviousButton = createComponent('button')({ displayName: 'Pagination.StepToPreviousButton', Component({onClick, ...restProps}: ControlButtonProps, ref, Element) { const model = React.useContext(PaginationContext); const isDisabled = model.state.currentPage <= model.state.firstPage; const handleClick = (e: React.MouseEvent) => { if (isDisabled) { return; } onClick?.(e); model.events.setCurrentPage(model.state.currentPage - 1); }; return ( ); }, }); export const StepToNextButton = createComponent('button')({ displayName: 'Pagination.StepToNextButton', Component({onClick, ...restProps}: ControlButtonProps, ref, Element) { const model = React.useContext(PaginationContext); const isDisabled = model.state.currentPage >= model.state.lastPage; const handleClick = (e: React.MouseEvent) => { if (isDisabled) { return; } onClick?.(e); model.events.setCurrentPage(model.state.currentPage + 1); }; return ( ); }, }); export const JumpToLastButton = createComponent('button')({ displayName: 'Paganation.JumpToLastButton', Component({onClick, ...restProps}: ControlButtonProps, ref, Element) { const model = React.useContext(PaginationContext); const isDisabled = model.state.currentPage >= model.state.lastPage; const handleClick = (e: React.MouseEvent) => { if (isDisabled) { return; } onClick?.(e); model.events.setCurrentPage(model.state.lastPage); }; return ( ); }, });