enhancement
major
minor
defect
critical
major
minor
major
#30106
tl-chat: Befehle im Kopf einer data-list zeigen ihren Zustand nicht (ausgeblendet, deaktiviert mit Grund); ein Klick auf einen gesperrten Befehl bleibt stumm
Fehler
Im Kopf einer Liste (<data-list>, z.B. die Unterhaltungsliste des Chats) stehen Befehle wie „Neue Unterhaltung“. Ein solcher Befehl kann eine Berechtigung verlangen (<access>) oder zeitweise deaktiviert sein (<disabled-if>). Die Liste zeigt diesen Zustand nicht an: Jeder Kopf-Befehl erscheint immer aktiv, auch wenn der Benutzer ihn nicht ausführen darf oder er gerade deaktiviert ist, und ohne Tooltip mit dem Grund. Ein Klick auf einen solchen Befehl tut sichtbar nichts – weder Dialog noch Meldung erscheinen.
Beispiel Steueranwendung (tl-factory, factory/workspace-agent.view.xml): „Neue Unterhaltung“ verlangt das Recht Write auf dem Workspace und ist deaktiviert, solange der Agent nicht arbeiten kann (disabled-if expr="$agentUnavailable"). Für einen Leser und für einen Verwalter bei nicht bereitem Workspace erscheint der Befehl trotzdem aktiv, ohne Tooltip, und ein Klick bewirkt nichts.
Ursache
DataListControl (com.top_logic.ai.chat.view.list, Modul tl-chat) erzeugt für jeden Kopf-Befehl ein ViewCommandModel, überträgt an den Client aber nur Beschriftung und Icon (Zustand buttons: label, icon). Die Ausführbarkeit des Modells kommt nicht an: Sichtbarkeit aus <access> und null-input-hidden sowie „deaktiviert“ mit Grund aus <disabled-if>.
Lösung
- Die Kopf-Befehle einer data-list folgen dem Zustand ihres ViewCommandModel wie jeder andere Befehl der React-Oberfläche: ausgeblendet, wenn das Modell ausgeblendet ist; deaktiviert mit dem Grund als Tooltip, wenn es deaktiviert ist. Ändert sich der Zustand, wird das nachgeführt.
- Wiederverwendung des Mechanismus der übrigen Befehlsleisten (z.B. Toolbar-Befehle über CommandModel), keine eigene Zustandslogik.
- Test: ein Kopf-Befehl, der ausgeblendet, deaktiviert (mit Grund) bzw. ausführbar ist, und ein Wechsel des Zustands über den Eingabekanal.