@patternfly/react-core 4.198.12 → 4.198.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/dist/esm/components/Form/FormFieldGroup.d.ts +1 -1
- package/dist/esm/components/Form/FormFieldGroupExpandable.d.ts +2 -2
- package/dist/esm/components/Form/FormFieldGroupHeader.d.ts +3 -1
- package/dist/esm/components/Form/FormFieldGroupHeader.d.ts.map +1 -1
- package/dist/esm/components/Form/FormFieldGroupHeader.js.map +1 -1
- package/dist/esm/components/Form/InternalFormFieldGroup.d.ts +2 -2
- package/dist/esm/components/Label/Label.d.ts.map +1 -1
- package/dist/esm/components/Label/Label.js +5 -2
- package/dist/esm/components/Label/Label.js.map +1 -1
- package/dist/esm/components/Menu/MenuItem.d.ts +3 -1
- package/dist/esm/components/Menu/MenuItem.d.ts.map +1 -1
- package/dist/esm/components/Menu/MenuItem.js +4 -3
- package/dist/esm/components/Menu/MenuItem.js.map +1 -1
- package/dist/esm/components/Nav/NavGroup.d.ts +1 -1
- package/dist/esm/components/Nav/NavGroup.d.ts.map +1 -1
- package/dist/esm/components/Nav/NavGroup.js +7 -2
- package/dist/esm/components/Nav/NavGroup.js.map +1 -1
- package/dist/esm/components/NotificationDrawer/NotificationDrawer.d.ts +3 -1
- package/dist/esm/components/NotificationDrawer/NotificationDrawer.d.ts.map +1 -1
- package/dist/esm/components/NotificationDrawer/NotificationDrawer.js +4 -3
- package/dist/esm/components/NotificationDrawer/NotificationDrawer.js.map +1 -1
- package/dist/esm/components/Tabs/Tab.d.ts +3 -1
- package/dist/esm/components/Tabs/Tab.d.ts.map +1 -1
- package/dist/esm/components/Tabs/Tab.js +4 -3
- package/dist/esm/components/Tabs/Tab.js.map +1 -1
- package/dist/esm/components/Tabs/TabButton.d.ts +2 -0
- package/dist/esm/components/Tabs/TabButton.d.ts.map +1 -1
- package/dist/esm/components/Tabs/TabButton.js +2 -2
- package/dist/esm/components/Tabs/TabButton.js.map +1 -1
- package/dist/esm/components/Tile/Tile.d.ts.map +1 -1
- package/dist/esm/components/Tile/Tile.js +1 -1
- package/dist/esm/components/Tile/Tile.js.map +1 -1
- package/dist/esm/components/Toolbar/Toolbar.d.ts +3 -1
- package/dist/esm/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/esm/components/Toolbar/Toolbar.js +4 -3
- package/dist/esm/components/Toolbar/Toolbar.js.map +1 -1
- package/dist/esm/components/Toolbar/ToolbarChipGroupContent.d.ts +2 -0
- package/dist/esm/components/Toolbar/ToolbarChipGroupContent.d.ts.map +1 -1
- package/dist/esm/components/Toolbar/ToolbarChipGroupContent.js +4 -3
- package/dist/esm/components/Toolbar/ToolbarChipGroupContent.js.map +1 -1
- package/dist/esm/components/Toolbar/ToolbarExpandableContent.d.ts.map +1 -1
- package/dist/esm/components/Toolbar/ToolbarExpandableContent.js +4 -3
- package/dist/esm/components/Toolbar/ToolbarExpandableContent.js.map +1 -1
- package/dist/esm/components/Toolbar/ToolbarUtils.d.ts +1 -0
- package/dist/esm/components/Toolbar/ToolbarUtils.d.ts.map +1 -1
- package/dist/esm/components/Toolbar/ToolbarUtils.js.map +1 -1
- package/dist/js/components/Form/FormFieldGroup.d.ts +1 -1
- package/dist/js/components/Form/FormFieldGroupExpandable.d.ts +2 -2
- package/dist/js/components/Form/FormFieldGroupHeader.d.ts +3 -1
- package/dist/js/components/Form/FormFieldGroupHeader.d.ts.map +1 -1
- package/dist/js/components/Form/FormFieldGroupHeader.js.map +1 -1
- package/dist/js/components/Form/InternalFormFieldGroup.d.ts +2 -2
- package/dist/js/components/Label/Label.d.ts.map +1 -1
- package/dist/js/components/Label/Label.js +5 -2
- package/dist/js/components/Label/Label.js.map +1 -1
- package/dist/js/components/Menu/MenuItem.d.ts +3 -1
- package/dist/js/components/Menu/MenuItem.d.ts.map +1 -1
- package/dist/js/components/Menu/MenuItem.js +4 -4
- package/dist/js/components/Menu/MenuItem.js.map +1 -1
- package/dist/js/components/Nav/NavGroup.d.ts +1 -1
- package/dist/js/components/Nav/NavGroup.d.ts.map +1 -1
- package/dist/js/components/Nav/NavGroup.js +7 -2
- package/dist/js/components/Nav/NavGroup.js.map +1 -1
- package/dist/js/components/NotificationDrawer/NotificationDrawer.d.ts +3 -1
- package/dist/js/components/NotificationDrawer/NotificationDrawer.d.ts.map +1 -1
- package/dist/js/components/NotificationDrawer/NotificationDrawer.js +4 -4
- package/dist/js/components/NotificationDrawer/NotificationDrawer.js.map +1 -1
- package/dist/js/components/Tabs/Tab.d.ts +3 -1
- package/dist/js/components/Tabs/Tab.d.ts.map +1 -1
- package/dist/js/components/Tabs/Tab.js +4 -3
- package/dist/js/components/Tabs/Tab.js.map +1 -1
- package/dist/js/components/Tabs/TabButton.d.ts +2 -0
- package/dist/js/components/Tabs/TabButton.d.ts.map +1 -1
- package/dist/js/components/Tabs/TabButton.js +2 -2
- package/dist/js/components/Tabs/TabButton.js.map +1 -1
- package/dist/js/components/Tile/Tile.d.ts.map +1 -1
- package/dist/js/components/Tile/Tile.js +1 -1
- package/dist/js/components/Tile/Tile.js.map +1 -1
- package/dist/js/components/Toolbar/Toolbar.d.ts +3 -1
- package/dist/js/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/js/components/Toolbar/Toolbar.js +4 -3
- package/dist/js/components/Toolbar/Toolbar.js.map +1 -1
- package/dist/js/components/Toolbar/ToolbarChipGroupContent.d.ts +2 -0
- package/dist/js/components/Toolbar/ToolbarChipGroupContent.d.ts.map +1 -1
- package/dist/js/components/Toolbar/ToolbarChipGroupContent.js +4 -3
- package/dist/js/components/Toolbar/ToolbarChipGroupContent.js.map +1 -1
- package/dist/js/components/Toolbar/ToolbarExpandableContent.d.ts.map +1 -1
- package/dist/js/components/Toolbar/ToolbarExpandableContent.js +4 -3
- package/dist/js/components/Toolbar/ToolbarExpandableContent.js.map +1 -1
- package/dist/js/components/Toolbar/ToolbarUtils.d.ts +1 -0
- package/dist/js/components/Toolbar/ToolbarUtils.d.ts.map +1 -1
- package/dist/js/components/Toolbar/ToolbarUtils.js.map +1 -1
- package/dist/umd/react-core.js +38 -25
- package/dist/umd/react-core.min.js +1 -1
- package/package.json +5 -5
- package/src/components/Form/FormFieldGroup.tsx +1 -1
- package/src/components/Form/FormFieldGroupExpandable.tsx +2 -2
- package/src/components/Form/FormFieldGroupHeader.tsx +5 -1
- package/src/components/Form/InternalFormFieldGroup.tsx +2 -2
- package/src/components/Form/__tests__/FormFieldGroup.test.tsx +1 -1
- package/src/components/Form/__tests__/__snapshots__/FormFieldGroup.test.tsx.snap +1 -1
- package/src/components/Form/examples/Form.md +1 -1
- package/src/components/Label/Label.tsx +5 -2
- package/src/components/Menu/MenuItem.tsx +9 -1
- package/src/components/Menu/examples/Menu.md +57 -32
- package/src/components/Nav/NavGroup.tsx +20 -9
- package/src/components/Nav/examples/Nav.md +2 -0
- package/src/components/NotificationDrawer/NotificationDrawer.tsx +8 -2
- package/src/components/NotificationDrawer/__tests__/__snapshots__/NotificationDrawer.test.tsx.snap +1 -1
- package/src/components/Tabs/Tab.tsx +31 -24
- package/src/components/Tabs/TabButton.tsx +5 -1
- package/src/components/Tabs/examples/Tabs.md +527 -256
- package/src/components/Tile/Tile.tsx +3 -0
- package/src/components/Tile/__tests__/__snapshots__/Tile.test.tsx.snap +9 -0
- package/src/components/Tile/examples/Tile.md +41 -39
- package/src/components/Toolbar/Toolbar.tsx +7 -2
- package/src/components/Toolbar/ToolbarChipGroupContent.tsx +5 -1
- package/src/components/Toolbar/ToolbarExpandableContent.tsx +3 -2
- package/src/components/Toolbar/ToolbarUtils.tsx +1 -0
- package/src/components/Toolbar/__tests__/ToolbarToggleGroup.test.tsx +71 -1
- package/src/components/Toolbar/__tests__/__snapshots__/ToolbarToggleGroup.test.tsx.snap +394 -0
- package/src/components/Toolbar/examples/Toolbar.md +8 -1
- package/src/components/Toolbar/examples/ToolbarCustomChipGroupContent.tsx +166 -0
- package/src/demos/Nav.md +7 -3
- package/src/demos/NotificationDrawer/NotificationDrawer.md +31 -4
- package/src/demos/Page/Page.md +7 -3
- package/src/demos/TileDemo.md +17 -35
- package/src/demos/examples/DashboardHeader.js +2 -1
|
@@ -33,6 +33,9 @@ export const Tile: React.FunctionComponent<TileProps> = ({
|
|
|
33
33
|
...props
|
|
34
34
|
}: TileProps) => (
|
|
35
35
|
<div
|
|
36
|
+
role="option"
|
|
37
|
+
aria-selected={isSelected}
|
|
38
|
+
{...(isDisabled && { 'aria-disabled': isDisabled })}
|
|
36
39
|
className={css(
|
|
37
40
|
styles.tile,
|
|
38
41
|
isSelected && styles.modifiers.selected,
|
|
@@ -4,6 +4,7 @@ exports[`Tile basic 1`] = `
|
|
|
4
4
|
<div>
|
|
5
5
|
<div
|
|
6
6
|
class="pf-c-tile"
|
|
7
|
+
role="option"
|
|
7
8
|
tabindex="0"
|
|
8
9
|
>
|
|
9
10
|
<div
|
|
@@ -22,7 +23,9 @@ exports[`Tile basic 1`] = `
|
|
|
22
23
|
exports[`Tile renders disabled 1`] = `
|
|
23
24
|
<div>
|
|
24
25
|
<div
|
|
26
|
+
aria-disabled="true"
|
|
25
27
|
class="pf-c-tile pf-m-disabled"
|
|
28
|
+
role="option"
|
|
26
29
|
tabindex="0"
|
|
27
30
|
>
|
|
28
31
|
<div
|
|
@@ -41,7 +44,9 @@ exports[`Tile renders disabled 1`] = `
|
|
|
41
44
|
exports[`Tile renders selected 1`] = `
|
|
42
45
|
<div>
|
|
43
46
|
<div
|
|
47
|
+
aria-selected="true"
|
|
44
48
|
class="pf-c-tile pf-m-selected"
|
|
49
|
+
role="option"
|
|
45
50
|
tabindex="0"
|
|
46
51
|
>
|
|
47
52
|
<div
|
|
@@ -61,6 +66,7 @@ exports[`Tile renders with icon 1`] = `
|
|
|
61
66
|
<div>
|
|
62
67
|
<div
|
|
63
68
|
class="pf-c-tile"
|
|
69
|
+
role="option"
|
|
64
70
|
tabindex="0"
|
|
65
71
|
>
|
|
66
72
|
<div
|
|
@@ -97,6 +103,7 @@ exports[`Tile renders with stacked icon 1`] = `
|
|
|
97
103
|
<div>
|
|
98
104
|
<div
|
|
99
105
|
class="pf-c-tile"
|
|
106
|
+
role="option"
|
|
100
107
|
tabindex="0"
|
|
101
108
|
>
|
|
102
109
|
<div
|
|
@@ -133,6 +140,7 @@ exports[`Tile renders with stacked large icon 1`] = `
|
|
|
133
140
|
<div>
|
|
134
141
|
<div
|
|
135
142
|
class="pf-c-tile pf-m-display-lg"
|
|
143
|
+
role="option"
|
|
136
144
|
tabindex="0"
|
|
137
145
|
>
|
|
138
146
|
<div
|
|
@@ -169,6 +177,7 @@ exports[`Tile renders with subtext 1`] = `
|
|
|
169
177
|
<div>
|
|
170
178
|
<div
|
|
171
179
|
class="pf-c-tile"
|
|
180
|
+
role="option"
|
|
172
181
|
tabindex="0"
|
|
173
182
|
>
|
|
174
183
|
<div
|
|
@@ -9,7 +9,6 @@ beta: true
|
|
|
9
9
|
import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
|
|
10
10
|
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
|
|
11
11
|
|
|
12
|
-
|
|
13
12
|
## Examples
|
|
14
13
|
|
|
15
14
|
Keyboard interaction patterns and a11y is implemented in the Tile demos, located in the [Demo section](/documentation/react/demos/tiledemo).
|
|
@@ -20,29 +19,30 @@ Keyboard interaction patterns and a11y is implemented in the Tile demos, located
|
|
|
20
19
|
import React from 'react';
|
|
21
20
|
import { Tile } from '@patternfly/react-core';
|
|
22
21
|
|
|
23
|
-
<
|
|
24
|
-
<Tile title="Default" />
|
|
22
|
+
<div role="listbox" aria-label="Basic tiles">
|
|
23
|
+
<Tile title="Default" isSelected={false} />
|
|
25
24
|
<Tile title="Selected" isSelected />
|
|
26
|
-
<Tile title="Disabled" isDisabled />
|
|
27
|
-
</
|
|
25
|
+
<Tile title="Disabled" isDisabled isSelected={false} />
|
|
26
|
+
</div>;
|
|
28
27
|
```
|
|
29
28
|
|
|
30
|
-
|
|
31
29
|
### With subtext
|
|
32
30
|
|
|
33
31
|
```js
|
|
34
32
|
import React from 'react';
|
|
35
33
|
import { Tile } from '@patternfly/react-core';
|
|
36
34
|
|
|
37
|
-
<
|
|
38
|
-
<Tile title="Default"
|
|
35
|
+
<div role="listbox" aria-label="Tiles with subtext">
|
|
36
|
+
<Tile title="Default" isSelected={false}>
|
|
37
|
+
Subtext goes here
|
|
38
|
+
</Tile>{' '}
|
|
39
39
|
<Tile title="Selected" isSelected>
|
|
40
40
|
Subtext goes here
|
|
41
41
|
</Tile>{' '}
|
|
42
|
-
<Tile title="Disabled" isDisabled>
|
|
42
|
+
<Tile title="Disabled" isDisabled isSelected={false}>
|
|
43
43
|
Subtext goes here
|
|
44
44
|
</Tile>
|
|
45
|
-
</
|
|
45
|
+
</div>;
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
### With icon
|
|
@@ -52,17 +52,17 @@ import React from 'react';
|
|
|
52
52
|
import { Tile } from '@patternfly/react-core';
|
|
53
53
|
import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
|
|
54
54
|
|
|
55
|
-
<
|
|
56
|
-
<Tile title="Default" icon={<PlusIcon />}>
|
|
55
|
+
<div role="listbox" aria-label="Tiles with icon">
|
|
56
|
+
<Tile title="Default" icon={<PlusIcon />} isSelected={false}>
|
|
57
57
|
Subtext goes here
|
|
58
58
|
</Tile>{' '}
|
|
59
59
|
<Tile title="Selected" icon={<PlusIcon />} isSelected>
|
|
60
60
|
Subtext goes here
|
|
61
61
|
</Tile>{' '}
|
|
62
|
-
<Tile title="Disabled" icon={<PlusIcon />} isDisabled>
|
|
62
|
+
<Tile title="Disabled" icon={<PlusIcon />} isDisabled isSelected={false}>
|
|
63
63
|
Subtext goes here
|
|
64
64
|
</Tile>
|
|
65
|
-
</
|
|
65
|
+
</div>;
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
### Stacked
|
|
@@ -72,17 +72,17 @@ import React from 'react';
|
|
|
72
72
|
import { Tile } from '@patternfly/react-core';
|
|
73
73
|
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
|
|
74
74
|
|
|
75
|
-
<
|
|
76
|
-
<Tile title="Default" icon={<BellIcon />} isStacked>
|
|
75
|
+
<div role="listbox" aria-label="Stacked tiles">
|
|
76
|
+
<Tile title="Default" icon={<BellIcon />} isStacked isSelected={false}>
|
|
77
77
|
Subtext goes here
|
|
78
78
|
</Tile>{' '}
|
|
79
79
|
<Tile title="Selected" icon={<BellIcon />} isStacked isSelected>
|
|
80
80
|
Subtext goes here
|
|
81
81
|
</Tile>{' '}
|
|
82
|
-
<Tile title="Disabled" icon={<BellIcon />} isStacked isDisabled>
|
|
82
|
+
<Tile title="Disabled" icon={<BellIcon />} isStacked isDisabled isSelected={false}>
|
|
83
83
|
Subtext goes here
|
|
84
84
|
</Tile>
|
|
85
|
-
</
|
|
85
|
+
</div>;
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
### Stacked with large icons
|
|
@@ -92,17 +92,17 @@ import React from 'react';
|
|
|
92
92
|
import { Tile } from '@patternfly/react-core';
|
|
93
93
|
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
|
|
94
94
|
|
|
95
|
-
<
|
|
96
|
-
<Tile title="Default" icon={<BellIcon />} isStacked isDisplayLarge>
|
|
95
|
+
<div role="listbox" aria-label="Stacked tiles with large icons">
|
|
96
|
+
<Tile title="Default" icon={<BellIcon />} isStacked isDisplayLarge isSelected={false}>
|
|
97
97
|
Subtext goes here
|
|
98
98
|
</Tile>{' '}
|
|
99
99
|
<Tile title="Selected" icon={<BellIcon />} isStacked isDisplayLarge isSelected>
|
|
100
100
|
Subtext goes here
|
|
101
101
|
</Tile>{' '}
|
|
102
|
-
<Tile title="Disabled" icon={<BellIcon />} isStacked isDisplayLarge isDisabled>
|
|
102
|
+
<Tile title="Disabled" icon={<BellIcon />} isStacked isDisplayLarge isDisabled isSelected={false}>
|
|
103
103
|
Subtext goes here
|
|
104
104
|
</Tile>
|
|
105
|
-
</
|
|
105
|
+
</div>;
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
### With extra content
|
|
@@ -112,22 +112,24 @@ import React from 'react';
|
|
|
112
112
|
import { Tile, Flex } from '@patternfly/react-core';
|
|
113
113
|
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
|
|
114
114
|
|
|
115
|
-
<
|
|
116
|
-
<Flex
|
|
117
|
-
<
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
<
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
<
|
|
129
|
-
|
|
130
|
-
|
|
115
|
+
<div role="listbox" aria-label="Tiles with extra content">
|
|
116
|
+
<Flex>
|
|
117
|
+
<Flex flex={{ default: 'flex_1' }}>
|
|
118
|
+
<Tile title="Default" icon={<BellIcon />} isStacked isSelected={false}>
|
|
119
|
+
This is really really long subtext that goes on for so long that it has to wrap to the next line. This is really
|
|
120
|
+
really long subtext that goes on for so long that it has to wrap to the next line.
|
|
121
|
+
</Tile>
|
|
122
|
+
</Flex>
|
|
123
|
+
<Flex flex={{ default: 'flex_1' }}>
|
|
124
|
+
<Tile title="Selected" icon={<BellIcon />} isStacked isSelected>
|
|
125
|
+
This is really really long subtext that goes on for so long that it has to wrap to the next line.
|
|
126
|
+
</Tile>
|
|
127
|
+
</Flex>
|
|
128
|
+
<Flex flex={{ default: 'flex_1' }}>
|
|
129
|
+
<Tile title="Disabled" icon={<BellIcon />} isStacked isDisabled isSelected={false}>
|
|
130
|
+
Subtext goes here
|
|
131
|
+
</Tile>
|
|
132
|
+
</Flex>
|
|
131
133
|
</Flex>
|
|
132
|
-
</
|
|
134
|
+
</div>;
|
|
133
135
|
```
|
|
@@ -13,7 +13,9 @@ export interface ToolbarProps extends React.HTMLProps<HTMLDivElement>, OUIAProps
|
|
|
13
13
|
clearAllFilters?: () => void;
|
|
14
14
|
/** Text to display in the clear all filters button */
|
|
15
15
|
clearFiltersButtonText?: string;
|
|
16
|
-
/**
|
|
16
|
+
/** Custom content appended to the filter generated chip group. To maintain spacing and styling, each node should be wrapped in a ToolbarItem or ToolbarGroup. This property will remove the default "Clear all filters" button. */
|
|
17
|
+
customChipGroupContent?: React.ReactNode;
|
|
18
|
+
/** The breakpoint at which the listed filters in chip groups are collapsed down to a summary */
|
|
17
19
|
collapseListedFiltersBreakpoint?: 'all' | 'md' | 'lg' | 'xl' | '2xl';
|
|
18
20
|
/** Flag indicating if a data toolbar toggle group's expandable content is expanded */
|
|
19
21
|
isExpanded?: boolean;
|
|
@@ -129,6 +131,7 @@ export class Toolbar extends React.Component<ToolbarProps, ToolbarState> {
|
|
|
129
131
|
isSticky,
|
|
130
132
|
ouiaId,
|
|
131
133
|
numberOfFiltersText,
|
|
134
|
+
customChipGroupContent,
|
|
132
135
|
...props
|
|
133
136
|
} = this.props;
|
|
134
137
|
|
|
@@ -166,7 +169,8 @@ export class Toolbar extends React.Component<ToolbarProps, ToolbarState> {
|
|
|
166
169
|
clearAllFilters,
|
|
167
170
|
clearFiltersButtonText,
|
|
168
171
|
showClearFiltersButton,
|
|
169
|
-
toolbarId: randomId
|
|
172
|
+
toolbarId: randomId,
|
|
173
|
+
customChipGroupContent
|
|
170
174
|
}}
|
|
171
175
|
>
|
|
172
176
|
{children}
|
|
@@ -179,6 +183,7 @@ export class Toolbar extends React.Component<ToolbarProps, ToolbarState> {
|
|
|
179
183
|
numberOfFilters={numberOfFilters}
|
|
180
184
|
numberOfFiltersText={numberOfFiltersText}
|
|
181
185
|
collapseListedFiltersBreakpoint={collapseListedFiltersBreakpoint}
|
|
186
|
+
customChipGroupContent={customChipGroupContent}
|
|
182
187
|
/>
|
|
183
188
|
</ToolbarContext.Provider>
|
|
184
189
|
</div>
|
|
@@ -29,6 +29,8 @@ export interface ToolbarChipGroupContentProps extends React.HTMLProps<HTMLDivEle
|
|
|
29
29
|
numberOfFiltersText?: (numberOfFilters: number) => string;
|
|
30
30
|
/** The breakpoint at which the listed filters in chip groups are collapsed down to a summary */
|
|
31
31
|
collapseListedFiltersBreakpoint?: 'all' | 'md' | 'lg' | 'xl' | '2xl';
|
|
32
|
+
/** Custom additional content appended to the generated chips. To maintain spacing and styling, each node should be a ToolbarItem or ToolbarGroup. This property will remove the built in "Clear all filters" button. */
|
|
33
|
+
customChipGroupContent?: React.ReactNode;
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
export class ToolbarChipGroupContent extends React.Component<ToolbarChipGroupContentProps> {
|
|
@@ -50,6 +52,7 @@ export class ToolbarChipGroupContent extends React.Component<ToolbarChipGroupCon
|
|
|
50
52
|
collapseListedFiltersBreakpoint,
|
|
51
53
|
numberOfFilters,
|
|
52
54
|
numberOfFiltersText,
|
|
55
|
+
customChipGroupContent,
|
|
53
56
|
...props
|
|
54
57
|
} = this.props;
|
|
55
58
|
|
|
@@ -86,13 +89,14 @@ export class ToolbarChipGroupContent extends React.Component<ToolbarChipGroupCon
|
|
|
86
89
|
<ToolbarItem>{numberOfFiltersText(numberOfFilters)}</ToolbarItem>
|
|
87
90
|
</ToolbarGroup>
|
|
88
91
|
)}
|
|
89
|
-
{showClearFiltersButton && !isExpanded && (
|
|
92
|
+
{showClearFiltersButton && !isExpanded && !customChipGroupContent && (
|
|
90
93
|
<ToolbarItem>
|
|
91
94
|
<Button variant="link" onClick={clearChipGroups} isInline>
|
|
92
95
|
{clearFiltersButtonText}
|
|
93
96
|
</Button>
|
|
94
97
|
</ToolbarItem>
|
|
95
98
|
)}
|
|
99
|
+
{customChipGroupContent && customChipGroupContent}
|
|
96
100
|
</div>
|
|
97
101
|
);
|
|
98
102
|
}
|
|
@@ -46,7 +46,7 @@ export class ToolbarExpandableContent extends React.Component<ToolbarExpandableC
|
|
|
46
46
|
showClearFiltersButton,
|
|
47
47
|
...props
|
|
48
48
|
} = this.props;
|
|
49
|
-
const { numberOfFilters } = this.context;
|
|
49
|
+
const { numberOfFilters, customChipGroupContent } = this.context;
|
|
50
50
|
|
|
51
51
|
const clearChipGroups = () => {
|
|
52
52
|
clearAllFilters();
|
|
@@ -58,13 +58,14 @@ export class ToolbarExpandableContent extends React.Component<ToolbarExpandableC
|
|
|
58
58
|
{numberOfFilters > 0 && (
|
|
59
59
|
<ToolbarGroup className={styles.modifiers.chipContainer}>
|
|
60
60
|
<ToolbarGroup ref={chipContainerRef} />
|
|
61
|
-
{showClearFiltersButton && (
|
|
61
|
+
{showClearFiltersButton && !customChipGroupContent && (
|
|
62
62
|
<ToolbarItem>
|
|
63
63
|
<Button variant="link" onClick={clearChipGroups} isInline>
|
|
64
64
|
{clearFiltersButtonText}
|
|
65
65
|
</Button>
|
|
66
66
|
</ToolbarItem>
|
|
67
67
|
)}
|
|
68
|
+
{customChipGroupContent && customChipGroupContent}
|
|
68
69
|
</ToolbarGroup>
|
|
69
70
|
)}
|
|
70
71
|
</div>
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { render } from '@testing-library/react';
|
|
2
|
+
import { render, screen } from '@testing-library/react';
|
|
3
3
|
import { shallow } from 'enzyme';
|
|
4
4
|
import { ToolbarToggleGroup } from '../ToolbarToggleGroup';
|
|
5
5
|
import { Toolbar } from '../Toolbar';
|
|
6
6
|
import { ToolbarItem } from '../ToolbarItem';
|
|
7
7
|
import { ToolbarContent } from '../ToolbarContent';
|
|
8
|
+
import { ToolbarFilter } from '../ToolbarFilter';
|
|
9
|
+
import { ToolbarGroup } from '../ToolbarGroup';
|
|
10
|
+
import { Select, SelectVariant, SelectOption } from '../../Select';
|
|
11
|
+
import { Button } from '../../Button';
|
|
8
12
|
|
|
9
13
|
describe('ToolbarToggleGroup', () => {
|
|
10
14
|
it('should warn on bad props', () => {
|
|
@@ -59,6 +63,72 @@ describe('Toolbar', () => {
|
|
|
59
63
|
);
|
|
60
64
|
expect(view.container).toMatchSnapshot();
|
|
61
65
|
});
|
|
66
|
+
|
|
67
|
+
it('should render with custom chip content', () => {
|
|
68
|
+
const statusMenuItems = [
|
|
69
|
+
<SelectOption key="statusNew" value="New" />,
|
|
70
|
+
<SelectOption key="statusPending" value="Pending" />,
|
|
71
|
+
<SelectOption key="statusRunning" value="Running" />,
|
|
72
|
+
<SelectOption key="statusCancelled" value="Cancelled" />
|
|
73
|
+
];
|
|
74
|
+
|
|
75
|
+
const items = (
|
|
76
|
+
<React.Fragment>
|
|
77
|
+
<ToolbarToggleGroup toggleIcon={<React.Fragment />} breakpoint="xl">
|
|
78
|
+
<ToolbarGroup variant="filter-group">
|
|
79
|
+
<ToolbarFilter
|
|
80
|
+
chips={['New', 'Pending']}
|
|
81
|
+
deleteChip={(category, chip) => {}}
|
|
82
|
+
deleteChipGroup={category => {}}
|
|
83
|
+
categoryName="Status"
|
|
84
|
+
>
|
|
85
|
+
<Select
|
|
86
|
+
variant={SelectVariant.checkbox}
|
|
87
|
+
aria-label="Status"
|
|
88
|
+
onToggle={(isExpanded: boolean) => {}}
|
|
89
|
+
onSelect={(event, selection) => {}}
|
|
90
|
+
selections={['New', 'Pending']}
|
|
91
|
+
isOpen={true}
|
|
92
|
+
placeholderText="Status"
|
|
93
|
+
>
|
|
94
|
+
{statusMenuItems}
|
|
95
|
+
</Select>
|
|
96
|
+
</ToolbarFilter>
|
|
97
|
+
</ToolbarGroup>
|
|
98
|
+
</ToolbarToggleGroup>
|
|
99
|
+
</React.Fragment>
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
const customChipGroupContent = (
|
|
103
|
+
<React.Fragment>
|
|
104
|
+
<ToolbarItem>
|
|
105
|
+
<Button variant="link" onClick={() => {}} isInline>
|
|
106
|
+
Save filters
|
|
107
|
+
</Button>
|
|
108
|
+
</ToolbarItem>
|
|
109
|
+
<ToolbarItem>
|
|
110
|
+
<Button variant="link" onClick={() => {}} isInline>
|
|
111
|
+
Clear all filters
|
|
112
|
+
</Button>
|
|
113
|
+
</ToolbarItem>
|
|
114
|
+
</React.Fragment>
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
const view = render(
|
|
118
|
+
<Toolbar
|
|
119
|
+
id="toolbar-with-filter"
|
|
120
|
+
className="pf-m-toggle-group-container"
|
|
121
|
+
collapseListedFiltersBreakpoint="xl"
|
|
122
|
+
customChipGroupContent={customChipGroupContent}
|
|
123
|
+
>
|
|
124
|
+
<ToolbarContent>{items}</ToolbarContent>
|
|
125
|
+
</Toolbar>
|
|
126
|
+
);
|
|
127
|
+
// Expecting 2 matches for text because the buttons also exist in hidden expandable content for mobile view
|
|
128
|
+
expect(screen.getAllByRole('button', { name: 'Save filters' }).length).toBe(2);
|
|
129
|
+
expect(screen.getAllByRole('button', { name: 'Clear all filters' }).length).toBe(2);
|
|
130
|
+
expect(view.container).toMatchSnapshot();
|
|
131
|
+
});
|
|
62
132
|
});
|
|
63
133
|
|
|
64
134
|
describe('ToolbarItem', () => {
|