refactor: use mmkv and zustand persist middleware for main storage

This commit is contained in:
Adrian Castro
2024-03-25 16:07:22 +01:00
parent 0554dd13bc
commit 784628952a
8 changed files with 123 additions and 154 deletions

View File

@@ -0,0 +1,86 @@
import type { StateStorage } from "zustand/middleware";
import { MMKV } from "react-native-mmkv";
import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
import type { DownloadItem } from "~/hooks/DownloadManagerContext";
import type { ThemeStoreOption } from "~/stores/theme";
const storage = new MMKV();
const zustandStorage: StateStorage = {
getItem: (name: string): string | null => {
const value = storage.getString(name);
return value ?? null;
},
setItem: (name: string, value: string): void => {
storage.set(name, value);
},
removeItem: (name: string): void => {
storage.delete(name);
},
};
interface ThemeStoreState {
theme: ThemeStoreOption;
setTheme: (theme: ThemeStoreOption) => void;
}
export const useThemeSettingsStore = create<
ThemeStoreState,
[["zustand/persist", ThemeStoreState]]
>(
persist(
(set) => ({
theme: "main",
setTheme: (theme: ThemeStoreOption) => set({ theme }),
}),
{
name: "theme-settings",
storage: createJSONStorage(() => zustandStorage),
},
),
);
interface PlayerStoreState {
gestureControls: boolean;
setGestureControls: (enabled: boolean) => void;
}
export const usePlayerSettingsStore = create<
PlayerStoreState,
[["zustand/persist", PlayerStoreState]]
>(
persist(
(set) => ({
gestureControls: true,
setGestureControls: (enabled: boolean) =>
set({ gestureControls: enabled }),
}),
{
name: "player-settings",
storage: createJSONStorage(() => zustandStorage),
},
),
);
interface DownloadHistoryStoreState {
downloads: DownloadItem[];
setDownloads: (downloads: DownloadItem[]) => void;
}
export const useDownloadHistoryStore = create<
DownloadHistoryStoreState,
[["zustand/persist", DownloadHistoryStoreState]]
>(
persist(
(set) => ({
downloads: [],
setDownloads: (downloads: DownloadItem[]) => set({ downloads }),
}),
{
name: "download-history",
storage: createJSONStorage(() => zustandStorage),
},
),
);