import React, { useState, useEffect } from 'react'; import Grid from '@mui/material/Grid'; import ShipmentPanel from '../components/ShipmentPanel'; import ShipmentDetails from '../components/ShipmentDetails'; import ShipmentForm from '../components/ShipmentForm'; import { Dewar, OpenAPI, ContactPerson, ShipmentsService } from '../../openapi'; type ShipmentViewProps = React.PropsWithChildren>; const API_BASE_URL = 'http://127.0.0.1:8000'; OpenAPI.BASE = API_BASE_URL; // Setting API base URL const ShipmentView: React.FC = () => { const [isCreatingShipment, setIsCreatingShipment] = useState(false); const [selectedShipment, setSelectedShipment] = useState(null); const [selectedDewar, setSelectedDewar] = useState(null); const [shipments, setShipments] = useState([]); const [error, setError] = useState(null); const [defaultContactPerson, setDefaultContactPerson] = useState(); // Function to fetch and set shipments const fetchAndSetShipments = async () => { try { const shipmentsData: ShipmentsService[] = await ShipmentsService.fetchShipmentsShipmentsGet(); shipmentsData.sort((a, b) => new Date(b.shipment_date).getTime() - new Date(a.shipment_date).getTime()); setShipments(shipmentsData); console.log('Fetched and set shipments:', shipmentsData); } catch (error) { console.error('Failed to fetch shipments:', error); setError('Failed to fetch shipments. Please try again later.'); } }; // Function to fetch the default contact person const fetchDefaultContactPerson = async () => { try { const contacts: ContactPerson[] = await ShipmentsService.getShipmentContactPersonsShipmentsContactPersonsGet(); setDefaultContactPerson(contacts[0]); } catch (error) { console.error('Failed to fetch contact persons:', error); setError('Failed to load contact persons. Please try again later.'); } }; // Use effects to fetch data on component mount useEffect(() => { fetchAndSetShipments(); fetchDefaultContactPerson(); }, []); useEffect(() => { console.log('Updated shipments:', shipments); }, [shipments]); // Handlers for selecting shipment and canceling form const handleSelectShipment = (shipment: ShipmentsService | null) => { setSelectedShipment(shipment); setIsCreatingShipment(false); }; const handleCancelShipmentForm = () => { setIsCreatingShipment(false); }; // Render the shipment content based on state const renderShipmentContent = () => { if (isCreatingShipment) { return ( ); } if (selectedShipment) { return ( ); } return
No shipment details available.
; }; // Render the main layout return ( {renderShipmentContent()} ); }; export default ShipmentView;