"use client"; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; import { Card, CardContent } from "@/components/ui/card"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import SiteBreadcrumb from "@/components/site-breadcrumb"; import { deleteKnowledgeBase, getKnowledgeBaseCategoryList, getKnowledgeBaseList, saveKnowledgeBase, saveKnowledgeBaseCategory, } from "@/service/master/knowledge-base"; import React, { useEffect, useState } from "react"; import { Edit2Icon, Plus, Trash, Trash2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import CreateCategory from "./create-category"; import withReactContent from "sweetalert2-react-content"; import Swal from "sweetalert2"; import { deleteMedia } from "@/service/content/content"; import { error } from "@/lib/swal"; import { close, loading } from "@/config/swal"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { z } from "zod"; import { toast } from "@/components/ui/use-toast"; import { Textarea } from "@/components/ui/textarea"; import { Link, useRouter } from "@/i18n/routing"; const FormSchema = z.object({ name: z.string().min(2, { message: "Name must be at least 2 characters.", }), }); const FormSchemaCreate = z.object({ title: z.string().min(2, { message: "Judul minimal 2 karakter.", }), question: z.string().min(2, { message: "Pertanyaan minimal 2 karakter.", }), answer: z.string().min(2, { message: "Jawaban minimal 2 karakter.", }), }); const KnowledgeBase = () => { const MySwal = withReactContent(Swal); const router = useRouter(); const [categories, setCategories] = useState([]); const [questions, setQuestions] = useState([]); const [selectedCategoryId, setSelectedCategoryId] = useState(0); const [isDialogOpen, setIsDialogOpen] = useState(false); const [viewCreate, setViewCreate] = useState(false); const form = useForm>({ resolver: zodResolver(FormSchema), defaultValues: { name: "", }, }); const formCreate = useForm>({ resolver: zodResolver(FormSchemaCreate), defaultValues: { title: "", question: "", answer: "", }, }); React.useEffect(() => { fetchCategoryList(); }, []); async function fetchCategoryList() { const response = await getKnowledgeBaseCategoryList(); const data = response?.data?.data; if (data) { setCategories(data); fetchQuestions( selectedCategoryId === 0 ? data[0]?.id : selectedCategoryId ); } } const fetchQuestions = async (id: number) => { const response = await getKnowledgeBaseList(id); const data = response?.data?.data; if (data) { setQuestions(data); } }; async function doDelete(id: any) { loading(); const data = { id, }; const response = await deleteKnowledgeBase(id); if (response?.error) { error(response.message); return false; } close(); success(); } function success() { MySwal.fire({ title: "Sukses", icon: "success", confirmButtonColor: "#3085d6", confirmButtonText: "OK", }).then((result) => { if (result.isConfirmed) { fetchQuestions(selectedCategoryId); } }); } const handleDeleteKnowlagde = (id: any) => { MySwal.fire({ title: "Hapus Data", text: "", icon: "warning", showCancelButton: true, cancelButtonColor: "#3085d6", confirmButtonColor: "#d33", confirmButtonText: "Hapus", }).then((result) => { if (result.isConfirmed) { doDelete(id); } }); }; function onSubmit(data: z.infer) { save(data); setIsDialogOpen(false); } useEffect(() => { formCreate.reset(); }, [viewCreate]); async function save(data: any) { loading(); const reqData = { id: selectedCategoryId, name: data.name, }; const response = await saveKnowledgeBaseCategory(reqData); if (response?.error) { return false; } close(); toast({ title: "Task created successfully.", }); fetchCategoryList(); } async function onSubmitCreate(data: z.infer) { const reqData = { title: data.title, categoryId: selectedCategoryId === 0 ? categories[0]?.id : selectedCategoryId, question: data.question, answer: data.answer, }; const response = await saveKnowledgeBase(reqData); if (response?.error) { error(response.message); return false; } fetchQuestions( selectedCategoryId === 0 ? categories[0]?.id : selectedCategoryId ); } return (
{categories?.map((category: any, index: number) => ( { fetchQuestions(category?.id); setSelectedCategoryId(category?.id); }} className="group data-[state=active]:bg-secondary data-[state=active]:text-default rounded-md px-6 py-3 w-full justify-between flex items-center" > {category?.name}
deleteCategory(category?.id)} >
form.setValue("name", category.name) } > Edit Category
( Name )} />
))}
{categories?.map((cateogry: any, index: number) => ( {questions?.map((question: any) => (
handleDeleteKnowlagde(question.id)} />
{question.answer}
))}
{viewCreate && (
( Judul )} /> ( Pertanyaan