From a6672708166d997dd89aae671c779b5531a07345 Mon Sep 17 00:00:00 2001
From: Tifenn Guillas <tifenn.guillas@gmail.com>
Date: Mon, 26 Jul 2021 12:46:35 +0200
Subject: [PATCH] Clean code

---
 .../doc/containers/doc.component.html         | 175 ------------------
 .../instance/doc/containers/doc.component.ts  |  88 ---------
 .../app/instance/doc/doc-routing.module.ts    |  30 ---
 .../src/app/instance/doc/doc.component.scss   |  30 ---
 client/src/app/instance/doc/doc.module.ts     |  26 ---
 .../dataset-by-family.component.html          |   0
 .../dataset-by-family.component.scss          |   0
 .../components/dataset-by-family.component.ts |   0
 .../dataset-card-doc.component.html           |   0
 .../components/dataset-card-doc.component.ts  |   2 +-
 .../components/index.ts                       |   0
 .../components/output-list.component.html     |   0
 .../components/output-list.component.ts       |  12 +-
 .../containers/dataset-list.component.html    |   0
 .../containers/dataset-list.component.ts      |  19 +-
 .../documentation.component.html              |  60 ++----
 .../documentation.component.ts                |  26 ++-
 .../documentation-routing.module.ts           |   7 +-
 .../documentation.component.scss              |   2 +-
 .../documentation/documentation.module.ts     |   6 +-
 .../app/instance/instance-routing.module.ts   |   1 -
 client/src/app/instance/instance.component.ts |   1 -
 22 files changed, 49 insertions(+), 436 deletions(-)
 delete mode 100644 client/src/app/instance/doc/containers/doc.component.html
 delete mode 100644 client/src/app/instance/doc/containers/doc.component.ts
 delete mode 100644 client/src/app/instance/doc/doc-routing.module.ts
 delete mode 100644 client/src/app/instance/doc/doc.component.scss
 delete mode 100644 client/src/app/instance/doc/doc.module.ts
 rename client/src/app/instance/{doc => documentation}/components/dataset-by-family.component.html (100%)
 rename client/src/app/instance/{doc => documentation}/components/dataset-by-family.component.scss (100%)
 rename client/src/app/instance/{doc => documentation}/components/dataset-by-family.component.ts (100%)
 rename client/src/app/instance/{doc => documentation}/components/dataset-card-doc.component.html (100%)
 rename client/src/app/instance/{doc => documentation}/components/dataset-card-doc.component.ts (96%)
 rename client/src/app/instance/{doc => documentation}/components/index.ts (100%)
 rename client/src/app/instance/{doc => documentation}/components/output-list.component.html (100%)
 rename client/src/app/instance/{doc => documentation}/components/output-list.component.ts (60%)
 rename client/src/app/instance/{doc => documentation}/containers/dataset-list.component.html (100%)
 rename client/src/app/instance/{doc => documentation}/containers/dataset-list.component.ts (85%)
 rename client/src/app/instance/documentation/{ => containers}/documentation.component.html (78%)
 rename client/src/app/instance/documentation/{ => containers}/documentation.component.ts (50%)

