import { useEffect, useState } from 'react' import { useNavigate, useParams } from 'react-router-dom' import { type Assignment, type AssignmentType, type Consultant, getAssignment, updateAssignment, listAssignmentTypes, listConsultants, } from '../db' export default function AssignmentEdit() { const { id } = useParams() const navigate = useNavigate() const assignmentId = Number(id) const [assignment, setAssignment] = useState(null) const [assignmentTypes, setAssignmentTypes] = useState([]) const [allConsultants, setAllConsultants] = useState([]) // Form fields const [assignmentNumber, setAssignmentNumber] = useState('') const [title, setTitle] = useState('') const [client, setClient] = useState('') const [description, setDescription] = useState('') const [assignmentTypeId, setAssignmentTypeId] = useState(0) const [leadName, setLeadName] = useState('') const [status, setStatus] = useState<'active' | 'done'>('active') const [instituteeIds, setInstituteeIds] = useState([]) const [instituteeEnrollments, setInstituteeEnrollments] = useState>([]) const [plannedStart, setPlannedStart] = useState('') const [plannedEnd, setPlannedEnd] = useState('') const [typeChanged, setTypeChanged] = useState(false) const [addInstituteeId, setAddInstituteeId] = useState(0) useEffect(() => { const loadData = async () => { const [a, types, cons] = await Promise.all([ getAssignment(assignmentId), listAssignmentTypes(), listConsultants(), ]) if (!a) return setAssignment(a) setAssignmentTypes(types) setAllConsultants(cons) setAssignmentNumber(a.assignmentNumber ?? '') setTitle(a.title) setClient(a.client) setDescription(a.description ?? '') setAssignmentTypeId(a.assignmentTypeId) setLeadName(a.leadName) setStatus(a.status) setInstituteeIds(a.instituteeIds ?? []) setInstituteeEnrollments(a.instituteeEnrollments ?? []) setPlannedStart(a.plannedStart?.slice(0, 10) ?? '') setPlannedEnd(a.plannedEnd?.slice(0, 10) ?? '') } loadData() }, [assignmentId]) const handleSave = async () => { await updateAssignment(assignmentId, { assignmentNumber: assignmentNumber.trim() || undefined, title, client, description: description.trim() || undefined, assignmentTypeId, leadName, status, instituteeIds, instituteeEnrollments, plannedStart: plannedStart || undefined, plannedEnd: plannedEnd || undefined, }) navigate(`/assignment/${assignmentId}`) } const handleTypeChange = (newTypeId: number) => { if (newTypeId !== assignmentTypeId) setTypeChanged(true) setAssignmentTypeId(newTypeId) } const addInstitutee = () => { if (!addInstituteeId || instituteeIds.includes(addInstituteeId)) return setInstituteeIds(prev => [...prev, addInstituteeId]) setInstituteeEnrollments(prev => [...prev, { instituteeId: addInstituteeId, from: '', to: '' }]) setAddInstituteeId(0) } const removeInstitutee = (cid: number) => { setInstituteeIds(prev => prev.filter(id => id !== cid)) setInstituteeEnrollments(prev => prev.filter(e => e.instituteeId !== cid)) } const updateEnrollment = (cid: number, field: 'from' | 'to', value: string) => { setInstituteeEnrollments(prev => prev.map(e => e.instituteeId === cid ? { ...e, [field]: value } : e) ) } const availableConsultants = allConsultants.filter(c => !instituteeIds.includes(c.id!) && !c.archivedAt) if (!assignment) return
Lädt…
return (
{/* Header */}

Assignment bearbeiten

{/* Formular */}
setAssignmentNumber(e.target.value)} />
setTitle(e.target.value)} />
setClient(e.target.value)} />