import React, { FC, HTMLAttributes, ElementType } from 'react';
import classNames from 'classnames';
import { PagerItem } from '..';
export interface PagerProps extends HTMLAttributes {
/** Etichetta di descrizione del contenuto del componente Pager */
'aria-label': string;
/** Utilizzarlo in caso di utilizzo di componenti personalizzati */
tag?: ElementType;
/** Utilizzarlo in caso di utilizzo di componenti personalizzati per la l'elemento lista interno */
listTag?: ElementType;
/** Classi aggiuntive da usare per il componente Pager */
className?: string;
/** Classi aggiuntive da usare per il componente di lista interno Pager */
listClassName?: string;
/** Utilizzare questo attributo per indicare il numero totale di pagine */
total?: { ariaLabel: string; label: string };
testId?: string;
}
export const Pager: FC = ({
className,
tag = 'nav',
listTag: ListTag = 'ul',
listClassName,
children,
total,
testId,
...attributes
}) => {
const Tag = tag;
const classes = classNames(className, 'pagination-wrapper', {
'pagination-total': total
});
const listClasses = classNames(listClassName, 'pagination');
const { ariaLabel, label } = total || {};
const totalAriaLabel = ariaLabel ? {ariaLabel} : null;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const listChildren = React.Children.toArray(children).filter((child: any) => child.type === PagerItem);
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const extraChildren = React.Children.toArray(children).filter((child: any)=> child.type !== PagerItem);
// listChildren?.forEach(child => {
// console.log(child)
// })
return (
{listChildren}
{extraChildren}
{total ? (
{totalAriaLabel}
{label}
) : null}
);
};