관리-도구
편집 파일: index.js
import { useInnerBlocksProps, InnerBlocks } from '@wordpress/block-editor'; import { useMemo, memo } from '@wordpress/element'; const { pagelayer_shortcodes } = pagelayer_config; const pl_blocks = pagelayer_shortcodes; const Render = (props) => { const { _props, plTag, TagName = 'div'} = props; const { setAttributes, isSelected } = _props; const pl_props = pl_blocks[plTag]; // Set inner block of group blocks const addInnerElement = (tag, inner_content) => { var childBlocks = []; // Set inner content if('inner_content' in inner_content[tag]){ const content = inner_content[tag]['inner_content']; for( var key in content ){ for( var _key in content[key] ){ let newAdded = addInnerElement(_key, content[key]); childBlocks.push(newAdded); } } } var blockTag = pagelayerBlockNameByTag(tag); let blockProps = {}; // Set default if(tag in inner_content && 'atts' in inner_content[tag]){ blockProps = {...blockProps, ...inner_content[tag]['atts']}; } return [blockTag, blockProps, childBlocks]; } // Create group blocks array const createGroup = (sc, gProp) => { const groupsList = []; var childGroups = []; sc = (sc == 'pagelayer/pl-inner-row') ? 'pagelayer/pl-row' : sc; const Childprops = pl_blocks[gProp['sc']]; // We have nested group? if(Childprops && 'has_group' in Childprops){ var ChildHasGroup = Childprops['has_group']; var ChildGProp = Childprops[ChildHasGroup['section']][ChildHasGroup['prop']]; var _sc = pagelayerBlockNameByTag(ChildGProp['sc']); var innerGProps = createGroup(_sc, ChildGProp); childGroups = [...childGroups, ...innerGProps]; } if(gProp['sc'] == 'pl_inner_row'){ if(gProp && 'inner_content' in gProp && !pagelayer_empty(gProp['inner_content'])){ for( var key in gProp['inner_content'] ){ for( var tag in gProp['inner_content'][key] ){ groupsList.push( addInnerElement(tag, gProp['inner_content'][key]) ); } } } return groupsList; } for(var i=0; i < gProp['count']; i++){ groupsList.push([sc, {}, childGroups]); } return groupsList; } var has_group = pl_props['has_group']; var gProp = pl_props[has_group['section']][has_group['prop']]; var sc = gProp['sc'] === 'pl_inner_row' ? 'pl_row' : gProp['sc']; sc = pagelayerBlockNameByTag(sc); var InnerBlocksProps = {}; var ALLOWED_BLOCKS = [sc]; if(gProp['sc'] === 'pl_inner_row'){ ALLOWED_BLOCKS = []; } // Create group array const getGroupTemplate = useMemo( () => { return createGroup(sc, gProp); }, [sc, gProp]); // console.log(getGroupTemplate); if(getGroupTemplate.length > 0){ var templateProps = { template: getGroupTemplate, templateLock: false, renderAppender: false, } InnerBlocksProps = {...InnerBlocksProps, ...templateProps}; } if(!pagelayer_empty(ALLOWED_BLOCKS)){ var allowedProps = { allowedBlocks: ALLOWED_BLOCKS } InnerBlocksProps = {...InnerBlocksProps, ...allowedProps}; } var newProps = { ...props }; delete newProps._props; delete newProps.plTag; delete newProps.TagName; const innerProps = useInnerBlocksProps( newProps, InnerBlocksProps); return( <> <TagName {...innerProps} /> {isSelected && ( <div className="pagelayer-block-appender"> <InnerBlocks.ButtonBlockAppender /> </div> )} </> ); } export const RenderGroupBlock = memo( Render );