11import { useMemo , useState } from 'react' ;
22import { useSearchParams } from 'react-router-dom' ;
3+ import { omit } from 'lodash' ;
34
45import type { PropertyFilterProps } from 'components' ;
56
@@ -77,8 +78,8 @@ const targetTypes = [
7778
7879export const useFilters = ( ) => {
7980 const [ searchParams , setSearchParams ] = useSearchParams ( ) ;
80- const { data : projectsData } = useGetProjectsQuery ( { } ) ;
81- const { data : usersData } = useGetUserListQuery ( { } ) ;
81+ const { data : projectsData , isLoading : isLoadingProjects } = useGetProjectsQuery ( { } ) ;
82+ const { data : usersData , isLoading : isLoadingUsers } = useGetUserListQuery ( { } ) ;
8283
8384 const [ propertyFilterQuery , setPropertyFilterQuery ] = useState < PropertyFilterProps . Query > ( ( ) =>
8485 requestParamsToTokens < RequestParamsKeys > ( { searchParams, filterKeys } ) ,
@@ -243,51 +244,65 @@ export const useFilters = () => {
243244 arrayFieldKeys : multipleChoiseKeys ,
244245 } ) ;
245246
247+ const targetProjects = params [ filterKeys . TARGET_PROJECTS ]
248+ ?. map ( ( name : string ) => projectsData ?. data ?. find ( ( { project_name } ) => project_name === name ) ?. [ 'project_id' ] )
249+ . filter ( Boolean ) ;
250+
251+ const withInProjects = params [ filterKeys . WITHIN_PROJECTS ]
252+ ?. map ( ( name : string ) => projectsData ?. data ?. find ( ( { project_name } ) => project_name === name ) ?. [ 'project_id' ] )
253+ . filter ( Boolean ) ;
254+
255+ const targetUsers = params [ filterKeys . TARGET_USERS ]
256+ ?. map ( ( name : string ) => usersData ?. data ?. find ( ( { username } ) => username === name ) ?. [ 'id' ] )
257+ . filter ( Boolean ) ;
258+
259+ const actors = params [ filterKeys . ACTORS ]
260+ ?. map ( ( name : string ) => usersData ?. data ?. find ( ( { username } ) => username === name ) ?. [ 'id' ] )
261+ . filter ( Boolean ) ;
262+
263+ const includeTargetTypes = params [ filterKeys . INCLUDE_TARGET_TYPES ]
264+ ?. map ( ( selectedLabel : string ) => targetTypes ?. find ( ( { label } ) => label === selectedLabel ) ?. [ 'value' ] )
265+ . filter ( Boolean ) ;
266+
246267 const mappedFields = {
247- ...( params [ filterKeys . TARGET_PROJECTS ] && Array . isArray ( params [ filterKeys . TARGET_PROJECTS ] )
268+ ...( targetProjects ?. length
248269 ? {
249- [ filterKeys . TARGET_PROJECTS ] : params [ filterKeys . TARGET_PROJECTS ] ?. map (
250- ( name : string ) =>
251- projectsData ?. data ?. find ( ( { project_name } ) => project_name === name ) ?. [ 'project_id' ] ,
252- ) ,
270+ [ filterKeys . TARGET_PROJECTS ] : targetProjects ,
253271 }
254272 : { } ) ,
255- ...( params [ filterKeys . WITHIN_PROJECTS ] && Array . isArray ( params [ filterKeys . WITHIN_PROJECTS ] )
273+ ...( withInProjects ?. length
256274 ? {
257- [ filterKeys . WITHIN_PROJECTS ] : params [ filterKeys . WITHIN_PROJECTS ] ?. map (
258- ( name : string ) =>
259- projectsData ?. data ?. find ( ( { project_name } ) => project_name === name ) ?. [ 'project_id' ] ,
260- ) ,
275+ [ filterKeys . WITHIN_PROJECTS ] : withInProjects ,
261276 }
262277 : { } ) ,
263278
264- ...( params [ filterKeys . TARGET_USERS ] && Array . isArray ( params [ filterKeys . TARGET_USERS ] )
279+ ...( targetUsers ?. length
265280 ? {
266- [ filterKeys . TARGET_USERS ] : params [ filterKeys . TARGET_USERS ] ?. map (
267- ( name : string ) => usersData ?. data ?. find ( ( { username } ) => username === name ) ?. [ 'id' ] ,
268- ) ,
281+ [ filterKeys . TARGET_USERS ] : targetUsers ,
269282 }
270283 : { } ) ,
271284
272- ...( params [ filterKeys . ACTORS ] && Array . isArray ( params [ filterKeys . ACTORS ] )
285+ ...( actors ?. length
273286 ? {
274- [ filterKeys . ACTORS ] : params [ filterKeys . ACTORS ] ?. map (
275- ( name : string ) => usersData ?. data ?. find ( ( { username } ) => username === name ) ?. [ 'id' ] ,
276- ) ,
287+ [ filterKeys . ACTORS ] : actors ,
277288 }
278289 : { } ) ,
279290
280- ...( params [ filterKeys . INCLUDE_TARGET_TYPES ] && Array . isArray ( params [ filterKeys . INCLUDE_TARGET_TYPES ] )
291+ ...( includeTargetTypes ?. length
281292 ? {
282- [ filterKeys . INCLUDE_TARGET_TYPES ] : params [ filterKeys . INCLUDE_TARGET_TYPES ] ?. map (
283- ( selectedLabel : string ) => targetTypes ?. find ( ( { label } ) => label === selectedLabel ) ?. [ 'value' ] ,
284- ) ,
293+ [ filterKeys . INCLUDE_TARGET_TYPES ] : includeTargetTypes ,
285294 }
286295 : { } ) ,
287296 } ;
288297
289298 return {
290- ...params ,
299+ ...omit ( params , [
300+ filterKeys . TARGET_PROJECTS ,
301+ filterKeys . WITHIN_PROJECTS ,
302+ filterKeys . TARGET_USERS ,
303+ filterKeys . ACTORS ,
304+ filterKeys . INCLUDE_TARGET_TYPES ,
305+ ] ) ,
291306 ...mappedFields ,
292307 } as Partial < TRunsRequestParams > ;
293308 } , [ propertyFilterQuery , usersData , projectsData ] ) ;
@@ -299,5 +314,6 @@ export const useFilters = () => {
299314 onChangePropertyFilter,
300315 filteringOptions,
301316 filteringProperties,
317+ isLoadingFilters : isLoadingProjects || isLoadingUsers ,
302318 } as const ;
303319} ;
0 commit comments