@iress-oss/ids-mcp-server 5.15.0 → 5.20.1
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/generated/docs/components_components-alert-docs.md +492 -0
- package/generated/docs/components_components-autocomplete-docs.md +3485 -0
- package/generated/docs/{components-autocomplete-recipes-docs.md → components_components-autocomplete-recipes-docs.md} +32 -14
- package/generated/docs/{components-badge-docs.md → components_components-badge-docs.md} +222 -30
- package/generated/docs/components_components-button-docs.md +2078 -0
- package/generated/docs/components_components-button-recipes-docs.md +37 -0
- package/generated/docs/components_components-buttongroup-docs.md +1045 -0
- package/generated/docs/components_components-card-docs.md +2276 -0
- package/generated/docs/{components-card-recipes-docs.md → components_components-card-recipes-docs.md} +131 -14
- package/generated/docs/components_components-checkbox-docs.md +1054 -0
- package/generated/docs/{components-checkboxgroup-docs.md → components_components-checkboxgroup-docs.md} +1000 -81
- package/generated/docs/{components-checkboxgroup-recipes-docs.md → components_components-checkboxgroup-recipes-docs.md} +101 -11
- package/generated/docs/{components-col-docs.md → components_components-col-docs.md} +331 -58
- package/generated/docs/components_components-combobox-docs.md +3767 -0
- package/generated/docs/{components-container-docs.md → components_components-container-docs.md} +61 -24
- package/generated/docs/{components-divider-docs.md → components_components-divider-docs.md} +83 -24
- package/generated/docs/{components-expander-docs.md → components_components-expander-docs.md} +264 -33
- package/generated/docs/{components-field-docs.md → components_components-field-docs.md} +814 -120
- package/generated/docs/components_components-filter-docs.md +4080 -0
- package/generated/docs/{components-form-docs.md → components_components-form-docs.md} +1515 -353
- package/generated/docs/{components-form-recipes-docs.md → components_components-form-recipes-docs.md} +170 -54
- package/generated/docs/components_components-hide-docs.md +293 -0
- package/generated/docs/components_components-icon-docs.md +1337 -0
- package/generated/docs/{components-inline-docs.md → components_components-inline-docs.md} +462 -42
- package/generated/docs/components_components-input-docs.md +1468 -0
- package/generated/docs/components_components-input-recipes-docs.md +367 -0
- package/generated/docs/components_components-inputcurrency-docs.md +432 -0
- package/generated/docs/{components-inputcurrency-recipes-docs.md → components_components-inputcurrency-recipes-docs.md} +110 -17
- package/generated/docs/components_components-label-docs.md +323 -0
- package/generated/docs/components_components-menu-docs.md +2345 -0
- package/generated/docs/components_components-menu-menuitem-docs.md +633 -0
- package/generated/docs/{components-modal-docs.md → components_components-modal-docs.md} +1625 -232
- package/generated/docs/components_components-navbar-docs.md +1847 -0
- package/generated/docs/{components-navbar-recipes-docs.md → components_components-navbar-recipes-docs.md} +697 -39
- package/generated/docs/{components-panel-docs.md → components_components-panel-docs.md} +754 -57
- package/generated/docs/components_components-placeholder-docs.md +92 -0
- package/generated/docs/components_components-popover-docs.md +1641 -0
- package/generated/docs/{components-popover-recipes-docs.md → components_components-popover-recipes-docs.md} +347 -17
- package/generated/docs/components_components-progress-docs.md +115 -0
- package/generated/docs/{components-provider-docs.md → components_components-provider-docs.md} +41 -32
- package/generated/docs/components_components-radio-docs.md +491 -0
- package/generated/docs/{components-radiogroup-docs.md → components_components-radiogroup-docs.md} +943 -75
- package/generated/docs/components_components-readonly-docs.md +263 -0
- package/generated/docs/components_components-richselect-docs.md +6497 -0
- package/generated/docs/{components-row-docs.md → components_components-row-docs.md} +353 -43
- package/generated/docs/{components-select-docs.md → components_components-select-docs.md} +719 -61
- package/generated/docs/components_components-skeleton-docs.md +480 -0
- package/generated/docs/{components-skeleton-recipes-docs.md → components_components-skeleton-recipes-docs.md} +50 -10
- package/generated/docs/{components-skiplink-docs.md → components_components-skiplink-docs.md} +53 -14
- package/generated/docs/components_components-slideout-docs.md +2262 -0
- package/generated/docs/components_components-slider-docs.md +1276 -0
- package/generated/docs/components_components-spinner-docs.md +82 -0
- package/generated/docs/{components-stack-docs.md → components_components-stack-docs.md} +223 -40
- package/generated/docs/components_components-table-docs.md +3651 -0
- package/generated/docs/components_components-tabset-docs.md +772 -0
- package/generated/docs/components_components-tabset-tab-docs.md +262 -0
- package/generated/docs/components_components-tag-docs.md +259 -0
- package/generated/docs/{components-text-docs.md → components_components-text-docs.md} +491 -51
- package/generated/docs/{components-toaster-docs.md → components_components-toaster-docs.md} +181 -79
- package/generated/docs/components_components-toaster-toast-docs.md +634 -0
- package/generated/docs/components_components-toggle-docs.md +461 -0
- package/generated/docs/{components-tooltip-docs.md → components_components-tooltip-docs.md} +286 -41
- package/generated/docs/{components-validationmessage-docs.md → components_components-validationmessage-docs.md} +230 -61
- package/generated/docs/components_contact-us-docs.md +12 -0
- package/generated/docs/{foundations-accessibility-docs.md → components_foundations-accessibility-docs.md} +11 -21
- package/generated/docs/{foundations-colours-docs.md → components_foundations-colour-030-colours.md} +8 -15
- package/generated/docs/{foundations-consistency-docs.md → components_foundations-consistency-docs.md} +12 -20
- package/generated/docs/{foundations-content-docs.md → components_foundations-content-docs.md} +6 -11
- package/generated/docs/components_foundations-introduction-docs.md +15 -0
- package/generated/docs/{foundations-principles-docs.md → components_foundations-principles-docs.md} +14 -24
- package/generated/docs/components_foundations-typography-docs.md +608 -0
- package/generated/docs/{foundations-user-experience-docs.md → components_foundations-user-experience-docs.md} +16 -26
- package/generated/docs/{foundations-visual-design-docs.md → components_foundations-visual-design-docs.md} +10 -17
- package/generated/docs/{frequently-asked-questions-docs.md → components_frequently-asked-questions-docs.md} +14 -23
- package/generated/docs/components_get-started-develop-docs.md +84 -0
- package/generated/docs/components_get-started-using-storybook-docs.md +55 -0
- package/generated/docs/components_introduction-docs.md +15 -0
- package/generated/docs/{patterns-loading-docs.md → components_patterns-loading-docs.md} +711 -143
- package/generated/docs/components_resources-changelog-docs.md +4 -0
- package/generated/docs/{resources-code-katas-docs.md → components_resources-code-katas-docs.md} +5 -9
- package/generated/docs/{resources-migration-guides-from-v4-to-v5-docs.md → components_resources-migration-guides-from-v4-to-v5-docs.md} +54 -239
- package/generated/docs/{versions-docs.md → components_versions-docs.md} +5 -8
- package/generated/docs/guidelines.md +484 -200
- package/generated/docs/introduction-docs.md +19 -30
- package/package.json +41 -45
- package/generated/docs/components-alert-docs.md +0 -130
- package/generated/docs/components-autocomplete-docs.md +0 -754
- package/generated/docs/components-button-docs.md +0 -362
- package/generated/docs/components-button-recipes-docs.md +0 -76
- package/generated/docs/components-buttongroup-docs.md +0 -310
- package/generated/docs/components-card-docs.md +0 -494
- package/generated/docs/components-checkbox-docs.md +0 -193
- package/generated/docs/components-combobox-docs.md +0 -1016
- package/generated/docs/components-filter-docs.md +0 -1109
- package/generated/docs/components-hide-docs.md +0 -265
- package/generated/docs/components-icon-docs.md +0 -553
- package/generated/docs/components-input-docs.md +0 -335
- package/generated/docs/components-input-recipes-docs.md +0 -140
- package/generated/docs/components-inputcurrency-docs.md +0 -157
- package/generated/docs/components-label-docs.md +0 -135
- package/generated/docs/components-menu-docs.md +0 -704
- package/generated/docs/components-menu-menuitem-docs.md +0 -193
- package/generated/docs/components-navbar-docs.md +0 -291
- package/generated/docs/components-placeholder-docs.md +0 -27
- package/generated/docs/components-popover-docs.md +0 -464
- package/generated/docs/components-progress-docs.md +0 -104
- package/generated/docs/components-radio-docs.md +0 -107
- package/generated/docs/components-readonly-docs.md +0 -89
- package/generated/docs/components-richselect-docs.md +0 -2433
- package/generated/docs/components-skeleton-docs.md +0 -214
- package/generated/docs/components-slideout-docs.md +0 -538
- package/generated/docs/components-slider-docs.md +0 -346
- package/generated/docs/components-spinner-docs.md +0 -59
- package/generated/docs/components-table-ag-grid-docs.md +0 -1074
- package/generated/docs/components-table-docs.md +0 -1305
- package/generated/docs/components-tabset-docs.md +0 -341
- package/generated/docs/components-tabset-tab-docs.md +0 -86
- package/generated/docs/components-tag-docs.md +0 -115
- package/generated/docs/components-toaster-toast-docs.md +0 -157
- package/generated/docs/components-toggle-docs.md +0 -158
- package/generated/docs/contact-us-docs.md +0 -27
- package/generated/docs/extensions-editor-docs.md +0 -288
- package/generated/docs/extensions-editor-recipes-docs.md +0 -39
- package/generated/docs/foundations-introduction-docs.md +0 -17
- package/generated/docs/foundations-typography-docs.md +0 -191
- package/generated/docs/get-started-develop-docs.md +0 -209
- package/generated/docs/get-started-using-storybook-docs.md +0 -68
- package/generated/docs/resources-changelog-docs.md +0 -6
- package/generated/docs/themes-available-themes-docs.md +0 -66
- package/generated/docs/themes-introduction-docs.md +0 -121
- package/generated/docs/themes-tokens-docs.md +0 -1200
- /package/{LICENSE.txt → LICENSE} +0 -0
|
@@ -1,1109 +0,0 @@
|
|
|
1
|
-
[](#filter)Filter
|
|
2
|
-
=================
|
|
3
|
-
|
|
4
|
-
Overview
|
|
5
|
-
--------
|
|
6
|
-
|
|
7
|
-
A filter allows you to pick one or more options from a list (that may be searchable) and is triggered by an activator button.
|
|
8
|
-
|
|
9
|
-
Filter
|
|
10
|
-
|
|
11
|
-
None selected
|
|
12
|
-
|
|
13
|
-
Hide code
|
|
14
|
-
|
|
15
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
16
|
-
|
|
17
|
-
<IressFilter
|
|
18
|
-
label\="Filter"
|
|
19
|
-
options\={\[
|
|
20
|
-
{
|
|
21
|
-
label: 'Option 1',
|
|
22
|
-
value: 1
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
label: 'Option 2',
|
|
26
|
-
value: 2
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
label: 'Option 3',
|
|
30
|
-
value: 3
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
label: 'Option 4',
|
|
34
|
-
value: 4
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
label: 'Option 5',
|
|
38
|
-
value: 5
|
|
39
|
-
}
|
|
40
|
-
\]}
|
|
41
|
-
popoverProps\={{
|
|
42
|
-
container: document.body
|
|
43
|
-
}}
|
|
44
|
-
/>
|
|
45
|
-
|
|
46
|
-
Copy
|
|
47
|
-
|
|
48
|
-
[](#usage)Usage
|
|
49
|
-
---------------
|
|
50
|
-
|
|
51
|
-
The `IressFilter` component has been built to be flexible enough to cover most application needs, allowing a user to add or remove data items from a displayed data set.
|
|
52
|
-
|
|
53
|
-
This component is not designed to be used within forms and should be used to provide instant updates to rendered data. Instead, in forms, you should use components like `IressSelect`, `IressCombobox` and `IressCheckboxGroup`.
|
|
54
|
-
|
|
55
|
-
Here is an example using multiple `IressFilter`s to filter an `IressTable`.
|
|
56
|
-
|
|
57
|
-
Name
|
|
58
|
-
|
|
59
|
-
None selected
|
|
60
|
-
|
|
61
|
-
Status
|
|
62
|
-
|
|
63
|
-
None selected
|
|
64
|
-
|
|
65
|
-
Location
|
|
66
|
-
|
|
67
|
-
None selected
|
|
68
|
-
|
|
69
|
-
Gender
|
|
70
|
-
|
|
71
|
-
None selected
|
|
72
|
-
|
|
73
|
-
Reset filters
|
|
74
|
-
|
|
75
|
-
* * *
|
|
76
|
-
|
|
77
|
-
System users
|
|
78
|
-
| User | Name | Status | Location | Gender |
|
|
79
|
-
| --- | --- | --- | --- | --- |
|
|
80
|
-
| farmboy | Luke Skywalker | Inactive | Temple Island | male |
|
|
81
|
-
| nevertellmetheodds | Han Solo | Inactive | unknown | male |
|
|
82
|
-
| goldenrod | C-3PO | Active | Space | n/a |
|
|
83
|
-
| whistles | R2-D2 | Active | Space | n/a |
|
|
84
|
-
| princess | Leia Organa | Inactive | unknown | female |
|
|
85
|
-
|
|
86
|
-
Hide code
|
|
87
|
-
|
|
88
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
89
|
-
|
|
90
|
-
import {
|
|
91
|
-
IressInline,
|
|
92
|
-
IressStack,
|
|
93
|
-
IressTable,
|
|
94
|
-
LabelValueMeta,
|
|
95
|
-
IressFilter,
|
|
96
|
-
IressFilterProps,
|
|
97
|
-
IressButton,
|
|
98
|
-
IressDivider,
|
|
99
|
-
} from '@iress-oss/ids-components';
|
|
100
|
-
import { useMemo, useState } from 'react';
|
|
101
|
-
import { searchStarWarsCharacters } from '@/mocks/starWars';
|
|
102
|
-
const toArray \= <T,\>(item?: T | T\[\]): T\[\] \=> {
|
|
103
|
-
if (Array.isArray(item)) {
|
|
104
|
-
return item;
|
|
105
|
-
}
|
|
106
|
-
return item !== undefined ? \[item\] : \[\];
|
|
107
|
-
};
|
|
108
|
-
const USERS \= \[
|
|
109
|
-
{
|
|
110
|
-
user: 'farmboy',
|
|
111
|
-
name: 'Luke Skywalker',
|
|
112
|
-
location: 'Temple Island',
|
|
113
|
-
gender: 'male',
|
|
114
|
-
status: 'Inactive',
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
user: 'nevertellmetheodds',
|
|
118
|
-
name: 'Han Solo',
|
|
119
|
-
location: 'unknown',
|
|
120
|
-
gender: 'male',
|
|
121
|
-
status: 'Inactive',
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
user: 'goldenrod',
|
|
125
|
-
name: 'C-3PO',
|
|
126
|
-
location: 'Space',
|
|
127
|
-
gender: 'n/a',
|
|
128
|
-
status: 'Active',
|
|
129
|
-
},
|
|
130
|
-
{
|
|
131
|
-
user: 'whistles',
|
|
132
|
-
name: 'R2-D2',
|
|
133
|
-
location: 'Space',
|
|
134
|
-
gender: 'n/a',
|
|
135
|
-
status: 'Active',
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
user: 'princess',
|
|
139
|
-
name: 'Leia Organa',
|
|
140
|
-
location: 'unknown',
|
|
141
|
-
gender: 'female',
|
|
142
|
-
status: 'Inactive',
|
|
143
|
-
},
|
|
144
|
-
\];
|
|
145
|
-
const getUniqueValues \= (key: string): LabelValueMeta\[\] \=> {
|
|
146
|
-
const unique: string\[\] \= \[\];
|
|
147
|
-
USERS.forEach((user) \=> {
|
|
148
|
-
const propVal \= user\[key as never\];
|
|
149
|
-
if (!unique.includes(propVal)) unique.push(propVal);
|
|
150
|
-
});
|
|
151
|
-
return unique.map((item: string) \=> ({
|
|
152
|
-
label: item,
|
|
153
|
-
value: item,
|
|
154
|
-
}));
|
|
155
|
-
};
|
|
156
|
-
export const FilterSearchTable \= () \=> {
|
|
157
|
-
const \[name, setName\] \= useState<LabelValueMeta\[\]\>(\[\]);
|
|
158
|
-
const \[status, setStatus\] \= useState<LabelValueMeta\[\]\>(\[\]);
|
|
159
|
-
const \[location, setLocation\] \= useState<LabelValueMeta\[\]\>(\[\]);
|
|
160
|
-
const \[gender, setGender\] \= useState<LabelValueMeta\[\]\>(\[\]);
|
|
161
|
-
const columns \= \[
|
|
162
|
-
{ key: 'user', label: 'User' },
|
|
163
|
-
{ key: 'name', label: 'Name' },
|
|
164
|
-
{ key: 'status', label: 'Status' },
|
|
165
|
-
{ key: 'location', label: 'Location' },
|
|
166
|
-
{ key: 'gender', label: 'Gender' },
|
|
167
|
-
\];
|
|
168
|
-
const rows \= useMemo(() \=> {
|
|
169
|
-
const match \= (filter: LabelValueMeta\[\], detail: string): boolean \=>
|
|
170
|
-
filter.length \=== 0 ||
|
|
171
|
-
filter.some(
|
|
172
|
-
(filterItem) \=> (filterItem.value ?? filterItem.label) \=== detail,
|
|
173
|
-
);
|
|
174
|
-
return USERS.filter(
|
|
175
|
-
(user) \=>
|
|
176
|
-
match(name, user.name) &&
|
|
177
|
-
match(status, user.status) &&
|
|
178
|
-
match(location, user.location) &&
|
|
179
|
-
match(gender, user.gender),
|
|
180
|
-
);
|
|
181
|
-
}, \[name, status, location, gender\]);
|
|
182
|
-
const handleReset \= () \=> {
|
|
183
|
-
setName(\[\]);
|
|
184
|
-
setStatus(\[\]);
|
|
185
|
-
setLocation(\[\]);
|
|
186
|
-
setGender(\[\]);
|
|
187
|
-
};
|
|
188
|
-
return (
|
|
189
|
-
<IressStack gutter\={IressStack.Gutter.Md}\>
|
|
190
|
-
<IressInline gutter\={IressInline.Gutter.Md}\>
|
|
191
|
-
<IressFilter
|
|
192
|
-
{...{
|
|
193
|
-
label: 'Filter',
|
|
194
|
-
options: \[
|
|
195
|
-
{
|
|
196
|
-
label: 'Option 1',
|
|
197
|
-
value: 1,
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
label: 'Option 2',
|
|
201
|
-
value: 2,
|
|
202
|
-
},
|
|
203
|
-
{
|
|
204
|
-
label: 'Option 3',
|
|
205
|
-
value: 3,
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
label: 'Option 4',
|
|
209
|
-
value: 4,
|
|
210
|
-
},
|
|
211
|
-
{
|
|
212
|
-
label: 'Option 5',
|
|
213
|
-
value: 5,
|
|
214
|
-
},
|
|
215
|
-
\],
|
|
216
|
-
popoverProps: {
|
|
217
|
-
container: document.body,
|
|
218
|
-
},
|
|
219
|
-
visibleResetButton: true,
|
|
220
|
-
}}
|
|
221
|
-
label\="Name"
|
|
222
|
-
options\={searchStarWarsCharacters}
|
|
223
|
-
value\={name}
|
|
224
|
-
onChange\={(value) \=> setName(toArray(value))}
|
|
225
|
-
onReset\={() \=> setName(\[\])}
|
|
226
|
-
/>
|
|
227
|
-
<IressFilter
|
|
228
|
-
{...{
|
|
229
|
-
label: 'Filter',
|
|
230
|
-
options: \[
|
|
231
|
-
{
|
|
232
|
-
label: 'Option 1',
|
|
233
|
-
value: 1,
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
label: 'Option 2',
|
|
237
|
-
value: 2,
|
|
238
|
-
},
|
|
239
|
-
{
|
|
240
|
-
label: 'Option 3',
|
|
241
|
-
value: 3,
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
label: 'Option 4',
|
|
245
|
-
value: 4,
|
|
246
|
-
},
|
|
247
|
-
{
|
|
248
|
-
label: 'Option 5',
|
|
249
|
-
value: 5,
|
|
250
|
-
},
|
|
251
|
-
\],
|
|
252
|
-
popoverProps: {
|
|
253
|
-
container: document.body,
|
|
254
|
-
},
|
|
255
|
-
visibleResetButton: true,
|
|
256
|
-
}}
|
|
257
|
-
label\="Status"
|
|
258
|
-
options\={getUniqueValues('status')}
|
|
259
|
-
value\={status}
|
|
260
|
-
onChange\={(value) \=> setStatus(toArray(value))}
|
|
261
|
-
onReset\={() \=> setStatus(\[\])}
|
|
262
|
-
/>
|
|
263
|
-
<IressFilter
|
|
264
|
-
{...{
|
|
265
|
-
label: 'Filter',
|
|
266
|
-
options: \[
|
|
267
|
-
{
|
|
268
|
-
label: 'Option 1',
|
|
269
|
-
value: 1,
|
|
270
|
-
},
|
|
271
|
-
{
|
|
272
|
-
label: 'Option 2',
|
|
273
|
-
value: 2,
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
label: 'Option 3',
|
|
277
|
-
value: 3,
|
|
278
|
-
},
|
|
279
|
-
{
|
|
280
|
-
label: 'Option 4',
|
|
281
|
-
value: 4,
|
|
282
|
-
},
|
|
283
|
-
{
|
|
284
|
-
label: 'Option 5',
|
|
285
|
-
value: 5,
|
|
286
|
-
},
|
|
287
|
-
\],
|
|
288
|
-
popoverProps: {
|
|
289
|
-
container: document.body,
|
|
290
|
-
},
|
|
291
|
-
visibleResetButton: true,
|
|
292
|
-
}}
|
|
293
|
-
label\="Location"
|
|
294
|
-
options\={getUniqueValues('location')}
|
|
295
|
-
value\={location}
|
|
296
|
-
onChange\={(value) \=> setLocation(toArray(value))}
|
|
297
|
-
onReset\={() \=> setLocation(\[\])}
|
|
298
|
-
/>
|
|
299
|
-
<IressFilter
|
|
300
|
-
{...{
|
|
301
|
-
label: 'Filter',
|
|
302
|
-
options: \[
|
|
303
|
-
{
|
|
304
|
-
label: 'Option 1',
|
|
305
|
-
value: 1,
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
label: 'Option 2',
|
|
309
|
-
value: 2,
|
|
310
|
-
},
|
|
311
|
-
{
|
|
312
|
-
label: 'Option 3',
|
|
313
|
-
value: 3,
|
|
314
|
-
},
|
|
315
|
-
{
|
|
316
|
-
label: 'Option 4',
|
|
317
|
-
value: 4,
|
|
318
|
-
},
|
|
319
|
-
{
|
|
320
|
-
label: 'Option 5',
|
|
321
|
-
value: 5,
|
|
322
|
-
},
|
|
323
|
-
\],
|
|
324
|
-
popoverProps: {
|
|
325
|
-
container: document.body,
|
|
326
|
-
},
|
|
327
|
-
visibleResetButton: true,
|
|
328
|
-
}}
|
|
329
|
-
label\="Gender"
|
|
330
|
-
options\={getUniqueValues('gender')}
|
|
331
|
-
value\={gender}
|
|
332
|
-
onChange\={(value) \=> setGender(toArray(value))}
|
|
333
|
-
onReset\={() \=> setGender(\[\])}
|
|
334
|
-
/>
|
|
335
|
-
<IressButton onClick\={handleReset} mode\={IressButton.Mode.Tertiary}\>
|
|
336
|
-
Reset filters </IressButton\>
|
|
337
|
-
</IressInline\>
|
|
338
|
-
<IressDivider />
|
|
339
|
-
<IressTable
|
|
340
|
-
caption\="System users"
|
|
341
|
-
columns\={columns}
|
|
342
|
-
rows\={rows}
|
|
343
|
-
empty\={'No results found'}
|
|
344
|
-
/>
|
|
345
|
-
</IressStack\>
|
|
346
|
-
);
|
|
347
|
-
};
|
|
348
|
-
|
|
349
|
-
Copy
|
|
350
|
-
|
|
351
|
-
### [](#label)Label
|
|
352
|
-
|
|
353
|
-
The `label` prop is required for the filter to be displayed. It is used to describe the filter to the user.
|
|
354
|
-
|
|
355
|
-
When the filter has selected options, it will append the label of the first option, or the number of selected options if `multiSelect` is true and there is more than one item selected.
|
|
356
|
-
|
|
357
|
-
Custom label
|
|
358
|
-
|
|
359
|
-
None selected
|
|
360
|
-
|
|
361
|
-
Hide code
|
|
362
|
-
|
|
363
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
364
|
-
|
|
365
|
-
<IressFilter
|
|
366
|
-
label\="Custom label"
|
|
367
|
-
multiSelect
|
|
368
|
-
options\={\[
|
|
369
|
-
{
|
|
370
|
-
label: 'Option 1',
|
|
371
|
-
value: 1
|
|
372
|
-
},
|
|
373
|
-
{
|
|
374
|
-
label: 'Option 2',
|
|
375
|
-
value: 2
|
|
376
|
-
},
|
|
377
|
-
{
|
|
378
|
-
label: 'Option 3',
|
|
379
|
-
value: 3
|
|
380
|
-
},
|
|
381
|
-
{
|
|
382
|
-
label: 'Option 4',
|
|
383
|
-
value: 4
|
|
384
|
-
},
|
|
385
|
-
{
|
|
386
|
-
label: 'Option 5',
|
|
387
|
-
value: 5
|
|
388
|
-
}
|
|
389
|
-
\]}
|
|
390
|
-
popoverProps\={{
|
|
391
|
-
container: document.body
|
|
392
|
-
}}
|
|
393
|
-
/>
|
|
394
|
-
|
|
395
|
-
Copy
|
|
396
|
-
|
|
397
|
-
### [](#uncontrolled)Uncontrolled
|
|
398
|
-
|
|
399
|
-
The `defaultValue` prop can be used to set the initial value of the combobox. The value will be managed by the component.
|
|
400
|
-
|
|
401
|
-
**Note:** The `defaultValue` prop is not checked against the options provided, allowing it to work with asynchronous options.
|
|
402
|
-
|
|
403
|
-
Filter: Option 1
|
|
404
|
-
|
|
405
|
-
None selected
|
|
406
|
-
|
|
407
|
-
Hide code
|
|
408
|
-
|
|
409
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
410
|
-
|
|
411
|
-
<IressFilter
|
|
412
|
-
defaultValue\={{
|
|
413
|
-
label: 'Option 1',
|
|
414
|
-
value: 1
|
|
415
|
-
}}
|
|
416
|
-
label\="Filter"
|
|
417
|
-
options\={\[
|
|
418
|
-
{
|
|
419
|
-
label: 'Option 1',
|
|
420
|
-
value: 1
|
|
421
|
-
},
|
|
422
|
-
{
|
|
423
|
-
label: 'Option 2',
|
|
424
|
-
value: 2
|
|
425
|
-
},
|
|
426
|
-
{
|
|
427
|
-
label: 'Option 3',
|
|
428
|
-
value: 3
|
|
429
|
-
},
|
|
430
|
-
{
|
|
431
|
-
label: 'Option 4',
|
|
432
|
-
value: 4
|
|
433
|
-
},
|
|
434
|
-
{
|
|
435
|
-
label: 'Option 5',
|
|
436
|
-
value: 5
|
|
437
|
-
}
|
|
438
|
-
\]}
|
|
439
|
-
popoverProps\={{
|
|
440
|
-
container: document.body
|
|
441
|
-
}}
|
|
442
|
-
/>
|
|
443
|
-
|
|
444
|
-
Copy
|
|
445
|
-
|
|
446
|
-
### [](#controlled)Controlled
|
|
447
|
-
|
|
448
|
-
The `value` prop can be used to completely control the state of the component. Use the `onChange` and `onReset` props to sync your state with the component.
|
|
449
|
-
|
|
450
|
-
**Note:** The `value` prop is not checked against the options provided, allowing it to work with asynchronous options.
|
|
451
|
-
|
|
452
|
-
Filter
|
|
453
|
-
|
|
454
|
-
None selected
|
|
455
|
-
|
|
456
|
-
Hide code
|
|
457
|
-
|
|
458
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
459
|
-
|
|
460
|
-
import { IressFilter, IressFilterProps } from '@iress-oss/ids-components';
|
|
461
|
-
import { useState } from 'react';
|
|
462
|
-
export const FilterUsingState \= () \=> {
|
|
463
|
-
const \[value, setValue\] \= useState<IressFilterProps\['value'\]\>();
|
|
464
|
-
return (
|
|
465
|
-
<IressFilter
|
|
466
|
-
{...{
|
|
467
|
-
label: 'Filter',
|
|
468
|
-
options: \[
|
|
469
|
-
{
|
|
470
|
-
label: 'Option 1',
|
|
471
|
-
value: 1,
|
|
472
|
-
},
|
|
473
|
-
{
|
|
474
|
-
label: 'Option 2',
|
|
475
|
-
value: 2,
|
|
476
|
-
},
|
|
477
|
-
{
|
|
478
|
-
label: 'Option 3',
|
|
479
|
-
value: 3,
|
|
480
|
-
},
|
|
481
|
-
{
|
|
482
|
-
label: 'Option 4',
|
|
483
|
-
value: 4,
|
|
484
|
-
},
|
|
485
|
-
{
|
|
486
|
-
label: 'Option 5',
|
|
487
|
-
value: 5,
|
|
488
|
-
},
|
|
489
|
-
\],
|
|
490
|
-
popoverProps: {
|
|
491
|
-
container: document.body,
|
|
492
|
-
},
|
|
493
|
-
}}
|
|
494
|
-
onChange\={(newValue) \=> setValue(newValue)}
|
|
495
|
-
onReset\={() \=> setValue(undefined)}
|
|
496
|
-
value\={value}
|
|
497
|
-
/>
|
|
498
|
-
);
|
|
499
|
-
};
|
|
500
|
-
|
|
501
|
-
Copy
|
|
502
|
-
|
|
503
|
-
### [](#multiple-selection)Multiple selection
|
|
504
|
-
|
|
505
|
-
Using the `multiSelect` prop, the `IressFilter` will allow the user to make multiple selections.
|
|
506
|
-
|
|
507
|
-
Filter
|
|
508
|
-
|
|
509
|
-
None selected
|
|
510
|
-
|
|
511
|
-
Hide code
|
|
512
|
-
|
|
513
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
514
|
-
|
|
515
|
-
<IressFilter
|
|
516
|
-
label\="Filter"
|
|
517
|
-
multiSelect
|
|
518
|
-
options\={\[
|
|
519
|
-
{
|
|
520
|
-
label: 'Option 1',
|
|
521
|
-
value: 1
|
|
522
|
-
},
|
|
523
|
-
{
|
|
524
|
-
label: 'Option 2',
|
|
525
|
-
value: 2
|
|
526
|
-
},
|
|
527
|
-
{
|
|
528
|
-
label: 'Option 3',
|
|
529
|
-
value: 3
|
|
530
|
-
},
|
|
531
|
-
{
|
|
532
|
-
label: 'Option 4',
|
|
533
|
-
value: 4
|
|
534
|
-
},
|
|
535
|
-
{
|
|
536
|
-
label: 'Option 5',
|
|
537
|
-
value: 5
|
|
538
|
-
}
|
|
539
|
-
\]}
|
|
540
|
-
popoverProps\={{
|
|
541
|
-
container: document.body
|
|
542
|
-
}}
|
|
543
|
-
/>
|
|
544
|
-
|
|
545
|
-
Copy
|
|
546
|
-
|
|
547
|
-
### [](#providing-options)Providing options
|
|
548
|
-
|
|
549
|
-
#### [](#options)`options`
|
|
550
|
-
|
|
551
|
-
The `options` prop is required for the combobox. You can provide an array of `LabelValueMeta[]` objects to the `options` prop. Filtering is done based on the `label` property.
|
|
552
|
-
|
|
553
|
-
Filter
|
|
554
|
-
|
|
555
|
-
None selected
|
|
556
|
-
|
|
557
|
-
Hide code
|
|
558
|
-
|
|
559
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
560
|
-
|
|
561
|
-
<IressFilter
|
|
562
|
-
label\="Filter"
|
|
563
|
-
options\={\[
|
|
564
|
-
{
|
|
565
|
-
label: 'Option 1',
|
|
566
|
-
value: 1
|
|
567
|
-
},
|
|
568
|
-
{
|
|
569
|
-
label: 'Option 2',
|
|
570
|
-
value: 2
|
|
571
|
-
},
|
|
572
|
-
{
|
|
573
|
-
label: 'Option 3',
|
|
574
|
-
value: 3
|
|
575
|
-
},
|
|
576
|
-
{
|
|
577
|
-
label: 'Option 4',
|
|
578
|
-
value: 4
|
|
579
|
-
},
|
|
580
|
-
{
|
|
581
|
-
label: 'Option 5',
|
|
582
|
-
value: 5
|
|
583
|
-
}
|
|
584
|
-
\]}
|
|
585
|
-
popoverProps\={{
|
|
586
|
-
container: document.body
|
|
587
|
-
}}
|
|
588
|
-
/>
|
|
589
|
-
|
|
590
|
-
Copy
|
|
591
|
-
|
|
592
|
-
#### [](#asynchronous-options)Asynchronous `options`
|
|
593
|
-
|
|
594
|
-
If you would like to render suggestions from the server, you can pass a function to the `options` prop. It accepts a string parameter and returns a promise that resolves to an array of `LabelValueMeta[]` objects. No filtering is done for asynchronous options, you must filter the options yourself using the query.
|
|
595
|
-
|
|
596
|
-
**Note:** Asynchronous `options` will automatically set the `searchable` prop to true.
|
|
597
|
-
|
|
598
|
-
Filter
|
|
599
|
-
|
|
600
|
-
None selected
|
|
601
|
-
|
|
602
|
-
Hide code
|
|
603
|
-
|
|
604
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
605
|
-
|
|
606
|
-
import { IressFilter, IressFilterProps } from '@iress-oss/ids-components';
|
|
607
|
-
interface StarWarsCharacter {
|
|
608
|
-
name: string;
|
|
609
|
-
gender: string;
|
|
610
|
-
}
|
|
611
|
-
interface StarWarsCharacterApi {
|
|
612
|
-
results: StarWarsCharacter\[\];
|
|
613
|
-
}
|
|
614
|
-
export const FilterUsingAsync \= () \=> (
|
|
615
|
-
<IressFilter
|
|
616
|
-
{...{
|
|
617
|
-
label: 'Filter',
|
|
618
|
-
options: \[
|
|
619
|
-
{
|
|
620
|
-
label: 'Option 1',
|
|
621
|
-
value: 1,
|
|
622
|
-
},
|
|
623
|
-
{
|
|
624
|
-
label: 'Option 2',
|
|
625
|
-
value: 2,
|
|
626
|
-
},
|
|
627
|
-
{
|
|
628
|
-
label: 'Option 3',
|
|
629
|
-
value: 3,
|
|
630
|
-
},
|
|
631
|
-
{
|
|
632
|
-
label: 'Option 4',
|
|
633
|
-
value: 4,
|
|
634
|
-
},
|
|
635
|
-
{
|
|
636
|
-
label: 'Option 5',
|
|
637
|
-
value: 5,
|
|
638
|
-
},
|
|
639
|
-
\],
|
|
640
|
-
popoverProps: {
|
|
641
|
-
container: document.body,
|
|
642
|
-
},
|
|
643
|
-
searchable: true,
|
|
644
|
-
}}
|
|
645
|
-
options\={async (query: string) \=> {
|
|
646
|
-
if (!query) return \[\];
|
|
647
|
-
const data \= await fetch(
|
|
648
|
-
\`https://swapi.py4e.com/api/people/?search=${query}\`,
|
|
649
|
-
).then((response) \=> response.json() as Promise<StarWarsCharacterApi\>);
|
|
650
|
-
return data.results.map((character: StarWarsCharacter) \=> ({
|
|
651
|
-
label: character.name,
|
|
652
|
-
value: character.name,
|
|
653
|
-
meta: character.gender,
|
|
654
|
-
}));
|
|
655
|
-
}}
|
|
656
|
-
/>
|
|
657
|
-
);
|
|
658
|
-
|
|
659
|
-
Copy
|
|
660
|
-
|
|
661
|
-
#### [](#initialoptions)`initialOptions`
|
|
662
|
-
|
|
663
|
-
If you want to provide initial options to the user, you can use the `initialOptions` prop. This is useful when you want to provide a list of options to the user before they start typing (eg. recommended search terms).
|
|
664
|
-
|
|
665
|
-
**Note:** `initialOptions` only works if `searchable` is true.
|
|
666
|
-
|
|
667
|
-
Filter
|
|
668
|
-
|
|
669
|
-
None selected
|
|
670
|
-
|
|
671
|
-
Hide code
|
|
672
|
-
|
|
673
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
674
|
-
|
|
675
|
-
<IressFilter
|
|
676
|
-
initialOptions\={\[
|
|
677
|
-
{
|
|
678
|
-
label: 'Favourite option 1',
|
|
679
|
-
value: 'fav-1'
|
|
680
|
-
},
|
|
681
|
-
{
|
|
682
|
-
label: 'Favourite option 2',
|
|
683
|
-
value: 'fav-2'
|
|
684
|
-
},
|
|
685
|
-
{
|
|
686
|
-
label: 'Favourite option 3',
|
|
687
|
-
value: 'fav-3'
|
|
688
|
-
}
|
|
689
|
-
\]}
|
|
690
|
-
label\="Filter"
|
|
691
|
-
options\={\[
|
|
692
|
-
{
|
|
693
|
-
label: 'Option 1',
|
|
694
|
-
value: 1
|
|
695
|
-
},
|
|
696
|
-
{
|
|
697
|
-
label: 'Option 2',
|
|
698
|
-
value: 2
|
|
699
|
-
},
|
|
700
|
-
{
|
|
701
|
-
label: 'Option 3',
|
|
702
|
-
value: 3
|
|
703
|
-
},
|
|
704
|
-
{
|
|
705
|
-
label: 'Option 4',
|
|
706
|
-
value: 4
|
|
707
|
-
},
|
|
708
|
-
{
|
|
709
|
-
label: 'Option 5',
|
|
710
|
-
value: 5
|
|
711
|
-
}
|
|
712
|
-
\]}
|
|
713
|
-
popoverProps\={{
|
|
714
|
-
container: document.body
|
|
715
|
-
}}
|
|
716
|
-
searchable
|
|
717
|
-
/>
|
|
718
|
-
|
|
719
|
-
Copy
|
|
720
|
-
|
|
721
|
-
### [](#complex-options)Complex Options
|
|
722
|
-
|
|
723
|
-
The options prop also accepts further properties for each option. This is useful for displaying other data that compliments the main label.
|
|
724
|
-
|
|
725
|
-
* append: accepts a ReactNode to append to the end of the option, usually a badge.
|
|
726
|
-
* meta: accepts a ReactNode to display additional information about the option.
|
|
727
|
-
* prepend: accepts a ReactNode to add to the start of the option, usually an icon.
|
|
728
|
-
|
|
729
|
-
All `IressFilter`s accept meta as an attribute in the option array.
|
|
730
|
-
|
|
731
|
-
User
|
|
732
|
-
|
|
733
|
-
None selected
|
|
734
|
-
|
|
735
|
-
Hide code
|
|
736
|
-
|
|
737
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
738
|
-
|
|
739
|
-
<IressFilter
|
|
740
|
-
label\="User"
|
|
741
|
-
options\={\[
|
|
742
|
-
{
|
|
743
|
-
label: 'John Smith',
|
|
744
|
-
meta: \[
|
|
745
|
-
<IressText key\="opt1-type" element\="small" mode\="muted"\>Individual</IressText\>,
|
|
746
|
-
<IressText key\="opt1-email" element\="small" mode\="muted"\>test@iress.com</IressText\>
|
|
747
|
-
\],
|
|
748
|
-
value: 'opt1'
|
|
749
|
-
},
|
|
750
|
-
{
|
|
751
|
-
label: 'Tom Wilson',
|
|
752
|
-
meta: \[
|
|
753
|
-
<IressText key\="opt2-type" element\="small" mode\="muted"\>Individual</IressText\>
|
|
754
|
-
\],
|
|
755
|
-
value: 'opt2'
|
|
756
|
-
},
|
|
757
|
-
{
|
|
758
|
-
append: <IressBadge mode\="success"\>Active</IressBadge\>,
|
|
759
|
-
label: 'Alice Kay',
|
|
760
|
-
meta: \[
|
|
761
|
-
<IressText key\="opt3-type" element\="small" mode\="muted"\>Individual</IressText\>
|
|
762
|
-
\],
|
|
763
|
-
value: 'opt3'
|
|
764
|
-
},
|
|
765
|
-
{
|
|
766
|
-
label: 'John Smith',
|
|
767
|
-
meta: \[
|
|
768
|
-
<IressText key\="opt4-type" element\="small" mode\="muted"\>Business</IressText\>,
|
|
769
|
-
<IressText key\="opt4-phone" element\="small" mode\="muted"\>0432325675</IressText\>
|
|
770
|
-
\],
|
|
771
|
-
value: 'opt4'
|
|
772
|
-
},
|
|
773
|
-
{
|
|
774
|
-
label: 'Eelin Team',
|
|
775
|
-
meta: \[
|
|
776
|
-
<IressText key\="opt5-contact" element\="small" mode\="muted"\>test2@iress.com, 0432325675</IressText\>
|
|
777
|
-
\],
|
|
778
|
-
value: 'opt5'
|
|
779
|
-
},
|
|
780
|
-
{
|
|
781
|
-
label: 'Eelin Team',
|
|
782
|
-
meta: \[
|
|
783
|
-
<IressText key\="opt6-contact" element\="small" mode\="muted"\>test3@iress.com, 0439873244</IressText\>
|
|
784
|
-
\],
|
|
785
|
-
value: 'opt6'
|
|
786
|
-
}
|
|
787
|
-
\]}
|
|
788
|
-
popoverProps\={{
|
|
789
|
-
container: document.body
|
|
790
|
-
}}
|
|
791
|
-
/>
|
|
792
|
-
|
|
793
|
-
Copy
|
|
794
|
-
|
|
795
|
-
[](#behaviour)Behaviour
|
|
796
|
-
-----------------------
|
|
797
|
-
|
|
798
|
-
* When the activator is tapped, the filter will open
|
|
799
|
-
* Up and Down Arrow keys are used to navigate the options
|
|
800
|
-
* When focus is on the search input:
|
|
801
|
-
* Pressing the down key will move focus to the first menu item
|
|
802
|
-
* If `visibleResetButton` is set to true, pressing the down key will focus the reset button instead
|
|
803
|
-
* When focus is on the reset button:
|
|
804
|
-
* Pressing the down key will move focus to the first menu item
|
|
805
|
-
* Pressing the Space or Enter keys when focussed on an option will select it
|
|
806
|
-
* Pressing the Escape key will close the filter and place focus back on to the activator button
|
|
807
|
-
|
|
808
|
-
[](#examples)Examples
|
|
809
|
-
---------------------
|
|
810
|
-
|
|
811
|
-
### [](#input-props)Input props
|
|
812
|
-
|
|
813
|
-
You can customise some settings of the query input by setting the `inputProps`.
|
|
814
|
-
|
|
815
|
-
It does have some defaults to help with user experience. `prepend` automatically has a search icon, and `clearable` and `watermark` are set to true by default.
|
|
816
|
-
|
|
817
|
-
Filter
|
|
818
|
-
|
|
819
|
-
None selected
|
|
820
|
-
|
|
821
|
-
Hide code
|
|
822
|
-
|
|
823
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
824
|
-
|
|
825
|
-
<IressFilter
|
|
826
|
-
inputProps\={{
|
|
827
|
-
placeholder: 'Search...'
|
|
828
|
-
}}
|
|
829
|
-
label\="Filter"
|
|
830
|
-
options\={\[
|
|
831
|
-
{
|
|
832
|
-
label: 'Option 1',
|
|
833
|
-
value: 1
|
|
834
|
-
},
|
|
835
|
-
{
|
|
836
|
-
label: 'Option 2',
|
|
837
|
-
value: 2
|
|
838
|
-
},
|
|
839
|
-
{
|
|
840
|
-
label: 'Option 3',
|
|
841
|
-
value: 3
|
|
842
|
-
},
|
|
843
|
-
{
|
|
844
|
-
label: 'Option 4',
|
|
845
|
-
value: 4
|
|
846
|
-
},
|
|
847
|
-
{
|
|
848
|
-
label: 'Option 5',
|
|
849
|
-
value: 5
|
|
850
|
-
}
|
|
851
|
-
\]}
|
|
852
|
-
popoverProps\={{
|
|
853
|
-
container: document.body
|
|
854
|
-
}}
|
|
855
|
-
searchable
|
|
856
|
-
/>
|
|
857
|
-
|
|
858
|
-
Copy
|
|
859
|
-
|
|
860
|
-
### [](#searchable)Searchable
|
|
861
|
-
|
|
862
|
-
When an `IressFilter` has 10 or more options, it is recommended that you enable the search functionality. This can be done by adding the `searchable` prop.
|
|
863
|
-
|
|
864
|
-
**Note:** When using asynchronous options, the `searchable` prop is automatically set to true.
|
|
865
|
-
|
|
866
|
-
Filter
|
|
867
|
-
|
|
868
|
-
None selected
|
|
869
|
-
|
|
870
|
-
Hide code
|
|
871
|
-
|
|
872
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
873
|
-
|
|
874
|
-
<IressFilter
|
|
875
|
-
label\="Filter"
|
|
876
|
-
options\={\[
|
|
877
|
-
{
|
|
878
|
-
label: 'Option 1',
|
|
879
|
-
value: 1
|
|
880
|
-
},
|
|
881
|
-
{
|
|
882
|
-
label: 'Option 2',
|
|
883
|
-
value: 2
|
|
884
|
-
},
|
|
885
|
-
{
|
|
886
|
-
label: 'Option 3',
|
|
887
|
-
value: 3
|
|
888
|
-
},
|
|
889
|
-
{
|
|
890
|
-
label: 'Option 4',
|
|
891
|
-
value: 4
|
|
892
|
-
},
|
|
893
|
-
{
|
|
894
|
-
label: 'Option 5',
|
|
895
|
-
value: 5
|
|
896
|
-
}
|
|
897
|
-
\]}
|
|
898
|
-
popoverProps\={{
|
|
899
|
-
container: {}
|
|
900
|
-
}}
|
|
901
|
-
searchable
|
|
902
|
-
/>
|
|
903
|
-
|
|
904
|
-
Copy
|
|
905
|
-
|
|
906
|
-
### [](#reset-filters)Reset filters
|
|
907
|
-
|
|
908
|
-
Adding the `visibleResetButton` prop adds a way for the user a way to easily reset their choices. This works for single and multiple selection filters.
|
|
909
|
-
|
|
910
|
-
Below are examples of both single selects and multi selects with `visibleResetButton` enabled.
|
|
911
|
-
|
|
912
|
-
Filter
|
|
913
|
-
|
|
914
|
-
None selected
|
|
915
|
-
|
|
916
|
-
Hide code
|
|
917
|
-
|
|
918
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
919
|
-
|
|
920
|
-
<IressFilter
|
|
921
|
-
label\="Filter"
|
|
922
|
-
options\={\[
|
|
923
|
-
{
|
|
924
|
-
label: 'Option 1',
|
|
925
|
-
value: 1
|
|
926
|
-
},
|
|
927
|
-
{
|
|
928
|
-
label: 'Option 2',
|
|
929
|
-
value: 2
|
|
930
|
-
},
|
|
931
|
-
{
|
|
932
|
-
label: 'Option 3',
|
|
933
|
-
value: 3
|
|
934
|
-
},
|
|
935
|
-
{
|
|
936
|
-
label: 'Option 4',
|
|
937
|
-
value: 4
|
|
938
|
-
},
|
|
939
|
-
{
|
|
940
|
-
label: 'Option 5',
|
|
941
|
-
value: 5
|
|
942
|
-
}
|
|
943
|
-
\]}
|
|
944
|
-
popoverProps\={{
|
|
945
|
-
container: document.body
|
|
946
|
-
}}
|
|
947
|
-
visibleResetButton
|
|
948
|
-
/>
|
|
949
|
-
|
|
950
|
-
Copy
|
|
951
|
-
|
|
952
|
-
### [](#no-results)No results
|
|
953
|
-
|
|
954
|
-
If you would like to show a message when there are no results, you can use the `searchNoResultsText` prop. It accepts any React node.
|
|
955
|
-
|
|
956
|
-
Filter
|
|
957
|
-
|
|
958
|
-
None selected
|
|
959
|
-
|
|
960
|
-
Hide code
|
|
961
|
-
|
|
962
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
963
|
-
|
|
964
|
-
<IressFilter
|
|
965
|
-
inputProps\={{
|
|
966
|
-
placeholder: 'Type "no" to see the no results text'
|
|
967
|
-
}}
|
|
968
|
-
label\="Filter"
|
|
969
|
-
options\={\[
|
|
970
|
-
{
|
|
971
|
-
label: 'Option 1',
|
|
972
|
-
value: 1
|
|
973
|
-
},
|
|
974
|
-
{
|
|
975
|
-
label: 'Option 2',
|
|
976
|
-
value: 2
|
|
977
|
-
},
|
|
978
|
-
{
|
|
979
|
-
label: 'Option 3',
|
|
980
|
-
value: 3
|
|
981
|
-
},
|
|
982
|
-
{
|
|
983
|
-
label: 'Option 4',
|
|
984
|
-
value: 4
|
|
985
|
-
},
|
|
986
|
-
{
|
|
987
|
-
label: 'Option 5',
|
|
988
|
-
value: 5
|
|
989
|
-
}
|
|
990
|
-
\]}
|
|
991
|
-
popoverProps\={{
|
|
992
|
-
container: document.body
|
|
993
|
-
}}
|
|
994
|
-
searchNoResultsText\={<IressPanel className\="iress-u-text"\>No results found</IressPanel\>}
|
|
995
|
-
searchable
|
|
996
|
-
/>
|
|
997
|
-
|
|
998
|
-
Copy
|
|
999
|
-
|
|
1000
|
-
### [](#popover-props)Popover props
|
|
1001
|
-
|
|
1002
|
-
Under the hood, filter uses `IressPopover` to display the filter options. You can customise this with `popoverProps`. It accepts `align`, `className`, `container` and `displayMode`.
|
|
1003
|
-
|
|
1004
|
-
There are two additional props that filter accepts to customise the popover: `append` and `prepend`. You can place additional content above or below the results using these props.
|
|
1005
|
-
|
|
1006
|
-
Filter
|
|
1007
|
-
|
|
1008
|
-
None selected
|
|
1009
|
-
|
|
1010
|
-
Hide code
|
|
1011
|
-
|
|
1012
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
1013
|
-
|
|
1014
|
-
<IressFilter
|
|
1015
|
-
label\="Filter"
|
|
1016
|
-
options\={\[
|
|
1017
|
-
{
|
|
1018
|
-
label: 'Option 1',
|
|
1019
|
-
value: 1
|
|
1020
|
-
},
|
|
1021
|
-
{
|
|
1022
|
-
label: 'Option 2',
|
|
1023
|
-
value: 2
|
|
1024
|
-
},
|
|
1025
|
-
{
|
|
1026
|
-
label: 'Option 3',
|
|
1027
|
-
value: 3
|
|
1028
|
-
},
|
|
1029
|
-
{
|
|
1030
|
-
label: 'Option 4',
|
|
1031
|
-
value: 4
|
|
1032
|
-
},
|
|
1033
|
-
{
|
|
1034
|
-
label: 'Option 5',
|
|
1035
|
-
value: 5
|
|
1036
|
-
}
|
|
1037
|
-
\]}
|
|
1038
|
-
popoverProps\={{
|
|
1039
|
-
append: <IressPanel\><IressButton\>Add an option</IressButton\></IressPanel\>,
|
|
1040
|
-
container: document.body
|
|
1041
|
-
}}
|
|
1042
|
-
/>
|
|
1043
|
-
|
|
1044
|
-
Copy
|
|
1045
|
-
|
|
1046
|
-
### [](#selected-options-text)Selected options text
|
|
1047
|
-
|
|
1048
|
-
In `multiSelect` mode, the selections options are displayed using the `selectedOptionsText` prop. You can customise this text to suit your needs. It will replace `{{numOptions}}` with the number of selected options.
|
|
1049
|
-
|
|
1050
|
-
Filter
|
|
1051
|
-
|
|
1052
|
-
None selected
|
|
1053
|
-
|
|
1054
|
-
Hide code
|
|
1055
|
-
|
|
1056
|
-
\[data-radix-scroll-area-viewport\] { scrollbar-width: none; -ms-overflow-style: none; -webkit-overflow-scrolling: touch; } \[data-radix-scroll-area-viewport\]::-webkit-scrollbar { display: none; } :where(\[data-radix-scroll-area-viewport\]) { display: flex; flex-direction: column; align-items: stretch; } :where(\[data-radix-scroll-area-content\]) { flex-grow: 1; }
|
|
1057
|
-
|
|
1058
|
-
<IressFilter
|
|
1059
|
-
label\="Filter"
|
|
1060
|
-
multiSelect
|
|
1061
|
-
options\={\[
|
|
1062
|
-
{
|
|
1063
|
-
label: 'Option 1',
|
|
1064
|
-
value: 1
|
|
1065
|
-
},
|
|
1066
|
-
{
|
|
1067
|
-
label: 'Option 2',
|
|
1068
|
-
value: 2
|
|
1069
|
-
},
|
|
1070
|
-
{
|
|
1071
|
-
label: 'Option 3',
|
|
1072
|
-
value: 3
|
|
1073
|
-
},
|
|
1074
|
-
{
|
|
1075
|
-
label: 'Option 4',
|
|
1076
|
-
value: 4
|
|
1077
|
-
},
|
|
1078
|
-
{
|
|
1079
|
-
label: 'Option 5',
|
|
1080
|
-
value: 5
|
|
1081
|
-
}
|
|
1082
|
-
\]}
|
|
1083
|
-
popoverProps\={{
|
|
1084
|
-
container: document.body
|
|
1085
|
-
}}
|
|
1086
|
-
selectedOptionsText\="{{numOptions}} activated"
|
|
1087
|
-
/>
|
|
1088
|
-
|
|
1089
|
-
Copy
|
|
1090
|
-
|
|
1091
|
-
On this page
|
|
1092
|
-
|
|
1093
|
-
* [Overview](#overview)
|
|
1094
|
-
* [Props](#props)
|
|
1095
|
-
* [Usage](#usage)
|
|
1096
|
-
* [Label](#label)
|
|
1097
|
-
* [Uncontrolled](#uncontrolled)
|
|
1098
|
-
* [Controlled](#controlled)
|
|
1099
|
-
* [Multiple selection](#multiple-selection)
|
|
1100
|
-
* [Providing options](#providing-options)
|
|
1101
|
-
* [Complex Options](#complex-options)
|
|
1102
|
-
* [Behaviour](#behaviour)
|
|
1103
|
-
* [Examples](#examples)
|
|
1104
|
-
* [Input props](#input-props)
|
|
1105
|
-
* [Searchable](#searchable)
|
|
1106
|
-
* [Reset filters](#reset-filters)
|
|
1107
|
-
* [No results](#no-results)
|
|
1108
|
-
* [Popover props](#popover-props)
|
|
1109
|
-
* [Selected options text](#selected-options-text)
|