37 lines
1.0 KiB
JavaScript
37 lines
1.0 KiB
JavaScript
|
/**
|
||
|
* Given some block attributes, gets attributes from the dataset or uses defaults.
|
||
|
*
|
||
|
* @param {Object} blockAttributes Object containing block attributes.
|
||
|
* @param {Array} rawAttributes Dataset from DOM.
|
||
|
* @return {Array} Array of parsed attributes.
|
||
|
*/
|
||
|
export const getValidBlockAttributes = ( blockAttributes, rawAttributes ) => {
|
||
|
const attributes = [];
|
||
|
|
||
|
Object.keys( blockAttributes ).forEach( ( key ) => {
|
||
|
if ( typeof rawAttributes[ key ] !== 'undefined' ) {
|
||
|
switch ( blockAttributes[ key ].type ) {
|
||
|
case 'boolean':
|
||
|
attributes[ key ] = rawAttributes[ key ] !== 'false';
|
||
|
break;
|
||
|
case 'number':
|
||
|
attributes[ key ] = parseInt( rawAttributes[ key ], 10 );
|
||
|
break;
|
||
|
case 'array':
|
||
|
case 'object':
|
||
|
attributes[ key ] = JSON.parse( rawAttributes[ key ] );
|
||
|
break;
|
||
|
default:
|
||
|
attributes[ key ] = rawAttributes[ key ];
|
||
|
break;
|
||
|
}
|
||
|
} else {
|
||
|
attributes[ key ] = blockAttributes[ key ].default;
|
||
|
}
|
||
|
} );
|
||
|
|
||
|
return attributes;
|
||
|
};
|
||
|
|
||
|
export default getValidBlockAttributes;
|