/**
* External dependencies
*/
import classnames from 'classnames';
import Colcade from 'colcade';
const {
addAction,
} = wp.hooks;
/**
* Prepare Masonry layout with Colcade script.
*/
function maybePrepareMasonryLayout(element) {
element.className = classnames(
element.className,
'cnvs-block-posts-layout-masonry-colcade-ready'
);
element.colcadeObj = new Colcade(element, {
columns: '.cnvs-block-post-grid-col',
items: '.cnvs-block-post-grid-item'
});
}
/**
* Destroy Masonry layout with Colcade script.
*/
function maybeDestroyMasonryLayout(element) {
if (element.colcadeObj) {
element.colcadeObj.destroy();
element.colcadeObj = null;
}
}
function getMasonryBlockId(props) {
if ('canvas/posts' !== props.block) {
return false;
}
if ('masonry' !== props.attributes.layout) {
return false;
}
const clientId = props.blockProps.clientId;
if (!clientId) {
return false;
}
return clientId;
}
addAction('canvas.components.serverSideRender.onChange', 'canvas/posts.masonry.init', function (props) {
const clientId = getMasonryBlockId(props);
if (!clientId) {
return;
}
const element = document.querySelector(`[data-block="${clientId}"] .cnvs-block-posts-layout-masonry:not(.cnvs-block-posts-layout-masonry-colcade-ready)`);
if (element) {
maybePrepareMasonryLayout(element);
}
});
addAction('canvas.components.serverSideRender.onBeforeChange', 'canvas-posts.masonry.destroy', function (props) {
const clientId = getMasonryBlockId(props);
if (!clientId) {
return;
}
const element = document.querySelector(`[data-block="${clientId}"] .cnvs-block-posts-layout-masonry-colcade-ready`);
if (element) {
maybeDestroyMasonryLayout(element);
}
});