feat:form-ai

This commit is contained in:
Anang Yusman 2024-12-29 19:12:30 +08:00
parent da871a8671
commit fdc408e303
1 changed files with 35 additions and 37 deletions

View File

@ -35,6 +35,7 @@ import { Textarea } from "@/components/ui/textarea";
import { loading } from "@/lib/swal"; import { loading } from "@/lib/swal";
import { import {
generateDataArticle, generateDataArticle,
getDetailArticle,
getGenerateKeywords, getGenerateKeywords,
getGenerateTitle, getGenerateTitle,
} from "@/service/content/ai"; } from "@/service/content/ai";
@ -86,14 +87,17 @@ export default function FormImageAI() {
const [selectedSEO, setSelectedSEO] = useState<string>(""); const [selectedSEO, setSelectedSEO] = useState<string>("");
const [title, setTitle] = useState<string>(""); const [title, setTitle] = useState<string>("");
const [selectedAdvConfig, setSelectedAdvConfig] = useState<string>(""); const [selectedAdvConfig, setSelectedAdvConfig] = useState<string>("");
const [articleIds, setArticleIds] = useState<any>([]); const [editingArticleId, setEditingArticleId] = useState<string | null>(null);
const [isLoading, setIsLoading] = useState<boolean>(false);
const [articleIds, setArticleIds] = useState<string[]>([]);
const [isGeneratedArticle, setIsGeneratedArticle] = useState(false);
const [articleBody, setArticleBody] = useState<string>("");
const [selectedArticleId, setSelectedArticleId] = useState<string | null>( const [selectedArticleId, setSelectedArticleId] = useState<string | null>(
null null
); );
const [isGeneratedArticle, setIsGeneratedArticle] = useState(false); const [detailData, setDetailData] = useState<any>(null);
const [articleBody, setArticleBody] = useState<string>(""); const [articleImages, setArticleImages] = useState<string[]>([]);
const [editingArticleId, setEditingArticleId] = useState<string | null>(null);
const [isLoading, setIsLoading] = useState<boolean>(false);
const [selectedTarget, setSelectedTarget] = useState(""); const [selectedTarget, setSelectedTarget] = useState("");
const [unitSelection, setUnitSelection] = useState({ const [unitSelection, setUnitSelection] = useState({
@ -211,7 +215,6 @@ export default function FormImageAI() {
}; };
const handleGenerateArtikel = async () => { const handleGenerateArtikel = async () => {
loading();
const request = { const request = {
advConfig: selectedAdvConfig, advConfig: selectedAdvConfig,
style: selectedWritingStyle, style: selectedWritingStyle,
@ -219,7 +222,7 @@ export default function FormImageAI() {
connectToWeb: true, connectToWeb: true,
lang: selectedLanguage, lang: selectedLanguage,
pointOfView: "None", pointOfView: "None",
title: selectedTitle, title: title,
imageSource: "Web", imageSource: "Web",
mainKeyword: selectedMainKeyword, mainKeyword: selectedMainKeyword,
additionalKeywords: selectedSEO, additionalKeywords: selectedSEO,
@ -241,7 +244,7 @@ export default function FormImageAI() {
const newArticleId = res?.data?.data?.id; const newArticleId = res?.data?.data?.id;
setIsGeneratedArticle(true); setIsGeneratedArticle(true);
setArticleIds((prevIds: any) => { setArticleIds((prevIds: string[]) => {
if (prevIds.length < 5) { if (prevIds.length < 5) {
return [...prevIds, newArticleId]; return [...prevIds, newArticleId];
} else { } else {
@ -251,12 +254,30 @@ export default function FormImageAI() {
} }
}); });
Cookies.set("nulisAIArticleIdTemp", articleIds); Cookies.set("nulisAIArticleIdTemp", JSON.stringify(articleIds));
}; };
const handleArticleIdClick = (articleId: string) => { // const handleArticleIdClick = (articleId: string) => {
setEditingArticleId(articleId); // setEditingArticleId(articleId);
setSelectedArticleId(articleId); // setSelectedArticleId(articleId);
// };
const handleArticleIdClick = async (id: string) => {
// Fetch article details by ID
const res = await getDetailArticle(id);
const articleData = res?.data?.data;
const cleanArticleBody = articleData?.articleBody?.replace(
/<img[^>]*>/g,
""
);
const articleImagesData = articleData?.imagesUrl?.split(",");
// Update state with new article data
setArticleBody(cleanArticleBody || "");
setDetailData(articleData);
setSelectedArticleId(id);
setArticleImages(articleImagesData || []);
}; };
const handleEditClick = () => { const handleEditClick = () => {
@ -591,7 +612,7 @@ export default function FormImageAI() {
{isGeneratedArticle && ( {isGeneratedArticle && (
<div className="mt-3 pb-0"> <div className="mt-3 pb-0">
{articleIds.map((id: any, index: any) => ( {articleIds.map((id: string, index: number) => (
<Button <Button
key={index} key={index}
className={`btn m-1 ${ className={`btn m-1 ${
@ -644,7 +665,7 @@ export default function FormImageAI() {
render={({ field: { onChange, value } }) => ( render={({ field: { onChange, value } }) => (
<JoditEditor <JoditEditor
ref={editor} ref={editor}
value={value || articleBody} // Show the selected article body in the editor value={articleBody || value} // Ensure the JoditEditor receives the correct article body
onChange={onChange} onChange={onChange}
className="dark:text-black" className="dark:text-black"
/> />
@ -656,29 +677,6 @@ export default function FormImageAI() {
</p> </p>
)} )}
</div> </div>
{/* {isGeneratedArticle && articleIds.length > 0 && (
<div className="my-4">
<h3>Generated Article IDs:</h3>
{articleIds.map((id: any, index: any) => (
<span
key={index}
className="badge badge-pill bg-primary text-white cursor-pointer mx-2"
onClick={() => handleArticleIdClick(id)}
>
{id}
</span>
))}
</div>
)} */}
{/* {editingArticleId && (
<div className="my-4">
<Button color="secondary" onClick={handleEditClick}>
Edit Article
</Button>
</div>
)} */}
</div> </div>
<div className="py-3"> <div className="py-3">
<Label>Attachment</Label> <Label>Attachment</Label>