"use client"; import { error } from "@/config/swal"; import { createArticle } from "@/service/article"; import { zodResolver } from "@hookform/resolvers/zod"; import { Button, Card, Chip, Input, Select, SelectItem, Selection, } from "@nextui-org/react"; import JoditEditor from "jodit-react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import React, { ChangeEvent, useEffect, useRef, useState } from "react"; import { useForm } from "react-hook-form"; import Swal from "sweetalert2"; import withReactContent from "sweetalert2-react-content"; import * as z from "zod"; import ReactSelect from "react-select"; import makeAnimated from "react-select/animated"; const articleSchema = z.object({ title: z.string().min(1, { message: "Required" }), article: z.string().min(1, { message: "Required" }), slug: z.string().min(1, { message: "Required" }), tags: z.string().min(0, { message: "Required" }).optional(), description: z.string().min(0, { message: "Required" }).optional(), }); const dummyCategory = [ { id: 1, label: "Category 1", value: "category-1", }, { id: 2, label: "Category 2", value: "category-2", }, { id: 3, label: "Category 3", value: "category-3", }, { id: 4, label: "Category 4", value: "category-4", }, { id: 5, label: "Category 5", value: "category-5", }, ]; export default function FormArticle() { const animatedComponents = makeAnimated(); const router = useRouter(); const [title, setTitle] = useState(""); const [article, setArticle] = React.useState(new Set([])); const [slug, setSlug] = useState(""); const [tags, setTags] = useState([]); const [newTags, setNewTags] = useState(""); const editor = useRef(null); const [content, setContent] = useState(""); const MySwal = withReactContent(Swal); const [selectedImages, setSelectedImages] = useState([]); const [selectedCategory, setSelectedCategory] = useState(); useEffect(() => { console.log("selected", selectedCategory); }, [selectedCategory]); const formOptions = { resolver: zodResolver(articleSchema) }; type MicroIssueSchema = z.infer; const { register, control, handleSubmit, setValue, formState: { errors }, } = useForm(formOptions); const TypeId = [ { key: 1, label: "Article", }, { key: 2, label: "Magazine", }, ]; const handleImageChange = (event: ChangeEvent) => { if (event.target.files) { const files = Array.from(event.target.files); setSelectedImages((prevImages) => [...prevImages, ...files]); } }; const handleRemoveImage = (index: number) => { setSelectedImages((prevImages) => prevImages.filter((_, i) => i !== index)); }; // const handleSubmitImage = (event: any) => { // event.preventDefault(); // // Lakukan penanganan pengunggahan gambar di sini // if (selectedImage) { // console.log('Gambar yang dipilih:', selectedImage); // // Anda dapat melakukan pengunggahan gambar ke server di sini // } else { // console.log('Pilih gambar terlebih dahulu.'); // } // }; const handleClose = (tagsToRemove: string) => { setTags(tags.filter((tag) => tag !== tagsToRemove)); if (tags.length === 1) { setTags([]); } }; const handleAddTags = (e: any) => { if (newTags.trim() !== "") { setTags([...tags, newTags.trim()]); setNewTags(""); e.preventDefault(); } }; const handleKeyDown = (event: any) => { if (event.key === "Enter") { handleAddTags(event); } }; async function save(data: any) { const formData = { title: title, typeId: parseInt(String(Array.from(article)[0])), slug: slug, tags: tags.join(","), description: content, htmlDescription: content, }; console.log("Form Data:", formData); const response = await createArticle(formData); if (response?.error) { error(response.message); return false; } successSubmit("/admin/article"); } function successSubmit(redirect: any) { MySwal.fire({ title: "Sukses", icon: "success", confirmButtonColor: "#3085d6", confirmButtonText: "OK", }).then((result) => { if (result.isConfirmed) { router.push(redirect); } }); } async function onSubmit(data: any) { MySwal.fire({ title: "Simpan Data", text: "", icon: "warning", showCancelButton: true, cancelButtonColor: "#d33", confirmButtonColor: "#3085d6", confirmButtonText: "Simpan", }).then((result) => { if (result.isConfirmed) { save(data); } }); } return (
setTitle(e.target.value)} label="Judul" variant="bordered" placeholder="Enter Text" labelPlacement="outside" />
{title.length === 0 && errors.title && errors.title.message}
{errors.article?.message}
{/*

{article}

*/}

Category

"!rounded-xl bg-white !border-1 !border-gray-200", }} classNamePrefix="select" onChange={setSelectedCategory} closeMenuOnSelect={false} components={animatedComponents} isClearable={true} isSearchable={true} isMulti={true} placeholder="Category ..." name="sub-module" options={dummyCategory} />
{(!selectedCategory || selectedCategory?.length < 1) && (

Required

)}
setSlug(e.target.value)} label="Slug" variant="bordered" placeholder="Enter Text" labelPlacement="outside" />
{slug.length === 0 && errors.slug && errors.slug.message}
setNewTags(e.target.value)} onKeyDown={handleKeyDown} placeholder="Tambahkan tag baru dan tekan Enter" />
{tags.length === 0 && errors.tags && errors.tags.message}
{tags.map((tag, index) => ( handleClose(tag)} > {tag} ))}

Description

setContent(newContent)} className="dark:text-black" />
{content.length === 0 && errors.description && errors.description.message}

Attachment (Opsional)

{selectedImages?.length > 0 ? (

Pratinjau:

{selectedImages.map((image, index) => (
handleRemoveImage(index)} > X Pratinjau Gambar
))}
) : ( "" )}
); }