/** * Creates sidebar blocks. */ import { useSelect } from '@wordpress/data'; import { createBlock, getBlockTypes } from '@wordpress/blocks'; import DraggableBlock from './draggable-block'; import DragAndDropComponent from './move-up-down'; // Stable reference so `useSelect` doesn't return a fresh empty array on every // call when no allowed blocks are resolved, which would trigger needless re-renders. const EMPTY_ALLOWED_BLOCKS = []; const Blocks = ( { defaultAllowedQuickSidebarBlocks, updateDefaultAllowedQuickSidebarBlocks, saveOptionToDatabase, enableRearrange, } ) => { const blocks = getBlockTypes(); const { blockInsertionPoint, getBlockRootClientId, getSelectedBlockAllowedBlocks, getSelectedBlockClientId, } = useSelect( ( select ) => { const blockEditor = select( 'core/block-editor' ); const { index } = blockEditor.getBlockInsertionPoint(); const clientId = blockEditor.getSelectedBlockClientId(); const rootClientId = blockEditor.getBlockRootClientId( clientId ); const allowedBlocks = blockEditor.getAllowedBlocks( clientId ); return { blockInsertionPoint: index, getBlockRootClientId: rootClientId, getSelectedBlockClientId: clientId, getSelectedBlockAllowedBlocks: allowedBlocks || EMPTY_ALLOWED_BLOCKS, }; }, [] ); const srfmBlocks = blocks.filter( ( block ) => { return defaultAllowedQuickSidebarBlocks.includes( block.name ); } ); const create = ( name ) => { return createBlock( name ); }; // Loop through each object and add id srfmBlocks.forEach( ( item, index ) => { item.id = `${ index + 1 }`; } ); const sortedY = defaultAllowedQuickSidebarBlocks .filter( ( item ) => item !== undefined && item !== null ) .map( ( item ) => srfmBlocks.find( ( { name } ) => name === item ) ) .filter( ( item ) => item !== undefined ); // Remove undefined objects return ( <> { ! enableRearrange && sortedY.map( ( block, index ) => ( ) ) } { enableRearrange && ( ) } ); }; export default Blocks;