Skip to content

Commit

Permalink
Block Bindings: Fix passing bindings context to canUserEditValue (#…
Browse files Browse the repository at this point in the history
…65599)

* Pass updated context as `context` prop

* Use `updatedContext` in pattern overrides

Co-authored-by: SantosGuillamot <[email protected]>
Co-authored-by: gziolo <[email protected]>
  • Loading branch information
3 people authored Sep 24, 2024
1 parent 0844af0 commit 2a80118
Showing 1 changed file with 24 additions and 29 deletions.
53 changes: 24 additions & 29 deletions packages/block-editor/src/hooks/use-bindings-attributes.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,11 +103,7 @@ export const withBlockBindingSupport = createHigherOrderComponent(
const sources = useSelect( ( select ) =>
unlock( select( blocksStore ) ).getAllBlockBindingsSources()
);
const { name, clientId } = props;
const hasParentPattern = !! props.context[ 'pattern/overrides' ];
const hasPatternOverridesDefaultBinding =
props.attributes.metadata?.bindings?.[ DEFAULT_ATTRIBUTE ]
?.source === 'core/pattern-overrides';
const { name, clientId, context, setAttributes } = props;
const blockBindings = useMemo(
() =>
replacePatternOverrideDefaultBindings(
Expand All @@ -121,6 +117,7 @@ export const withBlockBindingSupport = createHigherOrderComponent(
// used purposely here to ensure `boundAttributes` is updated whenever
// there are attribute updates.
// `source.getValues` may also call a selector via `registry.select`.
const updatedContext = { ...context };
const boundAttributes = useSelect( () => {
if ( ! blockBindings ) {
return;
Expand All @@ -139,6 +136,11 @@ export const withBlockBindingSupport = createHigherOrderComponent(
continue;
}

// Populate context.
for ( const key of source.usesContext || [] ) {
updatedContext[ key ] = blockContext[ key ];
}

blockBindingsBySource.set( source, {
...blockBindingsBySource.get( source ),
[ attributeName ]: {
Expand All @@ -149,15 +151,6 @@ export const withBlockBindingSupport = createHigherOrderComponent(

if ( blockBindingsBySource.size ) {
for ( const [ source, bindings ] of blockBindingsBySource ) {
// Populate context.
const context = {};

if ( source.usesContext?.length ) {
for ( const key of source.usesContext ) {
context[ key ] = blockContext[ key ];
}
}

// Get values in batch if the source supports it.
let values = {};
if ( ! source.getValues ) {
Expand All @@ -168,7 +161,7 @@ export const withBlockBindingSupport = createHigherOrderComponent(
} else {
values = source.getValues( {
registry,
context,
context: updatedContext,
clientId,
bindings,
} );
Expand All @@ -190,9 +183,19 @@ export const withBlockBindingSupport = createHigherOrderComponent(
}

return attributes;
}, [ blockBindings, name, clientId, blockContext, registry, sources ] );

const { setAttributes } = props;
}, [
blockBindings,
name,
clientId,
updatedContext,
registry,
sources,
] );

const hasParentPattern = !! updatedContext[ 'pattern/overrides' ];
const hasPatternOverridesDefaultBinding =
props.attributes.metadata?.bindings?.[ DEFAULT_ATTRIBUTE ]
?.source === 'core/pattern-overrides';

const _setAttributes = useCallback(
( nextAttributes ) => {
Expand Down Expand Up @@ -236,18 +239,9 @@ export const withBlockBindingSupport = createHigherOrderComponent(
source,
bindings,
] of blockBindingsBySource ) {
// Populate context.
const context = {};

if ( source.usesContext?.length ) {
for ( const key of source.usesContext ) {
context[ key ] = blockContext[ key ];
}
}

source.setValues( {
registry,
context,
context: updatedContext,
clientId,
bindings,
} );
Expand Down Expand Up @@ -277,7 +271,7 @@ export const withBlockBindingSupport = createHigherOrderComponent(
blockBindings,
name,
clientId,
blockContext,
updatedContext,
setAttributes,
sources,
hasPatternOverridesDefaultBinding,
Expand All @@ -291,6 +285,7 @@ export const withBlockBindingSupport = createHigherOrderComponent(
{ ...props }
attributes={ { ...props.attributes, ...boundAttributes } }
setAttributes={ _setAttributes }
context={ updatedContext }
/>
</>
);
Expand Down

0 comments on commit 2a80118

Please sign in to comment.