File "migrateGlobalStyleAttrs.js"
Full path: /home/webcknlt/admissiontell.com/wp-content/plugins/generateblocks/src/hoc/migrations/migrateGlobalStyleAttrs.js
File
size: 2.69 B (2.69 KB bytes)
MIME-type: text/x-java
Charset: utf-8
Download Open Edit Advanced Editor &nnbsp; Back
import { addFilter } from '@wordpress/hooks';
import { migrateButtonAttributes } from '../withButtonLegacyMigration';
import { migrateButtonContainerAttributes } from '../withButtonContainerLegacyMigration';
import { migrateContainerAttributes } from '../withContainerLegacyMigration';
import { migrateHeadlineAttributes } from '../withHeadlineLegacyMigration';
import { migrateGridAttributes } from '../withGridLegacyMigration';
import { migrateImageAttributes } from '../withImageLegacyMigration';
import { isEmpty, isObject } from 'lodash';
/**
* This ensures that Global Styles pass the correct attributes
* to the CSS generation even when attributes change names.
*/
addFilter(
'generateblocks.editor.cssAttrs',
'generateblocks/migrateCssAttrs',
( attributes, props ) => {
const {
name,
} = props;
if ( ! attributes.useGlobalStyle ) {
return attributes;
}
let migrateFunction = null;
switch ( name ) {
case 'generateblocks/button':
migrateFunction = migrateButtonAttributes;
break;
case 'generateblocks/button-container':
migrateFunction = migrateButtonContainerAttributes;
break;
case 'generateblocks/container':
migrateFunction = migrateContainerAttributes;
break;
case 'generateblocks/headline':
migrateFunction = migrateHeadlineAttributes;
break;
case 'generateblocks/grid':
migrateFunction = migrateGridAttributes;
break;
case 'generateblocks/image':
migrateFunction = migrateImageAttributes;
break;
}
if ( null !== migrateFunction ) {
// This ensures that old attributes (coming from Global Styles) are migrated
// to their new attribute names so styling continues to work in the editor.
const migratedAttributes = migrateFunction( {
attributes: {
...attributes,
// Use the global style block version if possible.
blockVersion: attributes.globalBlockVersion || 1,
},
mode: 'css',
} );
const newAttributes = {};
// We only need these migrated attributes if a local attribute doesn't exist.
Object.entries( migratedAttributes ).forEach( ( [ attributeName, attributeValue ] ) => {
if ( isObject( attributeValue ) ) {
Object.entries( attributeValue ).forEach( ( [ objectProperty, objectValue ] ) => {
if ( isEmpty( attributes[ attributeName ]?.[ objectProperty ] ) ) {
newAttributes[ attributeName ] = {
...attributes[ attributeName ],
...newAttributes[ attributeName ],
[ objectProperty ]: objectValue,
};
}
} );
} else if ( isEmpty( attributes[ attributeName ] ) ) {
newAttributes[ attributeName ] = attributeValue;
}
} );
return { ...attributes, ...newAttributes };
}
return attributes;
},
1000
);