From 17ddb87abbd3555b306c63b6138757a85a971b4c Mon Sep 17 00:00:00 2001 From: Miodec Date: Mon, 26 Jun 2023 14:13:21 +0200 Subject: [PATCH] updated mode2 type --- frontend/src/ts/db.ts | 8 ++++---- frontend/src/ts/pages/account.ts | 20 +++++++++++++++----- frontend/src/ts/test/test-logic.ts | 1 + frontend/src/ts/types/types.d.ts | 18 +++++++++--------- frontend/src/ts/utils/misc.ts | 20 ++++++++++++-------- 5 files changed, 41 insertions(+), 26 deletions(-) diff --git a/frontend/src/ts/db.ts b/frontend/src/ts/db.ts index d3ef74051..dc3cf0e29 100644 --- a/frontend/src/ts/db.ts +++ b/frontend/src/ts/db.ts @@ -618,7 +618,7 @@ export async function saveLocalPB( }; dbSnapshot.personalBests[mode][mode2] ??= - [] as unknown as MonkeyTypes.PersonalBests[M][keyof MonkeyTypes.PersonalBests[M]]; + [] as unknown as MonkeyTypes.PersonalBests[M][MonkeyTypes.Mode2]; ( dbSnapshot.personalBests[mode][ @@ -697,7 +697,7 @@ export async function getLocalTagPB( }; filteredtag.personalBests[mode][mode2] ??= - [] as unknown as MonkeyTypes.PersonalBests[M][keyof MonkeyTypes.PersonalBests[M]]; + [] as unknown as MonkeyTypes.PersonalBests[M][MonkeyTypes.Mode2]; const personalBests = (filteredtag.personalBests[mode][mode2] ?? []) as MonkeyTypes.PersonalBest[]; @@ -753,7 +753,7 @@ export async function saveLocalTagPB( }; filteredtag.personalBests[mode][mode2] ??= - [] as unknown as MonkeyTypes.PersonalBests[M][keyof MonkeyTypes.PersonalBests[M]]; + [] as unknown as MonkeyTypes.PersonalBests[M][MonkeyTypes.Mode2]; try { let found = false; @@ -818,7 +818,7 @@ export async function saveLocalTagPB( timestamp: Date.now(), consistency: consistency, }, - ] as unknown as MonkeyTypes.PersonalBests[M][keyof MonkeyTypes.PersonalBests[M]]; + ] as unknown as MonkeyTypes.PersonalBests[M][MonkeyTypes.Mode2]; } } diff --git a/frontend/src/ts/pages/account.ts b/frontend/src/ts/pages/account.ts index b5d75d169..a65a1847e 100644 --- a/frontend/src/ts/pages/account.ts +++ b/frontend/src/ts/pages/account.ts @@ -308,15 +308,20 @@ async function fillContent(): Promise { } if (result.mode === "time") { - let timefilter: MonkeyTypes.Mode2Custom<"time"> = "custom"; + let timefilter: MonkeyTypes.Mode2<"time"> | "custom" = "custom"; if ( ["15", "30", "60", "120"].includes( `${result.mode2}` //legacy results could have a number in mode2 ) ) { - timefilter = `${result.mode2}`; + timefilter = `${result.mode2}` as `${number}`; } - if (!ResultFilters.getFilter("time", timefilter)) { + if ( + !ResultFilters.getFilter( + "time", + timefilter as "custom" | "15" | "30" | "60" | "120" + ) + ) { if (filterDebug) { console.log(`skipping result due to time filter`, result); } @@ -329,9 +334,14 @@ async function fillContent(): Promise { `${result.mode2}` //legacy results could have a number in mode2 ) ) { - wordfilter = `${result.mode2}`; + wordfilter = `${result.mode2}` as `${number}`; } - if (!ResultFilters.getFilter("words", wordfilter)) { + if ( + !ResultFilters.getFilter( + "words", + wordfilter as "custom" | "10" | "25" | "50" | "100" + ) + ) { if (filterDebug) { console.log(`skipping result due to word filter`, result); } diff --git a/frontend/src/ts/test/test-logic.ts b/frontend/src/ts/test/test-logic.ts index 92b3f72f5..fe7b931d6 100644 --- a/frontend/src/ts/test/test-logic.ts +++ b/frontend/src/ts/test/test-logic.ts @@ -1321,6 +1321,7 @@ async function saveResult( if (response?.data?.isPb) { //new pb if ( + //@ts-expect-error TODO fix this DB.getSnapshot()?.personalBests?.[Config.mode]?.[completedEvent.mode2] ) { Result.showConfetti(); diff --git a/frontend/src/ts/types/types.d.ts b/frontend/src/ts/types/types.d.ts index d33aae359..1dd8a1419 100644 --- a/frontend/src/ts/types/types.d.ts +++ b/frontend/src/ts/types/types.d.ts @@ -16,7 +16,7 @@ declare namespace MonkeyTypes { type Mode = keyof PersonalBests; - type Mode2 = keyof PersonalBests[M]; + type Mode2 = M extends M ? keyof PersonalBests[M] : never; type StringNumber = `${number}`; @@ -624,17 +624,17 @@ declare namespace MonkeyTypes { custom: boolean; }; words: { - 10: boolean; - 25: boolean; - 50: boolean; - 100: boolean; + "10": boolean; + "25": boolean; + "50": boolean; + "100": boolean; custom: boolean; }; time: { - 15: boolean; - 30: boolean; - 60: boolean; - 120: boolean; + "15": boolean; + "30": boolean; + "60": boolean; + "120": boolean; custom: boolean; }; quoteLength: { diff --git a/frontend/src/ts/utils/misc.ts b/frontend/src/ts/utils/misc.ts index bdee082dd..8c495f746 100644 --- a/frontend/src/ts/utils/misc.ts +++ b/frontend/src/ts/utils/misc.ts @@ -1159,24 +1159,28 @@ export async function swapElements( return; } -export function getMode2( +export function getMode2( config: MonkeyTypes.Config, randomQuote: MonkeyTypes.Quote -): string { +): MonkeyTypes.Mode2 { const mode = config.mode; + let retVal: string; + if (mode === "time") { - return config.time.toString(); + retVal = config.time.toString(); } else if (mode === "words") { - return config.words.toString(); + retVal = config.words.toString(); } else if (mode === "custom") { - return "custom"; + retVal = "custom"; } else if (mode === "zen") { - return "zen"; + retVal = "zen"; } else if (mode === "quote") { - return randomQuote.id.toString(); + retVal = randomQuote.id.toString(); + } else { + throw new Error("Invalid mode"); } - return ""; + return retVal as MonkeyTypes.Mode2; } export async function downloadResultsCSV(