@chat21/chat21-ionic 3.0.60 → 3.0.61-rc11

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 (148) hide show
  1. package/CHANGELOG.md +75 -0
  2. package/README.md +2 -0
  3. package/angular.json +3 -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 +12 -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 +10 -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 +7 -1
  34. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +7 -2
  35. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +103 -12
  36. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +39 -36
  37. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +5 -1
  38. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +147 -65
  39. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +3 -3
  40. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +12 -2
  41. package/src/app/components/ddp-header/ddp-header.component.html +20 -6
  42. package/src/app/components/ddp-header/ddp-header.component.scss +4 -0
  43. package/src/app/components/ddp-header/ddp-header.component.ts +104 -10
  44. package/src/app/components/project-item/project-item.component.html +8 -7
  45. package/src/app/components/project-item/project-item.component.scss +6 -1
  46. package/src/app/components/project-item/project-item.component.ts +15 -2
  47. package/src/app/components/sidebar/sidebar.component.html +274 -0
  48. package/src/app/components/sidebar/sidebar.component.scss +79 -0
  49. package/src/app/components/sidebar/sidebar.component.spec.ts +24 -0
  50. package/src/app/components/sidebar/sidebar.component.ts +493 -0
  51. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +110 -0
  52. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +318 -0
  53. package/src/app/components/sidebar-user-details/sidebar-user-details.component.spec.ts +24 -0
  54. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +486 -0
  55. package/src/app/pages/conversation-detail/conversation-detail.module.ts +2 -1
  56. package/src/app/pages/conversation-detail/conversation-detail.page.html +7 -5
  57. package/src/app/pages/conversation-detail/conversation-detail.page.ts +1285 -790
  58. package/src/app/pages/conversations-list/conversations-list.module.ts +2 -1
  59. package/src/app/pages/conversations-list/conversations-list.page.html +18 -9
  60. package/src/app/pages/conversations-list/conversations-list.page.scss +9 -1
  61. package/src/app/pages/conversations-list/conversations-list.page.ts +753 -428
  62. package/src/app/pages/create-requester/create-requester-routing.module.ts +17 -0
  63. package/src/app/pages/create-requester/create-requester.module.ts +28 -0
  64. package/src/app/pages/create-requester/create-requester.page.html +67 -0
  65. package/src/app/pages/create-requester/create-requester.page.scss +30 -0
  66. package/src/app/pages/create-requester/create-requester.page.spec.ts +24 -0
  67. package/src/app/pages/create-requester/create-requester.page.ts +137 -0
  68. package/src/app/pages/create-ticket/create-ticket-routing.module.ts +17 -0
  69. package/src/app/pages/create-ticket/create-ticket.module.ts +28 -0
  70. package/src/app/pages/create-ticket/create-ticket.page.html +171 -0
  71. package/src/app/pages/create-ticket/create-ticket.page.scss +52 -0
  72. package/src/app/pages/create-ticket/create-ticket.page.spec.ts +24 -0
  73. package/src/app/pages/create-ticket/create-ticket.page.ts +423 -0
  74. package/src/app/pages/loader-preview/loader-preview.page.ts +226 -166
  75. package/src/app/pages/profile-info/profile-info.page.html +2 -2
  76. package/src/app/pages/profile-info/profile-info.page.scss +1 -1
  77. package/src/app/pages/profile-info/profile-info.page.ts +23 -21
  78. package/src/app/services/tiledesk/tiledesk.service.ts +181 -0
  79. package/src/app/shared/shared.module.ts +13 -0
  80. package/src/app/utils/scrollbar-theme.directive.ts +58 -24
  81. package/src/assets/i18n/de.json +55 -13
  82. package/src/assets/i18n/en.json +48 -6
  83. package/src/assets/i18n/es.json +47 -5
  84. package/src/assets/i18n/fr.json +50 -8
  85. package/src/assets/i18n/it.json +47 -5
  86. package/src/assets/i18n/pt.json +47 -5
  87. package/src/assets/i18n/ru.json +48 -6
  88. package/src/assets/i18n/sr.json +251 -0
  89. package/src/assets/i18n/tr.json +47 -5
  90. package/src/assets/images/default-avatar-x-select.png +0 -0
  91. package/src/assets/images/language_flag/ar.png +0 -0
  92. package/src/assets/images/language_flag/bg.png +0 -0
  93. package/src/assets/images/language_flag/ca.png +0 -0
  94. package/src/assets/images/language_flag/cs.png +0 -0
  95. package/src/assets/images/language_flag/da.png +0 -0
  96. package/src/assets/images/language_flag/de.png +0 -0
  97. package/src/assets/images/language_flag/el.png +0 -0
  98. package/src/assets/images/language_flag/en.png +0 -0
  99. package/src/assets/images/language_flag/es.png +0 -0
  100. package/src/assets/images/language_flag/fa.png +0 -0
  101. package/src/assets/images/language_flag/fi.png +0 -0
  102. package/src/assets/images/language_flag/fr.png +0 -0
  103. package/src/assets/images/language_flag/he.png +0 -0
  104. package/src/assets/images/language_flag/hi.png +0 -0
  105. package/src/assets/images/language_flag/hr.png +0 -0
  106. package/src/assets/images/language_flag/hu.png +0 -0
  107. package/src/assets/images/language_flag/id.png +0 -0
  108. package/src/assets/images/language_flag/it.png +0 -0
  109. package/src/assets/images/language_flag/ja.png +0 -0
  110. package/src/assets/images/language_flag/ko.png +0 -0
  111. package/src/assets/images/language_flag/ml-IN.png +0 -0
  112. package/src/assets/images/language_flag/ne-NP.png +0 -0
  113. package/src/assets/images/language_flag/nl.png +0 -0
  114. package/src/assets/images/language_flag/no.png +0 -0
  115. package/src/assets/images/language_flag/pl.png +0 -0
  116. package/src/assets/images/language_flag/pt-BR.png +0 -0
  117. package/src/assets/images/language_flag/pt.png +0 -0
  118. package/src/assets/images/language_flag/ro.png +0 -0
  119. package/src/assets/images/language_flag/ru.png +0 -0
  120. package/src/assets/images/language_flag/sk.png +0 -0
  121. package/src/assets/images/language_flag/sl.png +0 -0
  122. package/src/assets/images/language_flag/sr.png +0 -0
  123. package/src/assets/images/language_flag/sv-SE.png +0 -0
  124. package/src/assets/images/language_flag/ta.png +0 -0
  125. package/src/assets/images/language_flag/th.png +0 -0
  126. package/src/assets/images/language_flag/tr.png +0 -0
  127. package/src/assets/images/language_flag/uk.png +0 -0
  128. package/src/assets/images/language_flag/vi.png +0 -0
  129. package/src/assets/images/language_flag/zh-CN.png +0 -0
  130. package/src/assets/images/language_flag/zh-TW.png +0 -0
  131. package/src/assets/images/no_image_user.png +0 -0
  132. package/src/assets/images/priority_icons/high.svg +3 -0
  133. package/src/assets/images/priority_icons/high_v2.svg +14 -0
  134. package/src/assets/images/priority_icons/low.svg +10 -0
  135. package/src/assets/images/priority_icons/low_v2.svg +14 -0
  136. package/src/assets/images/priority_icons/medium.svg +16 -0
  137. package/src/assets/images/priority_icons/medium_v2.svg +11 -0
  138. package/src/assets/images/priority_icons/urgent.svg +4 -0
  139. package/src/assets/images/priority_icons/urgent_v2.svg +16 -0
  140. package/src/assets/tiledesk-solo-logo.png +0 -0
  141. package/src/chat-config-pre-test.json +3 -1
  142. package/src/chat-config-template.json +3 -1
  143. package/src/chat-config.json +4 -2
  144. package/src/chat21-core/utils/constants.ts +6 -1
  145. package/src/global.scss +397 -3
  146. package/src/index.html +7 -0
  147. package/publish_pre.sh +0 -33
  148. package/publish_prod.sh +0 -33
