From 489bd28ec1312523bffb1ac1249ec72e5c7a2a19 Mon Sep 17 00:00:00 2001 From: Marco Ciampini Date: Thu, 3 Nov 2022 18:40:29 +0100 Subject: [PATCH] URLPopover: use new placement prop instead of legacy position prop (#44391) * URLPopover: use new placement prop instead of legacy position prop * Restore (and deprecate) position prop, while still introducing `placement` prop * Remove `position`s default value * Give priority to `placement` when both `placement` and `position` are defined --- .../src/components/url-popover/README.md | 15 ++++++-- .../src/components/url-popover/index.js | 36 +++++++++++++++++-- packages/components/src/index.js | 1 + 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/packages/block-editor/src/components/url-popover/README.md b/packages/block-editor/src/components/url-popover/README.md index defa20050cdcf..08b738eb4ec79 100644 --- a/packages/block-editor/src/components/url-popover/README.md +++ b/packages/block-editor/src/components/url-popover/README.md @@ -94,13 +94,13 @@ class MyURLPopover extends Component { The component accepts the following props. Any other props are passed through to the underlying `Popover` component ([refer to props documentation](/packages/components/src/popover/README.md)). -### position +### placement -Where the Popover should be positioned relative to its parent. Defaults to "bottom center". +Where the Popover should be positioned relative to its parent. Defaults to "bottom". - Type: `String` - Required: No -- Default: "bottom center" +- Default: "bottom" ### focusOnMount @@ -194,3 +194,12 @@ Reference passed to the auto complete element of the ([URLInput component](/pack - Type: `Object` - Required: no + +### position + +_Note: this prop is deprecated. Please use the `placement` prop instead._ + +Where the Popover should be positioned relative to its parent. + +- Type: `String` +- Required: No diff --git a/packages/block-editor/src/components/url-popover/index.js b/packages/block-editor/src/components/url-popover/index.js index 38d5e06015ec3..98b22e86f6b0b 100644 --- a/packages/block-editor/src/components/url-popover/index.js +++ b/packages/block-editor/src/components/url-popover/index.js @@ -3,8 +3,13 @@ */ import { __ } from '@wordpress/i18n'; import { useState } from '@wordpress/element'; -import { Button, Popover } from '@wordpress/components'; +import { + Button, + Popover, + __experimentalPopoverPositionToPlacement as positionToPlacement, +} from '@wordpress/components'; import { chevronDown } from '@wordpress/icons'; +import deprecated from '@wordpress/deprecated'; /** * Internal dependencies @@ -12,14 +17,39 @@ import { chevronDown } from '@wordpress/icons'; import LinkViewer from './link-viewer'; import LinkEditor from './link-editor'; +const DEFAULT_PLACEMENT = 'bottom'; + function URLPopover( { additionalControls, children, renderSettings, - position = 'bottom center', + // The DEFAULT_PLACEMENT value is assigned inside the function's body + placement, focusOnMount = 'firstElement', + // Deprecated + position, + // Rest ...popoverProps } ) { + if ( position !== undefined ) { + deprecated( '`position` prop in wp.blockEditor.URLPopover', { + since: '6.2', + alternative: '`placement` prop', + } ); + } + + // Compute popover's placement: + // - give priority to `placement` prop, if defined + // - otherwise, compute it from the legacy `position` prop (if defined) + // - finally, fallback to the DEFAULT_PLACEMENT. + let computedPlacement; + if ( placement !== undefined ) { + computedPlacement = placement; + } else if ( position !== undefined ) { + computedPlacement = positionToPlacement( position ); + } + computedPlacement = computedPlacement || DEFAULT_PLACEMENT; + const [ isSettingsExpanded, setIsSettingsExpanded ] = useState( false ); const showSettings = !! renderSettings && isSettingsExpanded; @@ -32,7 +62,7 @@ function URLPopover( { diff --git a/packages/components/src/index.js b/packages/components/src/index.js index dfcc483138a53..114884690e482 100644 --- a/packages/components/src/index.js +++ b/packages/components/src/index.js @@ -126,6 +126,7 @@ export { default as PanelHeader } from './panel/header'; export { default as PanelRow } from './panel/row'; export { default as Placeholder } from './placeholder'; export { default as Popover } from './popover'; +export { positionToPlacement as __experimentalPopoverPositionToPlacement } from './popover/utils'; export { default as QueryControls } from './query-controls'; export { default as __experimentalRadio } from './radio-group/radio'; export { default as __experimentalRadioGroup } from './radio-group';