onAddChildren(node)
- : undefined
+ onAddButtonClicked={
+ onAddChildren ? () => onAddChildren(node) : undefined
}
onRemoveButtonClicked={
rootNode.id === node.id || !onRemoveNode
@@ -126,13 +124,13 @@ interface StepPieceProps {
}
function StepPiece({
- id,
- isSelected,
- onAddButtonClicked,
- onRemoveButtonClicked,
- onSelected,
- children,
- }: StepPieceProps) {
+ id,
+ isSelected,
+ onAddButtonClicked,
+ onRemoveButtonClicked,
+ onSelected,
+ children,
+}: StepPieceProps) {
return (
-
+
{
passwordConfirmRef.current!.setCustomValidity(
- password === confirmPassword ? "" : "Les mots de passe ne correspondent pas !"
+ password === confirmPassword
+ ? ""
+ : "Les mots de passe ne correspondent pas !",
)
}, [confirmPassword, password])
@@ -110,9 +112,8 @@ export default function ProfileSettings() {
autoComplete="username"
required
placeholder="Nom d'utilisateur"
-
value={name}
- onChange={e => setName(e.target.value)}
+ onChange={(e) => setName(e.target.value)}
/>
@@ -124,9 +125,8 @@ export default function ProfileSettings() {
placeholder={"Adresse email"}
autoComplete="email"
required
-
value={email}
- onChange={e => setEmail(e.target.value)}
+ onChange={(e) => setEmail(e.target.value)}
/>
@@ -137,12 +137,13 @@ export default function ProfileSettings() {
type="password"
placeholder={"Mot de passe"}
autoComplete="new-password"
-
value={password}
- onChange={e => setPassword(e.target.value)}
+ onChange={(e) => setPassword(e.target.value)}
/>
-
+
setConfirmPassword(e.target.value)}
+ onChange={(e) =>
+ setConfirmPassword(e.target.value)
+ }
/>
-
))}
-
-
diff --git a/src/service/APITacticService.ts b/src/service/APITacticService.ts
index 0e6ba05..718c22c 100644
--- a/src/service/APITacticService.ts
+++ b/src/service/APITacticService.ts
@@ -16,7 +16,9 @@ export class APITacticService implements MutableTacticService {
}
async canBeEdited(): Promise {
- const response = await this.fetcher.fetchAPIGet(`tactics/${this.tacticId}/can-edit`)
+ const response = await this.fetcher.fetchAPIGet(
+ `tactics/${this.tacticId}/can-edit`,
+ )
const { canEdit } = await response.json()
return canEdit
}
diff --git a/src/service/LocalStorageTacticService.ts b/src/service/LocalStorageTacticService.ts
index 7e2b009..32b14c2 100644
--- a/src/service/LocalStorageTacticService.ts
+++ b/src/service/LocalStorageTacticService.ts
@@ -33,7 +33,7 @@ export class LocalStorageTacticService implements MutableTacticService {
)
localStorage.setItem(
GUEST_MODE_STEP_CONTENT_STORAGE_KEY + 1,
- JSON.stringify({components: []})
+ JSON.stringify({ components: [] }),
)
}
diff --git a/src/visualizer/VisualizerState.ts b/src/visualizer/VisualizerState.ts
index cea3fc2..6c80d20 100644
--- a/src/visualizer/VisualizerState.ts
+++ b/src/visualizer/VisualizerState.ts
@@ -1,4 +1,5 @@
import { CourtType, StepContent, StepInfoNode } from "../model/tactic/Tactic.ts"
+import { useReducer } from "react"
export interface VisualizerState {
stepId: number
@@ -9,7 +10,7 @@ export interface VisualizerState {
parentContent: StepContent | null
}
-export enum VisualizerStateActionKind {
+export const enum VisualizerStateActionKind {
INIT,
SET_CONTENTS,
}
@@ -26,7 +27,11 @@ export type VisualizerStateAction =
stepId: number
}
-export function visualizerStateReducer(
+export function useVisualizer(initialState: VisualizerState | null) {
+ return useReducer(visualizerStateReducer, initialState)
+}
+
+function visualizerStateReducer(
state: VisualizerState | null,
action: VisualizerStateAction,
): VisualizerState | null {