diff --git a/client/src/app/instance/doc/containers/doc.component.html b/client/src/app/instance/doc/containers/doc.component.html
deleted file mode 100644
index f451211e..00000000
--- a/client/src/app/instance/doc/containers/doc.component.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<div class="container">
-    <app-spinner *ngIf="attributeListIsLoading | async"></app-spinner>
-
-    <div class="jumbotron">
-        <div class="row align-items-center">
-            <div class="col-md-12 order-md-1 text-justify text-md-left pr-md-5">
-                <h2 class="mb-3">Export server documentation</h2>
-
-                <h4>URL construction</h4>
-                <p>
-                    To request the server, you need to construct a correct URL. Just below you can find the URL schema and a
-                    description of mandatory parameters:
-                </p>
-                <code>{{ getUrlServer() }}/search/dataset?a=id_attribute&c=id_attribute::operator::value</code>
-
-                <ul>
-                    <li>
-                        <code>dataset</code>: dataset in which to search. See datasets section for available datasets.
-                    </li>
-                    <li>
-                        <code>a</code>: output parameters as attributes id list semicolon separated. See outputs section for available attributes.
-                    </li>
-                    <blockquote>a=1;2;3</blockquote>
-                    <li>
-                        <code>c</code>: criteria list separated with semicolon. A criterion is defined by an id_attribute,
-                        an operator and a value. See operators section for available operators.
-                    </li>
-                    <blockquote>c=3::eq::ping;2::eq::pong</blockquote>
-                </ul>
-
-                <app-output-list
-                        [datasetSelected]="datasetSelected | async"
-                        [attributeList]="attributeList | async">
-                </app-output-list>
-
-                <h5>Operators</h5>
-                <table id="table">
-                    <tr>
-                        <th>operator</th>
-                        <th>description</th>
-                        <th>usage</th>
-                        <th>example</th>
-                    </tr>
-                    <tr>
-                        <td>eq</td>
-                        <td>equal to</td>
-                        <td><code>c=id_attribute::eq::value</code></td>
-                        <td><code>c=1::eq::89</code></td>
-                    </tr>
-                    <tr>
-                        <td>neq</td>
-                        <td>not equal to</td>
-                        <td><code>c=id_attribute::neq::value</code></td>
-                        <td><code>c=1::neq::89</code></td>
-                    </tr>
-                    <tr>
-                        <td>gt</td>
-                        <td>greater than</td>
-                        <td><code>c=id_attribute::gt::value</code></td>
-                        <td><code>c=1::gt::1.5</code></td>
-                    </tr>
-                    <tr>
-                        <td>gte</td>
-                        <td>greater than or equal to</td>
-                        <td><code>c=id_attribute::gte::value</code></td>
-                        <td><code>c=1::gte::2</code></td>
-                    </tr>
-                    <tr>
-                        <td>lt</td>
-                        <td>lower than</td>
-                        <td><code>c=id_attribute::lt::value</code></td>
-                        <td><code>c=1::lt::1.5</code></td>
-                    </tr>
-                    <tr>
-                        <td>lte</td>
-                        <td>lower than or equal to</td>
-                        <td><code>c=id_attribute::lte::value</code></td>
-                        <td><code>c=1::lte::2</code></td>
-                    </tr>
-                    <tr>
-                        <td>bw</td>
-                        <td>between</td>
-                        <td><code>c=id_attribute::bw::value_min|value_max</code></td>
-                        <td><code>c=1::bw::10|90</code></td>
-                    </tr>
-                    <tr>
-                        <td>lk</td>
-                        <td>like</td>
-                        <td><code>c=id_attribute::lk::value</code></td>
-                        <td><code>c=1::lk::ping</code></td>
-                    </tr>
-                    <tr>
-                        <td>nlk</td>
-                        <td>not like</td>
-                        <td><code>c=id_attribute::nlk::value</code></td>
-                        <td><code>c=1::nlk::pong</code></td>
-                    </tr>
-                    <tr>
-                        <td>in</td>
-                        <td>in</td>
-                        <td><code>c=id_attribute::in::value_x|value_y|value_z</code></td>
-                        <td><code>c=1::in::ping|pong|paff</code></td>
-                    </tr>
-                    <tr>
-                        <td>nin</td>
-                        <td>not in</td>
-                        <td><code>c=id_attribute::nin::value_x|value_y|value_z</code></td>
-                        <td><code>c=1::nin::ping|pong|paf</code></td>
-                    </tr>
-                    <tr>
-                        <td>nl</td>
-                        <td>is null</td>
-                        <td><code>c=id_attribute::nl</code></td>
-                        <td><code>c=1::nl</code></td>
-                    </tr>
-                    <tr>
-                        <td>nnl</td>
-                        <td>is not null</td>
-                        <td><code>c=id_attribute::nnl</code></td>
-                        <td><code>c=1::nnl</code></td>
-                    </tr>
-                    <tr>
-                        <td>js</td>
-                        <td>json</td>
-                        <td><code>c=id_attribute::js::extension,keyword|operator|value</code></td>
-                        <td><code>c=1::js::PrimaryHDU,ID|eq|45</code></td>
-                    </tr>
-                </table>
-
-                <h4>Examples</h4>
-
-                We supposed to have the dataset ping with following attributes:
-                <table id="table">
-                    <tr>
-                        <th>id</th>
-                        <th>attribute</th>
-                    </tr>
-                    <tr>
-                        <td>1</td>
-                        <td>obs_id</td>
-                    </tr>
-                    <tr>
-                        <td>2</td>
-                        <td>ra</td>
-                    </tr>
-                    <tr>
-                        <td>3</td>
-                        <td>dec</td>
-                    </tr>
-                    <tr>
-                        <td>4</td>
-                        <td>instrument</td>
-                    </tr>
-                </table>
-
-                <blockquote>{{ getUrlServer() }}/search/ping?a=1;2;3&c=1::eq::1</blockquote>
-                <p>This will return the <code>obs_id</code> with its value equals to 1 and display <code>obs_id</code>, <code>RA</code> and <code>DEC</code> as
-                    outputs.</p>
-                <blockquote>
-                    {{ getUrlServer() }}/search/ping?a=1;2;3;4&c=4::in::TEL_1|TEL_2
-                </blockquote>
-                <p>This will return a list of <code>TEL_1</code> or <code>TEL_2</code> observations with all available
-                    outputs.</p>
-                <blockquote>
-                    {{ getUrlServer() }}/search/ping?a=1&c=2::gt::1;3::gt::2
-                </blockquote>
-                <p>This will return a list of <code>obs_id</code> where <code>RA</code> is greater than 1 and <code>DEC</code> is greater than 2</p>
-            </div>
-        </div>
-    </div>
-
-    <button class="btn btn-outline-secondary mt-3">
-        <span class="fas fa-arrow-left"></span> Return to previous page
-    </button>
-</div>
diff --git a/client/src/app/instance/doc/containers/doc.component.ts b/client/src/app/instance/doc/containers/doc.component.ts
deleted file mode 100644
index 4ba2de8f..00000000
--- a/client/src/app/instance/doc/containers/doc.component.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * This file is part of Anis Client.
- *
- * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-import { Component, OnInit } from '@angular/core';
-
-import { Store } from '@ngrx/store';
-import { Observable } from 'rxjs';
-
-import * as documentationActions from 'src/app/instance/store/actions/documentation.actions';
-import * as datasetActions from 'src/app/metamodel/actions/dataset.actions';
-import * as datasetFamilySelector from 'src/app/metamodel/selectors/dataset-family.selector';
-import * as datasetSelector from 'src/app/metamodel/selectors/dataset.selector';
-import {Attribute, Dataset, DatasetFamily, Survey} from 'src/app/metamodel/models';
-import { environment } from 'src/environments/environment';
-import * as authSelector from "../../../auth/auth.selector";
-import * as instanceSelector from "../../../metamodel/selectors/instance.selector";
-import * as surveySelector from "../../../metamodel/selectors/survey.selector";
-import * as attributeSelector from "../../../metamodel/selectors/attribute.selector";
-
-@Component({
-    selector: 'app-doc',
-    templateUrl: 'doc.component.html',
-    styleUrls: ['../doc.component.scss']
-})
-/**
- * @class
- * @classdesc Documentation container.
- *
- * @implements OnInit
- */
-export class DocComponent implements OnInit {
-    public instanceSelected: Observable<string>;
-    public datasetSelected: Observable<string>;
-    public attributeListIsLoading: Observable<boolean>;
-    public attributeListIsLoaded: Observable<boolean>;
-    public attributeList: Observable<Attribute[]>;
-    // public isAuthenticated: Observable<boolean>;
-    // public datasetFamilyListIsLoading: Observable<boolean>;
-    // public datasetFamilyListIsLoaded: Observable<boolean>;
-    // public datasetFamilyList: Observable<DatasetFamily[]>;
-    // public surveyListIsLoading: Observable<boolean>;
-    // public surveyListIsLoaded: Observable<boolean>;
-    // public surveyList: Observable<Survey[]>;
-    // public datasetListIsLoading: Observable<boolean>;
-    // public datasetListIsLoaded: Observable<boolean>;
-    // public datasetList: Observable<Dataset[]>;
-
-    constructor(private store: Store<{ }>) {
-        this.instanceSelected = store.select(instanceSelector.selectInstanceNameByRoute);
-        this.datasetSelected = store.select(datasetSelector.selectDatasetNameByRoute);
-        this.attributeListIsLoading = store.select(attributeSelector.selectAttributeListIsLoading);
-        this.attributeListIsLoaded = store.select(attributeSelector.selectAttributeListIsLoaded);
-        this.attributeList = store.select(attributeSelector.selectAllAttributes);
-        // this.isAuthenticated = store.select(authSelector.selectIsAuthenticated);
-        // this.datasetFamilyListIsLoading = store.select(datasetFamilySelector.selectDatasetFamilyListIsLoading);
-        // this.datasetFamilyListIsLoaded = store.select(datasetFamilySelector.selectDatasetFamilyListIsLoaded);
-        // this.datasetFamilyList = store.select(datasetFamilySelector.selectAllDatasetFamilies);
-        // this.surveyListIsLoading = store.select(surveySelector.selectSurveyListIsLoading);
-        // this.surveyListIsLoaded = store.select(surveySelector.selectSurveyListIsLoaded);
-        // this.surveyList = store.select(surveySelector.selectAllSurveys);
-        // this.datasetListIsLoading = store.select(datasetSelector.selectDatasetListIsLoading);
-        // this.datasetListIsLoaded = store.select(datasetSelector.selectDatasetListIsLoaded);
-        // this.datasetList = store.select(datasetSelector.selectAllDatasets);
-    }
-
-    ngOnInit() {
-        this.store.dispatch(documentationActions.loadAttributeList());
-    }
-
-    /**
-     * Returns strict url address.
-     *
-     * @return string
-     */
-    getUrlServer(): string {
-        if (!environment.apiUrl.startsWith('http')) {
-            const url = window.location;
-            return url.protocol + '//' + url.host + environment.apiUrl;
-        }
-        return environment.apiUrl;
-    }
-}
diff --git a/client/src/app/instance/doc/doc-routing.module.ts b/client/src/app/instance/doc/doc-routing.module.ts
deleted file mode 100644
index 4e27a9b1..00000000
--- a/client/src/app/instance/doc/doc-routing.module.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * This file is part of Anis Client.
- *
- * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-import { NgModule } from '@angular/core';
-import { Routes, RouterModule } from '@angular/router';
-
-import { DatasetListComponent } from "./containers/dataset-list.component";
-import { DocComponent } from "./containers/doc.component";
-
-const routes: Routes = [
-    { path: '', component: DatasetListComponent },
-    { path: ':dname', component: DocComponent },
-];
-
-@NgModule({
-    imports: [RouterModule.forChild(routes)],
-    exports: [RouterModule]
-})
-export class DocRoutingModule { }
-
-export const routedComponents = [
-    DatasetListComponent,
-    DocComponent
-];
diff --git a/client/src/app/instance/doc/doc.component.scss b/client/src/app/instance/doc/doc.component.scss
deleted file mode 100644
index 9628a449..00000000
--- a/client/src/app/instance/doc/doc.component.scss
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * This file is part of Anis Client.
- *
- * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-blockquote {
-    background: #f9f9f9;
-    border-left: 10px solid #ccc;
-    margin: 1.5em 10px;
-    padding: 1em 10px 1em 10px;
-}
-
-table, th, td {
-    background-color: #f9f9f9;
-    padding: 6px 13px;
-    border: 1px solid #ccc;
-    border-collapse: collapse;
-    margin-bottom: 1em;
-}
-
-.attributes-table {
-    display: inline-block;
-    max-height : 500px;
-    overflow-y : auto;
-    overflow-x: hidden;
-}
diff --git a/client/src/app/instance/doc/doc.module.ts b/client/src/app/instance/doc/doc.module.ts
deleted file mode 100644
index 74d696f1..00000000
--- a/client/src/app/instance/doc/doc.module.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * This file is part of Anis Client.
- *
- * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-import { NgModule } from '@angular/core';
-
-import { SharedModule } from 'src/app/shared/shared.module';
-import { DocRoutingModule, routedComponents } from './doc-routing.module';
-import { dummiesComponents } from './components';
-
-@NgModule({
-    imports: [
-        SharedModule,
-        DocRoutingModule
-    ],
-    declarations: [
-        routedComponents,
-        dummiesComponents
-    ]
-})
-export class DocModule { }
diff --git a/client/src/app/instance/doc/components/dataset-by-family.component.html b/client/src/app/instance/documentation/components/dataset-by-family.component.html
similarity index 100%
rename from client/src/app/instance/doc/components/dataset-by-family.component.html
rename to client/src/app/instance/documentation/components/dataset-by-family.component.html
diff --git a/client/src/app/instance/doc/components/dataset-by-family.component.scss b/client/src/app/instance/documentation/components/dataset-by-family.component.scss
similarity index 100%
rename from client/src/app/instance/doc/components/dataset-by-family.component.scss
rename to client/src/app/instance/documentation/components/dataset-by-family.component.scss
diff --git a/client/src/app/instance/doc/components/dataset-by-family.component.ts b/client/src/app/instance/documentation/components/dataset-by-family.component.ts
similarity index 100%
rename from client/src/app/instance/doc/components/dataset-by-family.component.ts
rename to client/src/app/instance/documentation/components/dataset-by-family.component.ts
diff --git a/client/src/app/instance/doc/components/dataset-card-doc.component.html b/client/src/app/instance/documentation/components/dataset-card-doc.component.html
similarity index 100%
rename from client/src/app/instance/doc/components/dataset-card-doc.component.html
rename to client/src/app/instance/documentation/components/dataset-card-doc.component.html
diff --git a/client/src/app/instance/doc/components/dataset-card-doc.component.ts b/client/src/app/instance/documentation/components/dataset-card-doc.component.ts
similarity index 96%
rename from client/src/app/instance/doc/components/dataset-card-doc.component.ts
rename to client/src/app/instance/documentation/components/dataset-card-doc.component.ts
index e9f51428..adcfcf40 100644
--- a/client/src/app/instance/doc/components/dataset-card-doc.component.ts
+++ b/client/src/app/instance/documentation/components/dataset-card-doc.component.ts
@@ -30,6 +30,6 @@ export class DatasetCardDocComponent {
 
     selectDataset(datasetName: string) {
         this.router.routeReuseStrategy.shouldReuseRoute = () => false;
-        this.router.navigate([`/instance/${this.instanceSelected}/doc/${datasetName}`]);
+        this.router.navigate([`/instance/${this.instanceSelected}/documentation/${datasetName}`]);
     }
 }
