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] 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