From fd5440c4da12f341723eabbc1d2ef1c85d436d46 Mon Sep 17 00:00:00 2001 From: g Date: Thu, 11 Dec 2025 19:52:43 +0000 Subject: [PATCH] Replace apiRequest with clientFetch across app Refactored all API calls to use the new clientFetch utility instead of apiRequest in dashboard pages, modal components, and profit analytics service. This improves consistency and aligns with updated API handling patterns. --- app/dashboard/categories/page.tsx | 33 ++++++++++++++------- app/dashboard/storefront/page.tsx | 9 ++++-- components/modals/broadcast-dialog.tsx | 9 ++++-- components/modals/product-modal.tsx | 2 +- components/modals/product-selector.tsx | 4 +-- components/modals/profit-analysis-modal.tsx | 4 +-- lib/services/profit-analytics-service.ts | 6 ++-- 7 files changed, 42 insertions(+), 25 deletions(-) diff --git a/app/dashboard/categories/page.tsx b/app/dashboard/categories/page.tsx index 0bf0216..4d53362 100644 --- a/app/dashboard/categories/page.tsx +++ b/app/dashboard/categories/page.tsx @@ -23,7 +23,7 @@ import { AlertDialogHeader, AlertDialogTitle, } from "@/components/ui/alert-dialog"; -import { apiRequest } from "@/lib/api"; +import { clientFetch } from "@/lib/api"; import type { Category } from "@/models/categories"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; @@ -67,7 +67,7 @@ export default function CategoriesPage() { const fetchCategories = async () => { try { - const fetchedCategories = await apiRequest("/categories", "GET"); + const fetchedCategories = await clientFetch("/categories"); setCategories(fetchedCategories); } catch (error) { toast.error("Failed to fetch categories"); @@ -89,10 +89,13 @@ export default function CategoriesPage() { const maxOrder = siblings.reduce((max, cat) => Math.max(max, cat.order || 0), 0); - const response = await apiRequest("/categories", "POST", { - name: newCategoryName, - parentId: selectedParentId || undefined, - order: maxOrder + 1, + const response = await clientFetch("/categories", { + method: "POST", + body: JSON.stringify({ + name: newCategoryName, + parentId: selectedParentId || undefined, + order: maxOrder + 1, + }), }); setCategories([...categories, response]); @@ -106,8 +109,11 @@ export default function CategoriesPage() { const handleUpdateCategory = async (categoryId: string, newName: string) => { try { - const response = await apiRequest(`/categories/${categoryId}`, "PUT", { - name: newName, + const response = await clientFetch(`/categories/${categoryId}`, { + method: "PUT", + body: JSON.stringify({ + name: newName, + }), }); setCategories(categories.map(cat => @@ -124,7 +130,9 @@ export default function CategoriesPage() { if (!categoryToDelete) return; try { - await apiRequest(`/categories/${categoryToDelete._id}`, "DELETE"); + await clientFetch(`/categories/${categoryToDelete._id}`, { + method: "DELETE", + }); setCategories(categories.filter(cat => cat._id !== categoryToDelete._id)); toast.success("Category deleted successfully"); setCategoryToDelete(null); @@ -187,8 +195,11 @@ export default function CategoriesPage() { order: cat.order })); - await apiRequest("/categories/bulk-order", "PUT", { - categories: categoriesToUpdate + await clientFetch("/categories/bulk-order", { + method: "PUT", + body: JSON.stringify({ + categories: categoriesToUpdate + }), }); } catch (error) { toast.error("Failed to update category order"); diff --git a/app/dashboard/storefront/page.tsx b/app/dashboard/storefront/page.tsx index 6eb9bda..e598ca7 100644 --- a/app/dashboard/storefront/page.tsx +++ b/app/dashboard/storefront/page.tsx @@ -7,7 +7,7 @@ import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { Save, Send, Key, MessageSquare, Shield, Globe, Wallet } from "lucide-react"; -import { apiRequest } from "@/lib/api"; +import { clientFetch } from "@/lib/api"; import { toast } from "sonner"; import BroadcastDialog from "@/components/modals/broadcast-dialog"; import Dashboard from "@/components/dashboard/dashboard"; @@ -115,7 +115,7 @@ export default function StorefrontPage() { const fetchStorefront = async () => { try { setLoading(true); - const data = await apiRequest("/storefront"); + const data = await clientFetch("/storefront"); setStorefront({ pgpKey: data.pgpKey || "", welcomeMessage: data.welcomeMessage || "", @@ -154,7 +154,10 @@ export default function StorefrontPage() { const saveStorefront = async () => { try { setSaving(true); - await apiRequest("/storefront", "PUT", storefront); + await clientFetch("/storefront", { + method: "PUT", + body: JSON.stringify(storefront), + }); toast.success("Storefront updated successfully!"); } catch (error) { toast.error("Failed to update storefront."); diff --git a/components/modals/broadcast-dialog.tsx b/components/modals/broadcast-dialog.tsx index 50a19ae..6190220 100644 --- a/components/modals/broadcast-dialog.tsx +++ b/components/modals/broadcast-dialog.tsx @@ -131,9 +131,12 @@ export default function BroadcastDialog({ open, setOpen }: BroadcastDialogProps) response = await res.json(); } else { - response = await apiRequest("/storefront/broadcast", "POST", { - message: broadcastMessage, - productIds: selectedProducts + response = await clientFetch("/storefront/broadcast", { + method: "POST", + body: JSON.stringify({ + message: broadcastMessage, + productIds: selectedProducts + }), }); } diff --git a/components/modals/product-modal.tsx b/components/modals/product-modal.tsx index dda246b..cf3122e 100644 --- a/components/modals/product-modal.tsx +++ b/components/modals/product-modal.tsx @@ -20,7 +20,7 @@ import type { ProductModalProps, ProductData } from "@/lib/types"; import { toast } from "sonner"; import type React from "react"; import { Plus } from "lucide-react"; -import { apiRequest } from "@/lib/api"; +import { clientFetch } from "@/lib/api"; import { Switch } from "@/components/ui/switch"; type CategorySelectProps = { diff --git a/components/modals/product-selector.tsx b/components/modals/product-selector.tsx index b32a282..9695d0b 100644 --- a/components/modals/product-selector.tsx +++ b/components/modals/product-selector.tsx @@ -6,7 +6,7 @@ import { Input } from "@/components/ui/input"; import { Checkbox } from "@/components/ui/checkbox"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Search, Package } from "lucide-react"; -import { apiRequest } from "@/lib/api"; +import { clientFetch } from "@/lib/api"; interface Product { _id: string; @@ -30,7 +30,7 @@ export default function ProductSelector({ selectedProducts, onSelectionChange }: useEffect(() => { const fetchProducts = async () => { try { - const fetchedProducts = await apiRequest('/products/for-selection', 'GET'); + const fetchedProducts = await clientFetch('/products/for-selection'); setProducts(fetchedProducts); } catch (error) { console.error('Error fetching products:', error); diff --git a/components/modals/profit-analysis-modal.tsx b/components/modals/profit-analysis-modal.tsx index 83e04fd..0bf0b1e 100644 --- a/components/modals/profit-analysis-modal.tsx +++ b/components/modals/profit-analysis-modal.tsx @@ -7,7 +7,7 @@ import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { TrendingUp, TrendingDown, Calculator, DollarSign } from "lucide-react"; import { toast } from "sonner"; -import { apiRequest } from "@/lib/api"; +import { clientFetch } from "@/lib/api"; interface ProfitAnalysisModalProps { open: boolean; @@ -57,7 +57,7 @@ export const ProfitAnalysisModal: React.FC = ({ const fetchProfitAnalysis = async () => { try { setLoading(true); - const response = await apiRequest(`/products/${productId}/profit-analysis`); + const response = await clientFetch(`/products/${productId}/profit-analysis`); setProfitData(response); } catch (error) { console.error("Error fetching profit analysis:", error); diff --git a/lib/services/profit-analytics-service.ts b/lib/services/profit-analytics-service.ts index b9c16d3..23d42ca 100644 --- a/lib/services/profit-analytics-service.ts +++ b/lib/services/profit-analytics-service.ts @@ -1,4 +1,4 @@ -import { apiRequest } from '../api'; +import { clientFetch } from '../api'; export interface ProfitOverview { period: string; @@ -63,7 +63,7 @@ export const getProfitOverview = async ( url += `?period=${period}`; } - return apiRequest(url); + return clientFetch(url); }; export const getProfitTrends = async ( @@ -82,5 +82,5 @@ export const getProfitTrends = async ( url += `?period=${period}`; } - return apiRequest(url); + return clientFetch(url); };