Guest User

Untitled

a guest
Sep 2nd, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.02 KB | None | 0 0
  1. import { Component, OnInit, AfterViewInit, ViewChild, ElementRef } from "@angular/core";
  2. import { Observable } from 'rxjs/Observable';
  3. import { BackendService, FirebaseService } from "../services";
  4. import { ListView } from 'ui/list-view';
  5. import { TextField } from 'ui/text-field';
  6. import { ScrollView } from 'ui/scroll-view';
  7.  
  8. @Component({
  9. moduleId: module.id,
  10. selector: "chat-tab",
  11. templateUrl: "chat.tab.component.html",
  12. styleUrls: ["chat.tab.component.css"]
  13. })
  14.  
  15. export class ChatTabComponent implements OnInit {
  16.  
  17. public constructor(
  18. private firebaseService: FirebaseService
  19. ) { }
  20.  
  21. ngOnInit() {
  22. this.me = BackendService.token;
  23. this.chats$ = <any>this.firebaseService.getChats();
  24. }
  25.  
  26.  
  27. public me: String;
  28. @ViewChild("list") lv: ElementRef;
  29. @ViewChild("textfield") tf: ElementRef;
  30. list: ListView;
  31. textfield: TextField;
  32. public chats$: Observable<any>;
  33.  
  34. public ngAfterViewInit() {
  35. this.list = this.lv.nativeElement;
  36. this.textfield = this.tf.nativeElement;
  37. }
  38.  
  39. scroll(count:number){
  40. console.log("scrolling to ", count)
  41. this.list.scrollToIndex(count-1);
  42. this.list.refresh();
  43. }
  44.  
  45. chat(message: string) {
  46. this.firebaseService.chat(message).then((data: any) => {
  47. let count = this.list.items.length;
  48.  
  49. this.scroll(count);
  50. });
  51. this.textfield.text = '';
  52. }
  53.  
  54. filter(sender) {
  55.  
  56. if (sender == BackendService.token) {
  57. return "me";
  58. }
  59. else {
  60. return "them"
  61. }
  62. }
  63.  
  64. align(sender) {
  65.  
  66. if (sender == BackendService.token) {
  67. return "right"
  68. }
  69. else {
  70. return "left"
  71. }
  72. }
  73.  
  74. showImage(sender) {
  75.  
  76. if (sender == BackendService.token) {
  77. return "collapsed"
  78. }
  79. else {
  80. return "visible"
  81. }
  82. }
  83. }
  84.  
  85. import {Injectable, NgZone} from "@angular/core";
  86. import {User, Yowl} from "../models";
  87. import { BackendService } from "./backend.service";
  88. import firebase = require("nativescript-plugin-firebase");
  89. import {Observable} from 'rxjs/Observable';
  90. import {BehaviorSubject} from 'rxjs/BehaviorSubject';
  91. import 'rxjs/add/operator/share';
  92.  
  93. @Injectable()
  94. export class FirebaseService {
  95.  
  96. constructor(
  97. private ngZone: NgZone,
  98. ){}
  99.  
  100. yowls: BehaviorSubject<Array<Yowl>> = new BehaviorSubject([]);
  101. private _allYowls: Array<Yowl> = [];
  102. chats: BehaviorSubject<Array<Yowl>> = new BehaviorSubject([]);
  103. private _allChats: Array<Yowl> = [];
  104.  
  105. getMessage(){
  106. firebase.addOnMessageReceivedCallback(function (data ){
  107. alert(JSON.stringify(data));
  108. })
  109. }
  110.  
  111. register(user: User) {
  112.  
  113. return firebase.createUser({
  114. email: user.email,
  115. password: user.password
  116. }).then(
  117. function (result:any) {
  118. return JSON.stringify(result);
  119. },
  120. function (errorMessage:any) {
  121. alert(errorMessage);
  122. }
  123. )
  124.  
  125. }
  126.  
  127. login(user: User) {
  128.  
  129. return firebase.login({
  130. type: firebase.LoginType.PASSWORD,
  131. passwordOptions: {
  132. email: user.email,
  133. password: user.password
  134. }
  135. }).then((result: any) => {
  136. BackendService.token = result.uid;
  137. return JSON.stringify(result);
  138. }, (errorMessage: any) => {
  139. alert(errorMessage);
  140. });
  141. }
  142.  
  143. logout(){
  144. BackendService.token = "";
  145. firebase.logout();
  146. }
  147.  
  148. resetPassword(email) {
  149. return firebase.resetPassword({
  150. email: email
  151. }).then((result: any) => {
  152. alert(JSON.stringify(result));
  153. },
  154. function (errorMessage:any) {
  155. alert(errorMessage);
  156. }
  157. ).catch(this.handleErrors);
  158. }
  159.  
  160. getYowls(): Observable<any> {
  161.  
  162. return new Observable((observer: any) => {
  163. let path = 'Yowls';
  164. let onValueEvent = (snapshot: any) => {
  165. this.ngZone.run(() => {
  166. let results = this.handleSnapshot(snapshot.value);
  167. observer.next(results);
  168. });
  169. };
  170.  
  171. firebase.addValueEventListener(onValueEvent, `/${path}`);
  172. }).share();
  173. }
  174.  
  175. handleSnapshot(data: any) {
  176. //empty array, then refill and filter
  177. this._allYowls = [];
  178. if (data) {
  179. for (let id in data) {
  180. let result = (<any>Object).assign({id: id}, data[id]);
  181. this._allYowls.push(result);
  182. }
  183. this.publishUpdates();
  184. }
  185.  
  186. return this._allYowls;
  187. }
  188.  
  189. getChats(): Observable<any> {
  190. return new Observable((observer: any) => {
  191. let path = 'Chats';
  192. let onValueEvent = (snapshot: any) => {
  193. this.ngZone.run(() => {
  194. let results = this.handleChatSnapshot(snapshot.value);
  195. observer.next(results);
  196. });
  197. };
  198.  
  199. firebase.addValueEventListener(onValueEvent, `/${path}`);
  200. }).share();
  201. }
  202.  
  203. handleChatSnapshot(data: any) {
  204. //empty array, then refill and filter
  205. this._allChats = [];
  206. if (data) {
  207. for (let id in data) {
  208. let result = (<any>Object).assign({id: id}, data[id]);
  209. this._allChats.push(result);
  210. }
  211. this.publishChatUpdates();
  212. }
  213.  
  214. return this._allChats;
  215. }
  216.  
  217. sendYowl(Yowl:any) {
  218. let yowl = Yowl;
  219. return firebase.push(
  220. "/Yowls",
  221. { "name": "Mr. Growlllr", "username": "MrGrwwlr", "text": "Yooowwwwlll!", "UID": BackendService.token, "date": 0 - Date.now()}
  222. ).then(
  223. function (result:any) {
  224. return 'Yowwled!';
  225. },
  226. function (errorMessage:any) {
  227. console.log(errorMessage);
  228. });
  229. }
  230.  
  231. chat(message:string) {
  232. //let chat = Chat;
  233. console.log(message)
  234. return firebase.push(
  235. "/Chats",
  236. { "message": message, "to": "MrGrwwlr", "from": BackendService.token, "date": 0 - Date.now()}
  237. ).then(
  238. function (result:any) {
  239. return "chatted";
  240. },
  241. function (errorMessage:any) {
  242. console.log(errorMessage);
  243. });
  244. }
  245.  
  246. publishUpdates() {
  247. this._allYowls.sort(function(a, b){
  248. if(a.date < b.date) return -1;
  249. if(a.date > b.date) return 1;
  250. return 0;
  251. })
  252.  
  253. this.yowls.next([...this._allYowls]);
  254. }
  255.  
  256. publishChatUpdates() {
  257. this._allChats.sort(function(a, b){
  258. if(a.date > b.date) return -1;
  259. if(a.date < b.date) return 1;
  260. return 0;
  261. })
  262.  
  263. this.chats.next([...this._allChats]);
  264. }
  265.  
  266. handleErrors(error) {
  267. console.log(JSON.stringify(error));
  268. return Promise.reject(error.message);
  269. }
  270. }
Add Comment
Please, Sign In to add comment