Skip to content

Commit 5d70081

Browse files
committed
Updated sort functions
1 parent af0e78c commit 5d70081

6 files changed

Lines changed: 75 additions & 82 deletions

File tree

src/app/(web)/crm/templates/page.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export default function TemplatesPage() {
7575
updatePageTemplates,
7676
sortBy: taskSortBy,
7777
setSortBy: setTaskSortBy,
78-
sortAndFilter: sortAndFilterTaskTemplates,
78+
applySort: applyTaskTemplateSort,
7979
} = useTaskTemplateList();
8080

8181
const assessmentTemplateList = useAssessmentTemplateList();
@@ -88,11 +88,11 @@ export default function TemplatesPage() {
8888
const isSearchingForTaskTemplate = taskTemplateSearch.value.trim().length >= 1;
8989
const isSearchingForAssessmentTemplate = assessmentTemplateSearch.value.trim().length >= 1;
9090

91-
const displayedTaskTemplates = sortAndFilterTaskTemplates(
91+
const displayedTaskTemplates = applyTaskTemplateSort(
9292
isSearchingForTaskTemplate ? taskTemplateSearch.data : taskTemplateList
9393
);
9494

95-
const displayedAssessmentTemplates = assessmentTemplateList.sortAndFilter(
95+
const displayedAssessmentTemplates = assessmentTemplateList.applySort(
9696
isSearchingForAssessmentTemplate
9797
? assessmentTemplateSearch.data
9898
: assessmentTemplateList.assessmentTemplateList

src/lib/components/core/PositionsContent.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,18 @@ export default function PositionsContent() {
3131
onDelete,
3232
sortBy,
3333
setSortBy,
34-
sortAndFilter,
34+
applySort,
3535
} = usePositionContent();
3636

3737
const { value, onChange, data, loading } = useSearch('positions');
3838

3939
const isSearching = value.trim().length >= 1;
4040

41-
const displayedActivePositions = sortAndFilter(
41+
const displayedActivePositions = applySort(
4242
isSearching ? data.filter((p) => !p.archived) : active
4343
);
4444

45-
const displayedArchivedPositions = sortAndFilter(
45+
const displayedArchivedPositions = applySort(
4646
isSearching ? data.filter((p) => p.archived) : archived
4747
);
4848

src/lib/hooks/useAddTaskModal.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,22 +71,22 @@ export function useAddTaskModal(open: boolean) {
7171
sortBy: TaskTemplateSortBy | null
7272
): TaskTemplateListItemDTO[] {
7373
if (!sortBy) return items;
74-
const next = [...items];
74+
const sortedTaskTemplates = [...items];
7575
switch (sortBy) {
7676
case 'title-asc':
77-
next.sort((a, b) => a.title.localeCompare(b.title));
77+
sortedTaskTemplates.sort((a, b) => a.title.localeCompare(b.title));
7878
break;
7979
case 'title-desc':
80-
next.sort((a, b) => b.title.localeCompare(a.title));
80+
sortedTaskTemplates.sort((a, b) => b.title.localeCompare(a.title));
8181
break;
8282
case 'estimated-asc':
83-
next.sort((a, b) => a.estimatedTime - b.estimatedTime);
83+
sortedTaskTemplates.sort((a, b) => a.estimatedTime - b.estimatedTime);
8484
break;
8585
case 'estimated-desc':
86-
next.sort((a, b) => b.estimatedTime - a.estimatedTime);
86+
sortedTaskTemplates.sort((a, b) => b.estimatedTime - a.estimatedTime);
8787
break;
8888
}
89-
return next;
89+
return sortedTaskTemplates;
9090
}
9191

9292
const sortedSearchData = applySort(search.data, sortBy);

src/lib/hooks/useAssessmentTemplateList.ts

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useCallback, useState, useEffect } from 'react';
1+
import { useState, useEffect } from 'react';
22
import { getAssessmentTemplateList } from '@/lib/api/assessment-templates';
33
import { type AssessmentTemplateListItemDTO } from '@/lib/schemas/assessment-template.schema';
44

@@ -16,22 +16,21 @@ export function useAssessmentTemplateList() {
1616
const [selectedId, setSelectedId] = useState<string | null>(null);
1717
const [sortBy, setSortBy] = useState<AssessmentTemplateSortBy | null>(null);
1818

19-
const sortAndFilter = useCallback(
20-
(items: AssessmentTemplateListItemDTO[]): AssessmentTemplateListItemDTO[] => {
21-
if (!sortBy) return items;
22-
const next = [...items];
23-
switch (sortBy) {
24-
case 'title-asc':
25-
next.sort((a, b) => a.title.localeCompare(b.title));
26-
break;
27-
case 'title-desc':
28-
next.sort((a, b) => b.title.localeCompare(a.title));
29-
break;
30-
}
31-
return next;
32-
},
33-
[sortBy]
34-
);
19+
function applySort(
20+
items: AssessmentTemplateListItemDTO[]
21+
): AssessmentTemplateListItemDTO[] {
22+
if (!sortBy) return items;
23+
const sortedAssessmentTemplates = [...items];
24+
switch (sortBy) {
25+
case 'title-asc':
26+
sortedAssessmentTemplates.sort((a, b) => a.title.localeCompare(b.title));
27+
break;
28+
case 'title-desc':
29+
sortedAssessmentTemplates.sort((a, b) => b.title.localeCompare(a.title));
30+
break;
31+
}
32+
return sortedAssessmentTemplates;
33+
}
3534

3635
useEffect(() => {
3736
async function fetchAssessmentList() {
@@ -83,6 +82,6 @@ export function useAssessmentTemplateList() {
8382
handleSelectTemplate,
8483
sortBy,
8584
setSortBy,
86-
sortAndFilter,
85+
applySort,
8786
};
8887
}

src/lib/hooks/usePositionsContent.ts

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use client';
22

3-
import { useState, useEffect, useCallback } from 'react';
3+
import { useState, useEffect } from 'react';
44
import { toast } from 'sonner';
55
import { type PositionWithCounts } from '@/lib/types/position.types';
66
import { useSession } from '@/lib/auth/auth-client';
@@ -24,32 +24,29 @@ function usePositionContent() {
2424
const [error, setError] = useState<Error | null>(null);
2525
const [sortBy, setSortBy] = useState<PositionSortBy | null>(null);
2626

27-
const sortAndFilter = useCallback(
28-
(items: PositionWithCounts[]): PositionWithCounts[] => {
29-
if (!sortBy) return items;
30-
const next = [...items];
31-
switch (sortBy) {
32-
case 'title-asc':
33-
next.sort((a, b) => a.title.localeCompare(b.title));
34-
break;
35-
case 'title-desc':
36-
next.sort((a, b) => b.title.localeCompare(a.title));
37-
break;
38-
case 'created-desc':
39-
next.sort(
40-
(a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()
41-
);
42-
break;
43-
case 'created-asc':
44-
next.sort(
45-
(a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()
46-
);
47-
break;
48-
}
49-
return next;
50-
},
51-
[sortBy]
52-
);
27+
function applySort(items: PositionWithCounts[]): PositionWithCounts[] {
28+
if (!sortBy) return items;
29+
const sortedPositions = [...items];
30+
switch (sortBy) {
31+
case 'title-asc':
32+
sortedPositions.sort((a, b) => a.title.localeCompare(b.title));
33+
break;
34+
case 'title-desc':
35+
sortedPositions.sort((a, b) => b.title.localeCompare(a.title));
36+
break;
37+
case 'created-desc':
38+
sortedPositions.sort(
39+
(a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()
40+
);
41+
break;
42+
case 'created-asc':
43+
sortedPositions.sort(
44+
(a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()
45+
);
46+
break;
47+
}
48+
return sortedPositions;
49+
}
5350

5451
useEffect(() => {
5552
async function fetchPositions() {
@@ -143,7 +140,7 @@ function usePositionContent() {
143140
loading,
144141
sortBy,
145142
setSortBy,
146-
sortAndFilter,
143+
applySort,
147144
};
148145
}
149146

src/lib/hooks/useTaskTemplateList.ts

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useCallback, useEffect, useState } from 'react';
1+
import { useEffect, useState } from 'react';
22
import type { TaskTemplateListItemDTO } from '@/lib/schemas/task-template.schema';
33
import { getTaskTemplateList } from '@/lib/api/task-templates';
44

@@ -14,28 +14,25 @@ export function useTaskTemplateList() {
1414
const [total, setTotal] = useState<number>(0);
1515
const [sortBy, setSortBy] = useState<TaskTemplateSortBy | null>(null);
1616

17-
const sortAndFilter = useCallback(
18-
(items: TaskTemplateListItemDTO[]): TaskTemplateListItemDTO[] => {
19-
if (!sortBy) return items;
20-
const next = [...items];
21-
switch (sortBy) {
22-
case 'title-asc':
23-
next.sort((a, b) => a.title.localeCompare(b.title));
24-
break;
25-
case 'title-desc':
26-
next.sort((a, b) => b.title.localeCompare(a.title));
27-
break;
28-
case 'estimated-asc':
29-
next.sort((a, b) => a.estimatedTime - b.estimatedTime);
30-
break;
31-
case 'estimated-desc':
32-
next.sort((a, b) => b.estimatedTime - a.estimatedTime);
33-
break;
34-
}
35-
return next;
36-
},
37-
[sortBy]
38-
);
17+
function applySort(items: TaskTemplateListItemDTO[]): TaskTemplateListItemDTO[] {
18+
if (!sortBy) return items;
19+
const sortedTaskTemplates = [...items];
20+
switch (sortBy) {
21+
case 'title-asc':
22+
sortedTaskTemplates.sort((a, b) => a.title.localeCompare(b.title));
23+
break;
24+
case 'title-desc':
25+
sortedTaskTemplates.sort((a, b) => b.title.localeCompare(a.title));
26+
break;
27+
case 'estimated-asc':
28+
sortedTaskTemplates.sort((a, b) => a.estimatedTime - b.estimatedTime);
29+
break;
30+
case 'estimated-desc':
31+
sortedTaskTemplates.sort((a, b) => b.estimatedTime - a.estimatedTime);
32+
break;
33+
}
34+
return sortedTaskTemplates;
35+
}
3936

4037
useEffect(() => {
4138
async function fetchTaskList() {
@@ -120,6 +117,6 @@ export function useTaskTemplateList() {
120117
insertTaskTemplateAtTopOfPage,
121118
sortBy,
122119
setSortBy,
123-
sortAndFilter,
120+
applySort,
124121
};
125122
}

0 commit comments

Comments
 (0)