From dfdae0cc686210d9973a750d61733c184b8423a6 Mon Sep 17 00:00:00 2001
From: Tifenn GUILLAS <tifenn.guillas@lam.fr>
Date: Thu, 4 Jul 2019 16:10:03 +0200
Subject: [PATCH] Change modal logic

---
 .../components/datatable.component.html       | 23 +++++-----
 .../search/components/datatable.component.ts  | 40 ++++++++++++-----
 src/app/search/components/index.ts            |  4 +-
 ...nail.component.css => modal.component.css} |  0
 ...il.component.html => modal.component.html} | 13 +++++-
 ...mbnail.component.ts => modal.component.ts} | 14 +++---
 .../search/containers/detail.component.html   |  3 +-
 src/app/search/containers/detail.component.ts | 44 +------------------
 8 files changed, 66 insertions(+), 75 deletions(-)
 rename src/app/search/components/{thumbnail.component.css => modal.component.css} (100%)
 rename src/app/search/components/{thumbnail.component.html => modal.component.html} (59%)
 rename src/app/search/components/{thumbnail.component.ts => modal.component.ts} (60%)

diff --git a/src/app/search/components/datatable.component.html b/src/app/search/components/datatable.component.html
index e53696ce..b4d0f91f 100644
--- a/src/app/search/components/datatable.component.html
+++ b/src/app/search/components/datatable.component.html
@@ -30,7 +30,7 @@
                                     </div>
                                     <div *ngSwitchCase="'thumbnail'">
                                         <button class="btn btn-link"
-                                            (click)="openThumbnail(datum[attribute.name], getAttributeUriAction(attribute.name, datum[attribute.name]))">
+                                            (click)="openModal('thumbnail', attribute.name, datum[attribute.name])">
                                             <img [src]="getAttributeUriAction(attribute.name, datum[attribute.name])"
                                                 class="img-fluid">
                                         </button>
@@ -44,9 +44,12 @@
                                             class="btn btn-outline-primary btn-sm">
                                             {{ datum[attribute.name] }}</a>
                                     </div>
-                                    <!-- <div *ngSwitchCase="'fancybox'">
-                                            <img [src]="getAttributeUriAction(attribute.name, datum[attribute.name])" class="img-fluid">
-                                        </div> -->
+                                    <div *ngSwitchCase="'fancybox'">
+                                        <button class="btn btn-outline-primary btn-sm"
+                                            (click)="openModal('fancybox', attribute.name, datum[attribute.name])">
+                                            {{ datum[attribute.name] }}
+                                        </button>
+                                    </div>
                                     <div *ngSwitchCase="'download'">
                                         <a [href]="getAttributeUriAction(attribute.name, datum[attribute.name])"
                                             class="btn btn-outline-primary btn-sm">
@@ -73,9 +76,9 @@
     </accordion-group>
 </accordion>
 
-<app-thumbnail *ngIf="thumbnailData.isOpen"
-    [bsModalRef]="bsModalRef"
-    [title]="thumbnailData.title"
-    [srcImage]="thumbnailData.srcImage"
-    (closeEvent)="closeThumbnail($event)">
-</app-thumbnail>
\ No newline at end of file
+<app-modal *ngIf="modalData.isOpen"
+    [bsModalRef]="bsModalRef" 
+    [type]="modalData.type" 
+    [data]="modalData.data"
+    (closeEvent)="closeModal($event)">
+</app-modal>
\ No newline at end of file
diff --git a/src/app/search/components/datatable.component.ts b/src/app/search/components/datatable.component.ts
index b1802baa..7afc6ebc 100644
--- a/src/app/search/components/datatable.component.ts
+++ b/src/app/search/components/datatable.component.ts
@@ -1,9 +1,15 @@
 import { Component, Input, ChangeDetectionStrategy, Output, EventEmitter, TemplateRef } from '@angular/core';