diff --git a/client/src/app/instance/doc/components/index.ts b/client/src/app/instance/documentation/components/index.ts
similarity index 100%
rename from client/src/app/instance/doc/components/index.ts
rename to client/src/app/instance/documentation/components/index.ts
diff --git a/client/src/app/instance/doc/components/output-list.component.html b/client/src/app/instance/documentation/components/output-list.component.html
similarity index 100%
rename from client/src/app/instance/doc/components/output-list.component.html
rename to client/src/app/instance/documentation/components/output-list.component.html
diff --git a/client/src/app/instance/doc/components/output-list.component.ts b/client/src/app/instance/documentation/components/output-list.component.ts
similarity index 60%
rename from client/src/app/instance/doc/components/output-list.component.ts
rename to client/src/app/instance/documentation/components/output-list.component.ts
index 9b32769d..9d13b94d 100644
--- a/client/src/app/instance/doc/components/output-list.component.ts
+++ b/client/src/app/instance/documentation/components/output-list.component.ts
@@ -8,14 +8,13 @@
  */
 
 import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
-import { Router } from '@angular/router';
 
-import {Survey, Dataset, Attribute} from 'src/app/metamodel/models';
+import { Attribute } from 'src/app/metamodel/models';
 
 @Component({
     selector: 'app-output-list',
     templateUrl: 'output-list.component.html',
-    styleUrls: ['../doc.component.scss'],
+    styleUrls: ['../documentation.component.scss'],
     changeDetection: ChangeDetectionStrategy.OnPush
 })
 /**
@@ -25,11 +24,4 @@ import {Survey, Dataset, Attribute} from 'src/app/metamodel/models';
 export class OutputListComponent {
     @Input() datasetSelected: string;
     @Input() attributeList: Attribute[];
-
-    // constructor(private router: Router) { }
-    //
-    // selectDataset(datasetName: string) {
-    //     this.router.routeReuseStrategy.shouldReuseRoute = () => false;
-    //     this.router.navigate([`/instance/${this.instanceSelected}/doc/${datasetName}`]);
-    // }
 }
diff --git a/client/src/app/instance/doc/containers/dataset-list.component.html b/client/src/app/instance/documentation/containers/dataset-list.component.html
similarity index 100%
rename from client/src/app/instance/doc/containers/dataset-list.component.html
rename to client/src/app/instance/documentation/containers/dataset-list.component.html
diff --git a/client/src/app/instance/doc/containers/dataset-list.component.ts b/client/src/app/instance/documentation/containers/dataset-list.component.ts
similarity index 85%
rename from client/src/app/instance/doc/containers/dataset-list.component.ts
rename to client/src/app/instance/documentation/containers/dataset-list.component.ts
index 17edd30f..88997f50 100644
--- a/client/src/app/instance/doc/containers/dataset-list.component.ts
+++ b/client/src/app/instance/documentation/containers/dataset-list.component.ts
@@ -15,7 +15,7 @@ import { Observable } from 'rxjs';
 import * as datasetActions from 'src/app/metamodel/actions/dataset.actions';
 import * as datasetFamilySelector from 'src/app/metamodel/selectors/dataset-family.selector';
 import * as datasetSelector from 'src/app/metamodel/selectors/dataset.selector';
-import {Dataset, DatasetFamily, Survey} from 'src/app/metamodel/models';
+import { Dataset, DatasetFamily, Survey } from 'src/app/metamodel/models';
 import { environment } from 'src/environments/environment';
 import * as authSelector from "../../../auth/auth.selector";
 import * as instanceSelector from "../../../metamodel/selectors/instance.selector";
@@ -24,11 +24,11 @@ import * as surveySelector from "../../../metamodel/selectors/survey.selector";
 @Component({
     selector: 'app-dataset-list',
     templateUrl: 'dataset-list.component.html',
-    styleUrls: ['../doc.component.scss']
+    styleUrls: ['../documentation.component.scss']
 })
 /**
  * @class
- * @classdesc Documentation container.
+ * @classdesc Documentation dataset list container.
  *
  * @implements OnInit
  */
