Skip to content

Commit 4f3d35a

Browse files
Add support for featured image toggle and display
1 parent 9408691 commit 4f3d35a

1 file changed

Lines changed: 69 additions & 4 deletions

File tree

  • packages/block-editor/src/components/background-image-control

packages/block-editor/src/components/background-image-control/index.js

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -275,13 +275,37 @@ function BackgroundImageControls( {
275275
displayInPanel,
276276
defaultValues,
277277
containerRef,
278+
useFeaturedImage,
279+
onToggleFeaturedImage,
278280
} ) {
279281
const [ isUploading, setIsUploading ] = useState( false );
280282
const { getSettings } = useSelect( blockEditorStore );
281283

282-
const { id, title, url } = style?.background?.backgroundImage || {
284+
const featuredImageData = useSelect( ( select ) => {
285+
// eslint-disable-next-line @wordpress/data-no-store-string-literals
286+
const { getEditedPostAttribute } = select( 'core/editor' );
287+
// eslint-disable-next-line @wordpress/data-no-store-string-literals
288+
const { getMedia } = select( 'core' );
289+
290+
const featuredMediaId = getEditedPostAttribute( 'featured_media' );
291+
292+
return featuredMediaId ? getMedia( featuredMediaId ) : null;
293+
}, [] );
294+
295+
const { id, title, url, featuredImage } = style?.background
296+
?.backgroundImage || {
283297
...inheritedValue?.background?.backgroundImage,
284298
};
299+
const useFeaturedImageValue =
300+
typeof useFeaturedImage !== 'undefined'
301+
? useFeaturedImage
302+
: !! featuredImage;
303+
304+
const displayUrl =
305+
useFeaturedImageValue && featuredImageData?.source_url
306+
? featuredImageData.source_url
307+
: url;
308+
285309
const { createErrorNotice } = useDispatch( noticesStore );
286310
const onUploadError = ( message ) => {
287311
createErrorNotice( message, { type: 'snackbar' } );
@@ -297,6 +321,39 @@ function BackgroundImageControls( {
297321
)
298322
);
299323

324+
const toggleFeaturedImage = () => {
325+
const currentBackgroundImage =
326+
style?.background?.backgroundImage &&
327+
typeof style.background.backgroundImage === 'object'
328+
? style.background.backgroundImage
329+
: {};
330+
331+
const nextValue = ! useFeaturedImageValue;
332+
333+
if ( nextValue && featuredImageData?.source_url ) {
334+
onChange(
335+
setImmutably( style, [ 'background', 'backgroundImage' ], {
336+
url: featuredImageData.source_url,
337+
id: featuredImageData.id,
338+
source: 'featured',
339+
title: featuredImageData.title?.rendered,
340+
featuredImage: true,
341+
} )
342+
);
343+
return;
344+
}
345+
346+
onChange(
347+
setImmutably( style, [ 'background', 'backgroundImage' ], {
348+
...currentBackgroundImage,
349+
featuredImage: false,
350+
} )
351+
);
352+
};
353+
354+
const onToggleFeaturedImageHandler =
355+
onToggleFeaturedImage || toggleFeaturedImage;
356+
300357
const onSelectMedia = ( media ) => {
301358
if ( ! media || ! media.url ) {
302359
resetBackgroundImage();
@@ -375,16 +432,18 @@ function BackgroundImageControls( {
375432
} )
376433
);
377434
const canRemove = ! hasValue && hasBackgroundImageValue( inheritedValue );
378-
const imgLabel = title || getFilename( url ) || __( 'Image' );
435+
const imgLabel = title || getFilename( displayUrl ) || __( 'Image' );
379436

380437
return (
381438
<div className="block-editor-global-styles-background-panel__image-tools-panel-item">
382439
{ isUploading && <LoadingSpinner /> }
383440
<MediaReplaceFlow
384441
mediaId={ id }
385-
mediaURL={ url }
442+
mediaURL={ displayUrl }
386443
allowedTypes={ [ IMAGE_BACKGROUND_TYPE ] }
387444
accept="image/*"
445+
useFeaturedImage={ useFeaturedImageValue }
446+
onToggleFeaturedImage={ onToggleFeaturedImageHandler }
388447
onSelect={ onSelectMedia }
389448
popoverProps={ {
390449
className: clsx( {
@@ -394,7 +453,7 @@ function BackgroundImageControls( {
394453
} }
395454
name={
396455
<InspectorImagePreviewItem
397-
imgUrl={ url }
456+
imgUrl={ displayUrl }
398457
filename={ title }
399458
label={ imgLabel }
400459
/>
@@ -644,6 +703,8 @@ export default function BackgroundImagePanel( {
644703
inheritedValue = value,
645704
settings,
646705
defaultValues = {},
706+
useFeaturedImage,
707+
onToggleFeaturedImage,
647708
} ) {
648709
/*
649710
* Resolve any inherited "ref" pointers.
@@ -739,6 +800,8 @@ export default function BackgroundImagePanel( {
739800
onRemoveImage={ () => setIsDropDownOpen( false ) }
740801
defaultValues={ defaultValues }
741802
containerRef={ containerRef }
803+
useFeaturedImage={ useFeaturedImage }
804+
onToggleFeaturedImage={ onToggleFeaturedImage }
742805
/>
743806
<BackgroundSizeControls
744807
onChange={ onChange }
@@ -760,6 +823,8 @@ export default function BackgroundImagePanel( {
760823
} }
761824
onRemoveImage={ () => setIsDropDownOpen( false ) }
762825
containerRef={ containerRef }
826+
useFeaturedImage={ useFeaturedImage }
827+
onToggleFeaturedImage={ onToggleFeaturedImage }
763828
/>
764829
) }
765830
</div>

0 commit comments

Comments
 (0)