import { __ } from "@wordpress/i18n"; import { useBlockProps } from "@wordpress/block-editor"; import "./editor.scss"; import { useEntityRecord } from "@wordpress/core-data"; import { useState } from "@wordpress/element"; import { useSelect, useDispatch } from "@wordpress/data"; import { useEffect } from "@wordpress/element"; import { useEntityProp } from "@wordpress/core-data"; import chevronDown from "./img/chevron_down.svg"; import { getAdminLanguageFromCookie } from "../../utilities.js"; export default function Edit({ attributes, setAttributes }) { let { tooltipWords } = attributes; console.log("tooltipWords ATTRIBUTES", tooltipWords); let [hasFetchedDatas, setHasFetchedDatas] = useState(false); function parseContentTooltips(editorContent) { const parser = new DOMParser(); const doc = parser.parseFromString(editorContent, "text/html"); const domTooltipWords = doc.querySelectorAll(".tooltip-word"); const tooltipWords = []; // Looping over tooltip words and filtering duplicates Array.from(domTooltipWords).forEach((tooltipWord) => { const tooltipID = tooltipWord.getAttribute("data-definition-id"); const tooltipText = tooltipWord.getAttribute("data-tooltip-word"); const tooltipDefinition = tooltipWord.getAttribute( "data-tooltip-definition", ); tooltipWords.push({ tooltipID, tooltipText, tooltipDefinition, }); }); return tooltipWords; } function parseBlocksTooltips(currentBlocks) { const blocksTooltipWords = []; currentBlocks.forEach((block) => { if ( (block.name === "homegrade-content-blocks/questions-container" || block.name === "homegrade-content-blocks/post-content-container") && block?.attributes?.tooltipsWordsUsed?.length > 0 ) { block.attributes.tooltipsWordsUsed.forEach((tooltipWord) => { blocksTooltipWords.push(tooltipWord); }); } }); return blocksTooltipWords; } function filterToolTipsArray(tooltipWords) { const filteredTooltipWords = Array.from( new Map( tooltipWords.map((tooltipWord) => [tooltipWord.tooltipID, tooltipWord]), ).values(), ); return filteredTooltipWords; // const filteredTooltipWords = []; // tooltipWords.forEach((tooltipWord) => { // const existingTooltip = filteredTooltipWords.find( // (item) => item.tooltipID === tooltipWord.tooltipID, // ); // if (!existingTooltip) { // filteredTooltipWords.push(tooltipWord); // } // }); } function parseTooltipWords() { let newParsedTooltipWords = parseContentTooltips(currentPost.content); let newBlocksTooltipWords = parseBlocksTooltips(currentBlocks); let allTooltipWords = [...newParsedTooltipWords, ...newBlocksTooltipWords]; const filteredTooltipWords = filterToolTipsArray(allTooltipWords); return filteredTooltipWords; } function buildTooltipWordsIdArray(tooltipsArray) { const tooltipWordsIds = tooltipsArray.map( (tooltipWord) => tooltipWord.tooltipID, ); return tooltipWordsIds; } function compareHasNewVocabularyWord(previousWords, newWords) { return !(JSON.stringify(previousWords) === JSON.stringify(newWords)); } const currentPost = useSelect((select) => select("core/editor").getCurrentPost(), ); const currentBlocks = useSelect((select) => select("core/block-editor").getBlocks(), ); const currentTaxonomies = useSelect((select) => select("core/editor").getCurrentPostAttribute("thematiques"), ); let currentThematique = useSelect( (select) => select("core").getEntityRecord( "taxonomy", "thematiques", currentTaxonomies[0], // or currentPost.thematiques[0] works as well ), [currentTaxonomies], ); const tooltipWordsIds = buildTooltipWordsIdArray(tooltipWords); const vocabulairePosts = useSelect( (select) => { if (!tooltipWordsIds.length) return []; return select("core").getEntityRecords("postType", "vocabulaire", { per_page: -1, include: tooltipWordsIds, }); }, [tooltipWordsIds], ); console.log("vocabulairePosts", vocabulairePosts); const currentLang = getAdminLanguageFromCookie("wp-wpml_current_language"); const localBlockName = currentLang === "fr" ? "Vocabulaire" : "Woordenschat"; useEffect(() => { if (currentPost.content && currentBlocks) { const newTooltipWords = parseTooltipWords(); const newTooltipWordsDatas = buildTooltipWordsIdArray(newTooltipWords); if (compareHasNewVocabularyWord(tooltipWords, newTooltipWords)) { setAttributes({ tooltipWords: newTooltipWords }); } } }, [currentPost, currentBlocks]); return (

{localBlockName + " — "} {currentThematique && currentThematique.name ? currentThematique.name : "...pas de thématique"}

{vocabulairePosts && vocabulairePosts.map((elem) => (
{elem.title.rendered}

{elem.acf.definition}

))}
); }