Merge branch 'master' of https://git.loafle.net/overflow/overflow-webapp
This commit is contained in:
commit
2d1c5c0e11
@ -35,11 +35,13 @@
|
||||
"@ngrx/store": "^5.2.0",
|
||||
"@ngrx/store-devtools": "^5.2.0",
|
||||
"@swimlane/ngx-charts": "^7.1.1",
|
||||
"angular-tree-component": "^7.0.1",
|
||||
"core-js": "^2.5.3",
|
||||
"d3": "^4.13.0",
|
||||
"hammerjs": "^2.0.8",
|
||||
"ng2-odometer": "^1.1.3",
|
||||
"ngx-cookie-service": "^1.0.10",
|
||||
"ng2-nvd3": "^2.0.0",
|
||||
"ngx-perfect-scrollbar": "^5.3.1",
|
||||
"rxjs": "^5.5.6",
|
||||
"zone.js": "^0.8.20",
|
||||
|
@ -1,121 +0,0 @@
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Observer } from 'rxjs/Observer';
|
||||
import { Subject } from 'rxjs/Subject';
|
||||
import {
|
||||
WebSocketSubject,
|
||||
WebSocketSubjectConfig
|
||||
} from 'rxjs/observable/dom/WebSocketSubject';
|
||||
|
||||
import 'rxjs/add/operator/distinctUntilChanged';
|
||||
import 'rxjs/add/operator/share';
|
||||
import 'rxjs/add/operator/takeWhile';
|
||||
import 'rxjs/add/observable/interval';
|
||||
|
||||
export interface Codec {
|
||||
decode(e: MessageEvent): any;
|
||||
encode(data: any): string;
|
||||
}
|
||||
|
||||
export const defaultCodec: Codec = {
|
||||
encode: (e: MessageEvent) => {
|
||||
return JSON.parse(e.data);
|
||||
},
|
||||
decode: (data: any): string => {
|
||||
return JSON.stringify(data);
|
||||
}
|
||||
};
|
||||
|
||||
export class RxWebsocketSubject<T> extends Subject<T> {
|
||||
private reconnectionObservable: Observable<number>;
|
||||
private wsSubjectConfig: WebSocketSubjectConfig;
|
||||
private socket: WebSocketSubject<any>;
|
||||
private connectionObserver: Observer<boolean>;
|
||||
private _connectionStatus: Observable<boolean>;
|
||||
|
||||
private _reconnectInterval = 5000;
|
||||
private _reconnectAttempts = 10;
|
||||
|
||||
public constructor(private url: string, private codec?: Codec) {
|
||||
super();
|
||||
|
||||
this._connectionStatus = new Observable<boolean>((observer) => {
|
||||
this.connectionObserver = observer;
|
||||
}).share().distinctUntilChanged();
|
||||
|
||||
if (undefined === codec) {
|
||||
this.codec = defaultCodec;
|
||||
}
|
||||
|
||||
this.wsSubjectConfig = {
|
||||
url: url,
|
||||
closeObserver: {
|
||||
next: (e: CloseEvent) => {
|
||||
this.socket = null;
|
||||
this.connectionObserver.next(false);
|
||||
}
|
||||
},
|
||||
openObserver: {
|
||||
next: (e: Event) => {
|
||||
this.connectionObserver.next(true);
|
||||
}
|
||||
},
|
||||
resultSelector: this.codec.decode,
|
||||
};
|
||||
|
||||
this._connectionStatus.subscribe((isConnected: boolean) => {
|
||||
if (!this.reconnectionObservable && typeof(isConnected) === 'boolean' && !isConnected) {
|
||||
this.reconnect();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public set reconnectInterval(reconnectInterval: number) {
|
||||
this._reconnectInterval = reconnectInterval;
|
||||
}
|
||||
|
||||
public set reconnectAttempts(reconnectAttempts: number) {
|
||||
this._reconnectAttempts = reconnectAttempts;
|
||||
}
|
||||
|
||||
public get connectionStatus(): Observable<boolean> {
|
||||
return this._connectionStatus;
|
||||
}
|
||||
|
||||
public connect(): void {
|
||||
this.socket = new WebSocketSubject(this.wsSubjectConfig);
|
||||
this.socket.subscribe(
|
||||
(m) => {
|
||||
this.next(m);
|
||||
},
|
||||
(error: Event) => {
|
||||
if (!this.socket) {
|
||||
this.reconnect();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private reconnect(): void {
|
||||
this.reconnectionObservable = Observable.interval(this._reconnectInterval)
|
||||
.takeWhile((v, index) => {
|
||||
return index < this._reconnectAttempts && !this.socket;
|
||||
});
|
||||
this.reconnectionObservable.subscribe(
|
||||
() => {
|
||||
this.connect();
|
||||
},
|
||||
null,
|
||||
() => {
|
||||
this.reconnectionObservable = null;
|
||||
if (!this.socket) {
|
||||
this.complete();
|
||||
this.connectionObserver.complete();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public send(data: any): void {
|
||||
this.socket.next(this.codec.encode(data));
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ import {
|
||||
ActionReducerMap,
|
||||
} from '@ngrx/store';
|
||||
|
||||
import { StateSelector } from 'packages/commons/util/ngrx/store';
|
||||
import { StateSelector } from 'packages/core/ngrx/store';
|
||||
|
||||
import { MODULE } from '../member.constant';
|
||||
|
||||
|
@ -4,7 +4,7 @@ import {
|
||||
ActionReducerMap,
|
||||
} from '@ngrx/store';
|
||||
|
||||
import { StateSelector } from 'packages/commons/util/ngrx/store';
|
||||
import { StateSelector } from 'packages/core/ngrx/store';
|
||||
|
||||
import { MODULE } from '../meta.constant';
|
||||
|
||||
|
@ -3,7 +3,7 @@ import {
|
||||
createFeatureSelector,
|
||||
} from '@ngrx/store';
|
||||
|
||||
import { StateSelector } from 'packages/commons/util/ngrx/store';
|
||||
import { StateSelector } from 'packages/core/ngrx/store';
|
||||
|
||||
import { MODULE } from '../noauth-probe.constant';
|
||||
|
||||
|
@ -8,6 +8,7 @@ import * as NotificationStore from '../../store/notification';
|
||||
import { ReadAllByMemberSelector } from '../../store';
|
||||
import { AuthSelector } from 'packages/member/store';
|
||||
import { Member } from '../../../member/model';
|
||||
import { PageParams } from 'app/commons/model';
|
||||
|
||||
@Component({
|
||||
selector: 'of-notification',
|
||||
@ -18,7 +19,7 @@ export class NotificationComponent implements OnInit, AfterContentInit {
|
||||
|
||||
notification$ = this.store.pipe(select(ReadAllByMemberSelector.select('notifications')));
|
||||
|
||||
displayedColumns = ['id', 'title', 'message', 'member' ];
|
||||
displayedColumns = ['id', 'title', 'message', 'member'];
|
||||
dataSource: MatTableDataSource<Notification>;
|
||||
@ViewChild(MatSort) sort: MatSort;
|
||||
|
||||
@ -30,9 +31,6 @@ export class NotificationComponent implements OnInit, AfterContentInit {
|
||||
ngOnInit() {
|
||||
this.notification$.subscribe(
|
||||
(notifications: Notification[]) => {
|
||||
console.log('#########');
|
||||
console.log(notifications);
|
||||
console.log('#########');
|
||||
this.dataSource = new MatTableDataSource(notifications);
|
||||
this.dataSource.sort = this.sort;
|
||||
},
|
||||
@ -43,15 +41,18 @@ export class NotificationComponent implements OnInit, AfterContentInit {
|
||||
}
|
||||
|
||||
ngAfterContentInit() {
|
||||
this.store.select(AuthSelector.select('member')).subscribe(
|
||||
(member: Member) => {
|
||||
console.log(member);
|
||||
this.store.dispatch(new NotificationStore.ReadAllByMember(member));
|
||||
},
|
||||
(error) => {
|
||||
console.log(error);
|
||||
}
|
||||
);
|
||||
// this.store.select(AuthSelector.select('member')).subscribe(
|
||||
// (member: Member) => {
|
||||
// const pageParams: PageParams = {
|
||||
// pageNo: '1',
|
||||
// countPerPage: '10',
|
||||
// };
|
||||
// this.store.dispatch(new NotificationStore.ReadAllByMember({member, pageParams}));
|
||||
// },
|
||||
// (error) => {
|
||||
// console.log(error);
|
||||
// }
|
||||
// );
|
||||
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,7 @@ import { RPCClient } from 'packages/core/rpc/client/RPCClient';
|
||||
|
||||
import { Notification } from '../model';
|
||||
import { Member } from '../../member/model';
|
||||
import { PageParams } from 'app/commons/model';
|
||||
|
||||
@Injectable()
|
||||
export class NotificationService {
|
||||
@ -17,9 +18,9 @@ export class NotificationService {
|
||||
|
||||
}
|
||||
|
||||
public readAllByMember(member: Member): Observable<Notification[]> {
|
||||
public readAllByMember(member: Member, pageParams: PageParams): Observable<Notification[]> {
|
||||
|
||||
return this.rpcClient.call('NotificationService.readAllByMember', member);
|
||||
return this.rpcClient.call('NotificationService.readAllByMember', member, pageParams);
|
||||
}
|
||||
|
||||
|
||||
|
@ -4,7 +4,7 @@ import {
|
||||
ActionReducerMap,
|
||||
} from '@ngrx/store';
|
||||
|
||||
import { StateSelector } from 'packages/commons/util/ngrx/store';
|
||||
import { StateSelector } from 'packages/core/ngrx/store';
|
||||
|
||||
import { MODULE } from '../notification.constant';
|
||||
|
||||
|
@ -4,6 +4,7 @@ import { RPCError } from 'packages/core/rpc/error';
|
||||
|
||||
import { Notification } from '../../model';
|
||||
import { Member } from '../../../member/model';
|
||||
import { PageParams } from 'app/commons/model';
|
||||
|
||||
export enum ActionType {
|
||||
ReadAllByMember = '[Notification.notification] ReadAllByMember',
|
||||
@ -14,7 +15,7 @@ export enum ActionType {
|
||||
export class ReadAllByMember implements Action {
|
||||
readonly type = ActionType.ReadAllByMember;
|
||||
|
||||
constructor(public payload: Member) {}
|
||||
constructor(public payload: { member: Member, pageParams: PageParams }) {}
|
||||
}
|
||||
|
||||
export class ReadAllByMemberSuccess implements Action {
|
||||
|
@ -46,7 +46,7 @@ export class Effects {
|
||||
// );
|
||||
.ofType(ActionType.ReadAllByMember)
|
||||
.map((action: ReadAllByMember) => action.payload)
|
||||
.switchMap(payload => this.notificationService.readAllByMember(payload))
|
||||
.switchMap(payload => this.notificationService.readAllByMember(payload.member, payload.pageParams))
|
||||
.map(notifications => {
|
||||
return new ReadAllByMemberSuccess(notifications);
|
||||
})
|
||||
|
@ -4,7 +4,7 @@ import {
|
||||
ActionReducerMap,
|
||||
} from '@ngrx/store';
|
||||
|
||||
import { StateSelector } from 'packages/commons/util/ngrx/store';
|
||||
import { StateSelector } from 'packages/core/ngrx/store';
|
||||
|
||||
import { MODULE } from '../probe.constant';
|
||||
|
||||
|
@ -4,7 +4,7 @@ import {
|
||||
ActionReducerMap,
|
||||
} from '@ngrx/store';
|
||||
|
||||
import { StateSelector } from 'packages/commons/util/ngrx/store';
|
||||
import { StateSelector } from 'packages/core/ngrx/store';
|
||||
|
||||
import { MODULE } from '../sensor.constant';
|
||||
|
||||
|
45
yarn.lock
45
yarn.lock
@ -409,6 +409,14 @@ angular-l10n@^4.1.5:
|
||||
dependencies:
|
||||
tslib "^1.7.1"
|
||||
|
||||
angular-tree-component@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/angular-tree-component/-/angular-tree-component-7.0.1.tgz#fc8d0e72d8c34b87131a3ba2bd32ad20945689ac"
|
||||
dependencies:
|
||||
lodash "4.17.4"
|
||||
mobx ">=3"
|
||||
mobx-angular ">=1"
|
||||
|
||||
angularx-qrcode@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/angularx-qrcode/-/angularx-qrcode-1.0.1.tgz#9b10423995cd7448ef38843e241407ce7337daad"
|
||||
@ -1964,6 +1972,10 @@ d3-zoom@1.7.1:
|
||||
d3-selection "1"
|
||||
d3-transition "1"
|
||||
|
||||
d3@^3.5.15:
|
||||
version "3.5.17"
|
||||
resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8"
|
||||
|
||||
d3@^4.13.0:
|
||||
version "4.13.0"
|
||||
resolved "https://registry.yarnpkg.com/d3/-/d3-4.13.0.tgz#ab236ff8cf0cfc27a81e69bf2fb7518bc9b4f33d"
|
||||
@ -4295,7 +4307,7 @@ lodash.uniq@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||
|
||||
lodash@^4.0.0, lodash@^4.11.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.5.0, lodash@~4.17.4:
|
||||
lodash@4.17.4, lodash@^4.0.0, lodash@^4.11.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.5.0, lodash@~4.17.4:
|
||||
version "4.17.4"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
|
||||
|
||||
@ -4598,6 +4610,14 @@ mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkd
|
||||
dependencies:
|
||||
minimist "0.0.8"
|
||||
|
||||
mobx-angular@>=1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/mobx-angular/-/mobx-angular-3.0.1.tgz#881379acea563c0767550d1f7801ab3434449bb1"
|
||||
|
||||
mobx@>=3:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/mobx/-/mobx-4.0.1.tgz#321945580f7d3bf7b1f60ddaa1d623835683b5a2"
|
||||
|
||||
module-deps@^4.0.8:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd"
|
||||
@ -4682,6 +4702,15 @@ netmask@~1.0.4:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35"
|
||||
|
||||
ng2-nvd3@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ng2-nvd3/-/ng2-nvd3-2.0.0.tgz#70db3652ba03bc874c4187b30964a26aae23f52a"
|
||||
dependencies:
|
||||
d3 "^3.5.15"
|
||||
nvd3 "^1.8.5"
|
||||
reflect-metadata "^0.1.10"
|
||||
rxjs "5.2.0"
|
||||
|
||||
ng2-odometer@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/ng2-odometer/-/ng2-odometer-1.1.3.tgz#27209e7ed225790120635aba2281b8a9318b6f47"
|
||||
@ -4926,6 +4955,10 @@ number-is-nan@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
|
||||
|
||||
nvd3@^1.8.5:
|
||||
version "1.8.6"
|
||||
resolved "https://registry.yarnpkg.com/nvd3/-/nvd3-1.8.6.tgz#2d3eba74bf33363b5101ebf1d093c59a53ae73c4"
|
||||
|
||||
oauth-sign@~0.8.1:
|
||||
version "0.8.2"
|
||||
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
|
||||
@ -5951,7 +5984,7 @@ reduce-function-call@^1.0.1:
|
||||
dependencies:
|
||||
balanced-match "^0.4.2"
|
||||
|
||||
reflect-metadata@^0.1.2:
|
||||
reflect-metadata@^0.1.10, reflect-metadata@^0.1.2:
|
||||
version "0.1.12"
|
||||
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.12.tgz#311bf0c6b63cd782f228a81abe146a2bfa9c56f2"
|
||||
|
||||
@ -6189,6 +6222,12 @@ rw@1:
|
||||
version "1.3.3"
|
||||
resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
|
||||
|
||||
rxjs@5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.2.0.tgz#db537de8767c05fa73721587a29e0085307d318b"
|
||||
dependencies:
|
||||
symbol-observable "^1.0.1"
|
||||
|
||||
rxjs@^5.5.2, rxjs@^5.5.6:
|
||||
version "5.5.6"
|
||||
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02"
|
||||
@ -6913,7 +6952,7 @@ svgo@^0.7.0:
|
||||
sax "~1.2.1"
|
||||
whet.extend "~0.9.9"
|
||||
|
||||
symbol-observable@1.0.1:
|
||||
symbol-observable@1.0.1, symbol-observable@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user