parse settings before setting

This commit is contained in:
Viktor Rådberg
2024-03-29 23:18:10 +01:00
parent 318520ea53
commit eb99cff736
2 changed files with 19 additions and 6 deletions

View File

@@ -7,8 +7,10 @@ import {
import { useAnalytics } from '../Hooks/useAnalytics'; import { useAnalytics } from '../Hooks/useAnalytics';
import { import {
InitialGameSettings, InitialGameSettings,
InitialGameSettingsSchema, initialGameSettingsSchema,
PreStartMode,
Settings, Settings,
settingsSchema,
} from '../Types/Settings'; } from '../Types/Settings';
export const GlobalSettingsProvider = ({ export const GlobalSettingsProvider = ({
@@ -51,15 +53,18 @@ export const GlobalSettingsProvider = ({
savedGameSettings ? JSON.parse(savedGameSettings) : null savedGameSettings ? JSON.parse(savedGameSettings) : null
); );
const parsedSettings = settingsSchema.safeParse(
JSON.parse(savedSettings ?? '')
);
const [settings, setSettings] = useState<Settings>( const [settings, setSettings] = useState<Settings>(
savedSettings parsedSettings.success
? JSON.parse(savedSettings) ? parsedSettings.data
: { : {
goFullscreenOnStart: true, goFullscreenOnStart: true,
keepAwake: true, keepAwake: true,
showStartingPlayer: true, showStartingPlayer: true,
showPlayerMenuCog: true, showPlayerMenuCog: true,
useRandomStartingPlayerInterval: false, preStartMode: PreStartMode.None,
} }
); );
@@ -89,7 +94,7 @@ export const GlobalSettingsProvider = ({
//parse existing game settings with zod schema //parse existing game settings with zod schema
const parsedInitialGameSettings = const parsedInitialGameSettings =
InitialGameSettingsSchema.safeParse(initialGameSettings); initialGameSettingsSchema.safeParse(initialGameSettings);
if (!parsedInitialGameSettings.success) { if (!parsedInitialGameSettings.success) {
removeLocalStorage(); removeLocalStorage();

View File

@@ -34,10 +34,18 @@ export type InitialGameSettings = {
orientation: Orientation; orientation: Orientation;
}; };
export const InitialGameSettingsSchema = z.object({ export const initialGameSettingsSchema = z.object({
startingLifeTotal: z.number().min(1).max(200).default(20), startingLifeTotal: z.number().min(1).max(200).default(20),
useCommanderDamage: z.boolean().default(false), useCommanderDamage: z.boolean().default(false),
gameFormat: z.nativeEnum(GameFormat).optional(), gameFormat: z.nativeEnum(GameFormat).optional(),
numberOfPlayers: z.number().min(1).max(6).default(2), numberOfPlayers: z.number().min(1).max(6).default(2),
orientation: z.nativeEnum(Orientation).default(Orientation.Landscape), orientation: z.nativeEnum(Orientation).default(Orientation.Landscape),
}); });
export const settingsSchema = z.object({
keepAwake: z.boolean().default(true),
showStartingPlayer: z.boolean().default(true),
showPlayerMenuCog: z.boolean().default(true),
goFullscreenOnStart: z.boolean().default(true),
preStartMode: z.nativeEnum(PreStartMode).default(PreStartMode.None),
});