@@ -1,4 +1,4 @@
1
- import { Component, EventEmitter, Input, IterableDiffers, KeyValueDiffers, OnInit, Output } from '@angular/core';
1
+ import { Component, EventEmitter, Input, IterableDiffers, KeyValueDiffers, OnInit, Output, SimpleChange } from '@angular/core';
2
2
  import { ConversationModel } from 'src/chat21-core/models/conversation';
3
3
  import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service';
4
4
  import { convertMessage } from 'src/chat21-core/utils/utils';
@@ -9,12 +9,11 @@ import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance'
9
9
  import { TranslateService } from '@ngx-translate/core';
10
10
 
11
11
  import * as moment from 'moment';
12
- // import { EventsService } from 'src/app/services/events-service';
13
- // import { TiledeskService } from '../../../services/tiledesk/tiledesk.service';
14
12
  import { NetworkService } from '../../../services/network-service/network.service';
15
13
  import { AppConfigProvider } from 'src/app/services/app-config';
16
14
  import { DomSanitizer } from '@angular/platform-browser'
17
15
  import { TiledeskAuthService } from 'src/chat21-core/providers/tiledesk/tiledesk-auth.service';
16
+ import { AlertController } from '@ionic/angular';
18
17
  // import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
19
18
  // import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
20
19
 
