Skip to content

Commit 99d754a

Browse files
committed
Add a lot of stuff
1 parent b02b585 commit 99d754a

47 files changed

Lines changed: 559 additions & 440 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

ui/src/App.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import AppRouter from "./routes/AppRouter";
3-
import AuthProvider from "./auth/AuthProvider";
3+
import AuthProvider from "./core/auth/AuthProvider";
44
import ColorThemeProvider from "./core/context/ColorThemeProvider";
55
import {SnackbarProvider} from "notistack";
66

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import React, {useEffect, useState} from "react";
2+
3+
export default function useLocalState<T>(key:string, defaultValue: T): [T, React.Dispatch<React.SetStateAction<T>>, () => void] {
4+
const initialize = (): T => {
5+
const valueRaw = localStorage.getItem(key)
6+
if (!valueRaw) {
7+
return defaultValue
8+
}
9+
10+
try {
11+
return JSON.parse(valueRaw) as T;
12+
} catch (e) {
13+
localStorage.removeItem(key)
14+
return defaultValue
15+
}
16+
};
17+
18+
const [value, setValue] = useState(initialize)
19+
useEffect(() => {
20+
localStorage.setItem(key, JSON.stringify(value))
21+
}, [value]);
22+
23+
const resetStorage = (): void => {
24+
localStorage.removeItem(key)
25+
setValue(defaultValue)
26+
localStorage.setItem(key, JSON.stringify(defaultValue))
27+
}
28+
29+
return [value, setValue, resetStorage]
30+
}
31+
32+
export function removeStorageKeys(prefix: string) {
33+
const deleteKeys = []
34+
for (let localStorageKey in localStorage) {
35+
if (localStorageKey.startsWith(prefix)){
36+
deleteKeys.push(localStorageKey)
37+
}
38+
}
39+
40+
deleteKeys.forEach(key => {
41+
localStorage.removeItem(key)
42+
})
43+
}

ui/src/api/hooks/usePromptBlocker.tsx

Lines changed: 0 additions & 65 deletions
This file was deleted.

ui/src/core/Snacks.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import {enqueueSnackbar} from "notistack";
2+
3+
export function ShowSuccessfulSnack(message: string) {
4+
enqueueSnackbar(message, {
5+
autoHideDuration: 6000,
6+
variant: "success"
7+
})
8+
}
9+
10+
export function ShowErrorSnack(message: string) {
11+
enqueueSnackbar(message, {
12+
autoHideDuration: 6000,
13+
variant: "error"
14+
})
15+
}

ui/src/core/YgoNavbar.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {Link} from "react-router-dom";
2-
import {useAuth} from "../auth/AuthProvider";
2+
import {useAuth} from "./auth/AuthProvider";
33
import {useLocation, useNavigate} from "react-router";
44
import UserNavbarBadge from "../users/UserNavbarBadge";
55
import React from "react";
@@ -33,7 +33,6 @@ function YgoNavbar() {
3333
</>
3434
}
3535

36-
3736
// for class navBarContainer see index.scss
3837
// noinspection TypeScriptValidateTypes
3938
return <>
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from "react";
2-
import {LoginVariables, useLoginMutation} from "../api/hooks/useLogin";
2+
import {LoginVariables, useLoginMutation} from "../../api/hooks/useLogin";
33
import {useNavigate} from "react-router";
44
import {useAuth} from "./AuthProvider";
55

