@chat21/chat21-ionic 3.0.61-rc2 → 3.0.61-rc21

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 (120) hide show
  1. package/CHANGELOG.md +90 -0
  2. package/angular.json +2 -0
  3. package/config.xml +4 -5
  4. package/deploy_pre.sh +27 -27
  5. package/deploy_prod.sh +5 -1
  6. package/env.sample +1 -1
  7. package/package.json +8 -8
  8. package/resources/{Android → android}/icon/drawable-hdpi-icon.png +0 -0
  9. package/resources/{Android → android}/icon/drawable-ldpi-icon.png +0 -0
  10. package/resources/{Android → android}/icon/drawable-mdpi-icon.png +0 -0
  11. package/resources/{Android → android}/icon/drawable-xhdpi-icon.png +0 -0
  12. package/resources/{Android → android}/icon/drawable-xxhdpi-icon.png +0 -0
  13. package/resources/{Android → android}/icon/drawable-xxxhdpi-icon.png +0 -0
  14. package/resources/{Android → android}/icon.png +0 -0
  15. package/resources/{Android → android}/splash/drawable-land-hdpi-screen.png +0 -0
  16. package/resources/{Android → android}/splash/drawable-land-ldpi-screen.png +0 -0
  17. package/resources/{Android → android}/splash/drawable-land-mdpi-screen.png +0 -0
  18. package/resources/{Android → android}/splash/drawable-land-xhdpi-screen.png +0 -0
  19. package/resources/{Android → android}/splash/drawable-land-xxhdpi-screen.png +0 -0
  20. package/resources/{Android → android}/splash/drawable-land-xxxhdpi-screen.png +0 -0
  21. package/resources/{Android → android}/splash/drawable-port-hdpi-screen.png +0 -0
  22. package/resources/{Android → android}/splash/drawable-port-ldpi-screen.png +0 -0
  23. package/resources/{Android → android}/splash/drawable-port-mdpi-screen.png +0 -0
  24. package/resources/{Android → android}/splash/drawable-port-xhdpi-screen.png +0 -0
  25. package/resources/{Android → android}/splash/drawable-port-xxhdpi-screen.png +0 -0
  26. package/resources/{Android → android}/splash/drawable-port-xxxhdpi-screen.png +0 -0
  27. package/resources/{Android → android}/splash.png +0 -0
  28. package/src/app/app-routing.module.ts +15 -0
  29. package/src/app/app.component.html +4 -3
  30. package/src/app/app.component.scss +6 -1
  31. package/src/app/app.component.ts +29 -18
  32. package/src/app/app.module.ts +11 -3
  33. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +36 -25
  34. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +160 -50
  35. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +101 -18
  36. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +21 -36
  37. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +19 -7
  38. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +35 -40
  39. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.scss +1 -1
  40. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +6 -1
  41. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +89 -21
  42. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +37 -33
  43. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +7 -1
  44. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +148 -63
  45. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +59 -22
  46. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +32 -9
  47. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +102 -23
  48. package/src/app/components/conversation-info/info-content/info-content.component.html +2 -2
  49. package/src/app/components/ddp-header/ddp-header.component.html +11 -4
  50. package/src/app/components/ddp-header/ddp-header.component.ts +94 -19
  51. package/src/app/components/project-item/project-item.component.html +2 -2
  52. package/src/app/components/project-item/project-item.component.scss +1 -1
  53. package/src/app/components/project-item/project-item.component.ts +1 -1
  54. package/src/app/components/sidebar/sidebar.component.html +151 -86
  55. package/src/app/components/sidebar/sidebar.component.scss +72 -4
  56. package/src/app/components/sidebar/sidebar.component.ts +211 -72
  57. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +29 -10
  58. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +53 -29
  59. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +176 -97
  60. package/src/app/pages/conversation-detail/conversation-detail.module.ts +6 -1
  61. package/src/app/pages/conversation-detail/conversation-detail.page.html +20 -10
  62. package/src/app/pages/conversation-detail/conversation-detail.page.scss +28 -0
  63. package/src/app/pages/conversation-detail/conversation-detail.page.ts +1124 -777
  64. package/src/app/pages/conversations-list/conversations-list.module.ts +2 -1
  65. package/src/app/pages/conversations-list/conversations-list.page.html +9 -6
  66. package/src/app/pages/conversations-list/conversations-list.page.scss +9 -1
  67. package/src/app/pages/conversations-list/conversations-list.page.ts +724 -436
  68. package/src/app/pages/create-canned-response/create-canned-response-routing.module.ts +17 -0
  69. package/src/app/pages/create-canned-response/create-canned-response.module.ts +30 -0
  70. package/src/app/pages/create-canned-response/create-canned-response.page.html +150 -0
  71. package/src/app/pages/create-canned-response/create-canned-response.page.scss +55 -0
  72. package/src/app/pages/create-canned-response/create-canned-response.page.spec.ts +24 -0
  73. package/src/app/pages/create-canned-response/create-canned-response.page.ts +319 -0
  74. package/src/app/pages/create-requester/create-requester-routing.module.ts +17 -0
  75. package/src/app/pages/create-requester/create-requester.module.ts +28 -0
  76. package/src/app/pages/create-requester/create-requester.page.html +67 -0
  77. package/src/app/pages/create-requester/create-requester.page.scss +30 -0
  78. package/src/app/pages/create-requester/create-requester.page.spec.ts +24 -0
  79. package/src/app/pages/create-requester/create-requester.page.ts +138 -0
  80. package/src/app/pages/create-ticket/create-ticket-routing.module.ts +17 -0
  81. package/src/app/pages/create-ticket/create-ticket.module.ts +28 -0
  82. package/src/app/pages/create-ticket/create-ticket.page.html +171 -0
  83. package/src/app/pages/create-ticket/create-ticket.page.scss +52 -0
  84. package/src/app/pages/create-ticket/create-ticket.page.spec.ts +24 -0
  85. package/src/app/pages/create-ticket/create-ticket.page.ts +432 -0
  86. package/src/app/pages/loader-preview/loader-preview.page.ts +226 -166
  87. package/src/app/pages/profile-info/profile-info.page.html +2 -2
  88. package/src/app/pages/profile-info/profile-info.page.scss +13 -2
  89. package/src/app/services/tiledesk/tiledesk.service.ts +209 -0
  90. package/src/app/shared/shared.module.ts +1 -1
  91. package/src/app/utils/scrollbar-theme.directive.ts +58 -24
  92. package/src/assets/i18n/de.json +46 -7
  93. package/src/assets/i18n/en.json +42 -3
  94. package/src/assets/i18n/es.json +42 -3
  95. package/src/assets/i18n/fr.json +45 -6
  96. package/src/assets/i18n/it.json +42 -3
  97. package/src/assets/i18n/pt.json +42 -3
  98. package/src/assets/i18n/ru.json +43 -4
  99. package/src/assets/i18n/sr.json +265 -0
  100. package/src/assets/i18n/tr.json +42 -4
  101. package/src/assets/images/default-avatar-x-select.png +0 -0
  102. package/src/assets/images/language_flag/hr.png +0 -0
  103. package/src/assets/images/language_flag/sr.png +0 -0
  104. package/src/assets/images/priority_icons/high.svg +3 -0
  105. package/src/assets/images/priority_icons/high_v2.svg +14 -0
  106. package/src/assets/images/priority_icons/low.svg +10 -0
  107. package/src/assets/images/priority_icons/low_v2.svg +14 -0
  108. package/src/assets/images/priority_icons/medium.svg +16 -0
  109. package/src/assets/images/priority_icons/medium_v2.svg +11 -0
  110. package/src/assets/images/priority_icons/urgent.svg +4 -0
  111. package/src/assets/images/priority_icons/urgent_v2.svg +16 -0
  112. package/src/chat-config-pre-test.json +1 -1
  113. package/src/chat-config-template.json +1 -1
  114. package/src/chat-config.json +1 -1
  115. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +8 -3
  116. package/src/chat21-core/utils/constants.ts +6 -1
  117. package/src/chat21-core/utils/utils-message.ts +19 -0
  118. package/src/global.scss +65 -111
  119. package/publish_pre.sh +0 -33
  120. package/publish_prod.sh +0 -33
