1
- import React , { useEffect , useState } from "react"
1
+ import React , { useEffect , useMemo , useState } from "react"
2
2
import styled from "@emotion/styled"
3
3
import { graphql , PageProps } from "gatsby"
4
4
import { useIntl } from "react-intl"
@@ -256,18 +256,39 @@ const TutorialsPage = ({
256
256
data,
257
257
pageContext,
258
258
} : 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 ]
264
267
)
265
- const allTags = getSortedTutorialTagsForLang ( filteredTutorialsByLang )
266
268
269
+ const intl = useIntl ( )
270
+ const [ isModalOpen , setModalOpen ] = useState ( false )
267
271
const [ filteredTutorials , setFilteredTutorials ] = useState (
268
272
filteredTutorialsByLang
269
273
)
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 ] )
271
292
272
293
const handleTagSelect = ( tagName : string ) => {
273
294
const tempSelectedTags = selectedTags
@@ -282,13 +303,6 @@ const TutorialsPage = ({
282
303
setSelectedTags ( [ ...tempSelectedTags ] )
283
304
}
284
305
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
-
292
306
return (
293
307
< StyledPage >
294
308
< PageMetadata
0 commit comments