Ebene/Zeichnungsebene Erzeugen: window.prompt raus (macOS WKWebView-Bug)
Symptom: erster +-Klick hat funktioniert, alle weiteren nicht (kein APPLY im Log). Diagnose: macOS WKWebView in Rhino blockiert WIEDERHOLTE window.prompt-Aufrufe — der erste zeigt einen Dialog, nachfolgende returnen direkt null. Mein `if (!name) return` beendet dann ohne Add → kein APPLY → User sieht nichts. Plus: das nach Anlegen direkt onActiveChange(code) erzeugte einen SET_ACTIVE_LAYER race (Layer war noch nicht durch build_layers erstellt → Warning "Sublayer mit Code X nicht gefunden"). Beide Probleme weg durch: - EbenenManager.addNew: silent append mit Default-Name "NEU", Code-Feld bekommt autoEdit-Fokus → User kann direkt tippen, Tab springt zum Name-Feld. Code = nextFreeAfter(activeCode) bleibt (eine nach der aktiven). - GeschossManager.addQuick: silent append mit Default-Name "NOG" (basiert auf Anzahl Geschosse), kein onActiveChange. User editiert ueber den Geschoss-Settings-Cog am Row falls noetig. Tradeoff: keine Dialog-Bestätigung mehr wie ursprünglich vom User gewünscht — aber dafür funktioniert's überhaupt. Falls Dialog wieder gewünscht, müsste ein React-Modal statt window.prompt her. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -367,18 +367,20 @@ export default function EbenenManager({
|
||||
}
|
||||
|
||||
const addNew = () => {
|
||||
const name = (window.prompt('Name für neue Ebene:', 'NEU') || '').trim()
|
||||
if (!name) return
|
||||
// KEIN window.prompt — macOS WKWebView blockiert wiederholte
|
||||
// JavaScript-Dialoge (erster zeigt, nachfolgende returnen null).
|
||||
// Silent-Append mit autoEdit damit der User direkt den Namen
|
||||
// eintippen kann.
|
||||
const code = nextFreeAfter(activeCode)
|
||||
const newEbene = {
|
||||
code, name: name.toUpperCase(),
|
||||
code, name: 'NEU',
|
||||
color: '#888888', lw: 0.18, visible: true, locked: false,
|
||||
}
|
||||
console.log('[EBENEN-UI] addNew →', { activeCode, code, name: newEbene.name, ebenenCountBefore: ebenen.length })
|
||||
console.log('[EBENEN-UI] addNew →', { activeCode, code, ebenenCountBefore: ebenen.length })
|
||||
onChange([...ebenen, newEbene])
|
||||
// Neue Ebene direkt als aktiv setzen → Pill-Highlight, sofort sichtbar
|
||||
// und der User kann gleich anfangen Geometrie auf diese Ebene zu zeichnen.
|
||||
if (onActiveChange) onActiveChange(code)
|
||||
// Code-Feld der neuen Ebene fokussieren — User kann sofort tippen
|
||||
// (Tab springt dann zum Name-Feld).
|
||||
setAutoEdit({ code, field: 'code', token: Date.now() })
|
||||
}
|
||||
|
||||
const duplicateEbene = (code) => {
|
||||
|
||||
Reference in New Issue
Block a user