Ebene + Zeichnungsebene Erzeugen: Dialog mit Name-Input (wie Kombi)

UX-Beschwerde: addNew/addQuick haben still im Hintergrund eine Ebene
am Listenende hinzugefuegt. User sah das Ergebnis nicht weil scroll-
abhaengig oder ueberhaupt — "kann gar nicht erstellen". Bei Ebenen-
Kombinationen geht's via window.prompt, das ist klar.

Beide auf gleiche Prompt-UX umgebaut:

EbenenManager.addNew:
- Prompt "Name für neue Ebene:" mit Default "NEU"
- Bei Cancel/leer: kein Add
- Bei OK: Ebene mit UPPERCASE-Name + auto-generiertem Code, Code-
  Feld bekommt sofort den Edit-Mode (User kann ihn schnell anpassen).

GeschossManager.addQuick:
- Prompt "Name für neue Zeichnungsebene (Geschoss):" mit Default
  basiert auf Anzahl Geschosse (z.B. "3OG" wenn 2 vorhanden).
- Bei OK: neuer Eintrag als Geschoss (isGeschoss=true) mit hoehe=3.0
  und schnitthoehe=1.0 — die Default-Werte. Wegen recalcOkff zeigt
  er automatisch das richtige OKFF.

Vorher war addQuick auf `isGeschoss=false` (= Beschriftungs-Eintrag,
kein Geschoss), das war ein Konventions-Mismatch zur User-Erwartung.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-19 00:16:36 +02:00
parent c4c9e56b2c
commit 10690f4514
2 changed files with 20 additions and 4 deletions
+8 -2
View File
@@ -359,12 +359,18 @@ export default function EbenenManager({
} }
const addNew = () => { const addNew = () => {
// Modal-Dialog via window.prompt fuer expliziten Name-Input — selbe UX
// wie bei Ebenenkombinationen. Code wird automatisch generiert.
const name = (window.prompt('Name für neue Ebene:', 'NEU') || '').trim()
if (!name) return
// Doppel-Namen erlauben (gibt's auch bisher), aber doppel-Codes vermeiden.
const code = nextFreeCode() const code = nextFreeCode()
onChange([...ebenen, { onChange([...ebenen, {
code, name: 'NEU', code, name: name.toUpperCase(),
color: '#888888', lw: 0.18, visible: true, locked: false, color: '#888888', lw: 0.18, visible: true, locked: false,
}]) }])
// Code-Feld der neuen Ebene fokussieren // Direkt in den Edit-Mode fuer Code-Feld — User kann Code anpassen
// falls die Auto-Vergabe nicht passt.
setAutoEdit({ code, field: 'code', token: Date.now() }) setAutoEdit({ code, field: 'code', token: Date.now() })
} }
+12 -2
View File
@@ -94,10 +94,20 @@ export default function GeschossManager({
.reduce((s, z) => s + (z.hoehe ?? 0), 0) .reduce((s, z) => s + (z.hoehe ?? 0), 0)
const addQuick = () => { const addQuick = () => {
// Modal-Dialog via window.prompt fuer expliziten Name-Input — selbe UX
// wie bei Ebenenkombinationen / neuer Ebene.
const defaultName = `${zeichnungsebenen.filter(z => z.isGeschoss).length + 1}OG`
const name = (window.prompt(
'Name für neue Zeichnungsebene (Geschoss):',
defaultName
) || '').trim()
if (!name) return
const newZ = { const newZ = {
id: `z_${Date.now()}`, id: `z_${Date.now()}`,
name: `Neu ${zeichnungsebenen.length + 1}`, name,
isGeschoss: false, isGeschoss: true,
hoehe: 3.0,
schnitthoehe: 1.0,
visible: true, visible: true,
} }
onChange([...zeichnungsebenen, newZ]) onChange([...zeichnungsebenen, newZ])