feat(16-04): rebuild GroupFormModal to three states without AD binding

- Remove AD radio-selection block, discovery effect/state, and the
  two-step create-then-PATCH-bind flow from GroupFormModal.tsx (D-07):
  a local group can no longer be bound to an AD group from this dialog.
- Add locked name field with provenance hint + AD-DN read-only line and
  an editable internalName field for imported groups (D-03/D-04); create
  state gets a hint linking to the LDAP import area.
- Visible save-error line (never a silent catch{}) that distinguishes a
  409 name collision from a generic failure; dialog stays open, inputs
  are preserved.
- Add Group.internalName to the page.tsx interface now (Rule 3 — the
  modal cannot typecheck without it; Task 2 adds the display-cell usage).
- Add seven new admin.groups i18n keys to de.json/en.json (orphaned
  ldapBind.* keys removed in Task 3).
This commit is contained in:
2026-08-06 16:28:07 +02:00
parent 5a687a9d01
commit 30affbbc7e
4 changed files with 85 additions and 169 deletions
+7
View File
@@ -402,7 +402,14 @@
"actions": "Aktionen",
"membersButton": "Mitglieder",
"saveError": "Gruppe konnte nicht gespeichert werden. Bitte erneut versuchen.",
"saveErrorNameTaken": "Der Name ist bereits vergeben.",
"deleteError": "Gruppe konnte nicht gelöscht werden. Bitte erneut versuchen.",
"nameLockedHint": "Von der AD-Gruppe übernommen. Wird beim nächsten Sync automatisch aktualisiert.",
"adDnLabel": "AD-DN: {ldapDn}",
"internalName": "Interner Name",
"internalNameHint": "Wird von der Synchronisation nie verändert. Bleibt das Feld leer, zeigt die Oberfläche stattdessen den AD-Namen.",
"createLdapHint": "AD-Gruppen werden im LDAP-Bereich importiert, nicht hier angelegt.",
"goToLdap": "Zum LDAP-Bereich",
"ldapBind": {
"hint": "Wähle eine AD-Gruppe aus der Liste, um die Mitgliedschaft automatisch zu synchronisieren.",
"bound": "Gebunden an: {ldapDn}",