|
|
|
@@ -1,4 +1,4 @@
|
|
|
|
|
<ion-header class="ion-no-border">
|
|
|
|
|
<ion-header class="ion-no-border">
|
|
|
|
|
<ion-toolbar class="header-toolbar">
|
|
|
|
|
<!-- <div #rectangle class="rectangle" (press)="handlePress()">
|
|
|
|
|
Double click me to change the color
|
|
|
|
@@ -24,14 +24,15 @@
|
|
|
|
|
<div hidden class="right">
|
|
|
|
|
<button class="btn-no-color" (click)="openMessagesOptions()">
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " src="assets/images/icons-menu.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " src="assets/images/theme/gov/icons-menu.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " src="assets/images/theme/gov/icons-menu.svg">
|
|
|
|
|
</ion-icon>
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div hidden class="header-bottom" (click)="addContacts()">
|
|
|
|
|
<div class="header-bottom-icon">
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " src="assets/icon/icons-user.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " src="assets/icon/theme/gov/icons-user.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " src="assets/icon/icons-user.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " src="assets/icon/theme/gov/icons-user.svg"></ion-icon>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="header-bottom-contacts">
|
|
|
|
|
<ion-label class="text-color-blue">Adicionar contacto</ion-label>
|
|
|
|
@@ -49,8 +50,11 @@
|
|
|
|
|
</ion-refresher-content>
|
|
|
|
|
</ion-refresher> -->
|
|
|
|
|
<div (click)="handleClick()" class="messages" #scrollMe>
|
|
|
|
|
<div class="messages-list-item-wrapper container-width-100" *ngFor="let msg of wsChatMethodsService.getDmRoom(this.roomId).messages; let last = last" [class.messages-list-item-wrapper-active]="msg._id == selectedMsgId" >
|
|
|
|
|
<div (press)="handlePress(msg._id)" class='message-container incoming-{{msg.u.username!=loggedUser.me.username}}' (click)="downloadFileMsg(msg)" *ngIf="msg.msg !=''">
|
|
|
|
|
<div class="messages-list-item-wrapper container-width-100"
|
|
|
|
|
*ngFor="let msg of wsChatMethodsService.getDmRoom(this.roomId).messages; let last = last"
|
|
|
|
|
[class.messages-list-item-wrapper-active]="msg._id == selectedMsgId">
|
|
|
|
|
<div (press)="handlePress(msg._id)" class='message-container incoming-{{msg.u.username!=loggedUser.me.username}}'
|
|
|
|
|
(click)="downloadFileMsg(msg)" *ngIf="msg.msg !=''">
|
|
|
|
|
<div class="title">
|
|
|
|
|
<ion-label (click)="hkellor()">{{msg.u.name}}</ion-label>
|
|
|
|
|
<span class="time">{{msg.duration}}</span>
|
|
|
|
@@ -61,7 +65,8 @@
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div (press)="handlePress(msg._id)" class='message-container incoming-{{msg.u.username!=loggedUser.me.username}}' (click)="openPreview(msg)" *ngIf="msg.msg !=''">
|
|
|
|
|
<div (press)="handlePress(msg._id)" class='message-container incoming-{{msg.u.username!=loggedUser.me.username}}'
|
|
|
|
|
(click)="openPreview(msg)" *ngIf="msg.msg !=''">
|
|
|
|
|
<div class="title">
|
|
|
|
|
<ion-label>{{msg.u.name}}</ion-label>
|
|
|
|
|
<span class="time">{{msg.duration}}</span>
|
|
|
|
@@ -74,61 +79,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div *ngIf="msg.file">
|
|
|
|
|
<div (press)="handlePress(msg._id)" class='message-container incoming-{{msg.u.username!=loggedUser.me.username}}' *ngIf="msg.file.type != 'application/meeting'">
|
|
|
|
|
<div class="title">
|
|
|
|
|
<ion-label>{{msg.u.name}}</ion-label>
|
|
|
|
|
<span class="time">{{msg.duration}}</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<div *ngIf="msg.attachments" class="message-attachments">
|
|
|
|
|
<div *ngFor="let file of msg.attachments let i = index">
|
|
|
|
|
<div *ngIf="msg.file.type == 'application/img'" (click)="openPreview(msg)">
|
|
|
|
|
<img *ngIf="msg.attachments[0].image_url" src="{{msg.attachments[0].image_url}}" alt="image">
|
|
|
|
|
<ion-icon *ngIf="msg.attachments[0].image_url == null" name="download-outline"></ion-icon>
|
|
|
|
|
</div>
|
|
|
|
|
<div *ngIf="msg.file.type != 'application/img'">
|
|
|
|
|
<div (press)="handlePress(msg._id)"
|
|
|
|
|
class='message-container incoming-{{msg.u.username!=loggedUser.me.username}}'
|
|
|
|
|
*ngIf="msg.file.type != 'application/meeting'">
|
|
|
|
|
<div class="title">
|
|
|
|
|
<ion-label>{{msg.u.name}}</ion-label>
|
|
|
|
|
<span class="time">{{msg.duration}}</span>
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<div *ngIf="msg.attachments" class="message-attachments">
|
|
|
|
|
<div *ngFor="let file of msg.attachments let i = index">
|
|
|
|
|
<div *ngIf="msg.file.type == 'application/img'" (click)="openPreview(msg)">
|
|
|
|
|
<img *ngIf="msg.attachments[0].image_url" src="{{msg.attachments[0].image_url}}" alt="image">
|
|
|
|
|
<ion-icon *ngIf="msg.attachments[0].image_url == null" name="download-outline"></ion-icon>
|
|
|
|
|
</div>
|
|
|
|
|
<div *ngIf="msg.file.type != 'application/img'">
|
|
|
|
|
<div class="file add-attachment-bg-color" *ngIf="msg.file.type != 'application/audio'">
|
|
|
|
|
<div (click)="docIndex(i); viewDocument(msg, file.title_link)" class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
|
|
|
|
|
<div (click)="docIndex(i); viewDocument(msg, file.title_link)"
|
|
|
|
|
class="file-details add-ellipsis cursor-pointer" *ngIf="msg.file">
|
|
|
|
|
<span *ngIf="msg.file.type">
|
|
|
|
|
<fa-icon *ngIf="msg.file.type == 'application/pdf'" icon="file-pdf" class="pdf-icon"></fa-icon>
|
|
|
|
|
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon"></fa-icon>
|
|
|
|
|
<fa-icon *ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'" icon="file-word" class="excel-icon"></fa-icon>
|
|
|
|
|
<ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg"></ion-icon>
|
|
|
|
|
<fa-icon *ngIf="msg.file.type == 'application/word'" icon="file-word" class="word-icon">
|
|
|
|
|
</fa-icon>
|
|
|
|
|
<fa-icon
|
|
|
|
|
*ngIf="msg.file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'"
|
|
|
|
|
icon="file-word" class="excel-icon"></fa-icon>
|
|
|
|
|
<ion-icon *ngIf="msg.file.type == 'application/webtrix'" src="assets/icon/webtrix.svg">
|
|
|
|
|
</ion-icon>
|
|
|
|
|
</span>
|
|
|
|
|
<ion-label class="file-title">{{file.title}}</ion-label>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div *ngIf="msg.file.type == 'application/audio'">
|
|
|
|
|
<audio [src]="file.title_link|safehtml" preload="metadata" class="d-flex width-100" controls controlsList="nodownload noplaybackrate"></audio>
|
|
|
|
|
<div *ngIf="msg.file.type == 'application/audio'" (click)="openPreview(msg)">
|
|
|
|
|
<audio [src]="file.title_link|safehtml" preload="metadata" class="d-flex width-100" controls
|
|
|
|
|
controlsList="nodownload noplaybackrate"></audio>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="file-details-optional add-attachment-bg-color">
|
|
|
|
|
<ion-label *ngIf="msg.file && msg.file != ''">
|
|
|
|
|
<span *ngIf="file.description">{{file.description}}</span>
|
|
|
|
|
<span *ngIf="file.description && msg.file.type != 'application/webtrix'"> • </span>
|
|
|
|
|
<span *ngIf="msg.file.type != 'application/webtrix' && msg.file.type != 'application/audio'">{{msg.displayType}}</span>
|
|
|
|
|
<span
|
|
|
|
|
*ngIf="msg.file.type != 'application/webtrix' && msg.file.type != 'application/audio'">{{msg.displayType}}</span>
|
|
|
|
|
</ion-label>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
{{last ? scrollToBottom() : ''}}
|
|
|
|
|
</div>
|
|
|
|
|
{{last ? scrollToBottom() : ''}}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div *ngIf="msg.file.type == 'application/meeting'" class="info-meeting">
|
|
|
|
|
<ion-label class="info-meeting-small">{{msg.u.name}} criou esta reunião</ion-label><br />
|
|
|
|
|
<button (click)="goToEvent(msg.file.id)" class="btn-no-color info-meeting-normal"><ion-label class="info-meeting-normal">{{msg.file.subject}}</ion-label></button><br />
|
|
|
|
|
<ion-label class="info-meeting-medium"><ion-icon name="calendar-outline"></ion-icon> De {{showDateDuration(msg.file.start_date)}} a {{showDateDuration(msg.file.end_date)}}</ion-label><br />
|
|
|
|
|
<ion-label class="info-meeting-medium"><ion-icon></ion-icon><ion-icon name="location-outline"></ion-icon> {{msg.file.venue}}</ion-label><br />
|
|
|
|
|
</div>
|
|
|
|
|
<div *ngIf="msg.file.type == 'application/meeting'" class="info-meeting">
|
|
|
|
|
<ion-label class="info-meeting-small">{{msg.u.name}} criou esta reunião</ion-label><br />
|
|
|
|
|
<button (click)="goToEvent(msg.file.id)" class="btn-no-color info-meeting-normal">
|
|
|
|
|
<ion-label class="info-meeting-normal">{{msg.file.subject}}</ion-label>
|
|
|
|
|
</button><br />
|
|
|
|
|
<ion-label class="info-meeting-medium">
|
|
|
|
|
<ion-icon name="calendar-outline"></ion-icon> De {{showDateDuration(msg.file.start_date)}} a
|
|
|
|
|
{{showDateDuration(msg.file.end_date)}}
|
|
|
|
|
</ion-label><br />
|
|
|
|
|
<ion-label class="info-meeting-medium">
|
|
|
|
|
<ion-icon></ion-icon>
|
|
|
|
|
<ion-icon name="location-outline"></ion-icon> {{msg.file.venue}}
|
|
|
|
|
</ion-label><br />
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div *ngIf="msg.file">
|
|
|
|
|
<div *ngIf="msg.file.type == 'application/meeting'" class="info-meeting">
|
|
|
|
|
<ion-label class="info-meeting-small">{{msg.u.name}} criou esta reunião</ion-label><br />
|
|
|
|
|
<button (click)="goToEvent(msg.file.id)" class="btn-no-color info-meeting-normal"><ion-label class="info-meeting-normal">{{msg.file.subject}}</ion-label></button><br />
|
|
|
|
|
<ion-label class="info-meeting-medium"><ion-icon name="calendar-outline"></ion-icon> De {{showDateDuration(msg.file.start_date)}} a {{showDateDuration(msg.file.end_date)}}</ion-label><br />
|
|
|
|
|
<ion-label class="info-meeting-medium"><ion-icon></ion-icon><ion-icon name="location-outline"></ion-icon> {{msg.file.venue}}</ion-label><br />
|
|
|
|
|
<button (click)="goToEvent(msg.file.id)" class="btn-no-color info-meeting-normal">
|
|
|
|
|
<ion-label class="info-meeting-normal">{{msg.file.subject}}</ion-label>
|
|
|
|
|
</button><br />
|
|
|
|
|
<ion-label class="info-meeting-medium">
|
|
|
|
|
<ion-icon name="calendar-outline"></ion-icon> De {{showDateDuration(msg.file.start_date)}} a
|
|
|
|
|
{{showDateDuration(msg.file.end_date)}}
|
|
|
|
|
</ion-label><br />
|
|
|
|
|
<ion-label class="info-meeting-medium">
|
|
|
|
|
<ion-icon></ion-icon>
|
|
|
|
|
<ion-icon name="location-outline"></ion-icon> {{msg.file.venue}}
|
|
|
|
|
</ion-label><br />
|
|
|
|
|
</div>
|
|
|
|
|
{{last ? scrollToBottom() : ''}}
|
|
|
|
|
</div>
|
|
|
|
@@ -168,24 +198,24 @@
|
|
|
|
|
<ion-footer>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="typing" *ngIf="wsChatMethodsService.getDmRoom(roomId).otherUserType == true">
|
|
|
|
|
<ngx-letters-avatar
|
|
|
|
|
[avatarName]= "wsChatMethodsService.getGroupRoom(roomId).name"
|
|
|
|
|
[width]="30"
|
|
|
|
|
[circular]="true"
|
|
|
|
|
fontFamily="Roboto"></ngx-letters-avatar>
|
|
|
|
|
<div class="typing" *ngIf="wsChatMethodsService.getDmRoom(roomId).otherUserType == true">
|
|
|
|
|
<ngx-letters-avatar [avatarName]="wsChatMethodsService.getGroupRoom(roomId).name" [width]="30" [circular]="true"
|
|
|
|
|
fontFamily="Roboto"></ngx-letters-avatar>
|
|
|
|
|
está a escrever ...
|
|
|
|
|
</div>
|
|
|
|
|
<div class="width-100 pl-20 pr-20">
|
|
|
|
|
<span *ngIf="!lastAudioRecorded">{{durationDisplay}}</span>
|
|
|
|
|
<audio [src]="audioRecorded" class="d-flex width-100 mt-10 mb-10" *ngIf="lastAudioRecorded" controls controlsList="nodownload noplaybackrate"></audio>
|
|
|
|
|
<audio [src]="audioRecorded" class="d-flex width-100 mt-10 mb-10" *ngIf="lastAudioRecorded" controls
|
|
|
|
|
controlsList="nodownload noplaybackrate"></audio>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div class="container width-100 d-flex">
|
|
|
|
|
<div>
|
|
|
|
|
<button *ngIf="!recording && !lastAudioRecorded && allowTyping" class="btn-no-color" (click)="openChatOptions()">
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="chat-icon-options" src="assets/images/icons-add.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="chat-icon-options" src="assets/images/theme/gov/icons-add.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="chat-icon-options"
|
|
|
|
|
src="assets/images/icons-add.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="chat-icon-options"
|
|
|
|
|
src="assets/images/theme/gov/icons-add.svg"></ion-icon>
|
|
|
|
|
</button>
|
|
|
|
|
<button *ngIf="recording || lastAudioRecorded || !allowTyping" class="btn-no-color" (click)="deleteRecording()">
|
|
|
|
|
<fa-icon class="icon-size-27" icon="trash"></fa-icon>
|
|
|
|
@@ -193,28 +223,40 @@
|
|
|
|
|
</div>
|
|
|
|
|
<div class="width-70 message-container">
|
|
|
|
|
<div *ngIf="!recording && !lastAudioRecorded" class="type-message">
|
|
|
|
|
<ion-textarea *ngIf="allowTyping" autocomplete="on" autocorrect="on" spellcheck="true" clearOnEdit="true" placeholder="Escrever uma mensagem" auto-grow class="message-input" rows="1" [(ngModel)]="wsChatMethodsService.getDmRoom(roomId).message" (ionChange)="wsChatMethodsService.getDmRoom(roomId).sendTyping()"></ion-textarea>
|
|
|
|
|
<ion-textarea *ngIf="allowTyping" autocomplete="on" autocorrect="on" spellcheck="true" clearOnEdit="true"
|
|
|
|
|
placeholder="Escrever uma mensagem" auto-grow class="message-input" rows="1"
|
|
|
|
|
[(ngModel)]="wsChatMethodsService.getDmRoom(roomId).message"
|
|
|
|
|
(ionChange)="wsChatMethodsService.getDmRoom(roomId).sendTyping()"></ion-textarea>
|
|
|
|
|
</div>
|
|
|
|
|
<div *ngIf="recording" class="d-flex align-items-center justify-content-center">
|
|
|
|
|
<button (click)="stopRecording()" class="btn-no-color d-flex align-items-center justify-content-center">
|
|
|
|
|
<ion-icon class="icon-size-45" name="stop-circle-outline" color="danger"></ion-icon>
|
|
|
|
|
<ion-icon class="icon-size-45" name="stop-circle-outline" color="danger"></ion-icon>
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
<button #recordbtn *ngIf="!wsChatMethodsService.getDmRoom(roomId).message && !lastAudioRecorded" (click)="startRecording()" class="btn-no-color">
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="chat-icon-send" src="assets/icon/theme/default/icons-chat-record-audio.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="chat-icon-send" src="assets/icon/theme/gov/icons-chat-record-audio.svg"></ion-icon>
|
|
|
|
|
<button #recordbtn *ngIf="!wsChatMethodsService.getDmRoom(roomId).message && !lastAudioRecorded"
|
|
|
|
|
(click)="startRecording()" class="btn-no-color">
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="chat-icon-send"
|
|
|
|
|
src="assets/icon/theme/default/icons-chat-record-audio.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="chat-icon-send"
|
|
|
|
|
src="assets/icon/theme/gov/icons-chat-record-audio.svg"></ion-icon>
|
|
|
|
|
</button>
|
|
|
|
|
<button *ngIf="wsChatMethodsService.getDmRoom(roomId).message" class="btn-no-color" (click)="sendMessage()" class="btn-no-color">
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="chat-icon-send" src="assets/icon/theme/gov/icons-chat-send.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="chat-icon-send" src="assets/icon/theme/gov/icons-chat-send.svg"></ion-icon>
|
|
|
|
|
<button *ngIf="wsChatMethodsService.getDmRoom(roomId).message" class="btn-no-color" (click)="sendMessage()"
|
|
|
|
|
class="btn-no-color">
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="chat-icon-send"
|
|
|
|
|
src="assets/icon/theme/gov/icons-chat-send.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="chat-icon-send"
|
|
|
|
|
src="assets/icon/theme/gov/icons-chat-send.svg"></ion-icon>
|
|
|
|
|
</button>
|
|
|
|
|
<button *ngIf="!wsChatMethodsService.getDmRoom(roomId).message && lastAudioRecorded" (click)="sendAudio(lastAudioRecorded)" class="btn-no-color">
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="chat-icon-send" src="assets/icon/theme/gov/icons-chat-send.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="chat-icon-send" src="assets/icon/theme/gov/icons-chat-send.svg"></ion-icon>
|
|
|
|
|
<button *ngIf="!wsChatMethodsService.getDmRoom(roomId).message && lastAudioRecorded"
|
|
|
|
|
(click)="sendAudio(lastAudioRecorded)" class="btn-no-color">
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'default' " class="chat-icon-send"
|
|
|
|
|
src="assets/icon/theme/gov/icons-chat-send.svg"></ion-icon>
|
|
|
|
|
<ion-icon *ngIf="ThemeService.currentTheme == 'gov' " class="chat-icon-send"
|
|
|
|
|
src="assets/icon/theme/gov/icons-chat-send.svg"></ion-icon>
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</ion-footer>
|
|
|
|
|
</ion-footer>
|