@@ -62,17 +62,4 @@ export class DatasetListComponent implements OnInit {
     ngOnInit() {
         this.store.dispatch(datasetActions.loadDatasetList());
     }
-
-    /**
-     * Returns strict url address.
-     *
-     * @return string
-     */
-    getUrlServer(): string {
-        if (!environment.apiUrl.startsWith('http')) {
-            const url = window.location;
-            return url.protocol + '//' + url.host + environment.apiUrl;
-        }
-        return environment.apiUrl;
-    }
 }
diff --git a/client/src/app/instance/documentation/documentation.component.html b/client/src/app/instance/documentation/containers/documentation.component.html
similarity index 78%
rename from client/src/app/instance/documentation/documentation.component.html
rename to client/src/app/instance/documentation/containers/documentation.component.html
index a4af4e81..95e84e96 100644
--- a/client/src/app/instance/documentation/documentation.component.html
+++ b/client/src/app/instance/documentation/containers/documentation.component.html
@@ -1,16 +1,18 @@
 <div class="container">
+    <app-spinner *ngIf="attributeListIsLoading | async"></app-spinner>
+
     <div class="jumbotron">
         <div class="row align-items-center">
             <div class="col-md-12 order-md-1 text-justify text-md-left pr-md-5">
                 <h2 class="mb-3">Export server documentation</h2>