@@ -1,133 +1,218 @@
1
- import { Component, OnInit, Input, Output, EventEmitter, OnChanges } from '@angular/core';
2
- import { ActivatedRoute, Router } from '@angular/router';
3
- import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service';
1
+ import {
2
+ Component,
3
+ OnInit,
4
+ Input,
5
+ Output,
6
+ EventEmitter,
7
+ OnChanges,
8
+ } from '@angular/core'
9
+ import { ActivatedRoute, Router } from '@angular/router'
10
+ import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service'
4
11
 
5
12
  // Logger
6
- import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
7
- import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
8
- import { setConversationAvatar, setChannelType } from 'src/chat21-core/utils/utils';
9
- import { Platform } from '@ionic/angular';
13
+ import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service'
14
+ import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance'
15
+ import {
16
+ setConversationAvatar,
17
+ setChannelType,
18
+ } from 'src/chat21-core/utils/utils'
19
+ import { Platform } from '@ionic/angular'
20
+
21
+ import { ModalController } from '@ionic/angular'
22
+ import { EventsService } from 'src/app/services/events-service'
23
+ import { CreateTicketPage } from 'src/app/pages/create-ticket/create-ticket.page'
24
+ import { TiledeskService } from 'src/app/services/tiledesk/tiledesk.service'
25
+
10
26
  @Component({
11
27
  selector: 'app-header-conversation-detail',
12
28
  templateUrl: './header-conversation-detail.component.html',
13
29
  styleUrls: ['./header-conversation-detail.component.scss'],
14
30
  })
