Fix build errors

This commit is contained in:
2025-01-17 14:25:13 -05:00
parent 61abe32c0c
commit 609490895b
2 changed files with 65 additions and 42 deletions

View File

@@ -5,6 +5,8 @@ import {
AccordionItem, AccordionItem,
AccordionTrigger, AccordionTrigger,
} from "@/components/ui/accordion"; } from "@/components/ui/accordion";
import { useQuery } from "@tanstack/react-query";
import config from "@/config";
interface Product { interface Product {
product_id: string; product_id: string;
@@ -24,46 +26,67 @@ interface CategoryMetrics {
total_sold: number; total_sold: number;
avgTotalSold: number; avgTotalSold: number;
avg_price: number; avg_price: number;
products: Product[]; products: string; // This is a JSON string that will be parsed
} }
{data && ( export default function Forecasting() {
<ScrollArea className="h-[600px] w-full rounded-md border p-4"> const { data, isLoading } = useQuery<CategoryMetrics[]>({
<Accordion type="single" collapsible className="w-full"> queryKey: ["forecasting"],
{data.map((category: CategoryMetrics, index: number) => ( queryFn: async () => {
<AccordionItem key={category.category_id} value={category.category_id}> const response = await fetch(`${config.apiUrl}/analytics/forecasting`, {
<AccordionTrigger className="hover:no-underline"> credentials: 'include'
<div className="grid grid-cols-6 w-full text-sm"> });
<div className="text-left font-medium">{category.category_name}</div> if (!response.ok) throw new Error("Failed to fetch forecasting data");
<div className="text-right">{category.num_products}</div> return response.json();
<div className="text-right">{category.avg_daily_sales.toFixed(2)}</div> },
<div className="text-right">{category.total_sold}</div> });
<div className="text-right">${category.avg_price.toFixed(2)}</div>
<div className="text-right">{category.avgTotalSold.toFixed(2)}</div> if (isLoading) {
</div> return <div>Loading forecasting data...</div>;
</AccordionTrigger> }
<AccordionContent>
<div className="space-y-2"> return (
<div className="grid grid-cols-5 text-sm font-medium text-muted-foreground mb-2"> <div className="container mx-auto py-10">
<div>Product</div> {data && (
<div className="text-right">SKU</div> <ScrollArea className="h-[600px] w-full rounded-md border p-4">
<div className="text-right">Stock</div> <Accordion type="single" collapsible className="w-full">
<div className="text-right">Total Sold</div> {data.map((category: CategoryMetrics) => (
<div className="text-right">Avg Price</div> <AccordionItem key={category.category_id} value={category.category_id}>
</div> <AccordionTrigger className="hover:no-underline">
{JSON.parse(category.products).map((product: Product) => ( <div className="grid grid-cols-6 w-full text-sm">
<div key={product.product_id} className="grid grid-cols-5 text-sm"> <div className="text-left font-medium">{category.category_name}</div>
<div className="truncate">{product.name}</div> <div className="text-right">{category.num_products}</div>
<div className="text-right">{product.sku}</div> <div className="text-right">{category.avg_daily_sales.toFixed(2)}</div>
<div className="text-right">{product.stock_quantity}</div> <div className="text-right">{category.total_sold}</div>
<div className="text-right">{product.total_sold}</div> <div className="text-right">${category.avg_price.toFixed(2)}</div>
<div className="text-right">${product.avg_price.toFixed(2)}</div> <div className="text-right">{category.avgTotalSold.toFixed(2)}</div>
</div> </div>
))} </AccordionTrigger>
</div> <AccordionContent>
</AccordionContent> <div className="space-y-2">
</AccordionItem> <div className="grid grid-cols-5 text-sm font-medium text-muted-foreground mb-2">
))} <div>Product</div>
</Accordion> <div className="text-right">SKU</div>
</ScrollArea> <div className="text-right">Stock</div>
)} <div className="text-right">Total Sold</div>
<div className="text-right">Avg Price</div>
</div>
{JSON.parse(category.products).map((product: Product) => (
<div key={product.product_id} className="grid grid-cols-5 text-sm">
<div className="truncate">{product.name}</div>
<div className="text-right">{product.sku}</div>
<div className="text-right">{product.stock_quantity}</div>
<div className="text-right">{product.total_sold}</div>
<div className="text-right">${product.avg_price.toFixed(2)}</div>
</div>
))}
</div>
</AccordionContent>
</AccordionItem>
))}
</Accordion>
</ScrollArea>
)}
</div>
);
}

View File

@@ -1 +1 @@
{"root":["./src/app.tsx","./src/config.ts","./src/main.tsx","./src/vite-env.d.ts","./src/components/analytics/categoryperformance.tsx","./src/components/analytics/priceanalysis.tsx","./src/components/analytics/profitanalysis.tsx","./src/components/analytics/stockanalysis.tsx","./src/components/analytics/vendorperformance.tsx","./src/components/auth/requireauth.tsx","./src/components/dashboard/inventoryhealthsummary.tsx","./src/components/dashboard/inventorystats.tsx","./src/components/dashboard/keymetricscharts.tsx","./src/components/dashboard/lowstockalerts.tsx","./src/components/dashboard/overview.tsx","./src/components/dashboard/recentsales.tsx","./src/components/dashboard/salesbycategory.tsx","./src/components/dashboard/trendingproducts.tsx","./src/components/dashboard/vendorperformance.tsx","./src/components/forecasting/columns.tsx","./src/components/layout/appsidebar.tsx","./src/components/layout/mainlayout.tsx","./src/components/products/productdetail.tsx","./src/components/products/productfilters.tsx","./src/components/products/producttable.tsx","./src/components/products/producttableskeleton.tsx","./src/components/products/productviews.tsx","./src/components/settings/calculationsettings.tsx","./src/components/settings/configuration.tsx","./src/components/settings/datamanagement.tsx","./src/components/settings/performancemetrics.tsx","./src/components/settings/stockmanagement.tsx","./src/components/ui/accordion.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/alert.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/command.tsx","./src/components/ui/date-range-picker.tsx","./src/components/ui/dialog.tsx","./src/components/ui/drawer.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/pagination.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/sheet.tsx","./src/components/ui/sidebar.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/sonner.tsx","./src/components/ui/switch.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/toggle-group.tsx","./src/components/ui/toggle.tsx","./src/components/ui/tooltip.tsx","./src/hooks/use-mobile.tsx","./src/lib/utils.ts","./src/pages/analytics.tsx","./src/pages/categories.tsx","./src/pages/dashboard.tsx","./src/pages/forecasting.tsx","./src/pages/login.tsx","./src/pages/orders.tsx","./src/pages/products.tsx","./src/pages/purchaseorders.tsx","./src/pages/settings.tsx","./src/pages/vendors.tsx","./src/routes/forecasting.tsx","./src/types/products.ts"],"errors":true,"version":"5.6.3"} {"root":["./src/app.tsx","./src/config.ts","./src/main.tsx","./src/vite-env.d.ts","./src/components/analytics/categoryperformance.tsx","./src/components/analytics/priceanalysis.tsx","./src/components/analytics/profitanalysis.tsx","./src/components/analytics/stockanalysis.tsx","./src/components/analytics/vendorperformance.tsx","./src/components/auth/requireauth.tsx","./src/components/dashboard/inventoryhealthsummary.tsx","./src/components/dashboard/inventorystats.tsx","./src/components/dashboard/keymetricscharts.tsx","./src/components/dashboard/lowstockalerts.tsx","./src/components/dashboard/overview.tsx","./src/components/dashboard/recentsales.tsx","./src/components/dashboard/salesbycategory.tsx","./src/components/dashboard/trendingproducts.tsx","./src/components/dashboard/vendorperformance.tsx","./src/components/forecasting/columns.tsx","./src/components/layout/appsidebar.tsx","./src/components/layout/mainlayout.tsx","./src/components/products/productdetail.tsx","./src/components/products/productfilters.tsx","./src/components/products/producttable.tsx","./src/components/products/producttableskeleton.tsx","./src/components/products/productviews.tsx","./src/components/settings/calculationsettings.tsx","./src/components/settings/configuration.tsx","./src/components/settings/datamanagement.tsx","./src/components/settings/performancemetrics.tsx","./src/components/settings/stockmanagement.tsx","./src/components/ui/accordion.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/alert.tsx","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/button.tsx","./src/components/ui/calendar.tsx","./src/components/ui/card.tsx","./src/components/ui/command.tsx","./src/components/ui/date-range-picker.tsx","./src/components/ui/dialog.tsx","./src/components/ui/drawer.tsx","./src/components/ui/dropdown-menu.tsx","./src/components/ui/input.tsx","./src/components/ui/label.tsx","./src/components/ui/pagination.tsx","./src/components/ui/popover.tsx","./src/components/ui/progress.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/select.tsx","./src/components/ui/separator.tsx","./src/components/ui/sheet.tsx","./src/components/ui/sidebar.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/sonner.tsx","./src/components/ui/switch.tsx","./src/components/ui/table.tsx","./src/components/ui/tabs.tsx","./src/components/ui/toggle-group.tsx","./src/components/ui/toggle.tsx","./src/components/ui/tooltip.tsx","./src/hooks/use-mobile.tsx","./src/lib/utils.ts","./src/pages/analytics.tsx","./src/pages/categories.tsx","./src/pages/dashboard.tsx","./src/pages/forecasting.tsx","./src/pages/login.tsx","./src/pages/orders.tsx","./src/pages/products.tsx","./src/pages/purchaseorders.tsx","./src/pages/settings.tsx","./src/pages/vendors.tsx","./src/routes/forecasting.tsx","./src/types/products.ts"],"version":"5.6.3"}