@@ -15,6 +15,7 @@ import { useModal } from "../../lib/modal";
15
15
16
16
import styles from "./filters.module.css" ;
17
17
import utilityStyles from "../../styles/utility.module.css" ;
18
+ import config from "../../config" ;
18
19
19
20
/**
20
21
* SearchTabFilters - component containing all the filters on the search tab page
@@ -23,7 +24,6 @@ import utilityStyles from "../../styles/utility.module.css";
23
24
*/
24
25
export default function SearchTabFilters ( { locations, achievements } ) {
25
26
const search = useSearch ( ) ;
26
- const [ locationsData , setLocationsData ] = useState ( locations ) ;
27
27
const [ achievementsData , setAchievementsData ] = useState ( achievements ) ;
28
28
29
29
/**
@@ -49,7 +49,6 @@ export default function SearchTabFilters({ locations, achievements }) {
49
49
} ;
50
50
51
51
useEffect ( ( ) => {
52
- setLocationsData ( locations ) ;
53
52
setAchievementsData ( achievements ) ;
54
53
} , [ locations , achievements ] ) ;
55
54
@@ -134,6 +133,28 @@ export default function SearchTabFilters({ locations, achievements }) {
134
133
}
135
134
} ;
136
135
136
+ const addLocationToFilter = ( location ) => {
137
+ const locationFilters = JSON . parse ( JSON . stringify ( search . selectedLocations ) ) ;
138
+
139
+ if ( locationFilters . findIndex ( ( s ) => s . id === location . id ) !== - 1 ) {
140
+ return ;
141
+ }
142
+ locationFilters . push ( { name : location . value , id : location . id } ) ;
143
+ search [ "selectLocations" ] ( locationFilters ) ;
144
+ } ;
145
+
146
+ const removeLocationFromFilter = ( location ) => {
147
+ const locationFilters = JSON . parse ( JSON . stringify ( search . selectedLocations ) ) ;
148
+ const index = locationFilters . findIndex ( ( s ) => s . id === location . id ) ;
149
+
150
+ if ( index === - 1 ) {
151
+ return ;
152
+ }
153
+
154
+ locationFilters . splice ( index , 1 ) ;
155
+ search [ "selectLocations" ] ( locationFilters ) ;
156
+ } ;
157
+
137
158
const addSkillToFilter = ( skill ) => {
138
159
const skillFilters = JSON . parse ( JSON . stringify ( search . selectedSkills ) ) ;
139
160
@@ -230,27 +251,27 @@ export default function SearchTabFilters({ locations, achievements }) {
230
251
/>
231
252
{ search . isFilterActive ( FILTERS . LOCATIONS ) && (
232
253
< div className = { utilityStyles . mt32 } >
233
- < Collapsible
234
- onCollapsed = { ( isCollapsed ) =>
235
- filterData ( "" , locations , "name" , setLocationsData )
236
- }
237
- title = "Location"
238
- collapsed = { false }
239
- >
240
- < SearchBox
241
- placeholder = "Search for a location"
242
- name = { "location search" }
243
- onChange = { ( q ) =>
244
- filterData ( q . trim ( ) , locations , "name" , setLocationsData )
245
- }
246
- />
247
- < TagList
248
- key = "l"
249
- tags = { locationsData }
250
- selected = { search . selectedLocations }
251
- selector = { "selectLocations" }
252
- noResultsText = { "No location found" }
254
+ < Collapsible title = "Location" >
255
+ < SuggestionBox
256
+ placeholder = { "Search for a location" }
257
+ onSelect = { addLocationToFilter }
258
+ purpose = "locations"
259
+ companyAttrId = { config . STANDARD_USER_ATTRIBUTES . location }
253
260
/>
261
+ { search . selectedLocations . length > 0 && (
262
+ < div className = { utilityStyles . mt16 } >
263
+ { search . selectedLocations . map ( ( location ) => {
264
+ return (
265
+ < Pill
266
+ key = { location . id }
267
+ name = { location . name }
268
+ removable = { true }
269
+ onRemove = { ( ) => removeLocationFromFilter ( location ) }
270
+ />
271
+ ) ;
272
+ } ) }
273
+ </ div >
274
+ ) }
254
275
</ Collapsible >
255
276
</ div >
256
277
) }
0 commit comments