/**
* External dependencies
*/
import classnames from 'classnames/dedupe';
/**
* Internal dependencies
*/
import getIcon from '../../utils/get-icon';
import ApplyFilters from '../../components/apply-filters';
import GapSettings from '../../components/gap-settings';
import ToggleGroup from '../../components/toggle-group';
import RangeControl from '../../components/range-control';
import { TemplatesModal } from '../../plugins/templates';
/**
* WordPress dependencies
*/
const { applyFilters } = wp.hooks;
const { __ } = wp.i18n;
const { Fragment, useState } = wp.element;
const { Button, PanelBody, Placeholder, ToolbarGroup, ToolbarButton, Tooltip } = wp.components;
const {
InspectorControls,
BlockControls,
useBlockProps,
useInnerBlocksProps: __stableUseInnerBlocksProps,
__experimentalUseInnerBlocksProps,
} = wp.blockEditor;
const { useSelect, useDispatch } = wp.data;
const { createBlock } = wp.blocks;
const useInnerBlocksProps = __stableUseInnerBlocksProps || __experimentalUseInnerBlocksProps;
/**
* Block Edit Class.
*/
export default function BlockEdit(props) {
const { clientId, attributes, setAttributes, isSelected } = props;
const { gap, gapCustom, gapVerticalCustom, verticalAlign, horizontalAlign } = attributes;
const [isTemplatesModalOpen, setIsTemplatesModalOpen] = useState(false);
const { removeBlock, replaceInnerBlocks } = useDispatch('core/block-editor');
const { getBlocks, columnsCount } = useSelect((select) => {
const { getBlockCount } = select('core/block-editor');
return {
getBlocks: select('core/block-editor').getBlocks,
columnsCount: getBlockCount(clientId),
};
}, []);
/**
* Get columns sizes array from layout string
*
* @param {string} layout - layout data. Example: `3-6-3`
*
* @return {array}.
*/
function getColumnsFromLayout(layout) {
const result = [];
const columnsData = layout.split('-');
columnsData.forEach((col) => {
const colAttrs = {
size: col,
};
if (col === 'a') {
colAttrs.size = 'auto';
} else if (col === 'g') {
colAttrs.size = 'grow';
}
// responsive.
if (columnsData.length === 2) {
colAttrs.md_size = '12';
}
if (columnsData.length === 3) {
colAttrs.lg_size = '12';
}
if (columnsData.length === 4) {
colAttrs.md_size = '12';
colAttrs.lg_size = '6';
}
if (columnsData.length === 5) {
colAttrs.sm_size = '12';
colAttrs.md_size = '5';
colAttrs.lg_size = '4';
}
if (columnsData.length === 6) {
colAttrs.sm_size = '6';
colAttrs.md_size = '4';
colAttrs.lg_size = '3';
}
result.push(colAttrs);
});
return result;
}
/**
* Select predefined layout.
*
* @param {String} layout layout string.
*/
function onLayoutSelect(layout) {
const columnsData = getColumnsFromLayout(layout);
const newInnerBlocks = [];
columnsData.forEach((colAttrs) => {
newInnerBlocks.push(createBlock('ghostkit/grid-column', colAttrs));
});
replaceInnerBlocks(clientId, newInnerBlocks, false);
}
/**
* Layouts selector when no columns selected.
*
* @return {jsx}.
*/
function getLayoutsSelector() {
let layouts = [
'12',
'6-6',
'4-4-4',
'3-3-3-3',
'5-7',
'7-5',
'3-3-6',
'3-6-3',
'6-3-3',
'2-8-2',
'g-g-g-g-g',
'2-2-2-2-2-2',
];
layouts = applyFilters('ghostkit.editor.grid.layouts', layouts, props);
return (