@chat21/chat21-ionic 3.0.5-9.2 → 3.0.6-2.3

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 (178) hide show
  1. package/CHANGELOG.md +202 -0
  2. package/LICENSE +661 -21
  3. package/README.md +13 -1
  4. package/angular.json +4 -0
  5. package/config.xml +4 -5
  6. package/deploy_pre.sh +44 -5
  7. package/deploy_prod.sh +36 -7
  8. package/env.sample +4 -2
  9. package/package.json +12 -8
  10. package/resources/{Android → android}/icon/drawable-hdpi-icon.png +0 -0
  11. package/resources/{Android → android}/icon/drawable-ldpi-icon.png +0 -0
  12. package/resources/{Android → android}/icon/drawable-mdpi-icon.png +0 -0
  13. package/resources/{Android → android}/icon/drawable-xhdpi-icon.png +0 -0
  14. package/resources/{Android → android}/icon/drawable-xxhdpi-icon.png +0 -0
  15. package/resources/{Android → android}/icon/drawable-xxxhdpi-icon.png +0 -0
  16. package/resources/{Android → android}/icon.png +0 -0
  17. package/resources/{Android → android}/splash/drawable-land-hdpi-screen.png +0 -0
  18. package/resources/{Android → android}/splash/drawable-land-ldpi-screen.png +0 -0
  19. package/resources/{Android → android}/splash/drawable-land-mdpi-screen.png +0 -0
  20. package/resources/{Android → android}/splash/drawable-land-xhdpi-screen.png +0 -0
  21. package/resources/{Android → android}/splash/drawable-land-xxhdpi-screen.png +0 -0
  22. package/resources/{Android → android}/splash/drawable-land-xxxhdpi-screen.png +0 -0
  23. package/resources/{Android → android}/splash/drawable-port-hdpi-screen.png +0 -0
  24. package/resources/{Android → android}/splash/drawable-port-ldpi-screen.png +0 -0
  25. package/resources/{Android → android}/splash/drawable-port-mdpi-screen.png +0 -0
  26. package/resources/{Android → android}/splash/drawable-port-xhdpi-screen.png +0 -0
  27. package/resources/{Android → android}/splash/drawable-port-xxhdpi-screen.png +0 -0
  28. package/resources/{Android → android}/splash/drawable-port-xxxhdpi-screen.png +0 -0
  29. package/resources/{Android → android}/splash.png +0 -0
  30. package/src/app/app-routing.module.ts +15 -0
  31. package/src/app/app.component.html +14 -4
  32. package/src/app/app.component.scss +18 -1
  33. package/src/app/app.component.ts +98 -37
  34. package/src/app/app.module.ts +14 -5
  35. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +36 -25
  36. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +160 -50
  37. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +108 -18
  38. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +21 -36
  39. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +19 -7
  40. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +63 -42
  41. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.scss +1 -1
  42. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +7 -2
  43. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +141 -21
  44. package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.ts +13 -10
  45. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +39 -36
  46. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +7 -1
  47. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +148 -63
  48. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +101 -39
  49. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +73 -2
  50. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +168 -98
  51. package/src/app/components/ddp-header/ddp-header.component.html +20 -6
  52. package/src/app/components/ddp-header/ddp-header.component.scss +4 -0
  53. package/src/app/components/ddp-header/ddp-header.component.ts +104 -10
  54. package/src/app/components/image-viewer/image-viewer.component.scss +2 -2
  55. package/src/app/components/project-item/project-item.component.html +141 -118
  56. package/src/app/components/project-item/project-item.component.scss +173 -91
  57. package/src/app/components/project-item/project-item.component.ts +59 -25
  58. package/src/app/components/sidebar/sidebar.component.html +275 -0
  59. package/src/app/components/sidebar/sidebar.component.scss +79 -0
  60. package/src/app/components/sidebar/sidebar.component.spec.ts +24 -0
  61. package/src/app/components/sidebar/sidebar.component.ts +541 -0
  62. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +137 -0
  63. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +389 -0
  64. package/src/app/components/sidebar-user-details/sidebar-user-details.component.spec.ts +24 -0
  65. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +530 -0
  66. package/src/app/pages/conversation-detail/conversation-detail.module.ts +9 -2
  67. package/src/app/pages/conversation-detail/conversation-detail.page.html +53 -49
  68. package/src/app/pages/conversation-detail/conversation-detail.page.scss +28 -0
  69. package/src/app/pages/conversation-detail/conversation-detail.page.ts +1254 -753
  70. package/src/app/pages/conversations-list/conversations-list.module.ts +2 -1
  71. package/src/app/pages/conversations-list/conversations-list.page.html +24 -11
  72. package/src/app/pages/conversations-list/conversations-list.page.scss +20 -1
  73. package/src/app/pages/conversations-list/conversations-list.page.ts +687 -420
  74. package/src/app/pages/create-canned-response/create-canned-response-routing.module.ts +17 -0
  75. package/src/app/pages/create-canned-response/create-canned-response.module.ts +30 -0
  76. package/src/app/pages/create-canned-response/create-canned-response.page.html +150 -0
  77. package/src/app/pages/create-canned-response/create-canned-response.page.scss +55 -0
  78. package/src/app/pages/create-canned-response/create-canned-response.page.spec.ts +24 -0
  79. package/src/app/pages/create-canned-response/create-canned-response.page.ts +319 -0
  80. package/src/app/pages/create-requester/create-requester-routing.module.ts +17 -0
  81. package/src/app/pages/create-requester/create-requester.module.ts +28 -0
  82. package/src/app/pages/create-requester/create-requester.page.html +67 -0
  83. package/src/app/pages/create-requester/create-requester.page.scss +30 -0
  84. package/src/app/pages/create-requester/create-requester.page.spec.ts +24 -0
  85. package/src/app/pages/create-requester/create-requester.page.ts +138 -0
  86. package/src/app/pages/create-ticket/create-ticket-routing.module.ts +17 -0
  87. package/src/app/pages/create-ticket/create-ticket.module.ts +28 -0
  88. package/src/app/pages/create-ticket/create-ticket.page.html +171 -0
  89. package/src/app/pages/create-ticket/create-ticket.page.scss +52 -0
  90. package/src/app/pages/create-ticket/create-ticket.page.spec.ts +24 -0
  91. package/src/app/pages/create-ticket/create-ticket.page.ts +432 -0
  92. package/src/app/pages/loader-preview/loader-preview.page.ts +226 -166
  93. package/src/app/pages/profile-info/profile-info.page.html +4 -4
  94. package/src/app/pages/profile-info/profile-info.page.scss +13 -2
  95. package/src/app/pages/profile-info/profile-info.page.ts +23 -21
  96. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +16 -11
  97. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +157 -63
  98. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +51 -16
  99. package/src/app/services/app-config.ts +14 -14
  100. package/src/app/services/tiledesk/tiledesk.service.ts +209 -0
  101. package/src/app/shared/shared.module.ts +21 -7
  102. package/src/app/utils/scrollbar-theme.directive.ts +58 -24
  103. package/src/assets/i18n/de.json +266 -0
  104. package/src/assets/i18n/en.json +85 -10
  105. package/src/assets/i18n/es.json +266 -0
  106. package/src/assets/i18n/fr.json +266 -0
  107. package/src/assets/i18n/it.json +104 -37
  108. package/src/assets/i18n/pt.json +266 -0
  109. package/src/assets/i18n/ru.json +266 -0
  110. package/src/assets/i18n/sr.json +266 -0
  111. package/src/assets/i18n/tr.json +266 -0
  112. package/src/assets/images/default-avatar-x-select.png +0 -0
  113. package/src/assets/images/language_flag/ar.png +0 -0
  114. package/src/assets/images/language_flag/bg.png +0 -0
  115. package/src/assets/images/language_flag/ca.png +0 -0
  116. package/src/assets/images/language_flag/cs.png +0 -0
  117. package/src/assets/images/language_flag/da.png +0 -0
  118. package/src/assets/images/language_flag/de.png +0 -0
  119. package/src/assets/images/language_flag/el.png +0 -0
  120. package/src/assets/images/language_flag/en.png +0 -0
  121. package/src/assets/images/language_flag/es.png +0 -0
  122. package/src/assets/images/language_flag/fa.png +0 -0
  123. package/src/assets/images/language_flag/fi.png +0 -0
  124. package/src/assets/images/language_flag/fr.png +0 -0
  125. package/src/assets/images/language_flag/he.png +0 -0
  126. package/src/assets/images/language_flag/hi.png +0 -0
  127. package/src/assets/images/language_flag/hr.png +0 -0
  128. package/src/assets/images/language_flag/hu.png +0 -0
  129. package/src/assets/images/language_flag/id.png +0 -0
  130. package/src/assets/images/language_flag/it.png +0 -0
  131. package/src/assets/images/language_flag/ja.png +0 -0
  132. package/src/assets/images/language_flag/ko.png +0 -0
  133. package/src/assets/images/language_flag/ml-IN.png +0 -0
  134. package/src/assets/images/language_flag/ne-NP.png +0 -0
  135. package/src/assets/images/language_flag/nl.png +0 -0
  136. package/src/assets/images/language_flag/no.png +0 -0
  137. package/src/assets/images/language_flag/pl.png +0 -0
  138. package/src/assets/images/language_flag/pt-BR.png +0 -0
  139. package/src/assets/images/language_flag/pt.png +0 -0
  140. package/src/assets/images/language_flag/ro.png +0 -0
  141. package/src/assets/images/language_flag/ru.png +0 -0
  142. package/src/assets/images/language_flag/sk.png +0 -0
  143. package/src/assets/images/language_flag/sl.png +0 -0
  144. package/src/assets/images/language_flag/sr.png +0 -0
  145. package/src/assets/images/language_flag/sv-SE.png +0 -0
  146. package/src/assets/images/language_flag/ta.png +0 -0
  147. package/src/assets/images/language_flag/th.png +0 -0
  148. package/src/assets/images/language_flag/tr.png +0 -0
  149. package/src/assets/images/language_flag/uk.png +0 -0
  150. package/src/assets/images/language_flag/vi.png +0 -0
  151. package/src/assets/images/language_flag/zh-CN.png +0 -0
  152. package/src/assets/images/language_flag/zh-TW.png +0 -0
  153. package/src/assets/images/no_image_user.png +0 -0
  154. package/src/assets/images/priority_icons/high.svg +3 -0
  155. package/src/assets/images/priority_icons/high_v2.svg +14 -0
  156. package/src/assets/images/priority_icons/low.svg +10 -0
  157. package/src/assets/images/priority_icons/low_v2.svg +14 -0
  158. package/src/assets/images/priority_icons/medium.svg +16 -0
  159. package/src/assets/images/priority_icons/medium_v2.svg +11 -0
  160. package/src/assets/images/priority_icons/urgent.svg +4 -0
  161. package/src/assets/images/priority_icons/urgent_v2.svg +16 -0
  162. package/src/assets/js/chat21client.js +16 -3
  163. package/src/assets/tiledesk-solo-logo.png +0 -0
  164. package/src/chat-config-mqtt.json +27 -17
  165. package/src/chat-config-pre-test.json +5 -1
  166. package/src/chat-config-pre.json +15 -3
  167. package/src/chat-config-template.json +6 -2
  168. package/src/chat-config.json +5 -1
  169. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +61 -45
  170. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +23 -0
  171. package/src/chat21-core/providers/mqtt/mqtt-archivedconversations-handler.ts +1 -1
  172. package/src/chat21-core/utils/constants.ts +8 -1
  173. package/src/chat21-core/utils/utils-message.ts +19 -0
  174. package/src/chat21-core/utils/utils.ts +12 -1
  175. package/src/global.scss +408 -2
  176. package/src/index.html +7 -0
  177. package/publish_pre.sh +0 -33
  178. 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
  }
