1
- import { useState , useCallback , useMemo } from 'react'
1
+ import { useState , useCallback , useMemo , useEffect } from 'react'
2
2
import { useShowModal } from './modal'
3
3
import { useRouter } from 'next/router'
4
4
import { NOTIFICATION_CATEGORIES } from '../lib/constants'
@@ -9,9 +9,18 @@ import styles from './notifications-filter.module.css'
9
9
export function NotificationsFilter ( { onClose } ) {
10
10
const router = useRouter ( )
11
11
12
+ // TODO cleaner
12
13
const appliedFilters = useMemo ( ( ) => {
13
- const filters = new Set ( router . query . inc ?. split ( ',' ) || [ ] ) // get filters from URL
14
+ let filters = new Set ( router . query . inc ?. split ( ',' ) || [ ] ) // get filters from URL
14
15
filters . delete ( '' ) // avoid empty category
16
+
17
+ if ( filters . size === 0 ) {
18
+ const savedFilters = JSON . parse ( window . localStorage . getItem ( 'notificationFilters' ) )
19
+ if ( savedFilters ) {
20
+ filters = new Set ( savedFilters )
21
+ }
22
+ }
23
+
15
24
return filters
16
25
} , [ router . query . inc ] )
17
26
@@ -26,6 +35,7 @@ export function NotificationsFilter ({ onClose }) {
26
35
} , [ ] )
27
36
28
37
const filterRoutePush = useCallback ( ( ) => {
38
+ window . localStorage . setItem ( 'notificationFilters' , JSON . stringify ( [ ...filters ] ) )
29
39
const incstr = [ ...filters ] . join ( ',' )
30
40
router . replace ( // replace is necessary as lastChecked needs to stay to avoid re-refreshes
31
41
{
@@ -78,7 +88,13 @@ export function NotificationsFilter ({ onClose }) {
78
88
export default function NotificationsHeader ( ) {
79
89
const showModal = useShowModal ( )
80
90
const router = useRouter ( )
81
- const hasActiveFilters = router . query . inc ?. length
91
+
92
+ const [ hasActiveFilters , setActiveFilters ] = useState ( false )
93
+
94
+ // TODO: memoize
95
+ useEffect ( ( ) => {
96
+ setActiveFilters ( router . query . inc ?. length || JSON . parse ( window . localStorage . getItem ( 'notificationFilters' ) ) ?. length )
97
+ } , [ router . query . inc ] )
82
98
83
99
return (
84
100
< div className = 'd-flex align-items-center gap-2' >
0 commit comments