- Implementiert `store.subscribe()` in `setupPolylines.js`, um das Kontextmenü-Handling über Redux zu steuern. - Ersetzt `useDispatch()` und `useSelector()` durch `store.dispatch()` und `store.getState()` in einer Nicht-React-Datei. - Fügt eine `forceClose`-Action in `polylineContextMenuSlice.js` hinzu, um das Kontextmenü synchron mit `setInterval` zu schließen. - Stellt sicher, dass das Kontextmenü **immer vor Ablauf des 20-Sekunden-Intervalls** geschlossen wird. - Verhindert doppelte Menüinstanzen und sorgt für ein stabiles Verhalten bei wiederholten Interaktionen. ✅ Fix für `TypeError: Cannot read properties of null (reading 'contextmenu')` ✅ **Verhindert Kontextmenü-Fehler beim automatischen Datenupdate** ✅ **Redux-gesteuerte Menüverwaltung für stabilere Performance** ✅ **Kein unerwartetes Offenbleiben oder erneutes Rendern des Menüs mehr**
33 lines
1.1 KiB
JavaScript
33 lines
1.1 KiB
JavaScript
// redux/slices/polylineContextMenuSlice.js
|
|
import { createSlice } from "@reduxjs/toolkit";
|
|
|
|
const initialState = {
|
|
isOpen: false,
|
|
position: null, // Serialisierbarer Wert { lat, lng }
|
|
forceClose: false, // Neuer State, um das Schließen zu erzwingen
|
|
};
|
|
|
|
const polylineContextMenuSlice = createSlice({
|
|
name: "polylineContextMenu",
|
|
initialState,
|
|
reducers: {
|
|
openPolylineContextMenu: (state, action) => {
|
|
state.isOpen = true;
|
|
state.position = { lat: action.payload.position.lat, lng: action.payload.position.lng };
|
|
state.forceClose = false; // Beim Öffnen zurücksetzen
|
|
},
|
|
closePolylineContextMenu: (state) => {
|
|
state.isOpen = false;
|
|
state.position = null;
|
|
},
|
|
forceCloseContextMenu: (state) => {
|
|
state.isOpen = false;
|
|
state.position = null;
|
|
state.forceClose = true; // Setzt Flagge, um Schließen zu signalisieren
|
|
},
|
|
},
|
|
});
|
|
|
|
export const { openPolylineContextMenu, closePolylineContextMenu, forceCloseContextMenu } = polylineContextMenuSlice.actions;
|
|
export default polylineContextMenuSlice.reducer;
|