Skip to content

Commit e8b8175

Browse files
authored
Merge pull request #858 from EBISPOT/fix-entity-tree-issue
Fix Tree View not opening for certain classes
2 parents 1d504bf + c02b871 commit e8b8175

File tree

4 files changed

+55
-22
lines changed

4 files changed

+55
-22
lines changed

frontend/src/pages/ontologies/entities/EntityTree.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ export default function EntityTree({
354354
showCountsEnabled &&
355355
childNode.numDescendants > 0 && (
356356
<span style={{ color: "gray" }}>
357-
{" (" + childNode.numDescendants.toLocaleString() + ")"}
357+
{" (" + (getNumDescendants(childNode.numHierarchicalDescendants, childNode.numDescendants)).toLocaleString() + ")"}
358358
</span>
359359
)}
360360
{isExpanded &&
@@ -445,6 +445,16 @@ export default function EntityTree({
445445
);
446446
}
447447

448+
function getNumDescendants(hierarchicalDescendents: number, descendents: number): number {
449+
if (descendents === hierarchicalDescendents) {
450+
return descendents;
451+
} else if (descendents > hierarchicalDescendents) {
452+
return descendents;
453+
} else {
454+
return hierarchicalDescendents;
455+
}
456+
}
457+
448458
function TreeLink({
449459
ontology,
450460
entity,

frontend/src/pages/ontologies/entities/createTreeFromEntities.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ export default function createTreeFromEntities(
6161
title: node.getName(),
6262
expandable: node.hasChildren(),
6363
entity: node,
64-
numDescendants:
65-
node.getNumHierarchicalDescendants() || node.getNumDescendants(),
64+
numDescendants: node.getNumDescendants(),
65+
numHierarchicalDescendants: node.getNumHierarchicalDescendants(),
6666
parentRelationToChild,
6767
childRelationToParent
6868
};

frontend/src/pages/ontologies/entities/entityPageSections/IndividualPropertyAssertionsSection.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,17 @@ export default function IndividualPropertyAssertionsSection({
2222
);
2323

2424
let objectProperties = propertyIris.filter(
25-
(k) =>
26-
linkedEntities.get(k) &&
27-
linkedEntities.get(k)!.type.indexOf("objectProperty") !== -1
25+
(k) => {
26+
const linkedEntity = linkedEntities.get(k);
27+
return linkedEntity && Array.isArray(linkedEntity.type) && linkedEntity.type.indexOf("objectProperty") !== -1;
28+
}
2829
);
2930

3031
let dataProperties = propertyIris.filter(
31-
(k) =>
32-
linkedEntities.get(k) &&
33-
linkedEntities.get(k)!.type.indexOf("dataProperty") !== -1
32+
(k) => {
33+
const linkedEntity = linkedEntities.get(k);
34+
return linkedEntity && Array.isArray(linkedEntity.type) && linkedEntity.type.indexOf("dataProperty") !== -1;
35+
}
3436
);
3537

3638
let propertyAssertions: JSX.Element[] = [];

frontend/src/pages/ontologies/ontologiesSlice.ts

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export interface TreeNode {
4343
expandable: boolean;
4444
entity: Entity;
4545
numDescendants: number;
46+
numHierarchicalDescendants: number;
4647
parentRelationToChild: string | null; // if applicable, relation from the parent node to this node (e.g. has_part)
4748
childRelationToParent: string | null; // if applicable, relation from this node to the parent node (e.g. part_of)
4849
}
@@ -420,17 +421,37 @@ export const getNodeChildren = createAsyncThunk(
420421
const doubleEncodedUri = encodeURIComponent(encodeURIComponent(entityIri));
421422
var childrenPage: any;
422423
if (entityTypePlural === "classes") {
423-
childrenPage = await getPaginated<any>(
424-
`api/v2/ontologies/${ontologyId}/classes/${doubleEncodedUri}/hierarchicalChildren?${new URLSearchParams(
425-
{
426-
size: "1000",
427-
lang,
428-
includeObsoleteEntities: showObsoleteEnabled,
429-
}
430-
)}`,
431-
undefined,
432-
apiUrl
433-
);
424+
const hierarchicalChildrenPromise = getPaginated<any>(
425+
`api/v2/ontologies/${ontologyId}/classes/${doubleEncodedUri}/hierarchicalChildren?${new URLSearchParams({
426+
size: "1000",
427+
lang,
428+
includeObsoleteEntities: showObsoleteEnabled,
429+
})}`,
430+
undefined,
431+
apiUrl
432+
);
433+
const directChildrenPromise = getPaginated<any>(
434+
`api/v2/ontologies/${ontologyId}/classes/${doubleEncodedUri}/children?${new URLSearchParams({
435+
size: "1000",
436+
lang,
437+
includeObsoleteEntities: showObsoleteEnabled,
438+
})}`,
439+
undefined,
440+
apiUrl
441+
);
442+
443+
const [hierarchicalChildren, directChildren] = await Promise.all([
444+
hierarchicalChildrenPromise,
445+
directChildrenPromise,
446+
]);
447+
448+
// Merge the elements from both responses
449+
childrenPage = {
450+
elements: [
451+
...hierarchicalChildren.elements,
452+
...directChildren.elements,
453+
],
454+
};
434455
} else if (entityTypePlural === "individuals") {
435456
childrenPage = await getPaginated<any>(
436457
`api/v2/ontologies/${ontologyId}/classes/${doubleEncodedUri}/individuals?${new URLSearchParams(
@@ -469,8 +490,8 @@ export const getNodeChildren = createAsyncThunk(
469490
title: term.getName(),
470491
expandable: term.hasChildren(),
471492
entity: term,
472-
numDescendants:
473-
term.getNumHierarchicalDescendants() || term.getNumDescendants(),
493+
numDescendants: term.getNumDescendants(),
494+
numHierarchicalDescendants: term.getNumHierarchicalDescendants(),
474495
parentRelationToChild:
475496
(parenthoodMetadata &&
476497
parenthoodMetadata["parentRelationToChild"]?.[0]) ||

0 commit comments

Comments
 (0)