@@ -42,7 +42,7 @@ function LoginPage() {
4242
<div className={"flex justify-center items-center"}>
4343
<img
4444
alt=""
45-
src="/logo.png"
45+
src="/ui/public/logo.png"
4646
width="96"
4747
height="96"
4848
className="d-inline-block align-top"

ui/src/draft/challenge/DraftMyDeckPage.tsx

Lines changed: 0 additions & 116 deletions
This file was deleted.
Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
import React, {useState} from "react";
2-
import PageDraftDeck from "./PageDraftDeck";
3-
import PageSettings from "./PageSettings";
1+
import React from "react";
2+
import PageDraftDeck from "../shared/draftPage/PageDraftDeck";
3+
import PageSettings from "../shared/settingsPage/PageSettings";
44
import Stepper from "../../core/stepper/Stepper";
55
import StepperStep from "../../core/stepper/StepperStep";
66
import {Deck} from "../../api/CardModel";
7-
import PageOverview from "./PageOverview";
7+
import LocaleDraftWizardResultPage from "./LocaleDraftWizardResultPage";
88
import {ExtraDeckFilter, MainDeckFilter} from "../../api/CardFilter";
99
import {DraftSettings} from "../../api/Draft";
10-
import {ExportDeck} from "../../deck/DeckRandomGeneratorPage";
10+
import {ExportDeck} from "../shared/deck/DeckRandomGeneratorPage";
11+
import useLocalState from "../../api/hooks/storage/useLocalState";
1112

1213
export enum LocalDraftStages {
1314
Settings = 1,
@@ -16,50 +17,61 @@ export enum LocalDraftStages {
1617
DeckOverview
1718
}
1819

19-
function DeckDraftWizard() {
20-
const [draftSettings, setDraftSettings] = useState<DraftSettings>({} as DraftSettings)
21-
const [currentStage, setCurrentStage] = useState<LocalDraftStages>(LocalDraftStages.Settings)
22-
const [deck, setDeck] = useState<Deck>({cards: []} as Deck)
20+
function LocaleDraftWizard() {
21+
const [draftSettings, setDraftSettings, resetDraftSettings] = useLocalState<DraftSettings>("deck_draft_wizard_settings", {} as DraftSettings)
22+
const [currentStage, setCurrentStage, resetCurrentStage] = useLocalState<LocalDraftStages>("deck_draft_wizard_stage", LocalDraftStages.Settings)
23+
const [deck, setDeck, resetDeck] = useLocalState<Deck>("deck_draft_wizard_deck", {cards: []} as Deck)
2324

2425
let mainDeckFilter = MainDeckFilter
2526
mainDeckFilter.sets = draftSettings.sets
2627

2728
let extraDeckFilter = ExtraDeckFilter
2829
extraDeckFilter.sets = draftSettings.sets
2930

31+
function onAbortDraft() {
32+
resetDeck()
33+
resetDraftSettings()
34+
resetCurrentStage()
35+
setCurrentStage(LocalDraftStages.Settings)
36+
}
37+
3038
let stageBody
3139
switch (currentStage) {
3240
case LocalDraftStages.DraftMain:
3341
stageBody = <PageDraftDeck isMainDraft={true}
42+
storagePrefix={"locale_main"}
3443
filter={mainDeckFilter}
3544
deck={deck}
45+
canAbort={true}
3646
setDeck={setDeck}
3747
draftSize={draftSettings.main_deck_size}
3848
maxRounds={draftSettings.main_deck_draws}
3949
onNextClick={() => setCurrentStage(LocalDraftStages.DraftExtra)}
40-
onAbort={() => setCurrentStage(LocalDraftStages.Settings)}/>
50+
onAbort={onAbortDraft}/>
4151
break
4252
case LocalDraftStages.DraftExtra:
4353
stageBody = <PageDraftDeck isMainDraft={false}
54+
storagePrefix={"locale_extra"}
4455
filter={extraDeckFilter}
4556
deck={deck}
57+
canAbort={true}
4658
setDeck={setDeck}
4759
draftSize={draftSettings.extra_deck_size}
4860
maxRounds={draftSettings.extra_deck_draws}
4961
onNextClick={() => setCurrentStage(LocalDraftStages.DeckOverview)}
50-
onAbort={() => setCurrentStage(LocalDraftStages.Settings)}/>
62+
onAbort={onAbortDraft}/>
5163
break
5264
case LocalDraftStages.DeckOverview:
53-
stageBody = <PageOverview deck={deck} submitName={"Export"} onSubmit={ExportDeck}/>
65+
stageBody = <LocaleDraftWizardResultPage onAbort={onAbortDraft} deck={deck}/>
5466
break
5567
default:
5668
case LocalDraftStages.Settings:
5769
stageBody = <PageSettings submitButtonName={"Next"}
5870
local={true}
5971
onSettingsSubmit={(settings: DraftSettings) => {
60-
setDraftSettings(settings)
61-
setCurrentStage(LocalDraftStages.DraftMain)
62-
}}/>
72+
setDraftSettings(settings)
73+
setCurrentStage(LocalDraftStages.DraftMain)
74+
}}/>
6375
break
6476
}
6577

@@ -88,4 +100,4 @@ function getCurrentStageHeader(currentStage: LocalDraftStages): JSX.Element {
88100
</Stepper>
89101
}
90102

91-
export default DeckDraftWizard
103+
export default LocaleDraftWizard

0 commit comments

Comments
 (0)