1- import React , { useCallback , useEffect , useMemo , useState } from 'react' ;
1+ import React , { useEffect , useState } from 'react' ;
2+ import SingleSelectListItem from '@components/SelectionList/ListItem/SingleSelectListItem' ;
3+ import SelectionList from '@components/SelectionList/SelectionListWithSections' ;
24import useDebouncedState from '@hooks/useDebouncedState' ;
35import useLocalize from '@hooks/useLocalize' ;
46import Navigation from '@libs/Navigation/Navigation' ;
@@ -7,8 +9,6 @@ import {sortOptionsWithEmptyValue} from '@libs/SearchQueryUtils';
79import ROUTES from '@src/ROUTES' ;
810import type { Route } from '@src/ROUTES' ;
911import SearchFilterPageFooterButtons from './SearchFilterPageFooterButtons' ;
10- import SelectionList from '@components/SelectionList/SelectionListWithSections' ;
11- import SingleSelectListItem from '@components/SelectionList/ListItem/SingleSelectListItem' ;
1212
1313type SearchSingleSelectionPickerItem = {
1414 name : string ;
@@ -43,80 +43,72 @@ function SearchSingleSelectionPicker({
4343 setSelectedItem ( initiallySelectedItem ) ;
4444 } , [ initiallySelectedItem ] ) ;
4545
46- const { sections, noResultsFound} = useMemo ( ( ) => {
47- const initiallySelectedItemSection = initiallySelectedItem ?. name . toLowerCase ( ) . includes ( debouncedSearchTerm ?. toLowerCase ( ) )
48- ? [
49- {
50- text : initiallySelectedItem . name ,
51- keyForList : initiallySelectedItem . value ,
52- isSelected : selectedItem ?. value === initiallySelectedItem . value ,
53- value : initiallySelectedItem . value ,
54- } ,
55- ]
56- : [ ] ;
57- const remainingItemsSection = items
58- . filter ( ( item ) => item ?. value !== initiallySelectedItem ?. value && item ?. name ?. toLowerCase ( ) . includes ( debouncedSearchTerm ?. toLowerCase ( ) ) )
59- . sort ( ( a , b ) => sortOptionsWithEmptyValue ( a . name . toString ( ) , b . name . toString ( ) , localeCompare ) )
60- . map ( ( item ) => ( {
61- text : item . name ,
62- keyForList : item . value ,
63- isSelected : selectedItem ?. value === item . value ,
64- value : item . value ,
65- } ) ) ;
66- const isEmpty = ! initiallySelectedItemSection . length && ! remainingItemsSection . length ;
67- return {
68- sections : isEmpty
69- ? [ ]
70- : [
71- {
72- title : undefined ,
73- data : initiallySelectedItemSection ,
74- sectionIndex : 0 ,
75- } ,
76- {
77- title : pickerTitle ,
78- data : remainingItemsSection ,
79- sectionIndex : 1 ,
80- } ,
81- ] ,
82- noResultsFound : isEmpty ,
83- } ;
84- } , [ initiallySelectedItem , selectedItem ?. value , items , pickerTitle , debouncedSearchTerm , localeCompare ] ) ;
85-
86- const onSelectItem = useCallback (
87- ( item : Partial < OptionData & SearchSingleSelectionPickerItem > ) => {
88- if ( ! item . text || ! item . keyForList || ! item . value ) {
89- return ;
90- }
91- if ( shouldAutoSave ) {
92- onSaveSelection ( item . isSelected ? '' : item . value ) ;
93- Navigation . goBack ( backToRoute ?? ROUTES . SEARCH_ADVANCED_FILTERS . getRoute ( ) ) ;
94- return ;
95- }
96- if ( ! item . isSelected ) {
97- setSelectedItem ( { name : item . text , value : item . value } ) ;
98- }
99- } ,
100- [ shouldAutoSave , backToRoute , onSaveSelection ] ,
101- ) ;
46+ const initiallySelectedItemSection = initiallySelectedItem ?. name . toLowerCase ( ) . includes ( debouncedSearchTerm ?. toLowerCase ( ) )
47+ ? [
48+ {
49+ text : initiallySelectedItem . name ,
50+ keyForList : initiallySelectedItem . value ,
51+ isSelected : selectedItem ?. value === initiallySelectedItem . value ,
52+ value : initiallySelectedItem . value ,
53+ } ,
54+ ]
55+ : [ ] ;
56+
57+ const remainingItemsSection = items
58+ . filter ( ( item ) => item . value !== initiallySelectedItem ?. value && item . name . toLowerCase ( ) . includes ( debouncedSearchTerm ?. toLowerCase ( ) ) )
59+ . sort ( ( a , b ) => sortOptionsWithEmptyValue ( a . name . toString ( ) , b . name . toString ( ) , localeCompare ) )
60+ . map ( ( item ) => ( {
61+ text : item . name ,
62+ keyForList : item . value ,
63+ isSelected : selectedItem ?. value === item . value ,
64+ value : item . value ,
65+ } ) ) ;
66+
67+ const noResultsFound = ! initiallySelectedItemSection . length && ! remainingItemsSection . length ;
68+
69+ const sections = noResultsFound
70+ ? [ ]
71+ : [
72+ {
73+ title : undefined ,
74+ data : initiallySelectedItemSection ,
75+ sectionIndex : 0 ,
76+ } ,
77+ {
78+ title : pickerTitle ,
79+ data : remainingItemsSection ,
80+ sectionIndex : 1 ,
81+ } ,
82+ ] ;
10283
103- const resetChanges = useCallback ( ( ) => {
84+ const onSelectItem = ( item : Partial < OptionData & SearchSingleSelectionPickerItem > ) => {
85+ if ( ! item . text || ! item . keyForList || ! item . value ) {
86+ return ;
87+ }
88+ if ( shouldAutoSave ) {
89+ onSaveSelection ( item . isSelected ? '' : item . value ) ;
90+ Navigation . goBack ( backToRoute ?? ROUTES . SEARCH_ADVANCED_FILTERS . getRoute ( ) ) ;
91+ return ;
92+ }
93+ if ( ! item . isSelected ) {
94+ setSelectedItem ( { name : item . text , value : item . value } ) ;
95+ }
96+ } ;
97+
98+ const resetChanges = ( ) => {
10499 setSelectedItem ( undefined ) ;
105- } , [ ] ) ;
100+ } ;
106101
107- const applyChanges = useCallback ( ( ) => {
102+ const applyChanges = ( ) => {
108103 onSaveSelection ( selectedItem ?. value ) ;
109104 Navigation . goBack ( backToRoute ?? ROUTES . SEARCH_ADVANCED_FILTERS . getRoute ( ) ) ;
110- } , [ onSaveSelection , selectedItem ?. value , backToRoute ] ) ;
111-
112- const footerContent = useMemo (
113- ( ) => (
114- < SearchFilterPageFooterButtons
115- applyChanges = { applyChanges }
116- resetChanges = { resetChanges }
117- />
118- ) ,
119- [ resetChanges , applyChanges ] ,
105+ } ;
106+
107+ const footerContent = (
108+ < SearchFilterPageFooterButtons
109+ applyChanges = { applyChanges }
110+ resetChanges = { resetChanges }
111+ />
120112 ) ;
121113
122114 const textInputOptions = {
@@ -126,7 +118,6 @@ function SearchSingleSelectionPicker({
126118 headerMessage : noResultsFound ? translate ( 'common.noResultsFound' ) : undefined ,
127119 } ;
128120
129-
130121 return (
131122 < SelectionList
132123 sections = { sections }
0 commit comments