UNPKG

@wordpress/block-editor

Version:
8 lines (7 loc) 6.38 kB
{ "version": 3, "sources": ["../../../src/components/block-toolbar/change-design.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport {\n\tToolbarButton,\n\tToolbarGroup,\n\tDropdown,\n\t__experimentalDropdownContentWrapper as DropdownContentWrapper,\n} from '@wordpress/components';\nimport { __ } from '@wordpress/i18n';\nimport { cloneBlock } from '@wordpress/blocks';\nimport { useMemo } from '@wordpress/element';\nimport { useSelect, useDispatch } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\nimport BlockPatternsList from '../block-patterns-list';\n\nconst EMPTY_ARRAY = [];\nconst MAX_PATTERNS_TO_SHOW = 6;\nconst POPOVER_PROPS = {\n\tplacement: 'bottom-start',\n};\n\nexport default function ChangeDesign( { clientId } ) {\n\tconst { categories, currentPatternName, patterns } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tgetBlockAttributes,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t\t__experimentalGetAllowedPatterns,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst attributes = getBlockAttributes( clientId );\n\t\t\tconst _categories = attributes?.metadata?.categories || EMPTY_ARRAY;\n\t\t\tconst rootBlock = getBlockRootClientId( clientId );\n\n\t\t\t// Calling `__experimentalGetAllowedPatterns` is expensive.\n\t\t\t// Checking if the block can be changed prevents unnecessary selector calls.\n\t\t\t// See: https://github.com/WordPress/gutenberg/pull/64736.\n\t\t\tconst _patterns =\n\t\t\t\t_categories.length > 0\n\t\t\t\t\t? __experimentalGetAllowedPatterns( rootBlock )\n\t\t\t\t\t: EMPTY_ARRAY;\n\t\t\treturn {\n\t\t\t\tcategories: _categories,\n\t\t\t\tcurrentPatternName: attributes?.metadata?.patternName,\n\t\t\t\tpatterns: _patterns,\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { replaceBlocks } = useDispatch( blockEditorStore );\n\tconst sameCategoryPatternsWithSingleWrapper = useMemo( () => {\n\t\tif ( categories.length === 0 || ! patterns || patterns.length === 0 ) {\n\t\t\treturn EMPTY_ARRAY;\n\t\t}\n\t\treturn patterns\n\t\t\t.filter( ( pattern ) => {\n\t\t\t\tconst isCorePattern =\n\t\t\t\t\tpattern.source === 'core' ||\n\t\t\t\t\t( pattern.source?.startsWith( 'pattern-directory' ) &&\n\t\t\t\t\t\tpattern.source !== 'pattern-directory/theme' );\n\t\t\t\treturn (\n\t\t\t\t\t// Check if the pattern has only one top level block,\n\t\t\t\t\t// otherwise we may switch to a pattern that doesn't have replacement suggestions.\n\t\t\t\t\tpattern.blocks.length === 1 &&\n\t\t\t\t\t// We exclude the core patterns and pattern directory patterns that are not theme patterns.\n\t\t\t\t\t! isCorePattern &&\n\t\t\t\t\t// Exclude current pattern.\n\t\t\t\t\tcurrentPatternName !== pattern.name &&\n\t\t\t\t\tpattern.categories?.some( ( category ) => {\n\t\t\t\t\t\treturn categories.includes( category );\n\t\t\t\t\t} ) &&\n\t\t\t\t\t// Check if the pattern is not a synced pattern.\n\t\t\t\t\t( pattern.syncStatus === 'unsynced' || ! pattern.id )\n\t\t\t\t);\n\t\t\t} )\n\t\t\t.slice( 0, MAX_PATTERNS_TO_SHOW );\n\t}, [ categories, currentPatternName, patterns ] );\n\n\tif ( sameCategoryPatternsWithSingleWrapper.length < 2 ) {\n\t\treturn null;\n\t}\n\n\tconst onClickPattern = ( pattern ) => {\n\t\tconst newBlocks = ( pattern.blocks ?? [] ).map( ( block ) => {\n\t\t\treturn cloneBlock( block );\n\t\t} );\n\t\tnewBlocks[ 0 ].attributes.metadata = {\n\t\t\t...newBlocks[ 0 ].attributes.metadata,\n\t\t\tcategories,\n\t\t};\n\t\treplaceBlocks( clientId, newBlocks );\n\t};\n\n\treturn (\n\t\t<Dropdown\n\t\t\tpopoverProps={ POPOVER_PROPS }\n\t\t\trenderToggle={ ( { onToggle, isOpen } ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<ToolbarGroup>\n\t\t\t\t\t\t<ToolbarButton\n\t\t\t\t\t\t\tonClick={ () => onToggle( ! isOpen ) }\n\t\t\t\t\t\t\taria-expanded={ isOpen }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Change design' ) }\n\t\t\t\t\t\t</ToolbarButton>\n\t\t\t\t\t</ToolbarGroup>\n\t\t\t\t);\n\t\t\t} }\n\t\t\trenderContent={ () => (\n\t\t\t\t<DropdownContentWrapper\n\t\t\t\t\tclassName=\"block-editor-block-toolbar-change-design-content-wrapper\"\n\t\t\t\t\tpaddingSize=\"none\"\n\t\t\t\t>\n\t\t\t\t\t<BlockPatternsList\n\t\t\t\t\t\tblockPatterns={ sameCategoryPatternsWithSingleWrapper }\n\t\t\t\t\t\tonClickPattern={ onClickPattern }\n\t\t\t\t\t\tshowTitlesAsTooltip\n\t\t\t\t\t/>\n\t\t\t\t</DropdownContentWrapper>\n\t\t\t) }\n\t\t/>\n\t);\n}\n"], "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,wBAKO;AACP,kBAAmB;AACnB,oBAA2B;AAC3B,qBAAwB;AACxB,kBAAuC;AAKvC,mBAA0C;AAC1C,iCAA8B;AAqFxB;AAnFN,IAAM,cAAc,CAAC;AACrB,IAAM,uBAAuB;AAC7B,IAAM,gBAAgB;AAAA,EACrB,WAAW;AACZ;AAEe,SAAR,aAA+B,EAAE,SAAS,GAAI;AACpD,QAAM,EAAE,YAAY,oBAAoB,SAAS,QAAI;AAAA,IACpD,CAAE,WAAY;AACb,YAAM;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACD,IAAI,OAAQ,aAAAA,KAAiB;AAC7B,YAAM,aAAa,mBAAoB,QAAS;AAChD,YAAM,cAAc,YAAY,UAAU,cAAc;AACxD,YAAM,YAAY,qBAAsB,QAAS;AAKjD,YAAM,YACL,YAAY,SAAS,IAClB,iCAAkC,SAAU,IAC5C;AACJ,aAAO;AAAA,QACN,YAAY;AAAA,QACZ,oBAAoB,YAAY,UAAU;AAAA,QAC1C,UAAU;AAAA,MACX;AAAA,IACD;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AACA,QAAM,EAAE,cAAc,QAAI,yBAAa,aAAAA,KAAiB;AACxD,QAAM,4CAAwC,wBAAS,MAAM;AAC5D,QAAK,WAAW,WAAW,KAAK,CAAE,YAAY,SAAS,WAAW,GAAI;AACrE,aAAO;AAAA,IACR;AACA,WAAO,SACL,OAAQ,CAAE,YAAa;AACvB,YAAM,gBACL,QAAQ,WAAW,UACjB,QAAQ,QAAQ,WAAY,mBAAoB,KACjD,QAAQ,WAAW;AACrB;AAAA;AAAA;AAAA,QAGC,QAAQ,OAAO,WAAW;AAAA,QAE1B,CAAE;AAAA,QAEF,uBAAuB,QAAQ,QAC/B,QAAQ,YAAY,KAAM,CAAE,aAAc;AACzC,iBAAO,WAAW,SAAU,QAAS;AAAA,QACtC,CAAE;AAAA,SAEA,QAAQ,eAAe,cAAc,CAAE,QAAQ;AAAA;AAAA,IAEnD,CAAE,EACD,MAAO,GAAG,oBAAqB;AAAA,EAClC,GAAG,CAAE,YAAY,oBAAoB,QAAS,CAAE;AAEhD,MAAK,sCAAsC,SAAS,GAAI;AACvD,WAAO;AAAA,EACR;AAEA,QAAM,iBAAiB,CAAE,YAAa;AACrC,UAAM,aAAc,QAAQ,UAAU,CAAC,GAAI,IAAK,CAAE,UAAW;AAC5D,iBAAO,0BAAY,KAAM;AAAA,IAC1B,CAAE;AACF,cAAW,CAAE,EAAE,WAAW,WAAW;AAAA,MACpC,GAAG,UAAW,CAAE,EAAE,WAAW;AAAA,MAC7B;AAAA,IACD;AACA,kBAAe,UAAU,SAAU;AAAA,EACpC;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,cAAe;AAAA,MACf,cAAe,CAAE,EAAE,UAAU,OAAO,MAAO;AAC1C,eACC,4CAAC,kCACA;AAAA,UAAC;AAAA;AAAA,YACA,SAAU,MAAM,SAAU,CAAE,MAAO;AAAA,YACnC,iBAAgB;AAAA,YAEd,8BAAI,eAAgB;AAAA;AAAA,QACvB,GACD;AAAA,MAEF;AAAA,MACA,eAAgB,MACf;AAAA,QAAC,kBAAAC;AAAA,QAAA;AAAA,UACA,WAAU;AAAA,UACV,aAAY;AAAA,UAEZ;AAAA,YAAC,2BAAAC;AAAA,YAAA;AAAA,cACA,eAAgB;AAAA,cAChB;AAAA,cACA,qBAAmB;AAAA;AAAA,UACpB;AAAA;AAAA,MACD;AAAA;AAAA,EAEF;AAEF;", "names": ["blockEditorStore", "DropdownContentWrapper", "BlockPatternsList"] }