@@ -1,64 +1,126 @@
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> -->
33
+
34
+ <!-- --------------------------------------------------------------------------------------------------------------------- -->
35
+ <!-- ----------new -->
36
+ <ion-grid>
37
+ <ion-row id="message-text-area">
38
+
39
+ <ion-col col-auto>
58
40
 
41
+ <div class="start-buttons" style="position: absolute;display: flex; top: 2px;">
59
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>
60
62
 
61
63
 
62
- </ion-row>
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">
67
+ <ion-icon slot="icon-only" lazy="true" name="attach-outline"
68
+ style="font-size: 30px;transform: rotate(42deg);"></ion-icon>
69
+ <input #fileInput type="file" (change)="onFileSelected($event)" capture="camera" id="file-input"
70
+ [accept]="fileUploadAccept">
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>
85
+ </ion-button>
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> -->
63
99
 
100
+ </div>
101
+ </div>
102
+
103
+
104
+
105
+
106
+
107
+ <div class="text-message" [ngClass]="{'text-message-no-cr': areVisibleCAR === false || support_mode === false}">
108
+ <ion-textarea id="ion-textarea" #messageTextArea #message_text_area #textArea rows="1"
109
+ [placeholder]="TEXAREA_PLACEHOLDER" autosize="false" auto-grow="true" autofocus="true" [value]=""
110
+ [(ngModel)]="messageString" (ionChange)="ionChange($event);" [disabled]="disableTextarea"
111
+ (keydown.enter)="onKeydown($event, messageString)" (paste)="onPaste($event)">
112
+ </ion-textarea>
113
+ </div>
114
+
115
+ <div class="buttons-right">
116
+ <ion-button [disabled]="conversationEnabled === false" class="send-button right active" ion-button fill="clear"
117
+ (click)="sendMessage(messageString)">
118
+ <ion-icon
119
+ [ngClass]="{'send-msg-disabled': conversationEnabled === false,'send-msg-activated': conversationEnabled === true }"
120
+ slot="icon-only" name="send"></ion-icon>
121
+ </ion-button>
122
+ </div>
123
+ </ion-col>
124
+
125
+ </ion-row>
64
126
  </ion-grid>
