"use client"; import { useEffect, useState } from "react"; import { close, error, loading } from "@/config/swal"; import { delay } from "@/utils/global"; import GetSeoScore from "./get-seo-score-form"; import { generateDataArticle, getDetailArticle, getGenerateKeywords, getGenerateTitle, } from "@/service/generate-article"; import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem, } from "@/components/ui/select"; import { Button } from "@/components/ui/button"; import { Loader2 } from "lucide-react"; import { Input } from "@/components/ui/input"; const writingStyle = [ { id: 1, name: "Friendly", }, { id: 1, name: "Professional", }, { id: 3, name: "Informational", }, { id: 4, name: "Neutral", }, { id: 5, name: "Witty", }, ]; const articleSize = [ { id: 1, name: "News (300 - 900 words)", value: "News", }, { id: 2, name: "Info (900 - 2000 words)", value: "Info", }, { id: 3, name: "Detail (2000 - 5000 words)", value: "Detail", }, ]; interface DiseData { id: number; articleBody: string; title: string; metaTitle: string; description: string; metaDescription: string; mainKeyword: string; additionalKeywords: string; } export default function GenerateSingleArticleForm(props: { content: (data: DiseData) => void; }) { const [selectedWritingSyle, setSelectedWritingStyle] = useState("Informational"); const [selectedArticleSize, setSelectedArticleSize] = useState("News"); const [selectedLanguage, setSelectedLanguage] = useState("id"); const [mainKeyword, setMainKeyword] = useState(""); const [title, setTitle] = useState(""); const [additionalKeyword, setAdditionalKeyword] = useState(""); const [articleIds, setArticleIds] = useState([]); const [selectedId, setSelectedId] = useState(); const [isLoading, setIsLoading] = useState(false); const generateAll = async (keyword: string | undefined) => { if (keyword) { generateTitle(keyword); generateKeywords(keyword); } }; const generateTitle = async (keyword: string | undefined) => { if (keyword) { loading(); const req = { keyword: keyword, style: selectedWritingSyle, website: "None", connectToWeb: true, lang: selectedLanguage, pointOfView: "None", clientId: "", }; const res = await getGenerateTitle(req); const data = res?.data?.data; setTitle(data); close(); } }; const generateKeywords = async (keyword: string | undefined) => { if (keyword) { const req = { keyword: keyword, style: selectedWritingSyle, website: "None", connectToWeb: true, lang: selectedLanguage, pointOfView: "0", clientId: "", }; loading(); const res = await getGenerateKeywords(req); const data = res?.data?.data; setAdditionalKeyword(data); close(); } }; const onSubmit = async () => { loading(); const request = { advConfig: "", style: selectedWritingSyle, website: "None", connectToWeb: true, lang: selectedLanguage, pointOfView: "None", title: title, imageSource: "Web", mainKeyword: mainKeyword, additionalKeywords: additionalKeyword, targetCountry: null, articleSize: selectedArticleSize, projectId: 2, createdBy: "123123", clientId: "humasClientIdtest", }; const res = await generateDataArticle(request); close(); if (res?.error) { error("Error"); } setArticleIds([...articleIds, res?.data?.data?.id]); // props.articleId(res?.data?.data?.id); }; useEffect(() => { getArticleDetail(); }, [selectedId]); const checkArticleStatus = async (data: string | null) => { if (data === null) { delay(7000).then(() => { getArticleDetail(); }); } }; const getArticleDetail = async () => { if (selectedId) { const res = await getDetailArticle(selectedId); const data = res?.data?.data; checkArticleStatus(data?.articleBody); if (data?.articleBody !== null) { setIsLoading(false); props.content(data); } else { setIsLoading(true); props.content({ id: data?.id, articleBody: "", title: "", metaTitle: "", description: "", metaDescription: "", additionalKeywords: "", mainKeyword: "", }); } } }; return (
{/* */} {/* */} {/* */}

Main Keyword

setMainKeyword(e.target.value)} className="w-full mt-1 border border-gray-300 rounded-lg dark:border-gray-400" /> {mainKeyword == "" && (

Required

)}

Title

setTitle(e.target.value)} className="w-full mt-1 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500" // Custom styling using className aria-label="Title" /> {/* {title == "" &&

Required

} */}

Additional Keyword

setAdditionalKeyword(e.target.value)} className="mt-1 border rounded-lg dark:bg-transparent dark:border-gray-400" aria-label="Additional Keyword" /> {/* {additionalKeyword == "" && (

Required

)} */} {/* {articleIds.length < 3 && ( )} */} {articleIds.length < 3 && ( )}
{articleIds.length > 0 && (
{articleIds.map((id, index) => ( ))}
)} {!isLoading && (
)}
); }