-
Edit zones
- {editMode == EditMode.MIN &&
setEditMode(EditMode.MAX)}>Click to edit first zone}
- {editMode == EditMode.MAX &&
setEditMode(EditMode.MIN)}>Click to edit last zone}
-
-
-
Number of zones
-
setReductionCount(e.target.value)}>
+ return (
+
+
Edit zones
+ {editMode == EditMode.MIN &&
setEditMode(EditMode.MAX)}>Click to edit first zone}
+ {editMode == EditMode.MAX &&
setEditMode(EditMode.MIN)}>Click to edit last zone}
+
+
+
Number of zones
+
setReductionCount(e.target.value)}>
+
+
+
Duration of a zone
+
setDuration(e.target.value)}>
+
+
Apply
-
-
Duration of a zone
-
setDuration(e.target.value)}>
-
-
Apply
-
+ );
}
diff --git a/traque-front/components/admin/gameSettings.jsx b/traque-front/app/admin/parameters/components/messages.jsx
similarity index 81%
rename from traque-front/components/admin/gameSettings.jsx
rename to traque-front/app/admin/parameters/components/messages.jsx
index ee96411..b827565 100644
--- a/traque-front/components/admin/gameSettings.jsx
+++ b/traque-front/app/admin/parameters/components/messages.jsx
@@ -1,7 +1,6 @@
-import useAdmin from "@/hook/useAdmin";
-import { GreenButton } from "../util/button";
-import { Section } from "../util/section";
import { useEffect, useState } from "react";
+import { Section } from "@/components/section";
+import useAdmin from "@/hook/useAdmin";
function MessageInput({title, ...props}) {
return (
@@ -12,7 +11,7 @@ function MessageInput({title, ...props}) {
);
}
-export default function GameSettings() {
+export default function Messages() {
const {gameSettings, changeGameSettings} = useAdmin();
const [capturedMessage, setCapturedMessage] = useState("");
const [winnerEndMessage, setWinnerEndMessage] = useState("");
@@ -35,13 +34,10 @@ export default function GameSettings() {
return (
-
setWaitingMessage(e.target.value)}/>
- setCapturedMessage(e.target.value)} />
- setWinnerEndMessage(e.target.value)} />
- setLoserEndMessage(e.target.value)} />
-
- Apply
-
+ setWaitingMessage(e.target.value)} onBlur={applySettings}/>
+ setCapturedMessage(e.target.value)} onBlur={applySettings}/>
+ setWinnerEndMessage(e.target.value)} onBlur={applySettings}/>
+ setLoserEndMessage(e.target.value)} onBlur={applySettings}/>
);
diff --git a/traque-front/components/admin/polygonZoneMap.jsx b/traque-front/app/admin/parameters/components/polygonZoneMap.jsx
similarity index 97%
rename from traque-front/components/admin/polygonZoneMap.jsx
rename to traque-front/app/admin/parameters/components/polygonZoneMap.jsx
index 2a8d9f1..c1b3382 100644
--- a/traque-front/components/admin/polygonZoneMap.jsx
+++ b/traque-front/app/admin/parameters/components/polygonZoneMap.jsx
@@ -1,12 +1,12 @@
import { useEffect, useState } from "react";
-import { GreenButton } from "../util/button";
-import { TextInput } from "../util/textInput";
+import { MapContainer, TileLayer, Polyline, Polygon, CircleMarker } from "react-leaflet";
+import "leaflet/dist/leaflet.css";
+import { GreenButton } from "@/components/button";
+import { TextInput } from "@/components/textInput";
+import { MapPan, MapEventListener } from "@/components/mapUtils";
import useAdmin from "@/hook/useAdmin";
import useLocation from "@/hook/useLocation";
-import "leaflet/dist/leaflet.css";
-import { MapContainer, TileLayer, Polyline, Polygon, CircleMarker } from "react-leaflet";
import useMapPolygonDraw from "@/hook/useMapPolygonDraw";
-import { MapPan, MapEventListener } from "./mapUtils";
const DEFAULT_ZOOM = 14;
diff --git a/traque-front/components/admin/teamManager.jsx b/traque-front/app/admin/parameters/components/teamManager.jsx
similarity index 100%
rename from traque-front/components/admin/teamManager.jsx
rename to traque-front/app/admin/parameters/components/teamManager.jsx
index fc0db8b..0c93d9e 100644
--- a/traque-front/components/admin/teamManager.jsx
+++ b/traque-front/app/admin/parameters/components/teamManager.jsx
@@ -1,6 +1,6 @@
-import useAdmin from '@/hook/useAdmin';
-import { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd';
import React, { useState } from 'react'
+import { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd';
+import useAdmin from '@/hook/useAdmin';
function reorder(list, startIndex, endIndex) {
const result = Array.from(list);
diff --git a/traque-front/app/admin/parameters/page.js b/traque-front/app/admin/parameters/page.js
index 119bc94..71afbae 100644
--- a/traque-front/app/admin/parameters/page.js
+++ b/traque-front/app/admin/parameters/page.js
@@ -1,21 +1,19 @@
"use client";
import { useState, useEffect } from "react";
-import GameSettings from "@/components/admin/gameSettings";
-import { useAdminConnexion } from "@/context/adminConnexionContext";
import dynamic from "next/dynamic";
-import TeamList from '@/components/admin/teamManager';
-import useAdmin from '@/hook/useAdmin';
import Link from "next/link";
-import { GreenButton } from "@/components/util/button";
-import { TextInput } from "@/components/util/textInput";
-import { Section } from "@/components/util/section";
+import { TextInput } from "@/components/textInput";
+import { Section } from "@/components/section";
+import { useAdminConnexion } from "@/context/adminConnexionContext";
+import useAdmin from '@/hook/useAdmin';
+import Messages from "./components/messages";
+import TeamList from './components/teamManager';
// Imported at runtime and not at compile time
-const ZoneSelector = dynamic(() => import('@/components/admin/polygonZoneMap'), { ssr: false });
+const ZoneSelector = dynamic(() => import('./components/polygonZoneMap'), { ssr: false });
export default function AdminPage() {
const {penaltySettings, changePenaltySettings} = useAdmin();
- const { addTeam } = useAdmin();
const { useProtect } = useAdminConnexion();
const [allowedTimeBetweenUpdates, setAllowedTimeBetweenUpdates] = useState("");
@@ -42,19 +40,16 @@ export default function AdminPage() {
Paramètres
-
-
-
-
- {minCenter && minRadius && }
- {maxCenter && maxRadius && }
-
-
-
-
- { maxCenter && minCenter && typeof maxCenter.distanceTo === 'function'
- && maxRadius + maxCenter.distanceTo(minCenter) >= minRadius
- &&
La zone de fin doit être incluse dans celle de départ
}
-
-
- )
-}
-
-export function LiveMap({ selectedTeamId, setSelectedTeamId }) {
- const location = useLocation(Infinity);
- const [timeLeftNextZone, setTimeLeftNextZone] = useState(null);
- const { zone, zoneExtremities, teams, nextZoneDate, isShrinking , getTeam, gameState } = useAdmin();
-
- function handleMarkerClick(teamId) {
- setSelectedTeamId(teamId);
- }
-
- const mapWrapperRef = useRef(null);
-
- const handleFullscreen = useCallback(() => {
- const el = mapWrapperRef.current;
- if (!el) return;
- if (!document.fullscreenElement) {
- el.requestFullscreen();
- } else {
- document.exitFullscreen();
- }
- }, []);
-
- // Remaining time before sending position
- useEffect(() => {
- const updateTime = () => {
- setTimeLeftNextZone(Math.max(0, Math.floor((nextZoneDate - Date.now()) / 1000)));
- };
-
- updateTime();
- const interval = setInterval(updateTime, 1000);
-
- return () => clearInterval(interval);
- }, [nextZoneDate]);
-
- function formatTime(time) {
- // time is in seconds
- if (time < 0) return "00:00";
- const minutes = Math.floor(time / 60);
- const seconds = Math.floor(time % 60);
- return String(minutes).padStart(2,"0") + ":" + String(seconds).padStart(2,"0");
- }
-
- function Arrow({pos1, pos2}) {
- if (pos1 && pos2) {
- return (
-