Skip to content

Commit 188aa17

Browse files
committed
early localStorage implementation
1 parent 34e39f8 commit 188aa17

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

components/notifications-filter.js

+19-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState, useCallback, useMemo } from 'react'
1+
import { useState, useCallback, useMemo, useEffect } from 'react'
22
import { useShowModal } from './modal'
33
import { useRouter } from 'next/router'
44
import { NOTIFICATION_CATEGORIES } from '../lib/constants'
@@ -9,9 +9,18 @@ import styles from './notifications-filter.module.css'
99
export function NotificationsFilter ({ onClose }) {
1010
const router = useRouter()
1111

12+
// TODO cleaner
1213
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
1415
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+
1524
return filters
1625
}, [router.query.inc])
1726

@@ -26,6 +35,7 @@ export function NotificationsFilter ({ onClose }) {
2635
}, [])
2736

2837
const filterRoutePush = useCallback(() => {
38+
window.localStorage.setItem('notificationFilters', JSON.stringify([...filters]))
2939
const incstr = [...filters].join(',')
3040
router.replace( // replace is necessary as lastChecked needs to stay to avoid re-refreshes
3141
{
@@ -78,7 +88,13 @@ export function NotificationsFilter ({ onClose }) {
7888
export default function NotificationsHeader () {
7989
const showModal = useShowModal()
8090
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])
8298

8399
return (
84100
<div className='d-flex align-items-center gap-2'>

0 commit comments

Comments
 (0)