loop-modules
Version:
Shared modules for the Loop product suite.
90 lines (79 loc) • 2.87 kB
text/typescript
// angular
import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
// libs
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
// libs
import { Store } from '@ngrx/store';
// app
import { QueryAction, SetEntriesAction } from '../actions/loop-activity-message.action';
import { APIDispatcher, APIRequestOptions, ResponseBody } from '../utils/index';
import { LoopActivityMessage } from '../interfaces/loop-activity-message.interface';
()
export class LoopActivityMessageService extends APIDispatcher {
lastRequest: any = {
currentPage: 0,
requestSize: 10
};
constructor(public http: Http, public store: Store<any>) {
super(http, store);
}
query(page: number = 0, size: number = 10, options: APIRequestOptions = {archived: false}) {
this.get('ma_loop/api/v1/activity_message/fetch', page, size, options)
.map(res => res.json())
.subscribe((response: ResponseBody) => {
this.loaded = true;
this.lastRequest = response;
this.lastRequest.currentPage = page;
this.lastRequest.requestSize = size;
this.store.dispatch(new QueryAction(response.content));
});
}
acknowledge(message: LoopActivityMessage) {
if(!message.acknowledged_at) {
console.log('updating acknowledge');
this.http.put('ma_loop/api/v1/activity_message/'+message.recipient_identity, {
payload: { acknowledgedAt: new Date().getTime() }
}).subscribe((response: any) => {
this.resetEntries();
this.lastRequest = response;
this.lastRequest.currentPage = 1;
this.query();
});
}
}
archive(message: LoopActivityMessage) {
if(!message.archived_at) {
console.log('updating archive');
this.http.put('ma_loop/api/v1/activity_message/'+message.recipient_identity, {
payload: {
acknowledgedAt: message.acknowledged_at || new Date().getTime(),
archivedAt: new Date().getTime()
}
}).subscribe();
}
}
/**
* Queries the next page from the back-end service, based on the previous request
*
*
* @memberOf LoopActivityMessageService
*/
getNextPage() {
if(this.hasNext) {
this.query(this.lastRequest.currentPage + 1, this.lastRequest.requestSize);
}
}
/**
* Resets the entries in the app-state slice for LoopActivityMessage
*
*
* @memberOf LoopActivityMessageService
*/
resetEntries() {
this.loaded = false;
this.lastRequest = undefined;
this.store.dispatch(new SetEntriesAction([]));
}
}