@wordpress/block-library
Version:
Block library for the WordPress editor.
88 lines (87 loc) • 2.95 kB
JavaScript
/**
* 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