'use client' import { use } from 'react' import { useRouter } from 'next/navigation' import { trpc } from '@/lib/trpc-client' import { getTrpcErrorMessage } from '@/lib/trpc-error' import Link from 'next/link' import { useState, useEffect } from 'react' import { SPARTEN, MEMBER_STATUS_LABELS } from '@innungsapp/shared' import { Trash2 } from 'lucide-react' export default function MitgliedEditPage({ params, }: { params: Promise<{ id: string }> }) { const { id } = use(params) const router = useRouter() const { data: member, isLoading } = trpc.members.byId.useQuery({ id }) const updateMutation = trpc.members.update.useMutation({ onSuccess: () => router.push('/dashboard/mitglieder'), }) const deleteMutation = trpc.members.delete.useMutation({ onSuccess: () => router.push('/dashboard/mitglieder'), }) const resendMutation = trpc.members.resendInvite.useMutation() const [form, setForm] = useState({ name: '', betrieb: '', sparte: '', ort: '', telefon: '', email: '', status: 'aktiv' as 'aktiv' | 'ruhend' | 'ausgetreten', istAusbildungsbetrieb: false, seit: undefined as number | undefined, role: 'member' as 'member' | 'admin', password: '', }) const [isChangingPassword, setIsChangingPassword] = useState(false) const [showConfirmDelete, setShowConfirmDelete] = useState(false) useEffect(() => { if (member) { setForm({ name: member.name || '', betrieb: member.betrieb || '', sparte: member.sparte || '', ort: member.ort || '', telefon: member.telefon ?? '', email: member.email || '', status: (member.status as 'aktiv' | 'ruhend' | 'ausgetreten') || 'aktiv', istAusbildungsbetrieb: member.istAusbildungsbetrieb || false, seit: member.seit ?? undefined, // @ts-ignore role: member.role || 'member', password: '', }) } }, [member]) if (isLoading) return
Wird geladen...
if (!member) return null function handleSubmit(e: React.FormEvent) { e.preventDefault() updateMutation.mutate({ id, data: form }) } const inputClass = 'w-full px-3 py-2 border border-gray-200 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-brand-500 focus:border-transparent' return (
← Zurück /

Mitglied bearbeiten

{/* Invite Status */}

App-Zugang

{member.userId ? 'Mitglied hat sich eingeloggt' : 'Noch nicht eingeladen / eingeloggt'}

{!member.userId && ( )}
{/* Section: Stammdaten */}

Stammdaten

setForm({ ...form, name: e.target.value })} className={inputClass} />
setForm({ ...form, betrieb: e.target.value })} className={inputClass} />
setForm({ ...form, ort: e.target.value })} className={inputClass} />
{/* Section: Kontakt */}

Kontakt

setForm({ ...form, email: e.target.value })} className={inputClass} />
setForm({ ...form, telefon: e.target.value })} className={inputClass} />
{/* Section: Status */}

Status

{isChangingPassword ? (
setForm({ ...form, password: e.target.value })} className={inputClass} />
) : (
)}
setForm({ ...form, seit: e.target.value ? Number(e.target.value) : undefined })} className={inputClass} />
{(updateMutation.error || deleteMutation.error) && (

{getTrpcErrorMessage(updateMutation.error || deleteMutation.error)}

)}
Abbrechen
{/* Danger Zone */}

Mitglied löschen

Dies entfernt das Mitglied permanent. Der App-Zugang wird ebenfalls entzogen. Diese Aktion kann nicht rückgängig gemacht werden.

{showConfirmDelete ? (
) : ( )}
) }