-
-
Notifications
You must be signed in to change notification settings - Fork 223
Expand file tree
/
Copy pathuseProjectFilter.ts
More file actions
45 lines (33 loc) · 1.29 KB
/
useProjectFilter.ts
File metadata and controls
45 lines (33 loc) · 1.29 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import { useEffect, useMemo } from 'react';
import { SelectCSDProps } from 'components';
import { useGetProjectsQuery } from 'services/project';
import { useLocalStorageState } from './useLocalStorageState';
type Args = {
localStorePrefix: string;
};
export const useProjectFilter = ({ localStorePrefix }: Args) => {
const [selectedProject, setSelectedProject] = useLocalStorageState<SelectCSDProps.Option | null>(
`${localStorePrefix}-project_name`,
null,
);
const { data: projectsData, isLoading } = useGetProjectsQuery({});
const projectOptions = useMemo<SelectCSDProps.Options>(() => {
if (!projectsData?.data?.length) return [];
return projectsData.data.map((project) => ({ label: project.project_name, value: project.project_name }));
}, [projectsData]);
useEffect(() => {
if (!projectsData?.data || !selectedProject) {
return;
}
const hasSelectedProject = projectsData.data.some(({ project_name }) => selectedProject?.value === project_name);
if (!hasSelectedProject) {
setSelectedProject(null);
}
}, [projectsData]);
return {
projectOptions,
selectedProject,
setSelectedProject,
isLoadingProjectOptions: isLoading,
} as const;
};