"use client"; import { useEffect, useState } from "react"; import { TextField, SelectField, useToast } from "@nexarch/shl"; import { ApiError, Group, Role, addGroupMember, createGroup, fetchGroups, removeGroupMember, setGroupRole, } from "../../lib/api"; export default function GroupsPage() { const { push } = useToast(); const [groups, setGroups] = useState([]); const [loadError, setLoadError] = useState(null); const reload = () => fetchGroups() .then(setGroups) .catch(() => setLoadError("Gruppen konnten nicht geladen werden. Sind Sie als Tenant-Admin angemeldet?")); useEffect(() => { reload(); }, []); const [newGroupName, setNewGroupName] = useState(""); const [createError, setCreateError] = useState(null); async function onCreate(event: React.FormEvent) { event.preventDefault(); setCreateError(null); try { await createGroup(newGroupName); setNewGroupName(""); push("Gruppe angelegt.", "success"); await reload(); } catch (err) { setCreateError(err instanceof ApiError ? err.message : "Gruppe konnte nicht angelegt werden."); } } if (loadError) { return (

{loadError}

); } return (

Gruppen & Abteilungen

Neue Gruppe anlegen

setNewGroupName(e.target.value)} /> {createError && (

{createError}

)}

Bestehende Gruppen

{groups.length === 0 ? (

Keine Gruppen vorhanden.

) : ( groups.map((g) => push(t, "success")} />) )}
); } function GroupCard({ group, onChanged, onNotice, }: { group: Group; onChanged: () => void; onNotice: (text: string) => void; }) { const [role, setRole] = useState(group.Role || "user"); const [newMemberId, setNewMemberId] = useState(""); const [error, setError] = useState(null); async function onSetRole() { setError(null); try { await setGroupRole(group.ID, role); onNotice("Gruppenrolle gesetzt."); onChanged(); } catch (err) { setError(err instanceof ApiError ? err.message : "Gruppenrolle konnte nicht gesetzt werden."); } } async function onAddMember(event: React.FormEvent) { event.preventDefault(); setError(null); try { await addGroupMember(group.ID, newMemberId); setNewMemberId(""); onNotice("Mitglied hinzugefügt."); onChanged(); } catch (err) { setError(err instanceof ApiError ? err.message : "Mitglied konnte nicht hinzugefügt werden."); } } async function onRemoveMember(userId: string) { setError(null); try { await removeGroupMember(group.ID, userId); onNotice("Mitglied entfernt."); onChanged(); } catch (err) { setError(err instanceof ApiError ? err.message : "Mitglied konnte nicht entfernt werden."); } } return (

{group.Name}

setRole(e.target.value as Role)}>

Mitglieder

{group.members.length === 0 ? (

Keine Mitglieder.

) : (
    {group.members.map((userId) => (
  • {userId}{" "}
  • ))}
)}
setNewMemberId(e.target.value)} /> {error && (

{error}

)}
); }