Skip to content

Commit

Permalink
Guide: Place focus on the guide's container instead of its first tabb…
Browse files Browse the repository at this point in the history
…able
  • Loading branch information
noisysocks committed Jul 5, 2023
1 parent b73b1d2 commit 19cc8ec
Showing 1 changed file with 10 additions and 13 deletions.
23 changes: 10 additions & 13 deletions packages/components/src/guide/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import classnames from 'classnames';
import { useState, useEffect, Children, useRef } from '@wordpress/element';
import deprecated from '@wordpress/deprecated';
import { __ } from '@wordpress/i18n';
import { focus } from '@wordpress/dom';

/**
* Internal dependencies
Expand Down Expand Up @@ -59,9 +58,17 @@ function Guide( {
onFinish,
pages = [],
}: GuideProps ) {
const guideContainer = useRef< HTMLDivElement >( null );
const ref = useRef< HTMLDivElement >( null );
const [ currentPage, setCurrentPage ] = useState( 0 );

useEffect( () => {
// Place focus at the top of the guide on mount and when the page changes.
const frame = ref.current?.querySelector( '.components-guide' );
if ( frame instanceof HTMLElement ) {
frame.focus();
}
}, [ currentPage ] );

useEffect( () => {
if ( Children.count( children ) ) {
deprecated( 'Passing children to <Guide>', {
Expand All @@ -71,16 +78,6 @@ function Guide( {
}
}, [ children ] );

useEffect( () => {
// Each time we change the current page, start from the first element of the page.
// This also solves any focus loss that can happen.
if ( guideContainer.current ) {
(
focus.tabbable.find( guideContainer.current ) as HTMLElement[]
)[ 0 ]?.focus();
}
}, [ currentPage ] );

if ( Children.count( children ) ) {
pages =
Children.map( children, ( child ) => ( {
Expand Down Expand Up @@ -124,7 +121,7 @@ function Guide( {
event.preventDefault();
}
} }
ref={ guideContainer }
ref={ ref }
>
<div className="components-guide__container">
<div className="components-guide__page">
Expand Down

0 comments on commit 19cc8ec

Please sign in to comment.