UNPKG

@wordpress/editor

Version:
88 lines (83 loc) 2.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildTermsTree = buildTermsTree; exports.unescapeTerms = exports.unescapeTerm = exports.unescapeString = void 0; var _htmlEntities = require("@wordpress/html-entities"); /** * WordPress dependencies */ /** * Returns terms in a tree form. * * @param {Array} flatTerms Array of terms in flat format. * * @return {Array} Array of terms in tree format. */ function buildTermsTree(flatTerms) { const flatTermsWithParentAndChildren = flatTerms.map(term => { return { children: [], parent: null, ...term }; }); // All terms should have a `parent` because we're about to index them by it. if (flatTermsWithParentAndChildren.some(({ parent }) => parent === null)) { return flatTermsWithParentAndChildren; } const termsByParent = flatTermsWithParentAndChildren.reduce((acc, term) => { const { parent } = term; if (!acc[parent]) { acc[parent] = []; } acc[parent].push(term); return acc; }, {}); const fillWithChildren = terms => { return terms.map(term => { const children = termsByParent[term.id]; return { ...term, children: children && children.length ? fillWithChildren(children) : [] }; }); }; return fillWithChildren(termsByParent['0'] || []); } const unescapeString = arg => { return (0, _htmlEntities.decodeEntities)(arg); }; /** * Returns a term object with name unescaped. * * @param {Object} term The term object to unescape. * * @return {Object} Term object with name property unescaped. */ exports.unescapeString = unescapeString; const unescapeTerm = term => { return { ...term, name: unescapeString(term.name) }; }; /** * Returns an array of term objects with names unescaped. * The unescape of each term is performed using the unescapeTerm function. * * @param {Object[]} terms Array of term objects to unescape. * * @return {Object[]} Array of term objects unescaped. */ exports.unescapeTerm = unescapeTerm; const unescapeTerms = terms => { return (terms !== null && terms !== void 0 ? terms : []).map(unescapeTerm); }; exports.unescapeTerms = unescapeTerms; //# sourceMappingURL=terms.js.map