15
31
  export class HeaderConversationDetailComponent implements OnInit, OnChanges {
16
- @Input() conversationAvatar: any;
17
- @Input() idLoggedUser: string;
18
- @Input() isOpenInfoConversation: boolean;
19
- @Input() isMobile: boolean;
20
- @Input() translationMap: Map<string, string>;
21
- @Output() eventOpenCloseInfoConversation = new EventEmitter<boolean>();
32
+ @Input() conversationAvatar: any
33
+ @Input() idLoggedUser: string
34
+ @Input() conv_type: string
35
+ @Input() isOpenInfoConversation: boolean
36
+ @Input() isMobile: boolean
37
+ @Input() translationMap: Map<string, string>
38
+ @Output() eventOpenCloseInfoConversation = new EventEmitter<boolean>()
22
39
  conversationWithFullname: string
23
- openInfoConversation = true;
24
- openInfoMessage = true;
25
- DIRECT = 'direct';
26
-
27
- isDirect = false;
28
- isTyping = false;
29
- borderColor = '#ffffff';
30
- fontColor = '#949494';
31
- membersConversation = ['SYSTEM'];
32
- fullNameConv: string;
33
- idConv: string;
34
- conversation_with_fullname: string;
35
- platformName: string;
36
-
37
- private logger: LoggerService = LoggerInstance.getInstance();
40
+ openInfoConversation = true
41
+ openInfoMessage = true
42
+ DIRECT = 'direct'
43
+
44
+ isDirect = false
45
+ isTyping = false
46
+ borderColor = '#ffffff'
47
+ fontColor = '#949494'
48
+ membersConversation = ['SYSTEM']
49
+ fullNameConv: string
50
+ idConv: string
51
+ conversation_with_fullname: string
52
+ platformName: string
53
+ conv_closed: boolean = false;
54
+ IS_ON_IOS_MOBILE_DEVICE: boolean
55
+ private logger: LoggerService = LoggerInstance.getInstance()
38
56
 
39
57
  /**
40
58
  * Constructor
41
- * @param imageRepoService
59
+ * @param imageRepoService
42
60
  */
43
61
  constructor(
44
62
  public imageRepoService: ImageRepoService,
45
63
  private route: ActivatedRoute,
46
64
  public platform: Platform,
47
- private router: Router
65
+ private router: Router,
66
+ // public tiledeskAuthService: TiledeskAuthService,
67
+ public tiledeskService: TiledeskService,
68
+ public events: EventsService,
69
+ public modalController: ModalController,
48
70
  ) {
49
- this.route.paramMap.subscribe(params => {
50
-
51
-
71
+ this.route.paramMap.subscribe((params) => {
52
72
  // this.conversationWithFullname = params.get('FullNameConv');
53
- this.logger.log('[CONVS-DETAIL][HEADER] -> params: ', params);
73
+ this.logger.log('[CONVS-DETAIL][HEADER] -> params: ', params)
54
74
  this.fullNameConv = params.get('FullNameConv')
55
- this.logger.log('[CONVS-DETAIL][HEADER] -> params > conversation_with_fullname: ', this.fullNameConv);
56
- this.idConv = params.get('IDConv');
57
- this.logger.log('[CONVS-DETAIL][HEADER] -> params > conversation_with: ', this.idConv);
58
- });
75
+ this.logger.log(
76
+ '[CONVS-DETAIL][HEADER] -> params > conversation_with_fullname: ',
77
+ this.fullNameConv,
78
+ )
79
+ this.idConv = params.get('IDConv')
80
+ this.logger.log(
81
+ '[CONVS-DETAIL][HEADER] -> params > conversation_with: ',
82
+ this.idConv,
83
+ )
84
+ })
59
85
  }
60
86
 
61
87
  // ----------------------------------------------------
62
88
  // @ Lifehooks
63
89
  // ----------------------------------------------------
64
90
  ngOnInit() {
65
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - idLoggedUser', this.idLoggedUser);
66
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - conversationAvatar', this.conversationAvatar);
67
- this.conversation_with_fullname = this.conversationAvatar.conversation_with_fullname
68
91
 
92
+ this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - idLoggedUser', this.idLoggedUser,)
93
+ this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - conversationAvatar', this.conversationAvatar,)
94
+ this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - conv_type', this.conv_type,)
95
+ this.conversation_with_fullname = this.conversationAvatar.conversation_with_fullname
96
+ this.listenToConversationHasBeenClosed()
69
97
  this.initialize();
98
+ // this.isOniOSMobileDevice()
99
+ }
100
+
101
+ isOniOSMobileDevice() {
102
+ this.IS_ON_IOS_MOBILE_DEVICE = false;
103
+ if (/iPad|iPhone|iPod/i.test(window.navigator.userAgent)) {
104
+ this.IS_ON_IOS_MOBILE_DEVICE = true;
105
+
106
+ }
107
+ // console.log('[CONVS-DETAIL][HEADER] IS_ON_IOS_MOBILE_DEVICE ', this.IS_ON_IOS_MOBILE_DEVICE)
108
+ return this.IS_ON_IOS_MOBILE_DEVICE;
70
109
  }
71
110
 
72
111
  ngOnChanges() {
73
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar', this.conversationAvatar);
112
+ this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar', this.conversationAvatar)
74
113
  if (this.conversationAvatar) {
75
- this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(this.conversationAvatar.uid)
114
+ this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(
115
+ this.conversationAvatar.uid,
116
+ )
76
117
  } else {
77
- const channelType = setChannelType(this.idConv);
78
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED channelType ', channelType);
118
+ const channelType = setChannelType(this.idConv)
119
+ this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED channelType ', channelType)
79
120
  this.conversationAvatar = setConversationAvatar(
80
121
  this.idConv,
81
122
  this.fullNameConv,
82
123
  channelType,
83
- );
124
+ )
84
125
  if (this.conversationAvatar) {
85
- this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(this.conversationAvatar.uid)
126
+ this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(
127
+ this.conversationAvatar.uid,
128
+ )
86
129
  }
87
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED conversationAvatar', this.conversationAvatar);
130
+ this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED conversationAvatar', this.conversationAvatar)
88
131
  }
89
132
 
90
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - isOpenInfoConversation', this.isOpenInfoConversation);
91
- this.openInfoConversation = this.isOpenInfoConversation;
133
+ this.logger.log(
134
+ '[CONVS-DETAIL][HEADER] - (ngOnChanges) - isOpenInfoConversation',
135
+ this.isOpenInfoConversation,
136
+ )
137
+ this.openInfoConversation = this.isOpenInfoConversation
92
138
  }
