import "./editor.scss"; import "./focus-point-thematique"; import { __ } from "@wordpress/i18n"; import { useSelect, dispatch, select } from "@wordpress/data"; import { useEffect, useState } from "@wordpress/element"; import { createBlock } from "@wordpress/blocks"; import { useBlockProps, MediaPlaceholder, BlockControls, MediaReplaceFlow, InspectorControls, } from "@wordpress/block-editor"; import { ToolbarButton, Spinner, withNotices, Button, PanelBody, } from "@wordpress/components"; import { InnerBlocks } from "@wordpress/block-editor"; import { isBlobURL, revokeBlobURL } from "@wordpress/blob"; function Edit({ attributes, setAttributes, noticeOperations, noticeList, noticeUI, clientId, ...props }) { const { coverId, coverAlt, focusBullets } = attributes; const currentTaxonomiesID = useSelect((select) => select("core/editor").getCurrentPostAttribute("thematiques") ); // ### Get current Thematique const mainTaxonomy = useSelect( (select) => select("core").getEntityRecord( "taxonomy", "thematiques", currentTaxonomiesID[0] ), [currentTaxonomiesID] ); const coverID = (mainTaxonomy && mainTaxonomy.acf.taxonomy_pictures.illustration_xl) ?? null; const cover = useSelect( (select) => (coverID ? select("core").getMedia(coverID) : null), [coverID] ); const coverUrl = cover && cover.source_url ? cover.source_url : null; let children = useSelect( (select) => select("core/block-editor").getBlocksByClientId(clientId)[0].innerBlocks ); function passCoverUrlToChildren() { if (children && coverUrl) { children.forEach(function (child) { dispatch("core/block-editor").updateBlockAttributes(child.clientId, { coverUrl: coverUrl, }); }); } } function passIndexToChildren() { if (children) { children.forEach((child, index) => { dispatch("core/block-editor").updateBlockAttributes(child.clientId, { focusIndex: index + 1, }); }); } } function updateFocusPointBullets() { if (children) { const focusBullets = children.map((child, index) => { return { title: child.attributes.focusTitle, x: child.attributes.focusPosition.x, y: child.attributes.focusPosition.y, }; }); setAttributes({ focusBullets }); } } function insertFocusPointBlock() { const index = children && children.length ? children.length : 0; const newBlock = createBlock("homegrade-content-blocks/focus-point", {}); dispatch("core/block-editor").insertBlocks(newBlock, index, clientId); } function handleBulletClick(index) { const editor = select("core/block-editor"); const innerBlocks = editor.getBlocks(attributes.clientId)[0].innerBlocks; // const innerBlocks = editor.getBlocks(attributes.clientId)[0]; if (innerBlocks && innerBlocks[index]) { const bulletBlock = editor.getBlocks(attributes.clientId)[0].innerBlocks[ index ]; dispatch("core/block-editor").selectBlock(bulletBlock.clientId); } } const renderedFocusPointBullets = focusBullets.map((focusBullet, index) => { return (
handleBulletClick(index)} > {index + 1}
); }); useEffect(() => { updateFocusPointBullets(); if (!coverId && isBlobURL(coverUrl)) { setAttributes({ coverUrl: undefined, coverAlt: "" }); } }, []); useEffect(() => { passCoverUrlToChildren(); }, [coverUrl]); useEffect(() => { updateFocusPointBullets(); passCoverUrlToChildren(); }, [children]); return ( <>
{cover && cover.source_url && (
)} {cover && cover.source_url && (
{coverAlt} {renderedFocusPointBullets}
)}
); } export default withNotices(Edit);