mirror of
https://github.com/movie-web/native-app.git
synced 2025-09-13 16:43:25 +00:00
38 lines
935 B
TypeScript
38 lines
935 B
TypeScript
import { create } from "zustand";
|
|
import { immer } from "zustand/middleware/immer";
|
|
import { setAlternateAppIcon } from "expo-alternate-app-icons";
|
|
import { getTheme, saveTheme } from "~/settings";
|
|
|
|
export type ThemeStoreOption = "main" | "blue" | "gray" | "red" | "teal";
|
|
|
|
export interface ThemeStore {
|
|
theme: ThemeStoreOption;
|
|
setTheme(v: ThemeStoreOption): void;
|
|
}
|
|
|
|
export const useThemeStore = create(
|
|
immer<ThemeStore>((set) => {
|
|
void getTheme().then((savedTheme) => {
|
|
set((s) => {
|
|
s.theme = savedTheme;
|
|
});
|
|
});
|
|
|
|
return {
|
|
theme: "main",
|
|
setTheme: (newTheme) => {
|
|
saveTheme(newTheme)
|
|
.then(() => {
|
|
set((s) => {
|
|
s.theme = newTheme;
|
|
void setAlternateAppIcon(newTheme)
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
console.error("Failed to save theme:", error);
|
|
});
|
|
},
|
|
};
|
|
}),
|
|
);
|