1
1
// Copyright (C) 2022-2025 Intel Corporation
2
2
// LIMITED EDGE SOFTWARE DISTRIBUTION LICENSE
3
3
4
- import { Key , useCallback , useEffect , useMemo , useState } from 'react' ;
4
+ import { Key , useCallback , useEffect , useMemo } from 'react' ;
5
5
6
6
import { InfiniteQueryObserverResult } from '@tanstack/react-query' ;
7
7
import isEmpty from 'lodash/isEmpty' ;
@@ -16,26 +16,23 @@ import { useWorkspaceIdentifier } from '../../../../../providers/workspaces-prov
16
16
import { hasEqualId , isNonEmptyArray } from '../../../../utils' ;
17
17
import { JobsFilterField } from '../jobs-filter-field.component' ;
18
18
import { JobsTypeFilterField } from './job-types-filter-field.component' ;
19
+ import { FiltersType } from './jobs-dialog.interface' ;
19
20
20
21
interface JobsFilteringDefaultValuesProps {
21
- projectIdFilter : string | undefined ;
22
- userIdFilter : string | undefined ;
23
- jobTypeFilter : JobType [ ] ;
22
+ projectId : string | undefined ;
23
+ userId : string | undefined ;
24
+ jobTypes : JobType [ ] ;
24
25
}
25
26
26
27
interface JobsFilteringProps {
27
- defaultValues : JobsFilteringDefaultValuesProps ;
28
- onChange : ( projectId : string | undefined , userId : string | undefined , type : JobType [ ] ) => void ;
28
+ values : JobsFilteringDefaultValuesProps ;
29
+ onChange : ( newFilters : FiltersType ) => void ;
29
30
}
30
31
31
- export const JobsFiltering = ( { defaultValues , onChange } : JobsFilteringProps ) : JSX . Element => {
32
+ export const JobsFiltering = ( { values , onChange } : JobsFilteringProps ) : JSX . Element => {
32
33
const { organizationId, workspaceId } = useWorkspaceIdentifier ( ) ;
33
34
34
- const { projectIdFilter, userIdFilter, jobTypeFilter } = defaultValues ;
35
-
36
- const [ selectedProject , setSelectedProject ] = useState < string | undefined > ( projectIdFilter ) ;
37
- const [ selectedUser , setSelectedUser ] = useState < string | undefined > ( userIdFilter ) ;
38
- const [ selectedJobTypes , setSelectedJobTypes ] = useState < JobType [ ] > ( jobTypeFilter ) ;
35
+ const { projectId, userId, jobTypes } = values ;
39
36
40
37
const { useGetProjects } = useProjectActions ( ) ;
41
38
const {
@@ -55,9 +52,9 @@ export const JobsFiltering = ({ defaultValues, onChange }: JobsFilteringProps):
55
52
const { useGetUsersQuery } = useUsers ( ) ;
56
53
const { users, isLoading : isLoadingUsers } = useGetUsersQuery (
57
54
organizationId ,
58
- selectedProject
55
+ projectId
59
56
? {
60
- resourceId : selectedProject ,
57
+ resourceId : projectId ,
61
58
resourceType : RESOURCE_TYPE . PROJECT ,
62
59
}
63
60
: undefined
@@ -95,29 +92,24 @@ export const JobsFiltering = ({ defaultValues, onChange }: JobsFilteringProps):
95
92
const setSelectedProjectHandler = ( key : Key | null ) : void => {
96
93
const newFilterValue : undefined | string = isEmpty ( key ) ? undefined : ( key as string ) ;
97
94
98
- setSelectedProject ( newFilterValue ) ;
95
+ onChange ( { ... values , projectId : newFilterValue } ) ;
99
96
} ;
100
97
101
98
const setSelectedUserHandler = ( key : Key | null ) : void => {
102
99
const newFilterValue : undefined | string = isEmpty ( key ) ? undefined : ( key as string ) ;
103
100
104
- setSelectedUser ( newFilterValue ) ;
101
+ onChange ( { ... values , userId : newFilterValue } ) ;
105
102
} ;
106
103
107
104
useEffect ( ( ) => {
108
105
if ( isLoadingUsers ) return ;
109
106
110
- const isSelectedUserInProject : boolean | undefined = users ?. some ( hasEqualId ( selectedUser ) ) ;
107
+ const isSelectedUserInProject : boolean | undefined = users ?. some ( hasEqualId ( userId ) ) ;
111
108
112
109
if ( ! ! isSelectedUserInProject ) return ;
113
110
114
- setSelectedUser ( undefined ) ;
115
- onChange ( selectedProject , undefined , selectedJobTypes ) ;
116
- } , [ isLoadingUsers , onChange , selectedJobTypes , selectedProject , selectedUser , users ] ) ;
117
-
118
- useEffect ( ( ) => {
119
- onChange ( selectedProject , selectedUser , selectedJobTypes ) ;
120
- } , [ selectedProject , selectedUser , selectedJobTypes , onChange ] ) ;
111
+ onChange ( { ...values , userId : undefined } ) ;
112
+ } , [ isLoadingUsers , onChange , users , userId , values ] ) ;
121
113
122
114
return (
123
115
< >
@@ -126,7 +118,7 @@ export const JobsFiltering = ({ defaultValues, onChange }: JobsFilteringProps):
126
118
ariaLabel = { 'Job scheduler filter project' }
127
119
dataTestId = { 'job-scheduler-filter-project' }
128
120
options = { [ allProjectOption , ...projectOptions ] }
129
- value = { selectedProject ?? allProjectOption . key }
121
+ value = { projectId ?? allProjectOption . key }
130
122
onSelectionChange = { setSelectedProjectHandler }
131
123
isLoading = { isLoadingProjects || isFetchingNextPage }
132
124
loadMore = { loadMoreProjects }
@@ -136,11 +128,14 @@ export const JobsFiltering = ({ defaultValues, onChange }: JobsFilteringProps):
136
128
ariaLabel = { 'Job scheduler filter user' }
137
129
dataTestId = { 'job-scheduler-filter-user' }
138
130
options = { [ allUsersOption , ...usersOptions ] }
139
- value = { selectedUser ?? allUsersOption . key }
131
+ value = { userId ?? allUsersOption . key }
140
132
onSelectionChange = { setSelectedUserHandler }
141
133
isLoading = { isLoadingUsers }
142
134
/>
143
- < JobsTypeFilterField selectedJobTypes = { selectedJobTypes } setSelectedJobTypes = { setSelectedJobTypes } />
135
+ < JobsTypeFilterField
136
+ selectedJobTypes = { jobTypes }
137
+ setSelectedJobTypes = { ( newJobTypes ) => onChange ( { ...values , jobTypes : newJobTypes } ) }
138
+ />
144
139
</ >
145
140
) ;
146
141
} ;
0 commit comments