Files
summercms/admin/tests/fixtures/companions.form-schema.json
Jakub Zych d3bf5d8f86 feat(17-02): repeater field and dependent dropdown states
- 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
2026-10-12 16:08:23 +02:00

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"
}
}