From 756d2e429dca283cbb47ac7a4b73b68d8a3f6cf3 Mon Sep 17 00:00:00 2001
From: cchaos
Date: Mon, 1 Nov 2021 15:25:34 -0400
Subject: [PATCH 01/35] Fix console error of Custom table example
---
src-docs/src/views/tables/custom/custom.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src-docs/src/views/tables/custom/custom.js b/src-docs/src/views/tables/custom/custom.js
index a906a22b0da..e48bf46e856 100644
--- a/src-docs/src/views/tables/custom/custom.js
+++ b/src-docs/src/views/tables/custom/custom.js
@@ -756,7 +756,7 @@ export default class extends Component {
Date: Mon, 1 Nov 2021 17:01:15 -0400
Subject: [PATCH 02/35] [EuiPagination] Allowing `null` if `pageCount` is
unknown
---
.../in_memory_table.test.tsx.snap | 150 ++---
.../__snapshots__/pagination.test.tsx.snap | 543 ++++++++++++++++++
src/components/pagination/pagination.test.tsx | 34 ++
src/components/pagination/pagination.tsx | 390 ++++++++-----
4 files changed, 891 insertions(+), 226 deletions(-)
diff --git a/src/components/basic_table/__snapshots__/in_memory_table.test.tsx.snap b/src/components/basic_table/__snapshots__/in_memory_table.test.tsx.snap
index 43e8529e7a3..3b1af414703 100644
--- a/src/components/basic_table/__snapshots__/in_memory_table.test.tsx.snap
+++ b/src/components/basic_table/__snapshots__/in_memory_table.test.tsx.snap
@@ -485,56 +485,64 @@ exports[`EuiInMemoryTable behavior pagination 1`] = `
aria-label="Pagination for table: "
className="euiPagination"
>
-
-
-
-
-
-
-
-
+ type="arrowLeft"
+ >
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
+ type="arrowRight"
+ >
+
+
+
+
+
-
+
diff --git a/src/components/pagination/__snapshots__/pagination.test.tsx.snap b/src/components/pagination/__snapshots__/pagination.test.tsx.snap
index 4e4fcc5c9f4..606a7c2bc47 100644
--- a/src/components/pagination/__snapshots__/pagination.test.tsx.snap
+++ b/src/components/pagination/__snapshots__/pagination.test.tsx.snap
@@ -63,3 +63,546 @@ exports[`EuiPagination is rendered 1`] = `
`;
+
+exports[`EuiPagination props activePage is rendered 1`] = `
+
+`;
+
+exports[`EuiPagination props aria-controls is rendered 1`] = `
+
+`;
+
+exports[`EuiPagination props compressed is rendered 1`] = `
+
+`;
+
+exports[`EuiPagination props pageCount can be null 1`] = `
+
+`;
+
+exports[`EuiPagination props pageCount is rendered 1`] = `
+
+`;
diff --git a/src/components/pagination/pagination.test.tsx b/src/components/pagination/pagination.test.tsx
index 9a817f8eb1f..4afed958c97 100644
--- a/src/components/pagination/pagination.test.tsx
+++ b/src/components/pagination/pagination.test.tsx
@@ -18,4 +18,38 @@ describe('EuiPagination', () => {
expect(component).toMatchSnapshot();
});
+
+ describe('props', () => {
+ describe('pageCount', () => {
+ test('is rendered', () => {
+ const component = render( );
+
+ expect(component).toMatchSnapshot();
+ });
+
+ test('can be null', () => {
+ const component = render( );
+
+ expect(component).toMatchSnapshot();
+ });
+ });
+
+ test('activePage is rendered', () => {
+ const component = render( );
+
+ expect(component).toMatchSnapshot();
+ });
+
+ test('compressed is rendered', () => {
+ const component = render( );
+
+ expect(component).toMatchSnapshot();
+ });
+
+ test('aria-controls is rendered', () => {
+ const component = render( );
+
+ expect(component).toMatchSnapshot();
+ });
+ });
});
diff --git a/src/components/pagination/pagination.tsx b/src/components/pagination/pagination.tsx
index 9d52aa4f156..130e3f3d4f3 100644
--- a/src/components/pagination/pagination.tsx
+++ b/src/components/pagination/pagination.tsx
@@ -25,8 +25,9 @@ type SafeClickHandler = (e: MouseEvent, pageIndex: number) => void;
export interface EuiPaginationProps {
/**
* The total number of pages.
+ * Pass `null` if total count in unknown.
*/
- pageCount?: number;
+ pageCount?: number | null;
/**
* The current page using a zero based index.
@@ -42,7 +43,7 @@ export interface EuiPaginationProps {
compressed?: boolean;
/**
- * If passed in, passes value through to each button to set aria-controls
+ * If passed in, passes value through to each button to set aria-controls.
*/
'aria-controls'?: string;
}
@@ -72,40 +73,230 @@ export const EuiPagination: FunctionComponent = ({
onPageClick(pageIndex);
};
- const sharedButtonProps = { activePage, pageCount, ariaControls, safeClick };
-
const classes = classNames('euiPagination', className);
const hasControl = ariaControls !== undefined;
- const pages = [];
- const firstPageInRange = Math.max(
- 0,
- Math.min(
- activePage - NUMBER_SURROUNDING_PAGES,
- pageCount - MAX_VISIBLE_PAGES
- )
+
+ const nextButton = (
+
);
- const lastPageInRange = Math.min(
- pageCount,
- firstPageInRange + MAX_VISIBLE_PAGES
+
+ const previousButton = (
+
);
- for (let i = firstPageInRange, index = 0; i < lastPageInRange; i++, index++) {
- pages.push(
-
- );
+ let centerPageCount;
+
+ if (pageCount) {
+ const sharedButtonProps = {
+ activePage,
+ ariaControls,
+ safeClick,
+ pageCount,
+ };
+
+ if (compressed) {
+ centerPageCount = (
+
+
+
+ ),
+ total: (
+
+ ),
+ }}
+ />
+
+
+ );
+ } else {
+ const pages = [];
+
+ const firstPageInRange = Math.max(
+ 0,
+ Math.min(
+ activePage - NUMBER_SURROUNDING_PAGES,
+ pageCount - MAX_VISIBLE_PAGES
+ )
+ );
+ const lastPageInRange = Math.min(
+ pageCount,
+ firstPageInRange + MAX_VISIBLE_PAGES
+ );
+
+ for (
+ let i = firstPageInRange, index = 0;
+ i < lastPageInRange;
+ i++, index++
+ ) {
+ pages.push(
+
+ );
+ }
+
+ const firstPageButtons = [];
+
+ if (firstPageInRange > 0) {
+ firstPageButtons.push(
+
+ );
+
+ if (firstPageInRange > 1 && firstPageInRange !== 2) {
+ firstPageButtons.push(
+
+ {(firstRangeAriaLabel: string) => (
+
+ …
+
+ )}
+
+ );
+ } else if (firstPageInRange === 2) {
+ firstPageButtons.push(
+
+ );
+ }
+ }
+
+ const lastPageButtons = [];
+
+ if (lastPageInRange < pageCount) {
+ if (lastPageInRange + 1 === pageCount - 1) {
+ lastPageButtons.push(
+
+ );
+ } else if (lastPageInRange < pageCount - 1) {
+ lastPageButtons.push(
+
+ {(lastRangeAriaLabel: string) => (
+
+ …
+
+ )}
+
+ );
+ }
+
+ lastPageButtons.push(
+
+ );
+ }
+
+ const selectablePages = pages;
+
+ const accessibleName = {
+ ...(rest['aria-label'] && { 'aria-label': rest['aria-label'] }),
+ ...(rest['aria-labelledby'] && {
+ 'aria-labelledby': rest['aria-labelledby'],
+ }),
+ };
+
+ centerPageCount = (
+
+ {firstPageButtons}
+ {selectablePages}
+ {lastPageButtons}
+
+ );
+ }
}
+ return (
+
+ {previousButton}
+ {centerPageCount}
+ {nextButton}
+
+ );
+};
+
+const PaginationButtonPrevious = ({
+ hasControl,
+ activePage,
+ disabled,
+ ariaControls,
+ safeClick,
+}: {
+ hasControl?: boolean;
+ activePage: number;
+ disabled?: boolean;
+ ariaControls?: string;
+ safeClick: SafeClickHandler;
+}) => {
let prevPageButtonProps = {};
- if (hasControl && activePage !== 0) {
+ if (hasControl && !disabled) {
prevPageButtonProps = {
'aria-controls': ariaControls,
href: `#${ariaControls}`,
};
} else {
- prevPageButtonProps = { disabled: activePage === 0 };
+ prevPageButtonProps = { disabled };
}
- const previousButton = (
+ return (
= ({
onClick={(e: MouseEvent) => safeClick(e, activePage - 1)}
iconType="arrowLeft"
color="text"
- aria-label={
- activePage === 0 ? disabledPreviousPage : previousPage
- }
+ aria-label={disabled ? disabledPreviousPage : previousPage}
data-test-subj="pagination-button-previous"
{...prevPageButtonProps}
/>
@@ -132,90 +321,32 @@ export const EuiPagination: FunctionComponent = ({
)}
);
+};
- const firstPageButtons = [];
-
- if (firstPageInRange > 0) {
- firstPageButtons.push(
-
- );
-
- if (firstPageInRange > 1 && firstPageInRange !== 2) {
- firstPageButtons.push(
-
- {(firstRangeAriaLabel: string) => (
-
- …
-
- )}
-
- );
- } else if (firstPageInRange === 2) {
- firstPageButtons.push(
-
- );
- }
- }
-
- const lastPageButtons = [];
-
- if (lastPageInRange < pageCount) {
- if (lastPageInRange + 1 === pageCount - 1) {
- lastPageButtons.push(
-
- );
- } else if (lastPageInRange < pageCount - 1) {
- lastPageButtons.push(
-
- {(lastRangeAriaLabel: string) => (
-
- …
-
- )}
-
- );
- }
-
- lastPageButtons.push(
-
- );
- }
-
+const PaginationButtonNext = ({
+ hasControl,
+ activePage,
+ disabled,
+ ariaControls,
+ safeClick,
+}: {
+ hasControl?: boolean;
+ activePage: number;
+ disabled?: boolean;
+ ariaControls?: string;
+ safeClick: SafeClickHandler;
+}) => {
let nextPageButtonProps = {};
- if (hasControl && activePage !== pageCount - 1) {
+ if (hasControl && !disabled) {
nextPageButtonProps = {
'aria-controls': ariaControls,
href: `#${ariaControls}`,
};
} else {
- nextPageButtonProps = { disabled: activePage === pageCount - 1 };
+ nextPageButtonProps = { disabled };
}
- const nextButton = (
+ return (
= ({
safeClick(e, activePage + 1)}
iconType="arrowRight"
- aria-label={
- activePage === pageCount - 1 ? disabledNextPage : nextPage
- }
+ aria-label={disabled ? disabledNextPage : nextPage}
color="text"
data-test-subj="pagination-button-next"
{...nextPageButtonProps}
@@ -239,63 +368,6 @@ export const EuiPagination: FunctionComponent = ({
)}
);
-
- const selectablePages = pages;
-
- if (compressed) {
- const firstPageButtonCompressed = (
-
- );
- const lastPageButtonCompressed = (
-
- );
-
- return (
-
- {previousButton}
-
-
-
-
-
- {nextButton}
-
- );
- }
-
- const accessibleName = {
- ...(rest['aria-label'] && { 'aria-label': rest['aria-label'] }),
- ...(rest['aria-labelledby'] && {
- 'aria-labelledby': rest['aria-labelledby'],
- }),
- };
-
- return (
-
- {previousButton}
-
- {firstPageButtons}
- {selectablePages}
- {lastPageButtons}
-
- {nextButton}
-
- );
};
const PaginationButtonWrapper = ({
From faf9b6dcf8f3de210adb2eb732778015ef96e0f4 Mon Sep 17 00:00:00 2001
From: cchaos
Date: Mon, 1 Nov 2021 17:18:10 -0400
Subject: [PATCH 03/35] =?UTF-8?q?[EuiPagination]=20Added=20tooltip=20aroun?=
=?UTF-8?q?d=20prev/next=20buttons=20and=20added=20`'arrows=E2=80=99`=20op?=
=?UTF-8?q?tion=20for=20`compressed`?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../in_memory_table.test.tsx.snap | 157 ++++---
.../__snapshots__/data_grid.test.tsx.snap | 62 +--
.../__snapshots__/pagination.test.tsx.snap | 397 +++++++++++-------
src/components/pagination/pagination.test.tsx | 13 +-
src/components/pagination/pagination.tsx | 46 +-
.../table_pagination.test.tsx.snap | 112 ++---
6 files changed, 475 insertions(+), 312 deletions(-)
diff --git a/src/components/basic_table/__snapshots__/in_memory_table.test.tsx.snap b/src/components/basic_table/__snapshots__/in_memory_table.test.tsx.snap
index 3b1af414703..79f680958a4 100644
--- a/src/components/basic_table/__snapshots__/in_memory_table.test.tsx.snap
+++ b/src/components/basic_table/__snapshots__/in_memory_table.test.tsx.snap
@@ -505,41 +505,58 @@ exports[`EuiInMemoryTable behavior pagination 1`] = `
default="Previous page"
token="euiPagination.disabledPreviousPage"
>
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
@@ -740,39 +757,55 @@ exports[`EuiInMemoryTable behavior pagination 1`] = `
default="Next page"
token="euiPagination.disabledNextPage"
>
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/src/components/datagrid/__snapshots__/data_grid.test.tsx.snap b/src/components/datagrid/__snapshots__/data_grid.test.tsx.snap
index 27962a9b854..8321d16cf54 100644
--- a/src/components/datagrid/__snapshots__/data_grid.test.tsx.snap
+++ b/src/components/datagrid/__snapshots__/data_grid.test.tsx.snap
@@ -43,21 +43,25 @@ exports[`EuiDataGrid pagination renders 1`] = `
aria-label="Pagination for preceding grid: test grid"
class="euiPagination"
>
-
-
-
+
+
+
+
-
-
-
+
+
+
+
diff --git a/src/components/pagination/__snapshots__/pagination.test.tsx.snap b/src/components/pagination/__snapshots__/pagination.test.tsx.snap
index 606a7c2bc47..04ee83b25aa 100644
--- a/src/components/pagination/__snapshots__/pagination.test.tsx.snap
+++ b/src/components/pagination/__snapshots__/pagination.test.tsx.snap
@@ -6,20 +6,24 @@ exports[`EuiPagination is rendered 1`] = `
class="euiPagination testClass1 testClass2"
data-test-subj="test subject string"
>
-
-
-
+
+
+
+
-
-
-
+
+
+
+
`;
@@ -68,19 +76,23 @@ exports[`EuiPagination props activePage is rendered 1`] = `
`;
@@ -273,20 +289,24 @@ exports[`EuiPagination props aria-controls is rendered 1`] = `
`;
-exports[`EuiPagination props compressed is rendered 1`] = `
+exports[`EuiPagination props compressed is rendered 1`] = `
+`;
+
+exports[`EuiPagination props compressed arrows is rendered 1`] = `
+
`;
@@ -411,33 +486,41 @@ exports[`EuiPagination props pageCount can be null 1`] = `
`;
@@ -445,20 +528,24 @@ exports[`EuiPagination props pageCount is rendered 1`] = `
`;
diff --git a/src/components/pagination/pagination.test.tsx b/src/components/pagination/pagination.test.tsx
index 4afed958c97..0f3fe573594 100644
--- a/src/components/pagination/pagination.test.tsx
+++ b/src/components/pagination/pagination.test.tsx
@@ -40,10 +40,17 @@ describe('EuiPagination', () => {
expect(component).toMatchSnapshot();
});
- test('compressed is rendered', () => {
- const component = render( );
+ describe('compressed', () => {
+ test(' is rendered', () => {
+ const component = render( );
- expect(component).toMatchSnapshot();
+ expect(component).toMatchSnapshot();
+ });
+ test('arrows is rendered', () => {
+ const component = render( );
+
+ expect(component).toMatchSnapshot();
+ });
});
test('aria-controls is rendered', () => {
diff --git a/src/components/pagination/pagination.tsx b/src/components/pagination/pagination.tsx
index 130e3f3d4f3..14403926199 100644
--- a/src/components/pagination/pagination.tsx
+++ b/src/components/pagination/pagination.tsx
@@ -15,6 +15,7 @@ import { EuiButtonIcon } from '../button';
import { EuiI18n } from '../i18n';
import { EuiText } from '../text';
import { EuiHideFor } from '../responsive';
+import { EuiToolTip } from '../tool_tip';
const MAX_VISIBLE_PAGES = 5;
const NUMBER_SURROUNDING_PAGES = Math.floor(MAX_VISIBLE_PAGES * 0.5);
@@ -40,7 +41,7 @@ export interface EuiPaginationProps {
/**
* If true, will only show next/prev arrows instead of page numbers.
*/
- compressed?: boolean;
+ compressed?: boolean | 'arrows';
/**
* If passed in, passes value through to each button to set aria-controls.
@@ -106,7 +107,7 @@ export const EuiPagination: FunctionComponent = ({
pageCount,
};
- if (compressed) {
+ if (compressed === true) {
centerPageCount = (
@@ -133,7 +134,7 @@ export const EuiPagination: FunctionComponent = ({
);
- } else {
+ } else if (compressed !== 'arrows') {
const pages = [];
const firstPageInRange = Math.max(
@@ -308,14 +309,19 @@ const PaginationButtonPrevious = ({
default="Previous page"
>
{(disabledPreviousPage: string) => (
- safeClick(e, activePage - 1)}
- iconType="arrowLeft"
- color="text"
- aria-label={disabled ? disabledPreviousPage : previousPage}
- data-test-subj="pagination-button-previous"
- {...prevPageButtonProps}
- />
+
+ safeClick(e, activePage - 1)}
+ iconType="arrowLeft"
+ color="text"
+ aria-label={disabled ? disabledPreviousPage : previousPage}
+ data-test-subj="pagination-button-previous"
+ {...prevPageButtonProps}
+ />
+
)}
)}
@@ -355,14 +361,16 @@ const PaginationButtonNext = ({
{(nextPage: string) => (
{(disabledNextPage: string) => (
- safeClick(e, activePage + 1)}
- iconType="arrowRight"
- aria-label={disabled ? disabledNextPage : nextPage}
- color="text"
- data-test-subj="pagination-button-next"
- {...nextPageButtonProps}
- />
+
+ safeClick(e, activePage + 1)}
+ iconType="arrowRight"
+ aria-label={disabled ? disabledNextPage : nextPage}
+ color="text"
+ data-test-subj="pagination-button-next"
+ {...nextPageButtonProps}
+ />
+
)}
)}
diff --git a/src/components/table/table_pagination/__snapshots__/table_pagination.test.tsx.snap b/src/components/table/table_pagination/__snapshots__/table_pagination.test.tsx.snap
index 0fa07f8016b..54fb2e4b40d 100644
--- a/src/components/table/table_pagination/__snapshots__/table_pagination.test.tsx.snap
+++ b/src/components/table/table_pagination/__snapshots__/table_pagination.test.tsx.snap
@@ -44,19 +44,23 @@ exports[`EuiTablePagination is rendered 1`] = `
class="euiPagination testClass1 testClass2"
data-test-subj="test subject string"
>
-
-
-
+
+
+
+
-
-
-
+
+
+
+
@@ -197,19 +205,23 @@ exports[`EuiTablePagination is rendered when hiding the per page options 1`] = `
class="euiPagination testClass1 testClass2"
data-test-subj="test subject string"
>
-
-
-
+
+
+
+
-
-
-
+
+
+
+
From ddf394088d7d70f412f2d38d24ab562ea4f3a508 Mon Sep 17 00:00:00 2001
From: cchaos
Date: Mon, 1 Nov 2021 17:35:12 -0400
Subject: [PATCH 04/35] [EuiIcon] Added `doubleArrowLeft` and
`doubleArrowRight` while also updating the other `arrow` icons to a thicker
weight
---
src-docs/src/views/icon/icons.js | 2 +
.../icon/__snapshots__/icon.test.tsx.snap | 66 ++++++++++++++++---
src/components/icon/assets/arrow_down.tsx | 7 +-
src/components/icon/assets/arrow_left.tsx | 7 +-
src/components/icon/assets/arrow_right.tsx | 7 +-
src/components/icon/assets/arrow_up.tsx | 7 +-
.../icon/assets/doubleArrowLeft.tsx | 43 ++++++++++++
.../icon/assets/doubleArrowRight.tsx | 43 ++++++++++++
src/components/icon/icon.tsx | 2 +
src/components/icon/svgs/arrow_down.svg | 6 +-
src/components/icon/svgs/arrow_left.svg | 6 +-
src/components/icon/svgs/arrow_right.svg | 6 +-
src/components/icon/svgs/arrow_up.svg | 6 +-
src/components/icon/svgs/doubleArrowLeft.svg | 4 ++
src/components/icon/svgs/doubleArrowRight.svg | 4 ++
15 files changed, 180 insertions(+), 36 deletions(-)
create mode 100644 src/components/icon/assets/doubleArrowLeft.tsx
create mode 100644 src/components/icon/assets/doubleArrowRight.tsx
create mode 100644 src/components/icon/svgs/doubleArrowLeft.svg
create mode 100644 src/components/icon/svgs/doubleArrowRight.svg
diff --git a/src-docs/src/views/icon/icons.js b/src-docs/src/views/icon/icons.js
index abf1f690a4d..75196ac4407 100644
--- a/src-docs/src/views/icon/icons.js
+++ b/src-docs/src/views/icon/icons.js
@@ -64,6 +64,8 @@ export const iconTypes = [
'documentEdit',
'documents',
'dot',
+ 'doubleArrowLeft',
+ 'doubleArrowRight',
'download',
'email',
'empty',
diff --git a/src/components/icon/__snapshots__/icon.test.tsx.snap b/src/components/icon/__snapshots__/icon.test.tsx.snap
index c182fddcced..f532637cab8 100644
--- a/src/components/icon/__snapshots__/icon.test.tsx.snap
+++ b/src/components/icon/__snapshots__/icon.test.tsx.snap
@@ -704,6 +704,7 @@ exports[`EuiIcon props type arrowDown is rendered 1`] = `
`;
@@ -722,6 +723,7 @@ exports[`EuiIcon props type arrowLeft is rendered 1`] = `
`;
@@ -740,6 +742,7 @@ exports[`EuiIcon props type arrowRight is rendered 1`] = `
`;
@@ -758,6 +761,7 @@ exports[`EuiIcon props type arrowUp is rendered 1`] = `
`;
@@ -1819,6 +1823,52 @@ exports[`EuiIcon props type dot is rendered 1`] = `
`;
+exports[`EuiIcon props type doubleArrowLeft is rendered 1`] = `
+
+
+
+
+`;
+
+exports[`EuiIcon props type doubleArrowRight is rendered 1`] = `
+
+
+
+
+`;
+
exports[`EuiIcon props type download is rendered 1`] = `
& SVGRProps) => (
{title ? {title} : null}
);
diff --git a/src/components/icon/assets/arrow_left.tsx b/src/components/icon/assets/arrow_left.tsx
index 8e4b4612df5..fdf6d474de6 100644
--- a/src/components/icon/assets/arrow_left.tsx
+++ b/src/components/icon/assets/arrow_left.tsx
@@ -20,17 +20,18 @@ const EuiIconArrowLeft = ({
...props
}: React.SVGProps & SVGRProps) => (
{title ? {title} : null}
);
diff --git a/src/components/icon/assets/arrow_right.tsx b/src/components/icon/assets/arrow_right.tsx
index bef0510b595..2c483a470a3 100644
--- a/src/components/icon/assets/arrow_right.tsx
+++ b/src/components/icon/assets/arrow_right.tsx
@@ -20,17 +20,18 @@ const EuiIconArrowRight = ({
...props
}: React.SVGProps & SVGRProps) => (
{title ? {title} : null}
);
diff --git a/src/components/icon/assets/arrow_up.tsx b/src/components/icon/assets/arrow_up.tsx
index f41d22b1c42..a1c3593ce51 100644
--- a/src/components/icon/assets/arrow_up.tsx
+++ b/src/components/icon/assets/arrow_up.tsx
@@ -20,17 +20,18 @@ const EuiIconArrowUp = ({
...props
}: React.SVGProps & SVGRProps) => (
{title ? {title} : null}
);
diff --git a/src/components/icon/assets/doubleArrowLeft.tsx b/src/components/icon/assets/doubleArrowLeft.tsx
new file mode 100644
index 00000000000..36a901bf367
--- /dev/null
+++ b/src/components/icon/assets/doubleArrowLeft.tsx
@@ -0,0 +1,43 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+// THIS IS A GENERATED FILE. DO NOT MODIFY MANUALLY. @see scripts/compile-icons.js
+
+import * as React from 'react';
+interface SVGRProps {
+ title?: string;
+ titleId?: string;
+}
+
+const EuiIconDoubleArrowLeft = ({
+ title,
+ titleId,
+ ...props
+}: React.SVGProps & SVGRProps) => (
+
+ {title ? {title} : null}
+
+
+
+);
+
+export const icon = EuiIconDoubleArrowLeft;
diff --git a/src/components/icon/assets/doubleArrowRight.tsx b/src/components/icon/assets/doubleArrowRight.tsx
new file mode 100644
index 00000000000..1a5757d116b
--- /dev/null
+++ b/src/components/icon/assets/doubleArrowRight.tsx
@@ -0,0 +1,43 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+// THIS IS A GENERATED FILE. DO NOT MODIFY MANUALLY. @see scripts/compile-icons.js
+
+import * as React from 'react';
+interface SVGRProps {
+ title?: string;
+ titleId?: string;
+}
+
+const EuiIconDoubleArrowRight = ({
+ title,
+ titleId,
+ ...props
+}: React.SVGProps & SVGRProps) => (
+
+ {title ? {title} : null}
+
+
+
+);
+
+export const icon = EuiIconDoubleArrowRight;
diff --git a/src/components/icon/icon.tsx b/src/components/icon/icon.tsx
index 70b6cf52884..ae6041e1b54 100644
--- a/src/components/icon/icon.tsx
+++ b/src/components/icon/icon.tsx
@@ -94,6 +94,8 @@ const typeToPathMap = {
documentation: 'documentation',
documents: 'documents',
dot: 'dot',
+ doubleArrowLeft: 'doubleArrowLeft',
+ doubleArrowRight: 'doubleArrowRight',
download: 'download',
editorAlignCenter: 'editor_align_center',
editorAlignLeft: 'editor_align_left',
diff --git a/src/components/icon/svgs/arrow_down.svg b/src/components/icon/svgs/arrow_down.svg
index 4f0c33a7976..11e0c80973d 100644
--- a/src/components/icon/svgs/arrow_down.svg
+++ b/src/components/icon/svgs/arrow_down.svg
@@ -1,5 +1,3 @@
-
-
-
-
+
+
diff --git a/src/components/icon/svgs/arrow_left.svg b/src/components/icon/svgs/arrow_left.svg
index ccd3d335cac..a31e2c40a08 100644
--- a/src/components/icon/svgs/arrow_left.svg
+++ b/src/components/icon/svgs/arrow_left.svg
@@ -1,5 +1,3 @@
-
-
-
-
+
+
diff --git a/src/components/icon/svgs/arrow_right.svg b/src/components/icon/svgs/arrow_right.svg
index 765b00e17b6..fa910500528 100644
--- a/src/components/icon/svgs/arrow_right.svg
+++ b/src/components/icon/svgs/arrow_right.svg
@@ -1,5 +1,3 @@
-
-
-
-
+
+
diff --git a/src/components/icon/svgs/arrow_up.svg b/src/components/icon/svgs/arrow_up.svg
index 76c9e560b92..b8c0b624464 100644
--- a/src/components/icon/svgs/arrow_up.svg
+++ b/src/components/icon/svgs/arrow_up.svg
@@ -1,5 +1,3 @@
-
-
-
-
+
+
diff --git a/src/components/icon/svgs/doubleArrowLeft.svg b/src/components/icon/svgs/doubleArrowLeft.svg
new file mode 100644
index 00000000000..f6a7721a889
--- /dev/null
+++ b/src/components/icon/svgs/doubleArrowLeft.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/components/icon/svgs/doubleArrowRight.svg b/src/components/icon/svgs/doubleArrowRight.svg
new file mode 100644
index 00000000000..f305f1b3d64
--- /dev/null
+++ b/src/components/icon/svgs/doubleArrowRight.svg
@@ -0,0 +1,4 @@
+
+
+
+
From 57ef10d77ca2feaed458ccb68aaaec4987ac2d88 Mon Sep 17 00:00:00 2001
From: cchaos
Date: Mon, 8 Nov 2021 16:53:14 -0500
Subject: [PATCH 05/35] Added `first` and `last` buttons and refactored arrow
button component
---
.../in_memory_table.test.tsx.snap | 202 +++------
.../button/button_icon/button_icon.tsx | 2 +-
src/components/button/button_icon/index.ts | 1 +
.../__snapshots__/data_grid.test.tsx.snap | 63 ++-
.../__snapshots__/pagination.test.tsx.snap | 416 ++++++++----------
src/components/pagination/pagination.tsx | 183 +++-----
.../pagination/pagination_button_arrow.tsx | 78 ++++
.../table_pagination.test.tsx.snap | 116 +++--
8 files changed, 477 insertions(+), 584 deletions(-)
create mode 100644 src/components/pagination/pagination_button_arrow.tsx
diff --git a/src/components/basic_table/__snapshots__/in_memory_table.test.tsx.snap b/src/components/basic_table/__snapshots__/in_memory_table.test.tsx.snap
index 79f680958a4..7c49513868f 100644
--- a/src/components/basic_table/__snapshots__/in_memory_table.test.tsx.snap
+++ b/src/components/basic_table/__snapshots__/in_memory_table.test.tsx.snap
@@ -485,81 +485,52 @@ exports[`EuiInMemoryTable behavior pagination 1`] = `
aria-label="Pagination for table: "
className="euiPagination"
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ aria-hidden="true"
+ className="euiButtonIcon__icon"
+ color="inherit"
+ data-euiicon-type="arrowLeft"
+ size="m"
+ />
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ aria-hidden="true"
+ className="euiButtonIcon__icon"
+ color="inherit"
+ data-euiicon-type="arrowRight"
+ size="m"
+ />
+
+
+
+
diff --git a/src/components/button/button_icon/button_icon.tsx b/src/components/button/button_icon/button_icon.tsx
index 4e9ad1ee1ca..752e260f229 100644
--- a/src/components/button/button_icon/button_icon.tsx
+++ b/src/components/button/button_icon/button_icon.tsx
@@ -73,7 +73,7 @@ export interface EuiButtonIconProps extends CommonProps {
display?: EuiButtonIconDisplay;
}
-type EuiButtonIconPropsForAnchor = {
+export type EuiButtonIconPropsForAnchor = {
type?: string;
} & PropsForAnchor<
EuiButtonIconProps,
diff --git a/src/components/button/button_icon/index.ts b/src/components/button/button_icon/index.ts
index b2e4516914f..6c54524adfb 100644
--- a/src/components/button/button_icon/index.ts
+++ b/src/components/button/button_icon/index.ts
@@ -11,4 +11,5 @@ export {
EuiButtonIconColor,
EuiButtonIconProps,
EuiButtonIconPropsForButton,
+ EuiButtonIconPropsForAnchor,
} from './button_icon';
diff --git a/src/components/datagrid/__snapshots__/data_grid.test.tsx.snap b/src/components/datagrid/__snapshots__/data_grid.test.tsx.snap
index e1ab897ee36..5d77da95c89 100644
--- a/src/components/datagrid/__snapshots__/data_grid.test.tsx.snap
+++ b/src/components/datagrid/__snapshots__/data_grid.test.tsx.snap
@@ -43,25 +43,22 @@ exports[`EuiDataGrid pagination renders 1`] = `
aria-label="Pagination for preceding grid: test grid"
class="euiPagination"
>
-
-
-
-
-
+
+
-
-
-
-
-
+
+
diff --git a/src/components/pagination/__snapshots__/pagination.test.tsx.snap b/src/components/pagination/__snapshots__/pagination.test.tsx.snap
index 04ee83b25aa..44739d25486 100644
--- a/src/components/pagination/__snapshots__/pagination.test.tsx.snap
+++ b/src/components/pagination/__snapshots__/pagination.test.tsx.snap
@@ -6,24 +6,20 @@ exports[`EuiPagination is rendered 1`] = `
class="euiPagination testClass1 testClass2"
data-test-subj="test subject string"
>
-
-
-
-
-
+
+
-
-
-
-
-
+
+
`;
@@ -76,23 +68,20 @@ exports[`EuiPagination props activePage is rendered 1`] = `
`;
@@ -289,24 +275,20 @@ exports[`EuiPagination props aria-controls is rendered 1`] = `
`;
@@ -359,24 +337,20 @@ exports[`EuiPagination props compressed is rendered 1`] = `
`;
@@ -443,42 +413,34 @@ exports[`EuiPagination props compressed arrows is rendered 1`] = `
`;
@@ -486,41 +448,34 @@ exports[`EuiPagination props pageCount can be null 1`] = `
`;
@@ -528,24 +483,20 @@ exports[`EuiPagination props pageCount is rendered 1`] = `
`;
diff --git a/src/components/pagination/pagination.tsx b/src/components/pagination/pagination.tsx
index 14403926199..dce63a64ded 100644
--- a/src/components/pagination/pagination.tsx
+++ b/src/components/pagination/pagination.tsx
@@ -11,17 +11,28 @@ import classNames from 'classnames';
import { CommonProps } from '../common';
import { EuiPaginationButton } from './pagination_button';
-import { EuiButtonIcon } from '../button';
import { EuiI18n } from '../i18n';
import { EuiText } from '../text';
import { EuiHideFor } from '../responsive';
-import { EuiToolTip } from '../tool_tip';
+import { EuiPaginationButtonArrow } from './pagination_button_arrow';
const MAX_VISIBLE_PAGES = 5;
const NUMBER_SURROUNDING_PAGES = Math.floor(MAX_VISIBLE_PAGES * 0.5);
export type PageClickHandler = (pageIndex: number) => void;
-type SafeClickHandler = (e: MouseEvent, pageIndex: number) => void;
+export type SafeClickHandler = (
+ e: MouseEvent,
+ pageIndex: number | null
+) => void;
+
+export interface EuiPaginationIndeterminateProps {
+ onNextPage: () => void;
+ onPreviousPage: () => void;
+ onFirstPage: () => void;
+ onLastPage: () => void;
+ isFirstPage: boolean;
+ isLastPage: boolean;
+}
export interface EuiPaginationProps {
/**
@@ -33,8 +44,9 @@ export interface EuiPaginationProps {
/**
* The current page using a zero based index.
* So if you set the activePage to 1, it will activate the second page.
+ * Pass `null` if total count in unknown.
*/
- activePage?: number;
+ activePage?: number | null;
onPageClick?: PageClickHandler;
@@ -47,6 +59,14 @@ export interface EuiPaginationProps {
* If passed in, passes value through to each button to set aria-controls.
*/
'aria-controls'?: string;
+
+ /**
+ *
+ */
+ // indeterminateProps?: EuiPaginationIndeterminateProps;
+
+ onFirstPage?: () => void;
+ onLastPage?: () => void;
}
type Props = CommonProps & HTMLAttributes & EuiPaginationProps;
@@ -58,6 +78,8 @@ export const EuiPagination: FunctionComponent = ({
onPageClick = () => {},
compressed,
'aria-controls': ariaControls,
+ onFirstPage,
+ onLastPage,
...rest
}) => {
const safeClick: SafeClickHandler = (e, pageIndex) => {
@@ -71,35 +93,60 @@ export const EuiPagination: FunctionComponent = ({
}
}
- onPageClick(pageIndex);
+ onPageClick(pageIndex === null ? 0 : pageIndex);
};
const classes = classNames('euiPagination', className);
- const hasControl = ariaControls !== undefined;
- const nextButton = (
- safeClick(e, 0)}
+ disabled={activePage === 0}
/>
);
const previousButton = (
-
+ safeClick(e, activePage !== null ? activePage - 1 : null)
+ }
disabled={activePage === 0}
/>
);
+ const nextButton = (
+
+ safeClick(e, activePage !== null ? activePage + 1 : null)
+ }
+ disabled={pageCount ? activePage === pageCount - 1 : false}
+ />
+ );
+
+ const lastButton = onLastPage && (
+
+ safeClick(e, pageCount ? pageCount - 1 : null)
+ }
+ disabled={pageCount ? activePage === pageCount - 1 : false}
+ />
+ );
+
let centerPageCount;
- if (pageCount) {
+ if (pageCount && activePage !== null) {
const sharedButtonProps = {
activePage,
ariaControls,
@@ -267,117 +314,15 @@ export const EuiPagination: FunctionComponent = ({
return (
+ {firstButton}
{previousButton}
{centerPageCount}
{nextButton}
+ {lastButton}
);
};
-const PaginationButtonPrevious = ({
- hasControl,
- activePage,
- disabled,
- ariaControls,
- safeClick,
-}: {
- hasControl?: boolean;
- activePage: number;
- disabled?: boolean;
- ariaControls?: string;
- safeClick: SafeClickHandler;
-}) => {
- let prevPageButtonProps = {};
- if (hasControl && !disabled) {
- prevPageButtonProps = {
- 'aria-controls': ariaControls,
- href: `#${ariaControls}`,
- };
- } else {
- prevPageButtonProps = { disabled };
- }
-
- return (
-
- {(previousPage: string) => (
-
- {(disabledPreviousPage: string) => (
-
- safeClick(e, activePage - 1)}
- iconType="arrowLeft"
- color="text"
- aria-label={disabled ? disabledPreviousPage : previousPage}
- data-test-subj="pagination-button-previous"
- {...prevPageButtonProps}
- />
-
- )}
-
- )}
-
- );
-};
-
-const PaginationButtonNext = ({
- hasControl,
- activePage,
- disabled,
- ariaControls,
- safeClick,
-}: {
- hasControl?: boolean;
- activePage: number;
- disabled?: boolean;
- ariaControls?: string;
- safeClick: SafeClickHandler;
-}) => {
- let nextPageButtonProps = {};
- if (hasControl && !disabled) {
- nextPageButtonProps = {
- 'aria-controls': ariaControls,
- href: `#${ariaControls}`,
- };
- } else {
- nextPageButtonProps = { disabled };
- }
-
- return (
-
- {(nextPage: string) => (
-
- {(disabledNextPage: string) => (
-
- safeClick(e, activePage + 1)}
- iconType="arrowRight"
- aria-label={disabled ? disabledNextPage : nextPage}
- color="text"
- data-test-subj="pagination-button-next"
- {...nextPageButtonProps}
- />
-
- )}
-
- )}
-
- );
-};
-
const PaginationButtonWrapper = ({
pageIndex,
inList = true,
diff --git a/src/components/pagination/pagination_button_arrow.tsx b/src/components/pagination/pagination_button_arrow.tsx
new file mode 100644
index 00000000000..1d1a2292bcd
--- /dev/null
+++ b/src/components/pagination/pagination_button_arrow.tsx
@@ -0,0 +1,78 @@
+/*
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
+ * or more contributor license agreements. Licensed under the Elastic License
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
+ * Side Public License, v 1.
+ */
+
+import React, { FunctionComponent } from 'react';
+import { toSentenceCase } from '../../services';
+
+import {
+ EuiButtonIcon,
+ EuiButtonIconPropsForAnchor,
+} from '../button/button_icon';
+import { keysOf } from '../common';
+import { useEuiI18n } from '../i18n';
+
+const typeToIconTypeMap = {
+ first: 'doubleArrowLeft',
+ previous: 'arrowLeft',
+ next: 'arrowRight',
+ last: 'doubleArrowRight',
+};
+
+export const TYPES = keysOf(typeToIconTypeMap);
+export type EuiPaginationButtonArrowType = typeof TYPES[number];
+
+export type Props = Partial> & {
+ type: EuiPaginationButtonArrowType;
+ activePage?: number | null;
+ disabled?: boolean;
+ ariaControls?: string;
+};
+
+export const EuiPaginationButtonArrow: FunctionComponent = ({
+ type,
+ activePage,
+ disabled,
+ ariaControls,
+ onClick,
+}) => {
+ let labelModifier: number | undefined;
+
+ if (type === 'previous') {
+ labelModifier = activePage != null ? activePage : 0;
+ } else if (type === 'next') {
+ labelModifier = activePage != null ? activePage + 2 : 0;
+ }
+
+ const label = useEuiI18n(
+ 'euiPaginationButtonArrow.previousPage',
+ ({ page }) => `${toSentenceCase(type)} page${page ? `, ${page}` : ''}`,
+ {
+ page: labelModifier,
+ }
+ );
+
+ const buttonProps: Partial = {};
+
+ if (ariaControls && !disabled) {
+ buttonProps.href = `#${ariaControls}`;
+ buttonProps['aria-controls'] = ariaControls;
+ }
+
+ return (
+
+ );
+};
diff --git a/src/components/table/table_pagination/__snapshots__/table_pagination.test.tsx.snap b/src/components/table/table_pagination/__snapshots__/table_pagination.test.tsx.snap
index 54fb2e4b40d..75d49f0504c 100644
--- a/src/components/table/table_pagination/__snapshots__/table_pagination.test.tsx.snap
+++ b/src/components/table/table_pagination/__snapshots__/table_pagination.test.tsx.snap
@@ -44,23 +44,20 @@ exports[`EuiTablePagination is rendered 1`] = `
class="euiPagination testClass1 testClass2"
data-test-subj="test subject string"
>
-
-
-
-
-
+
+
-
-
-
-
-
+
+
@@ -205,23 +199,20 @@ exports[`EuiTablePagination is rendered when hiding the per page options 1`] = `
class="euiPagination testClass1 testClass2"
data-test-subj="test subject string"
>
-
-
-
-
-
+
+
-
-
-
-
-
+
+
From 46476e31bb469cb46bbcc482ac857ed37a82526a Mon Sep 17 00:00:00 2001
From: cchaos
Date: Mon, 8 Nov 2021 17:30:00 -0500
Subject: [PATCH 06/35] Using negative index for `activePage` to indicate last
page
---
.../__snapshots__/pagination.test.tsx.snap | 93 ++++++++++++++++++-
src/components/pagination/pagination.test.tsx | 22 ++++-
src/components/pagination/pagination.tsx | 60 ++++--------
.../pagination/pagination_button_arrow.tsx | 2 +-
4 files changed, 127 insertions(+), 50 deletions(-)
diff --git a/src/components/pagination/__snapshots__/pagination.test.tsx.snap b/src/components/pagination/__snapshots__/pagination.test.tsx.snap
index 44739d25486..d62a3214ec6 100644
--- a/src/components/pagination/__snapshots__/pagination.test.tsx.snap
+++ b/src/components/pagination/__snapshots__/pagination.test.tsx.snap
@@ -64,6 +64,69 @@ exports[`EuiPagination is rendered 1`] = `
`;
+exports[`EuiPagination props activePage can be 0 1`] = `
+
+`;
+
exports[`EuiPagination props activePage is rendered 1`] = `
`;
-exports[`EuiPagination props compressed arrows is rendered 1`] = `
-
-`;
-
exports[`EuiPagination props pageCount can be 0 1`] = `
),
snippet: centeredPaginationSnippet,
@@ -231,7 +220,7 @@ export const PaginationExample = {
title: 'Customizable pagination',
source: [
{
- type: GuideSectionTypes.JS,
+ type: GuideSectionTypes.TSX,
code: customizablePaginationSource,
},
],
@@ -249,7 +238,6 @@ export const PaginationExample = {
tables.
),
- snippet: customizablePaginationSnippet,
demo: ,
props: { EuiPagination },
},
From a020fe96c8fc83614db3d82f40040f9e3730f03a Mon Sep 17 00:00:00 2001
From: cchaos
Date: Wed, 10 Nov 2021 17:26:13 -0500
Subject: [PATCH 15/35] Initial text and images for Guidelines
---
src-docs/src/images/pagination_filters.gif | Bin 0 -> 2150753 bytes
.../src/images/pagination_infinite_do.svg | 1 +
.../src/images/pagination_infinite_dont.svg | 1 +
src-docs/src/images/pagination_options_do.svg | 1 +
.../src/images/pagination_options_dont.svg | 1 +
src-docs/src/views/pagination/guidelines.js | 297 ++++++++++++++++++
.../views/pagination/pagination_example.js | 2 +
src-docs/src/views/tour/tour_example.js | 2 +-
8 files changed, 304 insertions(+), 1 deletion(-)
create mode 100644 src-docs/src/images/pagination_filters.gif
create mode 100644 src-docs/src/images/pagination_infinite_do.svg
create mode 100644 src-docs/src/images/pagination_infinite_dont.svg
create mode 100644 src-docs/src/images/pagination_options_do.svg
create mode 100644 src-docs/src/images/pagination_options_dont.svg
create mode 100644 src-docs/src/views/pagination/guidelines.js
diff --git a/src-docs/src/images/pagination_filters.gif b/src-docs/src/images/pagination_filters.gif
new file mode 100644
index 0000000000000000000000000000000000000000..b79c7782c5d8a21e757f7e491a730b6e1d5f1c57
GIT binary patch
literal 2150753
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­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