import { useState } from 'react'; import { Button, TextField, MenuItem, Select, FormControl, InputLabel, Grid, Collapse, } from '@mui/material'; import { Add as AddIcon } from '@mui/icons-material'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useNavigate } from 'react-router-dom'; import DashboardLayout from '../components/dashboard/DashboardLayout'; import { PageHeader, FormLayout } from '../components/templates'; import { useNotification } from '../contexts/NotificationContext'; import { issuesApi } from '../services/issues'; import type { CreateIssuePayload } from '../types/issue.types'; export default function IssueNeu() { const navigate = useNavigate(); const queryClient = useQueryClient(); const { showSuccess, showError } = useNotification(); const [form, setForm] = useState({ titel: '', prioritaet: '' }); const [showDescription, setShowDescription] = useState(false); const { data: types = [] } = useQuery({ queryKey: ['issue-types'], queryFn: issuesApi.getTypes, }); const { data: priorities = [] } = useQuery({ queryKey: ['issue-priorities'], queryFn: issuesApi.getPriorities, }); const defaultTypId = types.find(t => t.aktiv)?.id; const defaultPriority = priorities.find(p => p.aktiv)?.schluessel ?? 'mittel'; const createMut = useMutation({ mutationFn: (data: CreateIssuePayload) => issuesApi.createIssue(data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['issues'] }); showSuccess('Issue erstellt'); navigate('/issues'); }, onError: () => showError('Fehler beim Erstellen'), }); const handleSubmit = () => { createMut.mutate({ ...form, typ_id: form.typ_id ?? defaultTypId, prioritaet: form.prioritaet || defaultPriority, }); }; return ( } > setForm({ ...form, titel: e.target.value })} autoFocus /> setForm({ ...form, beschreibung: e.target.value })} /> {!showDescription && ( )} Typ Prioritaet setForm({ ...form, faellig_am: e.target.value || null })} InputLabelProps={{ shrink: true }} /> ); }