import { __ } from "@wordpress/i18n";
import { useDispatch, useSelect } from "@wordpress/data";
import { RichText } from "@wordpress/block-editor";
import { memo, useMemo, useState } from "@wordpress/element";
import { HeaderIcon, InfoIcon, TriggerButtonIcon } from "./icon";
import { ProIconLight } from "../../admin/icons";
// Writing tone list
const writingTonesList = [
{ label: "Balanced", value: "balanced" },
{ label: "Professional", value: "professional" },
{ label: "Friendly", value: "friendly" },
{ label: "Conversational", value: "conversational" },
{ label: "Informative", value: "informative" },
{ label: "Technical", value: "technical" },
{ label: "Persuasive", value: "persuasive" },
{ label: "Supportive", value: "supportive" },
{ label: "Documentation Style", value: "documentation_style" },
{ label: "Beginner-Friendly", value: "beginner_friendly" },
];
// Supported languages list
const supportedLanguagesList = [
{ label: "English", value: "english" },
{ label: "Bengali", value: "bengali" },
{ label: "Hindi", value: "hindi" },
{ label: "Spanish", value: "spanish" },
{ label: "French", value: "french" },
{ label: "German", value: "german" },
{ label: "Portuguese", value: "portuguese" },
{ label: "Chinese", value: "chinese" },
{ label: "Japanese", value: "japanese" },
{ label: "Korean", value: "korean" },
{ label: "Arabic", value: "arabic" },
{ label: "Urdu", value: "urdu" },
{ label: "Turkish", value: "turkish" },
{ label: "Indonesian", value: "indonesian" },
{ label: "Russian", value: "russian" },
{ label: "Italian", value: "italian" },
{ label: "Dutch", value: "dutch" },
];
// Content source list
const faqContentSourceList = [
{ label: "Select Source", value: "" },
{ label: "Pages", value: "page" },
{ label: "Posts", value: "post" },
{ label: "Products", value: "product" },
];
const faqContentSourceLabels = {
"": __("Select Content", "easy-accordion-free"),
page: __("Select Page", "easy-accordion-free"),
post: __("Select Post", "easy-accordion-free"),
product: __("Select Product", "easy-accordion-free"),
};
// TriggerButton.
export const TriggerButton = memo(() => (
{__("Generate FAQs with AI", "easy-accordion-free")}
));
// Controlled Select.
const RenderSelect = ({ items, id, value, onChange }) => (
onChange(id, e.target.value)}>
{items?.map(({ label, value: optVal, disabled }) => (
{label}
))}
);
// PromptCardHeading.
export const PromptCardHeading = ({ onClose }) => (
{__("AI FAQs Generation", "easy-accordion-free")}
{__(
"Configure the AI parameters to generate desired FAQs for your content.",
"easy-accordion-free"
)}
onClose(null)}
className="eab-faq-gen-prompt-card__close-btn eab-icon-cross sp-cursor-pointer"
>
);
// PromptCard.
export const PromptCard = memo(
({ formData, onFieldChange, handleFormSubmit, loading, modelOptions = [], generatedFaqItems }) => {
// Fetch posts based on selected content source
const allPosts = useSelect(
(select) =>
select("core").getEntityRecords("postType", formData?.contentSource, {
per_page: 100,
status: "publish",
}),
[formData?.contentSource]
);
const postOptions = useMemo(() => {
return (
allPosts?.map((post) => ({
label: post?.title?.raw.length > 60 ? post?.title?.raw.substring(0, 60) + "..." : post?.title?.raw,
value: post?.link,
id: post?.id,
})) || []
);
}, [allPosts]);
return (
);
}
);
// ManageGeneratedData.
export const ManageGeneratedData = memo(
({ apiResult, setStep, parentId, setIsOpenPopup, setApiResult, childName, resetForm }) => {
const [generatedFaqs, setGeneratedFaqs] = useState(apiResult);
const [activeId, setActiveId] = useState(0);
const { insertBlock } = useDispatch("core/block-editor");
const createFaqsWithContent = () => {
generatedFaqs?.forEach(({ question, answer, isSelected }) => {
if (isSelected && question && answer) {
const newBlock = wp.blocks.createBlock(childName, { accordionTitle: question }, [
wp.blocks.createBlock("core/paragraph", { content: answer }),
]);
insertBlock(newBlock, undefined, parentId);
}
});
// Reset everything after inserting
setIsOpenPopup(false);
setApiResult([]);
setStep("prompt-modal");
resetForm(); // ← resets form state to defaults
};
// update single faqs value.
const updateFaqsValue = (id, key, value) => {
setGeneratedFaqs((prev) => prev.map((item) => (item.id === id ? { ...item, [key]: value } : item)));
};
// update all faqs value.
const handleFilteringAllFaqs = (value) => {
setGeneratedFaqs((prev) => prev.map((item) => ({ ...item, isSelected: value })));
};
const totalSelectedItems = generatedFaqs?.filter((item) => item.isSelected)?.length;
return (
{__("Generated FAQs", "easy-accordion-free")}
{__("Select the FAQs you want to add to your block ", "easy-accordion-free")}
{"("}
{totalSelectedItems}
{__(" selected", "easy-accordion-free")}
{")"}
handleFilteringAllFaqs(true)}
>
{__("Select All", "easy-accordion-free")}
handleFilteringAllFaqs(false)}>
{__("Deselect All", "easy-accordion-free")}
{generatedFaqs?.map(({ id, question, answer, isSelected }, i) => (
setActiveId((prev) => (prev === id ? null : id))}
>
updateFaqsValue(id, "isSelected", !isSelected)}
onClick={(e) => e.stopPropagation()}
/>
updateFaqsValue(id, "question", value)}
/>
{activeId === id && (
updateFaqsValue(id, "answer", value)}
/>
)}
))}
setStep("prompt-modal")}>
{__("Back to Settings", "easy-accordion-free")}
{__("Add Selected FAQs", "easy-accordion-free")}
);
}
);
// WarningMessage.
export const WarningMessage = memo(({ errorMessage }) => (
));
// upgrade message.
export const UpgradeToProMessage = memo(() => (
));