93
139
 
94
-
95
140
  // ----------------------------------------------------
96
141
  // @ Initialize (called in ngOnInit)
97
142
  // ----------------------------------------------------
98
143
  initialize() {
99
144
  this.getPlatformName()
100
- if (this.conversationAvatar && this.conversationAvatar.channelType === this.DIRECT) {
101
- this.isDirect = true;
145
+ if (
146
+ this.conversationAvatar &&
147
+ this.conversationAvatar.channelType === this.DIRECT
148
+ ) {
149
+ this.isDirect = true
102
150
  } else if (this.idLoggedUser) {
103
- this.membersConversation.push(this.idLoggedUser);
151
+ this.membersConversation.push(this.idLoggedUser)
104
152
  }
105
153
  }
106
154
 
107
155
  getPlatformName() {
108
- this.logger.log('getPlatformName this.platform', this.platform)
156
+ this.logger.log('getPlatformName this.platform', this.platform)
109
157
  if (this.platform.is('ios')) {
110
158
  this.platformName = 'ios'
111
- this.logger.log('getPlatformName platformName', this.platformName)
112
- } else if (this.platform.is('android')){
159
+ this.logger.log('getPlatformName platformName', this.platformName)
160
+ } else if (this.platform.is('android')) {
113
161
  this.platformName = 'android'
114
- this.logger.log('getPlatformName platformName', this.platformName)
162
+ this.logger.log('getPlatformName platformName', this.platformName)
115
163
  }
164
+ }
165
+
166
+ closeConversation() {
167
+ this.logger.log('[CONVS-DETAIL][HEADER] click on RESOLVE this.events', this.events)
168
+ this.events.publish('conversation:closed', this.idConv)
169
+ }
116
170
 
171
+ listenToConversationHasBeenClosed() {
172
+ this.events.subscribe('conversationhasbeenclosed', (convId) => {
173
+ // console.log('[CONVS-DETAIL][HEADER] conversationhasbeenclosed convId', convId)
174
+ if (convId === this.idConv) {
175
+ this.logger.log('[CONVS-DETAIL][HEADER] the conversation was closed',)
176
+ this.conv_closed = true;
177
+ }
178
+ });
117
179
  }
118
180
 
181
+
182
+
119
183
  onOpenCloseInfoConversation() {
120
- this.openInfoMessage = false;
121
- this.openInfoConversation = !this.openInfoConversation;
122
- this.logger.log('[CONVS-DETAIL][HEADER] - onOpenCloseInfoConversation - openInfoConversation ', this.openInfoConversation);
123
- this.eventOpenCloseInfoConversation.emit(this.openInfoConversation);
184
+ this.openInfoMessage = false
185
+ this.openInfoConversation = !this.openInfoConversation
186
+ this.logger.log(
187
+ '[CONVS-DETAIL][HEADER] - onOpenCloseInfoConversation - openInfoConversation ',
188
+ this.openInfoConversation,
189
+ )
190
+ this.eventOpenCloseInfoConversation.emit(this.openInfoConversation)
124
191
  }
125
192
 
126
193
  /** */
127
194
  pushPage(event) { }
128
195
 
129
196
  goBackToConversationList() {
130
- this.router.navigateByUrl('/conversations-list');
197
+ this.router.navigateByUrl('/conversations-list')
131
198
  }
132
199
 
200
+ // -----------------------------------------------------------------
201
+ // PRESENT MODAL CREATE TICKET (MOVED IN ddp-deader.component.ts)
202
+ // -----------------------------------------------------------------
203
+ // async presentCreateTicketModal(e: any): Promise<any>{
204
+
205
+ // // const attributes = { enableBackdropDismiss: false };
206
+ // const modal: HTMLIonModalElement =
207
+ // await this.modalController.create({
208
+ // component: CreateTicketPage,
209
+ // // componentProps: attributes,
210
+ // swipeToClose: false,
211
+ // backdropDismiss: false
212
+ // });
213
+ // modal.onDidDismiss().then((detail: any) => {
214
+ // this.logger.log('[CONVS-DETAIL][HEADER] ', detail.data);
215
+ // });
216
+ // return await modal.present();
217
+ // }
133
218
  }
