rb-table, samples table
This commit is contained in:
		@@ -7,13 +7,15 @@ import {LocalStorageService} from 'angular-2-local-storage';
 | 
			
		||||
})
 | 
			
		||||
export class ApiService {
 | 
			
		||||
 | 
			
		||||
  private host = '/api';
 | 
			
		||||
 | 
			
		||||
  constructor(
 | 
			
		||||
    private http: HttpClient,
 | 
			
		||||
    private storage: LocalStorageService
 | 
			
		||||
  ) { }
 | 
			
		||||
 | 
			
		||||
  get(url) {
 | 
			
		||||
    return this.http.get(url, this.authOptions());
 | 
			
		||||
    return this.http.get(this.host + url, this.authOptions());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private authOptions() {
 | 
			
		||||
 
 | 
			
		||||
@@ -7,6 +7,7 @@ import {SamplesComponent} from './samples/samples.component';
 | 
			
		||||
 | 
			
		||||
const routes: Routes = [
 | 
			
		||||
  {path: '', component: HomeComponent},
 | 
			
		||||
  {path: 'home', component: HomeComponent},
 | 
			
		||||
  {path: 'samples', component: SamplesComponent},
 | 
			
		||||
  {path: 'replace-me', component: HomeComponent, canActivate: [LoginService]},
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<rb-full-header>
 | 
			
		||||
  <nav *rbMainNavItems>
 | 
			
		||||
    <a routerLink="/" routerLinkActive="active" rbLoadingLink>Home</a>
 | 
			
		||||
    <a routerLink="/samples" routerLinkActive="active" rbLoadingLink>Samples</a>
 | 
			
		||||
    <a routerLink="/home" routerLinkActive="active" rbLoadingLink>Home</a>
 | 
			
		||||
    <a routerLink="/samples" routerLinkActive="active" rbLoadingLink *ngIf="loginService.canActivate()">Samples</a>
 | 
			
		||||
  </nav>
 | 
			
		||||
  <div *rbSubBrandHeader>Digital Fingerprint of Plastics</div>
 | 
			
		||||
</rb-full-header>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
import { Component } from '@angular/core';
 | 
			
		||||
import {LoginService} from './login.service';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-root',
 | 
			
		||||
@@ -6,4 +7,9 @@ import { Component } from '@angular/core';
 | 
			
		||||
  styleUrls: ['./app.component.scss']
 | 
			
		||||
})
 | 
			
		||||
export class AppComponent {
 | 
			
		||||
 | 
			
		||||
  constructor(
 | 
			
		||||
    public loginService: LoginService
 | 
			
		||||
  ) {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ import {FormsModule} from '@angular/forms';
 | 
			
		||||
import {LocalStorageModule} from 'angular-2-local-storage';
 | 
			
		||||
import {HttpClientModule} from '@angular/common/http';
 | 
			
		||||
import { SamplesComponent } from './samples/samples.component';
 | 
			
		||||
import {RbTableModule} from './rb-table/rb-table.module';
 | 
			
		||||
 | 
			
		||||
@NgModule({
 | 
			
		||||
  declarations: [
 | 
			
		||||
@@ -27,7 +28,8 @@ import { SamplesComponent } from './samples/samples.component';
 | 
			
		||||
    AppRoutingModule,
 | 
			
		||||
    RbUiComponentsModule,
 | 
			
		||||
    FormsModule,
 | 
			
		||||
    HttpClientModule
 | 
			
		||||
    HttpClientModule,
 | 
			
		||||
    RbTableModule
 | 
			
		||||
  ],
 | 
			
		||||
  providers: [],
 | 
			
		||||
  bootstrap: [AppComponent]
 | 
			
		||||
 
 | 
			
		||||
@@ -13,11 +13,15 @@ export class LoginService implements CanActivate {
 | 
			
		||||
  constructor(
 | 
			
		||||
    private api: ApiService,
 | 
			
		||||
    private storage: LocalStorageService
 | 
			
		||||
  ) { }
 | 
			
		||||
  ) {
 | 
			
		||||
    this.login();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  login(username, password) {
 | 
			
		||||
  login(username = '', password = '') {
 | 
			
		||||
    return new Promise(resolve => {
 | 
			
		||||
      this.storage.set('basicAuth', btoa(username + ':' + password));
 | 
			
		||||
      if (username !== '') {
 | 
			
		||||
        this.storage.set('basicAuth', btoa(username + ':' + password));
 | 
			
		||||
      }
 | 
			
		||||
      this.api.get('/authorized').subscribe((data: any) => {
 | 
			
		||||
          if (data.status === 'Authorization successful') {
 | 
			
		||||
            this.loggedIn = true;
 | 
			
		||||
@@ -37,7 +41,7 @@ export class LoginService implements CanActivate {
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
 | 
			
		||||
  canActivate(route: ActivatedRouteSnapshot = null, state: RouterStateSnapshot = null) {
 | 
			
		||||
    return this.loggedIn;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,10 @@
 | 
			
		||||
<div class="login-wrapper">
 | 
			
		||||
  <h2>Please log in</h2>
 | 
			
		||||
 | 
			
		||||
  <rb-form-input name="username" label="username" [(ngModel)]="username"></rb-form-input>
 | 
			
		||||
  <rb-form-input type="password" name="password" label="password" [(ngModel)]="password"></rb-form-input>
 | 
			
		||||
  <span class="message">{{message}}</span>
 | 
			
		||||
  <button class="rb-btn rb-primary login-button" (click)="login()">Login</button>
 | 
			
		||||
  <form>
 | 
			
		||||
    <rb-form-input name="username" label="username" [(ngModel)]="username"></rb-form-input>
 | 
			
		||||
    <rb-form-input type="password" name="password" label="password" [(ngModel)]="password"></rb-form-input>
 | 
			
		||||
    <span class="message">{{message}}</span>
 | 
			
		||||
    <button class="rb-btn rb-primary login-button" (click)="login()" type="submit">Login</button>
 | 
			
		||||
  </form>
 | 
			
		||||
</div>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								src/app/rb-table/rb-table.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/app/rb-table/rb-table.module.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
import { NgModule } from '@angular/core';
 | 
			
		||||
import { CommonModule } from '@angular/common';
 | 
			
		||||
import { RbTableComponent } from './rb-table/rb-table.component';
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@NgModule({
 | 
			
		||||
  declarations: [
 | 
			
		||||
    RbTableComponent
 | 
			
		||||
  ],
 | 
			
		||||
  imports: [
 | 
			
		||||
    CommonModule
 | 
			
		||||
  ],
 | 
			
		||||
  exports: [
 | 
			
		||||
    RbTableComponent
 | 
			
		||||
  ]
 | 
			
		||||
})
 | 
			
		||||
export class RbTableModule { }
 | 
			
		||||
							
								
								
									
										3
									
								
								src/app/rb-table/rb-table/rb-table.component.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								src/app/rb-table/rb-table/rb-table.component.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
<table>
 | 
			
		||||
  <ng-content></ng-content>
 | 
			
		||||
</table>
 | 
			
		||||
							
								
								
									
										20
									
								
								src/app/rb-table/rb-table/rb-table.component.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/app/rb-table/rb-table/rb-table.component.scss
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
@import "~@inst-iot/bosch-angular-ui-components/styles/variables/colors";
 | 
			
		||||
 | 
			
		||||
table {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  border-collapse: collapse;
 | 
			
		||||
 | 
			
		||||
  ::ng-deep tr {
 | 
			
		||||
    border-bottom: 1px solid $color-gray-mercury;
 | 
			
		||||
 | 
			
		||||
    ::ng-deep td, ::ng-deep th {
 | 
			
		||||
      padding: 8px 5px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    ::ng-deep th {
 | 
			
		||||
      text-align: left;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										25
									
								
								src/app/rb-table/rb-table/rb-table.component.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/app/rb-table/rb-table/rb-table.component.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
 | 
			
		||||
 | 
			
		||||
import { RbTableComponent } from './rb-table.component';
 | 
			
		||||
 | 
			
		||||
describe('RbTableComponent', () => {
 | 
			
		||||
  let component: RbTableComponent;
 | 
			
		||||
  let fixture: ComponentFixture<RbTableComponent>;
 | 
			
		||||
 | 
			
		||||
  beforeEach(async(() => {
 | 
			
		||||
    TestBed.configureTestingModule({
 | 
			
		||||
      declarations: [ RbTableComponent ]
 | 
			
		||||
    })
 | 
			
		||||
    .compileComponents();
 | 
			
		||||
  }));
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    fixture = TestBed.createComponent(RbTableComponent);
 | 
			
		||||
    component = fixture.componentInstance;
 | 
			
		||||
    fixture.detectChanges();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should create', () => {
 | 
			
		||||
    expect(component).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										15
									
								
								src/app/rb-table/rb-table/rb-table.component.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/app/rb-table/rb-table/rb-table.component.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
import { Component, OnInit } from '@angular/core';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'rb-table',
 | 
			
		||||
  templateUrl: './rb-table.component.html',
 | 
			
		||||
  styleUrls: ['./rb-table.component.scss']
 | 
			
		||||
})
 | 
			
		||||
export class RbTableComponent implements OnInit {
 | 
			
		||||
 | 
			
		||||
  constructor() { }
 | 
			
		||||
 | 
			
		||||
  ngOnInit(): void {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -1 +1,41 @@
 | 
			
		||||
<p>samples works!</p>
 | 
			
		||||
<div class="header-addnew">
 | 
			
		||||
  <h2>Samples</h2>
 | 
			
		||||
  <button class="rb-btn rb-primary"><span class="rb-ic rb-ic-add"></span>  New sample</button>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<rb-accordion>
 | 
			
		||||
  <rb-accordion-title><span class="rb-ic rb-ic-filter"></span>  Filter</rb-accordion-title>
 | 
			
		||||
  <rb-accordion-body>
 | 
			
		||||
    Not implemented (yet)
 | 
			
		||||
  </rb-accordion-body>
 | 
			
		||||
</rb-accordion>
 | 
			
		||||
 | 
			
		||||
<rb-table>
 | 
			
		||||
  <tr>
 | 
			
		||||
    <th>Number</th>
 | 
			
		||||
    <th>Material number</th>
 | 
			
		||||
    <th>Material name</th>
 | 
			
		||||
    <th>Supplier</th>
 | 
			
		||||
    <th>Material</th>
 | 
			
		||||
    <th>GF</th>
 | 
			
		||||
    <th>CF</th>
 | 
			
		||||
    <th>M</th>
 | 
			
		||||
    <th>type</th>
 | 
			
		||||
    <th>Color</th>
 | 
			
		||||
    <th>Batch</th>
 | 
			
		||||
  </tr>
 | 
			
		||||
 | 
			
		||||
  <tr *ngFor="let sample of samples">
 | 
			
		||||
    <td>{{sample.number}}</td>
 | 
			
		||||
    <td>{{sample.material_number}}</td>
 | 
			
		||||
    <td>{{materials[sample.material_id].name}}</td>
 | 
			
		||||
    <td>{{materials[sample.material_id].supplier}}</td>
 | 
			
		||||
    <td>{{materials[sample.material_id].group}}</td>
 | 
			
		||||
    <td>{{materials[sample.material_id].glass_fiber}}</td>
 | 
			
		||||
    <td>{{materials[sample.material_id].carbon_fiber}}</td>
 | 
			
		||||
    <td>{{materials[sample.material_id].mineral}}</td>
 | 
			
		||||
    <td>{{sample.type}}</td>
 | 
			
		||||
    <td>{{sample.color}}</td>
 | 
			
		||||
    <td>{{sample.batch}}</td>
 | 
			
		||||
  </tr>
 | 
			
		||||
</rb-table>
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,13 @@
 | 
			
		||||
.header-addnew {
 | 
			
		||||
  margin-bottom: 40px;
 | 
			
		||||
 | 
			
		||||
  & > * {
 | 
			
		||||
    display: inline;
 | 
			
		||||
    margin-bottom: 10px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  button {
 | 
			
		||||
    float: right;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,35 @@
 | 
			
		||||
import { Component, OnInit } from '@angular/core';
 | 
			
		||||
import {ApiService} from '../api.service';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-samples',
 | 
			
		||||
  templateUrl: './samples.component.html',
 | 
			
		||||
  styleUrls: ['./samples.component.scss']
 | 
			
		||||
})
 | 
			
		||||
export class SamplesComponent implements OnInit {
 | 
			
		||||
export class SamplesComponent implements OnInit {  // TODO: implement paging
 | 
			
		||||
 | 
			
		||||
  constructor() { }
 | 
			
		||||
  materials = {};
 | 
			
		||||
  samples = [];
 | 
			
		||||
 | 
			
		||||
  constructor(
 | 
			
		||||
    private api: ApiService
 | 
			
		||||
  ) { }
 | 
			
		||||
 | 
			
		||||
  ngOnInit(): void {
 | 
			
		||||
    this.api.get('/materials').subscribe((mData: any) => {
 | 
			
		||||
      this.materials = {};
 | 
			
		||||
      mData.forEach(material => {
 | 
			
		||||
        this.materials[material._id] = material;
 | 
			
		||||
      });
 | 
			
		||||
      console.log(this.materials);
 | 
			
		||||
      this.api.get('/samples').subscribe(sData => {
 | 
			
		||||
        console.log(sData);
 | 
			
		||||
        this.samples = sData as any;
 | 
			
		||||
        this.samples.forEach(sample => {
 | 
			
		||||
          sample.material_number = this.materials[sample.material_id].numbers.find(e => sample.color === e.color).number;
 | 
			
		||||
        });
 | 
			
		||||
      });
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user