Skip to content

Commit

Permalink
feat(clay-pagination): allow disabling ellipsis button in pagination
Browse files Browse the repository at this point in the history
  • Loading branch information
victorg1991 committed Feb 3, 2022
1 parent d7340f8 commit 4e4e84c
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 7 deletions.
22 changes: 15 additions & 7 deletions packages/clay-pagination/src/Ellipsis.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export interface IPaginationEllipsisProps {
alignmentPosition?: React.ComponentProps<
typeof ClayDropDownWithItems
>['alignmentPosition'];
disabled?: boolean;
disabledPages?: Array<number>;
hrefConstructor?: (page?: number) => string;
items?: Array<number>;
Expand All @@ -20,17 +21,20 @@ export interface IPaginationEllipsisProps {
const ClayPaginationEllipsis: React.FunctionComponent<IPaginationEllipsisProps> =
({
alignmentPosition,
disabled = false,
disabledPages = [],
hrefConstructor,
items = [],
onPageChange,
}: IPaginationEllipsisProps) => {
const pages = items.map((page) => ({
disabled: disabledPages.includes(page),
href: hrefConstructor ? hrefConstructor(page) : undefined,
label: String(page),
onClick: () => onPageChange && onPageChange(page),
}));
const pages = disabled
? []
: items.map((page) => ({
disabled: disabledPages.includes(page),
href: hrefConstructor ? hrefConstructor(page) : undefined,
label: String(page),
onClick: () => onPageChange && onPageChange(page),
}));

return (
<ClayDropDownWithItems
Expand All @@ -39,7 +43,11 @@ const ClayPaginationEllipsis: React.FunctionComponent<IPaginationEllipsisProps>
containerElement="li"
items={pages}
trigger={
<ClayButton className="page-link" displayType="unstyled">
<ClayButton
className="page-link"
disabled={disabled}
displayType="unstyled"
>
...
</ClayButton>
}
Expand Down
7 changes: 7 additions & 0 deletions packages/clay-pagination/src/PaginationWithBasicItems.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,11 @@ interface IProps extends React.ComponentProps<typeof Pagination> {
*/
ellipsisBuffer?: number;

/**
* Flag to disable ellipsis button
*/
disableEllipsis?: boolean;

/**
* The page numbers that should be disabled. For example, `[2,5,6]`.
*/
Expand Down Expand Up @@ -75,6 +80,7 @@ const ClayPaginationWithBasicItems = React.forwardRef<HTMLUListElement, IProps>(
next: 'Next',
previous: 'Previous',
},
disableEllipsis = false,
disabledPages = [],
ellipsisBuffer = ELLIPSIS_BUFFER,
hrefConstructor,
Expand Down Expand Up @@ -113,6 +119,7 @@ const ClayPaginationWithBasicItems = React.forwardRef<HTMLUListElement, IProps>(
EllipsisComponent: Pagination.Ellipsis,
ellipsisProps: {
alignmentPosition,
disabled: disableEllipsis,
disabledPages,
hrefConstructor,
onPageChange,
Expand Down
16 changes: 16 additions & 0 deletions packages/clay-pagination/src/__tests__/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
* SPDX-License-Identifier: BSD-3-Clause
*/

import '@testing-library/jest-dom/extend-expect';
import {ClayPaginationWithBasicItems} from '..';
import {cleanup, fireEvent, getByText, render} from '@testing-library/react';
import React from 'react';
Expand Down Expand Up @@ -76,6 +77,21 @@ describe('ClayPagination', () => {
expect(changeMock).toHaveBeenLastCalledWith(25);
});

it('disable ellipsis when disableEllipsis prop is passed', () => {
const {getAllByText} = render(
<ClayPaginationWithBasicItems
activePage={12}
disableEllipsis
spritemap={spritemap}
totalPages={25}
/>
);

getAllByText('...').forEach((ellipsisButton) =>
expect(ellipsisButton).toBeDisabled()
);
});

it('shows dropdown when ellipsis is clicked', () => {
const {getAllByText} = render(
<ClayPaginationWithBasicItems
Expand Down

0 comments on commit 4e4e84c

Please sign in to comment.