@heycar-uikit/core
Version:
The React UI library from HeyCar
99 lines (98 loc) • 3.08 kB
TypeScript
/// <reference types="react" />
import React from 'react';
import { Locale } from "./locale/defaultLocale";
type CustomOnClick = (page: number) => void;
interface PaginationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'onClick'> {
/**
* `totalPages` - total number of pages
*/
totalPages: number;
/**
* `currentPage` - current page
*/
currentPage: number;
/**
* `renderItem` - template function to allow different components and props for PaginationItem
*/
renderItem?: (item: PaginationItemProps) => JSX.Element;
/**
* `onClick` - template function for onClick event of items
*/
onClick?: CustomOnClick;
/**
* `locale` - Object with localized strings
*/
locale?: Locale;
}
interface GetItemAriaLabelArgs {
type: PaginationItemAriaLabelType;
pageNumber: number;
isSelected: boolean;
}
type GetItemAriaLabel = ({ type, pageNumber, isSelected, }: GetItemAriaLabelArgs) => string;
declare enum PaginationItemAriaLabelType {
PageNumber = "pageNumber",
Previous = "previous",
Next = "next"
}
declare enum PaginationItemType {
PageNumber = "pageNumber",
Ellipsis = "ellipsis",
Slash = "slash",
Previous = "previous",
Next = "next"
}
interface PaginationItemProps {
/**
* In case of no onClick event on `Pagination` and desire to render an `a`nchor
*/
href?: string;
/**
* Type of item. Spread from `renderItem` of `Pagination`
*/
itemType: PaginationItemType;
/**
* Aria label. Spread from `renderItem` of `Pagination`
*/
'aria-label'?: string;
/**
* Page number. Spread from `renderItem` of `Pagination`
*/
page?: number;
/**
* Is this page disabled? Spread from `renderItem` of `Pagination`
*/
isDisabled?: boolean;
/**
* Is this page the current one? Spread from `renderItem` of `Pagination`
*/
isCurrentPage?: boolean;
/**
* onClick event. Spread from `renderItem` of `Pagination`
*/
onClick?: (itemNumber: number) => void;
}
/**
* `PropsBasedOnComponent` - This interface inherits props from a designated Component
*/
interface PropsBasedOnComponent<ComponentBaseProps, DefaultElement extends React.ElementType> {
<Component extends React.ElementType = DefaultElement>(props: {
/**
* The component used for the root node.
* Either a string to use a HTML element or a component.
*/
component?: Component;
} & ComponentBaseProps & Omit<React.ComponentPropsWithoutRef<Component>, keyof ComponentBaseProps>): JSX.Element | null;
}
type UsePaginationArgs = {
onClick?: CustomOnClick;
currentPage: number;
totalPages: number;
locale: Locale;
};
interface ParseOnClickArgs {
onClick?: CustomOnClick;
pageNumber: number;
isDisabled: boolean;
}
export { CustomOnClick, PaginationProps, GetItemAriaLabel, PaginationItemAriaLabelType, PaginationItemType, PaginationItemProps, PropsBasedOnComponent, UsePaginationArgs, ParseOnClickArgs };