MOBILE-4081 chore: Fix format tree with unsorted values
parent
852af8bc0e
commit
17add1f0fb
|
@ -37,7 +37,7 @@ import { CoreColors } from '@singletons/colors';
|
||||||
import { CorePromisedValue } from '@classes/promised-value';
|
import { CorePromisedValue } from '@classes/promised-value';
|
||||||
import { CorePlatform } from '@services/platform';
|
import { CorePlatform } from '@services/platform';
|
||||||
|
|
||||||
type TreeNode<T> = T & { children: TreeNode<T>[] };
|
export type TreeNode<T> = T & { children: TreeNode<T>[] };
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "Utils" service with helper functions.
|
* "Utils" service with helper functions.
|
||||||
|
@ -562,18 +562,30 @@ export class CoreUtilsProvider {
|
||||||
const mapDepth = {};
|
const mapDepth = {};
|
||||||
const tree: TreeNode<T>[] = [];
|
const tree: TreeNode<T>[] = [];
|
||||||
|
|
||||||
|
// Create a map first to avoid problems with not sorted.
|
||||||
list.forEach((node: TreeNode<T>, index): void => {
|
list.forEach((node: TreeNode<T>, index): void => {
|
||||||
const id = node[idFieldName];
|
const id = node[idFieldName];
|
||||||
const parent = node[parentFieldName];
|
|
||||||
node.children = [];
|
|
||||||
|
|
||||||
if (!id || !parent) {
|
if (id === undefined) {
|
||||||
|
this.logger.error(`Node with incorrect ${idFieldName}:${id} found on formatTree`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node.children === undefined) {
|
||||||
|
node.children = [];
|
||||||
|
}
|
||||||
|
map[id] = index;
|
||||||
|
});
|
||||||
|
|
||||||
|
list.forEach((node: TreeNode<T>): void => {
|
||||||
|
const id = node[idFieldName];
|
||||||
|
const parent = node[parentFieldName];
|
||||||
|
|
||||||
|
if (id === undefined || parent === undefined) {
|
||||||
this.logger.error(`Node with incorrect ${idFieldName}:${id} or ${parentFieldName}:${parent} found on formatTree`);
|
this.logger.error(`Node with incorrect ${idFieldName}:${id} or ${parentFieldName}:${parent} found on formatTree`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use map to look-up the parents.
|
// Use map to look-up the parents.
|
||||||
map[id] = index;
|
if (parent !== rootParentId) {
|
||||||
if (parent != rootParentId) {
|
|
||||||
const parentNode = list[map[parent]] as TreeNode<T>;
|
const parentNode = list[map[parent]] as TreeNode<T>;
|
||||||
if (parentNode) {
|
if (parentNode) {
|
||||||
if (mapDepth[parent] == maxDepth) {
|
if (mapDepth[parent] == maxDepth) {
|
||||||
|
|
Loading…
Reference in New Issue