feat(12.1-01): declared bulk actions on admin lists

- pact.HasAdminBulkActions with AdminBulkAction, its input and result
- config_list.yaml bulkActions, compiled fail-loud, needs showCheckboxes
- POST .../{controller}/bulk/{action}: ids resolved and locked through the
  list scope in one transaction; partial selection is 409
- list schema offers declared actions per principal, with confirm text
- admin SPA bulk actions menu with confirm, busy state and failure toasts
- acme.roster fixture, tracer test, OpenAPI, TS types, dist, READMEs, docs
This commit is contained in:
Jakub Zych
2026-10-04 23:28:30 +02:00
parent ca9e9c0557
commit a879d6388c
45 changed files with 2007 additions and 38 deletions

View File

@@ -0,0 +1,10 @@
name: acme.roster::lang.people.form
form: ~/plugins/acme/roster/models/person/fields.yaml
modelClass: Person
defaultRedirect: acme/roster/people
create:
redirect: acme/roster/people/update/:id
redirectClose: acme/roster/people
update:
redirect: acme/roster/people
redirectClose: acme/roster/people

View File

@@ -0,0 +1,13 @@
list: ~/plugins/acme/roster/models/person/columns.yaml
modelClass: Person
title: acme.roster::lang.people.title
recordUrl: acme/roster/people/update/:id
recordsPerPage: 20
showCheckboxes: true
toolbar:
buttons: [create, delete]
search:
prompt: backend::lang.list.search_prompt
bulkActions: [activate, archive]
messages:
create: acme.roster::lang.people.create

View File

@@ -0,0 +1,10 @@
people:
title: People
form: Person
create: New person
name: Name
email: Email
activate: Activate
activate_confirm: Activate the selected people?
archive: Archive
archived: The selected people were archived.

View File

@@ -0,0 +1,10 @@
people:
title: Osoby
form: Osoba
create: Nowa osoba
name: Imię i nazwisko
email: E-mail
activate: Aktywuj
activate_confirm: Aktywować zaznaczone osoby?
archive: Archiwizuj
archived: Zaznaczone osoby zostały zarchiwizowane.

View File

@@ -0,0 +1,7 @@
columns:
name:
label: acme.roster::lang.people.name
searchable: true
email:
label: acme.roster::lang.people.email
searchable: true

View File

@@ -0,0 +1,9 @@
fields:
name:
label: acme.roster::lang.people.name
type: text
span: left
email:
label: acme.roster::lang.people.email
type: text
span: right