diff --git a/src/features/faq/ui/FaqList.tsx b/src/features/faq/ui/FaqList.tsx index 45fdce3..aa82e91 100644 --- a/src/features/faq/ui/FaqList.tsx +++ b/src/features/faq/ui/FaqList.tsx @@ -11,6 +11,7 @@ import { DialogTitle, DialogTrigger, } from "@/shared/ui/dialog"; +import Pagination from "@/shared/ui/pagination"; import { DialogDescription } from "@radix-ui/react-dialog"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import type { AxiosError } from "axios"; @@ -23,6 +24,8 @@ const FaqList = () => { const [openDelete, setOpenDelete] = useState(false); const [dialogOpen, setDialogOpen] = useState(false); const [editingFaq, setEditingFaq] = useState(null); + const [page, setPage] = useState(1); + const limit = 20; const queryClient = useQueryClient(); const { @@ -31,8 +34,8 @@ const FaqList = () => { isLoading, isFetching, } = useQuery({ - queryKey: ["faqs"], - queryFn: async () => faq_api.getFaqs({ page: 1, page_size: 20 }), + queryKey: ["faqs", page], + queryFn: async () => faq_api.getFaqs({ page: page, page_size: limit }), select(data) { return data.data; }, @@ -104,6 +107,12 @@ const FaqList = () => { setEditingFaq={setEditingFaq} /> + + diff --git a/src/features/order/ui/OrderTable.tsx b/src/features/order/ui/OrderTable.tsx index 8fd2dc7..54fe1fc 100644 --- a/src/features/order/ui/OrderTable.tsx +++ b/src/features/order/ui/OrderTable.tsx @@ -108,7 +108,7 @@ const OrderTable = ({ } return ( -
+
diff --git a/src/features/plans/ui/PalanTable.tsx b/src/features/plans/ui/PalanTable.tsx index 6a3ff4a..247841a 100644 --- a/src/features/plans/ui/PalanTable.tsx +++ b/src/features/plans/ui/PalanTable.tsx @@ -115,7 +115,7 @@ const ProductTable = ({ } return ( -
+
diff --git a/src/features/questionnaire/lib/api.ts b/src/features/questionnaire/lib/api.ts new file mode 100644 index 0000000..6807673 --- /dev/null +++ b/src/features/questionnaire/lib/api.ts @@ -0,0 +1,14 @@ +import type { QuesList } from "@/features/questionnaire/lib/type"; +import httpClient from "@/shared/config/api/httpClient"; +import { API_URLS } from "@/shared/config/api/URLs"; +import type { AxiosResponse } from "axios"; + +export const questionnaire_api = { + async list(params: { + page: number; + page_size: number; + }): Promise> { + const res = await httpClient.get(API_URLS.QuestionnaireList, { params }); + return res; + }, +}; diff --git a/src/features/questionnaire/lib/type.ts b/src/features/questionnaire/lib/type.ts new file mode 100644 index 0000000..06ee2e8 --- /dev/null +++ b/src/features/questionnaire/lib/type.ts @@ -0,0 +1,18 @@ +export interface QuesList { + total: number; + page: number; + page_size: number; + total_pages: number; + has_next: boolean; + has_previous: boolean; + results: QuesListRes[]; +} + +export interface QuesListRes { + id: string; + created_at: string; + company_name: string; + full_name: string; + phone_number: string; + file: string; +} diff --git a/src/features/questionnaire/ui/questionnaireDetail.tsx b/src/features/questionnaire/ui/questionnaireDetail.tsx new file mode 100644 index 0000000..fde99cc --- /dev/null +++ b/src/features/questionnaire/ui/questionnaireDetail.tsx @@ -0,0 +1,88 @@ +import type { QuesListRes } from "@/features/questionnaire/lib/type"; +import { Button } from "@/shared/ui/button"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, +} from "@/shared/ui/dialog"; + +interface Props { + open: boolean; + onClose: () => void; + data: QuesListRes | null; +} + +const QuestionnaireDetail = ({ open, onClose, data }: Props) => { + if (!data) return null; + + const fileUrl = data.file; + const ext = fileUrl.split(".").pop()?.toLowerCase(); + + const isImage = ["jpg", "jpeg", "png", "webp"].includes(ext ?? ""); + const isPdf = ext === "pdf"; + const isOffice = ["doc", "docx", "xls", "xlsx", "odt", "ods"].includes( + ext ?? "", + ); + + return ( + + + + So‘rov tafsilotlari + + +
+

+ Kompaniya: {data.company_name} +

+

+ F.I.Sh: {data.full_name} +

+

+ Telefon: {data.phone_number} +

+

+ Yaratilgan: {new Date(data.created_at).toLocaleString()} +

+
+ + {/* FILE PREVIEW */} +
+ Ilova: + + {isImage && ( + file + )} + + {isPdf && ( +