Edycja danych
Źródło:
FormDraft.js,formFields.js,InlineEditView.js,DataTableView.js
Każda edycja w silniku pracuje na roboczej kopii danych (draft), a nie na oryginale. Dopiero zapis wysyła zmiany do API. Dzięki temu anulowanie przywraca stan wyjściowy bez pobierania danych, wiadomo czy i co się zmieniło, a walidacja dzieje się przed wysłaniem, a nie w reakcji na błąd serwera.
Ten sam model obsługuje sekcję inlineedit i edycję wiersza tabeli — opis pól jest identyczny w obu miejscach.
Opis pola
fields:
- key: name # klucz w draftcie (wymagany)
label: Nazwa
from: customer.name # skąd wziąć wartość początkową (domyślnie `key`)
as: customer.name # nazwa parametru API (domyślnie `key`)
type: text
required: true
maxLength: 64
| Pole | Znaczenie |
|---|---|
key | Klucz pola w draftcie (wymagany) |
label | Etykieta w podglądzie i w formularzu |
from | Ścieżka wartości w danych źródłowych (dot-notation) |
as | Nazwa parametru API; kropka buduje strukturę zagnieżdżoną |
type | text, number, email, password, date, datetime, time, textarea, checkbox, switch, select, radiogroup, checkboxgroup, slider, stepper |
required, min, max, minLength, maxLength, pattern | Reguły walidacji |
message | Własny komunikat błędu pola |
options / optionsSource | Opcje dla pól wyboru |
decimals, prefix, suffix, emptyText | Formatowanie wartości w podglądzie |
Kontrolki są zwykłymi widokami silnika, więc pole formularza dostaje bez dodatkowej pracy cały kontrakt wartości: typowaną wartość, zapis do VarStore i opcje pobierane z API.
Sekcja inlineedit
type: inlineedit
id: customerSection
title: Dane klienta
icon: user
source: orderDetail.customer # ścieżka do obiektu ze stanu
fields:
- key: name
label: Nazwa
required: true
- key: email
label: E-mail
pattern: '.+@.+'
message: Podaj poprawny adres e-mail
save:
module: core/orders
method: customer.update
params:
orderId: { valueFrom: $page.orderId }
onlyChanged: true
refresh: [orderDetail]
successMessage: Zapisano dane klienta
- Edycję otwiera ✎, zamyka ✓ (zapis) albo ✕ (anulowanie).
Escapeanuluje,Ctrl+Enterzapisuje.- Zmiana danych źródłowych odświeża podgląd, ale podczas edycji jest ignorowana — inaczej skasowałaby to, co użytkownik właśnie wpisał.
- Błąd zapisu pojawia się nad polami, a sekcja zostaje w trybie edycji.
Wartości pól a templatki
Wartości wpisane przez użytkownika trafiają do API dosłownie — nie są interpretowane jako templatki {{ }}. Tekst Firma {{ $page.orderId }} zostanie wysłany dokładnie w takiej postaci. Statyczne params z konfiguracji zapisu przechodzą normalnie przez templatki i referencje valueFrom.
Zapis
Zapis wykonuje zwykła akcja callMethod, więc działają wszystkie jej mechanizmy: refresh, onSuccess, onError oraz zdarzenia cyklu życia (callMethod:preCall:<id>, callMethod:afterCall:<id>).
onlyChanged: true wysyła wyłącznie pola, które faktycznie się zmieniły — reszta w ogóle nie pojawia się w parametrach.
Edycja wiersza tabeli
Ten sam opis pól wpisuje się w editable tabeli — patrz Tabele danych.
Zdarzenia
| Zdarzenie | Kiedy |
|---|---|
inlineedit:edit:<id> | po wejściu w tryb edycji |
inlineedit:cancel:<id> | po anulowaniu |
inlineedit:saved:<id> | po udanym zapisie |
