feat(12.1-02): password and form-only fields, rules per operation and preset

- pact.FormVirtualFields lists form fields that are not model columns: never
  bound, filled or projected; their values reach the Form hooks through
  cabana.VirtualFieldsFromContext when the field's context allows the operation
- type: password is a masked field that must be listed as virtual
- pact.FormRules supplies the rule set per operation and replaces the model's
  Rules() for admin saves; a rule on a virtual field sees the submitted value
- preset on a text field follows another text field on the create form
- SPA: PasswordField, preset handling in FormView, empty password left out of
  an update
- README, docs, OpenAPI document, TS types and dist updated
This commit is contained in:
Jakub Zych
2026-10-05 10:35:08 +02:00
parent a65c670574
commit a1c6bb1ce6
42 changed files with 1284 additions and 49 deletions

View File

@@ -24,3 +24,7 @@ people:
deleted_text: An archived person is hidden from the directory.
inactive_title: This person is not active
inactive_text: Activate the person to let them sign in.
slug: Slug
password: Password
password_confirmation: Repeat the password
notify: Send a welcome message

View File

@@ -24,3 +24,7 @@ people:
deleted_text: Zarchiwizowana osoba jest ukryta w katalogu.
inactive_title: Ta osoba jest nieaktywna
inactive_text: Aktywuj osobę, aby mogła się zalogować.
slug: Slug
password: Hasło
password_confirmation: Powtórz hasło
notify: Wyślij wiadomość powitalną

View File

@@ -7,6 +7,25 @@ fields:
label: acme.roster::lang.people.email
type: text
span: right
slug:
label: acme.roster::lang.people.slug
type: text
preset: name
password:
label: acme.roster::lang.people.password
type: password
span: left
context: [create, update]
password_confirmation:
label: acme.roster::lang.people.password_confirmation
type: password
span: right
context: [create, update]
notify:
label: acme.roster::lang.people.notify
type: checkbox
default: true
context: create
joined_ip:
label: acme.roster::lang.people.joined_ip
type: text