33 */
44import { __ } from '@wordpress/i18n' ;
55import { Dropdown , IconButton } from '@wordpress/components' ;
6- import { createBlock , isUnmodifiedDefaultBlock } from '@wordpress/blocks' ;
76import { Component } from '@wordpress/element' ;
8- import { withSelect , withDispatch } from '@wordpress/data' ;
9- import { compose } from '@wordpress/compose' ;
7+ import { withSelect } from '@wordpress/data' ;
8+ import { compose , ifCondition } from '@wordpress/compose' ;
109
1110/**
1211 * Internal dependencies
@@ -30,6 +29,8 @@ class Inserter extends Component {
3029 super ( ...arguments ) ;
3130
3231 this . onToggle = this . onToggle . bind ( this ) ;
32+ this . renderToggle = this . renderToggle . bind ( this ) ;
33+ this . renderContent = this . renderContent . bind ( this ) ;
3334 }
3435
3536 onToggle ( isOpen ) {
@@ -41,20 +42,46 @@ class Inserter extends Component {
4142 }
4243 }
4344
44- render ( ) {
45+ /**
46+ * Render callback to display Dropdown toggle element.
47+ *
48+ * @param {Function } options.onToggle Callback to invoke when toggle is
49+ * pressed.
50+ * @param {boolean } options.isOpen Whether dropdown is currently open.
51+ *
52+ * @return {WPElement } Dropdown toggle element.
53+ */
54+ renderToggle ( { onToggle, isOpen } ) {
4555 const {
46- items,
47- position,
48- title,
49- onInsertBlock,
50- rootClientId,
5156 disabled,
5257 renderToggle = defaultRenderToggle ,
5358 } = this . props ;
5459
55- if ( items . length === 0 ) {
56- return null ;
57- }
60+ return renderToggle ( { onToggle, isOpen, disabled } ) ;
61+ }
62+
63+ /**
64+ * Render callback to display Dropdown content element.
65+ *
66+ * @param {Function } options.onClose Callback to invoke when dropdown is
67+ * closed.
68+ *
69+ * @return {WPElement } Dropdown content element.
70+ */
71+ renderContent ( { onClose } ) {
72+ const { rootClientId, index } = this . props ;
73+
74+ return (
75+ < InserterMenu
76+ onSelect = { onClose }
77+ rootClientId = { rootClientId }
78+ index = { index }
79+ />
80+ ) ;
81+ }
82+
83+ render ( ) {
84+ const { position, title } = this . props ;
5885
5986 return (
6087 < Dropdown
@@ -64,22 +91,8 @@ class Inserter extends Component {
6491 onToggle = { this . onToggle }
6592 expandOnMobile
6693 headerTitle = { title }
67- renderToggle = { ( { onToggle, isOpen } ) => renderToggle ( { onToggle, isOpen, disabled } ) }
68- renderContent = { ( { onClose } ) => {
69- const onSelect = ( item ) => {
70- onInsertBlock ( item ) ;
71-
72- onClose ( ) ;
73- } ;
74-
75- return (
76- < InserterMenu
77- items = { items }
78- onSelect = { onSelect }
79- rootClientId = { rootClientId }
80- />
81- ) ;
82- } }
94+ renderToggle = { this . renderToggle }
95+ renderContent = { this . renderContent }
8396 />
8497 ) ;
8598 }
@@ -90,7 +103,6 @@ export default compose( [
90103 const {
91104 getEditedPostAttribute,
92105 getBlockInsertionPoint,
93- getSelectedBlock,
94106 getInserterItems,
95107 } = select ( 'core/editor' ) ;
96108
@@ -106,21 +118,10 @@ export default compose( [
106118
107119 return {
108120 title : getEditedPostAttribute ( 'title' ) ,
109- selectedBlock : getSelectedBlock ( ) ,
110- items : getInserterItems ( rootClientId ) ,
111- index,
121+ hasItems : getInserterItems ( rootClientId ) . length > 0 ,
112122 rootClientId,
123+ index,
113124 } ;
114125 } ) ,
115- withDispatch ( ( dispatch , ownProps ) => ( {
116- onInsertBlock : ( item ) => {
117- const { selectedBlock, index, rootClientId } = ownProps ;
118- const { name, initialAttributes } = item ;
119- const insertedBlock = createBlock ( name , initialAttributes ) ;
120- if ( selectedBlock && isUnmodifiedDefaultBlock ( selectedBlock ) ) {
121- return dispatch ( 'core/editor' ) . replaceBlocks ( selectedBlock . clientId , insertedBlock ) ;
122- }
123- return dispatch ( 'core/editor' ) . insertBlock ( insertedBlock , index , rootClientId ) ;
124- } ,
125- } ) ) ,
126+ ifCondition ( ( { hasItems } ) => hasItems ) ,
126127] ) ( Inserter ) ;
0 commit comments