@xyo-network/react-app-settings 7.5.8 → 7.5.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/contexts/AppSettings/Provider.d.ts.map +1 -1
- package/dist/browser/index.mjs +76 -64
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +44 -19
- package/src/WebAppNavigationType.ts +0 -2
- package/src/components/DarkModeIconButton.tsx +0 -23
- package/src/components/Developer.tsx +0 -10
- package/src/components/index.ts +0 -2
- package/src/contexts/AppSettings/Context.ts +0 -23
- package/src/contexts/AppSettings/Provider.tsx +0 -82
- package/src/contexts/AppSettings/Slug.ts +0 -14
- package/src/contexts/AppSettings/Storage.ts +0 -59
- package/src/contexts/AppSettings/StorageBase.ts +0 -85
- package/src/contexts/AppSettings/appSettingDefault.ts +0 -13
- package/src/contexts/AppSettings/index.ts +0 -6
- package/src/contexts/AppSettings/useAppSettings.ts +0 -8
- package/src/contexts/index.ts +0 -1
- package/src/index.ts +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../../src/contexts/AppSettings/Provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC7D,OAAO,
|
|
1
|
+
{"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../../src/contexts/AppSettings/Provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAC7D,OAAO,KAEN,MAAM,OAAO,CAAA;AAGd,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,iEAAiE;AACjE,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,uBAAuB,GAAG,uBAAuB,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAC7H,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC7B;AAED,iEAAiE;AACjE,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAAC,wBAAwB,CAAC,CAqFrF,CAAA"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
|
|
4
1
|
// src/components/DarkModeIconButton.tsx
|
|
5
2
|
import { DarkModeRounded as DarkModeRoundedIcon, LightModeRounded as LightModeRoundedIcon } from "@mui/icons-material";
|
|
6
3
|
import { IconButton } from "@mui/material";
|
|
7
|
-
import React2 from "react";
|
|
8
4
|
|
|
9
5
|
// src/contexts/AppSettings/Context.ts
|
|
10
6
|
import { createContext } from "react";
|
|
@@ -21,7 +17,7 @@ var AppSettingSlug = Enum({
|
|
|
21
17
|
});
|
|
22
18
|
|
|
23
19
|
// src/contexts/AppSettings/appSettingDefault.ts
|
|
24
|
-
var appSettingDefault =
|
|
20
|
+
var appSettingDefault = () => {
|
|
25
21
|
return {
|
|
26
22
|
[AppSettingSlug.DarkMode]: false,
|
|
27
23
|
[AppSettingSlug.Developer]: false,
|
|
@@ -30,20 +26,21 @@ var appSettingDefault = /* @__PURE__ */ __name(() => {
|
|
|
30
26
|
[AppSettingSlug.SeedPhrase]: "",
|
|
31
27
|
[AppSettingSlug.MaxAccounts]: 1
|
|
32
28
|
};
|
|
33
|
-
}
|
|
29
|
+
};
|
|
34
30
|
|
|
35
31
|
// src/contexts/AppSettings/Context.ts
|
|
36
32
|
var AppSettingsContext = createContext(appSettingDefault());
|
|
37
33
|
|
|
38
34
|
// src/contexts/AppSettings/Provider.tsx
|
|
39
|
-
import
|
|
35
|
+
import {
|
|
36
|
+
useCallback,
|
|
37
|
+
useMemo,
|
|
38
|
+
useState
|
|
39
|
+
} from "react";
|
|
40
40
|
|
|
41
41
|
// src/contexts/AppSettings/StorageBase.ts
|
|
42
42
|
import { assertDefinedEx, assertEx } from "@xylabs/sdk-js";
|
|
43
43
|
var AppSettingsStorageBase = class {
|
|
44
|
-
static {
|
|
45
|
-
__name(this, "AppSettingsStorageBase");
|
|
46
|
-
}
|
|
47
44
|
defaults;
|
|
48
45
|
prefix;
|
|
49
46
|
constructor(prefix = "AppSettings", defaults) {
|
|
@@ -118,14 +115,8 @@ var AppSettingsStorageBase = class {
|
|
|
118
115
|
|
|
119
116
|
// src/contexts/AppSettings/Storage.ts
|
|
120
117
|
var AppSettingsStorage = class extends AppSettingsStorageBase {
|
|
121
|
-
static {
|
|
122
|
-
__name(this, "AppSettingsStorage");
|
|
123
|
-
}
|
|
124
118
|
constructor(prefix = "AppSettings", defaults) {
|
|
125
|
-
super(prefix, {
|
|
126
|
-
...appSettingDefault(),
|
|
127
|
-
...defaults
|
|
128
|
-
});
|
|
119
|
+
super(prefix, { ...appSettingDefault(), ...defaults });
|
|
129
120
|
}
|
|
130
121
|
get darkMode() {
|
|
131
122
|
return this.getBoolean(AppSettingSlug.DarkMode);
|
|
@@ -166,83 +157,104 @@ var AppSettingsStorage = class extends AppSettingsStorageBase {
|
|
|
166
157
|
};
|
|
167
158
|
|
|
168
159
|
// src/contexts/AppSettings/Provider.tsx
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
160
|
+
import { jsx } from "react/jsx-runtime";
|
|
161
|
+
var AppSettingsProvider = ({
|
|
162
|
+
storage,
|
|
163
|
+
value,
|
|
164
|
+
children,
|
|
165
|
+
...props
|
|
166
|
+
}) => {
|
|
167
|
+
const storageMemo = useMemo(() => storage ?? new AppSettingsStorage(), [storage]);
|
|
173
168
|
const [developerMode, setDeveloperMode] = useState(storageMemo.developerMode);
|
|
174
169
|
const [darkMode, setDarkMode] = useState(storageMemo.darkMode);
|
|
175
170
|
const [navigationType, setNavigationType] = useState(storageMemo.navigationType);
|
|
176
171
|
const [navigationCollapsed, setNavigationCollapsed] = useState(storageMemo.navigationCollapsed);
|
|
177
172
|
const [seedPhrase, setSeedPhrase] = useState(storageMemo.seedPhrase);
|
|
178
173
|
const [maxAccounts, setMaxAccounts] = useState(storageMemo.maxAccounts);
|
|
179
|
-
const enableDeveloperMode =
|
|
174
|
+
const enableDeveloperMode = useCallback((value2) => {
|
|
180
175
|
storageMemo.developerMode = value2;
|
|
181
176
|
setDeveloperMode(storageMemo.developerMode);
|
|
182
|
-
},
|
|
183
|
-
const enableDarkMode =
|
|
177
|
+
}, [storageMemo]);
|
|
178
|
+
const enableDarkMode = useCallback((value2) => {
|
|
184
179
|
storageMemo.darkMode = value2;
|
|
185
180
|
setDarkMode(storageMemo.darkMode);
|
|
186
|
-
},
|
|
187
|
-
const changeNavigationType =
|
|
181
|
+
}, [storageMemo]);
|
|
182
|
+
const changeNavigationType = useCallback((value2) => {
|
|
188
183
|
storageMemo.navigationType = value2;
|
|
189
184
|
setNavigationType(value2);
|
|
190
|
-
},
|
|
191
|
-
const changeNavigationCollapsed =
|
|
185
|
+
}, [storageMemo]);
|
|
186
|
+
const changeNavigationCollapsed = useCallback((value2) => {
|
|
192
187
|
storageMemo.navigationCollapsed = value2;
|
|
193
188
|
setNavigationCollapsed(value2);
|
|
194
|
-
},
|
|
195
|
-
const changeSeedPhrase =
|
|
189
|
+
}, [storageMemo]);
|
|
190
|
+
const changeSeedPhrase = useCallback((value2) => {
|
|
196
191
|
storageMemo.seedPhrase = value2;
|
|
197
192
|
setSeedPhrase(value2);
|
|
198
|
-
},
|
|
199
|
-
const changeMaxAccounts =
|
|
193
|
+
}, [storageMemo]);
|
|
194
|
+
const changeMaxAccounts = useCallback((value2) => {
|
|
200
195
|
storageMemo.maxAccounts = value2;
|
|
201
196
|
setMaxAccounts(value2);
|
|
202
|
-
},
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
197
|
+
}, [storageMemo]);
|
|
198
|
+
const contextValue = useMemo(() => ({
|
|
199
|
+
changeMaxAccounts,
|
|
200
|
+
changeNavigationCollapsed,
|
|
201
|
+
changeNavigationType,
|
|
202
|
+
changeSeedPhrase,
|
|
203
|
+
darkMode,
|
|
204
|
+
developerMode,
|
|
205
|
+
enableDarkMode,
|
|
206
|
+
enableDeveloperMode,
|
|
207
|
+
maxAccounts,
|
|
208
|
+
navigationCollapsed,
|
|
209
|
+
navigationType,
|
|
210
|
+
seedPhrase,
|
|
211
|
+
...value
|
|
212
|
+
}), [
|
|
213
|
+
changeMaxAccounts,
|
|
214
|
+
changeNavigationCollapsed,
|
|
215
|
+
changeNavigationType,
|
|
216
|
+
changeSeedPhrase,
|
|
217
|
+
darkMode,
|
|
218
|
+
developerMode,
|
|
219
|
+
enableDarkMode,
|
|
220
|
+
enableDeveloperMode,
|
|
221
|
+
maxAccounts,
|
|
222
|
+
navigationCollapsed,
|
|
223
|
+
navigationType,
|
|
224
|
+
seedPhrase,
|
|
225
|
+
value
|
|
226
|
+
]);
|
|
227
|
+
return /* @__PURE__ */ jsx(
|
|
228
|
+
AppSettingsContext,
|
|
229
|
+
{
|
|
230
|
+
value: contextValue,
|
|
231
|
+
...props,
|
|
232
|
+
children
|
|
233
|
+
}
|
|
234
|
+
);
|
|
235
|
+
};
|
|
222
236
|
|
|
223
237
|
// src/contexts/AppSettings/useAppSettings.ts
|
|
224
238
|
import { use } from "react";
|
|
225
|
-
var useAppSettings =
|
|
239
|
+
var useAppSettings = () => {
|
|
226
240
|
return use(AppSettingsContext);
|
|
227
|
-
}
|
|
241
|
+
};
|
|
228
242
|
|
|
229
243
|
// src/components/DarkModeIconButton.tsx
|
|
230
|
-
|
|
244
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
245
|
+
var DarkModeIconButton = (props) => {
|
|
231
246
|
const { darkMode, enableDarkMode } = useAppSettings();
|
|
232
|
-
const handleDarkModeChange =
|
|
247
|
+
const handleDarkModeChange = () => {
|
|
233
248
|
enableDarkMode?.(!darkMode);
|
|
234
|
-
}
|
|
235
|
-
return /* @__PURE__ */
|
|
236
|
-
|
|
237
|
-
...props
|
|
238
|
-
}, darkMode ? /* @__PURE__ */ React2.createElement(DarkModeRoundedIcon, null) : /* @__PURE__ */ React2.createElement(LightModeRoundedIcon, null));
|
|
239
|
-
}, "DarkModeIconButton");
|
|
249
|
+
};
|
|
250
|
+
return /* @__PURE__ */ jsx2(IconButton, { onClick: handleDarkModeChange, ...props, children: darkMode ? /* @__PURE__ */ jsx2(DarkModeRoundedIcon, {}) : /* @__PURE__ */ jsx2(LightModeRoundedIcon, {}) });
|
|
251
|
+
};
|
|
240
252
|
|
|
241
253
|
// src/components/Developer.tsx
|
|
242
|
-
var Developer =
|
|
254
|
+
var Developer = ({ children = null }) => {
|
|
243
255
|
const { developerMode } = useAppSettings();
|
|
244
256
|
return developerMode ? children : null;
|
|
245
|
-
}
|
|
257
|
+
};
|
|
246
258
|
export {
|
|
247
259
|
AppSettingSlug,
|
|
248
260
|
AppSettingsContext,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/DarkModeIconButton.tsx","../../src/contexts/AppSettings/Context.ts","../../src/contexts/AppSettings/Slug.ts","../../src/contexts/AppSettings/appSettingDefault.ts","../../src/contexts/AppSettings/Provider.tsx","../../src/contexts/AppSettings/StorageBase.ts","../../src/contexts/AppSettings/Storage.ts","../../src/contexts/AppSettings/useAppSettings.ts","../../src/components/Developer.tsx"],"sourcesContent":["import { DarkModeRounded as DarkModeRoundedIcon, LightModeRounded as LightModeRoundedIcon } from '@mui/icons-material'\nimport type { IconButtonProps } from '@mui/material'\nimport { IconButton } from '@mui/material'\nimport React from 'react'\n\nimport { useAppSettings } from '../contexts/index.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const DarkModeIconButton: React.FC<IconButtonProps> = (props) => {\n const { darkMode, enableDarkMode } = useAppSettings()\n\n const handleDarkModeChange = () => {\n enableDarkMode?.(!darkMode)\n }\n\n return (\n <IconButton onClick={handleDarkModeChange} {...props}>\n {darkMode\n ? <DarkModeRoundedIcon />\n : <LightModeRoundedIcon />}\n </IconButton>\n )\n}\n","import { createContext } from 'react'\n\nimport type { WebAppNavigationType } from '../../WebAppNavigationType.ts'\nimport { appSettingDefault } from './appSettingDefault.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport interface AppSettingsContextProps {\n changeMaxAccounts?: (value: number) => void\n changeNavigationCollapsed?: (value: boolean) => void\n changeNavigationType?: (value: WebAppNavigationType) => void\n changeSeedPhrase?: (value: string) => void\n darkMode?: boolean\n developerMode?: boolean\n enableDarkMode?: (value: boolean) => void\n enableDeveloperMode?: (value: boolean) => void\n maxAccounts?: number\n navigationCollapsed?: boolean\n navigationType?: WebAppNavigationType\n seedPhrase?: string\n}\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const AppSettingsContext = createContext<AppSettingsContextProps>(appSettingDefault())\n","import type { EnumValue } from '@xylabs/sdk-js'\nimport { Enum } from '@xylabs/sdk-js'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const AppSettingSlug = Enum({\n DarkMode: 'darkmode',\n Developer: 'developer',\n NavigationType: 'navigationType',\n NavigationCollapsed: 'navigationCollapsed',\n SeedPhrase: 'seedPhrase',\n MaxAccounts: 'maxAccounts',\n})\n\nexport type AppSettingSlug = EnumValue<typeof AppSettingSlug>\n","import { AppSettingSlug } from './Slug.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const appSettingDefault = (): Record<string, unknown> => {\n return {\n [AppSettingSlug.DarkMode]: false,\n [AppSettingSlug.Developer]: false,\n [AppSettingSlug.NavigationType]: 'menu',\n [AppSettingSlug.NavigationCollapsed]: false,\n [AppSettingSlug.SeedPhrase]: '',\n [AppSettingSlug.MaxAccounts]: 1,\n }\n}\n","import type { PropsWithChildren, ProviderProps } from 'react'\nimport React, { useMemo, useState } from 'react'\n\nimport type { WebAppNavigationType } from '../../WebAppNavigationType.ts'\nimport type { AppSettingsContextProps } from './Context.ts'\nimport { AppSettingsContext } from './Context.ts'\nimport { AppSettingsStorage } from './Storage.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport interface AppSettingsProviderProps<T extends AppSettingsContextProps = AppSettingsContextProps> extends ProviderProps<T> {\n storage?: AppSettingsStorage\n}\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const AppSettingsProvider: React.FC<PropsWithChildren<AppSettingsProviderProps>> = ({\n storage,\n value,\n children,\n ...props\n}) => {\n const storageMemo = useMemo(() => storage ?? new AppSettingsStorage(), [storage])\n const [developerMode, setDeveloperMode] = useState(storageMemo.developerMode)\n const [darkMode, setDarkMode] = useState(storageMemo.darkMode)\n const [navigationType, setNavigationType] = useState(storageMemo.navigationType)\n const [navigationCollapsed, setNavigationCollapsed] = useState(storageMemo.navigationCollapsed)\n const [seedPhrase, setSeedPhrase] = useState(storageMemo.seedPhrase)\n const [maxAccounts, setMaxAccounts] = useState(storageMemo.maxAccounts)\n\n const enableDeveloperMode = (value: boolean) => {\n storageMemo.developerMode = value\n setDeveloperMode(storageMemo.developerMode)\n }\n\n const enableDarkMode = (value: boolean) => {\n storageMemo.darkMode = value\n setDarkMode(storageMemo.darkMode)\n }\n\n const changeNavigationType = (value: WebAppNavigationType) => {\n storageMemo.navigationType = value\n setNavigationType(value)\n }\n\n const changeNavigationCollapsed = (value: boolean) => {\n storageMemo.navigationCollapsed = value\n setNavigationCollapsed(value)\n }\n\n const changeSeedPhrase = (value: string) => {\n storageMemo.seedPhrase = value\n setSeedPhrase(value)\n }\n\n const changeMaxAccounts = (value: number) => {\n storageMemo.maxAccounts = value\n setMaxAccounts(value)\n }\n\n return (\n <AppSettingsContext\n value={{\n changeMaxAccounts,\n changeNavigationCollapsed,\n changeNavigationType,\n changeSeedPhrase,\n darkMode,\n developerMode,\n enableDarkMode,\n enableDeveloperMode,\n maxAccounts,\n navigationCollapsed,\n navigationType,\n seedPhrase,\n\n ...value,\n }}\n {...props}\n >\n {children}\n </AppSettingsContext>\n )\n}\n","import { assertDefinedEx, assertEx } from '@xylabs/sdk-js'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport class AppSettingsStorageBase {\n private defaults: Record<string, unknown>\n private prefix: string\n constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n this.prefix = prefix\n this.defaults = defaults ?? {}\n }\n\n getBoolean(name: string): boolean {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertEx(typeof this.defaults[name] === 'boolean', () => 'Default value is not boolean')\n const defaultValue = this.defaults[name] as boolean\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue !== 'false'\n }\n\n getNumber(name: string): number {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertEx(typeof this.defaults[name] === 'number', () => 'Default value is not a number')\n const defaultValue = this.defaults[name] as number\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return Number.parseFloat(storedValue)\n }\n\n getObject<T>(name: string): T {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n const parsedStoredValue = storedValue ? JSON.parse(storedValue) : null\n if (!parsedStoredValue) {\n assertEx(typeof this.defaults[name] === 'object', () => 'Default value is not object')\n return assertEx(this.defaults[name] as T, () => `Missing Default for ${name}`)\n }\n return parsedStoredValue as T\n }\n\n getString(name: string) {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertDefinedEx(typeof this.defaults[name] === 'string', () => 'Default value is not string')\n const defaultValue = this.defaults[name] as string\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue\n }\n\n getStringArray(name: string) {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)?.split(',')\n if (!storedValue) {\n assertDefinedEx(Array.isArray(this.defaults[name]), () => 'Default value is not array')\n const defaultValue = this.defaults[name] as string[]\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue\n }\n\n setBoolean(name: string, value: boolean) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setNumber(name: string, value: number) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setObject<T>(name: string, value: T) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setString(name: string, value: string) {\n localStorage.setItem(`${this.prefix}|${name}`, value)\n }\n\n setStringArray(name: string, value: string[]) {\n localStorage.setItem(`${this.prefix}|${name}`, value.join(','))\n }\n}\n","import type { WebAppNavigationType } from '../../WebAppNavigationType.ts'\nimport { appSettingDefault } from './appSettingDefault.ts'\nimport { AppSettingSlug } from './Slug.ts'\nimport { AppSettingsStorageBase } from './StorageBase.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport class AppSettingsStorage extends AppSettingsStorageBase {\n constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n super(prefix, { ...appSettingDefault(), ...defaults })\n }\n\n get darkMode() {\n return this.getBoolean(AppSettingSlug.DarkMode)\n }\n\n set darkMode(value: boolean) {\n this.setBoolean(AppSettingSlug.DarkMode, value)\n }\n\n get developerMode() {\n return this.getBoolean(AppSettingSlug.Developer)\n }\n\n set developerMode(value: boolean) {\n this.setBoolean(AppSettingSlug.Developer, value)\n }\n\n get maxAccounts() {\n return this.getNumber(AppSettingSlug.MaxAccounts)\n }\n\n set maxAccounts(value: number) {\n this.setNumber(AppSettingSlug.MaxAccounts, value)\n }\n\n get navigationCollapsed() {\n return this.getBoolean(AppSettingSlug.NavigationCollapsed)\n }\n\n set navigationCollapsed(value: boolean) {\n this.setBoolean(AppSettingSlug.NavigationCollapsed, value)\n }\n\n get navigationType() {\n return this.getString(AppSettingSlug.NavigationType) as WebAppNavigationType\n }\n\n set navigationType(value: WebAppNavigationType) {\n this.setString(AppSettingSlug.NavigationType, value)\n }\n\n get seedPhrase() {\n return this.getString(AppSettingSlug.SeedPhrase)\n }\n\n set seedPhrase(value: string) {\n this.setString(AppSettingSlug.SeedPhrase, value)\n }\n}\n","import { use } from 'react'\n\nimport { AppSettingsContext } from './Context.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const useAppSettings = () => {\n return use(AppSettingsContext)\n}\n","import type { ReactElement } from 'react'\n\nimport { useAppSettings } from '../contexts/index.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const Developer: React.FC<{ children: ReactElement }> = ({ children = null }) => {\n const { developerMode } = useAppSettings()\n\n return developerMode ? children : null\n}\n"],"mappings":"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","names":["DarkModeRounded","DarkModeRoundedIcon","LightModeRounded","LightModeRoundedIcon","IconButton","React","createContext","Enum","AppSettingSlug","DarkMode","Developer","NavigationType","NavigationCollapsed","SeedPhrase","MaxAccounts","appSettingDefault","AppSettingSlug","DarkMode","Developer","NavigationType","NavigationCollapsed","SeedPhrase","MaxAccounts","AppSettingsContext","createContext","appSettingDefault","React","useMemo","useState","assertDefinedEx","assertEx","AppSettingsStorageBase","defaults","prefix","getBoolean","name","storedValue","localStorage","getItem","assertEx","defaultValue","undefined","getNumber","Number","parseFloat","getObject","parsedStoredValue","JSON","parse","getString","assertDefinedEx","getStringArray","split","Array","isArray","setBoolean","value","setItem","stringify","setNumber","setObject","setString","setStringArray","join","AppSettingsStorage","AppSettingsStorageBase","prefix","defaults","appSettingDefault","darkMode","getBoolean","AppSettingSlug","DarkMode","value","setBoolean","developerMode","Developer","maxAccounts","getNumber","MaxAccounts","setNumber","navigationCollapsed","NavigationCollapsed","navigationType","getString","NavigationType","setString","seedPhrase","SeedPhrase","AppSettingsProvider","storage","value","children","props","storageMemo","useMemo","AppSettingsStorage","developerMode","setDeveloperMode","useState","darkMode","setDarkMode","navigationType","setNavigationType","navigationCollapsed","setNavigationCollapsed","seedPhrase","setSeedPhrase","maxAccounts","setMaxAccounts","enableDeveloperMode","enableDarkMode","changeNavigationType","changeNavigationCollapsed","changeSeedPhrase","changeMaxAccounts","AppSettingsContext","use","useAppSettings","use","AppSettingsContext","DarkModeIconButton","props","darkMode","enableDarkMode","useAppSettings","handleDarkModeChange","React","IconButton","onClick","DarkModeRoundedIcon","LightModeRoundedIcon","Developer","children","developerMode","useAppSettings"]}
|
|
1
|
+
{"version":3,"sources":["../../src/components/DarkModeIconButton.tsx","../../src/contexts/AppSettings/Context.ts","../../src/contexts/AppSettings/Slug.ts","../../src/contexts/AppSettings/appSettingDefault.ts","../../src/contexts/AppSettings/Provider.tsx","../../src/contexts/AppSettings/StorageBase.ts","../../src/contexts/AppSettings/Storage.ts","../../src/contexts/AppSettings/useAppSettings.ts","../../src/components/Developer.tsx"],"sourcesContent":["import { DarkModeRounded as DarkModeRoundedIcon, LightModeRounded as LightModeRoundedIcon } from '@mui/icons-material'\nimport type { IconButtonProps } from '@mui/material'\nimport { IconButton } from '@mui/material'\nimport React from 'react'\n\nimport { useAppSettings } from '../contexts/index.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const DarkModeIconButton: React.FC<IconButtonProps> = (props) => {\n const { darkMode, enableDarkMode } = useAppSettings()\n\n const handleDarkModeChange = () => {\n enableDarkMode?.(!darkMode)\n }\n\n return (\n <IconButton onClick={handleDarkModeChange} {...props}>\n {darkMode\n ? <DarkModeRoundedIcon />\n : <LightModeRoundedIcon />}\n </IconButton>\n )\n}\n","import { createContext } from 'react'\n\nimport type { WebAppNavigationType } from '../../WebAppNavigationType.ts'\nimport { appSettingDefault } from './appSettingDefault.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport interface AppSettingsContextProps {\n changeMaxAccounts?: (value: number) => void\n changeNavigationCollapsed?: (value: boolean) => void\n changeNavigationType?: (value: WebAppNavigationType) => void\n changeSeedPhrase?: (value: string) => void\n darkMode?: boolean\n developerMode?: boolean\n enableDarkMode?: (value: boolean) => void\n enableDeveloperMode?: (value: boolean) => void\n maxAccounts?: number\n navigationCollapsed?: boolean\n navigationType?: WebAppNavigationType\n seedPhrase?: string\n}\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const AppSettingsContext = createContext<AppSettingsContextProps>(appSettingDefault())\n","import type { EnumValue } from '@xylabs/sdk-js'\nimport { Enum } from '@xylabs/sdk-js'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const AppSettingSlug = Enum({\n DarkMode: 'darkmode',\n Developer: 'developer',\n NavigationType: 'navigationType',\n NavigationCollapsed: 'navigationCollapsed',\n SeedPhrase: 'seedPhrase',\n MaxAccounts: 'maxAccounts',\n})\n\nexport type AppSettingSlug = EnumValue<typeof AppSettingSlug>\n","import { AppSettingSlug } from './Slug.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const appSettingDefault = (): Record<string, unknown> => {\n return {\n [AppSettingSlug.DarkMode]: false,\n [AppSettingSlug.Developer]: false,\n [AppSettingSlug.NavigationType]: 'menu',\n [AppSettingSlug.NavigationCollapsed]: false,\n [AppSettingSlug.SeedPhrase]: '',\n [AppSettingSlug.MaxAccounts]: 1,\n }\n}\n","import type { PropsWithChildren, ProviderProps } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport type { WebAppNavigationType } from '../../WebAppNavigationType.ts'\nimport type { AppSettingsContextProps } from './Context.ts'\nimport { AppSettingsContext } from './Context.ts'\nimport { AppSettingsStorage } from './Storage.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport interface AppSettingsProviderProps<T extends AppSettingsContextProps = AppSettingsContextProps> extends ProviderProps<T> {\n storage?: AppSettingsStorage\n}\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const AppSettingsProvider: React.FC<PropsWithChildren<AppSettingsProviderProps>> = ({\n storage,\n value,\n children,\n ...props\n}) => {\n const storageMemo = useMemo(() => storage ?? new AppSettingsStorage(), [storage])\n const [developerMode, setDeveloperMode] = useState(storageMemo.developerMode)\n const [darkMode, setDarkMode] = useState(storageMemo.darkMode)\n const [navigationType, setNavigationType] = useState(storageMemo.navigationType)\n const [navigationCollapsed, setNavigationCollapsed] = useState(storageMemo.navigationCollapsed)\n const [seedPhrase, setSeedPhrase] = useState(storageMemo.seedPhrase)\n const [maxAccounts, setMaxAccounts] = useState(storageMemo.maxAccounts)\n\n /* eslint-disable react-hooks/immutability -- storageMemo is an external storage object that must be mutated */\n const enableDeveloperMode = useCallback((value: boolean) => {\n storageMemo.developerMode = value\n setDeveloperMode(storageMemo.developerMode)\n }, [storageMemo])\n\n const enableDarkMode = useCallback((value: boolean) => {\n storageMemo.darkMode = value\n setDarkMode(storageMemo.darkMode)\n }, [storageMemo])\n\n const changeNavigationType = useCallback((value: WebAppNavigationType) => {\n storageMemo.navigationType = value\n setNavigationType(value)\n }, [storageMemo])\n\n const changeNavigationCollapsed = useCallback((value: boolean) => {\n storageMemo.navigationCollapsed = value\n setNavigationCollapsed(value)\n }, [storageMemo])\n\n const changeSeedPhrase = useCallback((value: string) => {\n storageMemo.seedPhrase = value\n setSeedPhrase(value)\n }, [storageMemo])\n\n const changeMaxAccounts = useCallback((value: number) => {\n storageMemo.maxAccounts = value\n setMaxAccounts(value)\n }, [storageMemo])\n /* eslint-enable react-hooks/immutability */\n\n const contextValue = useMemo(() => ({\n changeMaxAccounts,\n changeNavigationCollapsed,\n changeNavigationType,\n changeSeedPhrase,\n darkMode,\n developerMode,\n enableDarkMode,\n enableDeveloperMode,\n maxAccounts,\n navigationCollapsed,\n navigationType,\n seedPhrase,\n\n ...value,\n }), [\n changeMaxAccounts,\n changeNavigationCollapsed,\n changeNavigationType,\n changeSeedPhrase,\n darkMode,\n developerMode,\n enableDarkMode,\n enableDeveloperMode,\n maxAccounts,\n navigationCollapsed,\n navigationType,\n seedPhrase,\n value,\n ])\n\n return (\n <AppSettingsContext\n value={contextValue}\n {...props}\n >\n {children}\n </AppSettingsContext>\n )\n}\n","import { assertDefinedEx, assertEx } from '@xylabs/sdk-js'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport class AppSettingsStorageBase {\n private defaults: Record<string, unknown>\n private prefix: string\n constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n this.prefix = prefix\n this.defaults = defaults ?? {}\n }\n\n getBoolean(name: string): boolean {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertEx(typeof this.defaults[name] === 'boolean', () => 'Default value is not boolean')\n const defaultValue = this.defaults[name] as boolean\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue !== 'false'\n }\n\n getNumber(name: string): number {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertEx(typeof this.defaults[name] === 'number', () => 'Default value is not a number')\n const defaultValue = this.defaults[name] as number\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return Number.parseFloat(storedValue)\n }\n\n getObject<T>(name: string): T {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n const parsedStoredValue = storedValue ? JSON.parse(storedValue) : null\n if (!parsedStoredValue) {\n assertEx(typeof this.defaults[name] === 'object', () => 'Default value is not object')\n return assertEx(this.defaults[name] as T, () => `Missing Default for ${name}`)\n }\n return parsedStoredValue as T\n }\n\n getString(name: string) {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)\n if (!storedValue) {\n assertDefinedEx(typeof this.defaults[name] === 'string', () => 'Default value is not string')\n const defaultValue = this.defaults[name] as string\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue\n }\n\n getStringArray(name: string) {\n const storedValue = localStorage.getItem(`${this.prefix}|${name}`)?.split(',')\n if (!storedValue) {\n assertDefinedEx(Array.isArray(this.defaults[name]), () => 'Default value is not array')\n const defaultValue = this.defaults[name] as string[]\n assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)\n return defaultValue\n }\n return storedValue\n }\n\n setBoolean(name: string, value: boolean) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setNumber(name: string, value: number) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setObject<T>(name: string, value: T) {\n localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))\n }\n\n setString(name: string, value: string) {\n localStorage.setItem(`${this.prefix}|${name}`, value)\n }\n\n setStringArray(name: string, value: string[]) {\n localStorage.setItem(`${this.prefix}|${name}`, value.join(','))\n }\n}\n","import type { WebAppNavigationType } from '../../WebAppNavigationType.ts'\nimport { appSettingDefault } from './appSettingDefault.ts'\nimport { AppSettingSlug } from './Slug.ts'\nimport { AppSettingsStorageBase } from './StorageBase.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport class AppSettingsStorage extends AppSettingsStorageBase {\n constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {\n super(prefix, { ...appSettingDefault(), ...defaults })\n }\n\n get darkMode() {\n return this.getBoolean(AppSettingSlug.DarkMode)\n }\n\n set darkMode(value: boolean) {\n this.setBoolean(AppSettingSlug.DarkMode, value)\n }\n\n get developerMode() {\n return this.getBoolean(AppSettingSlug.Developer)\n }\n\n set developerMode(value: boolean) {\n this.setBoolean(AppSettingSlug.Developer, value)\n }\n\n get maxAccounts() {\n return this.getNumber(AppSettingSlug.MaxAccounts)\n }\n\n set maxAccounts(value: number) {\n this.setNumber(AppSettingSlug.MaxAccounts, value)\n }\n\n get navigationCollapsed() {\n return this.getBoolean(AppSettingSlug.NavigationCollapsed)\n }\n\n set navigationCollapsed(value: boolean) {\n this.setBoolean(AppSettingSlug.NavigationCollapsed, value)\n }\n\n get navigationType() {\n return this.getString(AppSettingSlug.NavigationType) as WebAppNavigationType\n }\n\n set navigationType(value: WebAppNavigationType) {\n this.setString(AppSettingSlug.NavigationType, value)\n }\n\n get seedPhrase() {\n return this.getString(AppSettingSlug.SeedPhrase)\n }\n\n set seedPhrase(value: string) {\n this.setString(AppSettingSlug.SeedPhrase, value)\n }\n}\n","import { use } from 'react'\n\nimport { AppSettingsContext } from './Context.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const useAppSettings = () => {\n return use(AppSettingsContext)\n}\n","import type { ReactElement } from 'react'\n\nimport { useAppSettings } from '../contexts/index.ts'\n\n/** @deprecated import from @xylabs/react-app-settings instead */\nexport const Developer: React.FC<{ children: ReactElement }> = ({ children = null }) => {\n const { developerMode } = useAppSettings()\n\n return developerMode ? children : null\n}\n"],"mappings":"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","names":["value","jsx"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/react-app-settings",
|
|
3
|
-
"version": "7.5.
|
|
3
|
+
"version": "7.5.12",
|
|
4
4
|
"description": "Common React library for all XYO projects that use React",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"xyo",
|
|
@@ -36,33 +36,58 @@
|
|
|
36
36
|
},
|
|
37
37
|
"./package.json": "./package.json"
|
|
38
38
|
},
|
|
39
|
-
"module": "dist/browser/index.mjs",
|
|
40
|
-
"types": "dist/browser/index.d.ts",
|
|
41
39
|
"files": [
|
|
42
40
|
"dist",
|
|
43
|
-
"
|
|
41
|
+
"README.md"
|
|
44
42
|
],
|
|
45
|
-
"dependencies": {
|
|
46
|
-
"@xylabs/sdk-js": "~5.0.90"
|
|
47
|
-
},
|
|
48
43
|
"devDependencies": {
|
|
49
|
-
"@mui/icons-material": "
|
|
50
|
-
"@mui/material": "
|
|
44
|
+
"@mui/icons-material": "^7.3.10",
|
|
45
|
+
"@mui/material": "^7.3.10",
|
|
46
|
+
"@opentelemetry/api": "^1.9.1",
|
|
47
|
+
"@opentelemetry/sdk-trace-base": "^2.7.0",
|
|
48
|
+
"@types/node": "~25.6.0",
|
|
51
49
|
"@types/react": "^19.2.14",
|
|
52
|
-
"@xylabs/
|
|
53
|
-
"@xylabs/
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
50
|
+
"@xylabs/sdk-js": "^5.0.100",
|
|
51
|
+
"@xylabs/toolchain": "~7.11.9",
|
|
52
|
+
"@xylabs/tsconfig": "^7.11.9",
|
|
53
|
+
"@xylabs/tsconfig-dom": "^7.11.9",
|
|
54
|
+
"@xylabs/tsconfig-react": "~7.11.9",
|
|
55
|
+
"async-mutex": "^0.5.0",
|
|
56
|
+
"axios": "^1.15.2",
|
|
57
|
+
"bn.js": "^5.2.3",
|
|
58
|
+
"buffer": "^6.0.3",
|
|
59
|
+
"chalk": "^5.6.2",
|
|
60
|
+
"esbuild": "~0.28.0",
|
|
61
|
+
"eslint": "^10.2.1",
|
|
62
|
+
"ethers": "^6.16.0",
|
|
63
|
+
"pako": "^2.1.0",
|
|
64
|
+
"react": "^19.2.5",
|
|
65
|
+
"react-dom": "^19.2.5",
|
|
66
|
+
"typescript": "^5.9.3",
|
|
67
|
+
"zod": "^4.3.6"
|
|
57
68
|
},
|
|
58
69
|
"peerDependencies": {
|
|
59
|
-
"@mui/icons-material": "
|
|
60
|
-
"@mui/material": "
|
|
61
|
-
"
|
|
62
|
-
"
|
|
70
|
+
"@mui/icons-material": "^7.3.10",
|
|
71
|
+
"@mui/material": "^7.3.10",
|
|
72
|
+
"@opentelemetry/api": "^1.9.1",
|
|
73
|
+
"@opentelemetry/sdk-trace-base": "^2.7.0",
|
|
74
|
+
"@types/react": "^19.2.14",
|
|
75
|
+
"@xylabs/sdk-js": "^5.0.100",
|
|
76
|
+
"@xylabs/tsconfig": "^7.11.9",
|
|
77
|
+
"@xylabs/tsconfig-dom": "^7.11.9",
|
|
78
|
+
"async-mutex": "^0.5.0",
|
|
79
|
+
"axios": "^1.15.2",
|
|
80
|
+
"bn.js": "^5.2.3",
|
|
81
|
+
"buffer": "^6.0.3",
|
|
82
|
+
"chalk": "^5.6.2",
|
|
83
|
+
"ethers": "^6.16.0",
|
|
84
|
+
"pako": "^2.1.0",
|
|
85
|
+
"react": "^19.2.5",
|
|
86
|
+
"react-dom": "^19.2.5",
|
|
87
|
+
"zod": "^4.3.6"
|
|
63
88
|
},
|
|
64
89
|
"publishConfig": {
|
|
65
90
|
"access": "public"
|
|
66
91
|
},
|
|
67
92
|
"docs": "dist/docs.json"
|
|
68
|
-
}
|
|
93
|
+
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { DarkModeRounded as DarkModeRoundedIcon, LightModeRounded as LightModeRoundedIcon } from '@mui/icons-material'
|
|
2
|
-
import type { IconButtonProps } from '@mui/material'
|
|
3
|
-
import { IconButton } from '@mui/material'
|
|
4
|
-
import React from 'react'
|
|
5
|
-
|
|
6
|
-
import { useAppSettings } from '../contexts/index.ts'
|
|
7
|
-
|
|
8
|
-
/** @deprecated import from @xylabs/react-app-settings instead */
|
|
9
|
-
export const DarkModeIconButton: React.FC<IconButtonProps> = (props) => {
|
|
10
|
-
const { darkMode, enableDarkMode } = useAppSettings()
|
|
11
|
-
|
|
12
|
-
const handleDarkModeChange = () => {
|
|
13
|
-
enableDarkMode?.(!darkMode)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
return (
|
|
17
|
-
<IconButton onClick={handleDarkModeChange} {...props}>
|
|
18
|
-
{darkMode
|
|
19
|
-
? <DarkModeRoundedIcon />
|
|
20
|
-
: <LightModeRoundedIcon />}
|
|
21
|
-
</IconButton>
|
|
22
|
-
)
|
|
23
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { ReactElement } from 'react'
|
|
2
|
-
|
|
3
|
-
import { useAppSettings } from '../contexts/index.ts'
|
|
4
|
-
|
|
5
|
-
/** @deprecated import from @xylabs/react-app-settings instead */
|
|
6
|
-
export const Developer: React.FC<{ children: ReactElement }> = ({ children = null }) => {
|
|
7
|
-
const { developerMode } = useAppSettings()
|
|
8
|
-
|
|
9
|
-
return developerMode ? children : null
|
|
10
|
-
}
|
package/src/components/index.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { createContext } from 'react'
|
|
2
|
-
|
|
3
|
-
import type { WebAppNavigationType } from '../../WebAppNavigationType.ts'
|
|
4
|
-
import { appSettingDefault } from './appSettingDefault.ts'
|
|
5
|
-
|
|
6
|
-
/** @deprecated import from @xylabs/react-app-settings instead */
|
|
7
|
-
export interface AppSettingsContextProps {
|
|
8
|
-
changeMaxAccounts?: (value: number) => void
|
|
9
|
-
changeNavigationCollapsed?: (value: boolean) => void
|
|
10
|
-
changeNavigationType?: (value: WebAppNavigationType) => void
|
|
11
|
-
changeSeedPhrase?: (value: string) => void
|
|
12
|
-
darkMode?: boolean
|
|
13
|
-
developerMode?: boolean
|
|
14
|
-
enableDarkMode?: (value: boolean) => void
|
|
15
|
-
enableDeveloperMode?: (value: boolean) => void
|
|
16
|
-
maxAccounts?: number
|
|
17
|
-
navigationCollapsed?: boolean
|
|
18
|
-
navigationType?: WebAppNavigationType
|
|
19
|
-
seedPhrase?: string
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/** @deprecated import from @xylabs/react-app-settings instead */
|
|
23
|
-
export const AppSettingsContext = createContext<AppSettingsContextProps>(appSettingDefault())
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import type { PropsWithChildren, ProviderProps } from 'react'
|
|
2
|
-
import React, { useMemo, useState } from 'react'
|
|
3
|
-
|
|
4
|
-
import type { WebAppNavigationType } from '../../WebAppNavigationType.ts'
|
|
5
|
-
import type { AppSettingsContextProps } from './Context.ts'
|
|
6
|
-
import { AppSettingsContext } from './Context.ts'
|
|
7
|
-
import { AppSettingsStorage } from './Storage.ts'
|
|
8
|
-
|
|
9
|
-
/** @deprecated import from @xylabs/react-app-settings instead */
|
|
10
|
-
export interface AppSettingsProviderProps<T extends AppSettingsContextProps = AppSettingsContextProps> extends ProviderProps<T> {
|
|
11
|
-
storage?: AppSettingsStorage
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/** @deprecated import from @xylabs/react-app-settings instead */
|
|
15
|
-
export const AppSettingsProvider: React.FC<PropsWithChildren<AppSettingsProviderProps>> = ({
|
|
16
|
-
storage,
|
|
17
|
-
value,
|
|
18
|
-
children,
|
|
19
|
-
...props
|
|
20
|
-
}) => {
|
|
21
|
-
const storageMemo = useMemo(() => storage ?? new AppSettingsStorage(), [storage])
|
|
22
|
-
const [developerMode, setDeveloperMode] = useState(storageMemo.developerMode)
|
|
23
|
-
const [darkMode, setDarkMode] = useState(storageMemo.darkMode)
|
|
24
|
-
const [navigationType, setNavigationType] = useState(storageMemo.navigationType)
|
|
25
|
-
const [navigationCollapsed, setNavigationCollapsed] = useState(storageMemo.navigationCollapsed)
|
|
26
|
-
const [seedPhrase, setSeedPhrase] = useState(storageMemo.seedPhrase)
|
|
27
|
-
const [maxAccounts, setMaxAccounts] = useState(storageMemo.maxAccounts)
|
|
28
|
-
|
|
29
|
-
const enableDeveloperMode = (value: boolean) => {
|
|
30
|
-
storageMemo.developerMode = value
|
|
31
|
-
setDeveloperMode(storageMemo.developerMode)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const enableDarkMode = (value: boolean) => {
|
|
35
|
-
storageMemo.darkMode = value
|
|
36
|
-
setDarkMode(storageMemo.darkMode)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const changeNavigationType = (value: WebAppNavigationType) => {
|
|
40
|
-
storageMemo.navigationType = value
|
|
41
|
-
setNavigationType(value)
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const changeNavigationCollapsed = (value: boolean) => {
|
|
45
|
-
storageMemo.navigationCollapsed = value
|
|
46
|
-
setNavigationCollapsed(value)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
const changeSeedPhrase = (value: string) => {
|
|
50
|
-
storageMemo.seedPhrase = value
|
|
51
|
-
setSeedPhrase(value)
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const changeMaxAccounts = (value: number) => {
|
|
55
|
-
storageMemo.maxAccounts = value
|
|
56
|
-
setMaxAccounts(value)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
return (
|
|
60
|
-
<AppSettingsContext
|
|
61
|
-
value={{
|
|
62
|
-
changeMaxAccounts,
|
|
63
|
-
changeNavigationCollapsed,
|
|
64
|
-
changeNavigationType,
|
|
65
|
-
changeSeedPhrase,
|
|
66
|
-
darkMode,
|
|
67
|
-
developerMode,
|
|
68
|
-
enableDarkMode,
|
|
69
|
-
enableDeveloperMode,
|
|
70
|
-
maxAccounts,
|
|
71
|
-
navigationCollapsed,
|
|
72
|
-
navigationType,
|
|
73
|
-
seedPhrase,
|
|
74
|
-
|
|
75
|
-
...value,
|
|
76
|
-
}}
|
|
77
|
-
{...props}
|
|
78
|
-
>
|
|
79
|
-
{children}
|
|
80
|
-
</AppSettingsContext>
|
|
81
|
-
)
|
|
82
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { EnumValue } from '@xylabs/sdk-js'
|
|
2
|
-
import { Enum } from '@xylabs/sdk-js'
|
|
3
|
-
|
|
4
|
-
/** @deprecated import from @xylabs/react-app-settings instead */
|
|
5
|
-
export const AppSettingSlug = Enum({
|
|
6
|
-
DarkMode: 'darkmode',
|
|
7
|
-
Developer: 'developer',
|
|
8
|
-
NavigationType: 'navigationType',
|
|
9
|
-
NavigationCollapsed: 'navigationCollapsed',
|
|
10
|
-
SeedPhrase: 'seedPhrase',
|
|
11
|
-
MaxAccounts: 'maxAccounts',
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
export type AppSettingSlug = EnumValue<typeof AppSettingSlug>
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import type { WebAppNavigationType } from '../../WebAppNavigationType.ts'
|
|
2
|
-
import { appSettingDefault } from './appSettingDefault.ts'
|
|
3
|
-
import { AppSettingSlug } from './Slug.ts'
|
|
4
|
-
import { AppSettingsStorageBase } from './StorageBase.ts'
|
|
5
|
-
|
|
6
|
-
/** @deprecated import from @xylabs/react-app-settings instead */
|
|
7
|
-
export class AppSettingsStorage extends AppSettingsStorageBase {
|
|
8
|
-
constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {
|
|
9
|
-
super(prefix, { ...appSettingDefault(), ...defaults })
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
get darkMode() {
|
|
13
|
-
return this.getBoolean(AppSettingSlug.DarkMode)
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
set darkMode(value: boolean) {
|
|
17
|
-
this.setBoolean(AppSettingSlug.DarkMode, value)
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
get developerMode() {
|
|
21
|
-
return this.getBoolean(AppSettingSlug.Developer)
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
set developerMode(value: boolean) {
|
|
25
|
-
this.setBoolean(AppSettingSlug.Developer, value)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
get maxAccounts() {
|
|
29
|
-
return this.getNumber(AppSettingSlug.MaxAccounts)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
set maxAccounts(value: number) {
|
|
33
|
-
this.setNumber(AppSettingSlug.MaxAccounts, value)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
get navigationCollapsed() {
|
|
37
|
-
return this.getBoolean(AppSettingSlug.NavigationCollapsed)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
set navigationCollapsed(value: boolean) {
|
|
41
|
-
this.setBoolean(AppSettingSlug.NavigationCollapsed, value)
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
get navigationType() {
|
|
45
|
-
return this.getString(AppSettingSlug.NavigationType) as WebAppNavigationType
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
set navigationType(value: WebAppNavigationType) {
|
|
49
|
-
this.setString(AppSettingSlug.NavigationType, value)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
get seedPhrase() {
|
|
53
|
-
return this.getString(AppSettingSlug.SeedPhrase)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
set seedPhrase(value: string) {
|
|
57
|
-
this.setString(AppSettingSlug.SeedPhrase, value)
|
|
58
|
-
}
|
|
59
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { assertDefinedEx, assertEx } from '@xylabs/sdk-js'
|
|
2
|
-
|
|
3
|
-
/** @deprecated import from @xylabs/react-app-settings instead */
|
|
4
|
-
export class AppSettingsStorageBase {
|
|
5
|
-
private defaults: Record<string, unknown>
|
|
6
|
-
private prefix: string
|
|
7
|
-
constructor(prefix = 'AppSettings', defaults?: Record<string, unknown>) {
|
|
8
|
-
this.prefix = prefix
|
|
9
|
-
this.defaults = defaults ?? {}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
getBoolean(name: string): boolean {
|
|
13
|
-
const storedValue = localStorage.getItem(`${this.prefix}|${name}`)
|
|
14
|
-
if (!storedValue) {
|
|
15
|
-
assertEx(typeof this.defaults[name] === 'boolean', () => 'Default value is not boolean')
|
|
16
|
-
const defaultValue = this.defaults[name] as boolean
|
|
17
|
-
assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)
|
|
18
|
-
return defaultValue
|
|
19
|
-
}
|
|
20
|
-
return storedValue !== 'false'
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
getNumber(name: string): number {
|
|
24
|
-
const storedValue = localStorage.getItem(`${this.prefix}|${name}`)
|
|
25
|
-
if (!storedValue) {
|
|
26
|
-
assertEx(typeof this.defaults[name] === 'number', () => 'Default value is not a number')
|
|
27
|
-
const defaultValue = this.defaults[name] as number
|
|
28
|
-
assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)
|
|
29
|
-
return defaultValue
|
|
30
|
-
}
|
|
31
|
-
return Number.parseFloat(storedValue)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
getObject<T>(name: string): T {
|
|
35
|
-
const storedValue = localStorage.getItem(`${this.prefix}|${name}`)
|
|
36
|
-
const parsedStoredValue = storedValue ? JSON.parse(storedValue) : null
|
|
37
|
-
if (!parsedStoredValue) {
|
|
38
|
-
assertEx(typeof this.defaults[name] === 'object', () => 'Default value is not object')
|
|
39
|
-
return assertEx(this.defaults[name] as T, () => `Missing Default for ${name}`)
|
|
40
|
-
}
|
|
41
|
-
return parsedStoredValue as T
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
getString(name: string) {
|
|
45
|
-
const storedValue = localStorage.getItem(`${this.prefix}|${name}`)
|
|
46
|
-
if (!storedValue) {
|
|
47
|
-
assertDefinedEx(typeof this.defaults[name] === 'string', () => 'Default value is not string')
|
|
48
|
-
const defaultValue = this.defaults[name] as string
|
|
49
|
-
assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)
|
|
50
|
-
return defaultValue
|
|
51
|
-
}
|
|
52
|
-
return storedValue
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
getStringArray(name: string) {
|
|
56
|
-
const storedValue = localStorage.getItem(`${this.prefix}|${name}`)?.split(',')
|
|
57
|
-
if (!storedValue) {
|
|
58
|
-
assertDefinedEx(Array.isArray(this.defaults[name]), () => 'Default value is not array')
|
|
59
|
-
const defaultValue = this.defaults[name] as string[]
|
|
60
|
-
assertEx(defaultValue !== undefined, () => `Missing Default for ${name}`)
|
|
61
|
-
return defaultValue
|
|
62
|
-
}
|
|
63
|
-
return storedValue
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
setBoolean(name: string, value: boolean) {
|
|
67
|
-
localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
setNumber(name: string, value: number) {
|
|
71
|
-
localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
setObject<T>(name: string, value: T) {
|
|
75
|
-
localStorage.setItem(`${this.prefix}|${name}`, JSON.stringify(value))
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
setString(name: string, value: string) {
|
|
79
|
-
localStorage.setItem(`${this.prefix}|${name}`, value)
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
setStringArray(name: string, value: string[]) {
|
|
83
|
-
localStorage.setItem(`${this.prefix}|${name}`, value.join(','))
|
|
84
|
-
}
|
|
85
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { AppSettingSlug } from './Slug.ts'
|
|
2
|
-
|
|
3
|
-
/** @deprecated import from @xylabs/react-app-settings instead */
|
|
4
|
-
export const appSettingDefault = (): Record<string, unknown> => {
|
|
5
|
-
return {
|
|
6
|
-
[AppSettingSlug.DarkMode]: false,
|
|
7
|
-
[AppSettingSlug.Developer]: false,
|
|
8
|
-
[AppSettingSlug.NavigationType]: 'menu',
|
|
9
|
-
[AppSettingSlug.NavigationCollapsed]: false,
|
|
10
|
-
[AppSettingSlug.SeedPhrase]: '',
|
|
11
|
-
[AppSettingSlug.MaxAccounts]: 1,
|
|
12
|
-
}
|
|
13
|
-
}
|
package/src/contexts/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './AppSettings/index.ts'
|
package/src/index.ts
DELETED