import { __ } from "@wordpress/i18n"; import { InspectorControls } from "@wordpress/block-editor"; import { PanelBody, SelectControl, ComboboxControl, } from "@wordpress/components"; import "./editor.scss"; import { useSelect } from "@wordpress/data"; import { useEffect, useState } from "@wordpress/element"; import { decodeEntities } from "@wordpress/html-entities"; export default function OptionsSelectControl({ setAttributes, relatedPostId }) { let [relatedQuestionPages, setRelatedQuestionPages] = useState(null); const lang = getAdminLanguageFromCookie("wp-wpml_current_language"); function getAdminLanguageFromCookie(c_name) { var c_value = document.cookie, c_start = c_value.indexOf(" " + c_name + "="); if (c_start == -1) c_start = c_value.indexOf(c_name + "="); if (c_start == -1) { c_value = null; } else { c_start = c_value.indexOf("=", c_start) + 1; var c_end = c_value.indexOf(";", c_start); if (c_end == -1) { c_end = c_value.length; } c_value = unescape(c_value.substring(c_start, c_end)); } return c_value; } function handleRelatedPostChange(postId) { setAttributes({ relatedPostId: Number(postId) }); } function buildSelectOptions(relatedPossiblePages) { let options = []; if (relatedPossiblePages) { options.push({ value: 0, label: "Selectionnez une page" }); relatedPossiblePages.forEach((page) => { options.push({ value: page.id, label: decodeEntities(page.title.rendered), }); }); } else { options.push({ value: 0, label: "Pas encore de questions..." }); } return options; } // GET TAXONOMIES INOFRMATION let postTaxonomies = useSelect((select) => select("core/editor").getCurrentPostAttribute("thematiques") ); let postMainTaxonomy = useSelect( (select) => select("core").getEntityRecord( "taxonomy", "thematiques", postTaxonomies[0] ), [postTaxonomies] ); let postParentTaxonomy = useSelect( (select) => { if (postMainTaxonomy && postMainTaxonomy.parent) { return select("core").getEntityRecord( "taxonomy", "thematiques", postMainTaxonomy.parent ); } return null; }, [postMainTaxonomy] ); // GET RELATED POSSIBLE PAGES ACCORDING TO CURRENT TAXONOMY const relatedPossiblePages = useSelect((select) => { if (postMainTaxonomy) { let query = { status: "publish", per_page: -1, lang: lang, thematiques: postMainTaxonomy ? postMainTaxonomy.id : null, }; return select("core").getEntityRecords("postType", "questions", query); } return null; }); useEffect(() => { if (relatedPossiblePages) { setRelatedQuestionPages(buildSelectOptions(relatedPossiblePages)); } }, [relatedPossiblePages]); let currentGeneralThematique = postParentTaxonomy ?? postMainTaxonomy ?? null; let panelTitle = postParentTaxonomy ? "Questions " + postParentTaxonomy.name : postMainTaxonomy ? "Questions " + postMainTaxonomy.name : null; return ( {/* handleRelatedPostChange(e)} /> */} {relatedQuestionPages && ( handleRelatedPostChange(e)} /> )} ); }