Skip to content

Commit 0ccce16

Browse files
committed
Add stage filters to concept finder URL
1 parent 8ce7acf commit 0ccce16

File tree

3 files changed

+17
-12
lines changed

3 files changed

+17
-12
lines changed

src/app/components/elements/layout/SidebarLayout.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -430,15 +430,15 @@ export const SubjectSpecificConceptListSidebar = (props: ConceptListSidebarProps
430430
};
431431

432432
interface GenericConceptsSidebarProps extends ConceptListSidebarProps {
433-
searchStages: STAGE[];
434-
setSearchStages: React.Dispatch<React.SetStateAction<STAGE[]>>;
433+
searchStages: Stage[];
434+
setSearchStages: React.Dispatch<React.SetStateAction<Stage[]>>;
435435
stageCounts: Record<string, number>;
436436
}
437437

438438
export const GenericConceptsSidebar = (props: GenericConceptsSidebarProps) => {
439439
const { searchText, setSearchText, conceptFilters, setConceptFilters, applicableTags, tagCounts, searchStages, setSearchStages, stageCounts, ...rest } = props;
440440

441-
const updateSearchStages = (stage: STAGE) => {
441+
const updateSearchStages = (stage: Stage) => {
442442
if (searchStages.includes(stage)) {
443443
setSearchStages(searchStages.filter(s => s !== stage));
444444
} else {

src/app/components/pages/Concepts.tsx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {Link, RouteComponentProps, withRouter} from "react-router-dom";
33
import {selectors, useAppSelector} from "../../state";
44
import {Badge, Card, CardBody, CardHeader, Container} from "reactstrap";
55
import queryString from "query-string";
6-
import {getFilteredStageOptions, isAda, isPhy, isRelevantToPageContext, matchesAllWordsInAnyOrder, pushConceptsToHistory, searchResultIsPublic, shortcuts, STAGE, STAGE_TO_LEARNING_STAGE, TAG_ID, tags} from "../../services";
6+
import {getFilteredStageOptions, isAda, isPhy, isRelevantToPageContext, matchesAllWordsInAnyOrder, pushConceptsToHistory, searchResultIsPublic, shortcuts, TAG_ID, tags} from "../../services";
77
import {generateSubjectLandingPageCrumbFromContext, TitleAndBreadcrumb} from "../elements/TitleAndBreadcrumb";
88
import {ShortcutResponse, Tag} from "../../../IsaacAppTypes";
99
import {IsaacSpinner} from "../handlers/IsaacSpinner";
@@ -13,7 +13,7 @@ import { SubjectSpecificConceptListSidebar, MainContent, SidebarLayout, GenericC
1313
import { getHumanContext, isFullyDefinedContext, useUrlPageTheme } from "../../services/pageContext";
1414
import { useListConceptsQuery } from "../../state/slices/api/conceptsApi";
1515
import { ShowLoadingQuery } from "../handlers/ShowLoadingQuery";
16-
import { ContentSummaryDTO } from "../../../IsaacApiTypes";
16+
import { ContentSummaryDTO, Stage } from "../../../IsaacApiTypes";
1717
import { skipToken } from "@reduxjs/toolkit/query";
1818
import { AffixButton } from "../elements/AffixButton";
1919

@@ -32,13 +32,17 @@ export const Concepts = withRouter((props: RouteComponentProps) => {
3232

3333
const searchParsed = queryString.parse(location.search, {arrayFormat: "comma"});
3434

35-
const [query, filters] = useMemo(() => {
35+
const [query, filters, stages] = useMemo(() => {
3636
const queryParsed = searchParsed.query || null;
3737
const query = Array.isArray(queryParsed) ? queryParsed.join(",") : queryParsed;
3838

3939
const filterParsed = searchParsed.types || null;
4040
const filters = Array.isArray(filterParsed) ? filterParsed.filter(x => !!x) as string[] : filterParsed?.split(",") ?? [];
41-
return [query, filters];
41+
42+
const stagesParsed = searchParsed.stages || null;
43+
const stages = Array.isArray(stagesParsed) ? stagesParsed.filter(x => !!x) as string[] : stagesParsed?.split(",") ?? [];
44+
45+
return [query, filters, stages];
4246
}, [searchParsed]);
4347

4448
const applicableTags = pageContext?.subject
@@ -49,7 +53,7 @@ export const Concepts = withRouter((props: RouteComponentProps) => {
4953
const [conceptFilters, setConceptFilters] = useState<Tag[]>(
5054
applicableTags.filter(f => filters.includes(f.id))
5155
);
52-
const [searchStages, setSearchStages] = useState<STAGE[]>([]);
56+
const [searchStages, setSearchStages] = useState<Stage[]>(stages as Stage[]);
5357
const [shortcutResponse, setShortcutResponse] = useState<ShortcutResponse[]>();
5458

5559
const listConceptsQuery = useListConceptsQuery(pageContext
@@ -91,7 +95,7 @@ export const Concepts = withRouter((props: RouteComponentProps) => {
9195
if (e) {
9296
e.preventDefault();
9397
}
94-
pushConceptsToHistory(history, searchText || "", [...conceptFilters.map(f => f.id)]);
98+
pushConceptsToHistory(history, searchText || "", [...conceptFilters.map(f => f.id)], searchStages);
9599

96100
if (searchText) {
97101
setShortcutResponse(shortcuts(searchText));
@@ -108,7 +112,7 @@ export const Concepts = withRouter((props: RouteComponentProps) => {
108112
};
109113
}, [searchText]);
110114

111-
useEffect(() => {doSearch();}, [conceptFilters]);
115+
useEffect(() => {doSearch();}, [conceptFilters, searchStages]);
112116

113117
const crumb = isPhy && isFullyDefinedContext(pageContext) && generateSubjectLandingPageCrumbFromContext(pageContext);
114118

src/app/services/search.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {History} from "history";
22
import {DOCUMENT_TYPE, isStaff, TAG_ID} from ".";
3-
import {ContentSummaryDTO} from "../../IsaacApiTypes";
3+
import {ContentSummaryDTO, Stage} from "../../IsaacApiTypes";
44
import {PotentialUser} from "../../IsaacAppTypes";
55
import queryString from "query-string";
66
import {Immutable} from "immer";
@@ -18,10 +18,11 @@ export const pushSearchToHistory = function(history: History, searchQuery: strin
1818
});
1919
};
2020

21-
export const pushConceptsToHistory = function(history: History, searchText: string, subjects: TAG_ID[]) {
21+
export const pushConceptsToHistory = function(history: History, searchText: string, subjects: TAG_ID[], stages: Stage[]) {
2222
const queryOptions = {
2323
"query": encodeURIComponent(searchText),
2424
"types": subjects.join(","),
25+
"stages": stages.join(","),
2526
};
2627
history.push({
2728
pathname: history.location.pathname,

0 commit comments

Comments
 (0)