From 05397eb4f8464b5a06015a3b7c2f7c2a64a64ddf Mon Sep 17 00:00:00 2001
From: FORESTIER Fabien <fabien.forestier@soprasteria.com>
Date: Mon, 26 Mar 2018 10:56:15 +0200
Subject: [PATCH] Create geosource module

---
 readme.md                                     |   4 ++-
 webapp/src/app/app.module.ts                  |   4 +++
 .../components/footer/footer.component.html   |  17 ++++++++--
 .../components/footer/footer.component.scss   |  12 ++++++++
 .../core/components/main/main.component.html  |   8 ++---
 webapp/src/app/core/core-routing.module.ts    |  16 +++++++++-
 .../datasets/datasets.component.html          |   5 +++
 .../datasets/datasets.component.scss          |   0
 .../datasets/datasets.component.spec.ts       |  25 +++++++++++++++
 .../components/datasets/datasets.component.ts |  27 ++++++++++++++++
 .../app/geosource/geosource-routing.module.ts |  11 +++++++
 webapp/src/app/geosource/geosource.module.ts  |  20 ++++++++++++
 .../src/app/geosource/models/dataset.model.ts |  11 +++++++
 webapp/src/app/geosource/models/index.ts      |   1 +
 .../services/dataset.service.spec.ts          |  15 +++++++++
 .../app/geosource/services/dataset.service.ts |  29 ++++++++++++++++++
 webapp/src/app/geosource/services/index.ts    |   7 +++++
 webapp/src/favicon.ico                        | Bin 5430 -> 15086 bytes
 webapp/src/index.html                         |  12 ++++++--
 webapp/src/styles.scss                        |   2 ++
 webapp/src/theming/_all-theme.scss            |   8 ++---
 webapp/src/theming/shared/_loader-theme.scss  |  10 ++++++
 webapp/src/theming/shared/_loader.scss        |  12 ++++++++
 webapp/tslint.json                            |   2 +-
 24 files changed, 241 insertions(+), 17 deletions(-)
 create mode 100644 webapp/src/app/geosource/components/datasets/datasets.component.html
 create mode 100644 webapp/src/app/geosource/components/datasets/datasets.component.scss
 create mode 100644 webapp/src/app/geosource/components/datasets/datasets.component.spec.ts
 create mode 100644 webapp/src/app/geosource/components/datasets/datasets.component.ts
 create mode 100644 webapp/src/app/geosource/geosource-routing.module.ts
 create mode 100644 webapp/src/app/geosource/geosource.module.ts
 create mode 100644 webapp/src/app/geosource/models/dataset.model.ts
 create mode 100644 webapp/src/app/geosource/models/index.ts
 create mode 100644 webapp/src/app/geosource/services/dataset.service.spec.ts
 create mode 100644 webapp/src/app/geosource/services/dataset.service.ts
 create mode 100644 webapp/src/app/geosource/services/index.ts
 create mode 100644 webapp/src/theming/shared/_loader-theme.scss
 create mode 100644 webapp/src/theming/shared/_loader.scss

diff --git a/readme.md b/readme.md
index bb01c206..c161f311 100644
--- a/readme.md
+++ b/readme.md
@@ -65,4 +65,6 @@ Clean what you don't need: keep bootstrap-grid.scss with the files & folders imp
     @import "utilities/display";
     @import "utilities/flex";
 
-Import the bootrap-grid.scss in your style.scss
+Import the bootrap-grid.scss in your style.scss as following:
+
+`@import '~scss/bootstrap-grid.scss';`
diff --git a/webapp/src/app/app.module.ts b/webapp/src/app/app.module.ts
index 2d9e72fb..fe0fb589 100644
--- a/webapp/src/app/app.module.ts
+++ b/webapp/src/app/app.module.ts
@@ -1,12 +1,14 @@
 import { BrowserModule } from '@angular/platform-browser';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
 import { NgModule } from '@angular/core';
+import { HttpClientModule } from '@angular/common/http';
 
 import { AppMaterialModule } from './app.material.module';
 
 import { AppComponent } from './app.component';
 import { AppRoutingModule } from './app-routing.module';
 import { CoreModule } from './core/core.module';