@@ -25,8 +24,10 @@ import { TiledeskAuthService } from 'src/chat21-core/providers/tiledesk/tiledesk
25
24
  })
26
25
  export class IonListConversationsComponent extends ListConversationsComponent implements OnInit {
27
26
 
27
+ @Input() archiveActionNotAllowed: boolean;
28
28
  @Input() uidConvSelected: string;
29
29
  @Output() onCloseConversation = new EventEmitter<ConversationModel>();
30
+ @Output() onCloseAlert = new EventEmitter();
30
31
 
31
32
  convertMessage = convertMessage;
32
33
  isApp: boolean = false;
@@ -35,7 +36,22 @@ export class IonListConversationsComponent extends ListConversationsComponent im
35
36
  public browserLang: string;
36
37
 
37
38
  public PROJECT_FOR_PANEL: any;
38
-
39
+ public archive_btn_tooltip: string;
40
+ public resolve_btn_tooltip: string;
41
+ public alert_lbl: string;
42
+ public actionNotAllowed_lbl: string;
43
+ public youAreNoLongerAmongTheTeammatesManagingThisConversation_lbl: string;
44
+ public ok_lbl: string;
45
+
46
+ tooltip_options = {
47
+ 'show-delay': 0,
48
+ 'tooltip-class': 'chat-tooltip',
49
+ 'theme': 'light',
50
+ 'shadow': false,
51
+ 'hide-delay-mobile': 0,
52
+ 'hideDelayAfterClick': 3000,
53
+ 'hide-delay': 100
54
+ };
39
55
  /**
40
56
  *
41
57
  * @param iterableDiffers
@@ -47,12 +63,12 @@ export class IonListConversationsComponent extends ListConversationsComponent im
47
63
  public kvDiffers: KeyValueDiffers,
48
64
  public platform: Platform,
49
65
  private translate: TranslateService,
50
- // private events: EventsService,
51
- // private tiledeskService: TiledeskService,
52
66
  private networkService: NetworkService,
53
67
  private appConfigProvider: AppConfigProvider,
54
68
  private sanitizer: DomSanitizer,
55
- public tiledeskAuthService: TiledeskAuthService
69
+ public tiledeskAuthService: TiledeskAuthService,
70
+ public alertController: AlertController
71
+
56
72
  ) {
57
73
  super(iterableDiffers, kvDiffers)
58
74
  this.setMomentLocale();
@@ -78,6 +94,60 @@ export class IonListConversationsComponent extends ListConversationsComponent im
78
94
 
79
95
  // console.log('[ION-LIST-CONVS-COMP] - DASHBOARD_BASE_URL ', DASHBOARD_BASE_URL)
80
96
  this.PROJECT_FOR_PANEL = this.sanitizer.bypassSecurityTrustResourceUrl(DASHBOARD_BASE_URL + '#/project-for-panel');
97
+ this.translateLbls();
98
+
99
+ }
100
+ ngOnInit() {
101
+ this.isApp = this.platform.is('ios') || this.platform.is('android')
102
+ this.logger.log('[ION-LIST-CONVS-COMP] - ngOnInit - IS-APP ', this.isApp)
103
+ this.logger.log('[ION-LIST-CONVS-COMP] - ngOnInit - Platform', this.platform.platforms());
104
+
105
+ }
106
+
107
+ ngOnChanges(changes: { [property: string]: SimpleChange }) {
108
+ // Extract changes to the input property by its name
109
+ let change: SimpleChange = changes['archiveActionNotAllowed'];
110
+ this.logger.log('[ION-LIST-CONVS-COMP] - ngOnChanges change ', change);
111
+ // console.log('[ION-LIST-CONVS-COMP] - ngOnChanges change currentValue ', change.currentValue)
112
+ if (change && change.currentValue === true) {
113
+ this.pesentAlertActionNotAllowed()
114
+ }
115
+ // Whenever the data in the parent changes, this method gets triggered. You
116
+ // can act on the changes here. You will have both the previous value and the
117
+ // current value here.
118
+ }
119
+
120
+
121
+ translateLbls() {
122
+ this.translate.get('Resolve')
123
+ .subscribe((text: string) => {
124
+ this.resolve_btn_tooltip = text;
125
+ });
126
+
127
+ this.translate.get('Archive')
128
+ .subscribe((text: string) => {
129
+ this.archive_btn_tooltip = text;
130
+ });
131
+
132
+ this.translate.get('ALERT_TITLE')
133
+ .subscribe((text: string) => {
134
+ this.alert_lbl = text;
135
+ });
136
+
137
+ this.translate.get('ActionNotAllowed')
138
+ .subscribe((text: string) => {
139
+ this.actionNotAllowed_lbl = text;
140
+ });
141
+
142
+ this.translate.get('YouAreNoLongerAmongTheTeammatesManagingThisConversation')
143
+ .subscribe((text: string) => {
144
+ this.youAreNoLongerAmongTheTeammatesManagingThisConversation_lbl = text;
145
+ });
146
+
147
+ this.translate.get('CLOSE_ALERT_CONFIRM_LABEL')
148
+ .subscribe((text: string) => {
149
+ this.ok_lbl = text;
150
+ });
81
151
  }
82
152
 
83
153
  setMomentLocale() {
@@ -103,10 +173,29 @@ export class IonListConversationsComponent extends ListConversationsComponent im
103
173
  moment.locale(chat_lang)
104
174
  }
105
175
 
106
- ngOnInit() {
107
- this.isApp = this.platform.is('ios') || this.platform.is('android')
108
- this.logger.log('[ION-LIST-CONVS-COMP] - ngOnInit - IS-APP ', this.isApp)
109
- this.logger.log('[ION-LIST-CONVS-COMP] - ngOnInit - Platform', this.platform.platforms());
176
+
177
+
178
+ async pesentAlertActionNotAllowed() {
179
+
180
+ const alert = await this.alertController.create({
181
+ cssClass: 'my-custom-class',
182
+ header: this.alert_lbl,
183
+ subHeader: this.actionNotAllowed_lbl,
184
+ message: this.youAreNoLongerAmongTheTeammatesManagingThisConversation_lbl,
185
+ buttons: [
186
+ {
187
+ text: this.ok_lbl,
188
+ handler: () => {
189
+ this.alertClosed();
190
+ // console.log('Confirm Okay');
191
+ },
192
+ },
193
+ ],
194
+ });
195
+
196
+ await alert.present();
197
+
198
+
110
199
  }
111
200
 
112
201
 
@@ -130,7 +219,9 @@ export class IonListConversationsComponent extends ListConversationsComponent im
130
219
  // });
131
220
  // }
132
221
 
133
-
222
+ alertClosed() {
223
+ this.onCloseAlert.emit(true)
224
+ }
134
225
 
135
226
  closeConversation(conversation: ConversationModel) {
136
227
  var conversationId = conversation.uid;
@@ -1,50 +1,40 @@
1
-
2
1
  <ion-header no-border class="ion-no-border">
3
- <ion-toolbar>
4
-
5
- <ion-buttons slot="start">
2
+ <ion-toolbar style="height:60px">
3
+ <ion-buttons slot="start" style="height:60px">
6
4
  <!-- (click)="pushPage('conversations-list')" defaultHref="/conversations-list" -->
7
5
  <ion-back-button style="display: block;" text="" *ngIf="isMobile" (click)="goBackToConversationList()">
8
- </ion-back-button>
6
+ </ion-back-button>
9
7
  </ion-buttons>
10
8
 
11
9
  <ion-title [class.info-open]="openInfoConversation || openInfoMessage">
12
10
 
13
- <div *ngIf="conversationAvatar" class="avatar-and-typing-wpr">
11
+ <div *ngIf="conversationAvatar" class="avatar-and-typing-wpr" >
14
12
  <!-- [ngStyle] = "{ 'left': platformName === 'ios' ? '55px' : '' }" -->
15
- <div *ngIf="conversationAvatar" class="avatar-container" [ngClass] = "{ 'avatar-container-ios': platformName === 'ios' }">
16
- <app-avatar-profile
17
- [itemAvatar] = conversationAvatar
18
- ></app-avatar-profile>
13
+ <div *ngIf="conversationAvatar" class="avatar-container" (click)="onOpenCloseInfoConversation()" style="cursor: pointer"
14
+ [ngClass]="{ 'avatar-container-ios': platformName === 'ios' }">
15
+ <app-avatar-profile [itemAvatar]=conversationAvatar></app-avatar-profile>
19
16
  </div>
20
17
  <!-- [ngStyle] = "{ 'left': platformName === 'ios' ? '63px' : '' }" -->
21
- <div *ngIf="isDirect" class="user-presence" [ngClass] = "{ 'user-presence-ios': platformName === 'ios' }">
22
- <app-user-presence
23
- [idUser] = conversationAvatar.conversation_with
24
- [translationMap] = translationMap
25
- [borderColor] = borderColor
26
- [fontColor] = fontColor>
18
+ <div *ngIf="isDirect" class="user-presence" [ngClass]="{ 'user-presence-ios': platformName === 'ios' }">
19
+ <app-user-presence [idUser]=conversationAvatar.conversation_with [translationMap]=translationMap
20
+ [borderColor]=borderColor [fontColor]=fontColor>
27
21
  </app-user-presence>
28
22
  </div>
29
23
 
30
24
  <div *ngIf="conversationAvatar" class="user-typing">
31
- <app-user-typing
32
- [idConversation] = conversationAvatar.uid
33
- [idCurrentUser] = idLoggedUser
34
- [isDirect] = isDirect
35
- [translationMap] = translationMap
36
- [color] = fontColor
37
- [membersConversation] = membersConversation
38
- ></app-user-typing>
25
+ <app-user-typing [idConversation]=conversationAvatar.uid [idCurrentUser]=idLoggedUser [isDirect]=isDirect
26
+ [translationMap]=translationMap [color]=fontColor [membersConversation]=membersConversation>
27
+ </app-user-typing>
39
28
  </div>
40
29
 
41
30
  </div>
42
31
  <!-- [ngClass] = "{ 'tile-info-with-ios': platformName === 'ios' ? '82px' : ''82px'' }" -->
43
- <div *ngIf="conversationAvatar" class="tile-info-with" (click)="onOpenCloseInfoConversation()"
44
- [ngClass] = "{ 'tile-info-with-ios': platformName === 'ios' }">
32
+ <!-- (click)="onOpenCloseInfoConversation()" -->
33
+ <div *ngIf="conversationAvatar" class="tile-info-with"
34
+ [ngClass]="{ 'tile-info-with-ios': platformName === 'ios' }">
45
35
  <!-- <span class="tile-username">{{ conversationAvatar.conversation_with_fullname }} </span> -->
46
36
  <span class="tile-username">{{ conversation_with_fullname }} </span>
47
-
37
+
48
38
  </div>
49
39
 
50
40
  <!-- <div *ngIf="conversationWithFullname" class="tile-info-with" (click)="onOpenCloseInfoConversation()">
@@ -55,15 +45,28 @@
55
45
  <!-- openInfoConversation {{openInfoConversation}} -->
56
46
  <ion-buttons slot="end">
57
47
 
58
- <ion-button *ngIf="!openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
59
- <!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
60
- <ion-icon slot="icon-only" name="information-circle-outline"></ion-icon>
61
- <!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
62
-
63
- </ion-button>
64
- <ion-button *ngIf="openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
65
- <ion-icon slot="icon-only" name="close-circle-outline"></ion-icon>
66
- </ion-button>
48
+ <!-- <ion-button ion-button fill="clear" color="primary" size="small" (click)="presentCreateTicketModal()" [ngClass]="{'resolve-conv-margin-right': !isMobile}">
49
+ <ion-icon name="ticket-outline"></ion-icon>
50
+ <span style="text-transform: capitalize; margin-left: 5px;"> {{ 'Crea ticket' | translate}} </span>
51
+ </ion-button> -->
52
+
53
+ <ion-button *ngIf="idConv.startsWith('support-group') && conv_type !== 'archived'" ion-button fill="clear" color="primary" size="small"
54
+ (click)="closeConversation()" [ngClass]="{'resolve-conv-margin-right': !isMobile}" [disabled]="conv_closed === true">
55
+ <!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
56
+ <ion-icon name="archive-outline"></ion-icon>
57
+ <!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
58
+ <span style="text-transform: capitalize; margin-left: 5px;"> {{ 'Resolve' | translate}} </span>
59
+ </ion-button>
60
+
61
+ <ion-button *ngIf="!openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
62
+ <!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
63
+ <ion-icon slot="icon-only" name="information-circle-outline"></ion-icon>
64
+ <!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
65
+
66
+ </ion-button>
67
+ <ion-button *ngIf="openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
68
+ <ion-icon slot="icon-only" name="close-circle-outline"></ion-icon>
69
+ </ion-button>
67
70
 
68
71
  </ion-buttons>
69
72
 
@@ -58,7 +58,7 @@ ion-header {
58
58
  top: 0;
59
59
  left: 50px;
60
60
  vertical-align: middle;
61
- cursor: pointer;
61
+ // cursor: pointer;
62
62
  }
63
63
  .tile-point {
64
64
  width: 10px;
@@ -158,4 +158,8 @@ ion-header {
158
158
 
159
159
  .avatar-container-ios {
160
160
  left: 55px;
161
+ }
162
+
163
+ .resolve-conv-margin-right {
164
+ margin-right: 52px;
161
165
  }
@@ -1,133 +1,215 @@
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
+
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);
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, )
67
95
  this.conversation_with_fullname = this.conversationAvatar.conversation_with_fullname
68
-
69
- this.initialize();
96
+ this.listenToConversationHasBeenClosed()
97
+ this.initialize()
70
98
  }
71
99
 
72
100
  ngOnChanges() {
73
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar', this.conversationAvatar);
101
+ this.logger.log(
102
+ '[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar',
103
+ this.conversationAvatar,
104
+ )
74
105
  if (this.conversationAvatar) {
75
- this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(this.conversationAvatar.uid)
106
+ this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(
107
+ this.conversationAvatar.uid,
108
+ )
76
109
  } else {
77
- const channelType = setChannelType(this.idConv);
78
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED channelType ', channelType);
110
+ const channelType = setChannelType(this.idConv)
111
+ this.logger.log(
112
+ '[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED channelType ',
113
+ channelType,
114
+ )
79
115
  this.conversationAvatar = setConversationAvatar(
80
116
  this.idConv,
81
117
  this.fullNameConv,
82
118
  channelType,
83
- );
119
+ )
84
120
  if (this.conversationAvatar) {
85
- this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(this.conversationAvatar.uid)
121
+ this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(
122
+ this.conversationAvatar.uid,
123
+ )
86
124
  }
87
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED conversationAvatar', this.conversationAvatar);
125
+ this.logger.log(
126
+ '[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar usecase UNDEFINED conversationAvatar',
127
+ this.conversationAvatar,
128
+ )
88
129
  }
89
130
 
90
- this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - isOpenInfoConversation', this.isOpenInfoConversation);
91
- this.openInfoConversation = this.isOpenInfoConversation;
131
+ this.logger.log(
132
+ '[CONVS-DETAIL][HEADER] - (ngOnChanges) - isOpenInfoConversation',
133
+ this.isOpenInfoConversation,
134
+ )
135
+ this.openInfoConversation = this.isOpenInfoConversation
92
136
  }
93
137
 
94
-
95
138
  // ----------------------------------------------------
96
139
  // @ Initialize (called in ngOnInit)
97
140
  // ----------------------------------------------------
98
141
  initialize() {
99
142
  this.getPlatformName()
100
- if (this.conversationAvatar && this.conversationAvatar.channelType === this.DIRECT) {
101
- this.isDirect = true;
143
+ if (
144
+ this.conversationAvatar &&
145
+ this.conversationAvatar.channelType === this.DIRECT
146
+ ) {
147
+ this.isDirect = true
102
148
  } else if (this.idLoggedUser) {
103
- this.membersConversation.push(this.idLoggedUser);
149
+ this.membersConversation.push(this.idLoggedUser)
104
150
  }
105
151
  }
106
152
 
107
153
  getPlatformName() {
108
- this.logger.log('getPlatformName this.platform', this.platform)
154
+ this.logger.log('getPlatformName this.platform', this.platform)
109
155
  if (this.platform.is('ios')) {
110
156
  this.platformName = 'ios'
111
- this.logger.log('getPlatformName platformName', this.platformName)
112
- } else if (this.platform.is('android')){
157
+ this.logger.log('getPlatformName platformName', this.platformName)
158
+ } else if (this.platform.is('android')) {
113
159
  this.platformName = 'android'
114
- this.logger.log('getPlatformName platformName', this.platformName)
160
+ this.logger.log('getPlatformName platformName', this.platformName)
115
161
  }
162
+ }
116
163
 
164
+ closeConversation() {
165
+ this.events.publish('hasclosedconversation', this.idConv)
117
166
  }
118
167
 
168
+ listenToConversationHasBeenClosed() {
169
+ this.events.subscribe('conversationhasbeenclosed', (convId) => {
170
+ // console.log('[CONVS-DETAIL][HEADER] conversationhasbeenclosed convId', convId)
171
+ if (convId === this.idConv) {
172
+ this.logger.log('[CONVS-DETAIL][HEADER] the conversation was closed',)
173
+ this.conv_closed = true;
174
+ }
175
+ });
176
+ }
177
+
178
+
179
+
119
180
  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);
181
+ this.openInfoMessage = false
182
+ this.openInfoConversation = !this.openInfoConversation
183
+ this.logger.log(
184
+ '[CONVS-DETAIL][HEADER] - onOpenCloseInfoConversation - openInfoConversation ',
185
+ this.openInfoConversation,
186
+ )
187
+ this.eventOpenCloseInfoConversation.emit(this.openInfoConversation)
124
188
  }
125
189
 
126
190
  /** */
127
- pushPage(event) { }
191
+ pushPage(event) {}
128
192
 
129
193
  goBackToConversationList() {
130
- this.router.navigateByUrl('/conversations-list');
194
+ this.router.navigateByUrl('/conversations-list')
131
195
  }
132
196
 
197
+ // -----------------------------------------------------------------
198
+ // PRESENT MODAL CREATE TICKET (MOVED IN ddp-deader.component.ts)
199
+ // -----------------------------------------------------------------
200
+ // async presentCreateTicketModal(e: any): Promise<any>{
201
+
202
+ // // const attributes = { enableBackdropDismiss: false };
203
+ // const modal: HTMLIonModalElement =
204
+ // await this.modalController.create({
205
+ // component: CreateTicketPage,
206
+ // // componentProps: attributes,
207
+ // swipeToClose: false,
208
+ // backdropDismiss: false
209
+ // });
210
+ // modal.onDidDismiss().then((detail: any) => {
211
+ // this.logger.log('[CONVS-DETAIL][HEADER] ', detail.data);
212
+ // });
213
+ // return await modal.present();
214
+ // }
133
215
  }
