| /**
 * External dependencies
 */
import { useState } from '@wordpress/element';
import ReactPaginate from 'react-paginate';
interface IPagination {
    /**
     * How many items per page.
     */
    perPage: number;
    /**
     * Total items.
     */
    total: number;
    /**
     * Current page.
     */
    currentPage: number;
    /**
     * Paginate handler.
     */
    paginate: Function;
}
const defaultProps = {
    perPage: 10,
    total: 0,
    currentPage: 1,
    paginate: () => {},
};
const Pagination = (props: IPagination) => {
    const { perPage, total, paginate, currentPage } = props;
    const [current, setCurrent] = useState(currentPage);
    const boxClassName = `relative inline-flex items-center border text-sm font-medium`;
    const activeClassName = `bg-white border-slate-300 text-primary hover:text-primary-dark hover:bg-blue-200`;
    const inactiveClassName = `bg-white border-slate-300 text-gray-500 hover:bg-blue-200 hover:text-primary-dark`;
    const totalPage = Math.ceil(total / perPage);
    return (
        <div className="py-2 flex">
            <div className="flex-1 text-left">
                <p className="text-sm text-gray-700">
                    <span>
                        <span className="font-medium"> {total} </span> items -{' '}
                    </span>
                    <span>
                        Page <span className="font-medium"> {current} </span>
                    </span>
                    {totalPage > 0 && (
                        <span>
                            of{' '}
                            <span className="font-medium"> {totalPage} </span>
                        </span>
                    )}
                </p>
            </div>
            {totalPage > 1 && (
                <nav className="flex flex-1 justify-end justify-items-end">
                    <ul className="flex pl-0 rounded list-none flex-wrap">
                        <li>
                            <ReactPaginate
                                pageCount={Math.ceil(total / perPage)}
                                onPageChange={(page) => {
                                    paginate(page.selected + 1);
                                    setCurrent(page.selected + 1);
                                }}
                                initialPage={current - 1}
                                previousLabel={'<'}
                                nextLabel={'>'}
                                breakLabel={'...'}
                                breakClassName={`${boxClassName} ${inactiveClassName} `}
                                marginPagesDisplayed={2}
                                pageRangeDisplayed={2}
                                containerClassName={'flex'}
                                activeClassName={`${boxClassName} ${activeClassName} `}
                                pageClassName={`${boxClassName} ${inactiveClassName} `}
                                pageLinkClassName="px-4 py-2 text-[#cdcccc]"
                                activeLinkClassName="px-4 py-2 text-primary-dark"
                                nextClassName={`${boxClassName} ${activeClassName} `}
                                nextLinkClassName="px-4 py-2"
                                previousClassName={`${boxClassName} ${activeClassName} `}
                                previousLinkClassName="px-4 py-2"
                                disabledClassName="bg-white"
                                disabledLinkClassName="disabled:opacity-75 text-gray cursor-not-allowed hover:bg-opacity-75"
                                disableInitialCallback
                            />
                        </li>
                    </ul>
                </nav>
            )}
        </div>
    );
};
Pagination.defaultProps = defaultProps;
export default Pagination;
 |