-    
+
                 <h4>URL construction</h4>
                 <p>
                     To request the server, you need to construct a correct URL. Just below you can find the URL schema and a
                     description of mandatory parameters:
                 </p>
                 <code>{{ getUrlServer() }}/search/dataset?a=id_attribute&c=id_attribute::operator::value</code>
-    
+
                 <ul>
                     <li>
                         <code>dataset</code>: dataset in which to search. See datasets section for available datasets.
@@ -20,51 +22,17 @@
                     </li>
                     <blockquote>a=1;2;3</blockquote>
                     <li>
-                        <code>c</code>: criteria list separeted with semicolon. A criterion is defined by an id_attribute,
+                        <code>c</code>: criteria list separated with semicolon. A criterion is defined by an id_attribute,
                         an operator and a value. See operators section for available operators.
                     </li>
                     <blockquote>c=3::eq::ping;2::eq::pong</blockquote>
                 </ul>
-    
-                <h4>Available parameters</h4>
-    
-                <h5>Datasets</h5>
-                <div *ngIf="datasetListIsLoading | async">
-                    <span class="fas fa-circle-notch fa-spin fa-3x"></span>
-                    <span class="sr-only">Loading...</span>
-                </div>
-                <table *ngIf="datasetListIsLoaded | async" id="table">
-                    <tr>
-                        <th>Dataset</th>
-                        <th>Description</th>
-                    </tr>
-                    <tr *ngFor="let dataset of datasetList | async">
-                        <td>{{ dataset.name }}</td>
-                        <td>{{ dataset.description }}</td>
-                    </tr>
-                </table>
-    
-                <!-- <h5>Outputs</h5>
-                <div *ngIf="attributeListsIsLoading | async">
-                    <span class="fas fa-circle-notch fa-spin fa-3x"></span>
-                    <span class="sr-only">Loading...</span>
-                </div>
-                <div *ngIf="attributeListsIsLoaded | async" class="row">
-                    <div *ngFor="let dataset of datasetList | async" class="col-auto mb-5">
-                        <h6>{{ dataset.label }} output list</h6>
-                            <table id="table" class="attributes-table p-0">
-                                <tr>
-                                    <th>id</th>
-                                    <th>attribute</th>
-                                </tr>
-                                <tr *ngFor="let attribute of getAttributeList(dataset.name, attributeList | async)">
-                                    <td>{{ attribute.id }}</td>
-                                    <td>{{ attribute.name }}</td>
-                                </tr>
-                            </table>
-                    </div>
-                </div> -->
-                
+
+                <app-output-list
+                        [datasetSelected]="datasetSelected | async"
+                        [attributeList]="attributeList | async">
+                </app-output-list>
+
                 <h5>Operators</h5>
                 <table id="table">
                     <tr>
