"use client"; import { plans_api } from "@/features/plans/lib/api"; import type { Product } from "@/features/plans/lib/data"; import { API_URLS } from "@/shared/config/api/URLs"; import formatPrice from "@/shared/lib/formatPrice"; import { Button } from "@/shared/ui/button"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/shared/ui/select"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/shared/ui/table"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import type { AxiosError } from "axios"; import clsx from "clsx"; import { Edit, Eye, Loader2, Trash } from "lucide-react"; import type { Dispatch, SetStateAction } from "react"; import { toast } from "sonner"; interface Props { products: Product[] | []; isLoading: boolean; isFetching: boolean; isError: boolean; setEditingProduct: Dispatch>; setDetailOpen: Dispatch>; setDialogOpen: Dispatch>; handleDelete: (product: Product) => void; } const ProductTable = ({ products, isLoading, isFetching, isError, setEditingProduct, setDetailOpen, setDialogOpen, handleDelete, }: Props) => { const { data } = useQuery({ queryKey: ["categories"], queryFn: () => { return plans_api.categories({ page: 1, page_size: 1000 }); }, select(data) { return data.data.results; }, }); const { data: unityData } = useQuery({ queryKey: ["unity"], queryFn: () => { return plans_api.unity({ page: 1, page_size: 1000 }); }, select(data) { return data.data.results; }, }); const queryClient = useQueryClient(); const { mutate: updated } = useMutation({ mutationFn: ({ body, id }: { id: string; body: FormData }) => plans_api.update({ body, id }), onSuccess() { toast.success("Mahsulot statusi o'zgardi", { richColors: true, position: "top-center", }); queryClient.refetchQueries({ queryKey: ["product_list"] }); setDialogOpen(false); }, onError: (err: AxiosError) => { toast.error((err.response?.data as string) || "Xatolik yuz berdi", { richColors: true, position: "top-center", }); }, }); const handleStatusChange = async ( product: string, status: "true" | "false", ) => { const formData = new FormData(); formData.append("is_active", status); updated({ body: formData, id: product }); }; if (isLoading || isFetching) { return (
); } if (isError) { return (
Maʼlumotlarni yuklashda xatolik yuz berdi
); } return (
ID Rasmi Nomi (UZ) Nomi (RU) Tavsif (UZ) Tavsif (RU) Kategoriya Birligi Brendi Narx Status Harakatlar {products.map((product, index) => { const cat = data?.find((c) => c.id === product.category); const unity = unityData?.find((u) => u.id === product.unity); return ( {index + 1} {product.name_uz} {product.name_uz} {product.name_ru} {product.description_uz.slice(0, 15)}... {product.description_ru.slice(0, 15)}... {cat?.name_uz} {unity?.name_uz} {product.brand} {formatPrice(product.price, true)} ); })} {products.length === 0 && ( Mahsulotlar topilmadi )}
); }; export default ProductTable;