v1.18.x
Barış Soner Uşaklı 6 years ago
parent dc1df3d9b5
commit 59eeff8f0f

@ -302,18 +302,22 @@ Categories.flattenCategories = function (allCategories, categoryData) {
};
/**
* Recursively build tree
* build tree from flat list of categories
*
* @param categories {array} flat list of categories
* @param parentCid {number} start from 0 to build full tree
*/
Categories.getTree = function (categories, parentCid) {
parentCid = parentCid || 0;
const cids = categories.map(category => category.cid);
const cidToCategory = _.zipObject(cids, _.cloneDeep(categories));
const tree = buildRecursive(categories, parentCid || 0);
const cidToCategory = {};
const parents = {};
cids.forEach((cid, index) => {
cidToCategory[cid] = categories[index];
parents[cid] = _.clone(categories[index]);
});
function buildRecursive(categories, parentCid) {
var tree = [];
const tree = [];
categories.forEach(function (category) {
if (category) {
@ -324,17 +328,26 @@ Categories.getTree = function (categories, parentCid) {
if (!category.hasOwnProperty('parentCid') || category.parentCid === null) {
category.parentCid = 0;
}
if (category.parentCid === parentCid) {
tree.push(category);
category.parent = cidToCategory[parentCid];
category.children = buildRecursive(categories, category.cid);
category.parent = parents[parentCid];
} else {
const parent = cidToCategory[category.parentCid];
if (parent && parent.cid !== category.cid) {
category.parent = parents[category.parentCid];
parent.children = parent.children || [];
parent.children.push(category);
}
}
}
});
function sortTree(tree) {
tree.sort((a, b) => a.order - b.order);
return tree;
if (tree.children) {
sortTree(tree.children);
}
}
sortTree(tree);
categories.forEach(c => calculateTopicPostCount(c));
return tree;

Loading…
Cancel
Save