- RepeaterField: rows with drag handle, index, titleFrom title, error chip, move up/down (buttons, ArrowUp/ArrowDown on the handle, native drag and drop), expand/collapse, remove (asks only for a row holding a value), add with nested defaults, maxItems counter, empty state, collapse all; every change edits form state only - 422 row paths (content.3.answer) open the row, mark it and focus the nested control; the banner no longer repeats row messages - DropdownField dependsOn: waiting, loading, not used, empty, loaded with depth indent, failed with retry; cached per sibling value, last request wins, a stale value is cleared after a sibling change and announced - FormView provides form feedback (errors and notices by row path, the polite live region, its confirm dialog) and the options cache; FormGrid provides the sibling scope for repeater rows - repeater.* and form.dependent_* phrase keys (en, pl), smoke specs, docs
142 lines
3.0 KiB
JSON
142 lines
3.0 KiB
JSON
{
|
|
"data": {
|
|
"name": "Link",
|
|
"modelClass": "Link",
|
|
"fields": [
|
|
{
|
|
"name": "title",
|
|
"type": "text",
|
|
"label": "Title",
|
|
"span": "left"
|
|
},
|
|
{
|
|
"name": "type",
|
|
"type": "dropdown",
|
|
"label": "Type",
|
|
"span": "right",
|
|
"options": [
|
|
{
|
|
"value": "url",
|
|
"label": "Link"
|
|
},
|
|
{
|
|
"value": "post",
|
|
"label": "Post"
|
|
},
|
|
{
|
|
"value": "category",
|
|
"label": "Category"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "reference",
|
|
"type": "dropdown",
|
|
"label": "Reference",
|
|
"span": "left",
|
|
"dependsOn": "type"
|
|
},
|
|
{
|
|
"name": "description",
|
|
"type": "richeditor",
|
|
"label": "Description",
|
|
"comment": "Shown under the title."
|
|
},
|
|
{
|
|
"name": "rows",
|
|
"type": "repeater",
|
|
"label": "Questions",
|
|
"span": "full",
|
|
"prompt": "Add question",
|
|
"titleFrom": "question",
|
|
"maxItems": 3,
|
|
"form": {
|
|
"fields": [
|
|
{
|
|
"name": "question",
|
|
"type": "text",
|
|
"label": "Question",
|
|
"span": "left",
|
|
"required": true
|
|
},
|
|
{
|
|
"name": "kind",
|
|
"type": "dropdown",
|
|
"label": "Kind",
|
|
"span": "right",
|
|
"options": [
|
|
{
|
|
"value": "post",
|
|
"label": "Post"
|
|
},
|
|
{
|
|
"value": "url",
|
|
"label": "Link"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"name": "target",
|
|
"type": "dropdown",
|
|
"label": "Target",
|
|
"span": "left",
|
|
"dependsOn": "kind"
|
|
},
|
|
{
|
|
"name": "visible",
|
|
"type": "checkbox",
|
|
"label": "Visible",
|
|
"span": "right",
|
|
"default": true
|
|
}
|
|
]
|
|
}
|
|
}
|
|
],
|
|
"messages": {
|
|
"create": {
|
|
"other": "New link"
|
|
},
|
|
"update": {
|
|
"other": "Edit link"
|
|
},
|
|
"saved": {
|
|
"other": "Saved"
|
|
},
|
|
"deleteConfirm": {
|
|
"other": "Delete this record?"
|
|
},
|
|
"deleted": {
|
|
"other": "Record deleted"
|
|
},
|
|
"preview": {
|
|
"other": "Link details"
|
|
},
|
|
"edit": {
|
|
"other": "Edit link"
|
|
}
|
|
},
|
|
"redirects": {
|
|
"default": "acme/companions/links",
|
|
"create": {
|
|
"redirect": "acme/companions/links/:id",
|
|
"redirectClose": "acme/companions/links"
|
|
},
|
|
"update": {
|
|
"redirect": "acme/companions/links",
|
|
"redirectClose": "acme/companions/links"
|
|
}
|
|
},
|
|
"meta": {
|
|
"locale": "en"
|
|
},
|
|
"assets": {
|
|
"scripts": [],
|
|
"styles": []
|
|
}
|
|
},
|
|
"meta": {
|
|
"locale": "en"
|
|
}
|
|
}
|