Skip to content

Commit 1cac4e1

Browse files
committed
use a json file for state storage instead of web LocalStorage
1 parent 05d7f7d commit 1cac4e1

File tree

6 files changed

+76
-10
lines changed

6 files changed

+76
-10
lines changed

src/main.tsx

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,54 @@
11
import ReactDOM from "react-dom/client";
2-
import "./locales";
32
import App from "./App";
3+
import "./locales";
4+
import { useGenericPersistentState } from "./states/genericStates";
5+
import { usePersistentServers } from "./states/servers";
6+
import { useSettings } from "./states/settings";
7+
import { useTheme } from "./states/theme";
8+
import nativeStorage from "./utils/nativeStorage";
9+
10+
async function runner() {
11+
const favsStr = localStorage.getItem("favorites-and-recentlyjoined-storage");
12+
const genericStr = localStorage.getItem("generic-state-storage");
13+
const settingsStr = localStorage.getItem("settings-storage");
14+
const themeStr = localStorage.getItem("theme-storage");
15+
16+
if (favsStr) {
17+
const favs = JSON.parse(favsStr);
18+
const settingsNewStr = await nativeStorage.getItem("settings-storage");
19+
20+
const hasNativeData =
21+
settingsNewStr === null
22+
? false
23+
: JSON.parse(settingsNewStr).state.dataMerged;
24+
25+
if (
26+
Array.isArray(favs.state.favorites) &&
27+
favs.state.favorites.length &&
28+
!hasNativeData
29+
) {
30+
usePersistentServers.setState(favs.state);
31+
32+
if (genericStr) {
33+
const generic = JSON.parse(genericStr);
34+
useGenericPersistentState.setState(generic.state);
35+
}
36+
37+
if (settingsStr) {
38+
const settings = JSON.parse(settingsStr);
39+
useSettings.setState({ ...settings.state, dataMerged: true });
40+
}
41+
42+
if (themeStr) {
43+
const theme = JSON.parse(themeStr);
44+
useTheme.setState(theme.state);
45+
}
46+
}
47+
}
48+
49+
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
50+
<App />
51+
);
52+
}
453

5-
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
6-
<App />
7-
);
54+
runner();

src/states/genericStates.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { create } from "zustand";
22
import { createJSONStorage, persist } from "zustand/middleware";
3-
import { ListType, SearchData } from "../utils/types";
43
import { LanguageType } from "../locales";
4+
import { nativeStateStorage } from "../utils/nativeStorage";
5+
import { ListType, SearchData } from "../utils/types";
56

67
interface GenericTempStates {
78
filterMenu: boolean;
@@ -59,7 +60,7 @@ const useGenericPersistentState = create<GenericPersistentStates>()(
5960
}),
6061
{
6162
name: "generic-state-storage",
62-
storage: createJSONStorage(() => localStorage),
63+
storage: createJSONStorage(() => nativeStateStorage),
6364
}
6465
)
6566
);

src/states/servers.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { t } from "i18next";
22
import { create } from "zustand";
33
import { createJSONStorage, persist } from "zustand/middleware";
4+
import { nativeStateStorage } from "../utils/nativeStorage";
5+
import { queryServer } from "../utils/query";
46
import { PerServerSettings, SAMPDLLVersions, Server } from "../utils/types";
57
import { useNotification } from "./notification";
6-
import { queryServer } from "../utils/query";
78

89
interface ServersState {
910
servers: Server[];
@@ -187,7 +188,7 @@ const usePersistentServers = create<ServersPersistentState>()(
187188
}),
188189
{
189190
name: "favorites-and-recentlyjoined-storage",
190-
storage: createJSONStorage(() => localStorage),
191+
storage: createJSONStorage(() => nativeStateStorage),
191192
}
192193
)
193194
);

src/states/settings.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { create } from "zustand";
22
import { createJSONStorage, persist } from "zustand/middleware";
3+
import { nativeStateStorage } from "../utils/nativeStorage";
34
import { SAMPDLLVersions } from "../utils/types";
45

56
interface SettingsPersistentState {
67
nickName: string;
78
gtasaPath: string;
89
sampVersion: SAMPDLLVersions;
10+
dataMerged: boolean;
911
setNickName: (name: string) => void;
1012
setGTASAPath: (path: string) => void;
1113
setSampVersion: (version: SAMPDLLVersions) => void;
@@ -17,13 +19,14 @@ const useSettings = create<SettingsPersistentState>()(
1719
nickName: "",
1820
gtasaPath: "",
1921
sampVersion: "custom",
22+
dataMerged: false,
2023
setNickName: (name) => set({ nickName: name }),
2124
setGTASAPath: (path) => set({ gtasaPath: path }),
2225
setSampVersion: (version) => set({ sampVersion: version }),
2326
}),
2427
{
2528
name: "settings-storage",
26-
storage: createJSONStorage(() => localStorage),
29+
storage: createJSONStorage(() => nativeStateStorage),
2730
}
2831
)
2932
);

src/states/theme.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
darkThemeColors,
66
lightThemeColors,
77
} from "../constants/theme";
8+
import { nativeStateStorage } from "../utils/nativeStorage";
89

910
interface ThemePersistentState {
1011
theme: ThemeColors;
@@ -25,7 +26,7 @@ const useTheme = create<ThemePersistentState>()(
2526
}),
2627
{
2728
name: "theme-storage",
28-
storage: createJSONStorage(() => localStorage),
29+
storage: createJSONStorage(() => nativeStateStorage),
2930
}
3031
)
3132
);

src/utils/nativeStorage.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,17 @@ class NativeStorage {
3939
}
4040

4141
const nativeStorage = new NativeStorage();
42+
43+
export const nativeStateStorage: any = {
44+
getItem: async (key: string) => {
45+
return await nativeStorage.getItem(key);
46+
},
47+
setItem: async (key: string, value: string) => {
48+
await nativeStorage.setItem(key, value);
49+
},
50+
removeItem: async (key: string) => {
51+
await nativeStorage.removeItem(key);
52+
},
53+
};
54+
4255
export default nativeStorage;

0 commit comments

Comments
 (0)