sensor page is in progress
This commit is contained in:
parent
0ad9d38d49
commit
3c4dbb64df
|
@ -1,17 +0,0 @@
|
|||
<p-panel [showHeader]="false">
|
||||
<div *ngIf="crawler; else info" class="ui-g ui-width-100-" style="height: 180px; overflow: auto">
|
||||
<div class="ui-g-12" *ngFor="let item of inputItems">
|
||||
<span class="md-inputfield">
|
||||
<input id="name" type="text" pInputText />
|
||||
<label for="name">User</label>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ng-template #info>
|
||||
<div>개발자의 배려가 돋보이는 친절한 안내 메시지</div>
|
||||
</ng-template>
|
||||
<div dir="rtl">
|
||||
<button *ngIf="crawler" type="button" label="Test" icon="ui-icon-send" pButton class="ui-button-width-fit" (click)="testCredentials()"></button>
|
||||
</div>
|
||||
</p-panel>
|
|
@ -1,25 +0,0 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { CrawlerAuthComponent } from './crawler-auth.component';
|
||||
|
||||
describe('FilterComponent', () => {
|
||||
let component: CrawlerAuthComponent;
|
||||
let fixture: ComponentFixture<CrawlerAuthComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ CrawlerAuthComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CrawlerAuthComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,96 +0,0 @@
|
|||
import { Component, OnInit, Input, OnChanges, Output, EventEmitter } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { MetaCrawler } from '@overflow/commons-typescript/model/meta';
|
||||
|
||||
import { Store, select } from '@ngrx/store';
|
||||
import { RPCClientError } from '@loafer/ng-rpc';
|
||||
import * as ListStore from '@overflow/meta/crawler-input-item/store/list';
|
||||
import { ReadCrawlerInputItemSelector } from '@overflow/meta/crawler-input-item/store';
|
||||
import { MetaCrawlerInputItem } from '@overflow/commons-typescript/model/meta';
|
||||
|
||||
|
||||
@Component({
|
||||
selector: 'of-crawler-auth',
|
||||
templateUrl: './crawler-auth.component.html',
|
||||
})
|
||||
export class CrawlerAuthComponent implements OnInit, OnChanges {
|
||||
|
||||
inputItems$ = this.listStore.pipe(select(ReadCrawlerInputItemSelector.select('inputs')));
|
||||
inputItems: MetaCrawlerInputItem[];
|
||||
title: string;
|
||||
|
||||
@Output() credentialPassed = new EventEmitter<boolean>();
|
||||
@Input() crawler: MetaCrawler;
|
||||
|
||||
constructor(
|
||||
private router: Router,
|
||||
private listStore: Store<ListStore.State>,
|
||||
) { }
|
||||
|
||||
ngOnInit() {
|
||||
// this.inputItems$.subscribe(
|
||||
// (list: MetaCrawlerInputItem[]) => {
|
||||
// if (list !== null) {
|
||||
// if (this.inputItems !== list) {
|
||||
// this.testPassEvent.emit(false);
|
||||
// }
|
||||
// this.inputItems = list;
|
||||
// }
|
||||
// },
|
||||
// (error: RPCClientError) => {
|
||||
// console.log(error.response.message);
|
||||
// }
|
||||
// );
|
||||
}
|
||||
|
||||
ngOnChanges() {
|
||||
// this.getCrawlerAuthInputItems();
|
||||
this.title = '3. Credentials';
|
||||
|
||||
this.inputItems = [];
|
||||
// Temporary data
|
||||
if (null == this.crawler) {
|
||||
return;
|
||||
}
|
||||
this.title += ' for ' + this.crawler.name;
|
||||
for (let i = 0; i < 10; i++) {
|
||||
const item: MetaCrawlerInputItem = {
|
||||
id: i,
|
||||
// inputType: {
|
||||
// id: i,
|
||||
// name: '',
|
||||
// description: '',
|
||||
// },
|
||||
crawler: null,
|
||||
description: '',
|
||||
name: '',
|
||||
createDate: new Date(),
|
||||
required: true,
|
||||
defaultValue: '',
|
||||
pattern: '',
|
||||
keyName: '',
|
||||
keyValue: '',
|
||||
};
|
||||
this.inputItems.push(item);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
getCrawlerAuthInputItems() {
|
||||
this.listStore.dispatch(new ListStore.ReadAll(this.crawler));
|
||||
}
|
||||
|
||||
testCredentials() {
|
||||
// switch (this.crawler.id) {
|
||||
// case 1:
|
||||
// break;
|
||||
// case 2:
|
||||
// break;
|
||||
// case 3:
|
||||
// break;
|
||||
// default :
|
||||
// break;
|
||||
// }
|
||||
this.credentialPassed.emit(true);
|
||||
}
|
||||
}
|
|
@ -1,16 +0,0 @@
|
|||
<div *ngIf="target; else info" class="ui-width-100-">
|
||||
<p-orderList [value]="crawlers" [listStyle]="{'height':'200px'}" [responsive]="true" filterBy="name"
|
||||
(onSelectionChange)="onSelectionChange($event)" class="ui_orderlist_controls_none">
|
||||
<ng-template let-crawler pTemplate="item">
|
||||
<div class="ui-helper-clearfix">
|
||||
<div style="font-size:14px;margin:0">{{crawler.name}}</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
</p-orderList>
|
||||
</div>
|
||||
|
||||
<ng-template #info>
|
||||
<p-panel [showHeader]="false">
|
||||
<div>개발자의 배려가 돋보이는 친절한 안내 메시지</div>
|
||||
</p-panel>
|
||||
</ng-template>
|
|
@ -1,25 +0,0 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { CrawlerSelectorComponent } from './crawler-selector.component';
|
||||
|
||||
describe('FilterComponent', () => {
|
||||
let component: CrawlerSelectorComponent;
|
||||
let fixture: ComponentFixture<CrawlerSelectorComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ CrawlerSelectorComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(CrawlerSelectorComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,67 +0,0 @@
|
|||
import { Component, OnInit, Input, OnChanges, AfterContentInit, Output, EventEmitter } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { Target } from '@overflow/commons-typescript/model/target';
|
||||
|
||||
import { Store, select } from '@ngrx/store';
|
||||
import { RPCClientError } from '@loafer/ng-rpc';
|
||||
import * as ListStore from '@overflow/meta/crawler/store/list';
|
||||
import { ReadAllCrawlerSelector } from '@overflow/meta/crawler/store';
|
||||
import { MetaCrawler } from '@overflow/commons-typescript/model/meta';
|
||||
|
||||
|
||||
@Component({
|
||||
selector: 'of-crawler-selector',
|
||||
templateUrl: './crawler-selector.component.html',
|
||||
})
|
||||
export class CrawlerSelectorComponent implements OnInit, OnChanges, AfterContentInit {
|
||||
|
||||
crawlers$ = this.listStore.pipe(select(ReadAllCrawlerSelector.select('metaCrawlerList')));
|
||||
@Input() target: Target;
|
||||
crawlers: MetaCrawler[];
|
||||
@Output() crawlerSelected = new EventEmitter<MetaCrawler>();
|
||||
|
||||
constructor(
|
||||
private router: Router,
|
||||
private listStore: Store<ListStore.State>,
|
||||
) { }
|
||||
|
||||
ngOnInit() {
|
||||
// this.crawlers$.subscribe(
|
||||
// (list: MetaCrawler[]) => {
|
||||
// if (list !== null) {
|
||||
// this.crawlers = list;
|
||||
// }
|
||||
// },
|
||||
// (error: RPCClientError) => {
|
||||
// console.log(error.response.message);
|
||||
// }
|
||||
// );
|
||||
|
||||
}
|
||||
|
||||
ngAfterContentInit() {
|
||||
// this.listStore.dispatch(new ListStore.ReadAll());
|
||||
}
|
||||
|
||||
ngOnChanges() {
|
||||
|
||||
this.crawlers = [];
|
||||
if (null == this.target) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Temporary Data
|
||||
for (let i = 0; i < 4; i++) {
|
||||
const c: MetaCrawler = {
|
||||
id: i,
|
||||
name: 'CrawlerName' + i + ' For ' + this.target.displayName,
|
||||
};
|
||||
this.crawlers.push(c);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
onSelectionChange(event) {
|
||||
this.crawlerSelected.emit(event.value[0]);
|
||||
}
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
<p-panel [showHeader]="false">
|
||||
<div *ngIf="crawler && target; else info" class="ui-g ui-width-100- ui-no-border" style="height: 200px; overflow: auto">
|
||||
<p-tree [value]="itemTreeNode" selectionMode="checkbox" [(selection)]="selectedItems" (onNodeSelect)="onNodeSelect($event)"
|
||||
(onNodeUnselect)="onNodeUnselect($event)"></p-tree>
|
||||
</div>
|
||||
|
||||
<ng-template #info>
|
||||
<div>개발자의 배려가 돋보이는 친절한 안내 메시지</div>
|
||||
</ng-template>
|
||||
</p-panel>
|
|
@ -1,25 +0,0 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { SensorItemSelectorComponent } from './sensor-item-selector.component';
|
||||
|
||||
describe('SensorItemSelectorComponent', () => {
|
||||
let component: SensorItemSelectorComponent;
|
||||
let fixture: ComponentFixture<SensorItemSelectorComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ SensorItemSelectorComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(SensorItemSelectorComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,126 +0,0 @@
|
|||
import { Component, OnInit, OnChanges, Input, Output, EventEmitter, ViewChild, AfterViewInit, OnDestroy } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { Store, select } from '@ngrx/store';
|
||||
import { RPCClientError } from '@loafer/ng-rpc';
|
||||
import * as ListStore from '@overflow/meta/sensor-display-item/store/list';
|
||||
import { ReadAllSensorDisplayItemByCrawlerSelector } from '@overflow/meta/sensor-display-item/store';
|
||||
import { MetaSensorDisplayItem } from '@overflow/commons-typescript/model/meta';
|
||||
import { MetaCrawler } from '@overflow/commons-typescript/model/meta';
|
||||
import { MetaSensorItemType } from '@overflow/commons-typescript/model/meta';
|
||||
import { TreeNode } from 'primeng/primeng';
|
||||
import { Target } from '@overflow/commons-typescript/model/target';
|
||||
|
||||
@Component({
|
||||
selector: 'of-sensor-item-selector',
|
||||
templateUrl: './sensor-item-selector.component.html',
|
||||
})
|
||||
export class SensorItemSelectorComponent implements OnInit, OnChanges {
|
||||
|
||||
@Input() target: Target;
|
||||
@Input() crawler: MetaCrawler;
|
||||
@Output() sensorItemsSelected = new EventEmitter<TreeNode[]>();
|
||||
|
||||
items$ = this.listStore.pipe(select(ReadAllSensorDisplayItemByCrawlerSelector.select('list')));
|
||||
|
||||
selectedItems: TreeNode[];
|
||||
itemTreeNode: TreeNode[];
|
||||
|
||||
constructor(
|
||||
private router: Router,
|
||||
private listStore: Store<ListStore.State>,
|
||||
) { }
|
||||
|
||||
ngOnInit() {
|
||||
// this.selectedItems = new Set();
|
||||
// this.items$.subscribe(
|
||||
// (list: MetaSensorDisplayItem[]) => {
|
||||
// if (list !== null) {
|
||||
// }
|
||||
// },
|
||||
// (error: RPCClientError) => {
|
||||
// console.log(error.response.message);
|
||||
// }
|
||||
// );
|
||||
|
||||
}
|
||||
|
||||
ngOnChanges() {
|
||||
// this.selectedItems.clear();
|
||||
// this.listStore.dispatch(new ListStore.ReadAllByCrawler(this.crawler));
|
||||
|
||||
this.itemTreeNode = [];
|
||||
if (!this.target || !this.crawler) {
|
||||
return;
|
||||
}
|
||||
// Temporary data
|
||||
const displayItems = [];
|
||||
for (let i = 0; i < 10; i++) {
|
||||
let isDefault = false;
|
||||
const t: MetaSensorItemType = {
|
||||
name: 'CPU'
|
||||
};
|
||||
if (i % 2) {
|
||||
isDefault = true;
|
||||
t.name = 'Memory';
|
||||
}
|
||||
const si: MetaSensorDisplayItem = {
|
||||
id: i,
|
||||
key: 'SensorDisplayItemKey' + i,
|
||||
displayName: 'this.is.display.item.name' + i,
|
||||
description: 'Description' + i,
|
||||
default: isDefault,
|
||||
itemType: t
|
||||
};
|
||||
displayItems.push(si);
|
||||
}
|
||||
|
||||
this.generateTreeData(displayItems);
|
||||
}
|
||||
|
||||
generateTreeData(items) {
|
||||
this.itemTreeNode = [];
|
||||
for (const item of items) {
|
||||
const categoryNode = this.existCategory(item);
|
||||
if (categoryNode === null) {
|
||||
const childrenNode = [];
|
||||
childrenNode.push(this.getChildNode(item));
|
||||
const node = {
|
||||
label: item.itemType.name,
|
||||
children: childrenNode,
|
||||
expanded: true,
|
||||
};
|
||||
this.itemTreeNode.push(node);
|
||||
} else {
|
||||
categoryNode.children.push(this.getChildNode(item));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getChildNode(item) {
|
||||
const childNode = {
|
||||
label: item.displayName,
|
||||
expandedIcon: item.default ? 'ui-icon-star' : '',
|
||||
collapsedIcon: item.default ? 'ui-icon-star' : '',
|
||||
expanded: true,
|
||||
data: item
|
||||
};
|
||||
return childNode;
|
||||
}
|
||||
existCategory(item: MetaSensorDisplayItem) {
|
||||
let categoryNode = null;
|
||||
for (const node of this.itemTreeNode) {
|
||||
if (node.label === item.itemType.name) {
|
||||
categoryNode = node;
|
||||
}
|
||||
}
|
||||
return categoryNode;
|
||||
}
|
||||
|
||||
|
||||
onNodeSelect(event) {
|
||||
this.sensorItemsSelected.emit(this.selectedItems);
|
||||
}
|
||||
onNodeUnselect(event) {
|
||||
this.sensorItemsSelected.emit(this.selectedItems);
|
||||
}
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
<div style="height: 70%;">
|
||||
page 2222222
|
||||
</div>
|
|
@ -1,25 +0,0 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { SettingETCComponent } from './setting-etc.component';
|
||||
|
||||
describe('SettingETCComponent', () => {
|
||||
let component: SettingETCComponent;
|
||||
let fixture: ComponentFixture<SettingETCComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ SettingETCComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(SettingETCComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,32 +0,0 @@
|
|||
import { Component, OnInit, Input } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { MetaCrawler } from '@overflow/commons-typescript/model/meta';
|
||||
import { MetaSensorDisplayItem } from '@overflow/commons-typescript/model/meta';
|
||||
import { Target } from '@overflow/commons-typescript/model/target';
|
||||
|
||||
|
||||
@Component({
|
||||
selector: 'of-sensor-setting-etc',
|
||||
templateUrl: './setting-etc.component.html',
|
||||
})
|
||||
export class SettingETCComponent implements OnInit {
|
||||
|
||||
@Input() selectedTarget: Target;
|
||||
@Input() selectedCrawler: MetaCrawler;
|
||||
@Input() selectedItems: MetaSensorDisplayItem[];
|
||||
|
||||
intervals = [
|
||||
'600 sec',
|
||||
'400 sec',
|
||||
'200 sec',
|
||||
];
|
||||
|
||||
|
||||
constructor(
|
||||
private router: Router,
|
||||
) { }
|
||||
|
||||
ngOnInit() {
|
||||
}
|
||||
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
<h1>Add Sensor</h1>
|
||||
<div *ngIf="page === 1; else etc">
|
||||
<p-accordion [multiple]="false" [activeIndex]="step" (onOpen)="onTabOpen($event)">
|
||||
<p-accordionTab header="{{getTitle(0)}}" [disabled]="preTarget" class="ui-nopad">
|
||||
<of-target-selector [visible]="visible" [preTarget]="preTarget" (targetSelected)="onTargetSelect($event)"></of-target-selector>
|
||||
</p-accordionTab>
|
||||
<p-accordionTab header="{{getTitle(1)}}" class="ui-nopad">
|
||||
<of-crawler-selector [target]="selectedTarget" (crawlerSelected)="onCrawlerSelect($event)"></of-crawler-selector>
|
||||
</p-accordionTab>
|
||||
<p-accordionTab header="{{getTitle(2)}}" class="ui-nopad">
|
||||
<of-crawler-auth [crawler]="selectedCrawler" (credentialPassed)="onCredentialPass($event)"></of-crawler-auth>
|
||||
</p-accordionTab>
|
||||
<p-accordionTab header="{{getTitle(3)}}" class="ui-nopad">
|
||||
<of-sensor-item-selector [target]="selectedTarget" [crawler]="selectedCrawler" (sensorItemsSelected)="onItemsSelect($event)"></of-sensor-item-selector>
|
||||
</p-accordionTab>
|
||||
</p-accordion>
|
||||
</div>
|
||||
|
||||
<ng-template #etc>
|
||||
<of-sensor-setting-etc></of-sensor-setting-etc>
|
||||
</ng-template>
|
||||
|
||||
<div class="ui-top-space-10" dir="rtl">
|
||||
<button pButton *ngIf="page === 1" class=" ui-button-width-fit" [disabled]="!nextable" type="button" label="Next" icon="fa-check" (click)="onNext()"></button>
|
||||
<button pButton *ngIf="page === 2" class=" ui-button-width-fit" type="button" label="Done" icon="fa-check" (click)="onDone()"></button>
|
||||
|
||||
<button pButton *ngIf="page === 1" class="ui-button-danger ui-button-width-fit" type="button" label="Cancel" icon="ui-icon-close" (click)="onCancel()"></button>
|
||||
<button pButton *ngIf="page === 2" class="ui-button-danger ui-button-width-fit" type="button" label="Prev" icon="ui-icon-close" (click)="onPrev()"></button>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- <div [hidden]="step !== 1">
|
||||
<div class="ui-g">
|
||||
<div class="ui-g-6">
|
||||
<of-target-selector [preTarget]="preTarget" (targetSelected)="onTargetSelect($event)"></of-target-selector>
|
||||
</div>
|
||||
<div class="ui-g-6">
|
||||
<of-crawler-auth [crawler]="selectedCrawler" (credentialPassed)="onCredentialPass($event)"></of-crawler-auth>
|
||||
</div>
|
||||
<div class="ui-g-6">
|
||||
<of-crawler-selector [target]="selectedTarget" (crawlerSelected)="onCrawlerSelect($event)"></of-crawler-selector>
|
||||
</div>
|
||||
<div class="ui-g-6">
|
||||
<of-sensor-item-selector [target]="selectedTarget" [crawler]="selectedCrawler" (sensorItemsSelected)="onItemsSelect($event)"></of-sensor-item-selector>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div *ngIf="step === 2">
|
||||
<of-sensor-setting-etc [selectedTarget]="selectedTarget" [selectedCrawler]="selectedCrawler" [selectedItems]="selectedSensorDisplayItems"></of-sensor-setting-etc>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<button pButton *ngIf="step === 1" class="ui-button-danger" type="button" label="Cancel" icon="ui-icon-close" (click)="onCancel()"></button>
|
||||
<button pButton *ngIf="step === 2" class="ui-button-danger" type="button" label="Prev" icon="ui-icon-close" (click)="onPrev()"></button>
|
||||
|
||||
<button pButton *ngIf="step === 1" [disabled]="!nextable" type="button" label="Next" icon="fa-check" (click)="onNext()"></button>
|
||||
<button pButton *ngIf="step === 2" type="button" label="Done" icon="fa-check" (click)="onDone()"></button>
|
||||
</div> -->
|
|
@ -1,25 +0,0 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { SettingComponent } from './setting.component';
|
||||
|
||||
describe('SensorSettingComponent', () => {
|
||||
let component: SettingComponent;
|
||||
let fixture: ComponentFixture<SettingComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ SettingComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(SettingComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,159 +0,0 @@
|
|||
import { Component, OnInit, Input, Inject, DoCheck, ViewEncapsulation, Output, EventEmitter, OnChanges } from '@angular/core';
|
||||
import { Target } from '@overflow/commons-typescript/model/target';
|
||||
import { Infra } from '@overflow/commons-typescript/model/infra';
|
||||
import { MetaCrawler } from '@overflow/commons-typescript/model/meta';
|
||||
import { MetaSensorDisplayItem } from '@overflow/commons-typescript/model/meta';
|
||||
|
||||
import { Store, select, StateObservable } from '@ngrx/store';
|
||||
import { RPCClientError } from '@loafer/ng-rpc';
|
||||
import * as SensorItemKeyListStore from '@overflow/sensor-item/store/key-list';
|
||||
import { ReadSensorItemKeySelector } from '@overflow/sensor-item/store';
|
||||
import { MetaSensorItemKey } from '@overflow/commons-typescript/model/meta';
|
||||
import { TreeNode } from 'primeng/primeng';
|
||||
|
||||
@Component({
|
||||
selector: 'of-sensor-setting',
|
||||
templateUrl: './setting.component.html',
|
||||
encapsulation: ViewEncapsulation.None
|
||||
})
|
||||
export class SettingComponent implements OnInit, DoCheck, OnChanges {
|
||||
|
||||
@Input() preTarget: Target;
|
||||
@Output() close = new EventEmitter();
|
||||
@Input() visible;
|
||||
|
||||
nextable = false;
|
||||
selectedTarget: Target;
|
||||
selectedCrawler: MetaCrawler;
|
||||
credentialPassed: boolean;
|
||||
selectedSensorDisplayItems: MetaSensorDisplayItem[];
|
||||
itemNodes: TreeNode[];
|
||||
step = 0;
|
||||
page = 1;
|
||||
|
||||
sensorItemKeys$: StateObservable;
|
||||
|
||||
|
||||
constructor(
|
||||
private keyListStore: Store<SensorItemKeyListStore.State>
|
||||
) {
|
||||
keyListStore.pipe(select(ReadSensorItemKeySelector.select('list')));
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.step = this.preTarget ? 1 : 0;
|
||||
// this.sensorItemKeys$.subscribe(
|
||||
// (list: MetaSensorItemKey[]) => {
|
||||
// if (list !== null) {
|
||||
// console.log(list);
|
||||
// }
|
||||
// },
|
||||
// (error: RPCClientError) => {
|
||||
// console.log(error.response.message);
|
||||
// }
|
||||
// );
|
||||
}
|
||||
|
||||
ngOnChanges(changes) {
|
||||
this.step = this.preTarget ? 1 : 0;
|
||||
}
|
||||
|
||||
ngDoCheck() {
|
||||
try {
|
||||
if (
|
||||
this.selectedTarget === null ||
|
||||
this.selectedCrawler === null ||
|
||||
this.itemNodes === null ||
|
||||
this.itemNodes.length === 0 ||
|
||||
!this.credentialPassed
|
||||
) {
|
||||
this.nextable = false;
|
||||
} else {
|
||||
this.nextable = true;
|
||||
}
|
||||
} catch (exception) {
|
||||
this.nextable = false;
|
||||
}
|
||||
}
|
||||
|
||||
onCancel() {
|
||||
this.page = 1;
|
||||
this.step = 0;
|
||||
this.visible = false;
|
||||
this.nextable = false;
|
||||
this.selectedTarget = null;
|
||||
this.selectedCrawler = null;
|
||||
this.credentialPassed = false;
|
||||
this.selectedSensorDisplayItems = null;
|
||||
this.close.emit();
|
||||
}
|
||||
|
||||
onNext() {
|
||||
this.page += 1;
|
||||
}
|
||||
|
||||
onPrev() {
|
||||
this.page -= 1;
|
||||
}
|
||||
|
||||
onDone() {
|
||||
this.selectedSensorDisplayItems = [];
|
||||
for (const node of this.itemNodes) {
|
||||
if (node.data && node.data !== undefined) {
|
||||
this.selectedSensorDisplayItems.push(node.data);
|
||||
}
|
||||
}
|
||||
console.log(this.selectedSensorDisplayItems);
|
||||
}
|
||||
|
||||
onTargetSelect(t: Target) {
|
||||
this.selectedTarget = t;
|
||||
this.step = 1;
|
||||
}
|
||||
onCrawlerSelect(c: MetaCrawler) {
|
||||
this.selectedCrawler = c;
|
||||
this.step = 2;
|
||||
}
|
||||
onCredentialPass(b: boolean) {
|
||||
if (!b) {
|
||||
return;
|
||||
}
|
||||
this.credentialPassed = b;
|
||||
this.step = 3;
|
||||
}
|
||||
onItemsSelect(nodes: TreeNode[]) {
|
||||
this.itemNodes = nodes;
|
||||
}
|
||||
|
||||
onTabOpen(event) {
|
||||
this.step = event.index;
|
||||
}
|
||||
|
||||
getTitle(index) {
|
||||
if (index === 0 && this.preTarget) {
|
||||
return this.preTarget.displayName;
|
||||
}
|
||||
let title = '';
|
||||
switch (index) {
|
||||
case 0:
|
||||
title = this.selectedTarget && this.step !== index ?
|
||||
this.selectedTarget.displayName :
|
||||
'Choose a Target to monitor.';
|
||||
break;
|
||||
case 1:
|
||||
title = this.selectedCrawler && this.step !== index ?
|
||||
this.selectedCrawler.name :
|
||||
'Choose a Crawler.';
|
||||
break;
|
||||
case 2:
|
||||
title = this.credentialPassed && this.step !== index ?
|
||||
'Credentials test succeed.' :
|
||||
'Credentials';
|
||||
break;
|
||||
case 3:
|
||||
title = 'Choose Sensor Items.';
|
||||
break;
|
||||
}
|
||||
return title;
|
||||
}
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
<div *ngIf="preTarget === null" class="ui-width-100-">
|
||||
<p-orderList [value]="targets" [listStyle]="{'height':'200px'}" [responsive]="true" filterBy="displayName"
|
||||
(onSelectionChange)="onSelectionChange($event)" class="ui_orderlist_controls_none">
|
||||
<ng-template let-target pTemplate="item">
|
||||
<div class="ui-helper-clearfix">
|
||||
<img src="assets/demo/images/car/BMW.gif" style="display:inline-block;margin:2px 0 2px 2px" />
|
||||
<div style="font-size:14px;float:right;margin:15px 5px 0 0">{{ target.displayName }}</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
</p-orderList>
|
||||
</div>
|
|
@ -1,25 +0,0 @@
|
|||
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
|
||||
import { TargetSelectorComponent } from './target-selector.component';
|
||||
|
||||
describe('FilterComponent', () => {
|
||||
let component: TargetSelectorComponent;
|
||||
let fixture: ComponentFixture<TargetSelectorComponent>;
|
||||
|
||||
beforeEach(async(() => {
|
||||
TestBed.configureTestingModule({
|
||||
declarations: [ TargetSelectorComponent ]
|
||||
})
|
||||
.compileComponents();
|
||||
}));
|
||||
|
||||
beforeEach(() => {
|
||||
fixture = TestBed.createComponent(TargetSelectorComponent);
|
||||
component = fixture.componentInstance;
|
||||
fixture.detectChanges();
|
||||
});
|
||||
|
||||
it('should create', () => {
|
||||
expect(component).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,92 +0,0 @@
|
|||
import { Component, OnInit, Output, EventEmitter, Input, AfterContentInit, OnChanges } from '@angular/core';
|
||||
import { Router } from '@angular/router';
|
||||
import { Target } from '@overflow/commons-typescript/model/target';
|
||||
import { RPCClientError } from '@loafer/ng-rpc';
|
||||
import { Domain } from '@overflow/commons-typescript/model/domain';
|
||||
import { AuthSelector } from '@overflow/member/store';
|
||||
import * as ListStore from '@overflow/infra/store/list';
|
||||
import { ListSelector } from '@overflow/infra/store';
|
||||
import { Store, select } from '@ngrx/store';
|
||||
// import { Page, PageParams } from 'app/commons/model';
|
||||
import { SelectItem } from 'primeng/primeng';
|
||||
|
||||
@Component({
|
||||
selector: 'of-target-selector',
|
||||
templateUrl: './target-selector.component.html',
|
||||
})
|
||||
export class TargetSelectorComponent implements OnInit, OnChanges {
|
||||
|
||||
targets$ = this.store.pipe(select(ListSelector.select('page')));
|
||||
|
||||
@Input() preTarget: Target = null;
|
||||
@Input() visible;
|
||||
@Output() targetSelected = new EventEmitter<Target>();
|
||||
targets: Target[] = null;
|
||||
|
||||
constructor(
|
||||
private router: Router,
|
||||
private store: Store<ListStore.State>
|
||||
) { }
|
||||
|
||||
ngOnInit() {
|
||||
// this.targets$.subscribe(
|
||||
// (page: Page) => {
|
||||
// if (page !== null) {
|
||||
// this.convertInfraToTarget(page);
|
||||
// }
|
||||
// },
|
||||
// (error: RPCClientError) => {
|
||||
// console.log(error.response.message);
|
||||
// }
|
||||
// );
|
||||
}
|
||||
|
||||
ngOnChanges(changes) {
|
||||
this.targets = [];
|
||||
if (this.preTarget === null) {
|
||||
this.getTargetList();
|
||||
} else {
|
||||
this.targets.push(this.preTarget);
|
||||
this.targetSelected.emit(this.preTarget);
|
||||
}
|
||||
}
|
||||
|
||||
// convertInfraToTarget(page: Page) {
|
||||
// for (const infra of page.content) {
|
||||
// this.targets.push(infra.target);
|
||||
// }
|
||||
// }
|
||||
|
||||
getTargetList() {
|
||||
// this.store.select(AuthSelector.select('domain')).subscribe(
|
||||
// (domain: Domain) => {
|
||||
// const pageParams: PageParams = {
|
||||
// pageNo: '0',
|
||||
// countPerPage: '9999',
|
||||
// sortCol: 'id',
|
||||
// sortDirection: 'descending'
|
||||
// };
|
||||
// this.store.dispatch(new ListStore.ReadAllByDomain({ domain, pageParams }));
|
||||
// },
|
||||
// (error) => {
|
||||
// console.log(error);
|
||||
// }
|
||||
// );
|
||||
|
||||
// Temporary data
|
||||
for (let i = 0; i < 10; i++) {
|
||||
const t: Target = {
|
||||
id: i,
|
||||
displayName: 'DisplayName' + i,
|
||||
createDate: new Date(),
|
||||
description: 'Description' + i,
|
||||
};
|
||||
this.targets.push(t);
|
||||
}
|
||||
}
|
||||
|
||||
onSelectionChange(event) {
|
||||
this.targetSelected.emit(event.value[0]);
|
||||
}
|
||||
|
||||
}
|
7
@overflow/sensor/container/index.ts
Normal file
7
@overflow/sensor/container/index.ts
Normal file
|
@ -0,0 +1,7 @@
|
|||
import { SensorListContainerComponent } from './sensor-list-container';
|
||||
import { SensorDetailContainerComponent } from './sensor-detail-container';
|
||||
|
||||
export const CONTAINER_COMPONENTS = [
|
||||
SensorListContainerComponent,
|
||||
SensorDetailContainerComponent
|
||||
];
|
1
@overflow/sensor/container/sensor-detail-container.html
Normal file
1
@overflow/sensor/container/sensor-detail-container.html
Normal file
|
@ -0,0 +1 @@
|
|||
<of-sensor-detail></of-sensor-detail>
|
14
@overflow/sensor/container/sensor-detail-container.ts
Normal file
14
@overflow/sensor/container/sensor-detail-container.ts
Normal file
|
@ -0,0 +1,14 @@
|
|||
import { Component } from '@angular/core';
|
||||
import { Observable } from 'rxjs';
|
||||
import { Store, select } from '@ngrx/store';
|
||||
// import * as ProbeStore from '../store/entity/probe';
|
||||
// import { ProbeEntitySelector, ProbeDetailContainerSelector } from '../store';
|
||||
|
||||
@Component({
|
||||
selector: 'of-sensor-detail-container',
|
||||
templateUrl: './sensor-detail-container.html',
|
||||
})
|
||||
export class SensorDetailContainerComponent {
|
||||
|
||||
|
||||
}
|
1
@overflow/sensor/container/sensor-list-container.html
Normal file
1
@overflow/sensor/container/sensor-list-container.html
Normal file
|
@ -0,0 +1 @@
|
|||
<of-sensor-list></of-sensor-list>
|
16
@overflow/sensor/container/sensor-list-container.ts
Normal file
16
@overflow/sensor/container/sensor-list-container.ts
Normal file
|
@ -0,0 +1,16 @@
|
|||
import { Component, EventEmitter, Output } from '@angular/core';
|
||||
import { Observable } from 'rxjs';
|
||||
import { Store, select } from '@ngrx/store';
|
||||
import { Sensor } from '@overflow/commons-typescript/model/sensor';
|
||||
// import * as ProbeStore from '../store/entity/probe';
|
||||
// import { ProbeEntitySelector, ProbeListContainerSelector } from '../store';
|
||||
|
||||
@Component({
|
||||
selector: 'of-sensor-list-container',
|
||||
templateUrl: './sensor-list-container.html',
|
||||
})
|
||||
export class SensorListContainerComponent {
|
||||
|
||||
@Output() select = new EventEmitter<Sensor>();
|
||||
|
||||
}
|
|
@ -7,6 +7,7 @@ import { SERVICES } from './service';
|
|||
import { SensorStoreModule } from './sensor-store.module';
|
||||
import { SensorItemModule } from '../sensor-item/sensor-item.module';
|
||||
import { KeyValueModule } from '@overflow/commons/component/key-value/key-value.module';
|
||||
import { CONTAINER_COMPONENTS } from './container';
|
||||
// import { MetaCrawlerModule } from '../meta/crawler/crawler.module';
|
||||
// import { MetaSensorDisplayItemModule } from '../meta/sensor-display-item/sensor-display-item.module';
|
||||
// import { MetaCrawlerInputItemModule } from '../meta/crawler-input-item/crawler-input.module';
|
||||
|
@ -23,9 +24,11 @@ import { KeyValueModule } from '@overflow/commons/component/key-value/key-value.
|
|||
KeyValueModule
|
||||
],
|
||||
declarations: [
|
||||
CONTAINER_COMPONENTS,
|
||||
COMPONENTS,
|
||||
],
|
||||
exports: [
|
||||
CONTAINER_COMPONENTS,
|
||||
COMPONENTS,
|
||||
],
|
||||
providers: [
|
||||
|
|
|
@ -23,7 +23,7 @@ export class AppMenuComponent implements OnInit {
|
|||
{
|
||||
label: 'Infra', icon: 'all_inclusive', items: [
|
||||
{ label: 'Map', icon: 'map', routerLink: ['/map'] },
|
||||
{ label: 'Sensors', icon: 'compare_arrows', routerLink: ['/sensors'] },
|
||||
{ label: 'Sensors', icon: 'compare_arrows', routerLink: ['/sensor/list'] },
|
||||
{ label: 'Probes', icon: 'dock', routerLink: ['/probe/list'] },
|
||||
]
|
||||
},
|
||||
|
|
|
@ -12,8 +12,7 @@ const routes: Routes = [
|
|||
{ path: 'probe', loadChildren: './probes/probe-tab-page.module#ProbeTabPageModule' },
|
||||
{ path: 'discovery', loadChildren: './discovery/discovery-page.module#DiscoveryPageModule' },
|
||||
{ path: 'map', loadChildren: './infra/infra-page.module#InfraPageModule' },
|
||||
// { path: 'sensors', loadChildren: './sensors/sensors-page.module#SensorsPageModule' },
|
||||
// { path: 'sensor', loadChildren: './sensor/sensor-page.module#SensorPageModule' },
|
||||
{ path: 'sensor', loadChildren: './sensors/sensor-tab-page.module#SensorTabPageModule' },
|
||||
// { path: 'target', loadChildren: './target/target-page.module#TargetPageModule' },
|
||||
// { path: 'overview', loadChildren: './overview/overview-page.module#OverviewPageModule' },
|
||||
// { path: 'dashboard', loadChildren: './dashboard/dashboard-page.module#DashboardPageModule' },
|
||||
|
|
21
src/app/pages/sensors/sensor-tab-page-routing.module.ts
Normal file
21
src/app/pages/sensors/sensor-tab-page-routing.module.ts
Normal file
|
@ -0,0 +1,21 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
import { Routes, RouterModule } from '@angular/router';
|
||||
import { SensorTabPageComponent } from './sensor-tab-page.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
component: SensorTabPageComponent,
|
||||
children: [
|
||||
{ path: 'list', loadChildren: './sensor/sensor-page.module#SensorPageModule' },
|
||||
{ path: ':id/info', loadChildren: './sensor/sensor-page.module#SensorPageModule' },
|
||||
{ path: ':id/history', component: null },
|
||||
]
|
||||
},
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild(routes)],
|
||||
exports: [RouterModule]
|
||||
})
|
||||
export class SensorTabPageRoutingModule { }
|
12
src/app/pages/sensors/sensor-tab-page.component.html
Normal file
12
src/app/pages/sensors/sensor-tab-page.component.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
<div class="ui-fluid">
|
||||
<div class="ui-g">
|
||||
<div class="ui-g-12">
|
||||
<div *ngIf="tabs" class="card no-margin">
|
||||
<of-tabbar [tabs]="tabs"></of-tabbar>
|
||||
</div>
|
||||
<div class="card no-margin">
|
||||
<router-outlet></router-outlet>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
40
src/app/pages/sensors/sensor-tab-page.component.ts
Normal file
40
src/app/pages/sensors/sensor-tab-page.component.ts
Normal file
|
@ -0,0 +1,40 @@
|
|||
import { Component, OnDestroy } from '@angular/core';
|
||||
import { Router, NavigationEnd } from '@angular/router';
|
||||
import { Subscription } from 'rxjs/Subscription';
|
||||
|
||||
@Component({
|
||||
selector: 'of-pages-sensor-tab',
|
||||
templateUrl: './sensor-tab-page.component.html',
|
||||
})
|
||||
export class SensorTabPageComponent implements OnDestroy {
|
||||
|
||||
tabs;
|
||||
routerSubscription$: Subscription;
|
||||
|
||||
constructor(
|
||||
private router: Router
|
||||
) {
|
||||
this.routerSubscription$ = this.router.events.subscribe((event) => {
|
||||
if (event instanceof NavigationEnd) {
|
||||
this.generateTabMenu(event);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.routerSubscription$.unsubscribe();
|
||||
}
|
||||
|
||||
generateTabMenu(event: NavigationEnd) {
|
||||
try {
|
||||
const parsedUrl = event.url.split('sensor/')[1].split('/')[0];
|
||||
this.tabs = parsedUrl === 'list' ? null : [
|
||||
{ label: 'INFO', routerLink: ['/sensor/', parsedUrl, 'info'] },
|
||||
{ label: 'HISTORY', path: ['/sensor/', parsedUrl, 'history'], disabled: true },
|
||||
];
|
||||
} catch {
|
||||
this.router.navigate(['error']);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
22
src/app/pages/sensors/sensor-tab-page.module.ts
Normal file
22
src/app/pages/sensors/sensor-tab-page.module.ts
Normal file
|
@ -0,0 +1,22 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
|
||||
import { SensorTabPageComponent } from './sensor-tab-page.component';
|
||||
import { SensorTabPageRoutingModule } from './sensor-tab-page-routing.module';
|
||||
import { PrimeNGModules } from '@overflow/commons/prime-ng/prime-ng.module';
|
||||
import { SensorModule } from '@overflow/sensor/sensor.module';
|
||||
import { TabbarModule } from '../../commons/component/layout/tabbar/app.tabbar.module';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule,
|
||||
SensorTabPageRoutingModule,
|
||||
PrimeNGModules,
|
||||
SensorModule,
|
||||
TabbarModule,
|
||||
],
|
||||
declarations: [
|
||||
SensorTabPageComponent,
|
||||
]
|
||||
})
|
||||
export class SensorTabPageModule { }
|
16
src/app/pages/sensors/sensor/sensor-page-routing.module.ts
Normal file
16
src/app/pages/sensors/sensor/sensor-page-routing.module.ts
Normal file
|
@ -0,0 +1,16 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
import { Routes, RouterModule } from '@angular/router';
|
||||
import { SensorPageComponent } from './sensor-page.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
component: SensorPageComponent,
|
||||
},
|
||||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [RouterModule.forChild(routes)],
|
||||
exports: [RouterModule]
|
||||
})
|
||||
export class SensorPageRoutingModule { }
|
11
src/app/pages/sensors/sensor/sensor-page.component.html
Normal file
11
src/app/pages/sensors/sensor/sensor-page.component.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
<div *ngIf="!isDetail; else detailView">
|
||||
<of-sensor-list-container (select)="onSensorSelect($event)"></of-sensor-list-container>
|
||||
</div>
|
||||
|
||||
<ng-template #detailView>
|
||||
<of-sensor-detail-container></of-sensor-detail-container>
|
||||
<!-- <of-probe-detail-container [probeHostID]="probeHostID"
|
||||
(targetSelect)="onTargetSelect($event)"
|
||||
(discovery)="onDiscovery($event)"
|
||||
></of-probe-detail-container> -->
|
||||
</ng-template>
|
50
src/app/pages/sensors/sensor/sensor-page.component.ts
Normal file
50
src/app/pages/sensors/sensor/sensor-page.component.ts
Normal file
|
@ -0,0 +1,50 @@
|
|||
import { Component, OnDestroy } from '@angular/core';
|
||||
import { Router, ActivatedRoute, NavigationEnd } from '@angular/router';
|
||||
import { Subscription } from 'rxjs/Subscription';
|
||||
import { Sensor } from '@overflow/commons-typescript/model/sensor';
|
||||
import { BreadcrumbService } from '@app/commons/service/breadcrumb.service';
|
||||
|
||||
@Component({
|
||||
selector: 'of-pages-sensor',
|
||||
templateUrl: './sensor-page.component.html',
|
||||
})
|
||||
export class SensorPageComponent {
|
||||
|
||||
isDetail: boolean;
|
||||
sensorID: string;
|
||||
|
||||
constructor(
|
||||
private router: Router,
|
||||
private route: ActivatedRoute,
|
||||
private breadcrumbService: BreadcrumbService
|
||||
) {
|
||||
this.route.params.subscribe(params => {
|
||||
if (params['id']) {
|
||||
this.onDetailContainer(params['id']);
|
||||
} else {
|
||||
this.onListContainer();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onListContainer() {
|
||||
this.breadcrumbService.setItems([
|
||||
{ label: 'Sensor', routerLink: ['/sensor/list'], }
|
||||
]);
|
||||
this.isDetail = false;
|
||||
}
|
||||
|
||||
onDetailContainer(sensorHostID: string) {
|
||||
this.sensorID = sensorHostID;
|
||||
this.breadcrumbService.setItems([
|
||||
{ label: 'Sensor', routerLink: ['/sensor/list'] },
|
||||
{ label: this.sensorID }
|
||||
]);
|
||||
this.isDetail = true;
|
||||
}
|
||||
|
||||
onSensorSelect(sensor: Sensor) {
|
||||
this.router.navigate(['sensor', sensor.id, 'info']);
|
||||
}
|
||||
|
||||
}
|
19
src/app/pages/sensors/sensor/sensor-page.module.ts
Normal file
19
src/app/pages/sensors/sensor/sensor-page.module.ts
Normal file
|
@ -0,0 +1,19 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
|
||||
import { PrimeNGModules } from '@overflow/commons/prime-ng/prime-ng.module';
|
||||
import { SensorPageComponent } from './sensor-page.component';
|
||||
import { SensorPageRoutingModule } from './sensor-page-routing.module';
|
||||
import { SensorModule } from '@overflow/sensor/sensor.module';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule,
|
||||
SensorPageRoutingModule,
|
||||
SensorModule
|
||||
],
|
||||
entryComponents: [
|
||||
],
|
||||
declarations: [SensorPageComponent]
|
||||
})
|
||||
export class SensorPageModule { }
|
Loading…
Reference in New Issue
Block a user