import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpResponseBase } from '@angular/common/http'; import { Store, select } from '@ngrx/store'; import { KstConfig } from '../config/chat.config'; import { Observable, throwError as _observableThrow, of as _observableOf } from 'rxjs'; import { mergeMap as _observableMergeMap, catchError as _observableCatch, finalize, filter } from 'rxjs/operators'; import { processStatus } from './http-service-base'; import { ChatSession } from './chat-session'; import { PostMessage } from '../store/entities'; @Injectable() export class ChatService { protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; $chat: Observable<{ chat: any }>; constructor( private http: HttpClient, private store: Store<{ chat: any }>, private session: ChatSession, ) { this.$chat = this.store.pipe(select('chat')); } sendMessage(message: PostMessage) { const self = this; const content_ = JSON.stringify(message); const options_: any = { observe: 'response', responseType: 'blob', headers: new HttpHeaders({ 'X-Auth-Token': self.session.authToken, 'X-User-Id': self.session.userid, Accept: 'application/json', "Content-Type": "application/json" }), body: content_, }; return self.http.request('post', KstConfig.url + '/api/v1/chat.postMessage', options_) .pipe(_observableMergeMap((response_: any) => { return processStatus(response_); })) .pipe(_observableCatch((response_: any) => { if (response_ instanceof HttpResponseBase) { try { return processStatus(response_); } catch (e) { return _observableThrow(e) as any as Observable; } } else { return >_observableThrow(response_); } })); } }