+import { GeosourceModule } from './geosource/geosource.module';
 
 
 @NgModule({
@@ -16,8 +18,10 @@ import { CoreModule } from './core/core.module';
   imports: [
     BrowserModule,
     BrowserAnimationsModule,
+    HttpClientModule,
     AppMaterialModule,
     CoreModule,
+    GeosourceModule,
     AppRoutingModule
   ],
   providers: [],
diff --git a/webapp/src/app/core/components/footer/footer.component.html b/webapp/src/app/core/components/footer/footer.component.html
index 6800e0eb..797c90ef 100644
--- a/webapp/src/app/core/components/footer/footer.component.html
+++ b/webapp/src/app/core/components/footer/footer.component.html
@@ -1,3 +1,14 @@
-<p>
-  footer works!
-</p>
+<div class="container">
+  <div class="row">
+    <div class="col-sm-10">
+      <a routerLink="/app">CONDITIONS GÉNÉRALES D’UTILISATION</a>
+      <a class="left-border" routerLink="/app">MENTIONS LÉGALES</a>
+      <a class="left-border" routerLink="/app">CONTACT</a>
+      <a class="left-border" routerLink="/app">PLAN DU SITE</a>
+    </div>
+
+    <div class="col-sm-2 footer-logo" >
+      <img src="./assets/img/logo.svg" height="25px" alt="" >
+    </div>
+  </div>
+</div>
\ No newline at end of file
diff --git a/webapp/src/app/core/components/footer/footer.component.scss b/webapp/src/app/core/components/footer/footer.component.scss
index e69de29b..24d90af5 100644
--- a/webapp/src/app/core/components/footer/footer.component.scss
+++ b/webapp/src/app/core/components/footer/footer.component.scss
@@ -0,0 +1,12 @@
+@import '~@angular/material/theming';
+
+.footer-logo {
+  text-align: right;
+}
+
+.left-border {
+  border-left: 2px solid black;
+  padding-left: 10px;
+  margin-left: 5px;
+}
+
diff --git a/webapp/src/app/core/components/main/main.component.html b/webapp/src/app/core/components/main/main.component.html
index bfa5088f..068953fb 100644
--- a/webapp/src/app/core/components/main/main.component.html
+++ b/webapp/src/app/core/components/main/main.component.html
@@ -1,9 +1,7 @@
 <app-header></app-header>
 
-<div class="container-fluid">
-  <p>
-    main works!
-  </p>
+<div class="container">
+  <router-outlet></router-outlet>
 </div>
 
-<app-footer></app-footer>
+<app-footer></app-footer>
\ No newline at end of file
diff --git a/webapp/src/app/core/core-routing.module.ts b/webapp/src/app/core/core-routing.module.ts
index 90928dee..92b0fd24 100644
--- a/webapp/src/app/core/core-routing.module.ts
+++ b/webapp/src/app/core/core-routing.module.ts
@@ -1,9 +1,23 @@
 import { NgModule } from '@angular/core';
 import { Routes, RouterModule } from '@angular/router';
 import { MainComponent } from './components/main/main.component';
+import { DatasetsComponent } from '../geosource/components/datasets/datasets.component';
 
 const routes: Routes = [
-  { path: 'app', component: MainComponent }
+  {
+    path: 'app',
+    component: MainComponent,
+    children: [
+      {
+        path: '',
+        redirectTo: 'geosource',
+        pathMatch: 'full'
+      },
+      {
+        path: 'geosource',
+        component: DatasetsComponent
+      }
+    ]}
 ];
 
 @NgModule({
diff --git a/webapp/src/app/geosource/components/datasets/datasets.component.html b/webapp/src/app/geosource/components/datasets/datasets.component.html
new file mode 100644
index 00000000..153e25d5
--- /dev/null
+++ b/webapp/src/app/geosource/components/datasets/datasets.component.html
@@ -0,0 +1,5 @@
+<div class="row">
+  <mat-card *ngFor="let dataset of datasets" class="col-md-6">
+    {{ dataset.title }}
+  </mat-card>
+</div>
\ No newline at end of file
diff --git a/webapp/src/app/geosource/components/datasets/datasets.component.scss b/webapp/src/app/geosource/components/datasets/datasets.component.scss
new file mode 100644
index 00000000..e69de29b
diff --git a/webapp/src/app/geosource/components/datasets/datasets.component.spec.ts b/webapp/src/app/geosource/components/datasets/datasets.component.spec.ts
new file mode 100644
index 00000000..8fdfa872
--- /dev/null
+++ b/webapp/src/app/geosource/components/datasets/datasets.component.spec.ts
@@ -0,0 +1,25 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { DatasetsComponent } from './datasets.component';
+
+describe('DatasetsComponent', () => {
+  let component: DatasetsComponent;
+  let fixture: ComponentFixture<DatasetsComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [ DatasetsComponent ]
+    })
+    .compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(DatasetsComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/webapp/src/app/geosource/components/datasets/datasets.component.ts b/webapp/src/app/geosource/components/datasets/datasets.component.ts
new file mode 100644
index 00000000..594e5f72
--- /dev/null
+++ b/webapp/src/app/geosource/components/datasets/datasets.component.ts
@@ -0,0 +1,27 @@
+import { Component, OnInit } from '@angular/core';
+import { DatasetService } from '../../services/dataset.service';
+import { Dataset } from '../../models';
+
+@Component({
+  selector: 'app-datasets',
+  templateUrl: './datasets.component.html',
+  styleUrls: ['./datasets.component.scss']
+})
+export class DatasetsComponent implements OnInit {
+
+  datasets: Array<Dataset>;
+
+  constructor(
+    private datasetService: DatasetService
+  ) { }
+
+  ngOnInit() {
+    this.datasetService.getDatasets().subscribe(
+      (res) => {
+        this.datasets = res;
+      }, (err) => {
+
+      });
+  }
+
+}
diff --git a/webapp/src/app/geosource/geosource-routing.module.ts b/webapp/src/app/geosource/geosource-routing.module.ts
new file mode 100644
index 00000000..07772e3f
--- /dev/null
+++ b/webapp/src/app/geosource/geosource-routing.module.ts
@@ -0,0 +1,11 @@
+import { NgModule } from '@angular/core';
+import { Routes, RouterModule } from '@angular/router';
+import { DatasetsComponent } from './components/datasets/datasets.component';
+
+const routes: Routes = [];
+
+@NgModule({
+  imports: [RouterModule.forChild(routes)],
+  exports: [RouterModule]
+})
+export class GeosourceRoutingModule { }
diff --git a/webapp/src/app/geosource/geosource.module.ts b/webapp/src/app/geosource/geosource.module.ts
new file mode 100644
index 00000000..ee7201ab
--- /dev/null
+++ b/webapp/src/app/geosource/geosource.module.ts
@@ -0,0 +1,20 @@
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+
+import { GeosourceRoutingModule } from './geosource-routing.module';
+import { DatasetsComponent } from './components/datasets/datasets.component';
+import { GeosourceServices } from './services';
+import { AppMaterialModule } from '../app.material.module';
+
+@NgModule({
+  imports: [
+    CommonModule,
+    GeosourceRoutingModule,
+    AppMaterialModule
+  ],
+  declarations: [DatasetsComponent],
+  providers: [
+    ...GeosourceServices
+  ]
+})
+export class GeosourceModule { }
diff --git a/webapp/src/app/geosource/models/dataset.model.ts b/webapp/src/app/geosource/models/dataset.model.ts
new file mode 100644
index 00000000..ed65e8c7
--- /dev/null
+++ b/webapp/src/app/geosource/models/dataset.model.ts
@@ -0,0 +1,11 @@
+export interface DatasetInterface {
+  'title': string;
+}
+
+export class Dataset {
+  'title': string;
+
+  constructor(data?: DatasetInterface) {
+    Object.assign(this, data);
+  }
+}
diff --git a/webapp/src/app/geosource/models/index.ts b/webapp/src/app/geosource/models/index.ts
new file mode 100644
index 00000000..60c33076
--- /dev/null
+++ b/webapp/src/app/geosource/models/index.ts
@@ -0,0 +1 @@
+export * from './dataset.model';
diff --git a/webapp/src/app/geosource/services/dataset.service.spec.ts b/webapp/src/app/geosource/services/dataset.service.spec.ts
new file mode 100644
index 00000000..64c3f063
--- /dev/null
+++ b/webapp/src/app/geosource/services/dataset.service.spec.ts
@@ -0,0 +1,15 @@
+import { TestBed, inject } from '@angular/core/testing';
+
+import { DatasetService } from './dataset.service';
+
+describe('DatasetService', () => {
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      providers: [DatasetService]
+    });
+  });
+
+  it('should be created', inject([DatasetService], (service: DatasetService) => {
+    expect(service).toBeTruthy();
+  }));
+});
diff --git a/webapp/src/app/geosource/services/dataset.service.ts b/webapp/src/app/geosource/services/dataset.service.ts
new file mode 100644
index 00000000..c2726b08
--- /dev/null
+++ b/webapp/src/app/geosource/services/dataset.service.ts
@@ -0,0 +1,29 @@
+import { Injectable } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { Dataset } from '../models';
+import { Observable } from 'rxjs/Observable';
+
+// To be removed when using real api
+import 'rxjs/add/observable/of';
+
+@Injectable()
+export class DatasetService {
+
+  constructor(
+    private http: HttpClient
+  ) { }
+
+  getDatasets(): Observable<Array<Dataset>> {
+    // return this.http.request<Dataset>('GET', 'https://elastic2.recette.data.grandlyon.com/elastic/*.meta/_search?pretty', {
+    //   body: {
+    //     'query': {
+    //       'query_string': { 'query': '*', 'fuzziness': 0 }
+    //     }
+    //   }
+    // });
+    let a = new Array<Dataset>();
+    a = [{'title': 'Velov'}, {'title': 'Velov'}];
+    return Observable.of(a);
+  }
+
+}
diff --git a/webapp/src/app/geosource/services/index.ts b/webapp/src/app/geosource/services/index.ts
new file mode 100644
index 00000000..9e482ccb
--- /dev/null
+++ b/webapp/src/app/geosource/services/index.ts
@@ -0,0 +1,7 @@
+import { DatasetService } from './dataset.service';
+
+export * from './dataset.service';
+
+export const GeosourceServices = [
+  DatasetService
+];
\ No newline at end of file
diff --git a/webapp/src/favicon.ico b/webapp/src/favicon.ico
index 8081c7ceaf2be08bf59010158c586170d9d2d517..5619a8f1cf3db720725e00d80636e23de406e8de 100644
GIT binary patch
literal 15086
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
bMpie<CO-rqW2~U@Rvh>b4sr0<ECT}oShyQF

