|
| 1 | +import { useLocalStorage } from '@zigurous/forge-react'; |
1 | 2 | import { graphql, useStaticQuery } from 'gatsby'; |
2 | 3 | import React, { createContext, useCallback, useContext, useState } from 'react'; |
3 | 4 | import type { GridMasterTile } from '../types/grid-master'; |
@@ -38,31 +39,30 @@ export function GridMasterContextProvider({ |
38 | 39 | }: React.PropsWithChildren) { |
39 | 40 | const data = useStaticQuery<GridMasterQueryData>(dataQuery); |
40 | 41 | const [flipped, setFlipped] = useState(defaultData.flipped); |
41 | | - const [checked, setChecked] = useState(defaultData.checked); |
42 | 42 | const [checkable, setCheckable] = useState(defaultData.flipped); |
| 43 | + const [checked, setChecked] = useLocalStorage( |
| 44 | + 'grid-master', |
| 45 | + defaultData.checked, |
| 46 | + ); |
43 | 47 | const [hideUnconfirmed, setHideUnconfirmed] = useState( |
44 | 48 | defaultData.hideUnconfirmed, |
45 | 49 | ); |
46 | 50 |
|
47 | | - const toggleChecked = useCallback( |
48 | | - (cell: string) => |
49 | | - setChecked(state => { |
50 | | - const index = state.indexOf(cell); |
51 | | - if (index !== -1) { |
52 | | - return state.toSpliced(index, 1); |
53 | | - } else { |
54 | | - return [...state, cell]; |
55 | | - } |
56 | | - }), |
57 | | - [], |
58 | | - ); |
| 51 | + const toggleChecked = (cell: string) => { |
| 52 | + const index = checked?.indexOf(cell) ?? -1; |
| 53 | + if (checked && index !== -1) { |
| 54 | + setChecked(checked.toSpliced(index, 1)); |
| 55 | + } else { |
| 56 | + setChecked([...(checked || []), cell]); |
| 57 | + } |
| 58 | + }; |
59 | 59 |
|
60 | 60 | return ( |
61 | 61 | <GridMasterContext.Provider |
62 | 62 | value={{ |
63 | 63 | tiles: data.tiles.nodes, |
64 | 64 | flipped, |
65 | | - checked, |
| 65 | + checked: checked || defaultData.checked, |
66 | 66 | checkable, |
67 | 67 | hideUnconfirmed, |
68 | 68 | setFlipped, |
|
0 commit comments