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

Block Deprecations: Provide extra data for isEligible check #48815

Merged
merged 4 commits into from
Mar 15, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
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
6 changes: 3 additions & 3 deletions docs/reference-guides/block-api/block-deprecation.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Deprecations are defined on a block type as its `deprecated` property, an array
- `supports` (Object): The [supports definition](/docs/reference-guides/block-api/block-registration.md) of the deprecated form of the block.
- `save` (Function): The [save implementation](/docs/reference-guides/block-api/block-edit-save.md) of the deprecated form of the block.
- `migrate` (Function, Optional): A function which, given the old attributes and inner blocks is expected to return either the new attributes or a tuple array of `[ attributes, innerBlocks ]` compatible with the block. As mentioned above, a deprecation's `migrate` will not be run if its `save` function does not return a valid block so you will need to make sure your migrations are available in all the deprecations where they are relevant.
- `isEligible` (Function, Optional): A function which, given the attributes and inner blocks of the parsed block, returns true if the deprecation can handle the block migration even if the block is valid. This is particularly useful in cases where a block is technically valid even once deprecated, but still requires updates to its attributes or inner blocks. This function is not called when the results of all previous deprecations' `save` functions were invalid.
- `isEligible` (Function, Optional): A function which, given the attributes and inner blocks of the parsed block, returns true if the deprecation can handle the block migration even if the block is valid. This is particularly useful in cases where a block is technically valid even once deprecated, but still requires updates to its attributes or inner blocks. If further information is required to determine this deprecation's eligibility, the block node and object are provided within a third parameter. This function is not called when the results of all previous deprecations' `save` functions were invalid.
aaronrobertshaw marked this conversation as resolved.
Show resolved Hide resolved

It's important to note that `attributes`, `supports`, and `save` are not automatically inherited from the current version, since they can impact parsing and serialization of a block, so they must be defined on the deprecated object in order to be processed during a migration.

Expand All @@ -63,7 +63,7 @@ registerBlockType( 'gutenberg/block-with-deprecated-version', {
// ... other block properties go here

attributes,

supports,

save( props ) {
Expand All @@ -73,7 +73,7 @@ registerBlockType( 'gutenberg/block-with-deprecated-version', {
deprecated: [
{
attributes,

supports,

save( props ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,10 @@ export function applyBlockDeprecatedVersions( block, rawBlock, blockType ) {
const { isEligible = stubFalse } = deprecatedDefinitions[ i ];
if (
block.isValid &&
! isEligible( parsedAttributes, block.innerBlocks )
! isEligible( parsedAttributes, block.innerBlocks, {
blockNode: rawBlock,
block,
} )
) {
continue;
}
Expand Down