enhancement
major
minor
major
minor
major
#29892
view-layer forms: actions that enter and leave edit mode (<enter-edit-mode/>, <leave-edit-mode/>)
Found in an application (E-Home, 8.0.0-alpha10): a form's save is replaced by a custom action chain (store the form, run a TL-Script function that normalizes the stored values in the same transaction, see TL #29888). The chain has no action that only ends edit mode; it ends with <discard-form-state/>, which works because the state was stored already, but reads as a cancel.
Wanted: an action (e.g. <leave-edit-mode/>) or an option of the store action to end edit mode, documented in view-layer/forms. The opposite is missing as well: no action enters the edit mode of a form (only the built-in Edit button and a write of the form's editMode channel do).
Lösung
Zwei Aktionen schalten den Bearbeitungsmodus des umgebenden <form> in einer Aktionskette um:
- <leave-edit-mode/> (LeaveEditModeAction) beendet den Bearbeitungsmodus, ohne etwas zu speichern oder zu verwerfen. Sie ist das Gegenstück zu <store-form-state/> (speichert, bleibt im Bearbeitungsmodus) und <discard-form-state/> (verwirft die Eingaben und verlässt den Bearbeitungsmodus). Hat das Formular noch ungespeicherte Änderungen, bricht die Aktion die Kette mit einem Fehler ab und das Formular bleibt im Bearbeitungsmodus: Eine Kette, die den Bearbeitungsmodus verlässt, ohne vorher zu speichern, ist ein Konfigurationsfehler und verwirft keine Eingaben stillschweigend. Im Anzeigemodus tut die Aktion nichts.
- <enter-edit-mode/> (EnterEditModeAction) startet den Bearbeitungsmodus. Ist das Formular bereits im Bearbeitungsmodus, tut die Aktion nichts; verweigert die Bearbeitungsberechtigung des Formulars (edit-executability) das Bearbeiten oder zeigt das Formular kein Objekt, bricht die Aktion die Kette mit einem Fehler ab, sodass die folgenden Aktionen nie auf einem nicht bearbeitbaren Formular laufen.
Beide Aktionen tun außerhalb eines Formulars nichts. FormControl.enterEditMode() und FormControl.leaveEditMode() sind die zugehörige Java-API.
<form input="ticket"> <save-action> <with-transaction> <store-form-state/> <execute-script function="t -> ..."/> </with-transaction> <leave-edit-mode/> </save-action> ... </form>
Die Artikel view-layer/forms (neuer Abschnitt zu <save-action> / <cancel-action> und den Zustandsaktionen) und view-layer/commands dokumentieren die Aktionen; die React-Demo zeigt sie im Ticket-Detailformular (Speichern legt in derselben Transaktion einen Kommentar an und verlässt dann den Bearbeitungsmodus; ein Toolbar-Befehl startet den Bearbeitungsmodus über die Aktion).