From cbbe2f83e2caf59cadd28bf7a850d3f1e9c5c438 Mon Sep 17 00:00:00 2001 From: Samandar Turgunboyev Date: Wed, 10 Dec 2025 16:19:05 +0500 Subject: [PATCH] download pdf --- src/features/specification/lib/api.ts | 5 +++ .../specification/ui/DetailViewPage.tsx | 34 ++++++++++++++++--- .../specification/ui/Specification.tsx | 4 +-- vite.config.ts | 2 +- 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/features/specification/lib/api.ts b/src/features/specification/lib/api.ts index e1ffd5f..568cada 100644 --- a/src/features/specification/lib/api.ts +++ b/src/features/specification/lib/api.ts @@ -33,4 +33,9 @@ export const order_api = { const res = await httpClient.patch(`${ORDER}${id}/update/`, body); return res; }, + + async download_pdf(id: number) { + const res = await httpClient.get(`${ORDER}${id}/send_pdf/`); + return res; + }, }; diff --git a/src/features/specification/ui/DetailViewPage.tsx b/src/features/specification/ui/DetailViewPage.tsx index 673453c..8e24747 100644 --- a/src/features/specification/ui/DetailViewPage.tsx +++ b/src/features/specification/ui/DetailViewPage.tsx @@ -5,11 +5,14 @@ import { formatPrice } from "@/shared/lib/formatPrice"; import { Button } from "@/shared/ui/button"; import { DashboardLayout } from "@/widgets/dashboard-layout/ui"; import { useQuery } from "@tanstack/react-query"; -import { Building2, User } from "lucide-react"; +import { Building2, Loader2, User } from "lucide-react"; +import { useEffect, useState } from "react"; import { useParams } from "react-router-dom"; +import { toast } from "sonner"; export function DetailViewPage() { const { id } = useParams(); + const [pdfId, setPdfId] = useState(null); const { data } = useQuery({ queryKey: ["order_list"], @@ -27,9 +30,32 @@ export function DetailViewPage() { }, }); + const { + data: pdf, + isLoading, + isError, + error, + } = useQuery({ + queryKey: ["download_pdf", pdfId], + queryFn: () => order_api.download_pdf(Number(pdfId!)), + enabled: !!pdfId, + }); + + useEffect(() => { + if (isError) { + toast.error(error.message || "Faylni yuklab olishda xatolik yuz berdi", { + richColors: true, + position: "top-center", + }); + } + }, [isError]); + const item = data && data.find((h) => h.id === Number(id)); - const handleDownloadPDF = async () => {}; + const handleDownloadPDF = (id: number) => { + setPdfId(id); + console.log(pdf); + }; if (!item) return
{"Ma'lumot topilmadi"}
; @@ -160,11 +186,11 @@ export function DetailViewPage() { diff --git a/src/features/specification/ui/Specification.tsx b/src/features/specification/ui/Specification.tsx index 5c444f9..8dbf807 100644 --- a/src/features/specification/ui/Specification.tsx +++ b/src/features/specification/ui/Specification.tsx @@ -93,7 +93,7 @@ export function SpecificationPage() { ); const [selectedPharmacy, setSelectedPharmacy] = useState( - data ? data[0].id : "", + data && data.length > 0 ? data[0].id : "", ); // const [selectedPharm, setSelectedPharm] = useState( @@ -104,7 +104,7 @@ export function SpecificationPage() { if (product) { setMedicines(product?.map((m) => ({ ...m, quantity: 0 }))); } - if (data) { + if (data && data.length > 0) { setSelectedPharmacy(data[0].id); } // if (pharmacy) { diff --git a/vite.config.ts b/vite.config.ts index 72d1b0d..0e54ed1 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -17,7 +17,7 @@ export default defineConfig({ port: 5174, host: true, // barcha hostlarga ruxsat allowedHosts: [ - "hampshire-blake-womens-ref.trycloudflare.com", // ngrok host qo'shildi + "hugo-quotes-loved-wiki.trycloudflare.com", // ngrok host qo'shildi ], }, });