From 928a2fa5e02b1e5037335aee780b915aab3ea33a Mon Sep 17 00:00:00 2001 From: chad1008 <13856531+chad1008@users.noreply.github.com> Date: Fri, 8 Dec 2023 16:30:25 -0500 Subject: [PATCH 1/6] implement `Tabs` --- .../src/components/inserter/tabs.js | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/packages/block-editor/src/components/inserter/tabs.js b/packages/block-editor/src/components/inserter/tabs.js index a75e0029ef490..bf42088cec3a5 100644 --- a/packages/block-editor/src/components/inserter/tabs.js +++ b/packages/block-editor/src/components/inserter/tabs.js @@ -2,9 +2,16 @@ * WordPress dependencies */ import { useMemo } from '@wordpress/element'; -import { TabPanel } from '@wordpress/components'; +import { privateApis as componentsPrivateApis } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; +/** + * Internal dependencies + */ +import { unlock } from '../../lock-unlock'; + +const { Tabs } = unlock( componentsPrivateApis ); + const blocksTab = { name: 'blocks', /* translators: Blocks tab title in the block inserter. */ @@ -45,13 +52,22 @@ function InserterTabs( { }, [ prioritizePatterns, showPatterns, showMedia ] ); return ( - - { children } - +
+ + + { tabs.map( ( tab ) => ( + + { tab.title } + + ) ) } + + { tabs.map( ( tab ) => ( + + { children( tab ) } + + ) ) } + +
); } From 68213d351e884ff82b0855beb4192038bdc31b84 Mon Sep 17 00:00:00 2001 From: chad1008 <13856531+chad1008@users.noreply.github.com> Date: Fri, 8 Dec 2023 17:01:52 -0500 Subject: [PATCH 2/6] update styles --- packages/block-editor/src/components/inserter/style.scss | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/block-editor/src/components/inserter/style.scss b/packages/block-editor/src/components/inserter/style.scss index 755445246e859..97a3d877b7e72 100644 --- a/packages/block-editor/src/components/inserter/style.scss +++ b/packages/block-editor/src/components/inserter/style.scss @@ -61,7 +61,7 @@ $block-inserter-tabs-height: 44px; .block-editor-inserter__popover .block-editor-inserter__menu { margin: -$grid-unit-15; - .block-editor-inserter__tabs .components-tab-panel__tabs { + .block-editor-inserter__tabs div[role="tablist"] { top: $grid-unit-10 + $grid-unit-20 + $grid-unit-60 - $grid-unit-15; } @@ -118,10 +118,10 @@ $block-inserter-tabs-height: 44px; flex-direction: column; overflow: hidden; - .components-tab-panel__tabs { + div[role="tablist"] { border-bottom: $border-width solid $gray-300; - .components-tab-panel__tabs-item { + button[role="tab"] { flex-grow: 1; margin-bottom: -$border-width; &[id$="reusable"] { @@ -133,7 +133,7 @@ $block-inserter-tabs-height: 44px; } } - .components-tab-panel__tab-content { + div[role="tabpanel"] { display: flex; flex-grow: 1; flex-direction: column; From 7da0dc1579e75a9f2d57e9d17302e56599afa94b Mon Sep 17 00:00:00 2001 From: chad1008 <13856531+chad1008@users.noreply.github.com> Date: Fri, 8 Dec 2023 21:02:46 -0500 Subject: [PATCH 3/6] focusable false --- packages/block-editor/src/components/inserter/tabs.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/block-editor/src/components/inserter/tabs.js b/packages/block-editor/src/components/inserter/tabs.js index bf42088cec3a5..85db27ca24be4 100644 --- a/packages/block-editor/src/components/inserter/tabs.js +++ b/packages/block-editor/src/components/inserter/tabs.js @@ -62,7 +62,11 @@ function InserterTabs( { ) ) } { tabs.map( ( tab ) => ( - + { children( tab ) } ) ) } From e83210a566e0156bc1d6cf990ce7c2b6a34f7c30 Mon Sep 17 00:00:00 2001 From: chad1008 <13856531+chad1008@users.noreply.github.com> Date: Fri, 8 Dec 2023 21:03:58 -0500 Subject: [PATCH 4/6] replace render function with object --- .../src/components/inserter/menu.js | 20 ++++++++----------- .../src/components/inserter/tabs.js | 2 +- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/packages/block-editor/src/components/inserter/menu.js b/packages/block-editor/src/components/inserter/menu.js index 4f028eb69c666..b09ec2a5f07ed 100644 --- a/packages/block-editor/src/components/inserter/menu.js +++ b/packages/block-editor/src/components/inserter/menu.js @@ -191,17 +191,13 @@ function InserterMenu( ] ); - const getCurrentTab = useCallback( - ( tab ) => { - if ( tab.name === 'blocks' ) { - return blocksTab; - } else if ( tab.name === 'patterns' ) { - return patternsTab; - } else if ( tab.name === 'media' ) { - return mediaTab; - } - }, - [ blocksTab, patternsTab, mediaTab ] + const inserterTabsContents = useMemo( + () => ( { + blocks: blocksTab, + patterns: patternsTab, + media: mediaTab, + } ), + [ blocksTab, mediaTab, patternsTab ] ); const searchRef = useRef(); @@ -276,7 +272,7 @@ function InserterMenu( prioritizePatterns={ prioritizePatterns } onSelect={ handleSetSelectedTab } > - { getCurrentTab } + { inserterTabsContents } ) } { ! delayedFilterValue && ! showAsTabs && ( diff --git a/packages/block-editor/src/components/inserter/tabs.js b/packages/block-editor/src/components/inserter/tabs.js index 85db27ca24be4..5296c9fab7f73 100644 --- a/packages/block-editor/src/components/inserter/tabs.js +++ b/packages/block-editor/src/components/inserter/tabs.js @@ -67,7 +67,7 @@ function InserterTabs( { tabId={ tab.name } focusable={ false } > - { children( tab ) } + { children[ tab.name ] } ) ) } From f8ed95f8cde38036dd9c3dc5d71d59e500cab23a Mon Sep 17 00:00:00 2001 From: chad1008 <13856531+chad1008@users.noreply.github.com> Date: Mon, 11 Dec 2023 11:18:01 -0500 Subject: [PATCH 5/6] fix inserter tests --- packages/e2e-test-utils/src/inserter.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/e2e-test-utils/src/inserter.js b/packages/e2e-test-utils/src/inserter.js index ebbda244d1856..a2c73abe66655 100644 --- a/packages/e2e-test-utils/src/inserter.js +++ b/packages/e2e-test-utils/src/inserter.js @@ -86,7 +86,10 @@ export async function selectGlobalInserterTab( label ) { } const activeTab = await page.waitForSelector( - '.block-editor-inserter__tabs button.is-active' + // Targeting a class name is necessary here, because there are likely + // two implementations of the `Tabs` component visible to this test, and + // we want to confirm that it's waiting for the correct one. + '.block-editor-inserter__tabs [role="tab"][aria-selected="true"]' ); const activeTabLabel = await page.evaluate( From b55460252b2aedc78676db43458a10c986a2ce7b Mon Sep 17 00:00:00 2001 From: chad1008 <13856531+chad1008@users.noreply.github.com> Date: Tue, 12 Dec 2023 14:29:32 -0500 Subject: [PATCH 6/6] pass contents as prop instead of children --- packages/block-editor/src/components/inserter/menu.js | 5 ++--- packages/block-editor/src/components/inserter/tabs.js | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/block-editor/src/components/inserter/menu.js b/packages/block-editor/src/components/inserter/menu.js index b09ec2a5f07ed..cd44b902f491a 100644 --- a/packages/block-editor/src/components/inserter/menu.js +++ b/packages/block-editor/src/components/inserter/menu.js @@ -271,9 +271,8 @@ function InserterMenu( showMedia={ showMedia } prioritizePatterns={ prioritizePatterns } onSelect={ handleSetSelectedTab } - > - { inserterTabsContents } - + tabsContents={ inserterTabsContents } + /> ) } { ! delayedFilterValue && ! showAsTabs && (
diff --git a/packages/block-editor/src/components/inserter/tabs.js b/packages/block-editor/src/components/inserter/tabs.js index 5296c9fab7f73..72b13425bbbe7 100644 --- a/packages/block-editor/src/components/inserter/tabs.js +++ b/packages/block-editor/src/components/inserter/tabs.js @@ -30,11 +30,11 @@ const mediaTab = { }; function InserterTabs( { - children, showPatterns = false, showMedia = false, onSelect, prioritizePatterns, + tabsContents, } ) { const tabs = useMemo( () => { const tempTabs = []; @@ -67,7 +67,7 @@ function InserterTabs( { tabId={ tab.name } focusable={ false } > - { children[ tab.name ] } + { tabsContents[ tab.name ] } ) ) }