/** * TrusteeRolesView * * Rollen-Verwaltung für eine Trustee-Instanz. * Rollen definieren Berechtigungen (admin, operate, userreport). * Hinweis: Nur SysAdmin kann Rollen verwalten. */ import React, { useState, useMemo } from 'react'; import { useTrusteeRoles, useTrusteeRoleOperations, TrusteeRole } from '../../../hooks/useTrustee'; import { useTablePermission } from '../../../hooks/useInstancePermissions'; import { Popup } from '../../../components/UiComponents/Popup/Popup'; import { TrusteeEditForm, FieldConfig } from './components'; import styles from './TrusteeViews.module.css'; export const TrusteeRolesView: React.FC = () => { const { items: roles, loading, error, refetch } = useTrusteeRoles(); const { handleDelete, handleCreate, handleUpdate, deletingItems, creatingItem } = useTrusteeRoleOperations(); const { canCreate, canUpdate, canDelete } = useTablePermission('TrusteeRole'); // Modal State const [isModalOpen, setIsModalOpen] = useState(false); const [editingRole, setEditingRole] = useState(null); const [formError, setFormError] = useState(null); // Feld-Konfiguration für das Formular const fields: FieldConfig[] = useMemo(() => [ { key: 'id', label: 'Rollen-ID', type: 'string', required: true, editable: !editingRole, // Nur bei Create editierbar placeholder: 'z.B. admin, operate, userreport', helpText: 'Eindeutige Rollen-ID (nicht änderbar nach Erstellung)', }, { key: 'desc', label: 'Beschreibung', type: 'textarea', required: true, placeholder: 'Beschreibung der Rolle und ihrer Berechtigungen', }, ], [editingRole]); if (loading) { return
Lade Rollen...
; } if (error) { return
Fehler: {error}
; } const onDelete = async (roleId: string) => { if (window.confirm('Rolle wirklich löschen? Dies ist nur möglich, wenn die Rolle nicht in Verwendung ist.')) { const success = await handleDelete(roleId); if (success) { refetch(); } } }; const onEdit = (role: TrusteeRole) => { setEditingRole(role); setFormError(null); setIsModalOpen(true); }; const onCreate = () => { setEditingRole(null); setFormError(null); setIsModalOpen(true); }; const onCloseModal = () => { setIsModalOpen(false); setEditingRole(null); setFormError(null); }; const onSave = async (data: Partial) => { setFormError(null); try { if (editingRole) { const result = await handleUpdate(editingRole.id, data); if (!result.success) { setFormError(result.error || 'Fehler beim Aktualisieren'); return; } } else { const result = await handleCreate(data); if (!result.success) { setFormError(result.error || 'Fehler beim Erstellen'); return; } } onCloseModal(); refetch(); } catch (err: any) { setFormError(err.message || 'Ein Fehler ist aufgetreten'); } }; return (
{/* Toolbar */}
{canCreate && ( )}
{/* Info */}
Rollen definieren Berechtigungen für Trustee-Zugriffe. Standard-Rollen: admin, operate, userreport.
{/* Tabelle */} {roles.length === 0 ? (

Keine Rollen vorhanden.

) : ( {roles.map((role) => ( ))}
ID Beschreibung Aktionen
{role.id} {role.desc} {canUpdate && ( )} {canDelete && ( )}
)} {/* Create/Edit Modal */} {formError && (
{formError}
)} initialData={editingRole || {}} fields={fields} onSave={onSave} onCancel={onCloseModal} isSaving={creatingItem} isEdit={!!editingRole} saveLabel={editingRole ? 'Aktualisieren' : 'Erstellen'} />
); }; export default TrusteeRolesView;