import { useState, useEffect } from 'react'; import { ArrowLeft, Filter, Loader2, AlertCircle } from 'lucide-react'; import { useDeliveryStore } from '../stores/deliveryStore'; import { DeliveryList as DeliveryListComponent } from '../components/delivery/DeliveryList'; import { DeliveryForm } from '../components/delivery/DeliveryForm'; import { Button } from '../components/ui/Button'; import { Select } from '../components/ui/Select'; import type { Delivery, PickupLocation } from '../types'; import { pickupLocationLabels } from '../types'; interface DeliveryListPageProps { selectedDate: string; onBack: () => void; } export const DeliveryListPage = ({ selectedDate, onBack }: DeliveryListPageProps) => { const deliveries = useDeliveryStore(state => state.deliveries); const isLoading = useDeliveryStore(state => state.isLoading); const error = useDeliveryStore(state => state.error); const fetchDeliveriesByDate = useDeliveryStore(state => state.fetchDeliveriesByDate); const toggleStatus = useDeliveryStore(state => state.toggleStatus); const deleteDelivery = useDeliveryStore(state => state.deleteDelivery); const updateDelivery = useDeliveryStore(state => state.updateDelivery); const addDelivery = useDeliveryStore(state => state.addDelivery); const clearError = useDeliveryStore(state => state.clearError); // Fetch deliveries when date changes useEffect(() => { fetchDeliveriesByDate(selectedDate); }, [selectedDate, fetchDeliveriesByDate]); const [isFormOpen, setIsFormOpen] = useState(false); const [editingDelivery, setEditingDelivery] = useState(null); const [pickupFilter, setPickupFilter] = useState('all'); // Use all deliveries from store (already filtered by API) const dayDeliveries = deliveries; const filteredDeliveries = pickupFilter === 'all' ? dayDeliveries : dayDeliveries.filter(d => d.pickupLocation === pickupFilter); const pickupOptions: { value: PickupLocation | 'all'; label: string }[] = [ { value: 'all', label: 'Все места загрузки' }, { value: 'warehouse', label: pickupLocationLabels.warehouse }, { value: 'symbat', label: pickupLocationLabels.symbat }, { value: 'nursaya', label: pickupLocationLabels.nursaya }, { value: 'galaktika', label: pickupLocationLabels.galaktika }, ]; const handleStatusChange = async (id: string) => { const delivery = deliveries.find(d => d.id === id); if (delivery) { await toggleStatus(id, delivery.status); } }; const handleEdit = (delivery: Delivery) => { setEditingDelivery(delivery); setIsFormOpen(true); }; const handleDelete = async (id: string) => { if (confirm('Удалить эту доставку?')) { try { await deleteDelivery(id); } catch { // Error is handled by store } } }; const handleSubmit = async (data: Omit) => { try { if (editingDelivery) { await updateDelivery(editingDelivery.id, data); } else { await addDelivery(data); } setEditingDelivery(null); } catch { // Error is handled by store } }; const handleAdd = () => { setEditingDelivery(null); setIsFormOpen(true); }; const handleCloseForm = () => { setIsFormOpen(false); setEditingDelivery(null); }; return (
Всего: {filteredDeliveries.length}