import { useState, useEffect } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { cancellationPeriodApi } from '../../services/api'; import { useAuth } from '../../context/AuthContext'; import Card from '../../components/ui/Card'; import Button from '../../components/ui/Button'; import Input from '../../components/ui/Input'; import Modal from '../../components/ui/Modal'; import Badge from '../../components/ui/Badge'; import { Plus, Edit, Trash2, ArrowLeft } from 'lucide-react'; import { Link } from 'react-router-dom'; import type { CancellationPeriod } from '../../types'; export default function CancellationPeriodList() { const [showModal, setShowModal] = useState(false); const [editingPeriod, setEditingPeriod] = useState(null); const [showInactive, setShowInactive] = useState(false); const { hasPermission } = useAuth(); const queryClient = useQueryClient(); const { data, isLoading } = useQuery({ queryKey: ['cancellation-periods', showInactive], queryFn: () => cancellationPeriodApi.getAll(showInactive), }); const deleteMutation = useMutation({ mutationFn: cancellationPeriodApi.delete, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['cancellation-periods'] }); }, }); const handleEdit = (period: CancellationPeriod) => { setEditingPeriod(period); setShowModal(true); }; const handleClose = () => { setShowModal(false); setEditingPeriod(null); }; return (

Kündigungsfristen

{hasPermission('platforms:create') && ( )}
Code-Format: Zahl + Buchstabe (T=Tage, M=Monate, J=Jahre)
Beispiele: 14T = 14 Tage, 3M = 3 Monate, 1J = 1 Jahr
{isLoading ? (
Laden...
) : data?.data && data.data.length > 0 ? (
{data.data.map((period) => ( ))}
Code Beschreibung Status Aktionen
{period.code} {period.description} {period.isActive ? 'Aktiv' : 'Inaktiv'}
{hasPermission('platforms:update') && ( )} {hasPermission('platforms:delete') && ( )}
) : (
Keine Kündigungsfristen vorhanden.
)}
); } function CancellationPeriodModal({ isOpen, onClose, period, }: { isOpen: boolean; onClose: () => void; period: CancellationPeriod | null; }) { const queryClient = useQueryClient(); const [formData, setFormData] = useState({ code: '', description: '', isActive: true, }); // Reset form when modal opens or period changes useEffect(() => { if (isOpen) { if (period) { setFormData({ code: period.code, description: period.description, isActive: period.isActive, }); } else { setFormData({ code: '', description: '', isActive: true }); } } }, [isOpen, period]); const createMutation = useMutation({ mutationFn: cancellationPeriodApi.create, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['cancellation-periods'] }); onClose(); setFormData({ code: '', description: '', isActive: true }); }, }); const updateMutation = useMutation({ mutationFn: (data: Partial) => cancellationPeriodApi.update(period!.id, data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['cancellation-periods'] }); onClose(); }, }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (period) { updateMutation.mutate(formData); } else { createMutation.mutate(formData); } }; const isLoading = createMutation.isPending || updateMutation.isPending; return (
setFormData({ ...formData, code: e.target.value.toUpperCase() })} required placeholder="z.B. 14T, 3M, 1J" /> setFormData({ ...formData, description: e.target.value })} required placeholder="z.B. 14 Tage, 3 Monate, 1 Jahr" /> {period && ( )}
); }