@@ -42,7 +42,7 @@
42
42
 
43
43
  <ng-container *ngIf="areVisibleCAR">
44
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">
45
+ <ion-button ion-button fill="clear" class="canned-responses-btn" (click)="openCannedResponses()" [disabled]="!IS_SUPPORT_GROUP_CONVERSATION || disableTextarea">
46
46
  <ion-icon slot="icon-only" lazy="true" name="flash-outline" style="font-size: 24px;"></ion-icon>
47
47
  </ion-button>
48
48
  </div>
@@ -56,7 +56,7 @@
56
56
 
57
57
 
58
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">
59
+ <ion-button ion-button fill="clear" class="upload-image-btn" [disabled]="disableTextarea">
60
60
  <ion-icon slot="icon-only" lazy="true" name="attach-outline"
61
61
  style="font-size: 30px;transform: rotate(42deg);"></ion-icon>
62
62
  <input #fileInput type="file" (change)="onFileSelected($event)" capture="camera" id="file-input"
@@ -70,7 +70,7 @@
70
70
  <div class="text-message" [ngClass]="{'text-message-no-cr': areVisibleCAR === false}">
71
71
  <ion-textarea id="ion-textarea" #messageTextArea #message_text_area #textArea rows="1"
72
72
  [placeholder]="TEXAREA_PLACEHOLDER" autosize="false" auto-grow="true" autofocus="true" [value]=""
73
- [(ngModel)]="messageString" (ionChange)="ionChange($event);"
73
+ [(ngModel)]="messageString" (ionChange)="ionChange($event);" [disabled]="disableTextarea"
74
74
  (keydown.enter)="onKeydown($event, messageString)" (paste)="onPaste($event)">
75
75
  </ion-textarea>
76
76
  </div>