feat(sprint-5): Phase 6 — Staff management UI (list, invite, permissions, revoke)

- /settings/staff: staff account table with role badges + permission chips
- Invite sheet: email + role template + 8 granular permission checkboxes
- Edit permissions dialog with optimistic update
- Revoke access with AlertDialog confirmation
- React Query hooks wired (useStaffListQuery, mutations)
- Full i18n (de/en), mock fallback, loading skeletons
- Sidebar nav updated: Personal → /settings/staff with UserCog icon
- Added @radix-ui/react-checkbox + Checkbox UI component
This commit is contained in:
Patrick Plate
2026-06-12 20:32:54 +02:00
parent ed1efccc90
commit 2cc8c89944
9 changed files with 941 additions and 3 deletions
+39
View File
@@ -293,6 +293,45 @@
"footerText": "Cannabis cultivation club — Secure member management",
"adminLogin": "Go to Admin Login"
},
"staff": {
"title": "Staff",
"invite": "Invite New Member",
"name": "Name",
"email": "Email",
"role": "Role",
"permissions": "Permissions",
"status": "Status",
"actions": "Actions",
"active": "Active",
"revoked": "Revoked",
"invited": "Invited",
"editPermissions": "Edit Permissions",
"revokeAccess": "Revoke Access",
"revokeConfirm": "Really revoke access for {name}? The staff member will no longer be able to sign in.",
"revokeSuccess": "Access revoked.",
"inviteTitle": "Invite Staff Member",
"inviteDesc": "Invite a new team member via email and assign permissions.",
"inviteEmail": "Email address",
"inviteRole": "Role template",
"roleAusgabe": "Distribution",
"roleLager": "Stock",
"roleVorstand": "Board",
"roleCustom": "Custom",
"inviteSend": "Send Invitation",
"inviteSuccess": "Invitation sent to {email}.",
"permRecordDistribution": "Record Distribution",
"permViewMemberList": "View Member List",
"permViewMemberQuota": "View Quota",
"permAddMember": "Add Members",
"permViewStock": "View Stock",
"permRecordStockIn": "Record Stock In",
"permViewComplianceReport": "View Reports",
"permManageGrowCalendar": "Manage Grow Calendar",
"savePermissions": "Save",
"permissionsSaved": "Permissions updated.",
"cancel": "Cancel",
"noStaff": "No staff members yet."
},
"api": {
"loading": "Loading...",
"error": "Failed to load data.",