Skip to content

Commit 5e5adb9

Browse files
committed
filter tutorials when a tag is selected
1 parent 5edc16b commit 5e5adb9

File tree

2 files changed

+41
-22
lines changed

2 files changed

+41
-22
lines changed

src/pages/developers/tutorials.tsx

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useEffect, useState } from "react"
1+
import React, { useEffect, useMemo, useState } from "react"
22
import styled from "@emotion/styled"
33
import { graphql, PageProps } from "gatsby"
44
import { useIntl } from "react-intl"
@@ -256,18 +256,39 @@ const TutorialsPage = ({
256256
data,
257257
pageContext,
258258
}: PageProps<Queries.DevelopersTutorialsPageQuery, Context>) => {
259-
const intl = useIntl()
260-
const filteredTutorialsByLang = filterTutorialsByLang(
261-
data.allTutorials.nodes,
262-
externalTutorials,
263-
pageContext.locale
259+
const filteredTutorialsByLang = useMemo(
260+
() =>
261+
filterTutorialsByLang(
262+
data.allTutorials.nodes,
263+
externalTutorials,
264+
pageContext.locale
265+
),
266+
[pageContext.locale]
264267
)
265-
const allTags = getSortedTutorialTagsForLang(filteredTutorialsByLang)
266268

269+
const intl = useIntl()
270+
const [isModalOpen, setModalOpen] = useState(false)
267271
const [filteredTutorials, setFilteredTutorials] = useState(
268272
filteredTutorialsByLang
269273
)
270-
const [selectedTags, setSelectedTags] = useState<string[]>([])
274+
const [selectedTags, setSelectedTags] = useState<Array<string>>([])
275+
276+
const allTags = useMemo(
277+
() => getSortedTutorialTagsForLang(filteredTutorials),
278+
[filteredTutorials]
279+
)
280+
281+
useEffect(() => {
282+
let tutorials = filteredTutorialsByLang
283+
284+
if (selectedTags.length) {
285+
tutorials = tutorials.filter((tutorial) => {
286+
return selectedTags.every((tag) => (tutorial.tags || []).includes(tag))
287+
})
288+
}
289+
290+
setFilteredTutorials(tutorials)
291+
}, [selectedTags])
271292

272293
const handleTagSelect = (tagName: string) => {
273294
const tempSelectedTags = selectedTags
@@ -282,13 +303,6 @@ const TutorialsPage = ({
282303
setSelectedTags([...tempSelectedTags])
283304
}
284305

285-
// TODO: Update setFilteredTutorials with filteredTutorialsByLang filtered out by selectedTags
286-
useEffect(() => {
287-
console.log("CHANGE")
288-
}, [selectedTags])
289-
290-
const [isModalOpen, setModalOpen] = useState(false)
291-
292306
return (
293307
<StyledPage>
294308
<PageMetadata

src/utils/tutorials.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ import { Lang } from "./languages"
44

55
// Take all tutorials, and return a list of tutorials for a specific locale
66
export const filterTutorialsByLang = (
7-
internalTutorials: Array<any>,
7+
internalTutorials: any,
88
externalTutorials: Array<IExternalTutorial>,
99
locale: Lang
10-
) => {
11-
const internalTutorialsMap = internalTutorials.map<any>((tutorial) => ({
10+
): Array<ITutorial> => {
11+
const internalTutorialsMap = internalTutorials.map((tutorial) => ({
1212
to:
1313
tutorial?.fields?.slug?.substr(0, 3) === "/en"
1414
? tutorial.fields.slug.substr(3)
@@ -61,10 +61,15 @@ export const filterTutorialsByLang = (
6161
return filteredTutorials
6262
}
6363

64-
export const getSortedTutorialTagsForLang = (filteredTutorialsByLang) => {
65-
const allTags = filteredTutorialsByLang.reduce((tags, tutorial) => {
66-
return [...tags, ...tutorial.tags]
67-
}, [])
64+
export const getSortedTutorialTagsForLang = (
65+
filteredTutorialsByLang: Array<ITutorial> = []
66+
) => {
67+
const allTags = filteredTutorialsByLang.reduce<Array<string>>(
68+
(tags, tutorial) => {
69+
return [...tags, ...(tutorial.tags || [])]
70+
},
71+
[]
72+
)
6873

6974
const reducedTags = allTags.reduce((acc, tag) => {
7075
if (acc[tag]) {

0 commit comments

Comments
 (0)