UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 4.68 kB
{ "version": 3, "sources": ["../../src/term-description/use-term-description.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { store as coreStore, useEntityProp } from '@wordpress/core-data';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Hook to fetch term description based on context or fallback to template parsing.\n *\n * This hook prioritizes context-provided termId and taxonomy, but falls back to\n * template-based detection when no context is available.\n *\n * @param {string|number} termId The term ID from context\n * @param {string} taxonomy The taxonomy name from context\n */\nexport function useTermDescription( termId, taxonomy ) {\n\tconst [ description, setDescription, fullDescription ] = useEntityProp(\n\t\t'taxonomy',\n\t\ttaxonomy,\n\t\t'description',\n\t\ttermId\n\t);\n\n\t// Fallback approach: Parse template slug when no context is available.\n\tconst templateBasedData = useTemplateBasedTermData();\n\n\tconst hasContext = Boolean( termId && taxonomy );\n\n\treturn {\n\t\thasContext,\n\t\tsetDescription,\n\t\ttermDescription: hasContext\n\t\t\t? fullDescription?.rendered || description || ''\n\t\t\t: templateBasedData,\n\t};\n}\n\n/**\n * Fallback hook to fetch term data from template context (backward compatibility).\n * This maintains the same logic as the original implementation for cases where\n * no termId/taxonomy context is provided.\n */\nfunction useTemplateBasedTermData() {\n\tconst templateSlug = useSelect( ( select ) => {\n\t\t// Access core/editor by string to avoid @wordpress/editor dependency.\n\t\t// eslint-disable-next-line @wordpress/data-no-store-string-literals\n\t\tconst { getCurrentPostId, getCurrentPostType, getCurrentTemplateId } =\n\t\t\tselect( 'core/editor' );\n\t\tconst currentPostType = getCurrentPostType();\n\t\tconst templateId =\n\t\t\tgetCurrentTemplateId() ||\n\t\t\t( currentPostType === 'wp_template' ? getCurrentPostId() : null );\n\n\t\treturn templateId\n\t\t\t? select( coreStore ).getEditedEntityRecord(\n\t\t\t\t\t'postType',\n\t\t\t\t\t'wp_template',\n\t\t\t\t\ttemplateId\n\t\t\t )?.slug\n\t\t\t: null;\n\t}, [] );\n\n\tconst taxonomyMatches = templateSlug?.match(\n\t\t/^(category|tag|taxonomy-([^-]+))$|^(((category|tag)|taxonomy-([^-]+))-(.+))$/\n\t);\n\n\tlet taxonomy;\n\tlet termSlug;\n\n\tif ( taxonomyMatches ) {\n\t\t// If it's for all taxonomies of a type (e.g., category, tag).\n\t\tif ( taxonomyMatches[ 1 ] ) {\n\t\t\ttaxonomy = taxonomyMatches[ 2 ]\n\t\t\t\t? taxonomyMatches[ 2 ]\n\t\t\t\t: taxonomyMatches[ 1 ];\n\t\t}\n\t\t// If it's for a specific term (e.g., category-news, tag-featured).\n\t\telse if ( taxonomyMatches[ 3 ] ) {\n\t\t\ttaxonomy = taxonomyMatches[ 6 ]\n\t\t\t\t? taxonomyMatches[ 6 ]\n\t\t\t\t: taxonomyMatches[ 4 ];\n\t\t\ttermSlug = taxonomyMatches[ 7 ];\n\t\t}\n\n\t\ttaxonomy = taxonomy === 'tag' ? 'post_tag' : taxonomy;\n\t}\n\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! taxonomy || ! termSlug ) {\n\t\t\t\treturn '';\n\t\t\t}\n\n\t\t\tconst { getEntityRecords } = select( coreStore );\n\n\t\t\tconst termRecords = getEntityRecords( 'taxonomy', taxonomy, {\n\t\t\t\tslug: termSlug,\n\t\t\t\tper_page: 1,\n\t\t\t} );\n\n\t\t\tif ( termRecords && termRecords[ 0 ] ) {\n\t\t\t\treturn termRecords[ 0 ].description || '';\n\t\t\t}\n\n\t\t\treturn '';\n\t\t},\n\t\t[ taxonomy, termSlug ]\n\t);\n}\n"], "mappings": ";AAGA,SAAS,SAAS,WAAW,qBAAqB;AAClD,SAAS,iBAAiB;AAWnB,SAAS,mBAAoB,QAAQ,UAAW;AACtD,QAAM,CAAE,aAAa,gBAAgB,eAAgB,IAAI;AAAA,IACxD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAGA,QAAM,oBAAoB,yBAAyB;AAEnD,QAAM,aAAa,QAAS,UAAU,QAAS;AAE/C,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,iBAAiB,aACd,iBAAiB,YAAY,eAAe,KAC5C;AAAA,EACJ;AACD;AAOA,SAAS,2BAA2B;AACnC,QAAM,eAAe,UAAW,CAAE,WAAY;AAG7C,UAAM,EAAE,kBAAkB,oBAAoB,qBAAqB,IAClE,OAAQ,aAAc;AACvB,UAAM,kBAAkB,mBAAmB;AAC3C,UAAM,aACL,qBAAqB,MACnB,oBAAoB,gBAAgB,iBAAiB,IAAI;AAE5D,WAAO,aACJ,OAAQ,SAAU,EAAE;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACA,GAAG,OACH;AAAA,EACJ,GAAG,CAAC,CAAE;AAEN,QAAM,kBAAkB,cAAc;AAAA,IACrC;AAAA,EACD;AAEA,MAAI;AACJ,MAAI;AAEJ,MAAK,iBAAkB;AAEtB,QAAK,gBAAiB,CAAE,GAAI;AAC3B,iBAAW,gBAAiB,CAAE,IAC3B,gBAAiB,CAAE,IACnB,gBAAiB,CAAE;AAAA,IACvB,WAEU,gBAAiB,CAAE,GAAI;AAChC,iBAAW,gBAAiB,CAAE,IAC3B,gBAAiB,CAAE,IACnB,gBAAiB,CAAE;AACtB,iBAAW,gBAAiB,CAAE;AAAA,IAC/B;AAEA,eAAW,aAAa,QAAQ,aAAa;AAAA,EAC9C;AAEA,SAAO;AAAA,IACN,CAAE,WAAY;AACb,UAAK,CAAE,YAAY,CAAE,UAAW;AAC/B,eAAO;AAAA,MACR;AAEA,YAAM,EAAE,iBAAiB,IAAI,OAAQ,SAAU;AAE/C,YAAM,cAAc,iBAAkB,YAAY,UAAU;AAAA,QAC3D,MAAM;AAAA,QACN,UAAU;AAAA,MACX,CAAE;AAEF,UAAK,eAAe,YAAa,CAAE,GAAI;AACtC,eAAO,YAAa,CAAE,EAAE,eAAe;AAAA,MACxC;AAEA,aAAO;AAAA,IACR;AAAA,IACA,CAAE,UAAU,QAAS;AAAA,EACtB;AACD;", "names": [] }