-import { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';
+import { BsModalRef } from 'ngx-bootstrap/modal';
 
 import { SearchMeta } from '../store/model';
 import { Attribute } from 'src/app/metamodel/model';
 
+interface ModalData {
+    isOpen: boolean;
+    type: string;
+    data: object;
+}
+
 @Component({
     selector: 'app-datatable',
     templateUrl: 'datatable.component.html',
@@ -18,10 +24,11 @@ export class DatatableComponent {
     @Output() getSearchData: EventEmitter<number> = new EventEmitter();
 
     bsModalRef: BsModalRef;
-    thumbnailData = {
+
+    modalData: ModalData = {
         isOpen: false,
-        title: null,
-        srcImage: null
+        type: null,
+        data: null
     };
 
     initDatatable() {
@@ -36,16 +43,29 @@ export class DatatableComponent {
 
     getAttributeUriAction(attributeName: string, datum: string): string {
         const attribute = this.datasetAttributeList.find(attribute => attribute.name === attributeName);
+        // return attribute.uri_action + datum;
         return attribute.uri_action;
     }
 
-    openThumbnail(title: string, srcImage: string) {
-        this.thumbnailData.title = title;
-        this.thumbnailData.srcImage = srcImage;
-        this.thumbnailData.isOpen = true;
+    openModal(type: string, attributeName: string, value: string) {
+        this.modalData.type = type;
+        if (type === 'thumbnail') {
+            this.modalData.data = {
+                title: value,
+                srcImage: this.getAttributeUriAction(attributeName, value)
+            };
+        } else if (type === 'fancybox') {
+            this.modalData.data = {
+                title: value,
+                idAttribute: value
+            };
+        }
+        this.modalData.isOpen = true;
     }
 
-    closeThumbnail(event: null) {
-        this.thumbnailData.isOpen = false;
+    closeModal(event: null) {
+        this.modalData.isOpen = false;
+        this.modalData.type = null;
+        this.modalData.data = null;
     }
 }
diff --git a/src/app/search/components/index.ts b/src/app/search/components/index.ts
index f68a1a32..a9c5c9cb 100644
--- a/src/app/search/components/index.ts
+++ b/src/app/search/components/index.ts
@@ -9,7 +9,7 @@ import { SummaryComponent } from './summary.component';
 import { criteriaComponents } from './criteria';
 import { UrlDisplayComponent } from './url-display.component';
 import { DatatableComponent } from './datatable.component';
-import { ThumbnailComponent } from './thumbnail.component';
+import { ModalComponent } from './modal.component';
 
 export const dummiesComponents = [
     ProgressComponent,
@@ -23,5 +23,5 @@ export const dummiesComponents = [
     SummaryComponent,
     UrlDisplayComponent,
     DatatableComponent,
-    ThumbnailComponent
+    ModalComponent
 ];
diff --git a/src/app/search/components/thumbnail.component.css b/src/app/search/components/modal.component.css
similarity index 100%
rename from src/app/search/components/thumbnail.component.css
rename to src/app/search/components/modal.component.css
diff --git a/src/app/search/components/thumbnail.component.html b/src/app/search/components/modal.component.html
similarity index 59%
rename from src/app/search/components/thumbnail.component.html
rename to src/app/search/components/modal.component.html
index 483ab78e..f3431d16 100644
--- a/src/app/search/components/thumbnail.component.html
+++ b/src/app/search/components/modal.component.html
@@ -3,13 +3,22 @@
     <div class="modal-dialog modal-fit">
         <div class="modal-content">
             <div class="modal-header">
-                <h4 id="dialog-sizes-name1" class="modal-title pull-left">{{ title }}</h4>
+                <h4 id="dialog-sizes-name1" class="modal-title pull-left">{{ data.title }}</h4>
                 <button type="button" class="close pull-right" (click)="closeModal(lgModal)" aria-label="Close">
                     <span aria-hidden="true">&times;</span>
                 </button>
             </div>
             <div class="modal-body text-center">
-                <img [src]="srcImage" class="img-fluid">
+                <div [ngSwitch]="type">
+                    <div *ngSwitchCase="'thumbnail'">
+                        <img [src]="data.srcImage">
+                    </div>
+                    <div *ngSwitchCase="'fancybox'">
+                    </div>
+                    <div *ngSwitchDefault>
+                        {{ type }} type not supported
+                    </div>
+                </div>
             </div>
         </div>
     </div>
diff --git a/src/app/search/components/thumbnail.component.ts b/src/app/search/components/modal.component.ts
similarity index 60%
rename from src/app/search/components/thumbnail.component.ts
rename to src/app/search/components/modal.component.ts
index 1cf1125e..57e318a0 100644
--- a/src/app/search/components/thumbnail.component.ts
+++ b/src/app/search/components/modal.component.ts
@@ -2,16 +2,16 @@ import { Component, Input, Output, EventEmitter } from '@angular/core';
 import { BsModalRef } from 'ngx-bootstrap/modal';
 
 @Component({
-    selector: 'app-thumbnail',
-    templateUrl: 'thumbnail.component.html',
-    styleUrls: ['thumbnail.component.css'],
+    selector: 'app-modal',
+    templateUrl: 'modal.component.html',
+    styleUrls: ['modal.component.css'],
 })
-export class ThumbnailComponent {
-    @Input() title: string;
-    @Input() srcImage: string;
+export class ModalComponent {
     @Input() bsModalRef: BsModalRef;
+    @Input() type: string;
+    @Input() data: object;
     @Output() closeEvent: EventEmitter<null> = new EventEmitter();
-    
+
     closeModal(modal) {
         modal.hide();
         this.closeEvent.emit();
diff --git a/src/app/search/containers/detail.component.html b/src/app/search/containers/detail.component.html
index 5ddf613a..a9747ac2 100644
--- a/src/app/search/containers/detail.component.html
+++ b/src/app/search/containers/detail.component.html
@@ -29,4 +29,5 @@
     <div class="col">
         <a routerLink="/search/output/{{ datasetName | async }}" class="btn btn-outline-secondary"><i class="fas fa-arrow-left"></i> Previous</a>
     </div>
-</div> -->
\ No newline at end of file
+</div> -->
+<div>Detail component</div>
\ No newline at end of file
diff --git a/src/app/search/containers/detail.component.ts b/src/app/search/containers/detail.component.ts
index 9c46fb5a..58e4a31f 100644
--- a/src/app/search/containers/detail.component.ts
+++ b/src/app/search/containers/detail.component.ts
@@ -27,51 +27,9 @@ interface StoreState {
     styleUrls: [ 'detail.component.css' ]
 })
 export class DetailComponent implements OnInit {
-    // public apiPath: string = environment.apiUrl + '/search';
-    // public datasetName: Observable<String>;
-    // public currentStep: Observable<string>;
-    // public datasetList: Observable<Dataset[]>;
-    // public datasetAttributeList: Observable<Attribute[]>;
-    // public outputFamilyList: Observable<Family[]>;
-    // public categoryList: Observable<Category[]>;
-    // public criteriaList: Observable<Criterion[]>;
-    // public outputList: Observable<number[]>;
-    // public searchMeta: Observable<SearchMeta>;
-    // public searchData: Observable<any[]>;
 
     constructor(private route: ActivatedRoute, private store: Store<StoreState>) {
-        // this.datasetName = store.select(searchSelector.getDatasetName);
-        // this.currentStep = store.select(searchSelector.getCurrentStep);
-        // this.datasetList = store.select(metamodelSelector.getDatasetList);
-        // this.datasetAttributeList = this.store.select(metamodelSelector.getDatasetAttributeList);
-        // this.outputFamilyList = this.store.select(metamodelSelector.getOutputFamilyList);
-        // this.categoryList = this.store.select(metamodelSelector.getCategoryList);
-        // this.criteriaList = this.store.select(searchSelector.getCriteriaList);
-        // this.outputList = this.store.select(searchSelector.getOutputList);
-        // this.searchMeta = this.store.select(searchSelector.getSearchMeta);
-        // this.searchData = this.store.select(searchSelector.getSearchData);
     }
 
-    ngOnInit() {
-        // Create a micro task that is processed after the current synchronous code
-        // This micro task prevent the expression has changed after view init error
-        // Promise.resolve(null).then(() => this.store.dispatch(new searchActions.ChangeStepAction('result')));
-        // Promise.resolve(null).then(() => this.store.dispatch(new searchActions.ResultChecked()));
-        // this.route.paramMap.subscribe((params: ParamMap) => {
-        //     const datasetName = params.get('dname');
-        //     Promise.resolve(null).then(() => this.store.dispatch(new searchActions.SelectDatasetAction(datasetName)));
-        //     this.store.dispatch(new criteriaActions.LoadDatasetAttributeListAction(datasetName));
-        // });
-        // this.store.dispatch(new datasetActions.LoadDatasetSearchMetaAction());
-        // this.store.dispatch(new outputActions.LoadOutputFamilyListAction());
-        // this.store.dispatch(new outputActions.LoadCategoryListAction());
-    }
-
-    // getSearchMeta(): void {
-    //     this.store.dispatch(new searchActions.RetrieveMetaAction());
-    // }
-
-    // getSearchData(page: number): void {
-    //     this.store.dispatch(new searchActions.RetrieveDataAction(page));
-    // }
+    ngOnInit() {}
 }
-- 
GitLab