"use client"; 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 { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from "@/shared/ui/select"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/shared/ui/table"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/shared/ui/tabs"; import { Textarea } from "@/shared/ui/textarea"; import { zodResolver } from "@hookform/resolvers/zod"; import { Pencil, PlusCircle, Trash2 } from "lucide-react"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import z from "zod"; type FaqType = { id: number; category: string; question: string; answer: string; }; const categories = [ { value: "umumiy", label: "Umumiy" }, { value: "tolov", label: "To‘lov" }, { value: "hujjatlar", label: "Hujjatlar" }, { value: "sugurta", label: "Sug‘urta" }, ]; const initialFaqs: FaqType[] = [ { id: 1, category: "umumiy", question: "Sayohatni bron qilish uchun qanday to‘lov usullari mavjud?", answer: "Biz kredit karta, Payme, Click, va naqd to‘lovni qabul qilamiz. To‘lovlar xavfsiz va ishonchli tizim orqali amalga oshiriladi.", }, { id: 2, category: "umumiy", question: "Sayohatni bekor qilsam, pul qaytariladimi?", answer: "Ha, ammo bu bron qilingan turdagi sayohatga bog‘liq. Ba’zi sayohatlar uchun 24 soat oldin bekor qilsangiz, to‘liq qaytariladi.", }, { id: 3, category: "hujjatlar", question: "Pasport muddati tugasa sayohat qilish mumkinmi?", answer: "Yo‘q, pasport muddati kamida 6 oy amal qilishi kerak. Aks holda, mamlakatga kirish rad etiladi.", }, { id: 4, category: "sugurta", question: "Sayohat davomida sug‘urta kerakmi?", answer: "Ha, biz barcha mijozlarga sayohat sug‘urtasini tavsiya qilamiz. Bu favqulodda holatlarda yordam beradi.", }, { id: 5, category: "tolov", question: "To‘lovni bosqichma-bosqich amalga oshirish mumkinmi?", answer: "Ha, ayrim yo‘nalishlar uchun bosqichli to‘lov mavjud.", }, ]; const faqForm = z.object({ categories: z.string().min(1, { message: "Majburiy maydon" }), title: z.string().min(1, { message: "Majburiy maydon" }), answer: z.string().min(1, { message: "Majburiy maydon" }), }); const Faq = () => { const [faqs, setFaqs] = useState(initialFaqs); const [activeTab, setActiveTab] = useState("umumiy"); const [openModal, setOpenModal] = useState(false); const [editFaq, setEditFaq] = useState(null); const [deleteId, setDeleteId] = useState(null); const filteredFaqs = faqs.filter((faq) => faq.category === activeTab); const form = useForm>({ resolver: zodResolver(faqForm), defaultValues: { answer: "", categories: "", title: "", }, }); function onSubmit(value: z.infer) { console.log(value); } const handleEdit = (faq: FaqType) => { setEditFaq(faq); setOpenModal(true); form.setValue("answer", faq.answer); form.setValue("title", faq.question); form.setValue("categories", faq.category); }; const handleDelete = () => { if (deleteId) { setFaqs((prev) => prev.filter((faq) => faq.id !== deleteId)); setDeleteId(null); } }; useEffect(() => { if (!openModal) { form.reset(); setEditFaq(null); } }, [openModal, form]); return (
{/* Header */}

FAQ (Savol va javoblar)

{/* Tabs */} {categories.map((cat) => ( {cat.label} ))} {filteredFaqs.length > 0 ? (
# Savol Javob Amallar {filteredFaqs.map((faq, index) => ( {index + 1} {faq.question} {faq.answer.length > 80 ? faq.answer.slice(0, 80) + "..." : faq.answer} ))}
) : (

Bu bo‘limda savollar yo‘q.

)}
{editFaq ? "FAQni tahrirlash" : "Yangi FAQ qo‘shish"}
( )} /> ( )} /> (