UNPKG

@wordpress/editor

Version:
8 lines (7 loc) 5.66 kB
{ "version": 3, "sources": ["../../src/hooks/custom-sources-backwards-compatibility.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useEntityProp } from '@wordpress/core-data';\nimport { useMemo } from '@wordpress/element';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { addFilter } from '@wordpress/hooks';\n\n/**\n * Internal dependencies\n */\nimport { store as editorStore } from '../store';\n\n/** @typedef {import('@wordpress/compose').WPHigherOrderComponent} WPHigherOrderComponent */\n/** @typedef {import('@wordpress/blocks').WPBlockSettings} WPBlockSettings */\n\n/**\n * Object whose keys are the names of block attributes, where each value\n * represents the meta key to which the block attribute is intended to save.\n *\n * @see https://developer.wordpress.org/reference/functions/register_meta/\n *\n * @typedef {Object<string,string>} WPMetaAttributeMapping\n */\n\n/**\n * Given a mapping of attribute names (meta source attributes) to their\n * associated meta key, returns a higher order component that overrides its\n * `attributes` and `setAttributes` props to sync any changes with the edited\n * post's meta keys.\n *\n * @param {WPMetaAttributeMapping} metaAttributes Meta attribute mapping.\n *\n * @return {WPHigherOrderComponent} Higher-order component.\n */\nconst createWithMetaAttributeSource = ( metaAttributes ) =>\n\tcreateHigherOrderComponent(\n\t\t( BlockEdit ) =>\n\t\t\t( { attributes, setAttributes, ...props } ) => {\n\t\t\t\tconst postType = useSelect(\n\t\t\t\t\t( select ) => select( editorStore ).getCurrentPostType(),\n\t\t\t\t\t[]\n\t\t\t\t);\n\t\t\t\tconst [ meta, setMeta ] = useEntityProp(\n\t\t\t\t\t'postType',\n\t\t\t\t\tpostType,\n\t\t\t\t\t'meta'\n\t\t\t\t);\n\n\t\t\t\tconst mergedAttributes = useMemo(\n\t\t\t\t\t() => ( {\n\t\t\t\t\t\t...attributes,\n\t\t\t\t\t\t...Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries( metaAttributes ).map(\n\t\t\t\t\t\t\t\t( [ attributeKey, metaKey ] ) => [\n\t\t\t\t\t\t\t\t\tattributeKey,\n\t\t\t\t\t\t\t\t\tmeta[ metaKey ],\n\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t} ),\n\t\t\t\t\t[ attributes, meta ]\n\t\t\t\t);\n\n\t\t\t\treturn (\n\t\t\t\t\t<BlockEdit\n\t\t\t\t\t\tattributes={ mergedAttributes }\n\t\t\t\t\t\tsetAttributes={ ( nextAttributes ) => {\n\t\t\t\t\t\t\tconst nextMeta = Object.fromEntries(\n\t\t\t\t\t\t\t\tObject.entries( nextAttributes ?? {} )\n\t\t\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t\t\t// Filter to intersection of keys between the updated\n\t\t\t\t\t\t\t\t\t\t// attributes and those with an associated meta key.\n\t\t\t\t\t\t\t\t\t\t( [ key ] ) => key in metaAttributes\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.map( ( [ attributeKey, value ] ) => [\n\t\t\t\t\t\t\t\t\t\t// Rename the keys to the expected meta key name.\n\t\t\t\t\t\t\t\t\t\tmetaAttributes[ attributeKey ],\n\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t] )\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tif ( Object.entries( nextMeta ).length ) {\n\t\t\t\t\t\t\t\tsetMeta( nextMeta );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tsetAttributes( nextAttributes );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t},\n\t\t'withMetaAttributeSource'\n\t);\n\n/**\n * Filters a registered block's settings to enhance a block's `edit` component\n * to upgrade meta-sourced attributes to use the post's meta entity property.\n *\n * @param {WPBlockSettings} settings Registered block settings.\n *\n * @return {WPBlockSettings} Filtered block settings.\n */\nfunction shimAttributeSource( settings ) {\n\t/** @type {WPMetaAttributeMapping} */\n\tconst metaAttributes = Object.fromEntries(\n\t\tObject.entries( settings.attributes ?? {} )\n\t\t\t.filter( ( [ , { source } ] ) => source === 'meta' )\n\t\t\t.map( ( [ attributeKey, { meta } ] ) => [ attributeKey, meta ] )\n\t);\n\tif ( Object.entries( metaAttributes ).length ) {\n\t\tsettings.edit = createWithMetaAttributeSource( metaAttributes )(\n\t\t\tsettings.edit\n\t\t);\n\t}\n\n\treturn settings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/custom-sources-backwards-compatibility/shim-attribute-source',\n\tshimAttributeSource\n);\n"], "mappings": ";AAGA,SAAS,iBAAiB;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,eAAe;AACxB,SAAS,kCAAkC;AAC3C,SAAS,iBAAiB;AAK1B,SAAS,SAAS,mBAAmB;AAsDhC;AA9BL,IAAM,gCAAgC,CAAE,mBACvC;AAAA,EACC,CAAE,cACD,CAAE,EAAE,YAAY,eAAe,GAAG,MAAM,MAAO;AAC9C,UAAM,WAAW;AAAA,MAChB,CAAE,WAAY,OAAQ,WAAY,EAAE,mBAAmB;AAAA,MACvD,CAAC;AAAA,IACF;AACA,UAAM,CAAE,MAAM,OAAQ,IAAI;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAEA,UAAM,mBAAmB;AAAA,MACxB,OAAQ;AAAA,QACP,GAAG;AAAA,QACH,GAAG,OAAO;AAAA,UACT,OAAO,QAAS,cAAe,EAAE;AAAA,YAChC,CAAE,CAAE,cAAc,OAAQ,MAAO;AAAA,cAChC;AAAA,cACA,KAAM,OAAQ;AAAA,YACf;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,MACA,CAAE,YAAY,IAAK;AAAA,IACpB;AAEA,WACC;AAAA,MAAC;AAAA;AAAA,QACA,YAAa;AAAA,QACb,eAAgB,CAAE,mBAAoB;AACrC,gBAAM,WAAW,OAAO;AAAA,YACvB,OAAO,QAAS,kBAAkB,CAAC,CAAE,EACnC;AAAA;AAAA;AAAA,cAGA,CAAE,CAAE,GAAI,MAAO,OAAO;AAAA,YACvB,EACC,IAAK,CAAE,CAAE,cAAc,KAAM,MAAO;AAAA;AAAA,cAEpC,eAAgB,YAAa;AAAA,cAC7B;AAAA,YACD,CAAE;AAAA,UACJ;AAEA,cAAK,OAAO,QAAS,QAAS,EAAE,QAAS;AACxC,oBAAS,QAAS;AAAA,UACnB;AAEA,wBAAe,cAAe;AAAA,QAC/B;AAAA,QACE,GAAG;AAAA;AAAA,IACN;AAAA,EAEF;AAAA,EACD;AACD;AAUD,SAAS,oBAAqB,UAAW;AAExC,QAAM,iBAAiB,OAAO;AAAA,IAC7B,OAAO,QAAS,SAAS,cAAc,CAAC,CAAE,EACxC,OAAQ,CAAE,CAAE,EAAE,EAAE,OAAO,CAAE,MAAO,WAAW,MAAO,EAClD,IAAK,CAAE,CAAE,cAAc,EAAE,KAAK,CAAE,MAAO,CAAE,cAAc,IAAK,CAAE;AAAA,EACjE;AACA,MAAK,OAAO,QAAS,cAAe,EAAE,QAAS;AAC9C,aAAS,OAAO,8BAA+B,cAAe;AAAA,MAC7D,SAAS;AAAA,IACV;AAAA,EACD;AAEA,SAAO;AACR;AAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AACD;", "names": [] }