import React, { useEffect, useState } from 'react'; import { Row, Col, Card, Typography, Button, Space, message, Table, Image, Grid, Skeleton } from 'antd'; import { useNavigate, Link } from 'react-router-dom'; import api, { API_BASE_URL } from '../utils/api'; import { colors, spacing, fontSize, buttonStyles, commonStyles } from '../theme'; const { Title } = Typography; const { useBreakpoint } = Grid; const deliveriesColumns = [ { title: 'Date', dataIndex: 'delivery_date', key: 'delivery_date', render: (date) => date ? new Date(date).toLocaleDateString() : 'N/A' }, { title: 'Gallons', dataIndex: 'gallons', key: 'gallons', render: (gallons) => gallons ? `${gallons} gal` : 'N/A' }, { title: 'Price', dataIndex: 'customer_price', key: 'customer_price', render: (price) => price ? `$${price.toFixed(2)}` : 'N/A' }, { title: 'Status', dataIndex: 'delivery_status', key: 'delivery_status', render: (status) => { if (status === 'Pending') return 'pending cc charge'; if (status === 'Finalized') return 'Delivered/Charged'; if (status === 'Waiting') return 'waiting for delivery'; return status; } }, { title: 'Payment Type', dataIndex: 'payment_type', key: 'payment_type' } ]; function Index() { const navigate = useNavigate(); const isLoggedIn = !!localStorage.getItem('token'); const [userData, setUserData] = useState(null); const [deliveries, setDeliveries] = useState([]); const [tankImages, setTankImages] = useState([]); const [pricing, setPricing] = useState(null); const [loadingUser, setLoadingUser] = useState(true); const [loadingDeliveries, setLoadingDeliveries] = useState(true); const [loadingTankImages, setLoadingTankImages] = useState(true); const [loadingPricing, setLoadingPricing] = useState(true); const screens = useBreakpoint(); const fetchTankImages = async (accountNumber) => { setLoadingTankImages(true); try { const response = await api.get(`/auth/tank-images/${accountNumber}`); // Get the latest image set (first one after sorting) const imageGroups = response.data.image_sets.map(set => ({ date: set.date, images: set.images.map(img => `${API_BASE_URL}${img}`) })); // Sort by date descending (newest first) imageGroups.sort((a, b) => { const parseDate = (dateStr) => { if (dateStr.includes('_')) { const [datePart, timePart] = dateStr.split('_'); const [year, month, day] = datePart.split('-'); const [hour, minute, second] = timePart.split('-'); return new Date(year, month - 1, day, hour, minute, second); } else { return new Date(dateStr); } }; return parseDate(b.date) - parseDate(a.date); }); setTankImages(imageGroups[0]?.images || []); } catch (error) { console.error('Failed to load tank images:', error); // No fallback to example images on main page } finally { setLoadingTankImages(false); } }; useEffect(() => { if (isLoggedIn) { const fetchUserData = async () => { setLoadingUser(true); try { const response = await api.get('/auth/me'); setUserData(response.data); await fetchTankImages(response.data.account_number); } catch (error) { message.error('Failed to load user data'); console.error('Error fetching user data:', error); } finally { setLoadingUser(false); } }; const fetchDeliveries = async () => { setLoadingDeliveries(true); try { const response = await api.get('/info/deliveries'); setDeliveries(response.data); } catch (error) { message.error('Failed to load deliveries'); console.error('Error fetching deliveries:', error); } finally { setLoadingDeliveries(false); } }; const fetchPricing = async () => { setLoadingPricing(true); try { const response = await api.get('/info/pricing/current'); setPricing(response.data); } catch (error) { console.error('Failed to load pricing:', error); } finally { setLoadingPricing(false); } }; fetchUserData(); fetchDeliveries(); fetchPricing(); } else { // Reset loading states when not logged in setLoadingUser(false); setLoadingDeliveries(false); setLoadingTankImages(false); setLoadingPricing(false); } }, [isLoggedIn]); if (!isLoggedIn) { return (
Name: {userData.customer_first_name} {userData.customer_last_name}
Address: {userData.customer_address}, {userData.customer_town}, {userData.customer_state} {userData.customer_zip}
Phone: {userData.customer_phone_number}
Email: {userData.email}
> ) : (Failed to load customer information.
)}