diff --git a/src/components/ImportProductModal.tsx b/src/components/ImportProductModal.tsx index 003011d..88b2251 100644 --- a/src/components/ImportProductModal.tsx +++ b/src/components/ImportProductModal.tsx @@ -1,9 +1,7 @@ import React, { useState } from 'react'; import { X, Save, AlertCircle } from 'lucide-react'; import { CatalogueProduct, ImportCatalogueProductRequest } from '../services/catalogueApi'; -import { useProductSubcategories } from '../hooks/useCatalogueImport'; -import { useFiestaProductCategories } from '../services/fiestaQueries'; -import { str as fstr } from '../services/fiestaApi'; +import { useProductSubcategories, useTenantCategories } from '../hooks/useCatalogueImport'; interface ImportProductModalProps { product: CatalogueProduct; @@ -27,14 +25,14 @@ export default function ImportProductModal({ const [taxPercent, setTaxPercent] = useState('0'); const [quantity, setQuantity] = useState('1'); - const { data: categoriesData = [], isLoading: isLoadingCategories } = useFiestaProductCategories(); - const categories = categoriesData.map((c: any) => ({ - categoryid: Number(c.categoryid), - categoryname: fstr(c.categoryname), - })); + // Categories this tenant's own products actually use — the global + // categories list is missing categoryids that are nonetheless in real use. + const { data: categories = [], isLoading: isLoadingCategories } = useTenantCategories(tenantid); // Subcategories are scoped to the selected category, so a product can't be // tagged with a subcategory that doesn't actually belong to its category. + // Optional: many subcategories are unowned/shared and a product can be + // imported without one (falls back to "Uncategorized" in subcategory views). const { data: subcategories = [], isLoading: isLoadingSubcats } = useProductSubcategories( tenantid, categoryId ? Number(categoryId) : undefined, @@ -42,7 +40,7 @@ export default function ImportProductModal({ const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); - if (!categoryId || !subcategoryId || !retailPrice || !productCost) { + if (!categoryId || !retailPrice || !productCost) { alert("Please fill in all required fields."); return; } @@ -53,7 +51,7 @@ export default function ImportProductModal({ brand: product.brand, catalogueid: product.id, categoryid: Number(categoryId), - subcategoryid: Number(subcategoryId), + subcategoryid: subcategoryId ? Number(subcategoryId) : 0, quantity: Number(quantity), stocktype: "in", status: "Active", @@ -112,7 +110,7 @@ export default function ImportProductModal({ )}
- + {!categoryId ? (
Select a category first
) : isLoadingSubcats ? ( @@ -122,9 +120,8 @@ export default function ImportProductModal({ value={subcategoryId} onChange={e => setSubcategoryId(e.target.value)} className="w-full px-3 py-2 border border-slate-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-purple-500/20 focus:border-purple-500 transition-colors bg-white" - required > - + {subcategories.map((s: any) => (