UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 3.84 kB
{ "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": ";AAGA,SAAS,mBAAmB;AAC5B,SAAS,aAAa,iBAAiB;AACvC,SAAS,SAAS,iBAAiB;AACnC,SAAS,SAAS,wBAAwB;AAC1C,SAAS,UAAU;AACnB,SAAS,OAAO,WAAW,mBAAmB;AAK9C,SAAS,4BAA4B,gCAAgC;AACrE,SAAS,6CAA6C;AACtD,SAAS,cAAc;AASR,SAAR,6BAA+C,sBAAuB;AAC5E,QAAM,EAAE,iBAAiB,IAAI,YAAa,SAAU;AACpD,QAAM,UAAU;AAAA,IACf,CAAE,WACD,OAAQ,OAAQ,gBAAiB,CAAE,EAAE;AAAA,MACpC;AAAA,IACD;AAAA,IACD,CAAC;AAAA,EACF;AAEA,QAAM,4BAA4B,YAAa,YAAY;AAG1D,UAAM,0BAA0B,qBAAqB;AAAA,MACpD,CAAEA,kBAAkBA,cAAa,OAAO;AAAA,IACzC;AACA,UAAM,cAAc;AAAA,MACnB,GAAI,SAAU;AAAA,MACd;AAAA,IACD;AACA,UAAM,YAAY,yBAA0B,WAAY;AAExD,QAAI,iBAAiB;AAErB,QAAK,SAAS,SAAU;AAEvB,YAAM,SAAS,MAAO,QAAQ,SAAS;AAAA,QACtC,6BAA6B;AAAA,MAC9B,CAAE;AACF,uBAAiB,UAAW,MAAO;AAAA,IACpC,OAAO;AAEN,uBAAiB,UAAW,CAAE,YAAa,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": ["templatePart"] }