@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
8 lines (7 loc) • 8.15 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/bindings/term-data.js"],
"sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { store as coreDataStore } from '@wordpress/core-data';\nimport { store as blockEditorStore } from '@wordpress/block-editor';\n\n// Navigation block types that use special handling for backwards compatibility\nconst NAVIGATION_BLOCK_TYPES = [\n\t'core/navigation-link',\n\t'core/navigation-submenu',\n];\n\nexport const termDataFields = [\n\t{\n\t\tlabel: __( 'Term ID' ),\n\t\targs: { field: 'id' },\n\t\ttype: 'string',\n\t},\n\t{\n\t\tlabel: __( 'Name' ),\n\t\targs: { field: 'name' },\n\t\ttype: 'string',\n\t},\n\t{\n\t\tlabel: __( 'Slug' ),\n\t\targs: { field: 'slug' },\n\t\ttype: 'string',\n\t},\n\t{\n\t\tlabel: __( 'Link' ),\n\t\targs: { field: 'link' },\n\t\ttype: 'string',\n\t},\n\t{\n\t\tlabel: __( 'Description' ),\n\t\targs: { field: 'description' },\n\t\ttype: 'string',\n\t},\n\t{\n\t\tlabel: __( 'Parent ID' ),\n\t\targs: { field: 'parent' },\n\t\ttype: 'string',\n\t},\n\t{\n\t\tlabel: __( 'Count' ),\n\t\targs: { field: 'count' },\n\t\ttype: 'string',\n\t},\n];\n\n/**\n * @type {WPBlockBindingsSource}\n */\nexport default {\n\tname: 'core/term-data',\n\tusesContext: [ 'taxonomy', 'termId', 'termData' ],\n\tgetValues( { select, context, bindings, clientId } ) {\n\t\tconst { getEntityRecord } = select( coreDataStore );\n\n\t\t/*\n\t\t * BACKWARDS COMPATIBILITY: Hardcoded exception for navigation blocks.\n\t\t * Required for WordPress 6.9+ navigation blocks. DO NOT REMOVE.\n\t\t */\n\t\tconst { getBlockAttributes, getBlockName } = select( blockEditorStore );\n\t\tconst blockName = getBlockName( clientId );\n\t\tconst isNavigationBlock = NAVIGATION_BLOCK_TYPES.includes( blockName );\n\n\t\tlet termDataValues;\n\n\t\tif ( isNavigationBlock ) {\n\t\t\t// Navigation blocks: read from block attributes\n\t\t\tconst blockAttributes = getBlockAttributes( clientId );\n\t\t\tconst typeFromAttributes = blockAttributes?.type;\n\t\t\tconst taxonomy =\n\t\t\t\ttypeFromAttributes === 'tag' ? 'post_tag' : typeFromAttributes;\n\t\t\ttermDataValues = getEntityRecord(\n\t\t\t\t'taxonomy',\n\t\t\t\ttaxonomy,\n\t\t\t\tblockAttributes?.id\n\t\t\t);\n\t\t} else if ( context.termId && context.taxonomy ) {\n\t\t\t// All other blocks: use context\n\t\t\ttermDataValues = getEntityRecord(\n\t\t\t\t'taxonomy',\n\t\t\t\tcontext.taxonomy,\n\t\t\t\tcontext.termId\n\t\t\t);\n\t\t}\n\n\t\t// Fall back to context termData if available.\n\t\tif ( ! termDataValues && context?.termData && ! isNavigationBlock ) {\n\t\t\ttermDataValues = context.termData;\n\t\t}\n\n\t\tconst newValues = {};\n\t\tfor ( const [ attributeName, binding ] of Object.entries( bindings ) ) {\n\t\t\tconst termDataField = termDataFields.find(\n\t\t\t\t( field ) => field.args.field === binding.args.field\n\t\t\t);\n\n\t\t\tif ( ! termDataField ) {\n\t\t\t\t// If the field is unknown, return the field name.\n\t\t\t\tnewValues[ attributeName ] = binding.args.field;\n\t\t\t} else if (\n\t\t\t\t! termDataValues ||\n\t\t\t\ttermDataValues[ binding.args.field ] === undefined\n\t\t\t) {\n\t\t\t\t// If the term data does not exist, return the field label.\n\t\t\t\tnewValues[ attributeName ] = termDataField.label;\n\t\t\t} else if ( binding.args.field === 'count' ) {\n\t\t\t\t// Return the term count value in parentheses.\n\t\t\t\tnewValues[ attributeName ] =\n\t\t\t\t\t'(' + termDataValues[ binding.args.field ] + ')';\n\t\t\t} else {\n\t\t\t\t// If the term data exists, return the term data value.\n\t\t\t\tnewValues[ attributeName ] =\n\t\t\t\t\ttermDataValues[ binding.args.field ];\n\t\t\t}\n\t\t}\n\t\treturn newValues;\n\t},\n\t// eslint-disable-next-line no-unused-vars\n\tsetValues( { dispatch, context, bindings } ) {\n\t\t// Terms are typically not editable through block bindings in most contexts.\n\t\treturn false;\n\t},\n\tcanUserEditValue( { select, context } ) {\n\t\tconst { getBlockName, getSelectedBlockClientId } =\n\t\t\tselect( blockEditorStore );\n\n\t\tconst clientId = getSelectedBlockClientId();\n\t\tconst blockName = getBlockName( clientId );\n\n\t\t// Navigaton block types are read-only.\n\t\t// See https://github.com/WordPress/gutenberg/pull/72165.\n\t\tif ( NAVIGATION_BLOCK_TYPES.includes( blockName ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Terms are typically read-only when displayed.\n\t\tif ( context?.termQuery ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Lock editing when `taxonomy` or `termId` is not defined.\n\t\tif ( ! context?.taxonomy || ! context?.termId ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn false;\n\t},\n\tgetFieldsList( { context, select } ) {\n\t\tconst { getBlockAttributes, getBlockName, getSelectedBlockClientId } =\n\t\t\tselect( blockEditorStore );\n\t\tconst clientId = getSelectedBlockClientId();\n\t\tconst blockName = getBlockName( clientId );\n\n\t\tif ( NAVIGATION_BLOCK_TYPES.includes( blockName ) ) {\n\t\t\t// Navigation blocks: read from block attributes\n\t\t\tconst blockAttributes = getBlockAttributes( clientId );\n\t\t\tif (\n\t\t\t\t! blockAttributes ||\n\t\t\t\t! blockAttributes.id ||\n\t\t\t\t! blockAttributes.type\n\t\t\t) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\treturn termDataFields;\n\t\t}\n\n\t\tif ( ! context ) {\n\t\t\treturn [];\n\t\t}\n\n\t\tif ( ( context.taxonomy && context.termId ) || context.termData ) {\n\t\t\treturn termDataFields;\n\t\t}\n\n\t\treturn [];\n\t},\n};\n"],
"mappings": "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",
"names": []
}