This commit is contained in:
insanity 2018-03-23 17:34:57 +09:00
parent 07b2d08483
commit 9e571f6fed
11 changed files with 96 additions and 110 deletions

View File

@ -17,36 +17,36 @@
</div> </div>
</div> </div>
<!-- target 별 sensor list -->
<div fxFlex="80%" class="example-container mat-elevation-z8"> <div fxFlex="80%" class="example-container mat-elevation-z8">
<div fxLayout="row" > <div fxLayout="row">
<div fxFlex="20">aaaaaaaaaaaaaaaaaaa</div>
<div fxFlex="80">
<mat-table #table [dataSource]="dataSource" matSort> <mat-table #table [dataSource]="dataSource" matSort>
<ng-container matColumnDef="status"> <ng-container matColumnDef="target">
<mat-header-cell *matHeaderCellDef mat-sort-header> Status </mat-header-cell> <mat-header-cell *matHeaderCellDef mat-sort-header> Target </mat-header-cell>
<mat-cell *matCellDef="let element"> ? </mat-cell>
</ng-container>
<ng-container matColumnDef="type">
<mat-header-cell *matHeaderCellDef mat-sort-header> Type </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.infraType.name}} </mat-cell>
</ng-container>
<ng-container matColumnDef="name">
<mat-header-cell *matHeaderCellDef mat-sort-header> Name </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.target.displayName}} </mat-cell> <mat-cell *matCellDef="let element"> {{element.target.displayName}} </mat-cell>
</ng-container> </ng-container>
<ng-container matColumnDef="sensors"> <ng-container matColumnDef="crawler">
<mat-header-cell *matHeaderCellDef mat-sort-header> Sensors </mat-header-cell> <mat-header-cell *matHeaderCellDef mat-sort-header> Crawler </mat-header-cell>
<mat-cell *matCellDef="let element"> ? </mat-cell> <mat-cell *matCellDef="let element"> {{element.crawler.name}} </mat-cell>
</ng-container>
<ng-container matColumnDef="itemCount">
<mat-header-cell *matHeaderCellDef mat-sort-header> Items </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.itemCount}} </mat-cell>
</ng-container>
<ng-container matColumnDef="status">
<mat-header-cell *matHeaderCellDef mat-sort-header> Status </mat-header-cell>
<mat-cell *matCellDef="let element"> {{element.status.name}} </mat-cell>
</ng-container> </ng-container>
<mat-row *matRowDef="let row; columns: displayedColumns;" (click)="handleRowClick(row)"></mat-row> <mat-row *matRowDef="let row; columns: displayedColumns;" (click)="handleRowClick(row)"></mat-row>
</mat-table> </mat-table>
<mat-paginator #paginator [length]="totalLength" [pageIndex]="0" [pageSize]="PAGE_SIZE" (page)="handlePaging($event)">
</mat-paginator>
</div> </div>
</div> </div>

View File