@@ -158,7 +126,7 @@
                         <td><code>c=1::js::PrimaryHDU,ID|eq|45</code></td>
                     </tr>
                 </table>
-    
+
                 <h4>Examples</h4>
 
                 We supposed to have the dataset ping with following attributes:
@@ -200,4 +168,8 @@
             </div>
         </div>
     </div>
+
+    <a routerLink='/instance/{{ instanceSelected | async }}/documentation' class="btn btn-outline-secondary mt-3">
+        <span class="fas fa-arrow-left"></span> Return to previous page
+    </a>
 </div>
diff --git a/client/src/app/instance/documentation/documentation.component.ts b/client/src/app/instance/documentation/containers/documentation.component.ts
similarity index 50%
rename from client/src/app/instance/documentation/documentation.component.ts
rename to client/src/app/instance/documentation/containers/documentation.component.ts
index 7a414850..cd48d259 100644
--- a/client/src/app/instance/documentation/documentation.component.ts
+++ b/client/src/app/instance/documentation/containers/documentation.component.ts
@@ -12,15 +12,17 @@ import { Component, OnInit } from '@angular/core';
 import { Store } from '@ngrx/store';
 import { Observable } from 'rxjs';
 
-import * as datasetActions from 'src/app/metamodel/actions/dataset.actions';
+import * as documentationActions from 'src/app/instance/store/actions/documentation.actions';
 import * as datasetSelector from 'src/app/metamodel/selectors/dataset.selector';
