@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.
Files changed (69) hide show
  1. package/CHANGELOG.md +89 -1
  2. package/README.md +5 -0
  3. package/config.xml +2 -2
  4. package/env.sample +3 -1
  5. package/package.json +1 -1
  6. package/resources/Android/splash/drawable-land-hdpi-screen.png +0 -0
  7. package/resources/Android/splash/drawable-land-ldpi-screen.png +0 -0
  8. package/resources/Android/splash/drawable-land-mdpi-screen.png +0 -0
  9. package/resources/Android/splash/drawable-land-xhdpi-screen.png +0 -0
  10. package/resources/Android/splash/drawable-land-xxhdpi-screen.png +0 -0
  11. package/resources/Android/splash/drawable-land-xxxhdpi-screen.png +0 -0
  12. package/resources/Android/splash/drawable-port-hdpi-screen.png +0 -0
  13. package/resources/Android/splash/drawable-port-ldpi-screen.png +0 -0
  14. package/resources/Android/splash/drawable-port-mdpi-screen.png +0 -0
  15. package/resources/Android/splash/drawable-port-xhdpi-screen.png +0 -0
  16. package/resources/Android/splash/drawable-port-xxhdpi-screen.png +0 -0
  17. package/resources/Android/splash/drawable-port-xxxhdpi-screen.png +0 -0
  18. package/resources/Android/splash.png +0 -0
  19. package/src/app/app.component.scss +10 -5
  20. package/src/app/app.component.ts +358 -233
  21. package/src/app/app.module.ts +12 -7
  22. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.html +1 -1
  23. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +8 -7
  24. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +2 -1
  25. package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.html +1 -1
  26. package/src/app/components/authentication/login/login.component.html +8 -8
  27. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +2 -4
  28. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +7 -2
  29. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +57 -39
  30. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +16 -3
  31. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +73 -89
  32. package/src/app/components/ddp-header/ddp-header.component.html +1 -1
  33. package/src/app/components/ddp-header/ddp-header.component.ts +4 -2
  34. package/src/app/components/project-item/project-item.component.html +61 -16
  35. package/src/app/components/project-item/project-item.component.scss +165 -38
  36. package/src/app/components/project-item/project-item.component.ts +88 -46
  37. package/src/app/pages/authentication/login/login.page.html +1 -2
  38. package/src/app/pages/conversation-detail/conversation-detail.module.ts +3 -2
  39. package/src/app/pages/conversation-detail/conversation-detail.page.html +1 -0
  40. package/src/app/pages/conversation-detail/conversation-detail.page.ts +62 -1
  41. package/src/app/pages/conversations-list/conversations-list.page.html +12 -7
  42. package/src/app/pages/conversations-list/conversations-list.page.scss +279 -261
  43. package/src/app/pages/conversations-list/conversations-list.page.ts +152 -18
  44. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +10 -2
  45. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +79 -0
  46. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +47 -36
  47. package/src/app/services/app-config.ts +77 -5
  48. package/src/app/services/websocket/websocket-js.ts +19 -18
  49. package/src/app/services/websocket/websocket.service.ts +27 -9
  50. package/src/app/shared/shared.module.ts +5 -5
  51. package/src/assets/i18n/en.json +4 -1
  52. package/src/assets/i18n/it.json +4 -1
  53. package/src/assets/js/chat21client.js +144 -82
  54. package/src/assets/logo.png +0 -0
  55. package/src/assets/transparent.png +0 -0
  56. package/src/chat-config-pre-test.json +3 -1
  57. package/src/chat-config-template.json +4 -1
  58. package/src/chat-config.json +4 -1
  59. package/src/chat21-core/providers/firebase/firebase-archivedconversations-handler.ts +1 -1
  60. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +1 -1
  61. package/src/chat21-core/providers/firebase/firebase-notifications.ts +31 -23
  62. package/src/chat21-core/providers/mqtt/mqtt-auth-service.ts +27 -27
  63. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +3 -5
  64. package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +13 -5
  65. package/src/chat21-core/providers/mqtt/mqtt-notifications.ts +101 -11
  66. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +12 -3
  67. package/src/chat21-core/utils/utils-message.ts +2 -2
  68. package/src/firebase-messaging-sw-template.js +1 -1
  69. package/src/assets/images/tiledesk_logo_50x50.png +0 -0
@@ -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,
@@ -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.get('LABEL_LOADING')}}</span>
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
- <ion-item button="true" lines="none" class="ion-no-padding" [class.ion-selected]="conversation.uid === uidConvSelected"
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" [ngClass]="{'hide': !isApp, 'button-on-desktop': !isApp, 'button-on-mobile': isApp }"
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 === 'it' ? (conversation.timestamp| amDateFormat:'DD MMM') : (conversation.timestamp |
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 === 'it' ? (conversation.timestamp| amDateFormat:'DD MMM') : (conversation.timestamp |
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" [ngClass]="{'notification_point-on-desktop': !isApp, 'notification_point-on-mobile': isApp }"
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.get('CLOSED') }}</title>
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.get('LABEL_SIGNIN_TO') }}
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.get('LABEL_EMAIL') }}</ion-label>
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.get('LABEL_PLACEHOLDER_EMAIL') }}"
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.get('LABEL_PASSWORD') }}</ion-label>
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.get('LABEL_PLACEHOLDER_PASSWORD') }}"
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.get('LABEL_SIGNIN') }}
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.get('LABEL_FORGOT_YOUR_PASSWORD') }}
53
+ {{ translationMap?.get('LABEL_FORGOT_YOUR_PASSWORD') }}
54
54
  <span style="color: #03a5e8; cursor:pointer" (click)="goToResetPsw()">
55
- {{ translationMap.get('LABEL_CLICK_HERE') }}
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
  }
@@ -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
- <ion-icon slot="icon-only" lazy="true" name="attach-outline" style="font-size: 30px;transform: rotate(42deg);"></ion-icon>
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
- <!-- [value]="" -->
31
- <!-- placeholder="{{ 'LABEL_ENTER_MSG' | translate }}" -->
32
- <!-- (ionBlur)="txtfocus(0)" -->
33
- <!-- autofocus="true" -->
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
- <!-- [disabled]="conversationEnabled === false" -->
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 [ngClass]="{'send-msg-disabled': conversationEnabled === false,'send-msg-activated': conversationEnabled === true }" slot="icon-only" name="send"></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
- </ion-row>
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>
@@ -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
  }