Skip to content

Commit

Permalink
Add inbetween inserters
Browse files Browse the repository at this point in the history
  • Loading branch information
youknowriad committed May 27, 2022
1 parent 7bf60af commit 998793c
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 3 deletions.
4 changes: 4 additions & 0 deletions packages/block-editor/src/components/block-list/style.scss
Expand Up @@ -444,3 +444,7 @@
box-shadow: $border-width 0 0 0 var(--wp-admin-theme-color) inset;
}
}

.is-root-container.is-exploded-mode > .block-list-appender {
display: none;
}
19 changes: 16 additions & 3 deletions packages/block-editor/src/components/block-popover/inbetween.js
Expand Up @@ -7,7 +7,13 @@ import classnames from 'classnames';
* WordPress dependencies
*/
import { useSelect } from '@wordpress/data';
import { useCallback, useMemo, createContext } from '@wordpress/element';
import {
useCallback,
useMemo,
createContext,
useState,
useEffect,
} from '@wordpress/element';
import { Popover } from '@wordpress/components';
import { isRTL } from '@wordpress/i18n';

Expand All @@ -28,6 +34,13 @@ function BlockPopoverInbetween( {
__unstableContentRef,
...props
} ) {
// This is a temporary hack to get the inbetween inserter to recompute properly.
const [ positionRecompute, forceRecompute ] = useState( {} );
useEffect( () => {
const intervalHandle = setInterval( forceRecompute, 500 );
return () => clearInterval( intervalHandle );
}, [] );

const { orientation, rootClientId, isVisible } = useSelect(
( select ) => {
const {
Expand Down Expand Up @@ -89,7 +102,7 @@ function BlockPopoverInbetween( {
? previousElement.offsetHeight
: nextElement.offsetHeight,
};
}, [ previousElement, nextElement, isVertical ] );
}, [ previousElement, nextElement, isVertical, positionRecompute ] );

const getAnchorRect = useCallback( () => {
if ( ( ! previousElement && ! nextElement ) || ! isVisible ) {
Expand Down Expand Up @@ -150,7 +163,7 @@ function BlockPopoverInbetween( {
width: 0,
ownerDocument,
};
}, [ previousElement, nextElement ] );
}, [ previousElement, nextElement, positionRecompute ] );

const popoverScrollRef = usePopoverScroll( __unstableContentRef );

Expand Down
@@ -0,0 +1,41 @@
/**
* WordPress dependencies
*/
import { useSelect } from '@wordpress/data';

/**
* Internal dependencies
*/
import BlockPopoverInbetween from '../block-popover/inbetween';
import { store as blockEditorStore } from '../../store';
import Inserter from '../inserter';

function ExplodedModeInserters( { __unstableContentRef } ) {
const blockOrder = useSelect( ( select ) => {
return select( blockEditorStore ).getBlockOrder();
}, [] );

return blockOrder.map( ( clientId, index ) => {
if ( index === blockOrder.length - 1 ) {
return null;
}
return (
<BlockPopoverInbetween
key={ clientId }
previousClientId={ clientId }
nextClientId={ blockOrder[ index + 1 ] }
__unstableContentRef={ __unstableContentRef }
>
<div className="block-editor-block-list__insertion-point-inserter">
<Inserter
position="bottom center"
clientId={ blockOrder[ index + 1 ] }
__experimentalIsQuick
/>
</div>
</BlockPopoverInbetween>
);
} );
}

export default ExplodedModeInserters;
6 changes: 6 additions & 0 deletions packages/block-editor/src/components/block-tools/index.js
Expand Up @@ -23,6 +23,7 @@ import SelectedBlockPopover from './selected-block-popover';
import { store as blockEditorStore } from '../../store';
import BlockContextualToolbar from './block-contextual-toolbar';
import usePopoverScroll from '../block-popover/use-popover-scroll';
import ExplodedModeInserters from './exploded-mode-inserters';

/**
* Renders block tools (the block toolbar, select/navigation mode toolbar, the
Expand Down Expand Up @@ -143,6 +144,11 @@ export default function BlockTools( {
name="__unstable-block-tools-after"
ref={ blockToolbarAfterRef }
/>
{ isExplodedMode && (
<ExplodedModeInserters
__unstableContentRef={ __unstableContentRef }
/>
) }
</InsertionPointOpenRef.Provider>
</div>
);
Expand Down

0 comments on commit 998793c

Please sign in to comment.