UNPKG

@wordpress/editor

Version:
8 lines (7 loc) 6.22 kB
{ "version": 3, "sources": ["../../../src/components/post-transform-panel/hooks.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useMemo } from '@wordpress/element';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { parse } from '@wordpress/blocks';\nimport { privateApis as patternsPrivateApis } from '@wordpress/patterns';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../../lock-unlock';\nimport { store as editorStore } from '../../store';\n\nconst { EXCLUDED_PATTERN_SOURCES, PATTERN_TYPES } =\n\tunlock( patternsPrivateApis );\n\nfunction injectThemeAttributeInBlockTemplateContent(\n\tblock,\n\tcurrentThemeStylesheet\n) {\n\tblock.innerBlocks = block.innerBlocks.map( ( innerBlock ) => {\n\t\treturn injectThemeAttributeInBlockTemplateContent(\n\t\t\tinnerBlock,\n\t\t\tcurrentThemeStylesheet\n\t\t);\n\t} );\n\n\tif (\n\t\tblock.name === 'core/template-part' &&\n\t\tblock.attributes.theme === undefined\n\t) {\n\t\tblock.attributes.theme = currentThemeStylesheet;\n\t}\n\treturn block;\n}\n\n/**\n * Filter all patterns and return only the ones that are compatible with the current template.\n *\n * @param {Array} patterns An array of patterns.\n * @param {Object} template The current template. Required values are `area`, `name`, and `slug`.\n * @return {Array} Array of patterns that are compatible with the current template.\n */\nfunction filterPatterns( patterns, template ) {\n\t// Filter out duplicates.\n\tconst filterOutDuplicatesByName = ( currentItem, index, items ) =>\n\t\tindex === items.findIndex( ( item ) => currentItem.name === item.name );\n\n\t// Filter out core/directory patterns not included in theme.json.\n\t// Exception: navigation-overlay patterns should always show core patterns.\n\t// We only want them to show here, we want them excluded everywhere else\n\t// to avoid showing them in the inserter or the patterns page.\n\tconst filterOutExcludedPatternSources = ( pattern ) => {\n\t\tif (\n\t\t\ttemplate.area === 'navigation-overlay' &&\n\t\t\tpattern.blockTypes?.includes(\n\t\t\t\t'core/template-part/navigation-overlay'\n\t\t\t)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\treturn ! EXCLUDED_PATTERN_SOURCES.includes( pattern.source );\n\t};\n\n\t// Looks for patterns that have the same template type as the current template,\n\t// or have a block type that matches the current template area.\n\tconst filterCompatiblePatterns = ( pattern ) =>\n\t\tpattern.templateTypes?.includes( template.slug ) ||\n\t\tpattern.blockTypes?.includes( 'core/template-part/' + template.area );\n\n\treturn patterns.filter( ( pattern, index, items ) => {\n\t\treturn (\n\t\t\tfilterOutDuplicatesByName( pattern, index, items ) &&\n\t\t\tfilterOutExcludedPatternSources( pattern ) &&\n\t\t\tfilterCompatiblePatterns( pattern )\n\t\t);\n\t} );\n}\n\nfunction preparePatterns( patterns, currentThemeStylesheet ) {\n\treturn patterns.map( ( pattern ) => ( {\n\t\t...pattern,\n\t\tkeywords: pattern.keywords || [],\n\t\ttype: PATTERN_TYPES.theme,\n\t\tblocks: parse( pattern.content, {\n\t\t\t__unstableSkipMigrationLogs: true,\n\t\t} ).map( ( block ) =>\n\t\t\tinjectThemeAttributeInBlockTemplateContent(\n\t\t\t\tblock,\n\t\t\t\tcurrentThemeStylesheet\n\t\t\t)\n\t\t),\n\t} ) );\n}\n\nexport function useAvailablePatterns( { area, name, slug } ) {\n\tconst { blockPatterns, restBlockPatterns, currentThemeStylesheet } =\n\t\tuseSelect( ( select ) => {\n\t\t\tconst { getEditorSettings } = select( editorStore );\n\t\t\tconst settings = getEditorSettings();\n\n\t\t\treturn {\n\t\t\t\tblockPatterns:\n\t\t\t\t\tsettings.__experimentalAdditionalBlockPatterns ??\n\t\t\t\t\tsettings.__experimentalBlockPatterns,\n\t\t\t\trestBlockPatterns: select( coreStore ).getBlockPatterns(),\n\t\t\t\tcurrentThemeStylesheet:\n\t\t\t\t\tselect( coreStore ).getCurrentTheme().stylesheet,\n\t\t\t};\n\t\t}, [] );\n\n\treturn useMemo( () => {\n\t\tconst mergedPatterns = [\n\t\t\t...( blockPatterns || [] ),\n\t\t\t...( restBlockPatterns || [] ),\n\t\t];\n\t\tconst filteredPatterns = filterPatterns( mergedPatterns, {\n\t\t\tarea,\n\t\t\tname,\n\t\t\tslug,\n\t\t} );\n\t\treturn preparePatterns( filteredPatterns, currentThemeStylesheet );\n\t}, [\n\t\tarea,\n\t\tname,\n\t\tslug,\n\t\tblockPatterns,\n\t\trestBlockPatterns,\n\t\tcurrentThemeStylesheet,\n\t] );\n}\n"], "mappings": ";AAGA,SAAS,iBAAiB;AAC1B,SAAS,eAAe;AACxB,SAAS,SAAS,iBAAiB;AACnC,SAAS,aAAa;AACtB,SAAS,eAAe,2BAA2B;AAKnD,SAAS,cAAc;AACvB,SAAS,SAAS,mBAAmB;AAErC,IAAM,EAAE,0BAA0B,cAAc,IAC/C,OAAQ,mBAAoB;AAE7B,SAAS,2CACR,OACA,wBACC;AACD,QAAM,cAAc,MAAM,YAAY,IAAK,CAAE,eAAgB;AAC5D,WAAO;AAAA,MACN;AAAA,MACA;AAAA,IACD;AAAA,EACD,CAAE;AAEF,MACC,MAAM,SAAS,wBACf,MAAM,WAAW,UAAU,QAC1B;AACD,UAAM,WAAW,QAAQ;AAAA,EAC1B;AACA,SAAO;AACR;AASA,SAAS,eAAgB,UAAU,UAAW;AAE7C,QAAM,4BAA4B,CAAE,aAAa,OAAO,UACvD,UAAU,MAAM,UAAW,CAAE,SAAU,YAAY,SAAS,KAAK,IAAK;AAMvE,QAAM,kCAAkC,CAAE,YAAa;AACtD,QACC,SAAS,SAAS,wBAClB,QAAQ,YAAY;AAAA,MACnB;AAAA,IACD,GACC;AACD,aAAO;AAAA,IACR;AACA,WAAO,CAAE,yBAAyB,SAAU,QAAQ,MAAO;AAAA,EAC5D;AAIA,QAAM,2BAA2B,CAAE,YAClC,QAAQ,eAAe,SAAU,SAAS,IAAK,KAC/C,QAAQ,YAAY,SAAU,wBAAwB,SAAS,IAAK;AAErE,SAAO,SAAS,OAAQ,CAAE,SAAS,OAAO,UAAW;AACpD,WACC,0BAA2B,SAAS,OAAO,KAAM,KACjD,gCAAiC,OAAQ,KACzC,yBAA0B,OAAQ;AAAA,EAEpC,CAAE;AACH;AAEA,SAAS,gBAAiB,UAAU,wBAAyB;AAC5D,SAAO,SAAS,IAAK,CAAE,aAAe;AAAA,IACrC,GAAG;AAAA,IACH,UAAU,QAAQ,YAAY,CAAC;AAAA,IAC/B,MAAM,cAAc;AAAA,IACpB,QAAQ,MAAO,QAAQ,SAAS;AAAA,MAC/B,6BAA6B;AAAA,IAC9B,CAAE,EAAE;AAAA,MAAK,CAAE,UACV;AAAA,QACC;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAAA,EACD,EAAI;AACL;AAEO,SAAS,qBAAsB,EAAE,MAAM,MAAM,KAAK,GAAI;AAC5D,QAAM,EAAE,eAAe,mBAAmB,uBAAuB,IAChE,UAAW,CAAE,WAAY;AACxB,UAAM,EAAE,kBAAkB,IAAI,OAAQ,WAAY;AAClD,UAAM,WAAW,kBAAkB;AAEnC,WAAO;AAAA,MACN,eACC,SAAS,yCACT,SAAS;AAAA,MACV,mBAAmB,OAAQ,SAAU,EAAE,iBAAiB;AAAA,MACxD,wBACC,OAAQ,SAAU,EAAE,gBAAgB,EAAE;AAAA,IACxC;AAAA,EACD,GAAG,CAAC,CAAE;AAEP,SAAO,QAAS,MAAM;AACrB,UAAM,iBAAiB;AAAA,MACtB,GAAK,iBAAiB,CAAC;AAAA,MACvB,GAAK,qBAAqB,CAAC;AAAA,IAC5B;AACA,UAAM,mBAAmB,eAAgB,gBAAgB;AAAA,MACxD;AAAA,MACA;AAAA,MACA;AAAA,IACD,CAAE;AACF,WAAO,gBAAiB,kBAAkB,sBAAuB;AAAA,EAClE,GAAG;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAE;AACH;", "names": [] }