"use client"; import { createFaqCategory, deleteFaqCategory, getAllFaqCategory, getDetailFaqCategory, updateFaqCategory, } from "@/pages/faq/lib/api"; import { Button } from "@/shared/ui/button"; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/shared/ui/dialog"; import { Form, FormControl, FormField, FormItem, FormMessage, } from "@/shared/ui/form"; import { Input } from "@/shared/ui/input"; import { Label } from "@/shared/ui/label"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/shared/ui/table"; import { zodResolver } from "@hookform/resolvers/zod"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { ChevronLeft, ChevronRight, Loader, Pencil, PlusCircle, Trash2, } from "lucide-react"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { useSearchParams } from "react-router-dom"; import { toast } from "sonner"; import z from "zod"; const categoryFormSchema = z.object({ name: z.string().min(1, { message: "Majburiy maydon" }), name_ru: z.string().min(1, { message: "Majburiy maydon" }), }); const FaqCategory = () => { const [deleteId, setDeleteId] = useState(null); const [searchParams, setSearchParams] = useSearchParams(); const initialPage = Number(searchParams.get("page")) || 1; const [page, setPage] = useState(initialPage); const [categories, setCategories] = useState(null); const queryClient = useQueryClient(); const updatePage = (newPage: number) => { setPage(newPage); setSearchParams({ page: newPage.toString() }); }; const { data: category } = useQuery({ queryKey: ["all_faqcategory", page], queryFn: () => { return getAllFaqCategory({ page: page, page_size: 20 }); }, select(data) { return data.data.data; }, }); const { data: oneCategory } = useQuery({ queryKey: ["detail_faqcategory", categories], queryFn: () => { return getDetailFaqCategory(categories!); }, select(data) { return data.data.data; }, enabled: !!categories, }); const { mutate: create, isPending: createPending } = useMutation({ mutationFn: (body: { name: string; name_ru: string }) => { return createFaqCategory(body); }, onSuccess: () => { queryClient.refetchQueries({ queryKey: ["all_faqcategory"] }); queryClient.refetchQueries({ queryKey: ["detail_faqcategory"] }); setOpenModal(false); }, onError: () => { toast.error(t("Xatolik yuz berdi"), { position: "top-center", richColors: true, }); }, }); const { mutate: update, isPending: updatePending } = useMutation({ mutationFn: ({ body, id, }: { id: number; body: { name: string; name_ru: string }; }) => { return updateFaqCategory({ body, id }); }, onSuccess: () => { queryClient.refetchQueries({ queryKey: ["all_faqcategory"] }); queryClient.refetchQueries({ queryKey: ["detail_faqcategory"] }); setOpenModal(false); setCategories(null); }, onError: () => { toast.error(t("Xatolik yuz berdi"), { position: "top-center", richColors: true, }); }, }); const { mutate: deleteCategory, isPending: deletePending } = useMutation({ mutationFn: (id: number) => { return deleteFaqCategory(id); }, onSuccess: () => { queryClient.refetchQueries({ queryKey: ["all_faqcategory"] }); queryClient.refetchQueries({ queryKey: ["detail_faqcategory"] }); setDeleteId(null); }, onError: () => { toast.error(t("Xatolik yuz berdi"), { position: "top-center", richColors: true, }); }, }); const { t } = useTranslation(); const [openModal, setOpenModal] = useState(false); const form = useForm>({ resolver: zodResolver(categoryFormSchema), defaultValues: { name: "", name_ru: "" }, }); useEffect(() => { if (oneCategory && categories) { form.setValue("name", oneCategory.name_uz); form.setValue("name_ru", oneCategory.name_ru); } }, [oneCategory, categories, form]); const onSubmit = (values: z.infer) => { if (categories !== null) { update({ id: categories, body: { name: values.name, name_ru: values.name_ru, }, }); } else { create({ name: values.name, name_ru: values.name_ru, }); } }; const handleEdit = (cat: number) => { setCategories(cat); setOpenModal(true); }; const handleDelete = () => { if (deleteId) { deleteCategory(deleteId); } }; useEffect(() => { if (!openModal) { form.reset(); setCategories(null); } }, [openModal, form]); return (

{t("FAQ Kategoriyalar")}

{/* Jadval */}
# {t("Kategoriya nomi")} {/* Savollar soni */} {t("Amallar")} {category && category.results.length > 0 ? ( category.results.map((cat, index) => ( {index + 1} {cat.name} {/* {cat.questionCount} */} )) ) : ( {t("Hech qanday kategoriya topilmadi")} )}
{[...Array(category?.total_pages)].map((_, i) => { const pageNum = i + 1; return ( ); })}
{/* Modal */} {categories ? t("Tahrirlash") : t("Qo'shish")}
( )} /> ( )} />
{/* O‘chirish tasdig‘i */} setDeleteId(null)}> {t("Haqiqatan ham o‘chirmoqchimisiz?")}
); }; export default FaqCategory;