- | {user.code} |
{user.displayName} |
{user.email ?? "-"} |
- {user.portalLogin ?? "-"} |
{user.role} |
([]);
+ const [newUser, setNewUser] = useState(emptyUser());
+ const [message, setMessage] = useState(null);
+ const [showValidation, setShowValidation] = useState(false);
+ const isAdmin = user?.role === "ADMIN";
+
+ async function loadUsers() {
+ try {
+ const response = await apiGet("/portal/users");
+ setUsers(response.map(toDraft));
+ setMessage(null);
+ } catch (error) {
+ if (!isAdmin && user?.primaryUser && isAccessDenied(error)) {
+ setUsers([toDraftFromSession(user)]);
+ setMessage(null);
+ return;
+ }
+ throw error;
+ }
+ }
+
+ useEffect(() => {
+ void loadUsers().catch((error) => setMessage((error as Error).message));
+ }, []);
+
+ const primaryUser = useMemo(
+ () => users.find((entry) => entry.primaryUser) ?? null,
+ [users],
+ );
+ const secondaryUsers = useMemo(
+ () => users.filter((entry) => !entry.primaryUser),
+ [users],
+ );
+
+ function updateExistingUser(userId: string, patch: Partial) {
+ setUsers((current) =>
+ current.map((entry) => (entry.id === userId ? { ...entry, ...patch } : entry)),
+ );
+ }
+
+ async function saveUser(draft: UserDraft) {
+ setShowValidation(true);
+ if (!draft.displayName.trim()) {
+ setMessage("Bitte alle Pflichtfelder ausfuellen.");
+ return;
+ }
+
+ try {
+ const saved = await apiPost("/portal/users", toMutation(draft));
+ setUsers((current) =>
+ current.map((entry) => (entry.id === draft.id ? toDraft(saved) : entry)),
+ );
+ setMessage(draft.primaryUser ? "Stammdaten gespeichert." : "Benutzer gespeichert.");
+ } catch (error) {
+ setMessage((error as Error).message);
+ }
+ }
+
+ async function createUser(event: FormEvent) {
+ event.preventDefault();
+ setShowValidation(true);
+ if (!newUser.displayName.trim() || !(newUser.email ?? "").trim() || !newUser.password.trim()) {
+ setMessage("Bitte alle Pflichtfelder ausfuellen.");
+ return;
+ }
+ if (newUser.password !== newUser.passwordRepeat) {
+ setMessage("Die Passwoerter stimmen nicht ueberein.");
+ return;
+ }
+
+ try {
+ await apiPost("/portal/users", toMutation(newUser));
+ setNewUser(emptyUser());
+ setMessage("Benutzer angelegt.");
+ await loadUsers();
+ } catch (error) {
+ setMessage((error as Error).message);
+ }
+ }
+
+ async function removeUser(userId: string) {
+ try {
+ await apiDelete(`/portal/users/${userId}`);
+ setUsers((current) => current.filter((entry) => entry.id !== userId));
+ setMessage("Benutzer geloescht.");
+ void loadUsers().catch(() => undefined);
+ } catch (error) {
+ setMessage((error as Error).message);
+ }
+ }
+
+ return (
+
+
+
+ Verwaltung
+ Benutzer und Stammdaten
+
+ Hier pflegen Sie den Hauptbenutzer Ihres Kontos und legen weitere Benutzer an.
+
+
+
+ {message ? (
+
+ {message}
+
+ ) : null}
+
+
+ {primaryUser ? (
+
+ ) : null}
+
+
+
+
+ Benutzer
+ Benutzer anlegen
+
+
+
+
+
+
+
+
+
+
+ Benutzerliste
+ Bereits angelegte Benutzer
+
+
+
+ {secondaryUsers.length === 0 ? (
+ Noch keine weiteren Benutzer vorhanden.
+ ) : (
+
+ )}
+
+
+ );
+}
|