import { Component, ViewChild, OnInit, Input, AfterContentInit, OnDestroy } from '@angular/core'; import { Router, ActivatedRoute } from '@angular/router'; import { Sensor } from '@overflow/commons-typescript/model/sensor'; import { Infra } from '@overflow/commons-typescript/model/infra'; import { Store, select } from '@ngrx/store'; import { DetailSelector as InfraDetailSelector } from '@overflow/infra/store'; import * as InfraDetailStore from '@overflow/infra/store/detail'; import { Subscription } from 'rxjs/Subscription'; import { RPCClientError } from '@loafer/ng-rpc'; import { sensorListSelector } from '@overflow/sensor/store'; import * as SensorListStore from '@overflow/sensor/store/list'; // import { PageParams, Page } from 'app/commons/model'; import { ModifySelector } from '@overflow/target/store'; import * as TargetModifyStore from '@overflow/target/store/modify'; import { Target } from '@overflow/commons-typescript/model/target'; @Component({ selector: 'of-target-detail', templateUrl: './detail.component.html', }) export class DetailComponent implements OnInit, AfterContentInit, OnDestroy { infraSubscription$: Subscription; infra$ = this.infraDetailStore.pipe(select(InfraDetailSelector.select('infra'))); sensorsSubscription$: Subscription; sensors$ = this.sensorListStore.pipe(select(sensorListSelector.select('page'))); target$ = this.targetModifyStore.pipe(select(ModifySelector.select('target'))); infraId = null; infra: Infra; sensors: Sensor[]; sensorsCount = 0; sensorSettingDisplay = false; pageSize = '10'; totalLength = 0; currPage = 0; constructor( private router: Router, private route: ActivatedRoute, private infraDetailStore: Store, private sensorListStore: Store, private targetModifyStore: Store ) { } ngOnInit() { this.infraSubscription$ = this.infra$.subscribe( (infra: Infra) => { this.infra = infra; }, (error: RPCClientError) => { console.log(error.response.message); } ); // this.sensorsSubscription$ = this.sensors$.subscribe( // (page: Page) => { // if (page) { // this.sensorsCount = page.totalElements; // this.sensors = page.content; // } // }, // (error: RPCClientError) => { // console.log(error.response.message); // } // ); } ngAfterContentInit() { this.infraId = this.route.snapshot.paramMap.get('id'); this.getInfra(); this.getSensors(this.currPage); } ngOnDestroy() { if (this.infraSubscription$) { this.infraSubscription$.unsubscribe(); } } getInfra() { this.infraDetailStore.dispatch( new InfraDetailStore.Read( { id: this.infraId } ) ); } getSensors(pageIndex) { // const pageParams: PageParams = { // pageNo: pageIndex + '', // countPerPage: this.pageSize, // sortCol: 'id', // sortDirection: 'descending' // }; // this.sensorListStore.dispatch( // new SensorListStore.ReadAllByInfra( // { id: this.infraId, pageParams: pageParams } // ) // ); } onAddSensor() { this.sensorSettingDisplay = true; } onSensorSettingClose() { this.sensorSettingDisplay = false; } onPaging(e) { this.getSensors(e.page); } onRowSelect(event) { this.router.navigate(['sensor', event.data.id, 'info']); } onTraceroute() { alert('지원 예정'); } onDisplayNameChange(value: string) { if (value === this.infra.target.displayName) { return; } const target = this.infra.target; target.displayName = value; this.targetModifyStore.dispatch( new TargetModifyStore.Modify(target) ); const modifySuccessSubscription$: Subscription = this.target$.subscribe( (t: Target) => { if (t) { } if (modifySuccessSubscription$) { modifySuccessSubscription$.unsubscribe(); } }, (error: RPCClientError) => { console.log(error); } ); } onDisplayNameChangeKeypress(event, value) { if (event.key === 'Enter') { this.onDisplayNameChange(value); } } }