"use client"; import { error } from "@/config/swal"; import { createArticle, getArticleByCategory } from "@/services/article"; import { zodResolver } from "@hookform/resolvers/zod"; import { Button, Card, Chip, Input, Select, SelectItem, SelectSection, Selection, Spinner, } from "@heroui/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"; import GenerateSingleArticle from "./generate-single-article-form"; import { getDetailArticle } from "@/services/generate-article"; import { delay } from "@/utils/global"; import GenerateBulkArticle from "./generate-bulk-article-form"; import generatedArticleIds from "@/store/generated-article-store"; import SpeechToTextOperator from "./speech-to-text-form"; import GenerateRewriteArticle from "./generate-rewrite-form"; import SpeechToText from "./speech-to-text-form"; 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", }, ]; const TypeId = [ { key: 1, label: "Article", }, { key: 2, label: "Magazine", }, ]; export default function GenerateArticleForm() { const animatedComponents = makeAnimated(); const router = useRouter(); const [title, setTitle] = useState(""); const [article, setArticle] = useState(""); 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(); const [selectedContentType, setSelectedContentType] = useState("single-article"); const [collectSingleArticleId, setCollectSingleArticleId] = useState< number[] >([]); const [collectBulkArticleId, setCollectBulkArticleId] = useState( [] ); const [collectRewriteArticleId, setCollectRewriteArticleId] = useState< number[] >([]); const [generatedTranscriptId, setGeneratedTranscriptId] = useState(); const generatedArticleIdStore = generatedArticleIds( (state) => state.articleIds ); const setGeneratedArticleIdStore = generatedArticleIds( (state) => state.setArticleIds ); const [selectedGeneratedArticleId, setSelectedGeneratedArticleId] = useState(); const [listCategory, setListCategory] = useState< { id: number; label: string; value: number }[] >([]); useEffect(() => { setCollectSingleArticleId(generatedArticleIdStore.singleArticle); setCollectBulkArticleId(generatedArticleIdStore.bulkArticle); setCollectRewriteArticleId(generatedArticleIdStore.rewriteArticle); }); useEffect(() => { fetchCategory(); }, []); const fetchCategory = async () => { const res = await getArticleByCategory(); if (res?.data?.data) { setupCategory(res?.data?.data); } }; const setupCategory = (data: any) => { const temp = []; for (const element of data) { temp.push({ id: element.id, label: element.title, value: element.id, }); } setListCategory(temp); }; 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 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() { const formData = { title: title, typeId: parseInt(String(Array.from(article)[0])), slug: slug, categoryId: selectedCategory[0].id, tags: tags.join(","), description: content, htmlDescription: content, }; 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() { MySwal.fire({ title: "Simpan Data", text: "", icon: "warning", showCancelButton: true, cancelButtonColor: "#d33", confirmButtonColor: "#3085d6", confirmButtonText: "Simpan", }).then((result) => { if (result.isConfirmed) { save(); } }); } const singleArticleId = (id: number) => { const temp = [...collectSingleArticleId, id]; const tempStore = generatedArticleIdStore; tempStore.singleArticle = temp; setCollectSingleArticleId(temp); setGeneratedArticleIdStore(tempStore); }; const bulkArticleId = (id: number[]) => { const temp: number[] = [...collectBulkArticleId, ...id]; const tempStore = generatedArticleIdStore; tempStore.bulkArticle = temp; setCollectBulkArticleId(temp); setGeneratedArticleIdStore(tempStore); }; const rewriteArticleId = (id: number) => { const temp = [...collectRewriteArticleId, id]; const tempStore = generatedArticleIdStore; tempStore.rewriteArticle = temp; setCollectRewriteArticleId(temp); setGeneratedArticleIdStore(tempStore); }; useEffect(() => { getArticleDetail(); }, [selectedGeneratedArticleId]); const checkArticleStatus = async (data: string | null) => { if (data === null) { delay(10000).then(() => { getArticleDetail(); }); } }; const getArticleDetail = async () => { if (selectedGeneratedArticleId) { const res = await getDetailArticle(selectedGeneratedArticleId); const data = res?.data?.data?.articleBody; checkArticleStatus(data); if (data !== null) { setContent(data); } else { setContent(""); } } }; const goEdit = () => { const temp = generatedArticleIdStore; temp.singleArticle = collectSingleArticleId; temp.bulkArticle = collectBulkArticleId; setGeneratedArticleIdStore(temp); router.push(`/admin/article/generate/edit/${selectedGeneratedArticleId}`); }; return (
setTitle(e.target.value)} label="Judul" variant="bordered" placeholder="Enter Text" labelPlacement="outside" />
{title.length === 0 &&

Required

}
{article === "" &&

Required

}

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={listCategory} />
{(!selectedCategory || selectedCategory?.length < 1) && (

Required

)}
setSlug(e.target.value)} label="Slug" variant="bordered" placeholder="Enter Text" labelPlacement="outside" /> {slug.length === 0 &&
Required
}
setNewTags(e.target.value)} onKeyDown={handleKeyDown} placeholder="Tambahkan tag baru dan tekan Enter" /> {tags.length === 0 &&
Required
}
{tags.map((tag, index) => ( handleClose(tag)} > {tag} ))}
{selectedContentType === "single-article" ? (
singleArticleId(data)} />
{collectSingleArticleId.length > 0 && collectSingleArticleId.map((data) => ( ))}
{selectedGeneratedArticleId && collectSingleArticleId.includes(selectedGeneratedArticleId) && (selectedGeneratedArticleId && content !== "" ? (

Description

goEdit()} > Edit setContent(newContent)} className="dark:text-black" />
) : selectedGeneratedArticleId && content == "" ? ( ) : collectSingleArticleId.length > 0 ? (

Select Article ID

) : ( "" ))}
) : selectedContentType === "bulk-article" ? (
bulkArticleId(data)} />
{collectBulkArticleId.length > 0 && collectBulkArticleId.map((data) => ( ))}
{selectedGeneratedArticleId && collectBulkArticleId.includes(selectedGeneratedArticleId) && (selectedGeneratedArticleId && content !== "" ? (

Description

setContent(newContent)} className="dark:text-black" />
) : selectedGeneratedArticleId && content == "" ? ( ) : collectSingleArticleId.length > 0 ? (

Select Article ID

) : ( "" ))}
) : selectedContentType === "rewrite" ? (
rewriteArticleId(data)} initTranscript={generatedTranscriptId} />
{collectRewriteArticleId.length > 0 && collectRewriteArticleId.map((data) => ( ))}
{selectedGeneratedArticleId && collectRewriteArticleId.includes(selectedGeneratedArticleId) && (selectedGeneratedArticleId && content !== "" ? (

Description

setContent(newContent)} className="dark:text-black" />
) : selectedGeneratedArticleId && content == "" ? ( ) : collectRewriteArticleId.length > 0 ? (

Select Article ID

) : ( "" ))}
) : selectedContentType === "speech-to-text" ? ( { setGeneratedTranscriptId(transcriptId); setSelectedContentType("rewrite"); }} /> ) : ( "" )}

Attachment (Opsional)

{selectedImages?.length > 0 ? (

Pratinjau:

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