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

View File

@@ -34,10 +34,18 @@ export type InitialGameSettings = {
orientation: Orientation;
};
export const InitialGameSettingsSchema = z.object({
export const initialGameSettingsSchema = z.object({
startingLifeTotal: z.number().min(1).max(200).default(20),
useCommanderDamage: z.boolean().default(false),
gameFormat: z.nativeEnum(GameFormat).optional(),
numberOfPlayers: z.number().min(1).max(6).default(2),
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),
});