@ -9,10 +9,12 @@ import { Store, select } from '@ngrx/store';
import * as SensorStore from '../../store'; import * as SensorStore from '../../store';
import { RPCError } from 'packages/core/rpc/error'; import { RPCError } from 'packages/core/rpc/error';
import * as ReadAllByDomainStore from '../../store/readallbydomain'; import * as ListStore from '../../store/list';
import { ReadAllByMemberSelector } from '../../store'; import { sensorListSelector } from '../../store';
import { Domain } from '../../../domain/model'; import { Domain } from '../../../domain/model';
import { SettingComponent } from '../setting/setting.component'; import { SettingComponent } from '../setting/setting.component';
import { AuthSelector } from 'packages/member/store';
import { Page, PageParams } from 'app/commons/model';
@Component({ @Component({
selector: 'of-sensor-list', selector: 'of-sensor-list',
@ -21,75 +23,58 @@ import { SettingComponent } from '../setting/setting.component';
}) })
export class ListComponent implements OnInit, AfterContentInit { export class ListComponent implements OnInit, AfterContentInit {
sensorList$ = this.store.pipe(select(ReadAllByMemberSelector.select('sensorList'))); sensorList$ = this.store.pipe(select(sensorListSelector.select('page')));
displayedColumns = ['crawler', 'type', 'name', 'sensors']; displayedColumns = ['target', 'crawler', 'itemCount', 'status'];
dataSource: MatTableDataSource<Sensor>; dataSource: MatTableDataSource<Sensor>;
@ViewChild(MatSort) sort: MatSort; @ViewChild(MatSort) sort: MatSort;
PAGE_SIZE = '10';
totalLength = 0;
/** constructor(private router: Router,
* Set the sort after the view init since this component will private store: Store<ListStore.State>,
* be able to query its view for the initialized sort. private dialog: MatDialog,
*/ ) { }
ngAfterContentInit() {
// temporary data
// const data: Sensor[] = new Array();
// for (let i = 0; i < 3; i++) {
// const t: Sensor = {
// id: i,
// target: {
// id: 1,
// displayName: '192.168.1.1',
// },
// crawler: {
// id: 1,
// name: 'WMI'
// },
// };
// data.push(t);
// }
this.store.select(ReadAllByMemberSelector.select('domain')).subscribe(
(domain: Domain) => {
this.store.dispatch(new ReadAllByDomainStore.ReadAllByDomain(domain));
},
(error) => {
console.log(error);
}
);
// const domain: Domain = {
// id: 1
// };
// this.store.dispatch(new ReadAllByDomainStore.ReadAllByDomain(domain));
ngOnInit() {
this.sensorList$.subscribe( this.sensorList$.subscribe(
(probes: Sensor[]) => { (page: Page) => {
console.log(probes); if (page != null) {
this.dataSource = new MatTableDataSource(probes); this.totalLength = page.totalElements;
this.dataSource = new MatTableDataSource(page.content);
this.dataSource.sort = this.sort; this.dataSource.sort = this.sort;
}
}, },
(error: RPCError) => { (error: RPCError) => {
console.log(error.response.message); console.log(error.response.message);
} }
); );
// this.dataSource = new MatTableDataSource(data);
// this.dataSource.sort = this.sort;
} }
constructor(private router: Router, ngAfterContentInit() {
private store: Store<ReadAllByDomainStore.State>, this.getSensors(0);
private dialog: MatDialog, }
) { }
ngOnInit() { getSensors(pageIndex: number) {
this.store.select(AuthSelector.select('domain')).subscribe(
(domain: Domain) => {
const pageParams: PageParams = {
pageNo: pageIndex + '',
countPerPage: this.PAGE_SIZE,
sortCol: 'id',
sortDirection: 'descending'
};
this.store.dispatch(new ListStore.ReadAllByDomain({ domain, pageParams }));
},
(error) => {
console.log(error);
}
);
} }
handleRowClick(obj: Sensor) { handleRowClick(obj: Sensor) {
this.router.navigate(['target', obj.id]); // this.router.navigate(['target', obj.id]);
} }
addSensor() { addSensor() {

View File

@ -5,8 +5,8 @@ import 'rxjs/add/operator/map';
import { RPCClient } from 'packages/core/rpc/client/RPCClient'; import { RPCClient } from 'packages/core/rpc/client/RPCClient';
import { Sensor } from '../model';
import { Domain } from '../../domain/model'; import { Domain } from '../../domain/model';
import { PageParams, Page } from 'app/commons/model';
@Injectable() @Injectable()
@ -18,8 +18,8 @@ export class SensorService {
} }
public readAllByDomain(domain: Domain): Observable<Sensor[]> { public readAllByDomain(domain: Domain, pageParams: PageParams): Observable<Page> {
return this.rpcClient.call('SensorService.readAllByDomain', domain); return this.rpcClient.call('SensorService.readAllByDomain', domain, pageParams);
} }

View File

@ -8,23 +8,23 @@ import {
import { MODULE } from '../sensor.constant'; import { MODULE } from '../sensor.constant';
import * as ReadAllByDomainStore from './readallbydomain'; import * as ReadAllByDomainStore from './list';
export interface State { export interface State {
readallbydomain: ReadAllByDomainStore.State; list: ReadAllByDomainStore.State;
} }
export const REDUCERS = { export const REDUCERS = {
readallbymember: ReadAllByDomainStore.reducer, list: ReadAllByDomainStore.reducer,
}; };
export const EFFECTS = [ export const EFFECTS = [
ReadAllByDomainStore.Effects, ReadAllByDomainStore.Effects,
]; ];
export const selectNotificationState = createFeatureSelector<State>(MODULE.name); export const selectState = createFeatureSelector<State>(MODULE.name);
export const ReadAllByMemberSelector = new StateSelector<ReadAllByDomainStore.State>(createSelector( export const sensorListSelector = new StateSelector<ReadAllByDomainStore.State>(createSelector(
selectNotificationState, selectState,
(state: State) => state.readallbydomain (state: State) => state.list
)); ));

View File

@ -0,0 +1,4 @@
export * from './list.action';
export * from './list.effect';
export * from './list.reducer';
export * from './list.state';

View File

@ -2,8 +2,8 @@ import { Action } from '@ngrx/store';
import { RPCError } from 'packages/core/rpc/error'; import { RPCError } from 'packages/core/rpc/error';
import { Sensor } from '../../model'; import { Domain } from 'packages/domain/model';
import { Domain } from '../../../domain/model'; import { PageParams, Page } from 'app/commons/model';
export enum ActionType { export enum ActionType {
ReadAllByDomain = '[Sensor.ReadAllByDomain] ReadAllByDomain', ReadAllByDomain = '[Sensor.ReadAllByDomain] ReadAllByDomain',
@ -14,13 +14,13 @@ export enum ActionType {
export class ReadAllByDomain implements Action { export class ReadAllByDomain implements Action {
readonly type = ActionType.ReadAllByDomain; readonly type = ActionType.ReadAllByDomain;
constructor(public payload: Domain) {} constructor(public payload: { domain: Domain, pageParams: PageParams}) {}
} }
export class ReadAllByDomainSuccess implements Action { export class ReadAllByDomainSuccess implements Action {
readonly type = ActionType.ReadAllByDomainSuccess; readonly type = ActionType.ReadAllByDomainSuccess;
constructor(public payload: Sensor[]) {} constructor(public payload: Page) {}
} }
export class ReadAllByDomainFailure implements Action { export class ReadAllByDomainFailure implements Action {

View File

@ -1,6 +1,6 @@
import { TestBed, inject } from '@angular/core/testing'; import { TestBed, inject } from '@angular/core/testing';
import { Effects } from './readallbydomain.effect'; import { Effects } from './list.effect';
describe('ReadAllByDomain.Effects', () => { describe('ReadAllByDomain.Effects', () => {
beforeEach(() => { beforeEach(() => {

View File

@ -23,26 +23,27 @@ import {
ReadAllByDomainSuccess, ReadAllByDomainSuccess,
ReadAllByDomainFailure, ReadAllByDomainFailure,
ActionType, ActionType,
} from './readallbydomain.action'; } from './list.action';
@Injectable() @Injectable()
export class Effects { export class Effects {
constructor( constructor(
private actions$: Actions, private actions$: Actions,
private sensorService: SensorService, private service: SensorService,
private router: Router private router: Router
) { } ) { }
@Effect() @Effect()
readAllByMember$: Observable<Action> = this.actions$ readAllByDomain$: Observable<Action> = this.actions$
.ofType(ActionType.ReadAllByDomain) .ofType(ActionType.ReadAllByDomain)
.map((action: ReadAllByDomain) => action.payload) .map((action: ReadAllByDomain) => action.payload)
.exhaustMap(domain => .switchMap(payload => this.service.readAllByDomain(payload.domain, payload.pageParams))
this.sensorService .map(list => {
.readAllByDomain(domain) return new ReadAllByDomainSuccess(list);
.map(sensorList => new ReadAllByDomainSuccess(sensorList)) })
.catch(error => of(new ReadAllByDomainFailure(error))) .catch((error: RPCError) => {
); return of(new ReadAllByDomainFailure(error));
});
} }

View File

@ -1,12 +1,12 @@
import { import {
Actions, Actions,
ActionType, ActionType,
} from './readallbydomain.action'; } from './list.action';
import { import {
State, State,
initialState, initialState,
} from './readallbydomain.state'; } from './list.state';
import { Sensor } from '../../model'; import { Sensor } from '../../model';
@ -25,7 +25,7 @@ import {
...state, ...state,
error: null, error: null,
pending: false, pending: false,
sensorList: action.payload page: action.payload
}; };
} }
@ -34,7 +34,7 @@ import {
...state, ...state,
error: action.payload, error: action.payload,
pending: false, pending: false,
sensorList: null, page: null,
}; };
} }

View File

@ -1,15 +1,15 @@
import { RPCError } from 'packages/core/rpc/error'; import { RPCError } from 'packages/core/rpc/error';
import { Sensor } from '../../model'; import { Page } from 'app/commons/model';
export interface State { export interface State {
error: RPCError | null; error: RPCError | null;
pending: boolean; pending: boolean;
sensorList: Sensor[] | null; page: Page | null;
} }
export const initialState: State = { export const initialState: State = {
error: null, error: null,
pending: false, pending: false,
sensorList: null, page: null,
}; };

View File

@ -1,4 +0,0 @@
export * from './readallbydomain.action';
export * from './readallbydomain.effect';
export * from './readallbydomain.reducer';
export * from './readallbydomain.state';