From 070873ebbca30819485932953fa38a649b7ce3d8 Mon Sep 17 00:00:00 2001 From: Hailey Date: Fri, 7 Jun 2024 10:51:49 -0700 Subject: [PATCH] add store --- src/state/persisted/schema.ts | 2 ++ src/state/preferences/index.tsx | 5 +++- src/state/preferences/starter-pack.tsx | 35 ++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/state/preferences/starter-pack.tsx diff --git a/src/state/persisted/schema.ts b/src/state/persisted/schema.ts index b81cf5962d..dc17d97c59 100644 --- a/src/state/persisted/schema.ts +++ b/src/state/persisted/schema.ts @@ -88,6 +88,7 @@ export const schema = z.object({ disableHaptics: z.boolean().optional(), disableAutoplay: z.boolean().optional(), kawaii: z.boolean().optional(), + starterPackId: z.string().optional(), }) export type Schema = z.infer @@ -126,4 +127,5 @@ export const defaults: Schema = { disableHaptics: false, disableAutoplay: prefersReducedMotion, kawaii: false, + starterPackId: undefined, } diff --git a/src/state/preferences/index.tsx b/src/state/preferences/index.tsx index 70c8efc805..bbb15675e4 100644 --- a/src/state/preferences/index.tsx +++ b/src/state/preferences/index.tsx @@ -8,6 +8,7 @@ import {Provider as HiddenPostsProvider} from './hidden-posts' import {Provider as InAppBrowserProvider} from './in-app-browser' import {Provider as KawaiiProvider} from './kawaii' import {Provider as LanguagesProvider} from './languages' +import {Provider as StarterPackProvider} from './starter-pack' export { useRequireAltTextEnabled, @@ -32,7 +33,9 @@ export function Provider({children}: React.PropsWithChildren<{}>) { - {children} + + {children} + diff --git a/src/state/preferences/starter-pack.tsx b/src/state/preferences/starter-pack.tsx new file mode 100644 index 0000000000..b5e54e44d1 --- /dev/null +++ b/src/state/preferences/starter-pack.tsx @@ -0,0 +1,35 @@ +import React from 'react' + +import * as persisted from '#/state/persisted' + +type StateContext = string | undefined +type SetContext = (v: string) => void + +const stateContext = React.createContext(undefined) +const setContext = React.createContext((_: string) => {}) + +export function Provider({children}: {children: React.ReactNode}) { + const [state, setState] = React.useState() + + const setStateWrapped = (v: string) => { + setState(v) + persisted.write('starterPackId', v) + } + + React.useEffect(() => { + return persisted.onUpdate(() => { + setState(persisted.get('starterPackId')) + }) + }, []) + + return ( + + + {children} + + + ) +} + +export const useStarterPack = () => React.useContext(stateContext) +export const useSetStarterPack = () => React.useContext(setContext)