@chat21/chat21-ionic 3.0.60 → 3.0.61-rc14

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 (162) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/README.md +2 -0
  3. package/angular.json +4 -0
  4. package/config.xml +5 -5
  5. package/deploy_pre.sh +10 -10
  6. package/deploy_prod.sh +5 -1
  7. package/env.sample +3 -1
  8. package/package.json +13 -7
  9. package/resources/{Android → android}/icon/drawable-hdpi-icon.png +0 -0
  10. package/resources/{Android → android}/icon/drawable-ldpi-icon.png +0 -0
  11. package/resources/{Android → android}/icon/drawable-mdpi-icon.png +0 -0
  12. package/resources/{Android → android}/icon/drawable-xhdpi-icon.png +0 -0
  13. package/resources/{Android → android}/icon/drawable-xxhdpi-icon.png +0 -0
  14. package/resources/{Android → android}/icon/drawable-xxxhdpi-icon.png +0 -0
  15. package/resources/{Android → android}/icon.png +0 -0
  16. package/resources/{Android → android}/splash/drawable-land-hdpi-screen.png +0 -0
  17. package/resources/{Android → android}/splash/drawable-land-ldpi-screen.png +0 -0
  18. package/resources/{Android → android}/splash/drawable-land-mdpi-screen.png +0 -0
  19. package/resources/{Android → android}/splash/drawable-land-xhdpi-screen.png +0 -0
  20. package/resources/{Android → android}/splash/drawable-land-xxhdpi-screen.png +0 -0
  21. package/resources/{Android → android}/splash/drawable-land-xxxhdpi-screen.png +0 -0
  22. package/resources/{Android → android}/splash/drawable-port-hdpi-screen.png +0 -0
  23. package/resources/{Android → android}/splash/drawable-port-ldpi-screen.png +0 -0
  24. package/resources/{Android → android}/splash/drawable-port-mdpi-screen.png +0 -0
  25. package/resources/{Android → android}/splash/drawable-port-xhdpi-screen.png +0 -0
  26. package/resources/{Android → android}/splash/drawable-port-xxhdpi-screen.png +0 -0
  27. package/resources/{Android → android}/splash/drawable-port-xxxhdpi-screen.png +0 -0
  28. package/resources/{Android → android}/splash.png +0 -0
  29. package/src/app/app-routing.module.ts +15 -0
  30. package/src/app/app.component.html +14 -4
  31. package/src/app/app.component.scss +18 -1
  32. package/src/app/app.component.ts +50 -16
  33. package/src/app/app.module.ts +12 -3
  34. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +23 -5
  35. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +142 -49
  36. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +101 -18
  37. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +20 -36
  38. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +10 -0
  39. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +35 -40
  40. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +7 -2
  41. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +103 -12
  42. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +39 -36
  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/ddp-header/ddp-header.component.html +20 -6
  49. package/src/app/components/ddp-header/ddp-header.component.scss +4 -0
  50. package/src/app/components/ddp-header/ddp-header.component.ts +104 -10
  51. package/src/app/components/project-item/project-item.component.html +8 -7
  52. package/src/app/components/project-item/project-item.component.scss +7 -2
  53. package/src/app/components/project-item/project-item.component.ts +15 -2
  54. package/src/app/components/sidebar/sidebar.component.html +275 -0
  55. package/src/app/components/sidebar/sidebar.component.scss +79 -0
  56. package/src/app/components/sidebar/sidebar.component.spec.ts +24 -0
  57. package/src/app/components/sidebar/sidebar.component.ts +539 -0
  58. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +117 -0
  59. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +330 -0
  60. package/src/app/components/sidebar-user-details/sidebar-user-details.component.spec.ts +24 -0
  61. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +490 -0
  62. package/src/app/pages/conversation-detail/conversation-detail.module.ts +6 -1
  63. package/src/app/pages/conversation-detail/conversation-detail.page.html +20 -10
  64. package/src/app/pages/conversation-detail/conversation-detail.page.scss +28 -0
  65. package/src/app/pages/conversation-detail/conversation-detail.page.ts +1132 -784
  66. package/src/app/pages/conversations-list/conversations-list.module.ts +2 -1
  67. package/src/app/pages/conversations-list/conversations-list.page.html +18 -9
  68. package/src/app/pages/conversations-list/conversations-list.page.scss +9 -1
  69. package/src/app/pages/conversations-list/conversations-list.page.ts +738 -425
  70. package/src/app/pages/create-canned-response/create-canned-response-routing.module.ts +17 -0
  71. package/src/app/pages/create-canned-response/create-canned-response.module.ts +30 -0
  72. package/src/app/pages/create-canned-response/create-canned-response.page.html +150 -0
  73. package/src/app/pages/create-canned-response/create-canned-response.page.scss +55 -0
  74. package/src/app/pages/create-canned-response/create-canned-response.page.spec.ts +24 -0
  75. package/src/app/pages/create-canned-response/create-canned-response.page.ts +319 -0
  76. package/src/app/pages/create-requester/create-requester-routing.module.ts +17 -0
  77. package/src/app/pages/create-requester/create-requester.module.ts +28 -0
  78. package/src/app/pages/create-requester/create-requester.page.html +67 -0
  79. package/src/app/pages/create-requester/create-requester.page.scss +30 -0
  80. package/src/app/pages/create-requester/create-requester.page.spec.ts +24 -0
  81. package/src/app/pages/create-requester/create-requester.page.ts +138 -0
  82. package/src/app/pages/create-ticket/create-ticket-routing.module.ts +17 -0
  83. package/src/app/pages/create-ticket/create-ticket.module.ts +28 -0
  84. package/src/app/pages/create-ticket/create-ticket.page.html +171 -0
  85. package/src/app/pages/create-ticket/create-ticket.page.scss +52 -0
  86. package/src/app/pages/create-ticket/create-ticket.page.spec.ts +24 -0
  87. package/src/app/pages/create-ticket/create-ticket.page.ts +432 -0
  88. package/src/app/pages/loader-preview/loader-preview.page.ts +226 -166
  89. package/src/app/pages/profile-info/profile-info.page.html +4 -4
  90. package/src/app/pages/profile-info/profile-info.page.scss +13 -2
  91. package/src/app/pages/profile-info/profile-info.page.ts +23 -21
  92. package/src/app/services/tiledesk/tiledesk.service.ts +209 -0
  93. package/src/app/shared/shared.module.ts +14 -1
  94. package/src/app/utils/scrollbar-theme.directive.ts +58 -24
  95. package/src/assets/i18n/de.json +69 -13
  96. package/src/assets/i18n/en.json +62 -6
  97. package/src/assets/i18n/es.json +61 -5
  98. package/src/assets/i18n/fr.json +64 -8
  99. package/src/assets/i18n/it.json +61 -5
  100. package/src/assets/i18n/pt.json +61 -5
  101. package/src/assets/i18n/ru.json +62 -6
  102. package/src/assets/i18n/sr.json +265 -0
  103. package/src/assets/i18n/tr.json +61 -5
  104. package/src/assets/images/default-avatar-x-select.png +0 -0
  105. package/src/assets/images/language_flag/ar.png +0 -0
  106. package/src/assets/images/language_flag/bg.png +0 -0
  107. package/src/assets/images/language_flag/ca.png +0 -0
  108. package/src/assets/images/language_flag/cs.png +0 -0
  109. package/src/assets/images/language_flag/da.png +0 -0
  110. package/src/assets/images/language_flag/de.png +0 -0
  111. package/src/assets/images/language_flag/el.png +0 -0
  112. package/src/assets/images/language_flag/en.png +0 -0
  113. package/src/assets/images/language_flag/es.png +0 -0
  114. package/src/assets/images/language_flag/fa.png +0 -0
  115. package/src/assets/images/language_flag/fi.png +0 -0
  116. package/src/assets/images/language_flag/fr.png +0 -0
  117. package/src/assets/images/language_flag/he.png +0 -0
  118. package/src/assets/images/language_flag/hi.png +0 -0
  119. package/src/assets/images/language_flag/hr.png +0 -0
  120. package/src/assets/images/language_flag/hu.png +0 -0
  121. package/src/assets/images/language_flag/id.png +0 -0
  122. package/src/assets/images/language_flag/it.png +0 -0
  123. package/src/assets/images/language_flag/ja.png +0 -0
  124. package/src/assets/images/language_flag/ko.png +0 -0
  125. package/src/assets/images/language_flag/ml-IN.png +0 -0
  126. package/src/assets/images/language_flag/ne-NP.png +0 -0
  127. package/src/assets/images/language_flag/nl.png +0 -0
  128. package/src/assets/images/language_flag/no.png +0 -0
  129. package/src/assets/images/language_flag/pl.png +0 -0
  130. package/src/assets/images/language_flag/pt-BR.png +0 -0
  131. package/src/assets/images/language_flag/pt.png +0 -0
  132. package/src/assets/images/language_flag/ro.png +0 -0
  133. package/src/assets/images/language_flag/ru.png +0 -0
  134. package/src/assets/images/language_flag/sk.png +0 -0
  135. package/src/assets/images/language_flag/sl.png +0 -0
  136. package/src/assets/images/language_flag/sr.png +0 -0
  137. package/src/assets/images/language_flag/sv-SE.png +0 -0
  138. package/src/assets/images/language_flag/ta.png +0 -0
  139. package/src/assets/images/language_flag/th.png +0 -0
  140. package/src/assets/images/language_flag/tr.png +0 -0
  141. package/src/assets/images/language_flag/uk.png +0 -0
  142. package/src/assets/images/language_flag/vi.png +0 -0
  143. package/src/assets/images/language_flag/zh-CN.png +0 -0
  144. package/src/assets/images/language_flag/zh-TW.png +0 -0
  145. package/src/assets/images/no_image_user.png +0 -0
  146. package/src/assets/images/priority_icons/high.svg +3 -0
  147. package/src/assets/images/priority_icons/high_v2.svg +14 -0
  148. package/src/assets/images/priority_icons/low.svg +10 -0
  149. package/src/assets/images/priority_icons/low_v2.svg +14 -0
  150. package/src/assets/images/priority_icons/medium.svg +16 -0
  151. package/src/assets/images/priority_icons/medium_v2.svg +11 -0
  152. package/src/assets/images/priority_icons/urgent.svg +4 -0
  153. package/src/assets/images/priority_icons/urgent_v2.svg +16 -0
  154. package/src/assets/tiledesk-solo-logo.png +0 -0
  155. package/src/chat-config-pre-test.json +3 -1
  156. package/src/chat-config-template.json +3 -1
  157. package/src/chat-config.json +4 -2
  158. package/src/chat21-core/utils/constants.ts +6 -1
  159. package/src/global.scss +405 -3
  160. package/src/index.html +7 -0
  161. package/publish_pre.sh +0 -33
  162. 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; }