@@ -38,39 +38,76 @@
38
38
 
39
39
  <ion-col col-auto>
40
40
 
41
- <div class="start-buttons" style="position: absolute;display: flex;">
42
-
43
- <ng-container *ngIf="areVisibleCAR">
44
- <div class="canned-responses-btn-wpr" style="margin-left: -5px;" tooltip="{{translationMap?.get('CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top">
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
- </div>
49
- <div *ngIf="IS_SUPPORT_GROUP_CONVERSATION && tagsCannedCount === 0" tooltip="{{translationMap?.get('NO_CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top" class="no-canned-responses-btn-badge">
50
- <ion-icon name="alert-sharp" style="vertical-align: middle;"></ion-icon>
51
- </div>
52
- <div *ngIf="IS_SUPPORT_GROUP_CONVERSATION && tagsCannedCount > 0" tooltip="{{translationMap?.get('YES_CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top" class="canned-responses-btn-badge">
53
- <ion-icon name="information-sharp" style="vertical-align: middle;"></ion-icon>
54
- </div>
55
- </ng-container>
41
+ <div class="start-buttons" style="position: absolute;display: flex; top: 2px;">
42
+
43
+ <ng-container *ngIf="areVisibleCAR && support_mode === true">
44
+ <div class="canned-responses-btn-wpr" style="margin-left: -5px;"
45
+ tooltip="{{translationMap?.get('CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top">
46
+ <ion-button ion-button fill="clear" class="canned-responses-btn" (click)="openCannedResponses()"
47
+ [disabled]="!IS_SUPPORT_GROUP_CONVERSATION || disableTextarea">
48
+ <ion-icon slot="icon-only" lazy="true" name="flash-outline" style="font-size: 24px;"></ion-icon>
49
+ </ion-button>
50
+ </div>
51
+ <div *ngIf="IS_SUPPORT_GROUP_CONVERSATION && tagsCannedCount === 0"
52
+ tooltip="{{translationMap?.get('NO_CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top"
53
+ class="no-canned-responses-btn-badge">
54
+ <ion-icon name="alert-sharp" style="vertical-align: middle;"></ion-icon>
55
+ </div>
56
+ <div *ngIf="IS_SUPPORT_GROUP_CONVERSATION && tagsCannedCount > 0"
57
+ tooltip="{{translationMap?.get('YES_CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top"
58
+ class="canned-responses-btn-badge">
59
+ <ion-icon name="information-sharp" style="vertical-align: middle;"></ion-icon>
60
+ </div>
61
+ </ng-container>
56
62
 
