completed new mapState

This commit is contained in:
PxlLoewe
2025-04-17 08:00:30 -07:00
parent 6a827b4127
commit c6c0d3a6d5
4 changed files with 33 additions and 15 deletions

View File

@@ -14,12 +14,18 @@ interface MapStore {
id: string; id: string;
tab: "home" | ""; tab: "home" | "";
}[]; }[];
setOpenMissionMarker: (mission: { open: string[]; close: string[] }) => void; setOpenMissionMarker: (mission: {
open: MapStore["openMissionMarker"];
close: string[];
}) => void;
openAircraftMarker: { openAircraftMarker: {
id: string; id: string;
tab: "home" | "fms" | "aircraft" | "mission" | "chat"; tab: "home" | "fms" | "aircraft" | "mission" | "chat";
}[]; }[];
setOpenAircraftMarker: (mission: { open: string[]; close: string[] }) => void; setOpenAircraftMarker: (aircraft: {
open: MapStore["openAircraftMarker"];
close: string[];
}) => void;
searchElements: { searchElements: {
id: number; id: number;
nodes: { nodes: {
@@ -52,16 +58,18 @@ export const useMapStore = create<MapStore>((set, get) => ({
setOpenMissionMarker: ({ open, close }) => { setOpenMissionMarker: ({ open, close }) => {
set((state) => ({ set((state) => ({
openMissionMarker: [...state.openMissionMarker, ...open].filter( openMissionMarker: [...state.openMissionMarker, ...open].filter(
(id) => !close.includes(id), (marker) => !close.includes(marker.id),
), ),
})); }));
}, },
openAircraftMarker: [], openAircraftMarker: [],
setOpenAircraftMarker: ({ open, close }) => { setOpenAircraftMarker: ({ open, close }) => {
set((state) => ({ const oldMarkers = get().openAircraftMarker.filter(
openAircraftMarker: [...state.openAircraftMarker, ...open].filter( (m) => !close.includes(m.id) && !open.find((o) => o.id === m.id),
(id) => !close.includes(id), );
),
set(() => ({
openAircraftMarker: [...oldMarkers, ...open],
})); }));
}, },
map: { map: {

View File

@@ -163,7 +163,7 @@ const AircraftMarker = ({ aircraft }: { aircraft: Aircraft }) => {
useEffect(() => { useEffect(() => {
const handleClick = () => { const handleClick = () => {
const open = openAircraftMarker.includes(aircraft.id); const open = openAircraftMarker.some((m) => m.id === aircraft.id);
if (open) { if (open) {
setOpenAircraftMarker({ setOpenAircraftMarker({
open: [], open: [],
@@ -171,7 +171,12 @@ const AircraftMarker = ({ aircraft }: { aircraft: Aircraft }) => {
}); });
} else { } else {
setOpenAircraftMarker({ setOpenAircraftMarker({
open: [aircraft.id], open: [
{
id: aircraft.id,
tab: "home",
},
],
close: [], close: [],
}); });
} }
@@ -221,7 +226,7 @@ const AircraftMarker = ({ aircraft }: { aircraft: Aircraft }) => {
)}" )}"
style=" style="
background-color: ${FMS_STATUS_COLORS[aircraft.fmsStatus]}; background-color: ${FMS_STATUS_COLORS[aircraft.fmsStatus]};
${openAircraftMarker.includes(aircraft.id) ? "opacity: 0; pointer-events: none;" : ""} ${openAircraftMarker.some((m) => m.id === aircraft.id) ? "opacity: 0; pointer-events: none;" : ""}
"> ">
<div <div
@@ -268,7 +273,7 @@ const AircraftMarker = ({ aircraft }: { aircraft: Aircraft }) => {
}) })
} }
/> />
{openAircraftMarker.includes(aircraft.id) && ( {openAircraftMarker.some((m) => m.id === aircraft.id) && (
<SmartPopup <SmartPopup
id={aircraft.id} id={aircraft.id}
ref={popupRef} ref={popupRef}

View File

@@ -118,7 +118,7 @@ const MissionMarker = ({ mission }: { mission: Mission }) => {
useEffect(() => { useEffect(() => {
const handleClick = () => { const handleClick = () => {
const open = openMissionMarker.includes(mission.id); const open = openMissionMarker.some((m) => m.id === mission.id);
if (open) { if (open) {
setOpenMissionMarker({ setOpenMissionMarker({
open: [], open: [],
@@ -126,7 +126,12 @@ const MissionMarker = ({ mission }: { mission: Mission }) => {
}); });
} else { } else {
setOpenMissionMarker({ setOpenMissionMarker({
open: [mission.id], open: [
{
id: mission.id,
tab: "home",
},
],
close: [], close: [],
}); });
} }
@@ -176,7 +181,7 @@ const MissionMarker = ({ mission }: { mission: Mission }) => {
)}" )}"
style=" style="
background-color: ${MISSION_STATUS_COLORS[mission.state]}; background-color: ${MISSION_STATUS_COLORS[mission.state]};
${openMissionMarker.includes(mission.id) ? "opacity: 0; pointer-events: none;" : ""} ${openMissionMarker.some((m) => m.id === mission.id) ? "opacity: 0; pointer-events: none;" : ""}
"> ">
<div <div
@@ -217,7 +222,7 @@ const MissionMarker = ({ mission }: { mission: Mission }) => {
}) })
} }
/> />
{openMissionMarker.includes(mission.id) && ( {openMissionMarker.some((m) => m.id === mission.id) && (
<SmartPopup <SmartPopup
id={mission.id} id={mission.id}
ref={popupRef} ref={popupRef}

Binary file not shown.