Skip to content

Commit fc223a2

Browse files
committed
Save checked grid master tiles in local storage
1 parent 5d9d5c1 commit fc223a2

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

src/context/GridMasterContext.tsx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { useLocalStorage } from '@zigurous/forge-react';
12
import { graphql, useStaticQuery } from 'gatsby';
23
import React, { createContext, useCallback, useContext, useState } from 'react';
34
import type { GridMasterTile } from '../types/grid-master';
@@ -38,31 +39,30 @@ export function GridMasterContextProvider({
3839
}: React.PropsWithChildren) {
3940
const data = useStaticQuery<GridMasterQueryData>(dataQuery);
4041
const [flipped, setFlipped] = useState(defaultData.flipped);
41-
const [checked, setChecked] = useState(defaultData.checked);
4242
const [checkable, setCheckable] = useState(defaultData.flipped);
43+
const [checked, setChecked] = useLocalStorage(
44+
'grid-master',
45+
defaultData.checked,
46+
);
4347
const [hideUnconfirmed, setHideUnconfirmed] = useState(
4448
defaultData.hideUnconfirmed,
4549
);
4650

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+
};
5959

6060
return (
6161
<GridMasterContext.Provider
6262
value={{
6363
tiles: data.tiles.nodes,
6464
flipped,
65-
checked,
65+
checked: checked || defaultData.checked,
6666
checkable,
6767
hideUnconfirmed,
6868
setFlipped,

0 commit comments

Comments
 (0)