57
-
58
- <div class="upload-image-btn-wpr" tooltip="{{translationMap?.get('UPLOAD')}}" [options]="tooltipOptions" placement="top">
59
- <ion-button ion-button fill="clear" class="upload-image-btn">
63
+
64
+ <div class="upload-image-btn-wpr" tooltip="{{translationMap?.get('UPLOAD')}}" [options]="tooltipOptions"
65
+ placement="top">
66
+ <ion-button ion-button fill="clear" class="upload-image-btn" [disabled]="disableTextarea">
60
67
  <ion-icon slot="icon-only" lazy="true" name="attach-outline"
61
68
  style="font-size: 30px;transform: rotate(42deg);"></ion-icon>
62
69
  <input #fileInput type="file" (change)="onFileSelected($event)" capture="camera" id="file-input"
63
70
  [accept]="fileUploadAccept">
64
-
71
+
72
+ </ion-button>
73
+
74
+ </div>
75
+
76
+ <!-- <ion-icon (click)="showEmojiPicker = !showEmojiPicker" color="secondary" name="happy" style="zoom:2;"></ion-icon> -->
77
+ <!-- --------------------------------------------- -->
78
+ <!-- Emoji Picker Button tooltip="{{translationMap?.get('CANNED_RESPONSES')}}" [options]="tooltipOptions" placement="top" -->
79
+ <!-- --------------------------------------------- -->
80
+ <div class="emoji-picker-btn-wpr">
81
+ <ion-button ion-button fill="clear" class="emoji-picker-btn" (click)="showEmojiPicker = !showEmojiPicker"
82
+ [disabled]="disableTextarea">
83
+ <!-- <ion-icon slot="icon-only" lazy="true" name="flash-outline" style="font-size: 24px;"></ion-icon> -->
84
+ <ion-icon slot="icon-only" lazy="true" name="happy-outline" style="font-size: 24px;"></ion-icon>
65
85
  </ion-button>
66
-
86
+
87
+ <!-- <div class="emojiContainer" [style.height]="showEmojiPicker?'300px':'0px'"> -->
88
+ <!--Show/Hide emoji picker. Don't use *ngIf because the component will be created again and again and cause performance issue-->
89
+ <!-- <emoji-picker (onEmojiSelect)="addEmoji($event)"></emoji-picker> -->
90
+ <!-- { position: 'absolute', bottom: '20px', right: '20px' }" -->
91
+ <!-- --------------------------------------------------------------------- -->
92
+ <!-- https://www.npmjs.com/package/@ctrl/ngx-emoji-mart/v/1.0.6 -->
93
+ <!-- --------------------------------------------------------------------- -->
94
+ <!-- [style]="{ position: 'absolute', bottom: '53px', right: '-246px' }" -->
95
+ <emoji-mart [showPreview]="false" [perLine]="emojiPerLine" [style.visibility]="showEmojiPicker?'visible':'hidden'"
96
+ (emojiSelect)="addEmoji($event)" [ngClass]="{'emoji-mart-desktop': !IS_ON_MOBILE_DEVICE, 'emoji-mart-mobile': IS_ON_MOBILE_DEVICE }">
97
+ </emoji-mart>
98
+ <!-- </div> -->
99
+
67
100
  </div>
