diff --git a/packages/eui/src-docs/src/views/datagrid/toolbar/_props.tsx b/packages/eui/src-docs/src/views/datagrid/toolbar/_props.tsx index 77fc48346a7..55a0fcbbed0 100644 --- a/packages/eui/src-docs/src/views/datagrid/toolbar/_props.tsx +++ b/packages/eui/src-docs/src/views/datagrid/toolbar/_props.tsx @@ -7,14 +7,17 @@ import { DataGridPropsTable } from '../_props_table'; /* eslint-disable local/css-logical-properties */ const gridSnippets = { showColumnSelector: `showColumnSelector: { - allowHide: false; - allowReorder: false; + allowHide: false, + allowReorder: false, }`, showDisplaySelector: `showDisplaySelector: { - allowDensity: false; - allowRowHeight: false; - allowResetButton: false; - additionalDisplaySettings: ; + allowDensity: false, + allowRowHeight: false, + allowResetButton: false, + additionalDisplaySettings: , + customRender: ({ densityControl, rowHeightControl, resetButton, additionalDisplaySettings }) => ( + <>Completely custom display settings + ), }`, showSortSelector: 'showSortSelector: false', showFullScreenSelector: 'showFullScreenSelector: false', diff --git a/packages/eui/src-docs/src/views/datagrid/toolbar/additional_controls.tsx b/packages/eui/src-docs/src/views/datagrid/toolbar/additional_controls.tsx index 41d42843c72..55475be2454 100644 --- a/packages/eui/src-docs/src/views/datagrid/toolbar/additional_controls.tsx +++ b/packages/eui/src-docs/src/views/datagrid/toolbar/additional_controls.tsx @@ -17,6 +17,8 @@ import { EuiContextMenuItem, EuiContextMenuPanel, EuiPopover, + EuiFormRow, + EuiRange, EuiDataGridPaginationProps, RenderCellValue, } from '../../../../../src'; @@ -54,6 +56,29 @@ for (let i = 1; i < 20; i++) { const renderCellValue: RenderCellValue = ({ rowIndex, columnId }) => data[rowIndex][columnId]; +// Some additional custom settings to show in the Display popover +const AdditionalDisplaySettings = () => { + const [exampleSettingValue, setExampleSettingValue] = useState(10); + + return ( + + { + setExampleSettingValue(Number(event.currentTarget.value)); + }} + /> + + ); +}; + export default () => { const [pagination, setPagination] = useState({ pageIndex: 0 }); const [isFlyoutVisible, setIsFlyoutVisible] = useState(false); @@ -209,6 +234,10 @@ export default () => { ), }, + showDisplaySelector: { + allowResetButton: false, + additionalDisplaySettings: , + }, }} /> {flyout} diff --git a/packages/eui/src-docs/src/views/datagrid/toolbar/datagrid_toolbar_example.js b/packages/eui/src-docs/src/views/datagrid/toolbar/datagrid_toolbar_example.js index fe92a60e883..706fa1569a0 100644 --- a/packages/eui/src-docs/src/views/datagrid/toolbar/datagrid_toolbar_example.js +++ b/packages/eui/src-docs/src/views/datagrid/toolbar/datagrid_toolbar_example.js @@ -34,60 +34,64 @@ const controlsSnippet = ` - {}}> - New button - - {}}> - Another button - - - ), - append: ( + // Use of a fragment for multiple items will insure proper margins + additionalControls: { + left: { + prepend: ( + <> + {}}> + New button + + {}}> + Another button + + + ), + append: ( + <> + {}}> + New button + + {}}> + Another button + + + ), + }, + right: ( <> - {}}> - New button - - {}}> - Another button - + + {}} + /> + + + {}} + /> + ), }, - right: ( - <> - - {}} - /> - - - {}} - /> - - - ) - } -}} + // Additional controls can also be passed to the display settings popover + showDisplaySelector: { + additionalDisplaySettings:
Custom settings content
, + }, + }} /> `; @@ -246,8 +250,7 @@ export const DataGridToolbarExample = { renderCustomToolbar={({ displayControl }) =>
Custom toolbar content {displayControl}
} toolbarVisibility={{ showDisplaySelector: { - allowResetButton: false, - additionalDisplaySettings:
Custom settings content
+ customRender: ({ densityControl }) =>
Custom display selector {densityControl}
} }} />`, diff --git a/packages/eui/src-docs/src/views/datagrid/toolbar/render_custom_toolbar.tsx b/packages/eui/src-docs/src/views/datagrid/toolbar/render_custom_toolbar.tsx index 1f3944e4a0b..b104a00ed58 100644 --- a/packages/eui/src-docs/src/views/datagrid/toolbar/render_custom_toolbar.tsx +++ b/packages/eui/src-docs/src/views/datagrid/toolbar/render_custom_toolbar.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; import { css } from '@emotion/react'; import { faker } from '@faker-js/faker'; @@ -8,12 +8,18 @@ import { EuiDataGridColumnSortingConfig, EuiDataGridToolbarProps, EuiDataGridToolbarControl, + EuiDataGridStyle, + EuiDataGridStyleBorders, + EuiDataGridDisplaySelectorCustomRender, + EuiSpacer, + EuiHorizontalRule, EuiFormRow, - EuiRange, + EuiButtonGroup, EuiFlexGroup, EuiFlexItem, euiScreenReaderOnly, RenderCellValue, + EuiSwitch, } from '../../../../../src'; const raw_data: Array<{ [key: string]: string }> = []; @@ -57,6 +63,7 @@ const renderCustomToolbar: EuiDataGridToolbarProps['renderCustomToolbar'] = ({ justifyContent="spaceBetween" alignItems="center" css={mobileStyles} + className="euiDataGrid__controls" > {hasRoomForGridControls && ( @@ -86,29 +93,6 @@ const renderCustomToolbar: EuiDataGridToolbarProps['renderCustomToolbar'] = ({ const renderCellValue: RenderCellValue = ({ rowIndex, columnId }) => raw_data[rowIndex][columnId]; -// Some additional custom settings to show in the Display popover -const AdditionalDisplaySettings = () => { - const [exampleSettingValue, setExampleSettingValue] = useState(10); - - return ( - - { - setExampleSettingValue(Number(event.currentTarget.value)); - }} - /> - - ); -}; - export default () => { // Column visibility const [visibleColumns, setVisibleColumns] = useState(() => @@ -123,6 +107,51 @@ export default () => { setSortingColumns(sortingColumns); }, []); + // Custom display settings + const [borders, setGridBorders] = useState('none'); + const [rowStripes, setRowStripes] = useState(false); + const gridStyle: EuiDataGridStyle = useMemo( + () => ({ + border: borders, + header: borders === 'none' ? 'underline' : 'shade', + stripes: rowStripes, + }), + [borders, rowStripes] + ); + const customDisplayControls: EuiDataGridDisplaySelectorCustomRender = + useCallback( + ({ densityControl, rowHeightControl }) => { + return ( + <> + + setRowStripes(!rowStripes)} + /> + + {densityControl} + + setGridBorders(id as EuiDataGridStyleBorders)} + /> + + {rowHeightControl} + + ); + }, + [borders, rowStripes] + ); + return ( { sorting={{ columns: sortingColumns, onSort }} rowCount={raw_data.length} renderCellValue={renderCellValue} - gridStyle={{ border: 'none', header: 'underline' }} + gridStyle={gridStyle} renderCustomToolbar={renderCustomToolbar} toolbarVisibility={{ showDisplaySelector: { allowResetButton: false, - additionalDisplaySettings: , + customRender: customDisplayControls, }, }} />