mirror of
https://github.com/movie-web/native-app.git
synced 2025-09-13 12:43:25 +00:00
96 lines
2.3 KiB
TypeScript
96 lines
2.3 KiB
TypeScript
import type { StateStorage } from "zustand/middleware";
|
|
import { Platform } from "react-native";
|
|
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;
|
|
autoPlay: boolean;
|
|
setAutoPlay: (enabled: boolean) => void;
|
|
}
|
|
|
|
export const usePlayerSettingsStore = create<
|
|
PlayerStoreState,
|
|
[["zustand/persist", PlayerStoreState]]
|
|
>(
|
|
persist(
|
|
(set) => ({
|
|
gestureControls: Platform.select({
|
|
ios: true,
|
|
android: false,
|
|
default: true,
|
|
}),
|
|
setGestureControls: (enabled: boolean) =>
|
|
set({ gestureControls: enabled }),
|
|
autoPlay: true,
|
|
setAutoPlay: (enabled: boolean) => set({ autoPlay: 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),
|
|
},
|
|
),
|
|
);
|