src/app/database/db-selector/db-selector.component.ts
Build selector component
selector | app-db-selector |
styleUrls | db-selector.component.css |
templateUrl | ./db-selector.component.html |
Properties |
|
Methods |
Inputs |
Outputs |
constructor()
|
Create a build selector component |
builds
|
Input builds data
Type: |
profName
|
Input profession name
Type: |
selectedBuildEmit
|
Output selected build and override $event type: EventEmitter
|
getClass |
getClass()
|
Get css class associated to the build
Returns :
any
|
ngOnChanges |
ngOnChanges()
|
Todo on input change
Returns :
void
|
ngOnInit |
ngOnInit()
|
Todo on init
Returns :
void
|
onSelect | ||||||||
onSelect(selectedBuild: literal type)
|
||||||||
On select build event
Parameters :
Returns :
void
|
onSelectOverride | ||||||||
onSelectOverride(selectedOverride: string)
|
||||||||
On select override event
Parameters :
Returns :
void
|
Private filter |
filter:
|
Type : string
|
Default value : ''
|
Search bar filter |
Private selectedBuild |
selectedBuild:
|
Type : literal type
|
Selected build |
Private selectedBuildOverrides |
selectedBuildOverrides:
|
Type : string[]
|
Selected build overrides |
Private selectedOverride |
selectedOverride:
|
Type : string
|
Selected build |
import { Component, OnInit, Input, Output, OnChanges, EventEmitter } from '@angular/core';
import { ProfBuild } from '../../helpers/profBuild';
/**
* Build selector component
*/
@Component({
selector: 'app-db-selector',
templateUrl: './db-selector.component.html',
styleUrls: ['./db-selector.component.css']
})
export class DbSelectorComponent implements OnInit, OnChanges {
/**
* Input builds data
*/
@Input() builds: { name: string, id: string, overrides: string[] }[];
/**
* Input profession name
*/
@Input() profName: string;
/**
* Output selected build and override
*/
@Output() selectedBuildEmit = new EventEmitter<{ name: string, id: string, override: string }>();
/**
* Selected build
*/
private selectedBuild: { name: string, id: string, override: string };
/**
* Selected build overrides
*/
private selectedBuildOverrides: string[];
/**
* Selected build
*/
private selectedOverride: string;
/**
* Search bar filter
*/
private filter = '';
/**
* Create a build selector component
*/
constructor() { }
/**
* Todo on init
*/
ngOnInit() {
this.selectedOverride = 'Main';
}
/**
* Todo on input change
*/
ngOnChanges() {
this.selectedBuild = null;
this.selectedOverride = 'Main';
}
/**
* On select build event
* @param selectedBuild Selected build
*/
onSelect(selectedBuild: { name: string, id: string, overrides: string[] }) {
if (this.selectedBuild && selectedBuild && this.selectedBuild.id === selectedBuild.id) {
return;
}
this.selectedOverride = 'Main';
this.selectedBuild = selectedBuild !== null ?
{ name: selectedBuild.name, id: selectedBuild.id, override: this.selectedOverride } : null;
this.selectedBuildOverrides = selectedBuild !== null ? selectedBuild.overrides : null;
this.selectedBuildEmit.emit(this.selectedBuild);
}
/**
* On select override event
* @param selectedOverride Selected override
*/
onSelectOverride(selectedOverride: string) {
this.selectedOverride = selectedOverride;
this.selectedBuild.override = selectedOverride;
this.selectedBuildEmit.emit(this.selectedBuild);
}
/**
* Get css class associated to the build
*/
getClass() {
const res: any = {};
res[this.profName] = true;
res['my-prof-build'] = true;
res['uk-text-center'] = true;
return res;
}
}
<div *ngIf='builds'>
<div class='uk-flex uk-flex-column uk-margin-large-top uk-margin-large-bottom'>
<div class='uk-flex uk-flex-column '>
<div *ngIf="selectedBuild" (click)="onSelect(null)" [class.selected]="true" [ngClass]='getClass()'>
<span class='my-text-large uk-text-bold'>{{selectedBuild.name}}</span>
</div>
<div *ngIf="!selectedBuild" [class.selected]="true" [ngClass]='getClass()'>
<span class='my-text-large uk-text-bold'>Build sélectionné</span>
</div>
<div class="uk-flex uk-flex-center uk-margin-top">
<div>
<input [(ngModel)]="filter" (click)="onSelect(null)" class="my-search my-search-input uk-text-bold" placeholder="">
</div>
</div>
</div>
<div class="my-scrollable-panel uk-margin-top">
<div class="uk-flex uk-flex-row">
<div class="build-selector">
<div *ngFor="let build of (builds | dbSearch: filter)" (click)="onSelect(build)" [class.selected]="selectedBuild && build.id === selectedBuild.id"
[ngClass]='getClass()'>
<span class='my-text-large uk-text-bold'>{{build.name}}</span>
</div>
</div>
<div *ngIf="selectedBuild" class='variant-selector uk-margin-left'>
<div *ngFor="let override of selectedBuildOverrides" (click)="onSelectOverride(override)" [class.selected]="selectedOverride === override"
[ngClass]='getClass()'>
<span class='my-text-large uk-text-bold'>{{override}}</span>
</div>
</div>
</div>
</div>
</div>
</div>