mirror of
https://github.com/linkwarden/linkwarden.git
synced 2026-03-03 00:27:01 +00:00
38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
import { create } from "zustand";
|
|
import { MobileData } from "@linkwarden/types";
|
|
import AsyncStorage from "@react-native-async-storage/async-storage";
|
|
import { colorScheme } from "nativewind";
|
|
|
|
type DataStore = {
|
|
data: MobileData;
|
|
updateData: (newData: Partial<MobileData>) => void;
|
|
setData: () => void;
|
|
};
|
|
|
|
const useDataStore = create<DataStore>((set, get) => ({
|
|
data: {
|
|
shareIntent: {
|
|
hasShareIntent: false,
|
|
url: "",
|
|
},
|
|
theme: "system",
|
|
preferredBrowser: "app",
|
|
},
|
|
setData: async () => {
|
|
const dataString = JSON.parse((await AsyncStorage.getItem("data")) || "{}");
|
|
|
|
colorScheme.set(dataString.theme || "system");
|
|
|
|
if (dataString)
|
|
set((state) => ({ data: { ...state.data, ...dataString } }));
|
|
},
|
|
updateData: async (patch) => {
|
|
const merged = { ...get().data, ...patch };
|
|
const { shareIntent, ...persistable } = merged;
|
|
await AsyncStorage.setItem("data", JSON.stringify(persistable));
|
|
set({ data: merged });
|
|
},
|
|
}));
|
|
|
|
export default useDataStore;
|