members.registrations
adminRoute /mitglieder/anmeldungen/:id · 7 components: page-header, chip-group, list, empty-state, kv, alert, button · actions: approve (irreversible), reject (reversible), edit (safe)
Screen definition
{
"$schema": "../../packages/ui/screens/screen.schema.json",
"id": "members.registrations",
"version": 1,
"app": "admin",
"route": "/mitglieder/anmeldungen/:id",
"title": "Anmeldungen",
"nav": { "label": "Mitglieder", "icon": "users", "order": 2, "tab": true },
"requires": ["members.registrations"],
"data": {
"registrations": { "source": "members.registrations.list", "params": { "status": { "$bind": "params.status" } } },
"selected": { "source": "members.registrations.get", "params": { "id": { "$bind": "params.id" } } }
},
"actions": {
"approve": {
"handler": "members.approveRegistration",
"risk": "irreversible",
"confirm": {
"title": { "$text": "{selected.name} freigeben?" },
"body": "Danach geschieht Folgendes:",
"consequences": { "$bind": "selected.approvalEffects" },
"confirmLabel": "Freigeben",
"tone": "primary"
},
"success": { "$text": "{selected.name} freigegeben" }
},
"reject": { "handler": "members.rejectRegistration", "risk": "reversible", "success": "Anmeldung abgelehnt" },
"edit": { "handler": "members.editRegistration", "risk": "safe" }
},
"body": [
{
"component": "page-header",
"data": {
"title": "Anmeldungen",
"meta": { "$text": "{registrations.openCount} warten auf Freigabe · Formular online" },
"actions": [{ "label": "Formular ansehen", "icon": "external-link", "href": "../examples/public-registration.html" }]
}
},
{
"component": "chip-group",
"data": {
"label": "Status",
"mode": "single",
"chips": [
{ "value": "pending", "label": "Offen", "count": { "$bind": "registrations.openCount" }, "pressed": true },
{ "value": "approved", "label": "Freigegeben", "count": { "$bind": "registrations.approvedCount" } },
{ "value": "rejected", "label": "Abgelehnt", "count": { "$bind": "registrations.rejectedCount" } }
]
}
},
{
"layout": "split",
"children": [
{
"component": "list",
"if": { "$bind": "registrations.items.length" },
"data": {
"label": "Offene Anmeldungen",
"items": {
"$each": "registrations.items",
"as": "r",
"map": {
"id": { "$bind": "r.id" },
"title": { "$bind": "r.name" },
"meta": { "$text": "{r.age} Jahre · eingegangen {r.receivedLabel}" },
"href": { "$text": "?screen=members.registrations&id={r.id}" },
"avatar": { "$bind": "r.initials" },
"current": { "$bind": "r.selected" },
"badge": { "$if": { "$bind": "r.flag" }, "then": { "label": { "$bind": "r.flag.label" }, "tone": { "$bind": "r.flag.tone" } } }
}
}
}
},
{
"component": "empty-state",
"if": { "$not": { "$bind": "registrations.items.length" } },
"data": { "icon": "check-circle", "title": "Keine offenen Anmeldungen", "text": "Neue Anmeldungen aus dem Online-Formular erscheinen hier." }
},
{
"layout": "card",
"if": { "$bind": "selected" },
"children": [
{ "component": "page-header", "data": { "title": { "$bind": "selected.name" }, "meta": { "$bind": "selected.statusLabel" } } },
{
"component": "kv",
"data": {
"items": [
{ "term": "Geburtsdatum", "value": { "$text": "{selected.birthDateLabel} ({selected.age} Jahre)" } },
{ "term": "Erziehungsberechtigt", "value": { "$bind": "selected.guardian" } },
{ "term": "Gewünschte Gruppe", "value": { "$bind": "selected.group" } },
{ "term": "Mitgliedschaft", "value": { "$bind": "selected.membership" } },
{ "term": "Fotos", "value": { "$bind": "selected.photoConsent" } }
]
}
},
{
"component": "alert",
"if": { "$bind": "selected.suggestion" },
"data": { "tone": "info", "title": { "$bind": "selected.suggestion.title" }, "body": { "$bind": "selected.suggestion.body" } }
},
{
"layout": "cluster",
"justify": "end",
"children": [
{ "component": "button", "data": { "label": "Ablehnen", "variant": "ghost", "action": "reject", "actionId": { "$bind": "selected.id" } } },
{ "component": "button", "data": { "label": "Bearbeiten", "action": "edit", "actionId": { "$bind": "selected.id" } } },
{ "component": "button", "data": { "label": "Freigeben", "variant": "primary", "action": "approve", "actionId": { "$bind": "selected.id" } } }
]
}
]
}
]
}
]
}