@wordpress/block-library
Version:
Block library for the WordPress editor.
76 lines (75 loc) • 2.38 kB
JavaScript
import { store as coreStore } from "@wordpress/core-data";
import { useSelect } from "@wordpress/data";
function useArchiveLabel() {
const templateSlug = useSelect((select) => {
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 (taxonomyMatches[1]) {
taxonomy = taxonomyMatches[2] ? taxonomyMatches[2] : taxonomyMatches[1];
} else if (taxonomyMatches[3]) {
taxonomy = taxonomyMatches[6] ? taxonomyMatches[6] : taxonomyMatches[4];
term = taxonomyMatches[7];
}
taxonomy = taxonomy === "tag" ? "post_tag" : taxonomy;
} 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]
);
}
export {
useArchiveLabel
};
//# sourceMappingURL=use-archive-label.js.map