homegrade_blocks_production/blocks/questions-container/src/OptionsSelectControl.js

141 lines
3.8 KiB
JavaScript

import { __ } from "@wordpress/i18n";
import { InspectorControls } from "@wordpress/block-editor";
import {
PanelBody,
SelectControl,
ComboboxControl,
} from "@wordpress/components";
import "./editor.scss";
import { Tip } from "@wordpress/components";
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 (
<InspectorControls>
<PanelBody title={__("Question Relié", "homegrade-blocks")}>
{/* <SelectControl
label={panelTitle}
value={relatedPostId}
options={relatedQuestionPages}
onChange={(e) => handleRelatedPostChange(e)}
/> */}
{relatedQuestionPages && (
<ComboboxControl
label={panelTitle}
value={relatedPostId}
options={relatedQuestionPages}
onChange={(e) => handleRelatedPostChange(e)}
/>
)}
{relatedPostId && (
<Tip>
{__(
"Pour modifier le contenu de la question affichée ici, rendez-vous dans la fiche question correspondante.",
"homegrade-blocks"
)}
</Tip>
)}
</PanelBody>
</InspectorControls>
);
}