diff --git a/traque-front/components/admin/mapPicker.jsx b/traque-front/components/admin/mapPicker.jsx index f6aa757..a265f1d 100644 --- a/traque-front/components/admin/mapPicker.jsx +++ b/traque-front/components/admin/mapPicker.jsx @@ -3,6 +3,7 @@ import { useLocation } from "@/hook/useLocation"; import { use, useEffect, useState } from "react"; import "leaflet/dist/leaflet.css"; import { Circle, MapContainer, TileLayer, useMap } from "react-leaflet"; +import { useMapCircleDraw } from "@/hook/mapDrawing"; function MapPan(props) { const map = useMap(); @@ -34,36 +35,26 @@ function MapEventListener({onClick, onMouseMove}) { return null; } +const DEFAULT_ZOOM = 17; export function CircularAreaPicker({area, setArea, ...props}) { - const DEFAULT_ZOOM = 17; const location = useLocation(Infinity); - const [drawing, setDrawing] = useState(false); - const [center, setCenter] = useState(area?.center || null); - const [radius, setRadius] = useState(area?.radius || null); + const {handleClick, handleMouseMove, center, radius} = useMapCircleDraw(area, setArea); + return ( + + + {center && radius && } + + + ) +} - useEffect(() => { - console.log(area) - setDrawing(false); - setCenter(area?.center || null); - setRadius(area?.radius || null); - }, [area]) - - function handleClick(e) { - if(!drawing) { - setCenter(e.latlng); - setRadius(null); - setDrawing(true); - } else { - setDrawing(false); - setArea({center, radius}); - } - } - - function handleMouseMove(e) { - if(drawing) { - setRadius(e.latlng.distanceTo(center)); - } - } +export function ZonePicker({minArea, setMinArea, maxArea, setMaxArea, ...props}) { + const location = useLocation(Infinity); + const {handleClick: maxClick, handleMouseMove: maxHover, center: maxCenter, radius: maxRadius} = useMapCircleDraw(minArea, setMinArea); + const {handleClick: minClick, handleMouseMove: minHover, center: minCenter, radius: minRadius} = useMapCircleDraw(maxArea, setMaxArea); return ( Rename - Remove + updateTeam(team.id, {captured: !team.captured})}>{team.captured ? "Revive" : "Capture"} + Remove

Team details

@@ -55,6 +56,7 @@ export default function TeamEdit({ selectedTeamId, setSelectedTeamId }) {

Chasing : {getTeamName(team.chasing)}

Chased by : {getTeamName(team.chased)}

Capture code : {String(team.captureCode).padStart(4, '0')}

+

Captured : {team.captured ? "Yes" : "No"}

diff --git a/traque-front/components/admin/teamList.jsx b/traque-front/components/admin/teamList.jsx index d6fd196..ee6ee41 100644 --- a/traque-front/components/admin/teamList.jsx +++ b/traque-front/components/admin/teamList.jsx @@ -12,7 +12,16 @@ const reorder = (list, startIndex, endIndex) => { }; function TeamListItem({ team, index, onSelected, itemSelected }) { - const classNames = 'w-full p-3 my-3 shadow ' + (itemSelected ? "bg-blue-400" : "bg-gray-100"); + let bgColor; + if(itemSelected) { + bgColor = "bg-blue-400"; + }else if(team.captured) { + bgColor = "bg-red-400"; + } + else { + bgColor = "bg-gray-100"; + } + const classNames = 'w-full p-3 my-3 shadow ' + (bgColor); return ( onSelected(team.id)}> {provided => ( diff --git a/traque-front/components/team/actionDrawer.jsx b/traque-front/components/team/actionDrawer.jsx index 349ddab..17610e7 100644 --- a/traque-front/components/team/actionDrawer.jsx +++ b/traque-front/components/team/actionDrawer.jsx @@ -2,18 +2,27 @@ import useGame from "@/hook/useGame"; import { useState } from "react" import BlueButton, { GreenButton, RedButton } from "../util/button"; import TextInput from "../util/textInput"; +import { useTeamConnexion } from "@/context/teamConnexionContext"; export default function ActionDrawer() { const [visible, setVisible] = useState(false); - const { sendCurrentPosition, name } = useGame(); + const { sendCurrentPosition, name, captureCode } = useGame(); + const {logout} = useTeamConnexion(); return ( -
+
setVisible(!visible)} /> - {visible &&
-
+ {visible &&
+
+ +
+
- {name} + {name} +
+
+ Capture code + {captureCode}
30min @@ -25,27 +34,22 @@ export default function ActionDrawer() {
-
+
Update position
-
- Message log -
-
- See target info -
-
+
+
Target
+
+ See target info +
{ console.log(i) }} /> Capture target
-
+
Signal emergency
-
- Log out -
}
diff --git a/traque-front/hook/mapDrawing.jsx b/traque-front/hook/mapDrawing.jsx new file mode 100644 index 0000000..f354905 --- /dev/null +++ b/traque-front/hook/mapDrawing.jsx @@ -0,0 +1,37 @@ +import { useEffect, useState } from "react"; +import { useLocation } from "./useLocation"; + +export function useMapCircleDraw(area, setArea) { + const [drawing, setDrawing] = useState(false); + const [center, setCenter] = useState(area?.center || null); + const [radius, setRadius] = useState(area?.radius || null); + + useEffect(() => { + setDrawing(false); + setCenter(area?.center || null); + setRadius(area?.radius || null); + }, [area]) + + function handleClick(e) { + if(!drawing) { + setCenter(e.latlng); + setRadius(null); + setDrawing(true); + } else { + setDrawing(false); + setArea({center, radius}); + } + } + + function handleMouseMove(e) { + if(drawing) { + setRadius(e.latlng.distanceTo(center)); + } + } + return { + handleClick, + handleMouseMove, + center, + radius, + } +} \ No newline at end of file