diff --git a/app/[locale]/(protected)/supervisor/knowledge-base/create-category.tsx b/app/[locale]/(protected)/supervisor/knowledge-base/create-category.tsx new file mode 100644 index 00000000..0de9a8a2 --- /dev/null +++ b/app/[locale]/(protected)/supervisor/knowledge-base/create-category.tsx @@ -0,0 +1,110 @@ +"use client" +import { Button } from "@/components/ui/button" +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog" +import { CalendarIcon, Plus } from "lucide-react"; +import { zodResolver } from "@hookform/resolvers/zod" +import { useForm } from "react-hook-form" +import { z } from "zod" + +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, +} from "@/components/ui/form" +import { Input } from "@/components/ui/input" +import { toast } from "@/components/ui/use-toast" +import { Textarea } from "@/components/ui/textarea"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; +import Image from "next/image"; +import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; +import { Calendar } from "@/components/ui/calendar"; +import { cn } from "@/lib/utils"; +import { format } from "date-fns"; +import { useState } from "react"; +import { useTranslations } from "next-intl"; +import { saveKnowledgeBaseCategory } from "@/service/master/knowledge-base"; + +const FormSchema = z.object({ + name: z.string().min(2, { + message: "Name must be at least 2 characters.", + }), +}) + +const CreateCategory = ({ onSuccess } : { onSuccess?: () => void } ) => { + const t = useTranslations("TodoApp") + const [isDialogOpen, setIsDialogOpen] = useState(false); + const form = useForm>({ + resolver: zodResolver(FormSchema), + defaultValues: { + name: "", + }, + }) + + async function save(data: any) { + const reqData = { + name: data.name + } + const response = await saveKnowledgeBaseCategory(reqData); + if (response?.error) { + return false; + } + toast({ + title: "Task created successfully.", + }); + if (onSuccess) { + onSuccess(); + } + } + + function onSubmit(data: z.infer) { + save(data); + setIsDialogOpen(false); + } + + return ( + + + + + + + Add Category + +
+ + ( + + Name + + + + + + )} + /> +
+ +
+ + +
+
+ ); +}; + +export default CreateCategory; \ No newline at end of file diff --git a/app/[locale]/(protected)/supervisor/knowledge-base/page.tsx b/app/[locale]/(protected)/supervisor/knowledge-base/page.tsx index 55edf433..fca7d79a 100644 --- a/app/[locale]/(protected)/supervisor/knowledge-base/page.tsx +++ b/app/[locale]/(protected)/supervisor/knowledge-base/page.tsx @@ -11,8 +11,9 @@ import {Tabs, TabsContent, TabsList, TabsTrigger} from "@/components/ui/tabs"; import SiteBreadcrumb from "@/components/site-breadcrumb"; import {getKnowledgeBaseCategoryList, getKnowledgeBaseList} from "@/service/master/knowledge-base"; import React from "react"; -import {Plus} from "lucide-react"; +import {Plus, Trash2} from "lucide-react"; import {Button} from "@/components/ui/button"; +import CreateCategory from "./create-category"; const KnowledgeBase = () => { const [categories, setCategories] = React.useState([]); @@ -47,25 +48,26 @@ const KnowledgeBase = () => { - + {categories?.map((category: any, index: number) => ( - + { fetchQuestions(category?.id); }} className="data-[state=active]:bg-secondary data-[state=active]:text-default rounded-md px-6 py-3 w-full justify-start" - > - {category?.name} - + > + {category?.name} +
deleteCategory(category?.id)} + > + +
+
+ ))}
diff --git a/components/loader.tsx b/components/loader.tsx index 5abf7705..aeb81237 100644 --- a/components/loader.tsx +++ b/components/loader.tsx @@ -4,15 +4,23 @@ import React from "react"; import { Loader2 } from "lucide-react"; import DashCodeLogo from "./dascode-logo"; import { useMounted } from "@/hooks/use-mounted"; +import Image from "next/image"; const Loader = () => { const mounted = useMounted() return ( mounted ? null :
- -

+ {/* */} + + {/*

DashCode -

+

*/}
diff --git a/public/assets/mediahub-logo-min.png b/public/assets/mediahub-logo-min.png new file mode 100644 index 00000000..01007c53 Binary files /dev/null and b/public/assets/mediahub-logo-min.png differ diff --git a/service/master/knowledge-base.ts b/service/master/knowledge-base.ts index 5f9b5ec8..2d842711 100644 --- a/service/master/knowledge-base.ts +++ b/service/master/knowledge-base.ts @@ -1,5 +1,6 @@ import { httpGetInterceptor, + httpPostInterceptor, } from "../http-config/http-interceptor-service"; export async function getKnowledgeBaseCategoryList() { @@ -11,3 +12,8 @@ export async function getKnowledgeBaseList(id: number) { const url = `knowledge-base?categoryId=${id}`; return httpGetInterceptor(url); } + +export async function saveKnowledgeBaseCategory(data: any) { + const url = 'knowledge-base/category'; + return httpPostInterceptor(url, data); +} \ No newline at end of file