fix(measure): Messlinie verschwand nach dem Abschliessen (v1.5.9)

Ursache: finishMeasure schaltete auf 'select' um → der Reset-Effekt
(drawMode !== 'measure') löschte die eben gezeichnete Linie sofort; die
Höhen-Labels kamen asynchron danach und blieben, die Linie nicht.

- Nach dem Abschliessen bleibt der Mess-Modus aktiv → Linie + Labels + Panel
  bleiben stehen (Tippen fügt keinen Punkt mehr hinzu, da bereits fertig)
- Gemeinsamer clearMeasurement-Helfer: Panel-X und „Neue Messung" räumen jetzt
  Linie, Marker, Höhen-Labels und Panel vollständig auf
- Beenden weiterhin über „Neue Messung" oder Wahl eines anderen Werkzeugs

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Pepe Ziberi
2026-07-22 20:42:23 +02:00
parent e9e8f3fa8e
commit 226a15e882
2 changed files with 20 additions and 15 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "lageplan", "name": "lageplan",
"version": "1.5.8", "version": "1.5.9",
"description": "Feuerwehr Lageplan - Krokier-App für Einsatzdokumentation", "description": "Feuerwehr Lageplan - Krokier-App für Einsatzdokumentation",
"private": true, "private": true,
"scripts": { "scripts": {

View File

@@ -2141,6 +2141,20 @@ export function MapView({
onDrawModeChangeRef.current?.('select') onDrawModeChangeRef.current?.('select')
}, []) }, [])
// Messung komplett entfernen (Linie, Marker, Höhen-Labels, Panel, Zustand)
const clearMeasurement = useCallback(() => {
measureMarkersRef.current.forEach(m => m.remove())
measureMarkersRef.current = []
measureCoordsRef.current = []
setMeasurePointCount(0)
setMeasureFinished(false)
setMeasureResult(null)
if (map.current) {
const src = map.current.getSource('measure-line') as maplibregl.GeoJSONSource
if (src) src.setData({ type: 'FeatureCollection', features: [] })
}
}, [])
// Finish measurement handler // Finish measurement handler
const finishMeasure = useCallback(() => { const finishMeasure = useCallback(() => {
drawingRef.current.isDrawing = false drawingRef.current.isDrawing = false
@@ -2152,8 +2166,9 @@ export function MapView({
if (src) src.setData({ type: 'FeatureCollection', features: [] }) if (src) src.setData({ type: 'FeatureCollection', features: [] })
} }
fetchElevationsAndUpdateRef.current() fetchElevationsAndUpdateRef.current()
// Apple-style: auto-return to select mode after finishing measurement // WICHTIG: im Mess-Modus bleiben, sonst löscht der Reset-Effekt (drawMode !== 'measure')
onDrawModeChangeRef.current?.('select') // die eben gezeichnete Linie sofort wieder. Der Nutzer beendet über „Neue Messung"
// oder durch Wahl eines anderen Werkzeugs.
}, []) }, [])
return ( return (
@@ -2358,17 +2373,7 @@ export function MapView({
{/* Neue Messung starten */} {/* Neue Messung starten */}
{drawMode === 'measure' && measureFinished && ( {drawMode === 'measure' && measureFinished && (
<button <button
onClick={() => { onClick={clearMeasurement}
measureMarkersRef.current.forEach(m => m.remove())
measureMarkersRef.current = []
measureCoordsRef.current = []
setMeasurePointCount(0)
setMeasureFinished(false)
if (map.current) {
const src = map.current.getSource('measure-line') as maplibregl.GeoJSONSource
if (src) src.setData({ type: 'FeatureCollection', features: [] })
}
}}
style={{ style={{
position: 'absolute', top: 16, left: '50%', transform: 'translateX(-50%)', position: 'absolute', top: 16, left: '50%', transform: 'translateX(-50%)',
zIndex: 1000, padding: '12px 28px', fontSize: '15px', fontWeight: 700, zIndex: 1000, padding: '12px 28px', fontSize: '15px', fontWeight: 700,
@@ -2385,7 +2390,7 @@ export function MapView({
<MeasurePanel <MeasurePanel
measurement={measureResult.measurement} measurement={measureResult.measurement}
hoseTypes={measureResult.hoseTypes} hoseTypes={measureResult.hoseTypes}
onClose={() => setMeasureResult(null)} onClose={clearMeasurement}
/> />
)} )}