diff --git a/package.json b/package.json index afdc0ee..4d84253 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lageplan", - "version": "1.5.3", + "version": "1.5.4", "description": "Feuerwehr Lageplan - Krokier-App für Einsatzdokumentation", "private": true, "scripts": { diff --git a/src/app/app/page.tsx b/src/app/app/page.tsx index 55d61ee..9eb5153 100644 --- a/src/app/app/page.tsx +++ b/src/app/app/page.tsx @@ -19,7 +19,7 @@ import { useAuth } from '@/components/providers/auth-provider' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '@/components/ui/dialog' import { JournalView } from '@/components/journal/journal-view' -import { Lock, Eye, AlertTriangle, WifiOff, GraduationCap, Map as MapIcon, ClipboardList, LayoutGrid, X } from 'lucide-react' +import { Lock, Eye, AlertTriangle, WifiOff, GraduationCap, Map as MapIcon, ClipboardList, LayoutGrid } from 'lucide-react' import { CustomDragLayer } from '@/components/map/custom-drag-layer' import { OnboardingTour, resetOnboardingTour } from '@/components/onboarding/onboarding-tour' import { useKeyboardShortcuts } from '@/hooks/use-keyboard-shortcuts' @@ -51,6 +51,8 @@ export default function AppPage() { const [isEndConfirmOpen, setIsEndConfirmOpen] = useState(false) // Tap-to-place: angetipptes Symbol wartet auf Platzierung per Karten-Tipp (Mobil) const [pendingSymbol, setPendingSymbol] = useState<{ id: string; imageUrl: string } | null>(null) + // Feld-Tempo: bleibt scharf, um mehrere gleiche Symbole am Stück zu setzen + const [placedCount, setPlacedCount] = useState(0) const [isSaving, setIsSaving] = useState(false) const [isDeleteAllConfirmOpen, setIsDeleteAllConfirmOpen] = useState(false) const [isFullscreen, setIsFullscreen] = useState(false) @@ -403,7 +405,11 @@ export default function AppPage() { // Werkzeugwechsel auf ein Zeichen-Tool übernimmt vorab den Lock (rechtzeitig vor dem Zeichnen) const handleDrawModeChange = useCallback((mode: DrawMode) => { - if (mode !== 'select') ensureEditing() + if (mode !== 'select') { + ensureEditing() + setPendingSymbol(null) // ein Zeichen-Werkzeug beendet das Symbol-Platzieren + setPlacedCount(0) + } setDrawMode(mode) }, [ensureEditing, setDrawMode]) @@ -769,10 +775,11 @@ export default function AppPage() { const handleSymbolSelect = useCallback((symbol: { id: string; imageUrl: string }) => { ensureEditing() // Lock schon beim Auswählen übernehmen, damit das Platzieren sofort greift setPendingSymbol(symbol) + setPlacedCount(0) setIsSidebarOpen(false) setActiveTab('map') setDrawMode('select') - toast({ title: 'Symbol platzieren', description: 'Tippe auf die Karte, um das Symbol zu setzen.' }) + toast({ title: 'Symbol platzieren', description: 'Auf die Karte tippen — mehrere möglich, dann „Fertig".' }) }, [setIsSidebarOpen, setActiveTab, toast, ensureEditing, setDrawMode]) const handleTextPlace = useCallback((coordinates: [number, number]) => { @@ -1038,7 +1045,7 @@ export default function AppPage() { onDrawModeChange={setDrawMode} undoDrawPointRef={undoDrawPointRef} pendingSymbol={pendingSymbol ? { iconId: pendingSymbol.id, imageUrl: pendingSymbol.imageUrl } : null} - onSymbolPlaced={() => setPendingSymbol(null)} + onSymbolPlaced={() => setPlacedCount((n) => n + 1)} isFullscreen={isFullscreen} onToggleFullscreen={toggleFullscreen} /> @@ -1093,13 +1100,20 @@ export default function AppPage() { /> - {/* Tap-to-place Hinweis — schwebt über der Bottom-Nav, mit Abbrechen */} + {/* Tap-to-place Hinweis — schwebt über der Bottom-Nav; mehrere setzen, dann „Fertig" */} {pendingSymbol && ( -