import { ColumnDef } from "@tanstack/react-table"; import { ArrowUpDown, ChevronDown, ChevronRight } from "lucide-react"; import { Button } from "@/components/ui/button"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; interface Product { pid: string; sku: string; title: string; stock_quantity: number; daily_sales_avg: number; forecast_units: number; forecast_revenue: number; confidence_level: number; } export interface ForecastItem { category: string; categoryPath: string; avgDailySales: number; totalSold: number; numProducts: number; avgPrice: number; avgTotalSold: number; products?: Product[]; } export const columns: ColumnDef[] = [ { id: "expander", header: () => null, cell: ({ row }) => { return row.getCanExpand() ? ( ) : null; }, }, { accessorKey: "category", header: "Category", cell: ({ row }) => (
{row.original.category}
{row.original.categoryPath && (
{row.original.categoryPath}
)}
), }, { accessorKey: "avgDailySales", header: ({ column }) => { return ( ); }, cell: ({ row }) => { const value = row.getValue("avgDailySales") as number; return value?.toFixed(2) || "0.00"; }, }, { accessorKey: "totalSold", header: ({ column }) => { return ( ); }, cell: ({ row }) => { const value = row.getValue("totalSold") as number; return value?.toLocaleString() || "0"; }, }, { accessorKey: "numProducts", header: ({ column }) => { return ( ); }, cell: ({ row }) => { const value = row.getValue("numProducts") as number; return value?.toLocaleString() || "0"; }, }, { accessorKey: "avgTotalSold", header: ({ column }) => { return ( ); }, cell: ({ row }) => { const value = row.getValue("avgTotalSold") as number; return value?.toFixed(2) || "0.00"; }, }, { accessorKey: "avgPrice", header: ({ column }) => { return ( ); }, cell: ({ row }) => { const value = row.getValue("avgPrice") as number; return `$${value?.toFixed(2) || "0.00"}`; }, }, ]; export const renderSubComponent = ({ row }: { row: any }) => { const products = row.original.products || []; return ( Product Stock Daily Sales Forecast Units Forecast Revenue Confidence {products.map((product: Product) => ( {product.title}
{product.sku}
{product.stock_quantity} {product.daily_sales_avg.toFixed(1)} {product.forecast_units.toFixed(1)} {product.forecast_revenue.toFixed(2)} {product.confidence_level.toFixed(1)}%
))}
); };