From 38868d577bb7f6f17aea63203a3f87eb3c8aed18 Mon Sep 17 00:00:00 2001 From: Alex Stine Date: Tue, 14 Dec 2021 04:07:40 -0500 Subject: [PATCH 01/16] Add Close button to Block Inserter. Adjust the useFocusOnMount hook to be able to focus second element. --- packages/compose/README.md | 2 +- .../compose/src/hooks/use-focus-on-mount/index.js | 13 +++++++------ .../secondary-sidebar/inserter-sidebar.js | 10 +++++++++- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/packages/compose/README.md b/packages/compose/README.md index 32c8abb4e3bd0..78ef158c9b1d1 100644 --- a/packages/compose/README.md +++ b/packages/compose/README.md @@ -240,7 +240,7 @@ const WithFocusOnMount = () => { _Parameters_ -- _focusOnMount_ `boolean | 'firstElement'`: Focus on mount mode. +- _focusOnMount_ `boolean | 'firstElement' | 'secondElement'`: Focus on mount mode. _Returns_ diff --git a/packages/compose/src/hooks/use-focus-on-mount/index.js b/packages/compose/src/hooks/use-focus-on-mount/index.js index a971c3dac54a1..cde275975500a 100644 --- a/packages/compose/src/hooks/use-focus-on-mount/index.js +++ b/packages/compose/src/hooks/use-focus-on-mount/index.js @@ -7,7 +7,7 @@ import { focus } from '@wordpress/dom'; /** * Hook used to focus the first tabbable element on mount. * - * @param {boolean | 'firstElement'} focusOnMount Focus on mount mode. + * @param {boolean | 'firstElement' | 'secondElement'} focusOnMount Focus on mount mode. * @return {import('react').RefCallback} Ref callback. * * @example @@ -42,12 +42,13 @@ export default function useFocusOnMount( focusOnMount = 'firstElement' ) { let target = node; - if ( focusOnMountRef.current === 'firstElement' ) { - const firstTabbable = focus.tabbable.find( node )[ 0 ]; + let firstTabbable = focus.tabbable.find( node )[ 0 ]; + if ( focusOnMountRef.current === 'secondElement' ) { + firstTabbable = focus.tabbable.find( node )[ 1 ]; + } - if ( firstTabbable ) { - target = /** @type {HTMLElement} */ ( firstTabbable ); - } + if ( firstTabbable ) { + target = /** @type {HTMLElement} */ ( firstTabbable ); } target.focus(); diff --git a/packages/edit-post/src/components/secondary-sidebar/inserter-sidebar.js b/packages/edit-post/src/components/secondary-sidebar/inserter-sidebar.js index c0f4e79dffddf..9e7c65d08d9e8 100644 --- a/packages/edit-post/src/components/secondary-sidebar/inserter-sidebar.js +++ b/packages/edit-post/src/components/secondary-sidebar/inserter-sidebar.js @@ -2,13 +2,14 @@ * WordPress dependencies */ import { useDispatch, useSelect } from '@wordpress/data'; -import { Button } from '@wordpress/components'; +import { Button, VisuallyHidden } from '@wordpress/components'; import { __experimentalLibrary as Library } from '@wordpress/block-editor'; import { close } from '@wordpress/icons'; import { useViewportMatch, __experimentalUseDialog as useDialog, } from '@wordpress/compose'; +import { __ } from '@wordpress/i18n'; /** * Internal dependencies @@ -30,6 +31,7 @@ export default function InserterSidebar() { const isMobileViewport = useViewportMatch( 'medium', '<' ); const [ inserterDialogRef, inserterDialogProps ] = useDialog( { onClose: () => setIsInserterOpened( false ), + focusOnMount: 'secondElement', } ); return ( @@ -44,6 +46,12 @@ export default function InserterSidebar() { onClick={ () => setIsInserterOpened( false ) } /> + +