Skip to content

Commit 21e1133

Browse files
committed
refactor: optimize useSelectedTags hook by consolidating user preferences retrieval
1 parent 166ca1b commit 21e1133

1 file changed

Lines changed: 28 additions & 13 deletions

File tree

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useMemo } from 'react'
22
import { useUserPreferences } from 'src/stores/preferences'
3+
import { useShallow } from 'zustand/shallow'
34
import { MY_LANGUAGES_OPTION } from '../config'
45

56
type useSelectedTagsProps = {
@@ -10,27 +11,41 @@ type useSelectedTagsProps = {
1011
}
1112
}
1213
export const useSelectedTags = ({ source, fallbackTag }: useSelectedTagsProps) => {
13-
const cardSettings = useUserPreferences((state) => state.cardsSettings?.[source])
14-
const { userSelectedTags } = useUserPreferences()
15-
14+
const { cardSettings, userSelectedTags } = useUserPreferences(
15+
useShallow((state) => {
16+
return {
17+
cardSettings: state.cardsSettings?.[source],
18+
userSelectedTags: state.userSelectedTags,
19+
}
20+
})
21+
)
22+
const { language } = cardSettings || {}
1623
const selectedTags = useMemo(() => {
17-
if (!cardSettings?.language) {
24+
if (!language || (language === MY_LANGUAGES_OPTION.value && userSelectedTags.length === 0)) {
1825
return [fallbackTag]
1926
}
2027

21-
if (cardSettings.language === MY_LANGUAGES_OPTION.value) {
28+
if (language === MY_LANGUAGES_OPTION.value) {
2229
return userSelectedTags
2330
}
24-
return [userSelectedTags.find((lang) => lang.value === cardSettings?.language) || fallbackTag]
25-
}, [userSelectedTags, cardSettings])
31+
return [userSelectedTags.find((lang) => lang.value === language) || fallbackTag]
32+
}, [userSelectedTags, language])
33+
34+
const selectedTag = useMemo(() => {
35+
return language
36+
? [MY_LANGUAGES_OPTION, ...userSelectedTags].find((lang) => lang.value === language) ||
37+
fallbackTag
38+
: fallbackTag
39+
}, [language, userSelectedTags])
40+
41+
const queryTags = useMemo(() => {
42+
return selectedTags.map((tag) => tag.value)
43+
}, [selectedTags])
2644

2745
return {
28-
queryTags: selectedTags,
29-
selectedTag: cardSettings?.language
30-
? [MY_LANGUAGES_OPTION, ...userSelectedTags].find(
31-
(lang) => lang.value === cardSettings.language
32-
) || fallbackTag
33-
: fallbackTag,
46+
selectedTags,
47+
queryTags,
48+
selectedTag,
3449
cardSettings,
3550
}
3651
}

0 commit comments

Comments
 (0)