import { useEffect, useState } from 'react' import { useSearchParams } from 'react-router-dom' import { FaAngleDown, FaSpinner, FaPlus, FaSliders } from 'react-icons/fa6' import { useWorkorders } from '../hooks/useWorkorders' import { useCustomers } from '../hooks/useCustomers' import TicketCard from '../components/TicketCard' import CreateTicketModal from '../components/CreateTicketModal' import { PageHeader, Card, Button, EmptyState } from '../components/ui' import { STATUS_GROUPS, DEFAULT_STATUS_GROUPS, statusValuesFor, TYPE_FILTERS } from '../lib/ticketStatus' const ALL_GROUPS = STATUS_GROUPS.map((group) => group.id) const linkButton = { fontSize: 12, background: 'none', border: 'none', color: 'var(--accent)', cursor: 'pointer', padding: 0 } // Aus Suchtext, Art, Status-Gruppen und "Nur dringende" die Abfrage fuer useWorkorders bauen. // Sind alle oder keine Status-Gruppen gewaehlt, wird nicht nach Status gefiltert. function toFilters({ search, typeId, groups, urgentOnly }) { const typeFilter = TYPE_FILTERS.find((filter) => filter.id === typeId) || TYPE_FILTERS[0] const allGroups = groups.length === 0 || groups.length === ALL_GROUPS.length return { status: allGroups ? [] : statusValuesFor(groups), type: typeFilter.types || [], excludeType: typeFilter.excludeType, priority: urgentOnly ? [3, 4] : [], search: search.trim() || undefined, woid: undefined, } } const DEFAULT_SELECTION = { search: '', typeId: 'orders', groups: DEFAULT_STATUS_GROUPS, urgentOnly: false } export default function TicketsPage() { const [limit, setLimit] = useState(10) const [filters, setFilters] = useState({ ...toFilters(DEFAULT_SELECTION), limit: 10 }) const [searchText, setSearchText] = useState('') const [typeId, setTypeId] = useState(DEFAULT_SELECTION.typeId) const [groups, setGroups] = useState(DEFAULT_SELECTION.groups) const [urgentOnly, setUrgentOnly] = useState(false) const toggleGroup = (id) => { setGroups((prev) => (prev.includes(id) ? prev.filter((g) => g !== id) : [...prev, id])) } const { workorders, loading, error, updateWorkorder, createWorkorder } = useWorkorders(filters) const { customers } = useCustomers() const [showCreateModal, setShowCreateModal] = useState(false) const [showAdvanced, setShowAdvanced] = useState(false) const [searchParams] = useSearchParams() // Deep-Link aus den Leads: /tickets?woid=123 zeigt genau dieses Ticket, // egal welche Art (auch Akquise) und welcher Status useEffect(() => { const w = searchParams.get('woid') if (!w) return setSearchText(w) setTypeId('all') setGroups(ALL_GROUPS) setFilters((prev) => ({ ...prev, status: [], type: [], excludeType: undefined, priority: [], search: undefined, woid: w })) }, [searchParams]) const applyFilters = (e) => { e?.preventDefault() setFilters((prev) => ({ ...prev, ...toFilters({ search: searchText, typeId, groups, urgentOnly }), limit })) } const handleUpdate = async (id, data) => { await updateWorkorder(id, data) } const handleCreate = async (data) => { const result = await createWorkorder(data) if (result.success) setShowCreateModal(false) return result } const loadMore = () => { const next = limit + 10 setLimit(next) setFilters((prev) => ({ ...prev, limit: next })) } return (