literal 5430
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

diff --git a/webapp/src/index.html b/webapp/src/index.html
index 7f7cdaad..19bf6b53 100644
--- a/webapp/src/index.html
+++ b/webapp/src/index.html
@@ -1,5 +1,6 @@
 <!doctype html>
 <html lang="en">
+
 <head>
   <meta charset="utf-8">
   <title>Webapp</title>
@@ -8,7 +9,14 @@
   <meta name="viewport" content="width=device-width, initial-scale=1">
   <link rel="icon" type="image/x-icon" href="favicon.ico">
 </head>
+
 <body>
-  <app-root></app-root>
+  <app-root>
+    <section class="AppLoader">
+      <img src="assets/img/logo.svg" alt="Grand Lyon, la métropole"> 
+      
+    </section>
+  </app-root>
 </body>
-</html>
+
+</html>
\ No newline at end of file
diff --git a/webapp/src/styles.scss b/webapp/src/styles.scss
index df64f3c4..049daecb 100644
--- a/webapp/src/styles.scss
+++ b/webapp/src/styles.scss
@@ -10,6 +10,8 @@ body {
   height: 100%;
 }
 
+@import "~theming/shared/loader";
+
 h1, h2, h3 {
   font-size: 2em;
   font-weight: 700;
diff --git a/webapp/src/theming/_all-theme.scss b/webapp/src/theming/_all-theme.scss
index 50310d03..d7f8f192 100644
--- a/webapp/src/theming/_all-theme.scss
+++ b/webapp/src/theming/_all-theme.scss
@@ -6,14 +6,14 @@
 // Theming des éléments transverses
 
 // @import "shared/form-theme";
-// @import "shared/loader-theme";
+@import "shared/loader-theme";
 // @import "shared/table-theme";
 
-// @mixin app-shared-theme($theme) {
+@mixin app-shared-theme($theme) {
 //   @include app-shared-form-theme($theme);
-//   @include app-shared-loader-theme($theme);
+  @include app-shared-loader-theme($theme);
 //   @include app-shared-table-theme($theme);
-// }
+}
 
 // // Theming des composants Angular
 
diff --git a/webapp/src/theming/shared/_loader-theme.scss b/webapp/src/theming/shared/_loader-theme.scss
new file mode 100644
index 00000000..51e5fa01
--- /dev/null
+++ b/webapp/src/theming/shared/_loader-theme.scss
@@ -0,0 +1,10 @@
+@import '~@angular/material/theming';
+
+@mixin app-shared-loader-theme($theme) {
+  $background: map-get($theme, background);
+
+  .AppLoader {
+    background: mat-color($background, background);
+  }
+}
+
diff --git a/webapp/src/theming/shared/_loader.scss b/webapp/src/theming/shared/_loader.scss
new file mode 100644
index 00000000..f0256fc7
--- /dev/null
+++ b/webapp/src/theming/shared/_loader.scss
@@ -0,0 +1,12 @@
+.AppLoader {
+  display:flex;
+  align-items: center;
+  justify-content: center;
+  height:100vh;
+  img {
+    margin-left: 0px;
+    width: 70%;
+    text-align: center;
+  }
+}
+
diff --git a/webapp/tslint.json b/webapp/tslint.json
index 9963d6c3..3dc3ff9e 100644
--- a/webapp/tslint.json
+++ b/webapp/tslint.json
@@ -29,7 +29,7 @@
     "interface-over-type-literal": true,
     "label-position": true,
     "max-line-length": [
-      true,
+      false,
       140
     ],
     "member-access": false,
-- 
GitLab