Skip to content

Commit 47add29

Browse files
committed
added projects filter by status
1 parent cf7da0a commit 47add29

File tree

3 files changed

+46
-7
lines changed

3 files changed

+46
-7
lines changed

src/frontend/src/components/Projects/ProjectsHeader/index.tsx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ export default function ProjectsHeader() {
1818
const projectsFilterByOwner = useTypedSelector(
1919
state => state.createproject.ProjectsFilterByOwner,
2020
);
21+
const selectedProjectStatus = useTypedSelector(
22+
state => state.createproject.selectedProjectStatus
23+
);
2124
const [searchValue, setSearchValue] = useState('');
2225
const debouncedValue = useDebounceListener(searchValue || '', 300);
2326

@@ -30,7 +33,7 @@ export default function ProjectsHeader() {
3033
<FlexRow className="naxatw-flex naxatw-w-full naxatw-items-center naxatw-justify-between naxatw-gap-4 md:naxatw-w-[65%]">
3134
<h5 className="naxatw-font-bold">Projects</h5>
3235
<FlexRow gap={3} className="">
33-
<div>
36+
<div className='naxatw-flex naxatw-items-center naxatw-gap-2'>
3437
<Select
3538
placeholder="Select"
3639
options={[
@@ -50,6 +53,26 @@ export default function ProjectsHeader() {
5053
)
5154
}
5255
/>
56+
<Select
57+
placeholder="Filter By Project Status"
58+
options={[
59+
{
60+
label: 'Not Started',
61+
value: 'not-started',
62+
},
63+
{ label: 'On Going', value: 'ongoing' },
64+
{ label: 'Completed', value: 'completed' },
65+
]}
66+
labelKey="label"
67+
valueKey="value"
68+
className="!naxatw-w-[150px] "
69+
selectedOption={selectedProjectStatus}
70+
onChange={value =>
71+
dispatch(
72+
setCreateProjectState({ selectedProjectStatus: value }),
73+
)
74+
}
75+
/>
5376
</div>
5477
<div>
5578
<SearchInput

src/frontend/src/store/slices/createproject.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export interface CreateProjectState {
2525
imageMergeType: string;
2626
ProjectsFilterByOwner: 'yes' | 'no';
2727
requiresApprovalFromRegulator: 'required' | 'not_required';
28+
selectedProjectStatus: string;
2829
regulatorEmails: string[] | [];
2930
demType: string;
3031
}
@@ -53,6 +54,7 @@ const initialState: CreateProjectState = {
5354
requiresApprovalFromRegulator: 'not_required',
5455
regulatorEmails: [],
5556
demType: 'auto',
57+
selectedProjectStatus: ''
5658
};
5759

5860
const setCreateProjectState: CaseReducer<

src/frontend/src/views/Projects/index.tsx

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ const Projects = () => {
2323
const projectsFilterByOwner = useTypedSelector(
2424
state => state.createproject.ProjectsFilterByOwner,
2525
);
26+
const projectFilterByStatus = useTypedSelector(
27+
state => state.createproject.selectedProjectStatus,
28+
);
2629
const projectSearchKey = useTypedSelector(
2730
state => state.common.projectSearchKey,
2831
);
@@ -35,16 +38,26 @@ const Projects = () => {
3538
setSetPaginationState(prev => ({ ...prev, ...value }));
3639
};
3740

38-
// fetch api for projectsList
39-
const { data: projectListData, isFetching: isLoading }: Record<string, any> =
40-
useGetProjectsListQuery({
41-
queryKey: {
42-
// @ts-ignore
41+
const filterParams = projectFilterByStatus
42+
? {
4343
filter_by_owner: projectsFilterByOwner === 'yes',
44+
status: projectFilterByStatus,
4445
page: paginationState?.activePage,
4546
results_per_page: paginationState?.selectedNumberOfRows,
4647
search: projectSearchKey,
47-
},
48+
}
49+
: {
50+
filter_by_owner: projectsFilterByOwner === 'yes',
51+
page: paginationState?.activePage,
52+
results_per_page: paginationState?.selectedNumberOfRows,
53+
search: projectSearchKey,
54+
};
55+
56+
// fetch api for projectsList
57+
const { data: projectListData, isFetching: isLoading }: Record<string, any> =
58+
useGetProjectsListQuery({
59+
// @ts-ignore
60+
queryKey: { ...filterParams },
4861
});
4962

5063
// fetch project centroid
@@ -65,6 +78,7 @@ const Projects = () => {
6578
return (
6679
<section className="naxatw-px-3 naxatw-pt-2 lg:naxatw-px-16">
6780
<ProjectsHeader />
81+
6882
<div className="naxatw-grid naxatw-gap-2 naxatw-pb-10 md:naxatw-flex md:naxatw-h-[calc(100vh-11rem)] md:naxatw-pb-0">
6983
<div
7084
className={`scrollbar naxatw-grid naxatw-grid-rows-[19rem] naxatw-gap-3 naxatw-overflow-y-auto naxatw-py-2 ${showMap ? 'naxatw-w-full naxatw-grid-cols-1 md:naxatw-w-1/2 md:naxatw-grid-cols-1 lg:naxatw-grid-cols-2 xl:naxatw-grid-cols-3' : 'naxatw-w-full naxatw-grid-cols-1 sm:naxatw-grid-cols-2 md:naxatw-grid-cols-3 lg:naxatw-grid-cols-6'}`}

0 commit comments

Comments
 (0)