-import { Dataset } from 'src/app/metamodel/models';
+import { Attribute } from 'src/app/metamodel/models';
 import { environment } from 'src/environments/environment';
+import * as instanceSelector from "../../../metamodel/selectors/instance.selector";
+import * as attributeSelector from "../../../metamodel/selectors/attribute.selector";
 
 @Component({
     selector: 'app-documentation',
     templateUrl: 'documentation.component.html',
-    styleUrls: ['documentation.component.scss']
+    styleUrls: ['../documentation.component.scss']
 })
 /**
  * @class
@@ -29,18 +31,22 @@ import { environment } from 'src/environments/environment';
  * @implements OnInit
  */
 export class DocumentationComponent implements OnInit {
-    public datasetListIsLoading: Observable<boolean>;
-    public datasetListIsLoaded: Observable<boolean>;
-    public datasetList: Observable<Dataset[]>;
+    public instanceSelected: Observable<string>;
+    public datasetSelected: Observable<string>;
+    public attributeListIsLoading: Observable<boolean>;
+    public attributeListIsLoaded: Observable<boolean>;
+    public attributeList: Observable<Attribute[]>;
 
     constructor(private store: Store<{ }>) {
-        this.datasetListIsLoading = store.select(datasetSelector.selectDatasetListIsLoading);
-        this.datasetListIsLoaded = store.select(datasetSelector.selectDatasetListIsLoaded);
-        this.datasetList = store.select(datasetSelector.selectAllDatasets);
+        this.instanceSelected = store.select(instanceSelector.selectInstanceNameByRoute);
+        this.datasetSelected = store.select(datasetSelector.selectDatasetNameByRoute);
+        this.attributeListIsLoading = store.select(attributeSelector.selectAttributeListIsLoading);
+        this.attributeListIsLoaded = store.select(attributeSelector.selectAttributeListIsLoaded);
+        this.attributeList = store.select(attributeSelector.selectAllAttributes);
     }
 
     ngOnInit() {
-        this.store.dispatch(datasetActions.loadDatasetList());
+        this.store.dispatch(documentationActions.loadAttributeList());
     }
 
     /**
diff --git a/client/src/app/instance/documentation/documentation-routing.module.ts b/client/src/app/instance/documentation/documentation-routing.module.ts
index 87904499..285ad9f8 100644
--- a/client/src/app/instance/documentation/documentation-routing.module.ts
+++ b/client/src/app/instance/documentation/documentation-routing.module.ts
@@ -10,10 +10,12 @@
 import { NgModule } from '@angular/core';
 import { Routes, RouterModule } from '@angular/router';
 
-import { DocumentationComponent } from './documentation.component';
+import { DatasetListComponent } from "./containers/dataset-list.component";
+import { DocumentationComponent } from "./containers/documentation.component";
 
 const routes: Routes = [
-    { path: '', component: DocumentationComponent }
+    { path: '', component: DatasetListComponent },
+    { path: ':dname', component: DocumentationComponent },
 ];
 
 @NgModule({
@@ -23,5 +25,6 @@ const routes: Routes = [
 export class DocumentationRoutingModule { }
 
 export const routedComponents = [
+    DatasetListComponent,
     DocumentationComponent
 ];
diff --git a/client/src/app/instance/documentation/documentation.component.scss b/client/src/app/instance/documentation/documentation.component.scss
index e3c1e5f2..9628a449 100644
--- a/client/src/app/instance/documentation/documentation.component.scss
+++ b/client/src/app/instance/documentation/documentation.component.scss
@@ -7,7 +7,7 @@
  * file that was distributed with this source code.
  */
 
- blockquote {
+blockquote {
     background: #f9f9f9;
     border-left: 10px solid #ccc;
     margin: 1.5em 10px;
diff --git a/client/src/app/instance/documentation/documentation.module.ts b/client/src/app/instance/documentation/documentation.module.ts
index 31a1371d..f1505519 100644
--- a/client/src/app/instance/documentation/documentation.module.ts
+++ b/client/src/app/instance/documentation/documentation.module.ts
@@ -11,12 +11,16 @@ import { NgModule } from '@angular/core';
 
 import { SharedModule } from 'src/app/shared/shared.module';
 import { DocumentationRoutingModule, routedComponents } from './documentation-routing.module';
+import { dummiesComponents } from './components';
 
 @NgModule({
     imports: [
         SharedModule,
         DocumentationRoutingModule
     ],
-    declarations: [routedComponents]
+    declarations: [
+        routedComponents,
+        dummiesComponents
+    ]
 })
 export class DocumentationModule { }
diff --git a/client/src/app/instance/instance-routing.module.ts b/client/src/app/instance/instance-routing.module.ts
index b023c7cf..37baa107 100644
--- a/client/src/app/instance/instance-routing.module.ts
+++ b/client/src/app/instance/instance-routing.module.ts
@@ -18,7 +18,6 @@ const routes: Routes = [
             { path: '', redirectTo: 'home', pathMatch: 'full' },
             { path: 'home', loadChildren: () => import('./home/home.module').then(m => m.HomeModule) },
             { path: 'documentation', loadChildren: () => import('./documentation/documentation.module').then(m => m.DocumentationModule) },
-            { path: 'doc', loadChildren: () => import('./doc/doc.module').then(m => m.DocModule) },
             { path: 'search', loadChildren: () => import('./search/search.module').then(m => m.SearchModule) }
         ]
     }
diff --git a/client/src/app/instance/instance.component.ts b/client/src/app/instance/instance.component.ts
index 96a8223e..15365842 100644
--- a/client/src/app/instance/instance.component.ts
+++ b/client/src/app/instance/instance.component.ts
@@ -30,7 +30,6 @@ export class InstanceComponent implements OnInit {
         { label: 'Search', icon: 'fas fa-search', routerLink: 'search' },
         { label: 'Search multiple', icon: 'fas fa-search-plus', routerLink: 'search-multiple' },
         { label: 'Documentation', icon: 'fas fa-question', routerLink: 'documentation' },
-        { label: 'Doc', icon: 'fas fa-question', routerLink: 'doc' }
     ];
     public isAuthenticated: Observable<boolean>;
     public userProfile: Observable<UserProfile>;
-- 
GitLab