feat(10-03): tabs, toggles, relation fields, form lifecycle and settings pages
- FormTabs groups fields by tab (untabbed fields in the default tab) as a
segmented tablist; a tab holding invalid fields after a 422 shows a
count badge and the form switches to the first invalid field
- switch, checkbox and relation join the renderer registry: toggle cards
(role=switch, 20px checkbox) keep a numeric value numeric; relation
fields are read-only labels from meta.labels, a searchable single
select over fields/{field}/options with emptyOption first, or ordered
removable chips with an appending search (300 ms debounce, 20 per
page, more on scroll or the more action)
- FormView gets the back button, record title and update subtitle, a
sticky footer (Usuń with deleteConfirm then DELETE, Anuluj, Zapisz i
zamknij to the mapped redirectClose, Zapisz), and asks before leaving a
dirty form on any route change plus a beforeunload guard
- Settings: the rail pins Ustawienia to the bottom when /settings is
non-empty; /settings lists pages by category; /settings/:code renders
the settings schema through FormGrid and the registry, PUTs the values
and maps a 422 like the record form
- New backend::lang keys (form.more_options, tab_default, discard,
settings.back); form and settings smoke tests; boardwalk/dist rebuilt
This commit is contained in:
82
admin/tests/fixtures/widgets.options.json
vendored
82
admin/tests/fixtures/widgets.options.json
vendored
@@ -1,9 +1,85 @@
|
||||
{
|
||||
"maker": {
|
||||
"data": [
|
||||
{ "value": "1", "label": "Acme Works" },
|
||||
{ "value": "2", "label": "Bolt & Co" }
|
||||
{
|
||||
"value": "1",
|
||||
"label": "Acme Works"
|
||||
},
|
||||
{
|
||||
"value": "2",
|
||||
"label": "Bolt & Co"
|
||||
}
|
||||
],
|
||||
"meta": { "locale": "en" }
|
||||
"meta": {
|
||||
"locale": "en"
|
||||
}
|
||||
},
|
||||
"makerField": {
|
||||
"data": [
|
||||
{
|
||||
"value": 1,
|
||||
"label": "Acme Works"
|
||||
},
|
||||
{
|
||||
"value": 2,
|
||||
"label": "Bolt & Co"
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"page": 1,
|
||||
"per_page": 20,
|
||||
"total": 3,
|
||||
"last_page": 2
|
||||
}
|
||||
},
|
||||
"makerFieldPage2": {
|
||||
"data": [
|
||||
{
|
||||
"value": 7,
|
||||
"label": "Cog Ltd"
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"page": 2,
|
||||
"per_page": 20,
|
||||
"total": 3,
|
||||
"last_page": 2
|
||||
}
|
||||
},
|
||||
"makerFieldSearch": {
|
||||
"data": [
|
||||
{
|
||||
"value": 1,
|
||||
"label": "Acme Works"
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"page": 1,
|
||||
"per_page": 20,
|
||||
"total": 1,
|
||||
"last_page": 1
|
||||
}
|
||||
},
|
||||
"tagsField": {
|
||||
"data": [
|
||||
{
|
||||
"value": 1,
|
||||
"label": "Small"
|
||||
},
|
||||
{
|
||||
"value": 3,
|
||||
"label": "Round"
|
||||
},
|
||||
{
|
||||
"value": 4,
|
||||
"label": "Large"
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"page": 1,
|
||||
"per_page": 20,
|
||||
"total": 3,
|
||||
"last_page": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user