Skip to content

Commit d3c6305

Browse files
chore(SelectPanel): do not show selected items in search results unless included by the query (#5858)
1 parent f2b7450 commit d3c6305

File tree

5 files changed

+24
-151
lines changed

5 files changed

+24
-151
lines changed

packages/react/src/SelectPanel/SelectPanel.dev.stories.tsx

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,7 @@ const items: ItemInput[] = [
7474
export const WithCss = () => {
7575
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
7676
const [filter, setFilter] = useState('')
77-
const filteredItems = items.filter(
78-
item =>
79-
// design guidelines say to always show selected items in the list
80-
selected.some(selectedItem => selectedItem.text === item.text) ||
81-
// then filter the rest
82-
item.text?.toLowerCase().startsWith(filter.toLowerCase()),
83-
)
77+
const filteredItems = items.filter(item => item.text?.toLowerCase().startsWith(filter.toLowerCase()))
8478
// design guidelines say to sort selected items first
8579
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
8680
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -126,13 +120,7 @@ export const WithCss = () => {
126120
export const WithSx = () => {
127121
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
128122
const [filter, setFilter] = useState('')
129-
const filteredItems = items.filter(
130-
item =>
131-
// design guidelines say to always show selected items in the list
132-
selected.some(selectedItem => selectedItem.text === item.text) ||
133-
// then filter the rest
134-
item.text?.toLowerCase().startsWith(filter.toLowerCase()),
135-
)
123+
const filteredItems = items.filter(item => item.text?.toLowerCase().startsWith(filter.toLowerCase()))
136124
// design guidelines say to sort selected items first
137125
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
138126
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -178,13 +166,7 @@ export const WithSx = () => {
178166
export const WithSxAndCSS = () => {
179167
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
180168
const [filter, setFilter] = useState('')
181-
const filteredItems = items.filter(
182-
item =>
183-
// design guidelines say to always show selected items in the list
184-
selected.some(selectedItem => selectedItem.text === item.text) ||
185-
// then filter the rest
186-
item.text?.toLowerCase().startsWith(filter.toLowerCase()),
187-
)
169+
const filteredItems = items.filter(item => item.text?.toLowerCase().startsWith(filter.toLowerCase()))
188170
// design guidelines say to sort selected items first
189171
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
190172
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)

packages/react/src/SelectPanel/SelectPanel.examples.stories.tsx

Lines changed: 9 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,7 @@ const items = [
5656
export const HeightInitialWithOverflowingItemsStory = () => {
5757
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
5858
const [filter, setFilter] = useState('')
59-
const filteredItems = items.filter(
60-
item =>
61-
// design guidelines say to always show selected items in the list
62-
selected.some(selectedItem => selectedItem.text === item.text) ||
63-
// then filter the rest
64-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
65-
)
59+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
6660
// design guidelines say to sort selected items first
6761
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
6862
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -101,13 +95,7 @@ export const HeightInitialWithUnderflowingItemsStory = () => {
10195
const underflowingItems = [items[0], items[1]]
10296
const [selected, setSelected] = useState<ItemInput[]>([underflowingItems[0]])
10397
const [filter, setFilter] = useState('')
104-
const filteredItems = underflowingItems.filter(
105-
item =>
106-
// design guidelines say to always show selected items in the list
107-
selected.some(selectedItem => selectedItem.text === item.text) ||
108-
// then filter the rest
109-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
110-
)
98+
const filteredItems = underflowingItems.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
11199
// design guidelines say to sort selected items first
112100
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
113101
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -148,15 +136,8 @@ export const HeightInitialWithUnderflowingItemsAfterFetch = () => {
148136
const [filter, setFilter] = useState('')
149137
const [fetchedItems, setFetchedItems] = useState<typeof items>([])
150138
const filteredItems = useMemo(
151-
() =>
152-
fetchedItems.filter(
153-
item =>
154-
// design guidelines say to always show selected items in the list
155-
selected.some(selectedItem => selectedItem.text === item.text) ||
156-
// then filter the rest
157-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
158-
),
159-
[fetchedItems, filter, selected],
139+
() => fetchedItems.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase())),
140+
[fetchedItems, filter],
160141
)
161142
// design guidelines say to sort selected items first
162143
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
@@ -206,13 +187,7 @@ HeightInitialWithUnderflowingItemsAfterFetch.storyName = 'Height: Initial, Under
206187
export const AboveTallBody = () => {
207188
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
208189
const [filter, setFilter] = useState('')
209-
const filteredItems = items.filter(
210-
item =>
211-
// design guidelines say to always show selected items in the list
212-
selected.some(selectedItem => selectedItem.text === item.text) ||
213-
// then filter the rest
214-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
215-
)
190+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
216191
// design guidelines say to sort selected items first
217192
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
218193
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -262,9 +237,7 @@ export const HeightVariationsAndScroll = () => {
262237
const [filter, setFilter] = useState('')
263238
// Example A
264239
const [selectedA, setSelectedA] = React.useState<ItemInput | undefined>(longItems[0])
265-
const filteredItemsA = longItems.filter(
266-
item => item.text === selectedA?.text || item.text.toLowerCase().startsWith(filter.toLowerCase()),
267-
)
240+
const filteredItemsA = longItems.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
268241
// design guidelines say to sort selected items first
269242
const selectedItemsSortedFirstA = filteredItemsA.sort((a, b) => {
270243
if (a.text === selectedA?.text) return -1
@@ -275,9 +248,7 @@ export const HeightVariationsAndScroll = () => {
275248

276249
// Example B
277250
const [selectedB, setSelectedB] = React.useState<ItemInput | undefined>(longItems[0])
278-
const filteredItemsB = longItems.filter(
279-
item => item.text === selectedB?.text || item.text.toLowerCase().startsWith(filter.toLowerCase()),
280-
)
251+
const filteredItemsB = longItems.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
281252
// design guidelines say to sort selected items first
282253
const selectedItemsSortedFirstB = filteredItemsB.sort((a, b) => {
283254
if (a.text === selectedB?.text) return -1
@@ -345,13 +316,7 @@ export const CustomItemRenderer = () => {
345316
]
346317
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
347318
const [filter, setFilter] = useState('')
348-
const filteredItems = items.filter(
349-
item =>
350-
// design guidelines say to always show selected items in the list
351-
selected.some(selectedItem => selectedItem.text === item.text) ||
352-
// then filter the rest
353-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
354-
)
319+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
355320
// design guidelines say to sort selected items first
356321
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
357322
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -426,13 +391,7 @@ export const ItemsInScope = () => {
426391

427392
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
428393
const [filter, setFilter] = useState('')
429-
const filteredItems = items.filter(
430-
item =>
431-
// design guidelines say to always show selected items in the list
432-
selected.some(selectedItem => selectedItem.text === item.text) ||
433-
// then filter the rest
434-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
435-
)
394+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
436395
// design guidelines say to sort selected items first
437396
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
438397
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)

packages/react/src/SelectPanel/SelectPanel.features.stories.tsx

Lines changed: 11 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,7 @@ const items = [
8686
export const WithItemDividers = () => {
8787
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
8888
const [filter, setFilter] = useState('')
89-
const filteredItems = items.filter(
90-
item =>
91-
// design guidelines say to always show selected items in the list
92-
selected.some(selectedItem => selectedItem.text === item.text) ||
93-
// then filter the rest
94-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
95-
)
89+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
9690
// design guidelines say to sort selected items first
9791
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
9892
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -132,13 +126,7 @@ export const WithItemDividers = () => {
132126
export const WithPlaceholderForSearchInput = () => {
133127
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
134128
const [filter, setFilter] = useState('')
135-
const filteredItems = items.filter(
136-
item =>
137-
// design guidelines say to always show selected items in the list
138-
selected.some(selectedItem => selectedItem.text === item.text) ||
139-
// then filter the rest
140-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
141-
)
129+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
142130
// design guidelines say to sort selected items first
143131
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
144132
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -178,9 +166,7 @@ export const WithPlaceholderForSearchInput = () => {
178166
export const SingleSelect = () => {
179167
const [selected, setSelected] = useState<ItemInput | undefined>(items[0])
180168
const [filter, setFilter] = useState('')
181-
const filteredItems = items.filter(
182-
item => item.text === selected?.text || item.text.toLowerCase().startsWith(filter.toLowerCase()),
183-
)
169+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
184170
// design guidelines say to sort selected items first
185171
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
186172
if (a.text === selected?.text) return -1
@@ -216,13 +202,7 @@ export const SingleSelect = () => {
216202
export const MultiSelect = () => {
217203
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
218204
const [filter, setFilter] = useState('')
219-
const filteredItems = items.filter(
220-
item =>
221-
// design guidelines say to always show selected items in the list
222-
selected.some(selectedItem => selectedItem.text === item.text) ||
223-
// then filter the rest
224-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
225-
)
205+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
226206
// design guidelines say to sort selected items first
227207
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
228208
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -261,13 +241,7 @@ export const MultiSelect = () => {
261241
export const WithExternalAnchor = () => {
262242
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
263243
const [filter, setFilter] = useState('')
264-
const filteredItems = items.filter(
265-
item =>
266-
// design guidelines say to always show selected items in the list
267-
selected.some(selectedItem => selectedItem.text === item.text) ||
268-
// then filter the rest
269-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
270-
)
244+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
271245
// design guidelines say to sort selected items first
272246
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
273247
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -304,13 +278,7 @@ export const WithExternalAnchor = () => {
304278
export const WithFooter = () => {
305279
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
306280
const [filter, setFilter] = useState('')
307-
const filteredItems = items.filter(
308-
item =>
309-
// design guidelines say to always show selected items in the list
310-
selected.some(selectedItem => selectedItem.text === item.text) ||
311-
// then filter the rest
312-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
313-
)
281+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
314282
// design guidelines say to sort selected items first
315283
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
316284
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -353,13 +321,7 @@ export const WithFooter = () => {
353321
export const WithNotice = () => {
354322
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
355323
const [filter, setFilter] = useState('')
356-
const filteredItems = items.filter(
357-
item =>
358-
// design guidelines say to always show selected items in the list
359-
selected.some(selectedItem => selectedItem.text === item.text) ||
360-
// then filter the rest
361-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
362-
)
324+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
363325
// design guidelines say to sort selected items first
364326
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
365327
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -484,13 +446,7 @@ const groupMetadata: GroupedListProps['groupMetadata'] = [
484446
export const WithGroups = () => {
485447
const [selected, setSelected] = useState<ItemInput[]>([])
486448
const [filter, setFilter] = useState('')
487-
const filteredItems = listOfItems.filter(
488-
item =>
489-
// design guidelines say to always show selected item in the list
490-
selected.some(selectedItem => selectedItem.text === item.text) ||
491-
// then filter the rest
492-
item.text?.toLowerCase().startsWith(filter.toLowerCase()),
493-
)
449+
const filteredItems = listOfItems.filter(item => item.text?.toLowerCase().startsWith(filter.toLowerCase()))
494450
// design guidelines say to sort selected items first
495451
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
496452
if (a.groupId === b.groupId) {
@@ -533,13 +489,7 @@ export const WithGroups = () => {
533489
export const WithLabelVisuallyHidden = () => {
534490
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
535491
const [filter, setFilter] = useState('')
536-
const filteredItems = items.filter(
537-
item =>
538-
// design guidelines say to always show selected items in the list
539-
selected.some(selectedItem => selectedItem.text === item.text) ||
540-
// then filter the rest
541-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
542-
)
492+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
543493
// design guidelines say to sort selected items first
544494
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
545495
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -578,13 +528,7 @@ export const WithLabelVisuallyHidden = () => {
578528
export const WithLabelInternally = () => {
579529
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
580530
const [filter, setFilter] = useState('')
581-
const filteredItems = items.filter(
582-
item =>
583-
// design guidelines say to always show selected items in the list
584-
selected.some(selectedItem => selectedItem.text === item.text) ||
585-
// then filter the rest
586-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
587-
)
531+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
588532
// design guidelines say to sort selected items first
589533
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
590534
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)
@@ -812,13 +756,7 @@ export const WithOnCancel = () => {
812756

813757
const [selected, setSelected] = React.useState<ItemInput[]>(intialSelection)
814758
const [filter, setFilter] = React.useState('')
815-
const filteredItems = items.filter(
816-
item =>
817-
// design guidelines say to always show selected items in the list
818-
selected.some(selectedItem => selectedItem.text === item.text) ||
819-
// then filter the rest
820-
item.text.toLowerCase().startsWith(filter.toLowerCase()),
821-
)
759+
const filteredItems = items.filter(item => item.text.toLowerCase().startsWith(filter.toLowerCase()))
822760
// design guidelines say to sort selected items first
823761
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
824762
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)

packages/react/src/SelectPanel/SelectPanel.stories.tsx

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,7 @@ const items: ItemInput[] = [
6565
export const Default = () => {
6666
const [selected, setSelected] = useState<ItemInput[]>(items.slice(1, 3))
6767
const [filter, setFilter] = useState('')
68-
const filteredItems = items.filter(
69-
item =>
70-
// design guidelines say to always show selected items in the list
71-
selected.some(selectedItem => selectedItem.text === item.text) ||
72-
// then filter the rest
73-
item.text?.toLowerCase().startsWith(filter.toLowerCase()),
74-
)
68+
const filteredItems = items.filter(item => item.text?.toLowerCase().startsWith(filter.toLowerCase()))
7569
// design guidelines say to sort selected items first
7670
const selectedItemsSortedFirst = filteredItems.sort((a, b) => {
7771
const aIsSelected = selected.some(selectedItem => selectedItem.text === a.text)

0 commit comments

Comments
 (0)