import { ActionIcon, Group, Loader, ScrollArea, Stack, Table, Title, Tooltip } from "@mantine/core"; import { t } from "@/config/i18n"; import { createProduct, editProduct, getProducts } from "@/services/api"; import { IconPlus } from "@tabler/icons-react"; import ProductRow from "@/components/Products/Row"; import { useLocation, useNavigate, useSearchParams } from "react-router"; import { ProductModal } from "@/components/Products/Modal"; import { useCallback, useMemo } from "react"; import { productCreateFromProductInputs, type Product, type ProductInputs } from "@/services/resources/products"; import ProductsFilters from "@/components/Products/Filter"; export default function Products() { const [ searchParams, setSearchParams ] = useSearchParams(); const location = useLocation(); const navigate = useNavigate(); const isCreate = location.pathname === "/dashboard/products/create"; const isEdit = location.pathname.includes("/edit"); const closeModal = () => { navigate("/dashboard/products"); }; const {data: products, isPending} = getProducts(searchParams); const {data: allProducts } = getProducts(); const names = useMemo(() => { return allProducts?.map((product: Product) => (product.name)) .filter((season, index, array) => array.indexOf(season) === index) }, [allProducts]) const productors = useMemo(() => { return allProducts?.map((form: Product) => (form.productor.name)) .filter((productor, index, array) => array.indexOf(productor) === index) }, [allProducts]) const createProductMutation = createProduct(); const editProductMutation = editProduct(); const handleCreateProduct = useCallback(async (product: ProductInputs) => { await createProductMutation.mutateAsync(productCreateFromProductInputs(product)); closeModal(); }, [createProductMutation]); const handleEditProduct = useCallback(async (product: ProductInputs, id?: number) => { if (!id) return; await editProductMutation.mutateAsync({ id: id, product: product }); closeModal(); }, []); const onFilterChange = useCallback((values: string[], filter: string) => { setSearchParams(prev => { const params = new URLSearchParams(prev); params.delete(filter); values.forEach(value => { params.append(filter, value); }); return params; }); }, [searchParams, setSearchParams]) if (!products || isPending) return return ( {t("all products", {capfirst: true})} { e.stopPropagation(); navigate(`/dashboard/products/create`); }} > {t("name", {capfirst: true})} {t("type", {capfirst: true})} {t("price", {capfirst: true})} {t("priceKg", {capfirst: true})} {t("weight", {capfirst: true})} {t("unit", {capfirst: true})} {t("actions", {capfirst: true})} { products.map((product) => ( )) }
); }