68
101
  </div>
69
102
 
70
- <div class="text-message" [ngClass]="{'text-message-no-cr': areVisibleCAR === false}">
103
+
104
+
105
+
106
+
107
+ <div class="text-message" [ngClass]="{'text-message-no-cr': areVisibleCAR === false || support_mode === false}">
71
108
  <ion-textarea id="ion-textarea" #messageTextArea #message_text_area #textArea rows="1"
72
109
  [placeholder]="TEXAREA_PLACEHOLDER" autosize="false" auto-grow="true" autofocus="true" [value]=""
73
- [(ngModel)]="messageString" (ionChange)="ionChange($event);"
110
+ [(ngModel)]="messageString" (ionChange)="ionChange($event);" [disabled]="disableTextarea"
74
111
  (keydown.enter)="onKeydown($event, messageString)" (paste)="onPaste($event)">
75
112
  </ion-textarea>
76
113
  </div>
@@ -44,8 +44,12 @@
44
44
  position: relative;
45
45
  // margin: 0 35px;
46
46
  // width: calc(100% - 70px);
47
- margin: 0 70px;
48
- width: calc(100% - 100px);
47
+ // ----- new after adding canned open /close canned responses
48
+ // margin: 0 70px;
49
+ // width: calc(100% - 100px);
50
+ // ----- new after adding emoji picker
51
+ margin: 0 108px;
52
+ width: calc(100% - 140px);
49
53
  ion-textarea {
50
54
  // border-radius: 4px;
51
55
  border-radius: 20px; // NK edited
@@ -68,8 +72,8 @@
68
72
  }
69
73
  }
70
74
  .text-message-no-cr {
71
- margin: 0 35px !important;
72
- width: calc(100% - 70px) !important;
75
+ margin: 0 72px !important;
76
+ width: calc(100% - 101px) !important;
73
77
  }
74
78
  }
75
79
 
@@ -106,7 +110,6 @@
106
110
  height: 33px !important;
107
111
  }
108
112
 
109
-
110
113
  .canned-responses-btn {
111
114
  --padding-bottom: 0px;
112
115
  --padding-top: 0px;
@@ -115,7 +118,17 @@
115
118
  --padding-start: 2px;
116
119
  height: 33px !important;
117
120
  width: 33px;
118
- }
121
+ }
122
+
123
+ .emoji-picker-btn {
124
+ --padding-bottom: 0px;
125
+ --padding-top: 0px;
126
+ --border-radius: 50%;
127
+ --padding-end: 2px;
128
+ --padding-start: 2px;
129
+ height: 33px !important;
130
+ width: 33px;
131
+ }
119
132
 
120
133
  .no-canned-responses-btn-badge {
121
134
  position: absolute;
@@ -129,7 +142,7 @@
129
142
  cursor: pointer;
130
143
  }
131
144
  .no-canned-responses-btn-badge:hover {
132
- background-color: rgba(0, 0, 0, 0.05);;
145
+ background-color: rgba(0, 0, 0, 0.05);
133
146
  }
134
147
 
135
148
  .canned-responses-btn-badge {
@@ -145,10 +158,9 @@
145
158
  }
146
159
 
147
160
  .canned-responses-btn-badge:hover {
148
- background-color: rgba(0, 0, 0, 0.05);;
161
+ background-color: rgba(0, 0, 0, 0.05);
149
162
  }
150
163
 
151
-
152
164
  .upload-image-btn .button-native {
153
165
  border-radius: 50%;
154
166
  }
@@ -163,6 +175,17 @@
163
175
  pointer-events: none;
164
176
  }
165
177
 
178
+ .emoji-mart-desktop {
179
+ position: absolute;
180
+ bottom: 53px;
181
+ right: -246px;
182
+ }
183
+ .emoji-mart-mobile {
184
+ position: absolute;
185
+ bottom: 50px;
186
+ right: -123px;
187
+ width: 230px;
188
+ }
166
189
  // input[placeholder] { text-overflow: ellipsis; }
167
190
  // ::-moz-placeholder { text-overflow: ellipsis; } /* firefox 19+ */
168
191
  // input:-moz-placeholder { text-overflow: ellipsis; }