@wordpress/block-library
Version:
Block library for the WordPress editor.
8 lines (7 loc) • 3.87 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../../src/navigation/edit/use-create-overlay.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { useCallback } from '@wordpress/element';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { store as coreStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\nimport { __ } from '@wordpress/i18n';\nimport { parse, serialize, createBlock } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { getUniqueTemplatePartTitle, getCleanTemplatePartSlug } from './utils';\nimport { NAVIGATION_OVERLAY_TEMPLATE_PART_AREA } from '../constants';\nimport { unlock } from '../../lock-unlock';\n\n/**\n * Hook to create a new overlay template part.\n *\n * @param {Array} overlayTemplateParts Array of existing overlay template parts.\n * @return {function(): Promise<Object>} Function to create a new overlay template part.\n * The function returns a Promise that resolves to the created template part object.\n */\nexport default function useCreateOverlayTemplatePart( overlayTemplateParts ) {\n\tconst { saveEntityRecord } = useDispatch( coreStore );\n\tconst pattern = useSelect(\n\t\t( select ) =>\n\t\t\tunlock( select( blockEditorStore ) ).getPatternBySlug(\n\t\t\t\t'gutenberg/navigation-overlay'\n\t\t\t),\n\t\t[]\n\t);\n\n\tconst createOverlayTemplatePart = useCallback( async () => {\n\t\t// Generate unique name using only overlay area template parts\n\t\t// Filter to only include template parts with titles for uniqueness check\n\t\tconst templatePartsWithTitles = overlayTemplateParts.filter(\n\t\t\t( templatePart ) => templatePart.title?.rendered\n\t\t);\n\t\tconst uniqueTitle = getUniqueTemplatePartTitle(\n\t\t\t__( 'Overlay' ),\n\t\t\ttemplatePartsWithTitles\n\t\t);\n\t\tconst cleanSlug = getCleanTemplatePartSlug( uniqueTitle );\n\n\t\tlet initialContent = '';\n\n\t\tif ( pattern?.content ) {\n\t\t\t// Parse the pattern content into blocks and serialize it\n\t\t\tconst blocks = parse( pattern.content, {\n\t\t\t\t__unstableSkipMigrationLogs: true,\n\t\t\t} );\n\t\t\tinitialContent = serialize( blocks );\n\t\t} else {\n\t\t\t// Fallback to empty paragraph if pattern is not found\n\t\t\tinitialContent = serialize( [ createBlock( 'core/paragraph' ) ] );\n\t\t}\n\n\t\t// Create the template part\n\t\tconst templatePart = await saveEntityRecord(\n\t\t\t'postType',\n\t\t\t'wp_template_part',\n\t\t\t{\n\t\t\t\tslug: cleanSlug,\n\t\t\t\ttitle: uniqueTitle,\n\t\t\t\tcontent: initialContent,\n\t\t\t\tarea: NAVIGATION_OVERLAY_TEMPLATE_PART_AREA,\n\t\t\t},\n\t\t\t{ throwOnError: true }\n\t\t);\n\n\t\treturn templatePart;\n\t}, [ overlayTemplateParts, saveEntityRecord, pattern ] );\n\n\treturn createOverlayTemplatePart;\n}\n"],
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAA4B;AAC5B,kBAAuC;AACvC,uBAAmC;AACnC,0BAA0C;AAC1C,kBAAmB;AACnB,oBAA8C;AAK9C,mBAAqE;AACrE,uBAAsD;AACtD,yBAAuB;AASR,SAAR,6BAA+C,sBAAuB;AAC5E,QAAM,EAAE,iBAAiB,QAAI,yBAAa,iBAAAA,KAAU;AACpD,QAAM,cAAU;AAAA,IACf,CAAE,eACD,2BAAQ,OAAQ,oBAAAC,KAAiB,CAAE,EAAE;AAAA,MACpC;AAAA,IACD;AAAA,IACD,CAAC;AAAA,EACF;AAEA,QAAM,gCAA4B,4BAAa,YAAY;AAG1D,UAAM,0BAA0B,qBAAqB;AAAA,MACpD,CAAEC,kBAAkBA,cAAa,OAAO;AAAA,IACzC;AACA,UAAM,kBAAc;AAAA,UACnB,gBAAI,SAAU;AAAA,MACd;AAAA,IACD;AACA,UAAM,gBAAY,uCAA0B,WAAY;AAExD,QAAI,iBAAiB;AAErB,QAAK,SAAS,SAAU;AAEvB,YAAM,aAAS,qBAAO,QAAQ,SAAS;AAAA,QACtC,6BAA6B;AAAA,MAC9B,CAAE;AACF,2BAAiB,yBAAW,MAAO;AAAA,IACpC,OAAO;AAEN,2BAAiB,yBAAW,KAAE,2BAAa,gBAAiB,CAAE,CAAE;AAAA,IACjE;AAGA,UAAM,eAAe,MAAM;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,QACC,MAAM;AAAA,QACN,OAAO;AAAA,QACP,SAAS;AAAA,QACT,MAAM;AAAA,MACP;AAAA,MACA,EAAE,cAAc,KAAK;AAAA,IACtB;AAEA,WAAO;AAAA,EACR,GAAG,CAAE,sBAAsB,kBAAkB,OAAQ,CAAE;AAEvD,SAAO;AACR;",
"names": ["coreStore", "blockEditorStore", "templatePart"]
}