-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy pathmetadata-view.component.ts
87 lines (79 loc) · 2.29 KB
/
metadata-view.component.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import {
Component,
OnInit,
Input,
OnChanges,
SimpleChange,
} from "@angular/core";
import { DateTime } from "luxon";
import {
ScientificMetadataTableData,
ScientificMetadata,
} from "../scientific-metadata.module";
import { UnitsService } from "shared/services/units.service";
@Component({
selector: "metadata-view",
templateUrl: "./metadata-view.component.html",
styleUrls: ["./metadata-view.component.scss"],
})
export class MetadataViewComponent implements OnInit, OnChanges {
@Input() metadata: Record<string, unknown> = {};
tableData: ScientificMetadataTableData[] = [];
columnsToDisplay: string[] = ["name", "value", "unit"];
constructor(private unitsService: UnitsService) {}
createMetadataArray(
metadata: Record<string, any>,
): ScientificMetadataTableData[] {
const metadataArray: ScientificMetadataTableData[] = [];
Object.keys(metadata).forEach((key) => {
let metadataObject: ScientificMetadataTableData;
if (
typeof metadata[key] === "object" &&
"value" in (metadata[key] as ScientificMetadata)
) {
metadataObject = {
name: key,
value: metadata[key]["value"],
unit: metadata[key]["unit"],
};
const validUnit = this.unitsService.unitValidation(
metadata[key]["unit"],
);
metadataObject["validUnit"] = validUnit;
} else {
metadataObject = {
name: key,
value: JSON.stringify(metadata[key]),
unit: "",
};
}
metadataArray.push(metadataObject);
});
return metadataArray;
}
isDate(scientificMetadata: ScientificMetadataTableData): boolean {
if (scientificMetadata.unit.length > 0) {
return false;
}
if (typeof scientificMetadata.value === "number") {
return false;
}
if (!DateTime.fromISO(scientificMetadata.value).isValid) {
return false;
}
return true;
}
ngOnInit() {
if (this.metadata) {
this.tableData = this.createMetadataArray(this.metadata);
}
}
ngOnChanges(changes: { [propKey: string]: SimpleChange }) {
for (const propName in changes) {
if (propName === "metadata") {
this.metadata = changes[propName].currentValue;
this.tableData = this.createMetadataArray(this.metadata);
}
}
}
}