// app/(app)/users/components/AssignGroupForm.tsx 'use client'; import { useState, useTransition } from 'react'; import { useRouter } from 'next/navigation'; import Dropdown from '@/components/ui/Dropdown'; import type { SimpleGroup, UserWithAvatar } from './types'; type Props = { user: UserWithAvatar; defaultGroupId: string | null; allGroups: SimpleGroup[]; }; export default function AssignGroupForm({ user, defaultGroupId, allGroups, }: Props) { const router = useRouter(); const [pending, startTransition] = useTransition(); const [groupId, setGroupId] = useState(defaultGroupId ?? 'none'); async function updateGroup(nextGroupId: string) { setGroupId(nextGroupId); startTransition(async () => { try { const res = await fetch('/api/users/assign-group', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ userId: user.nwkennung, groupId: nextGroupId, }), }); if (!res.ok) { console.error( 'Fehler beim Zuordnen der Gruppe', await res.text(), ); } router.refresh(); } catch (err) { console.error('Fehler beim Zuordnen der Gruppe', err); } }); } const currentLabel = groupId === 'none' ? 'Ohne Gruppe' : allGroups.find((g) => g.id === groupId)?.name ?? 'Gruppe wählen'; return (
updateGroup('none'), }, ...allGroups.map((g) => ({ id: g.id, label: g.name, disabled: pending && groupId === g.id, onClick: () => updateGroup(g.id), })), ], }, ]} /> {pending && ( Speichere … )}
); }