Skip to content

Commit

Permalink
fix(Search): improve project search reactivity
Browse files Browse the repository at this point in the history
  • Loading branch information
jakeaturner committed Feb 13, 2024
1 parent e7d60de commit 28c4124
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 16 deletions.
37 changes: 28 additions & 9 deletions client/src/screens/conductor/Search/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import {
Project,
ProjectFile,
ProjectFileWProjectData,
ProjectSearchParams,
User,
} from "../../../types";
import { format, parseISO, set } from "date-fns";
Expand Down Expand Up @@ -78,7 +79,8 @@ const Search = () => {
);

const [projects, setProjects] = useState<Project[]>([]);
const [projectsSort, setProjectsSort] = useState(projSortDefault);
const [projectsSort, setProjectsSort] =
useState<ProjectSearchParams["sort"]>(projSortDefault);
const [projectsTotal, setProjectsTotal] = useState<number>(0);

const [books, setBooks] = useState<Book[]>([]);
Expand Down Expand Up @@ -274,7 +276,9 @@ const Search = () => {

async function handleProjectSearch(
query: string = searchQuery,
page: number = activeProjectPage
page: number = activeProjectPage,
limit: number = projectsLimit,
sort: ProjectSearchParams["sort"] = projectsSort
) {
try {
setProjectsLoading(true);
Expand All @@ -283,7 +287,8 @@ const Search = () => {
searchQuery: query,
strictMode: false,
page,
limit: projectsLimit,
limit,
sort,
});

if (res.data.err) {
Expand Down Expand Up @@ -536,9 +541,15 @@ const Search = () => {
className="search-itemsperpage-dropdown"
selection
options={catalogItemsPerPageOptions}
onChange={(_e, { value }) =>
setProjectsLimit((value as number) ?? 12)
}
onChange={(_e, { value }) => {
const newLimit = (value as number) ?? 12;
setProjectsLimit(newLimit);
handleProjectSearch(
searchQuery,
activeProjectPage,
newLimit
);
}}
value={projectsLimit}
aria-label="Number of results to display per page"
/>
Expand Down Expand Up @@ -567,9 +578,17 @@ const Search = () => {
selection
button
options={projSortOptions}
onChange={(_e, { value }) =>
setProjectsSort((value as string) ?? "title")
}
onChange={(_e, { value }) => {
const newSort =
(value as ProjectSearchParams["sort"]) ?? "title";
setProjectsSort(newSort);
handleProjectSearch(
searchQuery,
activeProjectPage,
projectsLimit,
newSort
);
}}
value={projectsSort}
aria-label="Sort Project Results by"
/>
Expand Down
14 changes: 7 additions & 7 deletions server/api/search.ts
Original file line number Diff line number Diff line change
Expand Up @@ -123,14 +123,8 @@ async function projectsSearch(
},
]);

const totalCount = results.length;
const paginated = results.slice(
projectsOffset,
projectsOffset + projectsLimit
);

//Sort projects
paginated.sort((a, b) => {
results.sort((a, b) => {
let aData = null;
let bData = null;
if (req.query.sort === "title") {
Expand All @@ -150,6 +144,12 @@ async function projectsSearch(
return 0;
});

const totalCount = results.length;
const paginated = results.slice(
projectsOffset,
projectsOffset + projectsLimit
);

return res.send({
err: false,
numResults: totalCount,
Expand Down

0 comments on commit 28c4124

Please sign in to comment.