Skip to content

Commit

Permalink
Bundle the block autocompleter in the block-editor package (#21534)
Browse files Browse the repository at this point in the history
* Bundle the block autocompleter in the block-editor package

* small optimizatioin

* fix unit tests
  • Loading branch information
youknowriad authored Apr 15, 2020
1 parent 026121f commit 450cbd4
Show file tree
Hide file tree
Showing 8 changed files with 41 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@ import { once } from 'lodash';
/**
* WordPress dependencies
*/
import { select, dispatch } from '@wordpress/data';
import { select } from '@wordpress/data';
import { createBlock } from '@wordpress/blocks';
import { BlockIcon } from '@wordpress/block-editor';

/**
* Internal dependencies
*/
import BlockIcon from '../components/block-icon';

/** @typedef {import('@wordpress/block-editor').WPEditorInserterItem} WPEditorInserterItem */

Expand Down Expand Up @@ -68,7 +72,13 @@ function defaultGetSelectedBlockName() {
* @return {Promise} Promise resolving once reusable blocks fetched.
*/
const fetchReusableBlocks = once( () => {
dispatch( 'core/editor' ).__experimentalFetchReusableBlocks();
const { __experimentalFetchReusableBlocks } = select(
'core/block-editor'
).getSettings();

if ( __experimentalFetchReusableBlocks ) {
__experimentalFetchReusableBlocks();
}
} );

/**
Expand All @@ -84,7 +94,7 @@ export function createBlockCompleter( {
} = {} ) {
return {
name: 'blocks',
className: 'editor-autocompleters__block',
className: 'block-editor-autocompleters__block',
triggerPrefix: '/',
options() {
fetchReusableBlocks();
Expand Down
5 changes: 5 additions & 0 deletions packages/block-editor/src/autocompleters/style.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.block-editor-autocompleters__block {
.block-editor-block-icon {
margin-right: 8px;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { shallow } from 'enzyme';
* Internal dependencies
*/
import blockCompleter, { createBlockCompleter } from '../block';
import '../../../';
import '../../store';

describe( 'block', () => {
let originalFetch;
Expand Down
19 changes: 18 additions & 1 deletion packages/block-editor/src/components/autocomplete/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,22 @@ import { clone } from 'lodash';
import { applyFilters, hasFilter } from '@wordpress/hooks';
import { compose } from '@wordpress/compose';
import { Autocomplete as OriginalAutocomplete } from '@wordpress/components';
import { useMemo } from '@wordpress/element';
import { getDefaultBlockName } from '@wordpress/blocks';

/**
* Internal dependencies
*/
import { withBlockEditContext } from '../block-edit/context';
import blockAutocompleter from '../../autocompleters/block';

/**
* Shared reference to an empty array for cases where it is important to avoid
* returning a new array reference on every invocation.
*
* @type {Array}
*/
const EMPTY_ARRAY = [];

/**
* Wrap the default Autocomplete component with one that
Expand All @@ -26,7 +37,13 @@ import { withBlockEditContext } from '../block-edit/context';
*/
export function withFilteredAutocompleters( Autocomplete ) {
return ( props ) => {
let { completers = [] } = props;
let { completers = EMPTY_ARRAY, blockName } = props;
completers = useMemo( () => {
if ( blockName === getDefaultBlockName() ) {
return completers.concat( [ blockAutocompleter ] );
}
return completers;
}, [ completers, blockName ] );

if ( hasFilter( 'editor.Autocomplete.completers' ) ) {
completers = applyFilters(
Expand Down
1 change: 1 addition & 0 deletions packages/block-editor/src/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

// Only add styles for components that are used inside the editing canvas here:

@import "./autocompleters/style.scss";
@import "./components/block-icon/style.scss";
@import "./components/block-inspector/style.scss";
@import "./components/block-list/style.scss";
Expand Down
1 change: 0 additions & 1 deletion packages/editor/src/components/autocompleters/index.js
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
export { default as blockAutocompleter } from './block';
export { default as userAutocompleter } from './user';
6 changes: 0 additions & 6 deletions packages/editor/src/components/autocompleters/style.scss
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
.editor-autocompleters__block {
.block-editor-block-icon {
margin-right: 8px;
}
}

.editor-autocompleters__user {
.editor-autocompleters__no-avatar::before {
/* stylelint-disable */
Expand Down
10 changes: 2 additions & 8 deletions packages/editor/src/hooks/default-autocompleters.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,16 @@ import { clone } from 'lodash';
* WordPress dependencies
*/
import { addFilter } from '@wordpress/hooks';
import { getDefaultBlockName } from '@wordpress/blocks';

/**
* Internal dependencies
*/
import { blockAutocompleter, userAutocompleter } from '../components';
import { userAutocompleter } from '../components';

function setDefaultCompleters( completers = [], blockName ) {
function setDefaultCompleters( completers = [] ) {
// Provide copies so filters may directly modify them.
completers.push( clone( userAutocompleter ) );

// Add blocks autocompleter for Paragraph block
if ( blockName === getDefaultBlockName() ) {
completers.push( clone( blockAutocompleter ) );
}

return completers;
}

Expand Down

0 comments on commit 450cbd4

Please sign in to comment.