|
@ -8,6 +8,7 @@ import { UserModel } from "../model/UserModel"; |
|
|
import { UserViewDeps } from "./UserViewDeps"; |
|
|
import { UserViewDeps } from "./UserViewDeps"; |
|
|
import { ObserverData } from "../observe/ObserverData"; |
|
|
import { ObserverData } from "../observe/ObserverData"; |
|
|
import { JsonAPI } from "../singleton/JsonAPI"; |
|
|
import { JsonAPI } from "../singleton/JsonAPI"; |
|
|
|
|
|
import { NotificationService } from "../service/NotificationService"; |
|
|
|
|
|
|
|
|
export class UserView implements Observer<ActiveUserViewModel> { |
|
|
export class UserView implements Observer<ActiveUserViewModel> { |
|
|
|
|
|
|
|
@ -21,6 +22,7 @@ export class UserView implements Observer<ActiveUserViewModel> { |
|
|
private readonly _searchService: SearchService<ActiveUserViewModel>; |
|
|
private readonly _searchService: SearchService<ActiveUserViewModel>; |
|
|
private readonly _userContactOnlineTemplate: Handlebars.TemplateDelegate<ActiveUserViewModel>; |
|
|
private readonly _userContactOnlineTemplate: Handlebars.TemplateDelegate<ActiveUserViewModel>; |
|
|
private readonly _userContactOfflineTemplate: Handlebars.TemplateDelegate<ActiveUserViewModel>; |
|
|
private readonly _userContactOfflineTemplate: Handlebars.TemplateDelegate<ActiveUserViewModel>; |
|
|
|
|
|
private readonly _notificationService: NotificationService; |
|
|
|
|
|
|
|
|
constructor(deps: UserViewDeps) { |
|
|
constructor(deps: UserViewDeps) { |
|
|
this._model = deps.model; |
|
|
this._model = deps.model; |
|
@ -32,6 +34,7 @@ export class UserView implements Observer<ActiveUserViewModel> { |
|
|
this._searchService = deps.searchService; |
|
|
this._searchService = deps.searchService; |
|
|
this._userContactOnlineTemplate = deps.userContactOnlineTemplate; |
|
|
this._userContactOnlineTemplate = deps.userContactOnlineTemplate; |
|
|
this._userContactOfflineTemplate = deps.userContactOfflineTemplate; |
|
|
this._userContactOfflineTemplate = deps.userContactOfflineTemplate; |
|
|
|
|
|
this._notificationService = deps.notificationService; |
|
|
|
|
|
|
|
|
this._addSearchEventListeners(); |
|
|
this._addSearchEventListeners(); |
|
|
} |
|
|
} |
|
@ -39,7 +42,8 @@ export class UserView implements Observer<ActiveUserViewModel> { |
|
|
update(d: ObserverData<ActiveUserViewModel>): void { |
|
|
update(d: ObserverData<ActiveUserViewModel>): void { |
|
|
let html: string = ""; |
|
|
let html: string = ""; |
|
|
d.data.forEach((element: ActiveUserViewModel) => { |
|
|
d.data.forEach((element: ActiveUserViewModel) => { |
|
|
element.online ? html += this._userContactOnlineTemplate(element) : html += this._userContactOfflineTemplate(element); |
|
|
|
|
|
|
|
|
element.online ? html += this._userContactOnlineTemplate(element) : |
|
|
|
|
|
html += this._userContactOfflineTemplate(element); |
|
|
}); |
|
|
}); |
|
|
$(this._usersListElement).html(DOMPurify.sanitize(html)); |
|
|
$(this._usersListElement).html(DOMPurify.sanitize(html)); |
|
|
this._addUserCallBacks(); |
|
|
this._addUserCallBacks(); |
|
@ -53,10 +57,9 @@ export class UserView implements Observer<ActiveUserViewModel> { |
|
|
|
|
|
|
|
|
private _addUserCallBacks(): void { |
|
|
private _addUserCallBacks(): void { |
|
|
let userBoxes = document.getElementsByClassName('user-box'); |
|
|
let userBoxes = document.getElementsByClassName('user-box'); |
|
|
for (let i = 0; i < userBoxes.length; i++) { |
|
|
|
|
|
let userBox = userBoxes[i]; |
|
|
|
|
|
userBoxes[i].addEventListener('click', this._userCallBack.bind(this, userBox)); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Array.from(userBoxes).forEach((ub: Element) => |
|
|
|
|
|
ub.addEventListener('click', this._userCallBack.bind(this, ub))) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -109,10 +112,24 @@ export class UserView implements Observer<ActiveUserViewModel> { |
|
|
JsonAPI.contactName = userName; |
|
|
JsonAPI.contactName = userName; |
|
|
// @ts-ignore: Object is possibly 'null'.
|
|
|
// @ts-ignore: Object is possibly 'null'.
|
|
|
document.getElementById('user-name-span').innerText = userName; |
|
|
document.getElementById('user-name-span').innerText = userName; |
|
|
this._chatModel.getMessages(userName, passphrase, null, "new"); |
|
|
|
|
|
|
|
|
let vm = this._model.activeUsersList.find(vm => vm.userName === userName); |
|
|
|
|
|
if (!vm) { |
|
|
|
|
|
vm = new ActiveUserViewModel(); |
|
|
|
|
|
vm.userName = userName; |
|
|
|
|
|
} |
|
|
|
|
|
this._notificationService.passphrasePrompt(vm, this._model.activeUsersList, |
|
|
|
|
|
this._chatModel.getMessages.bind(this._chatModel), |
|
|
|
|
|
this._promptHandler.bind(this)); |
|
|
|
|
|
// this._chatModel.getMessages(userName, vm.passphrase, null, "new");
|
|
|
el.className += " active"; |
|
|
el.className += " active"; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private _promptHandler(vm: ActiveUserViewModel, vms: ActiveUserViewModel[]) { |
|
|
|
|
|
// vms.filter(v => v.userName == vm.userName).map(v => v.userName = vm.userName)
|
|
|
|
|
|
log.debug(vms) |
|
|
|
|
|
this._model.notify(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
private _addSearchButtonEL() { |
|
|
private _addSearchButtonEL() { |
|
|
this._userSearchButton.addEventListener('submit', (e) => { |
|
|
this._userSearchButton.addEventListener('submit', (e) => { |
|
|
e.preventDefault(); |
|
|
e.preventDefault(); |
|
@ -127,7 +144,7 @@ export class UserView implements Observer<ActiveUserViewModel> { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
let searchResult = this._searchService.search(list, searchTerm); |
|
|
let searchResult = this._searchService.search(list, searchTerm); |
|
|
this.update({data: searchResult, op: ""}); |
|
|
|
|
|
|
|
|
this.update({ data: searchResult, op: "" }); |
|
|
log.debug(searchResult); |
|
|
log.debug(searchResult); |
|
|
}) |
|
|
}) |
|
|
} |
|
|
} |
|
@ -148,7 +165,7 @@ export class UserView implements Observer<ActiveUserViewModel> { |
|
|
this._userSearchInputElement.value = ""; |
|
|
this._userSearchInputElement.value = ""; |
|
|
this._userSearchCancelButton.hidden = true; |
|
|
this._userSearchCancelButton.hidden = true; |
|
|
let list = this._model.activeUsersList; |
|
|
let list = this._model.activeUsersList; |
|
|
this.update({data: list, op: ""}) |
|
|
|
|
|
|
|
|
this.update({ data: list, op: "" }) |
|
|
}) |
|
|
}) |
|
|
} |
|
|
} |
|
|
|
|
|
|