import {
BlockControls,
InspectorControls,
useBlockProps,
useInnerBlocksProps,
} from '@wordpress/block-editor';
import { createBlock } from '@wordpress/blocks';
import {
Button,
PanelBody,
Placeholder,
ToolbarButton,
ToolbarGroup,
} from '@wordpress/components';
import { useDispatch, useSelect } from '@wordpress/data';
import { applyFilters } from '@wordpress/hooks';
import { __ } from '@wordpress/i18n';
import classnames from 'classnames/dedupe';
import ApplyFilters from '../../components/apply-filters';
import GapSettings from '../../components/gap-settings';
import RangeControl from '../../components/range-control';
import ToggleGroup from '../../components/toggle-group';
import getIcon from '../../utils/get-icon';
/**
* Block Edit Class.
*
* @param props
*/
export default function BlockEdit(props) {
const { clientId, attributes, setAttributes } = props;
const {
gap,
gapCustom,
gapVerticalCustom,
verticalAlign,
horizontalAlign,
} = attributes;
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),
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
/**
* 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 LayoutsSelector() {
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);
const templatesModal = applyFilters(
'ghostkit.editor.grid.templatesModal',
'',
props
);
return (