Skip to content

Commit 0d1f0a1

Browse files
committed
Address code reviews
1 parent bf117dd commit 0d1f0a1

File tree

7 files changed

+40
-24
lines changed

7 files changed

+40
-24
lines changed

packages/components/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
- `ExternalLink`: Use unicode arrow instead of svg icon ([#60255](https://github.com/WordPress/gutenberg/pull/60255)).
88
- `ProgressBar`: Move the indicator width styles from emotion to a CSS variable ([#60388](https://github.com/WordPress/gutenberg/pull/60388)).
99
- `Text`: Add `text-wrap: pretty;` to improve wrapping. ([#60164](https://github.com/WordPress/gutenberg/pull/60164)).
10+
- `FormToggle`: Allows ref forwarding. ([#60234](https://github.com/WordPress/gutenberg/pull/60234)).
11+
- `ToggleControl`: Allows ref forwarding. ([#60234](https://github.com/WordPress/gutenberg/pull/60234)).
1012

1113
## 27.3.0 (2024-04-03)
1214

packages/components/src/form-toggle/index.tsx

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
* External dependencies
33
*/
44
import classnames from 'classnames';
5+
import type { ForwardedRef } from 'react';
6+
7+
/**
8+
* WordPress dependencies
9+
*/
10+
import { forwardRef } from '@wordpress/element';
511

612
/**
713
* Internal dependencies
@@ -31,7 +37,8 @@ export const noop = () => {};
3137
* ```
3238
*/
3339
export function FormToggle(
34-
props: WordPressComponentProps< FormToggleProps, 'input', false >
40+
props: WordPressComponentProps< FormToggleProps, 'input', false >,
41+
ref: ForwardedRef< HTMLInputElement >
3542
) {
3643
const {
3744
className,
@@ -56,11 +63,12 @@ export function FormToggle(
5663
onChange={ onChange }
5764
disabled={ disabled }
5865
{ ...additionalProps }
66+
ref={ ref }
5967
/>
6068
<span className="components-form-toggle__track"></span>
6169
<span className="components-form-toggle__thumb"></span>
6270
</span>
6371
);
6472
}
6573

66-
export default FormToggle;
74+
export default forwardRef( FormToggle );

packages/components/src/form-toggle/stories/index.story.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { useState } from '@wordpress/element';
1111
/**
1212
* Internal dependencies
1313
*/
14-
import { FormToggle } from '..';
14+
import FormToggle from '..';
1515

1616
const meta: Meta< typeof FormToggle > = {
1717
component: FormToggle,

packages/components/src/toggle-control/index.tsx

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
/**
22
* External dependencies
33
*/
4-
import type { ChangeEvent } from 'react';
4+
import type { ChangeEvent, ForwardedRef } from 'react';
55
import { css } from '@emotion/react';
66

77
/**
88
* WordPress dependencies
99
*/
10+
import { forwardRef } from '@wordpress/element';
1011
import { useInstanceId } from '@wordpress/compose';
1112

1213
/**
@@ -41,15 +42,18 @@ import { space } from '../utils/space';
4142
* };
4243
* ```
4344
*/
44-
export function ToggleControl( {
45-
__nextHasNoMarginBottom,
46-
label,
47-
checked,
48-
help,
49-
className,
50-
onChange,
51-
disabled,
52-
}: WordPressComponentProps< ToggleControlProps, 'input', false > ) {
45+
export function ToggleControl(
46+
{
47+
__nextHasNoMarginBottom,
48+
label,
49+
checked,
50+
help,
51+
className,
52+
onChange,
53+
disabled,
54+
}: WordPressComponentProps< ToggleControlProps, 'input', false >,
55+
ref: ForwardedRef< HTMLInputElement >
56+
) {
5357
function onChangeToggle( event: ChangeEvent< HTMLInputElement > ) {
5458
onChange( event.target.checked );
5559
}
@@ -94,6 +98,7 @@ export function ToggleControl( {
9498
onChange={ onChangeToggle }
9599
aria-describedby={ describedBy }
96100
disabled={ disabled }
101+
ref={ ref }
97102
/>
98103
<FlexBlock
99104
as="label"
@@ -107,4 +112,4 @@ export function ToggleControl( {
107112
);
108113
}
109114

110-
export default ToggleControl;
115+
export default forwardRef( ToggleControl );

packages/patterns/src/api/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export function isOverridableBlock( block ) {
1515
Object.keys( PARTIAL_SYNCING_SUPPORTED_BLOCKS ).includes(
1616
block.name
1717
) &&
18+
!! block.attributes.metadata?.name &&
1819
!! block.attributes.metadata?.bindings &&
1920
Object.values( block.attributes.metadata.bindings ).some(
2021
( binding ) => binding.source === 'core/pattern-overrides'

packages/patterns/src/components/pattern-overrides-controls.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* WordPress dependencies
33
*/
4-
import { useState, useId } from '@wordpress/element';
4+
import { useState, useId, useRef, flushSync } from '@wordpress/element';
55
import { InspectorControls } from '@wordpress/block-editor';
66
import { ToggleControl, BaseControl, Button } from '@wordpress/components';
77
import { __ } from '@wordpress/i18n';
@@ -47,6 +47,7 @@ function addBindings( bindings, syncedAttributes ) {
4747

4848
function PatternOverridesControls( { attributes, name, setAttributes } ) {
4949
const controlId = useId();
50+
const toggleRef = useRef();
5051
const [ showAllowOverridesModal, setShowAllowOverridesModal ] =
5152
useState( false );
5253

@@ -60,11 +61,6 @@ function PatternOverridesControls( { attributes, name, setAttributes } ) {
6061
);
6162

6263
function updateBindings( isChecked, customName ) {
63-
if ( isChecked && ! attributes.metadata?.name && ! customName ) {
64-
setShowAllowOverridesModal( true );
65-
return;
66-
}
67-
6864
const prevBindings = attributes?.metadata?.bindings;
6965
const updatedBindings = isChecked
7066
? addBindings( prevBindings, syncedAttributes )
@@ -110,12 +106,13 @@ function PatternOverridesControls( { attributes, name, setAttributes } ) {
110106
onChange={ ( isChecked ) => {
111107
updateBindings( isChecked );
112108
} }
109+
ref={ toggleRef }
113110
/>
114111
) : (
115112
<Button
116113
className="pattern-overrides-control__allow-overrides-button"
117114
variant="secondary"
118-
onClick={ () => updateBindings( true ) }
115+
onClick={ () => setShowAllowOverridesModal( true ) }
119116
>
120117
{ __( 'Allow overrides' ) }
121118
</Button>
@@ -127,7 +124,10 @@ function PatternOverridesControls( { attributes, name, setAttributes } ) {
127124
<AllowOverridesModal
128125
onClose={ () => setShowAllowOverridesModal( false ) }
129126
onSave={ ( newName ) => {
130-
updateBindings( true, newName );
127+
flushSync( () => {
128+
updateBindings( true, newName );
129+
} );
130+
toggleRef.current?.focus();
131131
} }
132132
/>
133133
) }

test/e2e/specs/editor/various/pattern-overrides.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,10 @@ test.describe( 'Pattern Overrides', () => {
223223
requestUtils,
224224
editor,
225225
} ) => {
226-
const paragraphId = 'paragraph-id';
226+
const paragraphName = 'paragraph-name';
227227
const { id } = await requestUtils.createBlock( {
228228
title: 'Pattern',
229-
content: `<!-- wp:paragraph {"metadata":{"id":"${ paragraphId }","bindings":{"content":{"source":"core/pattern-overrides"}}}} -->
229+
content: `<!-- wp:paragraph {"metadata":{"name":"${ paragraphName }","bindings":{"content":{"source":"core/pattern-overrides"}}}} -->
230230
<p>Editable</p>
231231
<!-- /wp:paragraph -->`,
232232
status: 'publish',

0 commit comments

Comments
 (0)