Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gallery: Convert Gallery block to use Image blocks instead of having its own nested image format #25940

Merged
merged 158 commits into from
Aug 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
158 commits
Select commit Hold shift + click to select a range
c01bbfb
Refactor gallery to nested image blocks
Apr 11, 2021
038b22d
Fix issue with images not loading on first selection from media gallery
Nov 4, 2020
331c302
Remove the default columns setting as we don't have access to innerBl…
Nov 4, 2020
ee7da0a
Revert "Remove the default columns setting as we don't have access to…
Nov 4, 2020
c9fe911
Add image count so we can work out default columns as innerBlocks not…
Nov 4, 2020
a00a544
Disable the innerBlocks dropzones so drag drop works same as existing…
Nov 5, 2020
0c8742f
Lint changes
Nov 5, 2020
a77854c
Revert "Lint changes"
Nov 6, 2020
1965514
Revert "Disable the innerBlocks dropzones so drag drop works same as …
Nov 6, 2020
e5e1420
Suggested solution for handling multiple file drop into gallery
Nov 6, 2020
1d6c559
Remove non image files from drag and drop and disable individual imag…
Jan 21, 2021
39cecec
Fix transform to individual images
Nov 8, 2020
d9ec2b0
Fix transform from individual images
Nov 8, 2020
3742af8
Revert drag and drop transform changes
Nov 9, 2020
3acb223
Add gallery transform to image block to override the default gallery …
Nov 9, 2020
084e6c7
Move handling of file uploads to Gallery from media placeholder
Apr 11, 2021
cff6727
split innerblocks mapping into separate effect to reduce chatter
Nov 17, 2020
f1606cc
Add useMemo to currentImageOptions
Nov 17, 2020
1140646
reuse existing innerBlocks rather than recreating with every new imag…
Nov 17, 2020
6d23628
Switch to useMemo for updating local image const instead of local com…
Nov 17, 2020
f7a1ff4
Fix issue with image sizing not being available on initial load of co…
Nov 17, 2020
974ad90
Memoise the useImageSizes hook
Nov 17, 2020
5ac143b
Fix issue with media browser defaulting to edit gallery view
Nov 17, 2020
8ceaa3d
Fix missed incorrect use of addToGallery
Nov 17, 2020
8d7159b
Add some extra effects for getting the imageData as the getMedia call…
Nov 18, 2020
dbda7e9
Simplify the imageData by using a useSelect
Nov 19, 2020
342695e
Another optimisation - only return a new imageData reference if all i…
Nov 19, 2020
0744b59
Refactored Gallery: Add loading state to gallery image size options (…
aaronrobertshaw Nov 19, 2020
dad1b0b
Initial deprecations commit
Jan 13, 2021
bcf6664
Fix issue with linkDestination not being applied in migration
Nov 19, 2020
921fecc
Refactor gallery deprecations
aaronrobertshaw Nov 20, 2020
7920a45
Fix missing attributes from migration
aaronrobertshaw Nov 20, 2020
c97630c
Update deprecation to set allowResize
aaronrobertshaw Nov 22, 2020
2724965
Fix issue with crop not working when certain plugins are loaded
Mar 22, 2021
098ba86
Fix SCSS lint errors
aaronrobertshaw Nov 22, 2020
49f9d6b
Update the block example
Nov 23, 2020
88c096b
Linting fixes
Nov 23, 2020
37b4b4e
Fix the e2e test and the accessibility issue with having aria group r…
Mar 22, 2021
0c5e720
Fix the e2e test and the accessibility issue with having aria group r…
Mar 22, 2021
5840a1c
Fix frontend omission of wp-block-image class
aaronrobertshaw Nov 24, 2020
e1e6a8a
change deprecation to use imageCount as isEligible check as it seems …
Nov 25, 2020
d7187b4
Move back to a single deprecations file and reorder in array
Nov 26, 2020
b648b10
Remove additional check in v5 isEligible
Nov 26, 2020
f1454f2
Fix the v4 migration
Nov 26, 2020
e76bb06
Fix styles for Safari compatibility
aaronrobertshaw Nov 30, 2020
b969e3f
Remove unnecessary gallery editor styles
aaronrobertshaw Nov 30, 2020
0ff156a
Fix typo in deprecations
aaronrobertshaw Nov 30, 2020
309f9f0
Restore styles to render deprecated gallery versions
Mar 22, 2021
e6d1301
Avoid applying flex styles to IE11
aaronrobertshaw Dec 1, 2020
4953a0c
Add additional selector to prevent the hidden individual image drop z…
Mar 22, 2021
d259127
IE11 styling improvements
aaronrobertshaw Dec 2, 2020
1a16354
Apply default style class to new images added to gallery
Dec 11, 2020
9aadf8f
fix linting issues
Dec 11, 2020
e879978
Move block props to the outer wrapper
Dec 13, 2020
f072943
Revert "Move block props to the outer wrapper"
Dec 13, 2020
c4d06ee
Revert "Revert "Move block props to the outer wrapper""
Dec 13, 2020
82eee6e
Fetch media if isListItem is true
Apr 11, 2021
601119c
Change context from isListItem to isGrouped
Apr 11, 2021
4f1ddb4
Remove wrapper div
Mar 22, 2021
a6603cf
remove extra wrapper around media placeholder and caption and use fle…
Jan 13, 2021
9b8d498
Revert "remove extra wrapper around media placeholder and caption and…
Jan 13, 2021
bd88cb2
Revert "Remove external div wrapper by moving InnerBlocks to a fragment"
Mar 22, 2021
abcb029
another update to image wrapper
Jan 13, 2021
939456d
put media uploader outside figure so structure matches front end
Dec 17, 2020
bf0aec2
Replace div with View for the sake of native code
Dec 17, 2020
0938b5e
Move setting of attributes to the child images
Apr 11, 2021
94d9877
Gallery Block Refactor: Account for null image ids in gallery migrati…
glendaviesnz Dec 22, 2020
17ca088
Remove the gradient and put caption under image if is-rounded style a…
glendaviesnz Dec 24, 2020
2c2b38e
Remove outer div wrapper
Mar 22, 2021
82ef52a
Keep image margins while dragging sibling
aaronrobertshaw Jan 14, 2021
bc61288
Fix e2e test expected markup to match new structure
Jan 18, 2021
7af15db
Gallery Block Refactor: Add handling of short code transforms
Feb 15, 2021
1e1752e
Removed unused prop
Jan 20, 2021
726e48c
Account for undefined block and innerblocks in conversion to reusable…
Apr 11, 2021
21bd032
Add custom gutter sizes to refactored gallery (#28377)
aaronrobertshaw Jan 21, 2021
a9453d2
Adjust editor styles to match new dom structure
Mar 22, 2021
83b9074
Remove redundant styles that are duplicated in nested image blocks
Jan 21, 2021
e3a6c29
Fix issue with Image block dragged out of Gallery still having inheri…
Jan 22, 2021
d34dcdb
When dragging an image block into a gallery make sure we don't wipe a…
Jan 25, 2021
72e9c2b
fix issue with variable declaration order
Jan 25, 2021
e291f91
Fix bug with custom link being overwritten by gallery linkTo changes
Jan 26, 2021
795a568
Fix application of gutter size CSS var (#28759)
aaronrobertshaw Feb 5, 2021
9580649
Fix mobile width for gallery images
aaronrobertshaw Feb 10, 2021
74072f0
Add missing dependency to inner images selector
aaronrobertshaw Feb 10, 2021
cf4dc34
remove conversion to cover block if image in gallery
Mar 22, 2021
f90965c
Add fallback to old gallery edit and save for existing gallery (#28961)
glendaviesnz Feb 15, 2021
be75a36
Remove duplicate import
Feb 15, 2021
780e9e7
Remove need for temporary imageUploads attribute as we can just creat…
Feb 15, 2021
fd1e27d
Remove handling of gallery attribute updates from child images
Feb 16, 2021
652557e
Move updating of attributes back to gallery and show snackbar to indi…
Feb 16, 2021
1da955d
Update transforms to work with both versions of gallery
Feb 16, 2021
5b809d5
Remove redundant changes
Feb 16, 2021
b3fb72c
Remove redundant changes
Feb 16, 2021
b5ca5ef
Remove unused method
Feb 16, 2021
d5f5cba
Merge similar Image transforms.
Feb 16, 2021
82b97b8
Fix some issues missed when moving attribute setting back to gallery.
Feb 18, 2021
d9b1733
Simplify handling of images from media placeholder now that drag and …
Feb 19, 2021
ee6bef7
Fix typo
aaronrobertshaw Feb 19, 2021
9e0b05c
Fix broken upload from media placeholder
Feb 19, 2021
f27e872
Fix issue with new file uploads overwriting existing blocks
Feb 19, 2021
30dc02f
Remove isGrouped dependency from call to get image as not needed now …
Feb 22, 2021
3d47210
Remove custom gutter size feature
aaronrobertshaw Feb 22, 2021
fd56523
Use getMediaItems instead of getMedia for getting image data for all …
Feb 23, 2021
657ba78
Add back missing context prop from rebase conflict
Feb 23, 2021
a111532
Make use of new uniqueByBlock flag on updateBlockAttributes to batch …
Feb 23, 2021
6370194
Move the setting of the default attributes on new blocks to a single …
glendaviesnz Mar 1, 2021
e23ddb0
Add snackbar notice ids (#29364)
aaronrobertshaw Mar 1, 2021
fc2b2a0
Account for people adding and removing images from media browser so …
Mar 1, 2021
716ea1b
Changes from PR feedback
Mar 1, 2021
44df5dd
Fix issue with deprecated constants
Mar 3, 2021
3a75fb0
Fix linting and e2e test failures
Mar 3, 2021
84ebe2e
Some more e2e fixes
Mar 4, 2021
6b06732
Add transform from old gallery to new format
Mar 4, 2021
6caef45
Memoize the allowedBlocks
aaronrobertshaw Mar 8, 2021
8eceac7
Add warning about image formats required if uploading to gallery
Mar 8, 2021
efd0705
Move allowedBlocks outside of component to avoid useMemo use
aaronrobertshaw Mar 8, 2021
82cf526
Re-apply uncropped alignment changes lost in rebase
Mar 9, 2021
d133db7
Fix issue with non-cropped images in deprecated gallery
Mar 9, 2021
651ff59
Don't show media library buttons while images are still uploading as …
Apr 11, 2021
6209e6e
Remove gallerRef that was no longer doing anything
Mar 9, 2021
eaa0c7a
Respect sort order from Media Library (#30070)
glendaviesnz Mar 22, 2021
20477de
Gallery block refactor: make invalid file type errors consistent (#30…
glendaviesnz Mar 31, 2021
6195768
Fix issue with invalid type message when adding files via media brows…
Apr 6, 2021
9cfb170
Gallery block refactor: check for new images by clientId instead of i…
glendaviesnz Apr 8, 2021
772691d
Apply changes from rebase to deprecated gallery
Apr 11, 2021
d71011b
Apply patch from rebase to not select all items in media library when…
Apr 12, 2021
991437d
Copy caption across from image selected from media library (#30784)
glendaviesnz Apr 13, 2021
a2253ec
Add data-id to image to help with compatibility of refactored gallery…
glendaviesnz Apr 22, 2021
d225aca
Revert "Add data-id to image to help with compatibility of refactored…
Apr 23, 2021
fc06639
fix bug with image style being lost when gallery grouped (#31068)
glendaviesnz Apr 23, 2021
1067a0c
Only add RichText component if the figcaption is clicked to prevent i…
glendaviesnz Apr 28, 2021
ff4fadc
Fix bug with alt text not being copied from media library (#31066)
glendaviesnz Apr 30, 2021
b976235
Merge branch 'trunk' of github.com:WordPress/gutenberg into refactor/…
May 19, 2021
1a4345a
Gallery refactor - Infer version from existing content (#32270)
mkevins May 30, 2021
e5420c6
Merge branch 'trunk' into refactor/gallery-to-nested-image-blocks-ups…
mkevins Jun 3, 2021
e183dcb
Resolve merge conflicts
mkevins Jun 3, 2021
b2031f2
Use non-deprecated hook when possible
mkevins Jun 4, 2021
71b249c
Merge branch 'trunk' into refactor/gallery-to-nested-image-blocks-ups…
mkevins Jun 16, 2021
c72984f
Resolve conflict in block editor default settings
mkevins Jun 16, 2021
7da0c1b
Merge branch 'trunk' into refactor/gallery-to-nested-image-blocks-ups…
mkevins Jul 8, 2021
797cb28
Resolve conflict in image.js
mkevins Jul 8, 2021
fad851a
Minor changes from code review:
Jul 16, 2021
a83b106
Improve naming of save and deprecated save methods
Jul 19, 2021
a424509
Rename __experimentalGalleryRefactor flag to __unstableGalleryWithInn…
Jul 19, 2021
c69f2d5
Remove the isGrouped context as no longer needed.
Jul 20, 2021
887b6b4
Rename __unstableGalleryWithInnerBlocks to _unstableGalleryWithImageB…
Jul 22, 2021
c4eb362
Gallery block refactor: remove the imageCount attribute (#33677)
glendaviesnz Jul 26, 2021
55e8bf6
Merge branch 'trunk' of github.com:WordPress/gutenberg into refactor/…
Jul 27, 2021
8b1bd7d
Fix broken scss
Jul 28, 2021
0b9d8b2
Fix php linting error
Jul 28, 2021
6a58538
Merge mobile refactor of gallery to nested image blocks into desktop …
mkevins Aug 3, 2021
8529284
Merge branch 'trunk' of github.com:WordPress/gutenberg into refactor/…
Aug 3, 2021
a41edeb
Fix issue with upload spinner not displaying correctly on v1 gallery …
Aug 9, 2021
0273b7b
Gallery block: Add a filter to automatically convert transforms to an…
glendaviesnz Aug 12, 2021
5cbaedd
Merge branch 'trunk' of github.com:WordPress/gutenberg into refactor/…
Aug 16, 2021
78472d9
Fix issue with image to cover block conversion
Aug 16, 2021
fd0f7ec
Add imageCrop to gallery context
mkevins Aug 17, 2021
d55be9e
Fix exceptions caused by useBlocksProps running after block has been …
glendaviesnz Aug 19, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions lib/experiments-page.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,17 @@ function gutenberg_initialize_experiments_settings() {
'id' => 'gutenberg-navigation',
)
);
add_settings_field(
'gutenberg-gallery-refactor',
__( 'Gallery block experiment', 'gutenberg' ),
'gutenberg_display_experiment_field',
'gutenberg-experiments',
'gutenberg_experiments_section',
array(
'label' => __( 'Test a new gallery block that uses nested image blocks (Warning: The new gallery is not compatible with WordPress mobile apps prior to version 18.1. If you use the mobile app, please update to the latest version to avoid content loss.)', 'gutenberg' ),
'id' => 'gutenberg-gallery-refactor',
)
);
register_setting(
'gutenberg-experiments',
'gutenberg-experiments'
Expand Down Expand Up @@ -88,3 +99,24 @@ function gutenberg_display_experiment_section() {

<?php
}

/**
* Extends default editor settings with experiments settings.
*
* @param array $settings Default editor settings.
*
* @return array Filtered editor settings.
*/
function gutenberg_experiments_editor_settings( $settings ) {
$experiments = get_option( 'gutenberg-experiments' );
$experiments_settings = array(
'__unstableGalleryWithImageBlocks' => isset( $experiments['gutenberg-gallery-refactor'] ),
);
return array_merge( $settings, $experiments_settings );
}
// This can be removed when plugin support requires WordPress 5.8.0+.
if ( function_exists( 'get_block_editor_settings' ) ) {
add_filter( 'block_editor_settings_all', 'gutenberg_experiments_editor_settings' );
} else {
add_filter( 'block_editor_settings', 'gutenberg_experiments_editor_settings' );
}
1 change: 1 addition & 0 deletions packages/block-editor/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,7 @@ _Properties_
- _\_\_experimentalBlockDirectory_ `boolean`: Whether the user has enabled the Block Directory
- _\_\_experimentalBlockPatterns_ `Array`: Array of objects representing the block patterns
- _\_\_experimentalBlockPatternCategories_ `Array`: Array of objects representing the block pattern categories
- _\_\_unstableGalleryWithImageBlocks_ `boolean`: Whether the user has enabled the refactored gallery block which uses InnerBlocks

### SkipToSelectedBlock

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ import { ReadableContentView, alignmentHelpers } from '@wordpress/components';
*/
import BlockListBlock from './block';
import BlockInsertionPoint from './insertion-point';
import Grid from './grid-item';

import styles from './block-list-item.native.scss';
import { store as blockEditorStore } from '../../store';

Expand Down Expand Up @@ -104,7 +106,7 @@ export class BlockListItem extends Component {
];
}

render() {
renderContent() {
const {
blockAlignment,
clientId,
Expand All @@ -123,10 +125,6 @@ export class BlockListItem extends Component {
contentResizeMode === 'stretch' && stretchStyle;
const { isContainerRelated } = alignmentHelpers;

if ( ! blockWidth ) {
return null;
}

return (
<ReadableContentView
align={ blockAlignment }
Expand Down Expand Up @@ -162,6 +160,34 @@ export class BlockListItem extends Component {
</ReadableContentView>
);
}

render() {
const {
gridProperties,
clientId,
parentWidth,
items,
blockWidth,
} = this.props;

if ( ! blockWidth ) {
return null;
}

if ( gridProperties ) {
return (
<Grid
numOfColumns={ gridProperties.numColumns }
tileCount={ items.length }
index={ items.indexOf( clientId ) }
maxWidth={ parentWidth }
>
{ this.renderContent() }
</Grid>
);
}
return this.renderContent();
}
}

export default compose( [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,7 @@
.fullAlignmentPadding {
padding: $block-edge-to-content;
}

.gridItem {
overflow: visible;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/**
* External dependencies
*/
import { View } from 'react-native';

/**
* Internal dependencies
*/
import styles from './block-list-item.scss';

function Grid( props ) {
/**
* Since we don't have `calc()`, we must calculate our spacings here in
* order to preserve even spacing between tiles and equal width for tiles
* in a given row.
*
* In order to ensure equal sizing of tile contents, we distribute the
* spacing such that each tile has an equal "share" of the fixed spacing. To
* keep the tiles properly aligned within their rows, we calculate the left
* and right paddings based on the tile's relative position within the row.
*
* Note: we use padding instead of margins so that the fixed spacing is
* included within the relative spacing (i.e. width percentage), and
* wrapping behavior is preserved.
*
* - The left most tile in a row must have left padding of zero.
* - The right most tile in a row must have a right padding of zero.
*
* The values of these left and right paddings are interpolated for tiles in
* between. The right padding is complementary with the left padding of the
* next tile (i.e. the right padding of [tile n] + the left padding of
* [tile n + 1] will be equal for all tiles except the last one in a given
* row).
*
*/
const { numOfColumns, children, tileCount, index, maxWidth } = props;
const lastTile = tileCount - 1;
const lastRow = Math.floor( lastTile / numOfColumns );

const row = Math.floor( index / numOfColumns );
const rowLength =
row === lastRow ? ( lastTile % numOfColumns ) + 1 : numOfColumns;

return (
<View
style={ [
{
width: maxWidth / rowLength,
},
styles.gridItem,
] }
>
{ children }
</View>
);
}

export default Grid;
10 changes: 9 additions & 1 deletion packages/block-editor/src/components/block-list/index.native.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ const getStyles = (
const computedStyles = [
isStackedHorizontally && styles.horizontal,
horizontalAlignment && styles[ `is-aligned-${ horizontalAlignment }` ],
styles.overflowVisible,
];
stylesMemo[ styleName ] = computedStyles;
return computedStyles;
Expand Down Expand Up @@ -128,6 +129,7 @@ export class BlockList extends Component {
onDeleteBlock,
contentStyle,
renderAppender,
gridProperties,
} = this.props;
const { blockWidth } = this.state;
if (
Expand All @@ -136,7 +138,8 @@ export class BlockList extends Component {
this.extraData.onDeleteBlock !== onDeleteBlock ||
this.extraData.contentStyle !== contentStyle ||
this.extraData.renderAppender !== renderAppender ||
this.extraData.blockWidth !== blockWidth
this.extraData.blockWidth !== blockWidth ||
this.extraData.gridProperties !== gridProperties
) {
this.extraData = {
parentWidth,
Expand All @@ -145,6 +148,7 @@ export class BlockList extends Component {
contentStyle,
renderAppender,
blockWidth,
gridProperties,
};
}
return this.extraData;
Expand Down Expand Up @@ -312,9 +316,11 @@ export class BlockList extends Component {
onDeleteBlock,
rootClientId,
isStackedHorizontally,
blockClientIds,
parentWidth,
marginVertical = styles.defaultBlock.marginTop,
marginHorizontal = styles.defaultBlock.marginLeft,
gridProperties,
} = this.props;
const { blockWidth } = this.state;
return (
Expand All @@ -333,6 +339,8 @@ export class BlockList extends Component {
this.shouldShowInnerBlockAppender
}
blockWidth={ blockWidth }
gridProperties={ gridProperties }
items={ blockClientIds }
/>
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,15 +99,15 @@ export function useBlockProps( props = {}, { __unstableIsHtml } = {} ) {
index: getBlockIndex( clientId, rootClientId ),
mode: getBlockMode( clientId ),
name: blockName,
blockTitle: blockType.title,
blockTitle: blockType?.title,
isPartOfSelection: isSelected || isPartOfMultiSelection,
adjustScrolling:
isSelected || isFirstMultiSelectedBlock( clientId ),
enableAnimation:
! isTyping() &&
getGlobalBlockCount() <= BLOCK_ANIMATION_THRESHOLD,
lightBlockWrapper:
blockType.apiVersion > 1 ||
blockType?.apiVersion > 1 ||
hasBlockSupport( blockType, 'lightBlockWrapper', false ),
};
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ export function useBlockCustomClassName( clientId ) {
const { getBlockName, getBlockAttributes } = select(
blockEditorStore
);
const { className } = getBlockAttributes( clientId );
const attributes = getBlockAttributes( clientId );

if ( ! className ) {
if ( ! attributes?.className ) {
return;
}

Expand All @@ -40,7 +40,7 @@ export function useBlockCustomClassName( clientId ) {
return;
}

return className;
return attributes.className;
},
[ clientId ]
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export function useBlockDefaultClassName( clientId ) {
const name = select( blockEditorStore ).getBlockName( clientId );
const blockType = getBlockType( name );
const hasLightBlockWrapper =
blockType.apiVersion > 1 ||
blockType?.apiVersion > 1 ||
hasBlockSupport( blockType, 'lightBlockWrapper', false );

if ( ! hasLightBlockWrapper ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ function StylePreview( { onPress, isActive, style, url } ) {
return (
<Animated.View
style={ [ outlineStyle, { opacity }, styles[ name ] ] }
key={ outlineStyle.borderColor }
key={ JSON.stringify( outlineStyle ) }
/>
);
} );
Expand Down
5 changes: 4 additions & 1 deletion packages/block-editor/src/components/index.native.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ export * from './colors';
export * from './gradients';
export * from './font-sizes';
export { AlignmentControl, AlignmentToolbar } from './alignment-control';
export { default as InnerBlocks } from './inner-blocks';
export {
default as InnerBlocks,
useInnerBlocksProps as __experimentalUseInnerBlocksProps,
} from './inner-blocks';
export { default as InspectorAdvancedControls } from './inspector-advanced-controls';
export { default as InspectorControls } from './inspector-controls';
export {
Expand Down
41 changes: 41 additions & 0 deletions packages/block-editor/src/components/inner-blocks/index.native.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
*/
import { useSelect } from '@wordpress/data';
import { getBlockType, withBlockContentContext } from '@wordpress/blocks';
import { useRef } from '@wordpress/element';

/**
* Internal dependencies
Expand All @@ -23,6 +24,44 @@ import { BlockContextProvider } from '../block-context';
import { defaultLayout, LayoutProvider } from '../block-list/layout';
import { store as blockEditorStore } from '../../store';

/**
* This hook is used to lightly mark an element as an inner blocks wrapper
* element. Call this hook and pass the returned props to the element to mark as
* an inner blocks wrapper, automatically rendering inner blocks as children. If
* you define a ref for the element, it is important to pass the ref to this
* hook, which the hook in turn will pass to the component through the props it
* returns. Optionally, you can also pass any other props through this hook, and
* they will be merged and returned.
*
* @param {Object} props Optional. Props to pass to the element. Must contain
* the ref if one is defined.
* @param {Object} options Optional. Inner blocks options.
*
* @see https://github.com/WordPress/gutenberg/blob/master/packages/block-editor/src/components/inner-blocks/README.md
*/
export function useInnerBlocksProps( props = {}, options = {} ) {
const fallbackRef = useRef();
const { clientId } = useBlockEditContext();

const ref = props.ref || fallbackRef;
const InnerBlocks =
options.value && options.onChange
? ControlledInnerBlocks
: UncontrolledInnerBlocks;

return {
...props,
ref,
children: (
<InnerBlocks
{ ...options }
clientId={ clientId }
wrapperRef={ ref }
/>
),
};
}

/**
* InnerBlocks is a component which allows a single block to have multiple blocks
* as children. The UncontrolledInnerBlocks component is used whenever the inner
Expand Down Expand Up @@ -53,6 +92,7 @@ function UncontrolledInnerBlocks( props ) {
filterInnerBlocks,
blockWidth,
__experimentalLayout: layout = defaultLayout,
gridProperties,
} = props;

const block = useSelect(
Expand Down Expand Up @@ -86,6 +126,7 @@ function UncontrolledInnerBlocks( props ) {
onAddBlock={ onAddBlock }
onDeleteBlock={ onDeleteBlock }
filterInnerBlocks={ filterInnerBlocks }
gridProperties={ gridProperties }
blockWidth={ blockWidth }
/>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,15 @@ Callback called when urls can be configured. No media insertion from url will be
- Required: No
- Platform: Web

### handleUpload

When set to false the handling of the upload is left to the calling component.

- Type: `Boolean`
- Required: No
- Default: `true`
- Platform: Web

## Extend

It includes a `wp.hooks` filter `editor.MediaPlaceholder` that enables developers to replace or extend it.
Expand Down
Loading