Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 54306a2

Browse files
committedFeb 13, 2025·
hide irrelevant filters based on node type
1 parent 16d9ed0 commit 54306a2

File tree

4 files changed

+46
-9
lines changed

4 files changed

+46
-9
lines changed
 

‎src/containers/SearchPageV2/GrepFilter.tsx

+14-3
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@
66
*
77
*/
88

9-
import { useCallback, useMemo } from "react";
9+
import { useCallback, useEffect, useMemo } from "react";
1010
import { useTranslation } from "react-i18next";
1111
import { gql, useQuery } from "@apollo/client";
1212
import { CloseLine } from "@ndla/icons";
1313
import { Button, Heading, Spinner } from "@ndla/primitives";
1414
import { styled } from "@ndla/styled-system/jsx";
1515
import { FilterContainer } from "./FilterContainer";
16+
import { RESOURCE_NODE_TYPE } from "./searchUtils";
1617
import { useStableSearchPageParams } from "./useStableSearchParams";
1718
import { GQLGrepFilterQuery, GQLGrepFilterQueryVariables } from "../../graphqlTypes";
1819

@@ -65,14 +66,21 @@ const grepFilterQuery = gql`
6566
export const GrepFilter = () => {
6667
const [searchParams, setSearchParams] = useStableSearchPageParams();
6768
const { t, i18n } = useTranslation();
69+
const nodeType = searchParams.get("type");
6870

6971
const codes = useMemo(() => searchParams.get("grepCodes")?.split(",") ?? [], [searchParams]);
7072

7173
const grepQuery = useQuery<GQLGrepFilterQuery, GQLGrepFilterQueryVariables>(grepFilterQuery, {
7274
variables: { language: i18n.language, codes },
73-
skip: !codes.length,
75+
skip: !codes.length || (!!nodeType && nodeType !== RESOURCE_NODE_TYPE),
7476
});
7577

78+
useEffect(() => {
79+
if (nodeType && nodeType !== RESOURCE_NODE_TYPE) {
80+
setSearchParams({ grepCodes: null });
81+
}
82+
}, [nodeType, setSearchParams]);
83+
7684
// const groupedCompetenceGoals = useMemo(() => {
7785
// return groupCompetenceGoals(grepQuery.data?.competenceGoals ?? [], true, "LK20");
7886
// }, [grepQuery.data?.competenceGoals]);
@@ -101,7 +109,10 @@ export const GrepFilter = () => {
101109
[codes, setSearchParams],
102110
);
103111

104-
if (!grepQuery.loading && !grepQuery.data?.competenceGoals?.length && !grepQuery.data?.coreElements?.length) {
112+
if (
113+
(!grepQuery.loading && !grepQuery.data?.competenceGoals?.length && !grepQuery.data?.coreElements?.length) ||
114+
(nodeType && nodeType !== RESOURCE_NODE_TYPE)
115+
) {
105116
return;
106117
}
107118

‎src/containers/SearchPageV2/SearchContainer.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -423,14 +423,14 @@ export const SearchContainer = ({ resourceTypes, resourceTypesLoading }: Props)
423423
<Heading id={filterHeadingId} textStyle="title.medium" asChild consumeCss>
424424
<h2>{t("searchPage.filtersHeading")}</h2>
425425
</Heading>
426-
<GrepFilter />
427-
<TraitFilter />
428-
<SubjectFilter />
429426
<ResourceTypeFilter
430427
bucketResult={data?.search?.aggregations?.[0]?.values ?? []}
431428
resourceTypes={resourceTypes}
432429
resourceTypesLoading={resourceTypesLoading}
433430
/>
431+
<GrepFilter />
432+
<TraitFilter />
433+
<SubjectFilter />
434434
{!!isLti && (
435435
<LanguageSelector
436436
languages={supportedLanguages}

‎src/containers/SearchPageV2/SubjectFilter.tsx

+16-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
*/
88

9-
import { useCallback, useMemo } from "react";
9+
import { useCallback, useEffect, useMemo } from "react";
1010
import { useTranslation } from "react-i18next";
1111
import { gql, useQuery } from "@apollo/client";
1212
import { CloseLine } from "@ndla/icons";
@@ -23,6 +23,7 @@ import {
2323
} from "@ndla/primitives";
2424
import { styled } from "@ndla/styled-system/jsx";
2525
import { FilterContainer } from "./FilterContainer";
26+
import { RESOURCE_NODE_TYPE } from "./searchUtils";
2627
import { useStableSearchPageParams } from "./useStableSearchParams";
2728
import { DialogCloseButton } from "../../components/DialogCloseButton";
2829
import { GQLSubjectFilterQuery } from "../../graphqlTypes";
@@ -54,8 +55,17 @@ const subjectFilterQuery = gql`
5455
export const SubjectFilter = () => {
5556
const { t } = useTranslation();
5657
const [searchParams, setSearchParams] = useStableSearchPageParams();
58+
const nodeType = searchParams.get("type");
5759

58-
const subjectsQuery = useQuery<GQLSubjectFilterQuery>(subjectFilterQuery);
60+
const subjectsQuery = useQuery<GQLSubjectFilterQuery>(subjectFilterQuery, {
61+
skip: !!nodeType && nodeType !== RESOURCE_NODE_TYPE,
62+
});
63+
64+
useEffect(() => {
65+
if (nodeType && nodeType !== RESOURCE_NODE_TYPE) {
66+
setSearchParams({ subjects: null });
67+
}
68+
}, [nodeType, setSearchParams]);
5969

6070
const activeSubjectIds = useMemo(() => searchParams.get("subjects")?.split(",") ?? [], [searchParams]);
6171

@@ -79,6 +89,10 @@ export const SubjectFilter = () => {
7989
[t, subjectsQuery.data],
8090
);
8191

92+
if (nodeType && nodeType !== RESOURCE_NODE_TYPE) {
93+
return;
94+
}
95+
8296
return (
8397
<FilterContainer>
8498
<Heading asChild consumeCss textStyle="label.medium" fontWeight="bold">

‎src/containers/SearchPageV2/TraitFilter.tsx

+13-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
*/
88

9-
import { useCallback } from "react";
9+
import { useCallback, useEffect } from "react";
1010
import { useTranslation } from "react-i18next";
1111
import { CheckLine } from "@ndla/icons";
1212
import {
@@ -20,13 +20,21 @@ import {
2020
} from "@ndla/primitives";
2121
import { SearchTrait } from "@ndla/types-backend/search-api";
2222
import { FilterContainer } from "./FilterContainer";
23+
import { RESOURCE_NODE_TYPE } from "./searchUtils";
2324
import { useStableSearchPageParams } from "./useStableSearchParams";
2425

2526
const TRAITS: SearchTrait[] = ["VIDEO", "AUDIO", "H5P", "PODCAST"];
2627

2728
export const TraitFilter = () => {
2829
const { t } = useTranslation();
2930
const [searchParams, setSearchParams] = useStableSearchPageParams();
31+
const nodeType = searchParams.get("type");
32+
33+
useEffect(() => {
34+
if (nodeType && nodeType !== RESOURCE_NODE_TYPE) {
35+
setSearchParams({ traits: null });
36+
}
37+
}, [nodeType, setSearchParams]);
3038

3139
const onValueChange = useCallback(
3240
(traits: string[]) => {
@@ -35,6 +43,10 @@ export const TraitFilter = () => {
3543
[setSearchParams],
3644
);
3745

46+
if (nodeType && nodeType !== RESOURCE_NODE_TYPE) {
47+
return;
48+
}
49+
3850
return (
3951
<FilterContainer>
4052
<Heading textStyle="label.medium" fontWeight="bold" asChild consumeCss>

0 commit comments

Comments
 (0)
Please sign in to comment.