@@ -42,8 +42,14 @@
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
+ // ----- 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);
47
53
  ion-textarea {
48
54
  // border-radius: 4px;
49
55
  border-radius: 20px; // NK edited
@@ -65,6 +71,10 @@
65
71
  font-size: 15px;
66
72
  }
67
73
  }
74
+ .text-message-no-cr {
75
+ margin: 0 72px !important;
76
+ width: calc(100% - 101px) !important;
77
+ }
68
78
  }
69
79
 
70
80
  #fileInput {
@@ -97,8 +107,58 @@
97
107
  --border-radius: 50%;
98
108
  --padding-end: 1px;
99
109
  --padding-start: 1px;
110
+ height: 33px !important;
111
+ }
112
+
113
+ .canned-responses-btn {
114
+ --padding-bottom: 0px;
115
+ --padding-top: 0px;
116
+ --border-radius: 50%;
117
+ --padding-end: 2px;
118
+ --padding-start: 2px;
119
+ height: 33px !important;
120
+ width: 33px;
121
+ }
100
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;
101
129
  height: 33px !important;
130
+ width: 33px;
131
+ }
132
+
133
+ .no-canned-responses-btn-badge {
134
+ position: absolute;
135
+ font-size: 12px;
136
+ background-color: transparent;
137
+ border-radius: 50%;
138
+ padding: 1px 2px;
139
+ top: 4px;
140
+ color: red;
141
+ left: -3px;
142
+ cursor: pointer;
143
+ }
144
+ .no-canned-responses-btn-badge:hover {
145
+ background-color: rgba(0, 0, 0, 0.05);
146
+ }
147
+
148
+ .canned-responses-btn-badge {
149
+ position: absolute;
150
+ font-size: 12px;
151
+ background-color: transparent;
152
+ border-radius: 50%;
153
+ padding: 1px 2px;
154
+ top: 4px;
155
+ color: #92949c;
156
+ left: -3px;
157
+ cursor: pointer;
158
+ }
159
+
160
+ .canned-responses-btn-badge:hover {
161
+ background-color: rgba(0, 0, 0, 0.05);
102
162
  }
103
163
 
104
164
  .upload-image-btn .button-native {
@@ -115,6 +175,17 @@
115
175
  pointer-events: none;
116
176
  }
117
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
+ }
118
189
  // input[placeholder] { text-overflow: ellipsis; }
119
190
  // ::-moz-placeholder { text-overflow: ellipsis; } /* firefox 19+ */
120
191
  // input:-moz-placeholder { text-overflow: ellipsis; }