@chat21/chat21-ionic 3.0.59-rc5 → 3.0.60-rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +89 -1
- package/README.md +5 -0
- package/config.xml +2 -2
- package/env.sample +3 -1
- package/package.json +1 -1
- package/resources/Android/splash/drawable-land-hdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-land-ldpi-screen.png +0 -0
- package/resources/Android/splash/drawable-land-mdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-land-xhdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-land-xxhdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-land-xxxhdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-port-hdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-port-ldpi-screen.png +0 -0
- package/resources/Android/splash/drawable-port-mdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-port-xhdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-port-xxhdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-port-xxxhdpi-screen.png +0 -0
- package/resources/Android/splash.png +0 -0
- package/src/app/app.component.scss +10 -5
- package/src/app/app.component.ts +358 -233
- package/src/app/app.module.ts +12 -7
- package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.html +1 -1
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +8 -7
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +2 -1
- package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.html +1 -1
- package/src/app/components/authentication/login/login.component.html +8 -8
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +2 -4
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +7 -2
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +57 -39
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +16 -3
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +73 -89
- package/src/app/components/ddp-header/ddp-header.component.html +1 -1
- package/src/app/components/ddp-header/ddp-header.component.ts +4 -2
- package/src/app/components/project-item/project-item.component.html +61 -16
- package/src/app/components/project-item/project-item.component.scss +165 -38
- package/src/app/components/project-item/project-item.component.ts +88 -46
- package/src/app/pages/authentication/login/login.page.html +1 -2
- package/src/app/pages/conversation-detail/conversation-detail.module.ts +3 -2
- package/src/app/pages/conversation-detail/conversation-detail.page.html +1 -0
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +62 -1
- package/src/app/pages/conversations-list/conversations-list.page.html +12 -7
- package/src/app/pages/conversations-list/conversations-list.page.scss +279 -261
- package/src/app/pages/conversations-list/conversations-list.page.ts +152 -18
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +10 -2
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +79 -0
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +47 -36
- package/src/app/services/app-config.ts +77 -5
- package/src/app/services/websocket/websocket-js.ts +19 -18
- package/src/app/services/websocket/websocket.service.ts +27 -9
- package/src/app/shared/shared.module.ts +5 -5
- package/src/assets/i18n/en.json +4 -1
- package/src/assets/i18n/it.json +4 -1
- package/src/assets/js/chat21client.js +144 -82
- package/src/assets/logo.png +0 -0
- package/src/assets/transparent.png +0 -0
- package/src/chat-config-pre-test.json +3 -1
- package/src/chat-config-template.json +4 -1
- package/src/chat-config.json +4 -1
- package/src/chat21-core/providers/firebase/firebase-archivedconversations-handler.ts +1 -1
- package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +1 -1
- package/src/chat21-core/providers/firebase/firebase-notifications.ts +31 -23
- package/src/chat21-core/providers/mqtt/mqtt-auth-service.ts +27 -27
- package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +3 -5
- package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +13 -5
- package/src/chat21-core/providers/mqtt/mqtt-notifications.ts +101 -11
- package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +12 -3
- package/src/chat21-core/utils/utils-message.ts +2 -2
- package/src/firebase-messaging-sw-template.js +1 -1
- package/src/assets/images/tiledesk_logo_50x50.png +0 -0
package/src/app/app.module.ts
CHANGED
|
@@ -103,7 +103,7 @@ export function createTranslateLoader(http: HttpClient) {
|
|
|
103
103
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
export function authenticationFactory(http: HttpClient, appConfig: AppConfigProvider, chat21Service: Chat21Service, appSorage: AppStorageService, network: Network, connectionService:ConnectionService) {
|
|
106
|
+
export function authenticationFactory(http: HttpClient, appConfig: AppConfigProvider, chat21Service: Chat21Service, appSorage: AppStorageService, network: Network, connectionService: ConnectionService) {
|
|
107
107
|
const config = appConfig.getConfig()
|
|
108
108
|
if (config.chatEngine === CHAT_ENGINE_MQTT) {
|
|
109
109
|
|
|
@@ -112,8 +112,13 @@ export function authenticationFactory(http: HttpClient, appConfig: AppConfigProv
|
|
|
112
112
|
|
|
113
113
|
const auth = new MQTTAuthService(http, chat21Service, appSorage);
|
|
114
114
|
|
|
115
|
-
auth.setBaseUrl(appConfig.getConfig().apiUrl)
|
|
116
|
-
|
|
115
|
+
auth.setBaseUrl(appConfig.getConfig().apiUrl);
|
|
116
|
+
|
|
117
|
+
if (config.pushEngine = PUSH_ENGINE_MQTT) {
|
|
118
|
+
// FOR PUSH NOTIFICATIONS INIT FIREBASE APP
|
|
119
|
+
FirebaseInitService.initFirebase(config.firebaseConfig);
|
|
120
|
+
}
|
|
121
|
+
|
|
117
122
|
return auth
|
|
118
123
|
} else {
|
|
119
124
|
|
|
@@ -121,7 +126,7 @@ export function authenticationFactory(http: HttpClient, appConfig: AppConfigProv
|
|
|
121
126
|
// console.log('[APP-MOD] FirebaseInitService config ', config)
|
|
122
127
|
const auth = new FirebaseAuthService(http, network, connectionService);
|
|
123
128
|
auth.setBaseUrl(config.apiUrl)
|
|
124
|
-
|
|
129
|
+
|
|
125
130
|
return auth
|
|
126
131
|
}
|
|
127
132
|
}
|
|
@@ -217,12 +222,12 @@ export function uploadFactory(http: HttpClient, appConfig: AppConfigProvider, ap
|
|
|
217
222
|
}
|
|
218
223
|
}
|
|
219
224
|
|
|
220
|
-
export function notificationsServiceFactory(appConfig: AppConfigProvider) {
|
|
225
|
+
export function notificationsServiceFactory(appConfig: AppConfigProvider, chat21Service: Chat21Service) {
|
|
221
226
|
const config = appConfig.getConfig()
|
|
222
227
|
if (config.pushEngine === PUSH_ENGINE_FIREBASE) {
|
|
223
228
|
return new FirebaseNotifications();
|
|
224
229
|
} else if (config.pushEngine === PUSH_ENGINE_MQTT) {
|
|
225
|
-
return new MQTTNotifications();
|
|
230
|
+
return new MQTTNotifications(chat21Service);
|
|
226
231
|
} else {
|
|
227
232
|
return;
|
|
228
233
|
}
|
|
@@ -340,7 +345,7 @@ const appInitializerFn = (appConfig: AppConfigProvider, logger: NGXLogger) => {
|
|
|
340
345
|
{
|
|
341
346
|
provide: NotificationsService,
|
|
342
347
|
useFactory: notificationsServiceFactory,
|
|
343
|
-
deps: [AppConfigProvider]
|
|
348
|
+
deps: [AppConfigProvider, Chat21Service]
|
|
344
349
|
},
|
|
345
350
|
{
|
|
346
351
|
provide: AppStorageService,
|
package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<div class="chat21-bounce1" [ngStyle]="{'background-color': stylesMap.get('themeColor')}"></div>
|
|
11
11
|
<div class="chat21-bounce2" [ngStyle]="{'background-color': stylesMap.get('themeColor')}"></div>
|
|
12
12
|
<div class="chat21-bounce3" [ngStyle]="{'background-color': stylesMap.get('themeColor')}"></div>
|
|
13
|
-
<span>{{translationMap
|
|
13
|
+
<span>{{translationMap?.get('LABEL_LOADING')}}</span>
|
|
14
14
|
</div>
|
|
15
15
|
</span>
|
|
16
16
|
|
|
@@ -74,7 +74,8 @@
|
|
|
74
74
|
</ion-item-options>
|
|
75
75
|
</ion-item-sliding> -->
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
|
|
78
|
+
<ion-item button="true" lines="none" class="ion-no-padding" [class.ion-selected]="conversation?.uid === uidConvSelected"
|
|
78
79
|
*ngFor="let conversation of listConversations" (click)="openConversationByID(conversation)" detail=false>
|
|
79
80
|
<div tabindex="0"></div>
|
|
80
81
|
|
|
@@ -117,7 +118,8 @@
|
|
|
117
118
|
<ion-note *ngIf="!conversation.archived" class="conversation_time">{{conversation.timestamp | amTimeAgo}}</ion-note>
|
|
118
119
|
|
|
119
120
|
<ion-buttons slot="end">
|
|
120
|
-
<ion-button *ngIf="!conversation.archived"
|
|
121
|
+
<ion-button *ngIf="!conversation.archived"
|
|
122
|
+
[ngClass]="{'hide': !isApp, 'button-on-desktop': !isApp, 'button-on-mobile': isApp }"
|
|
121
123
|
id="{{ 'close_conversation_button' + conversation.uid }}" class="close-conversation-button" ion-button clear
|
|
122
124
|
item-end (click)="closeConversation(conversation);$event.stopPropagation();" padding>
|
|
123
125
|
<ion-icon slot="icon-only" style="display:block;" id="{{ 'close_button_icon' + conversation.uid }}"
|
|
@@ -132,21 +134,20 @@
|
|
|
132
134
|
|
|
133
135
|
<div item-end *ngIf="conversation?.archived" class="achived-icon-wpr">
|
|
134
136
|
<span *ngIf="(conversation.timestamp | amDateFormat:'YYYY') === currentYear" class="time-in-archived">
|
|
135
|
-
{{browserLang === '
|
|
136
|
-
amDateFormat:'MMM DD')}}
|
|
137
|
+
{{browserLang === 'en' ? (conversation.timestamp | amDateFormat:'MMM DD') : (conversation.timestamp| amDateFormat:'DD MMM')}}
|
|
137
138
|
|
|
138
139
|
<!-- {{conversation.timestamp | amDateFormat:'DD MMM'}} -->
|
|
139
140
|
</span>
|
|
140
141
|
<span *ngIf="(conversation.timestamp | amDateFormat:'YYYY') !== currentYear" class="time-in-archived">
|
|
141
|
-
{{browserLang === '
|
|
142
|
-
amDateFormat:'MMM DD YYYY')}}
|
|
142
|
+
{{browserLang === 'en' ? (conversation.timestamp | amDateFormat:'MMM DD YYYY') : (conversation.timestamp| amDateFormat:'DD MMM YYYY') }}
|
|
143
143
|
<!-- {{conversation.timestamp | amDateFormat:'DD MMM YYYY'}} -->
|
|
144
144
|
</span>
|
|
145
145
|
<i class="material-icons" item-end style="font-size: 15px;font-weight: 400;color: #666666;"> history </i>
|
|
146
146
|
</div>
|
|
147
147
|
|
|
148
148
|
<!-- && !conversation?.archived -->
|
|
149
|
-
<div item-end class="notification_point"
|
|
149
|
+
<div item-end class="notification_point"
|
|
150
|
+
[ngClass]="{'notification_point-on-desktop': !isApp, 'notification_point-on-mobile': isApp }"
|
|
150
151
|
*ngIf="conversation.is_new">
|
|
151
152
|
</div>
|
|
152
153
|
|
|
@@ -78,9 +78,10 @@ export class IonListConversationsComponent extends ListConversationsComponent im
|
|
|
78
78
|
this.isApp = this.platform.is('ios') || this.platform.is('android')
|
|
79
79
|
this.logger.log('[ION-LIST-CONVS-COMP] - ngOnInit - IS-APP ', this.isApp)
|
|
80
80
|
this.logger.log('[ION-LIST-CONVS-COMP] - ngOnInit - Platform', this.platform.platforms());
|
|
81
|
-
|
|
82
81
|
}
|
|
83
82
|
|
|
83
|
+
|
|
84
|
+
|
|
84
85
|
|
|
85
86
|
|
|
86
87
|
// --------------------------------------------------
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
width="24px" height="24px" viewBox="0 0 24 24">
|
|
35
35
|
<path fill="none" d="M0 0h24v24H0z"/>
|
|
36
36
|
<path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"/>
|
|
37
|
-
<title id="altIconTitle">{{ translationMap
|
|
37
|
+
<title id="altIconTitle">{{ translationMap?.get('CLOSED') }}</title>
|
|
38
38
|
</svg>
|
|
39
39
|
</button>
|
|
40
40
|
</div>
|
|
@@ -8,25 +8,25 @@
|
|
|
8
8
|
|
|
9
9
|
<div class="signin-title" style="text-align:center">
|
|
10
10
|
<h2 style="font-family: 'Montserrat', sans-serif; font-weight: 400;">
|
|
11
|
-
{{ translationMap
|
|
11
|
+
{{ translationMap?.get('LABEL_SIGNIN_TO') }}
|
|
12
12
|
{{companyName}}
|
|
13
13
|
</h2>
|
|
14
14
|
</div>
|
|
15
15
|
<div class="login-container">
|
|
16
16
|
<form [formGroup]="userForm" (ngSubmit)="signInWithEmailAndPassword()" novalidate>
|
|
17
17
|
|
|
18
|
-
<ion-label stacked for="email">{{ translationMap
|
|
18
|
+
<ion-label stacked for="email">{{ translationMap?.get('LABEL_EMAIL') }}</ion-label>
|
|
19
19
|
<ion-input #email formControlName="email" type="email" id="email" required autocapitalize="off" spellcheck="false"
|
|
20
|
-
placeholder="{{ translationMap
|
|
20
|
+
placeholder="{{ translationMap?.get('LABEL_PLACEHOLDER_EMAIL') }}"
|
|
21
21
|
[class.invalid]="!userForm.controls.email.valid" ></ion-input>
|
|
22
22
|
<div *ngIf="formErrors.email" class="is-danger">
|
|
23
23
|
{{ formErrors.email }}
|
|
24
24
|
</div>
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
<ion-label stacked for="password">{{ translationMap
|
|
27
|
+
<ion-label stacked for="password">{{ translationMap?.get('LABEL_PASSWORD') }}</ion-label>
|
|
28
28
|
<ion-input #password formControlName="password" type="password" id="password" required
|
|
29
|
-
placeholder="{{ translationMap
|
|
29
|
+
placeholder="{{ translationMap?.get('LABEL_PLACEHOLDER_PASSWORD') }}"
|
|
30
30
|
[class.invalid]="!userForm.controls.password.valid"></ion-input>
|
|
31
31
|
|
|
32
32
|
<div *ngIf="formErrors.password" class="is-danger">
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
|
|
37
37
|
<button type="submit" class="btn signin-button ion-activatable ripple-parent" [ngClass]="{'signin-button-is-disabled': !userForm.valid}" [disabled]="!userForm.valid">
|
|
38
38
|
<span class="signin-button-label" *ngIf="showSpinnerInLoginBtn === false" >
|
|
39
|
-
{{ translationMap
|
|
39
|
+
{{ translationMap?.get('LABEL_SIGNIN') }}
|
|
40
40
|
</span>
|
|
41
41
|
<ion-ripple-effect type="unbounded"></ion-ripple-effect>
|
|
42
42
|
<ion-spinner *ngIf="showSpinnerInLoginBtn === true" name="bubbles" color="white" duration="2" ></ion-spinner>
|
|
@@ -50,9 +50,9 @@
|
|
|
50
50
|
</p> -->
|
|
51
51
|
|
|
52
52
|
<p style="color: #666666; font-size: 1.1em; text-align: center; margin-top: 16px;">
|
|
53
|
-
{{ translationMap
|
|
53
|
+
{{ translationMap?.get('LABEL_FORGOT_YOUR_PASSWORD') }}
|
|
54
54
|
<span style="color: #03a5e8; cursor:pointer" (click)="goToResetPsw()">
|
|
55
|
-
{{ translationMap
|
|
55
|
+
{{ translationMap?.get('LABEL_CLICK_HERE') }}
|
|
56
56
|
</span>
|
|
57
57
|
</p>
|
|
58
58
|
|
|
@@ -3,10 +3,8 @@
|
|
|
3
3
|
<ion-toolbar>
|
|
4
4
|
|
|
5
5
|
<ion-buttons slot="start">
|
|
6
|
-
<!-- (click)="pushPage('conversations-list')" -->
|
|
7
|
-
<ion-back-button text="" *ngIf="isMobile"
|
|
8
|
-
defaultHref="/conversations-list"
|
|
9
|
-
>
|
|
6
|
+
<!-- (click)="pushPage('conversations-list')" defaultHref="/conversations-list" -->
|
|
7
|
+
<ion-back-button style="display: block;" text="" *ngIf="isMobile" (click)="goBackToConversationList()">
|
|
10
8
|
</ion-back-button>
|
|
11
9
|
</ion-buttons>
|
|
12
10
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, OnInit, Input, Output, EventEmitter, OnChanges } from '@angular/core';
|
|
2
|
-
import { ActivatedRoute } from '@angular/router';
|
|
2
|
+
import { ActivatedRoute, Router } from '@angular/router';
|
|
3
3
|
import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service';
|
|
4
4
|
|
|
5
5
|
// Logger
|
|
@@ -43,7 +43,8 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
|
|
|
43
43
|
constructor(
|
|
44
44
|
public imageRepoService: ImageRepoService,
|
|
45
45
|
private route: ActivatedRoute,
|
|
46
|
-
public platform: Platform
|
|
46
|
+
public platform: Platform,
|
|
47
|
+
private router: Router
|
|
47
48
|
) {
|
|
48
49
|
this.route.paramMap.subscribe(params => {
|
|
49
50
|
|
|
@@ -125,4 +126,8 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
|
|
|
125
126
|
/** */
|
|
126
127
|
pushPage(event) { }
|
|
127
128
|
|
|
129
|
+
goBackToConversationList() {
|
|
130
|
+
this.router.navigateByUrl('/conversations-list');
|
|
131
|
+
}
|
|
132
|
+
|
|
128
133
|
}
|
package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html
CHANGED
|
@@ -1,64 +1,82 @@
|
|
|
1
|
-
<ion-grid>
|
|
1
|
+
<!-- <ion-grid>
|
|
2
2
|
<ion-row id="message-text-area">
|
|
3
|
-
|
|
4
3
|
<ion-col col-auto>
|
|
5
|
-
|
|
6
4
|
<div class="buttons-left">
|
|
7
|
-
|
|
8
|
-
<!-- <ion-button class="attach-button" ion-button fill="clear" style="display: none;">
|
|
9
|
-
<input type="file" accept="image/*" capture="camera" (change)="onFileSelected($event)" id="fileInput" />
|
|
10
|
-
<label for="fileInput" icon-only ion-button>
|
|
11
|
-
<ion-icon slot="icon-only" name="attach"></ion-icon>
|
|
12
|
-
</label>
|
|
13
|
-
</ion-button> -->
|
|
14
5
|
|
|
15
6
|
<ion-button ion-button fill="clear" class="upload-image-btn">
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
<!-- <ion-label slot="end">Upload Image</ion-label> -->
|
|
19
|
-
<!-- <input #fileInput type="file" (change)="onFileSelected($event)" capture="camera" id="file-input" accept="image/*, .pdf,.zip"> -->
|
|
20
|
-
<!-- https://stackoverflow.com/questions/11832930/html-input-file-accept-attribute-file-type-csv?rq=1 -->
|
|
21
|
-
<!-- <input #fileInput type="file" (change)="onFileSelected($event)" capture="camera" id="file-input" accept="image/*, audio/* ,video/*, text/html, text/plain, .csv, .pdf,.doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document, .scss, .css, .json"> -->
|
|
7
|
+
<ion-icon slot="icon-only" lazy="true" name="attach-outline"
|
|
8
|
+
style="font-size: 30px;transform: rotate(42deg);"></ion-icon>
|
|
22
9
|
<input #fileInput type="file" (change)="onFileSelected($event)" capture="camera" id="file-input"
|
|
23
10
|
[accept]="fileUploadAccept">
|
|
24
|
-
|
|
25
11
|
</ion-button>
|
|
26
12
|
</div>
|
|
27
13
|
|
|
28
|
-
|
|
29
14
|
<div class="text-message">
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
<!-- autoFocus="true" // directive -->
|
|
35
|
-
|
|
36
|
-
<ion-textarea id="ion-textarea" #messageTextArea #message_text_area #textArea rows="1"
|
|
37
|
-
[placeholder]="TEXAREA_PLACEHOLDER"
|
|
38
|
-
autosize="false"
|
|
39
|
-
auto-grow="true"
|
|
40
|
-
autofocus="true"
|
|
41
|
-
[value]=""
|
|
42
|
-
[(ngModel)]="messageString"
|
|
43
|
-
(ionChange)="ionChange($event);"
|
|
44
|
-
(keydown.enter)="onKeydown($event, messageString)"
|
|
45
|
-
(paste)="onPaste($event)">
|
|
15
|
+
<ion-textarea id="ion-textarea" #messageTextArea #message_text_area #textArea rows="1"
|
|
16
|
+
[placeholder]="TEXAREA_PLACEHOLDER" autosize="false" auto-grow="true" autofocus="true" [value]=""
|
|
17
|
+
[(ngModel)]="messageString" (ionChange)="ionChange($event);"
|
|
18
|
+
(keydown.enter)="onKeydown($event, messageString)" (paste)="onPaste($event)">
|
|
46
19
|
</ion-textarea>
|
|
47
|
-
<!-- (ionInput)="onChange($event);" -->
|
|
48
20
|
</div>
|
|
49
21
|
|
|
50
22
|
<div class="buttons-right">
|
|
51
|
-
|
|
52
|
-
<ion-button [disabled]="conversationEnabled === false" class="send-button right active" ion-button fill="clear"
|
|
23
|
+
<ion-button [disabled]="conversationEnabled === false" class="send-button right active" ion-button fill="clear"
|
|
53
24
|
(click)="sendMessage(messageString)">
|
|
54
|
-
<ion-icon
|
|
25
|
+
<ion-icon
|
|
26
|
+
[ngClass]="{'send-msg-disabled': conversationEnabled === false,'send-msg-activated': conversationEnabled === true }"
|
|
27
|
+
slot="icon-only" name="send"></ion-icon>
|
|
55
28
|
</ion-button>
|
|
56
29
|
</div>
|
|
57
30
|
</ion-col>
|
|
31
|
+
</ion-row>
|
|
32
|
+
</ion-grid> -->
|
|
58
33
|
|
|
34
|
+
<!-- --------------------------------------------------------------------------------------------------------------------- -->
|
|
35
|
+
<!-- ----------new -->
|
|
36
|
+
<ion-grid>
|
|
37
|
+
<ion-row id="message-text-area">
|
|
59
38
|
|
|
39
|
+
<ion-col col-auto>
|
|
60
40
|
|
|
41
|
+
<div class="start-buttons" style="position: absolute;display: flex;">
|
|
61
42
|
|
|
62
|
-
|
|
43
|
+
<div class="canned-responses-btn-wpr" style="margin-left: -5px;" tooltip="{{translationMap?.get('CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top">
|
|
44
|
+
|
|
45
|
+
<ion-button ion-button fill="clear" class="canned-responses-btn" (click)="openCannedResponses()" [disabled]="!IS_SUPPORT_GROUP_CONVERSATION">
|
|
46
|
+
<ion-icon slot="icon-only" lazy="true" name="flash-outline" style="font-size: 24px;"></ion-icon>
|
|
47
|
+
</ion-button>
|
|
48
|
+
|
|
49
|
+
</div>
|
|
63
50
|
|
|
51
|
+
<div class="upload-image-btn-wpr" tooltip="{{translationMap?.get('UPLOAD')}}" [options]="tooltipOptions">
|
|
52
|
+
<ion-button ion-button fill="clear" class="upload-image-btn">
|
|
53
|
+
<ion-icon slot="icon-only" lazy="true" name="attach-outline"
|
|
54
|
+
style="font-size: 30px;transform: rotate(42deg);"></ion-icon>
|
|
55
|
+
<input #fileInput type="file" (change)="onFileSelected($event)" capture="camera" id="file-input"
|
|
56
|
+
[accept]="fileUploadAccept">
|
|
57
|
+
|
|
58
|
+
</ion-button>
|
|
59
|
+
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<div class="text-message">
|
|
64
|
+
<ion-textarea id="ion-textarea" #messageTextArea #message_text_area #textArea rows="1"
|
|
65
|
+
[placeholder]="TEXAREA_PLACEHOLDER" autosize="false" auto-grow="true" autofocus="true" [value]=""
|
|
66
|
+
[(ngModel)]="messageString" (ionChange)="ionChange($event);"
|
|
67
|
+
(keydown.enter)="onKeydown($event, messageString)" (paste)="onPaste($event)">
|
|
68
|
+
</ion-textarea>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div class="buttons-right">
|
|
72
|
+
<ion-button [disabled]="conversationEnabled === false" class="send-button right active" ion-button fill="clear"
|
|
73
|
+
(click)="sendMessage(messageString)">
|
|
74
|
+
<ion-icon
|
|
75
|
+
[ngClass]="{'send-msg-disabled': conversationEnabled === false,'send-msg-activated': conversationEnabled === true }"
|
|
76
|
+
slot="icon-only" name="send"></ion-icon>
|
|
77
|
+
</ion-button>
|
|
78
|
+
</div>
|
|
79
|
+
</ion-col>
|
|
80
|
+
|
|
81
|
+
</ion-row>
|
|
64
82
|
</ion-grid>
|
package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss
CHANGED
|
@@ -42,8 +42,10 @@
|
|
|
42
42
|
}
|
|
43
43
|
.text-message {
|
|
44
44
|
position: relative;
|
|
45
|
-
margin: 0 35px;
|
|
46
|
-
width: calc(100% - 70px);
|
|
45
|
+
// margin: 0 35px;
|
|
46
|
+
// width: calc(100% - 70px);
|
|
47
|
+
margin: 0 70px;
|
|
48
|
+
width: calc(100% - 100px);
|
|
47
49
|
ion-textarea {
|
|
48
50
|
// border-radius: 4px;
|
|
49
51
|
border-radius: 20px; // NK edited
|
|
@@ -97,10 +99,21 @@
|
|
|
97
99
|
--border-radius: 50%;
|
|
98
100
|
--padding-end: 1px;
|
|
99
101
|
--padding-start: 1px;
|
|
100
|
-
|
|
101
102
|
height: 33px !important;
|
|
102
103
|
}
|
|
103
104
|
|
|
105
|
+
|
|
106
|
+
.canned-responses-btn {
|
|
107
|
+
--padding-bottom: 0px;
|
|
108
|
+
--padding-top: 0px;
|
|
109
|
+
--border-radius: 50%;
|
|
110
|
+
--padding-end: 1px;
|
|
111
|
+
--padding-start: 1px;
|
|
112
|
+
height: 33px !important;
|
|
113
|
+
width: 30px;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
|
|
104
117
|
.upload-image-btn .button-native {
|
|
105
118
|
border-radius: 50%;
|
|
106
119
|
}
|