From 19113714f13d8abe25934dc745e8c7eb8a2137f7 Mon Sep 17 00:00:00 2001 From: Baptiste Toulemonde <toulemonde@cines.fr> Date: Wed, 25 Aug 2021 16:36:55 +0200 Subject: [PATCH 1/5] feature: add field --- src/app/mapping/mapping.component.html | 21 ++++++++++++------ src/app/mapping/mapping.component.scss | 13 ++++------- src/app/mapping/mapping.component.ts | 30 ++++++++++++++------------ src/styles.scss | 24 ++++++++++----------- 4 files changed, 46 insertions(+), 42 deletions(-) diff --git a/src/app/mapping/mapping.component.html b/src/app/mapping/mapping.component.html index 2a4359bbc..8138d2998 100644 --- a/src/app/mapping/mapping.component.html +++ b/src/app/mapping/mapping.component.html @@ -13,11 +13,11 @@ <input type="file" id="file" (change)="importJson($event)" accept=".json" /> </div> - <ng-container *ngFor="let dataset of datasetModel; let index = index;trackBy:trackByIndex;"> + <ng-container *ngFor="let dataset of obsDatasetModel | async; let index = index ;trackBy:trackByIndex ;"> <nb-form-field> <div class="row"> - <div class="col-4"> + <div class="col-3"> <nb-form-field> <input @@ -41,7 +41,7 @@ *ngIf="dataset.identifier === 'dct:hasVersion' || dataset.identifier === 'dct:title' " required #autoInput #{{dataset.identifier}}="ngModel" fullWidth id="{{dataset.identifier}}" name="{{dataset.identifier}}" nbInput - (ngModelChange)="onModelChange($event)" placeholder="Enter value" [nbAutocomplete]="auto" + (ngModelChange)="onModelChange($event)" [nbAutocomplete]="auto" [(ngModel)]="selectedPaths[index]" autocomplete="false" (focus)="reset()" /> <div *ngIf="dataset.identifier.invalid && (dataset.identifier.dirty || dataset.identifier.touched)"> @@ -50,7 +50,7 @@ *ngIf=" dataset.identifier !== 'dct:hasVersion' && dataset.identifier !== 'dct:title'" #autoInput #{{dataset.identifier}}="ngModel" fullWidth id="{{dataset.identifier}}" name="{{dataset.identifier}}" nbInput - (ngModelChange)="onModelChange($event)" placeholder="Enter value" [nbAutocomplete]="auto" + (ngModelChange)="onModelChange($event)" [nbAutocomplete]="auto" [(ngModel)]="selectedPaths[index]" autocomplete="false" (focus)="reset()" /> @@ -63,7 +63,16 @@ </nb-autocomplete> </nb-form-field> </div> - + <div class="col-1"> + <button nbButton ghost *ngIf="dataset !== datasetModel[index-1]"> + <nb-icon icon="plus-square-outline" status="primary" (click)="addField(index)"> + </nb-icon> + </button> + <button nbButton ghost *ngIf="dataset === datasetModel[index-1]"> + <nb-icon icon="trash-2-outline" status="danger" (click)="deleteField(index)"> + </nb-icon> + </button> + </div> </div> </nb-form-field> </ng-container> @@ -89,7 +98,7 @@ <nb-list-item *ngFor="let data of mappedMetadatas[index] | keyvalue; trackBy:trackByIndex; "> <div class="row"> - <div class="col-5"><label for="{{data.key}}">{{data.key}}</label></div> + <div class="col-5"><label for="{{data.key}}">{{datasetModel[data.key].identifier}}</label></div> <div class="col-5"> <input nbInput [ngModel]="data.value" (ngModelChange)="mappedMetadatas[index].set(data.key, $event)" /> </div> <div class="col-2"><button nbButton ghost> diff --git a/src/app/mapping/mapping.component.scss b/src/app/mapping/mapping.component.scss index 1227abfb2..61337c0e9 100644 --- a/src/app/mapping/mapping.component.scss +++ b/src/app/mapping/mapping.component.scss @@ -4,13 +4,8 @@ flex: 1 0 calc(100%); margin: 0 -0.5rem; } - .row { - display: flex; - flex: 1 0 calc(100%); - margin: 5px -0.5rem; - - } + .card-col { width: 100%; flex: calc(50% ); @@ -22,10 +17,10 @@ margin: 10px 10px; } - - input-basic-disabled-text-color { - color: black; + input:disabled{ + color: black } + .button-center{ vertical-align: middle; diff --git a/src/app/mapping/mapping.component.ts b/src/app/mapping/mapping.component.ts index 0cc4c1ca3..862ab4ce0 100644 --- a/src/app/mapping/mapping.component.ts +++ b/src/app/mapping/mapping.component.ts @@ -25,11 +25,11 @@ export class MappingComponent implements OnInit { itemsdataset: Object[] = [] datasetModel: Dataset[]; + obsDatasetModel: Observable<Dataset[]>; filteredOptions: Observable<string[]>; keys: string[] = []; selectedPaths: string[]; - mappedMetadatas: Map<string, string>[] = []; - obsMappedMetadatas: Observable<Map<string, string>[]>; + mappedMetadatas: Map<number, string>[] = []; DatasetToPublish: Map<string, string>[]; index: number = 0 first: boolean = true; @@ -48,13 +48,13 @@ export class MappingComponent implements OnInit { this.dataSetService.getLocally('./assets/dataset.json').subscribe( dataset => { this.datasetModel = dataset; - this.selectedPaths = new Array(dataset.length); + this.obsDatasetModel = of(this.datasetModel) + this.selectedPaths = []; }, error => { console.error(error); }, ); - this.obsMappedMetadatas = of(this.mappedMetadatas) this.populatecatalogue(); console.log("TYPE: " + this.type) } @@ -71,12 +71,13 @@ export class MappingComponent implements OnInit { this.filteredOptions = of(this.keys); } - createDataset(item: Object): Map<string, string> { - let mappedMetadata: Map<string, string> = new Map() + createDataset(item: Object): Map<number, string> { + console.log("rerereer" + this.selectedPaths) + let mappedMetadata: Map<number, string> = new Map() for (let i = 0; i < this.selectedPaths.length; i++) { if (this.selectedPaths[i]) { let tab = this.selectedPaths[i].split(' : '); - this.type == "Dataverse" ? mappedMetadata.set(this.datasetModel[i].identifier, this.getValueDataverse(tab, item)) : mappedMetadata.set(this.datasetModel[i].identifier, this.getValueCustom(tab, item)); + this.type == "Dataverse" ? mappedMetadata.set(i, this.getValueDataverse(tab, item)) : mappedMetadata.set(i, this.getValueCustom(tab, item)); } } this.loadingCr = false; @@ -94,8 +95,9 @@ export class MappingComponent implements OnInit { let title = ""; properties = ""; - this.mappedMetadatas[i].forEach((value: string, key: string) => { - (value.length > 0) ? value = this.replaceAll(value, '\n', '') : value; + this.mappedMetadatas[i].forEach((value: string, index: number) => { + let key = this.datasetModel[index].identifier; + (value.length > 0 && typeof value === "string") ? value = this.replaceAll(value, '\n', '') : value; if (key === 'dct:title') { title = value }; switch (key) { case 'dct:landingPage': @@ -289,9 +291,6 @@ export class MappingComponent implements OnInit { } } - - - mapDataset() { this.loadingCr = true; this.mappedMetadatas = []; @@ -356,10 +355,13 @@ export class MappingComponent implements OnInit { } addField(index: number) { - + this.datasetModel.splice(index + 1, 0, this.datasetModel[index]); } + + deleteField(index: number) { + this.datasetModel.splice(index, 1); } // to delete a property of dcat dataset mapped - deleteProperty(key: string) { + deleteProperty(key: number) { this.mappedMetadatas[this.index].delete(key); } diff --git a/src/styles.scss b/src/styles.scss index 5efd1a01a..6d26321aa 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -71,78 +71,76 @@ textarea { font-size: 1em; padding-left: .4em; } +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(var(--bs-gutter-y) * -1); + margin-right: calc(var(--bs-gutter-x) * -.5); + margin-left: calc(var(--bs-gutter-x) * -.5); +} .col-1 { flex: 0 0 auto; width: 8.33333333%; - margin-right: 10px; } .col-2 { flex: 0 0 auto; width: 16.66666667%; - margin-right: 10px; + } .col-3 { flex: 0 0 auto; width: 25%; - margin-right: 10px; - } .col-4 { flex: 0 0 auto; width: 33.33333333%; - margin-right: 10px; } .col-5 { flex: 0 0 auto; width: 41.66666667%; - margin-right: 10px; } .col-6 { flex: 0 0 auto; width: 50%; - margin-right: 10px; } .col-7 { flex: 0 0 auto; width: 58.33333333%; - margin-right: 10px; } .col-8 { flex: 0 0 auto; width: 66.66666667%; - margin-right: 10px; + } .col-9 { flex: 0 0 auto; width: 75%; - margin-right: 10px; } .col-10 { flex: 0 0 auto; width: 83.33333333%; - margin-right: 10px; } .col-11 { flex: 0 0 auto; width: 91.66666667%; - margin-right: 10px; } .col-12 { flex: 0 0 auto; width: 100%; - margin-right: 10px; } -- GitLab From 5e4a0f040c1176b9c9fae3c324f125b896188d01 Mon Sep 17 00:00:00 2001 From: Baptiste Toulemonde <toulemonde@cines.fr> Date: Thu, 26 Aug 2021 16:41:25 +0200 Subject: [PATCH 2/5] upgrade adding field feature --- src/app/mapping/class/dataset.ts | 4 +- src/app/mapping/mapping.component.html | 17 ++++---- src/app/mapping/mapping.component.scss | 2 +- src/app/mapping/mapping.component.ts | 58 +++++++++++++++++++------- src/styles.scss | 13 +++--- 5 files changed, 61 insertions(+), 33 deletions(-) diff --git a/src/app/mapping/class/dataset.ts b/src/app/mapping/class/dataset.ts index d4f2f6499..d28a6c7b3 100644 --- a/src/app/mapping/class/dataset.ts +++ b/src/app/mapping/class/dataset.ts @@ -5,10 +5,10 @@ export class Dataset { } export class DatasetPath { - public dcatProperty: string; + public dcatProperty: Dataset; public path: string - constructor(dcatProperty: string, path: string) { + constructor(dcatProperty: Dataset, path: string) { this.dcatProperty = dcatProperty; this.path = path; } diff --git a/src/app/mapping/mapping.component.html b/src/app/mapping/mapping.component.html index 8138d2998..356fbf5dd 100644 --- a/src/app/mapping/mapping.component.html +++ b/src/app/mapping/mapping.component.html @@ -17,7 +17,7 @@ <nb-form-field> <div class="row"> - <div class="col-3"> + <div class="col-3" style="margin-right: 10px;"> <nb-form-field> <input @@ -34,7 +34,7 @@ </nb-form-field> </div> - <div class="col-8"> + <div class="col-7"> <nb-form-field> <input @@ -52,8 +52,7 @@ id="{{dataset.identifier}}" name="{{dataset.identifier}}" nbInput (ngModelChange)="onModelChange($event)" [nbAutocomplete]="auto" [(ngModel)]="selectedPaths[index]" autocomplete="false" (focus)="reset()" /> - - + <nb-autocomplete #auto> <nb-option *ngFor="let option of filteredOptions | async" [value]="option"> @@ -63,13 +62,13 @@ </nb-autocomplete> </nb-form-field> </div> - <div class="col-1"> - <button nbButton ghost *ngIf="dataset !== datasetModel[index-1]"> - <nb-icon icon="plus-square-outline" status="primary" (click)="addField(index)"> + <div class="col-2" *ngIf="isMultiple(dataset)" style="margin-left: 10px;"> + <button nbButton ghost (click)="addField(index)"> + <nb-icon icon="plus-outline" status="primary"> </nb-icon> </button> - <button nbButton ghost *ngIf="dataset === datasetModel[index-1]"> - <nb-icon icon="trash-2-outline" status="danger" (click)="deleteField(index)"> + <button nbButton ghost *ngIf="dataset.identifier !== 'dct:hasVersion' && dataset.identifier !== 'dct:title'" (click)="deleteField(index)" > + <nb-icon icon="trash-2-outline" status="danger" > </nb-icon> </button> </div> diff --git a/src/app/mapping/mapping.component.scss b/src/app/mapping/mapping.component.scss index 61337c0e9..68382b729 100644 --- a/src/app/mapping/mapping.component.scss +++ b/src/app/mapping/mapping.component.scss @@ -5,7 +5,7 @@ margin: 0 -0.5rem; } - + .card-col { width: 100%; flex: calc(50% ); diff --git a/src/app/mapping/mapping.component.ts b/src/app/mapping/mapping.component.ts index 862ab4ce0..a29e3be5b 100644 --- a/src/app/mapping/mapping.component.ts +++ b/src/app/mapping/mapping.component.ts @@ -36,7 +36,7 @@ export class MappingComponent implements OnInit { loading: boolean = false; loadingCr = false; FDP_URL = environment.fdpUrl; - + Object: Object; ids: number[]; @ViewChild('autoInput') input; @Input() type: string; @@ -55,14 +55,6 @@ export class MappingComponent implements OnInit { console.error(error); }, ); - this.populatecatalogue(); - console.log("TYPE: " + this.type) - } - - - - - populatecatalogue() { this.itemsdataset = this.dataSetService.itemsDataset; this.ids = this.dataSetService.ids; this.ids @@ -71,6 +63,7 @@ export class MappingComponent implements OnInit { this.filteredOptions = of(this.keys); } + createDataset(item: Object): Map<number, string> { console.log("rerereer" + this.selectedPaths) let mappedMetadata: Map<number, string> = new Map() @@ -97,7 +90,7 @@ export class MappingComponent implements OnInit { properties = ""; this.mappedMetadatas[i].forEach((value: string, index: number) => { let key = this.datasetModel[index].identifier; - (value.length > 0 && typeof value === "string") ? value = this.replaceAll(value, '\n', '') : value; + (value && typeof value === "string") ? value = this.replaceAll(value, '\n', '') : value; if (key === 'dct:title') { title = value }; switch (key) { case 'dct:landingPage': @@ -321,9 +314,9 @@ export class MappingComponent implements OnInit { let datasetPathArray: DatasetPath[] = []; for (let i = 0; i < this.datasetModel.length; i++) { if (this.selectedPaths[i]) { - datasetPathArray.push(new DatasetPath(this.datasetModel[i].identifier, this.selectedPaths[i])); + datasetPathArray.push(new DatasetPath(this.datasetModel[i], this.selectedPaths[i])); } else { - datasetPathArray.push(new DatasetPath(this.datasetModel[i].identifier, "")); + datasetPathArray.push(new DatasetPath(this.datasetModel[i], "")); } } @@ -345,21 +338,56 @@ export class MappingComponent implements OnInit { let reader = new FileReader(); let datasetPath: DatasetPath[] = []; reader.onloadend = () => { - datasetPath = <DatasetPath[]>JSON.parse(reader.result as string); datasetPath.forEach(e => { this.selectedPaths[datasetPath.indexOf(e)] = e.path; - }) + this.datasetModel[datasetPath.indexOf(e)] = e.dcatProperty; + }); } reader.readAsText(jsonFile); } addField(index: number) { - this.datasetModel.splice(index + 1, 0, this.datasetModel[index]); } + this.datasetModel.splice(index + 1, 0, this.datasetModel[index]); + console.log('add'); + } deleteField(index: number) { this.datasetModel.splice(index, 1); } + + isClonned(index: number): boolean { + let bool = true; + this.obsDatasetModel.subscribe(d => { + if (d[index] !== d[index-1]){ + bool = false; + } + }) + return bool; + } + + isMultiple(dataset: Dataset): boolean { + let bool: boolean = true; + switch (dataset.identifier) { + case "dct:isPartOf": + bool = false; + break; + case "dcat:landingPage": + bool = false; + break; + case "dcat:contactPoint": + bool = false; + break; + case "foaf:homePage": + bool = false; + break; + default: + bool = true; + break; + } + return bool; + } + // to delete a property of dcat dataset mapped deleteProperty(key: number) { this.mappedMetadatas[this.index].delete(key); diff --git a/src/styles.scss b/src/styles.scss index 6d26321aa..1d822f21d 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -72,18 +72,17 @@ textarea { padding-left: .4em; } .row { - --bs-gutter-x: 1.5rem; - --bs-gutter-y: 0; display: flex; - flex-wrap: wrap; - margin-top: calc(var(--bs-gutter-y) * -1); - margin-right: calc(var(--bs-gutter-x) * -.5); - margin-left: calc(var(--bs-gutter-x) * -.5); + flex: 1 0 calc(100%); + margin: 5px -0.5rem; + } .col-1 { flex: 0 0 auto; width: 8.33333333%; + align-items: center; + } .col-2 { @@ -95,6 +94,7 @@ textarea { .col-3 { flex: 0 0 auto; width: 25%; + } .col-4 { @@ -120,6 +120,7 @@ textarea { .col-8 { flex: 0 0 auto; width: 66.66666667%; + } -- GitLab From 28dffa2ad6b48ec391abb88b75903b7f8e716f70 Mon Sep 17 00:00:00 2001 From: Baptiste Toulemonde <toulemonde@cines.fr> Date: Fri, 27 Aug 2021 08:59:48 +0200 Subject: [PATCH 3/5] fix --- src/app/mapping/mapping.component.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/app/mapping/mapping.component.ts b/src/app/mapping/mapping.component.ts index a29e3be5b..ad29425af 100644 --- a/src/app/mapping/mapping.component.ts +++ b/src/app/mapping/mapping.component.ts @@ -356,16 +356,6 @@ export class MappingComponent implements OnInit { this.datasetModel.splice(index, 1); } - isClonned(index: number): boolean { - let bool = true; - this.obsDatasetModel.subscribe(d => { - if (d[index] !== d[index-1]){ - bool = false; - } - }) - return bool; - } - isMultiple(dataset: Dataset): boolean { let bool: boolean = true; switch (dataset.identifier) { -- GitLab From f7de058b1ea2a14b9ad4cad40a02c91c6960ca44 Mon Sep 17 00:00:00 2001 From: Baptiste Toulemonde <toulemonde@cines.fr> Date: Fri, 27 Aug 2021 09:24:29 +0200 Subject: [PATCH 4/5] change variable name --- src/app/mapping/class/dataset.ts | 6 ++++++ src/app/mapping/mapping.component.html | 4 ++-- src/app/mapping/mapping.component.ts | 22 +++++++++++----------- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/app/mapping/class/dataset.ts b/src/app/mapping/class/dataset.ts index d28a6c7b3..98fe92a3c 100644 --- a/src/app/mapping/class/dataset.ts +++ b/src/app/mapping/class/dataset.ts @@ -2,6 +2,12 @@ export class Dataset { public name: string; public identifier: string; public usageNote: string; + + constructor(name: string, identifier: string, usageNote: string) { + this.name = name; + this.identifier = identifier; + this.usageNote = usageNote; + } } export class DatasetPath { diff --git a/src/app/mapping/mapping.component.html b/src/app/mapping/mapping.component.html index 356fbf5dd..6f7a83288 100644 --- a/src/app/mapping/mapping.component.html +++ b/src/app/mapping/mapping.component.html @@ -13,7 +13,7 @@ <input type="file" id="file" (change)="importJson($event)" accept=".json" /> </div> - <ng-container *ngFor="let dataset of obsDatasetModel | async; let index = index ;trackBy:trackByIndex ;"> + <ng-container *ngFor="let dataset of obsDcatVocabulary | async; let index = index ;trackBy:trackByIndex ;"> <nb-form-field> <div class="row"> @@ -97,7 +97,7 @@ <nb-list-item *ngFor="let data of mappedMetadatas[index] | keyvalue; trackBy:trackByIndex; "> <div class="row"> - <div class="col-5"><label for="{{data.key}}">{{datasetModel[data.key].identifier}}</label></div> + <div class="col-5"><label for="{{data.key}}">{{dcatVocabulary[data.key].identifier}}</label></div> <div class="col-5"> <input nbInput [ngModel]="data.value" (ngModelChange)="mappedMetadatas[index].set(data.key, $event)" /> </div> <div class="col-2"><button nbButton ghost> diff --git a/src/app/mapping/mapping.component.ts b/src/app/mapping/mapping.component.ts index ad29425af..8cef55ea9 100644 --- a/src/app/mapping/mapping.component.ts +++ b/src/app/mapping/mapping.component.ts @@ -24,8 +24,8 @@ import { FeedbackDialogComponent } from './dialog/feedback-dialog/feedback-dialo export class MappingComponent implements OnInit { itemsdataset: Object[] = [] - datasetModel: Dataset[]; - obsDatasetModel: Observable<Dataset[]>; + dcatVocabulary: Dataset[]; + obsDcatVocabulary: Observable<Dataset[]>; filteredOptions: Observable<string[]>; keys: string[] = []; selectedPaths: string[]; @@ -47,8 +47,8 @@ export class MappingComponent implements OnInit { ngOnInit() { this.dataSetService.getLocally('./assets/dataset.json').subscribe( dataset => { - this.datasetModel = dataset; - this.obsDatasetModel = of(this.datasetModel) + this.dcatVocabulary = dataset; + this.obsDcatVocabulary = of(this.dcatVocabulary) this.selectedPaths = []; }, error => { @@ -89,7 +89,7 @@ export class MappingComponent implements OnInit { let title = ""; properties = ""; this.mappedMetadatas[i].forEach((value: string, index: number) => { - let key = this.datasetModel[index].identifier; + let key = this.dcatVocabulary[index].identifier; (value && typeof value === "string") ? value = this.replaceAll(value, '\n', '') : value; if (key === 'dct:title') { title = value }; switch (key) { @@ -312,11 +312,11 @@ export class MappingComponent implements OnInit { downloadJson() { let datasetPathArray: DatasetPath[] = []; - for (let i = 0; i < this.datasetModel.length; i++) { + for (let i = 0; i < this.dcatVocabulary.length; i++) { if (this.selectedPaths[i]) { - datasetPathArray.push(new DatasetPath(this.datasetModel[i], this.selectedPaths[i])); + datasetPathArray.push(new DatasetPath(this.dcatVocabulary[i], this.selectedPaths[i])); } else { - datasetPathArray.push(new DatasetPath(this.datasetModel[i], "")); + datasetPathArray.push(new DatasetPath(this.dcatVocabulary[i], "")); } } @@ -341,19 +341,19 @@ export class MappingComponent implements OnInit { datasetPath = <DatasetPath[]>JSON.parse(reader.result as string); datasetPath.forEach(e => { this.selectedPaths[datasetPath.indexOf(e)] = e.path; - this.datasetModel[datasetPath.indexOf(e)] = e.dcatProperty; + this.dcatVocabulary[datasetPath.indexOf(e)] = e.dcatProperty; }); } reader.readAsText(jsonFile); } addField(index: number) { - this.datasetModel.splice(index + 1, 0, this.datasetModel[index]); + this.dcatVocabulary.splice(index + 1, 0, this.dcatVocabulary[index]); console.log('add'); } deleteField(index: number) { - this.datasetModel.splice(index, 1); + this.dcatVocabulary.splice(index, 1); } isMultiple(dataset: Dataset): boolean { -- GitLab From 17bd43ccdc6fda650a336498de6048965a170136 Mon Sep 17 00:00:00 2001 From: Baptiste Toulemonde <toulemonde@cines.fr> Date: Fri, 27 Aug 2021 10:46:52 +0200 Subject: [PATCH 5/5] fix import --- src/app/mapping/class/dataset.ts | 2 +- src/app/mapping/mapping.component.ts | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/app/mapping/class/dataset.ts b/src/app/mapping/class/dataset.ts index 98fe92a3c..080bc153a 100644 --- a/src/app/mapping/class/dataset.ts +++ b/src/app/mapping/class/dataset.ts @@ -11,7 +11,7 @@ export class Dataset { } export class DatasetPath { - public dcatProperty: Dataset; + public dcatProperty: Dataset | string; public path: string constructor(dcatProperty: Dataset, path: string) { diff --git a/src/app/mapping/mapping.component.ts b/src/app/mapping/mapping.component.ts index 8cef55ea9..802334ddc 100644 --- a/src/app/mapping/mapping.component.ts +++ b/src/app/mapping/mapping.component.ts @@ -339,10 +339,14 @@ export class MappingComponent implements OnInit { let datasetPath: DatasetPath[] = []; reader.onloadend = () => { datasetPath = <DatasetPath[]>JSON.parse(reader.result as string); - datasetPath.forEach(e => { - this.selectedPaths[datasetPath.indexOf(e)] = e.path; - this.dcatVocabulary[datasetPath.indexOf(e)] = e.dcatProperty; - }); + for (let i = 0; i < datasetPath.length; i++) { + this.selectedPaths[i] = datasetPath[i].path; + if (typeof datasetPath[i].dcatProperty === 'string') { + this.dcatVocabulary[i] = new Dataset('',<string> datasetPath[i].dcatProperty, ''); + } else { + this.dcatVocabulary[i] = <Dataset> datasetPath[i].dcatProperty; + } + } } reader.readAsText(jsonFile); } -- GitLab