traverseTree = (
suttaTree,
uidNameTree = [],
nameTree = [],
childRangeTree = [],
nameTreeEn = [],
uidNameTreeEn = [],
leaf = true,
rootId = "sutta"
) => {
const tree = [];
for (var [key, value, path] of traverse(suttaTree)) {
if (Array.isArray(value)) {
let name = uidNameTree.find((d) => d.uid == key)?.name;
if (name == null) name = nameTree.find((d) => d.id == key)?.name;
let nameEn = uidNameTreeEn.find((d) => d.uid == key)?.name;
if (nameEn == null) nameEn = nameTreeEn.find((d) => d.id == key)?.name;
const acro = uidNameTree.find((d) => d.uid == key)?.acro;
const childRange = childRangeTree[key];
const par = path.length > 2 ? path[path.length - 3] : rootId;
const result = {
id: key,
parentId: par,
name: name,
nameEn: nameEn,
acro: childRange == null ? (acro == null ? "" : acro) : childRange
};
tree.push(result);
}
if (typeof value === "string" && leaf == true) {
const name = nameTree.find((d) => d.id == value)?.name;
const nameEn = nameTreeEn.find((d) => d.id == value)?.name;
const childRange = childRangeTree[value];
const letters = value.split(/\d/)[0];
const numbers = value.slice(value.split(/\d/)[0].length);
const acroLetters = uidNameTree.find((d) => d.uid == letters)?.acro;
const acro = acroLetters + " " + numbers;
const par = path[path.length - 2];
const result = {
id: value,
parentId: par,
name: name,
nameEn: nameEn,
acro: childRange == null ? (acro == null ? "" : acro) : childRange
};
tree.push(result);
}
}
return tree;
}