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