UNPKG

@wordpress/block-library

Version:
88 lines (87 loc) 2.95 kB
/** * WordPress dependencies */ import { store as coreStore } from '@wordpress/core-data'; import { useSelect } from '@wordpress/data'; export function useArchiveLabel() { const templateSlug = useSelect(select => { // @wordpress/block-library should not depend on @wordpress/editor. // Blocks can be loaded into a *non-post* block editor, so to avoid // declaring @wordpress/editor as a dependency, we must access its // store by string. // The solution here is to split WP specific blocks from generic blocks. // eslint-disable-next-line @wordpress/data-no-store-string-literals const { getCurrentPostId, getCurrentPostType, getCurrentTemplateId } = select('core/editor'); const currentPostType = getCurrentPostType(); const templateId = getCurrentTemplateId() || (currentPostType === 'wp_template' ? getCurrentPostId() : null); return templateId ? select(coreStore).getEditedEntityRecord('postType', 'wp_template', templateId)?.slug : null; }, []); const taxonomyMatches = templateSlug?.match(/^(category|tag|taxonomy-([^-]+))$|^(((category|tag)|taxonomy-([^-]+))-(.+))$/); let taxonomy; let term; let isAuthor = false; let authorSlug; if (taxonomyMatches) { // If is for a all taxonomies of a type if (taxonomyMatches[1]) { taxonomy = taxonomyMatches[2] ? taxonomyMatches[2] : taxonomyMatches[1]; } // If is for a all taxonomies of a type else if (taxonomyMatches[3]) { taxonomy = taxonomyMatches[6] ? taxonomyMatches[6] : taxonomyMatches[4]; term = taxonomyMatches[7]; } taxonomy = taxonomy === 'tag' ? 'post_tag' : taxonomy; //getTaxonomy( 'category' ); //wp.data.select('core').getEntityRecords( 'taxonomy', 'category', {slug: 'newcat'} ); } else { const authorMatches = templateSlug?.match(/^(author)$|^author-(.+)$/); if (authorMatches) { isAuthor = true; if (authorMatches[2]) { authorSlug = authorMatches[2]; } } } return useSelect(select => { const { getEntityRecords, getTaxonomy, getAuthors } = select(coreStore); let archiveTypeLabel; let archiveNameLabel; if (taxonomy) { archiveTypeLabel = getTaxonomy(taxonomy)?.labels?.singular_name; } if (term) { const records = getEntityRecords('taxonomy', taxonomy, { slug: term, per_page: 1 }); if (records && records[0]) { archiveNameLabel = records[0].name; } } if (isAuthor) { archiveTypeLabel = 'Author'; if (authorSlug) { const authorRecords = getAuthors({ slug: authorSlug }); if (authorRecords && authorRecords[0]) { archiveNameLabel = authorRecords[0].name; } } } return { archiveTypeLabel, archiveNameLabel }; }, [authorSlug, isAuthor, taxonomy, term]); } //# sourceMappingURL=use-archive-label.js.map