Skip to content

Commit

Permalink
use a json file for state storage instead of web LocalStorage
Browse files Browse the repository at this point in the history
  • Loading branch information
AmyrAhmady committed Aug 11, 2024
1 parent 05d7f7d commit 1cac4e1
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 10 deletions.
55 changes: 51 additions & 4 deletions src/main.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,54 @@
import ReactDOM from "react-dom/client";
import "./locales";
import App from "./App";
import "./locales";
import { useGenericPersistentState } from "./states/genericStates";
import { usePersistentServers } from "./states/servers";
import { useSettings } from "./states/settings";
import { useTheme } from "./states/theme";
import nativeStorage from "./utils/nativeStorage";

async function runner() {
const favsStr = localStorage.getItem("favorites-and-recentlyjoined-storage");
const genericStr = localStorage.getItem("generic-state-storage");
const settingsStr = localStorage.getItem("settings-storage");
const themeStr = localStorage.getItem("theme-storage");

if (favsStr) {
const favs = JSON.parse(favsStr);
const settingsNewStr = await nativeStorage.getItem("settings-storage");

const hasNativeData =
settingsNewStr === null
? false
: JSON.parse(settingsNewStr).state.dataMerged;

if (
Array.isArray(favs.state.favorites) &&
favs.state.favorites.length &&
!hasNativeData
) {
usePersistentServers.setState(favs.state);

if (genericStr) {
const generic = JSON.parse(genericStr);
useGenericPersistentState.setState(generic.state);
}

if (settingsStr) {
const settings = JSON.parse(settingsStr);
useSettings.setState({ ...settings.state, dataMerged: true });
}

if (themeStr) {
const theme = JSON.parse(themeStr);
useTheme.setState(theme.state);
}
}
}

ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
<App />
);
}

ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
<App />
);
runner();
5 changes: 3 additions & 2 deletions src/states/genericStates.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
import { ListType, SearchData } from "../utils/types";
import { LanguageType } from "../locales";
import { nativeStateStorage } from "../utils/nativeStorage";
import { ListType, SearchData } from "../utils/types";

interface GenericTempStates {
filterMenu: boolean;
Expand Down Expand Up @@ -59,7 +60,7 @@ const useGenericPersistentState = create<GenericPersistentStates>()(
}),
{
name: "generic-state-storage",
storage: createJSONStorage(() => localStorage),
storage: createJSONStorage(() => nativeStateStorage),
}
)
);
Expand Down
5 changes: 3 additions & 2 deletions src/states/servers.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { t } from "i18next";
import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
import { nativeStateStorage } from "../utils/nativeStorage";
import { queryServer } from "../utils/query";
import { PerServerSettings, SAMPDLLVersions, Server } from "../utils/types";
import { useNotification } from "./notification";
import { queryServer } from "../utils/query";

interface ServersState {
servers: Server[];
Expand Down Expand Up @@ -187,7 +188,7 @@ const usePersistentServers = create<ServersPersistentState>()(
}),
{
name: "favorites-and-recentlyjoined-storage",
storage: createJSONStorage(() => localStorage),
storage: createJSONStorage(() => nativeStateStorage),
}
)
);
Expand Down
5 changes: 4 additions & 1 deletion src/states/settings.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
import { nativeStateStorage } from "../utils/nativeStorage";
import { SAMPDLLVersions } from "../utils/types";

interface SettingsPersistentState {
nickName: string;
gtasaPath: string;
sampVersion: SAMPDLLVersions;
dataMerged: boolean;
setNickName: (name: string) => void;
setGTASAPath: (path: string) => void;
setSampVersion: (version: SAMPDLLVersions) => void;
Expand All @@ -17,13 +19,14 @@ const useSettings = create<SettingsPersistentState>()(
nickName: "",
gtasaPath: "",
sampVersion: "custom",
dataMerged: false,
setNickName: (name) => set({ nickName: name }),
setGTASAPath: (path) => set({ gtasaPath: path }),
setSampVersion: (version) => set({ sampVersion: version }),
}),
{
name: "settings-storage",
storage: createJSONStorage(() => localStorage),
storage: createJSONStorage(() => nativeStateStorage),
}
)
);
Expand Down
3 changes: 2 additions & 1 deletion src/states/theme.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import {
darkThemeColors,
lightThemeColors,
} from "../constants/theme";
import { nativeStateStorage } from "../utils/nativeStorage";

interface ThemePersistentState {
theme: ThemeColors;
Expand All @@ -25,7 +26,7 @@ const useTheme = create<ThemePersistentState>()(
}),
{
name: "theme-storage",
storage: createJSONStorage(() => localStorage),
storage: createJSONStorage(() => nativeStateStorage),
}
)
);
Expand Down
13 changes: 13 additions & 0 deletions src/utils/nativeStorage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,17 @@ class NativeStorage {
}

const nativeStorage = new NativeStorage();

export const nativeStateStorage: any = {
getItem: async (key: string) => {
return await nativeStorage.getItem(key);
},
setItem: async (key: string, value: string) => {
await nativeStorage.setItem(key, value);
},
removeItem: async (key: string) => {
await nativeStorage.removeItem(key);
},
};

export default nativeStorage;

0 comments on commit 1cac4e1

Please sign in to comment.