UNPKG

@wordpress/block-library

Version:
8 lines (7 loc) 4.48 kB
{ "version": 3, "sources": ["../../src/term-name/use-term-name.js"], "sourcesContent": ["/**\n * WordPress dependencies\n */\nimport { store as coreStore } from '@wordpress/core-data';\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Hook to fetch term name 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 useTermName( termId, taxonomy ) {\n\t// Get term from context if available.\n\tconst contextBasedTerm = useSelect(\n\t\t( select ) => {\n\t\t\tif ( ! termId || ! taxonomy ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn select( coreStore ).getEntityRecord(\n\t\t\t\t'taxonomy',\n\t\t\t\ttaxonomy,\n\t\t\t\ttermId\n\t\t\t);\n\t\t},\n\t\t[ termId, taxonomy ]\n\t);\n\n\t// Fallback approach: Parse template slug when no context is available.\n\tconst templateBasedTerm = useTemplateBasedTermData();\n\tconst hasContext = Boolean( termId && taxonomy );\n\n\treturn {\n\t\thasContext,\n\t\tterm: hasContext ? contextBasedTerm : templateBasedTerm,\n\t};\n}\n\n/**\n * Fallback hook to fetch term data from template context.\n * Parses the template slug to determine if we're on a specific term archive.\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 a specific term (e.g., category-news, tag-featured).\n\t\tif ( 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 null;\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 ];\n\t\t\t}\n\n\t\t\treturn null;\n\t\t},\n\t\t[ taxonomy, termSlug ]\n\t);\n}\n"], "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAAmC;AACnC,kBAA0B;AAWnB,SAAS,YAAa,QAAQ,UAAW;AAE/C,QAAM,uBAAmB;AAAA,IACxB,CAAE,WAAY;AACb,UAAK,CAAE,UAAU,CAAE,UAAW;AAC7B,eAAO;AAAA,MACR;AACA,aAAO,OAAQ,iBAAAA,KAAU,EAAE;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AAAA,IACA,CAAE,QAAQ,QAAS;AAAA,EACpB;AAGA,QAAM,oBAAoB,yBAAyB;AACnD,QAAM,aAAa,QAAS,UAAU,QAAS;AAE/C,SAAO;AAAA,IACN;AAAA,IACA,MAAM,aAAa,mBAAmB;AAAA,EACvC;AACD;AAMA,SAAS,2BAA2B;AACnC,QAAM,mBAAe,uBAAW,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,iBAAAA,KAAU,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;AACtB,iBAAW,gBAAiB,CAAE;AAAA,IAC/B;AAEA,eAAW,aAAa,QAAQ,aAAa;AAAA,EAC9C;AAEA,aAAO;AAAA,IACN,CAAE,WAAY;AACb,UAAK,CAAE,YAAY,CAAE,UAAW;AAC/B,eAAO;AAAA,MACR;AAEA,YAAM,EAAE,iBAAiB,IAAI,OAAQ,iBAAAA,KAAU;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;AAAA,MACvB;AAEA,aAAO;AAAA,IACR;AAAA,IACA,CAAE,UAAU,QAAS;AAAA,EACtB;AACD;", "names": ["coreStore"] }