import React, { useState, useEffect } from "react"; import { View, ScrollView, Pressable, ActivityIndicator } from "react-native"; import { useSirouRouter } from "@sirou/react-native"; import { AppRoutes } from "@/lib/routes"; import { Stack, useLocalSearchParams } from "expo-router"; import { Text } from "@/components/ui/text"; import { Button } from "@/components/ui/button"; import { Card } from "@/components/ui/card"; import { FileText, Calendar, Share2, Download, ArrowLeft, ExternalLink, } from "@/lib/icons"; import { ScreenWrapper } from "@/components/ScreenWrapper"; import { ShadowWrapper } from "@/components/ShadowWrapper"; import { StandardHeader } from "@/components/StandardHeader"; import { api } from "@/lib/api"; import { toast } from "@/lib/toast-store"; export default function InvoiceDetailScreen() { const nav = useSirouRouter(); const { id } = useLocalSearchParams(); const [loading, setLoading] = useState(true); const [invoice, setInvoice] = useState(null); useEffect(() => { fetchInvoice(); }, [id]); const fetchInvoice = async () => { try { setLoading(true); const data = await api.invoices.getById({ params: { id: id as string } }); setInvoice(data); } catch (error: any) { console.error("[InvoiceDetail] Error:", error); toast.error("Error", "Failed to load invoice details"); } finally { setLoading(false); } }; if (loading) { return ( ); } if (!invoice) { return ( Invoice not found ); } return ( {/* Status Hero Card */} {invoice.status || "Pending"} Total Amount ${Number(invoice.amount).toLocaleString()} Due {new Date(invoice.dueDate).toLocaleDateString()} #{invoice.invoiceNumber || id} {/* Recipient & Category — inline info strip */} Recipient {invoice.customerName || "—"} Category General {/* Items / Billing Summary */} Billing Summary Subtotal $ {( Number(invoice.amount) - (Number(invoice.taxAmount) || 0) ).toLocaleString()} {Number(invoice.taxAmount) > 0 && ( Tax + ${Number(invoice.taxAmount).toLocaleString()} )} Total Balance ${Number(invoice.amount).toLocaleString()} {/* Notes Section (New) */} {invoice.notes && ( Additional Notes {invoice.notes} )} {/* Timeline Section (New) */} Created {new Date(invoice.createdAt).toLocaleString()} Last Updated {new Date(invoice.updatedAt).toLocaleString()} {/* Actions */} ); }