@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
54 lines (50 loc) • 1.64 kB
JavaScript
/**
* External dependencies
*/
import { paramCase as kebabCase } from 'change-case';
/**
* WordPress dependencies
*/
import { useSelect } from '@wordpress/data';
import { store as coreStore } from '@wordpress/core-data';
/**
* Internal dependencies
*/
import { TEMPLATE_PART_POST_TYPE } from '../../store/constants';
export const useExistingTemplateParts = () => {
return useSelect(select => select(coreStore).getEntityRecords('postType', TEMPLATE_PART_POST_TYPE, {
per_page: -1
}), []);
};
/**
* Return a unique template part title based on
* the given title and existing template parts.
*
* @param {string} title The original template part title.
* @param {Object} templateParts The array of template part entities.
* @return {string} A unique template part title.
*/
export const getUniqueTemplatePartTitle = (title, templateParts) => {
const lowercaseTitle = title.toLowerCase();
const existingTitles = templateParts.map(templatePart => templatePart.title.rendered.toLowerCase());
if (!existingTitles.includes(lowercaseTitle)) {
return title;
}
let suffix = 2;
while (existingTitles.includes(`${lowercaseTitle} ${suffix}`)) {
suffix++;
}
return `${title} ${suffix}`;
};
/**
* Get a valid slug for a template part.
* Currently template parts only allow latin chars.
* The fallback slug will receive suffix by default.
*
* @param {string} title The template part title.
* @return {string} A valid template part slug.
*/
export const getCleanTemplatePartSlug = title => {
return kebabCase(title).replace(/[^\w-]+/g, '') || 'wp-custom-part';
};
//# sourceMappingURL=utils.js.map