"use client"; import { Button, Input, Select, SelectItem, SelectSection, } from "@nextui-org/react"; import { FormEvent, useState } from "react"; import { Controller, useForm } from "react-hook-form"; import * as z from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import { close, error, loading } from "@/config/swal"; import { generateDataArticle, getGenerateKeywords, getGenerateTitle, } from "@/service/generate-article"; 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", }, ]; const singleArticleSchema = z.object({ mainKeyword: z.string().min(2, { message: "Main Keyword must be at least 2 characters.", }), title: z.string().min(2, { message: "Title Keyword must be at least 2 characters.", }), additionalKeyword: z.string().min(2, { message: "Additional Keyword must be at least 2 characters.", }), }); export default function GenerateSingleArticle(props: { articleId: (data: number) => void; }) { const [selectedWritingSyle, setSelectedWritingStyle] = useState("Informational"); const [selectedArticleSize, setSelectedArticleSize] = useState("News"); const [selectedLanguage, setSelectedLanguage] = useState("id"); const formOptions = { resolver: zodResolver(singleArticleSchema) }; type UserSettingSchema = z.infer; const { register, control, handleSubmit, formState: { errors }, setValue, getValues, } = useForm(formOptions); 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; setValue("title", 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; setValue("additionalKeyword", data); close(); } }; const onSubmit = async (values: z.infer) => { loading(); const request = { advConfig: "", style: selectedWritingSyle, website: "None", connectToWeb: true, lang: selectedLanguage, pointOfView: "None", title: values.title, imageSource: "Web", mainKeyword: values.mainKeyword, additionalKeywords: values.additionalKeyword, targetCountry: null, articleSize: selectedArticleSize, projectId: 2, createdBy: "123123", clientId: "humasClientIdtest", }; console.log("reqq", request); const res = await generateDataArticle(request); close(); console.log("res", res?.data?.data); if (res?.error) { error("Error"); } props.articleId(res?.data?.data?.id); }; return (

Main Keyword

( )} /> {errors.mainKeyword && (

{errors.mainKeyword?.message}

)}

Title

( )} /> {errors.title && (

{errors.title?.message}

)}

Additional Keyword

( )} /> {errors.additionalKeyword && (

{errors.additionalKeyword?.message}

)}
); }