@chat21/chat21-ionic 3.0.78 → 3.0.79-rc.1

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 (93) hide show
  1. package/CHANGELOG.md +37 -1
  2. package/package.json +1 -1
  3. package/src/app/app.component.scss +2 -1
  4. package/src/app/app.component.ts +1 -1
  5. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +8 -1
  6. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +36 -10
  7. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +110 -38
  8. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +15 -2
  9. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +1 -1
  10. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +3 -1
  11. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.html +5 -1
  12. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.scss +22 -15
  13. package/src/app/chatlib/conversation-detail/message/buttons/action-button/action-button.component.ts +25 -5
  14. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.html +2 -1
  15. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.scss +14 -15
  16. package/src/app/chatlib/conversation-detail/message/buttons/link-button/link-button.component.ts +24 -5
  17. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.html +6 -1
  18. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.scss +12 -13
  19. package/src/app/chatlib/conversation-detail/message/buttons/text-button/text-button.component.ts +26 -5
  20. package/src/app/chatlib/conversation-detail/message/info-message/info-message.component.scss +2 -2
  21. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.html +16 -6
  22. package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.ts +2 -0
  23. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +78 -52
  24. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +61 -20
  25. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +14 -10
  26. package/src/app/components/canned-response/canned-response.component.html +4 -4
  27. package/src/app/components/canned-response/canned-response.component.scss +1 -1
  28. package/src/app/components/canned-response/canned-response.component.ts +1 -0
  29. package/src/app/components/contacts-directory/contacts-directory.component.html +22 -26
  30. package/src/app/components/contacts-directory/contacts-directory.component.scss +8 -6
  31. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +61 -41
  32. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +91 -57
  33. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +9 -25
  34. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.scss +4 -4
  35. package/src/app/components/conversation-info/info-content/info-content.component.html +2 -1
  36. package/src/app/components/conversation-info/info-content/info-content.component.ts +3 -2
  37. package/src/app/components/conversation-info/info-direct/info-direct.component.html +1 -9
  38. package/src/app/components/conversation-info/info-direct/info-direct.component.ts +0 -2
  39. package/src/app/components/conversation-info/info-group/info-group.component.html +44 -108
  40. package/src/app/components/conversation-info/info-group/info-group.component.scss +101 -61
  41. package/src/app/components/conversation-info/info-group/info-group.component.ts +1 -0
  42. package/src/app/components/{ddp-header/ddp-header.component.html → conversations-list/header-conversations-list/header-conversations-list.component.html} +2 -2
  43. package/src/app/components/{ddp-header/ddp-header.component.scss → conversations-list/header-conversations-list/header-conversations-list.component.scss} +16 -4
  44. package/src/app/components/{ddp-header/ddp-header.component.spec.ts → conversations-list/header-conversations-list/header-conversations-list.component.spec.ts} +6 -6
  45. package/src/app/components/{ddp-header/ddp-header.component.ts → conversations-list/header-conversations-list/header-conversations-list.component.ts} +7 -16
  46. package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.html +12 -0
  47. package/src/app/components/conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.scss +14 -0
  48. package/src/app/components/{conversation-detail/option-header/option-header.component.spec.ts → conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.spec.ts} +5 -5
  49. package/src/app/components/{conversation-detail/option-header/option-header.component.ts → conversations-list/header-conversations-list-archived/header-conversations-list-archived.component.ts} +5 -4
  50. package/src/app/components/project-item/project-item.component.html +98 -149
  51. package/src/app/components/project-item/project-item.component.scss +39 -32
  52. package/src/app/components/project-item/project-item.component.ts +5 -3
  53. package/src/app/components/utils/user-presence/user-presence.component.html +7 -2
  54. package/src/app/components/utils/user-presence/user-presence.component.scss +35 -18
  55. package/src/app/components/utils/user-presence/user-presence.component.ts +6 -10
  56. package/src/app/pages/contacts-directory/contacts-directory.page.html +1 -1
  57. package/src/app/pages/contacts-directory/contacts-directory.page.scss +41 -0
  58. package/src/app/pages/contacts-directory/contacts-directory.page.ts +2 -0
  59. package/src/app/pages/conversation-detail/conversation-detail.page.html +40 -23
  60. package/src/app/pages/conversation-detail/conversation-detail.page.scss +40 -250
  61. package/src/app/pages/conversation-detail/conversation-detail.page.ts +165 -46
  62. package/src/app/pages/conversations-list/conversations-list.page.html +11 -8
  63. package/src/app/pages/conversations-list/conversations-list.page.scss +10 -2
  64. package/src/app/pages/conversations-list/conversations-list.page.ts +22 -17
  65. package/src/app/pages/loader-preview/loader-preview.page.html +1 -1
  66. package/src/app/pages/loader-preview/loader-preview.page.scss +4 -0
  67. package/src/app/pages/profile-info/profile-info.page.html +2 -4
  68. package/src/app/shared/shared.module.ts +24 -24
  69. package/src/assets/i18n/ar.json +270 -265
  70. package/src/assets/i18n/az.json +5 -0
  71. package/src/assets/i18n/de.json +5 -0
  72. package/src/assets/i18n/en.json +5 -0
  73. package/src/assets/i18n/es.json +5 -0
  74. package/src/assets/i18n/fr.json +5 -0
  75. package/src/assets/i18n/it.json +5 -0
  76. package/src/assets/i18n/kk.json +5 -0
  77. package/src/assets/i18n/pt.json +5 -0
  78. package/src/assets/i18n/ru.json +5 -0
  79. package/src/assets/i18n/sr.json +5 -0
  80. package/src/assets/i18n/sv.json +5 -0
  81. package/src/assets/i18n/tr.json +5 -0
  82. package/src/assets/i18n/uk.json +5 -0
  83. package/src/assets/i18n/uz.json +5 -0
  84. package/src/chat21-core/providers/firebase/firebase-typing.service.ts +7 -9
  85. package/src/chat21-core/utils/constants.ts +4 -0
  86. package/src/chat21-core/utils/user-typing/user-typing.component.html +8 -5
  87. package/src/chat21-core/utils/user-typing/user-typing.component.scss +87 -17
  88. package/src/chat21-core/utils/user-typing/user-typing.component.ts +12 -94
  89. package/src/chat21-core/utils/utils.ts +9 -1
  90. package/src/global.scss +47 -43
  91. package/src/variables.scss +26 -9
  92. package/src/app/components/conversation-detail/option-header/option-header.component.html +0 -13
  93. package/src/app/components/conversation-detail/option-header/option-header.component.scss +0 -0
@@ -1,3 +1,5 @@
1
+ import { TYPE_GROUP, TYPE_SUPPORT_GROUP } from './../../../../chat21-core/utils/constants';
2
+ import { TYPE_DIRECT } from 'src/chat21-core/utils/constants';
1
3
  import { Component, EventEmitter, Input, IterableDiffers, KeyValueDiffers, OnInit, Output, SimpleChange } from '@angular/core';
2
4
  import { ConversationModel } from 'src/chat21-core/models/conversation';
3
5
  import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service';
@@ -14,6 +16,7 @@ import { AppConfigProvider } from 'src/app/services/app-config';
14
16
  import { DomSanitizer } from '@angular/platform-browser'
15
17
  import { TiledeskAuthService } from 'src/chat21-core/providers/tiledesk/tiledesk-auth.service';
16
18
  import { AlertController } from '@ionic/angular';
19
+ import { CustomTranslateService } from 'src/chat21-core/providers/custom-translate.service';
17
20
  // import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
18
21
  // import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
19
22
 
@@ -35,6 +38,8 @@ export class IonListConversationsComponent extends ListConversationsComponent im
35
38
  public currentYear: any;
36
39
  public browserLang: string;
37
40
 
41
+ public translationsMap: Map<string, string> = new Map()
42
+
38
43
  public PROJECT_FOR_PANEL: any;
39
44
  public archive_btn_tooltip: string;
40
45
  public resolve_btn_tooltip: string;
@@ -52,6 +57,10 @@ export class IonListConversationsComponent extends ListConversationsComponent im
52
57
  'hideDelayAfterClick': 3000,
53
58
  'hide-delay': 100
54
59
  };
60
+
61
+ TYPE_DIRECT = TYPE_DIRECT;
62
+ TYPE_GROUP = TYPE_GROUP;
63
+ TYPE_SUPPORT_GROUP = TYPE_SUPPORT_GROUP;
55
64
  /**
56
65
  *
57
66
  * @param iterableDiffers
@@ -63,6 +72,7 @@ export class IonListConversationsComponent extends ListConversationsComponent im
63
72
  public kvDiffers: KeyValueDiffers,
64
73
  public platform: Platform,
65
74
  private translate: TranslateService,
75
+ private translateService: CustomTranslateService,
66
76
  private networkService: NetworkService,
67
77
  private appConfigProvider: AppConfigProvider,
68
78
  private sanitizer: DomSanitizer,
@@ -73,7 +83,6 @@ export class IonListConversationsComponent extends ListConversationsComponent im
73
83
  super(iterableDiffers, kvDiffers)
74
84
  this.setMomentLocale();
75
85
 
76
-
77
86
  // if (this.browserLang) {
78
87
 
79
88
  // moment.locale(this.browserLang)
@@ -123,16 +132,11 @@ export class IonListConversationsComponent extends ListConversationsComponent im
123
132
  'ALERT_TITLE',
124
133
  'ActionNotAllowed',
125
134
  'CLOSE_ALERT_CONFIRM_LABEL',
126
- 'YouAreNoLongerAmongTheTeammatesManagingThisConversation'
135
+ 'YouAreNoLongerAmongTheTeammatesManagingThisConversation',
136
+ 'GROUP_CHAT',
137
+ 'DIRECT_CHAT'
127
138
  ]
128
- this.translate.get(['Resolve', 'Archive', 'ALERT_TITLE']).subscribe((translations: string) => {
129
- this.resolve_btn_tooltip = translations['Resolve'];
130
- this.archive_btn_tooltip = translations['Archive'];
131
- this.alert_lbl = translations['ALERT_TITLE']
132
- this.actionNotAllowed_lbl = translations['ActionNotAllowed']
133
- this.ok_lbl = translations['CLOSE_ALERT_CONFIRM_LABEL']
134
- this.youAreNoLongerAmongTheTeammatesManagingThisConversation_lbl = translations['YouAreNoLongerAmongTheTeammatesManagingThisConversation']
135
- });
139
+ this.translationsMap = this.translateService.translateLanguage(translationKeys)
136
140
  }
137
141
 
138
142
  setMomentLocale() {
@@ -22,10 +22,10 @@
22
22
  <div class="loader" *ngIf="tagsCannedFilter.length === 0">
23
23
  <div class="box">
24
24
  <div class="container">
25
- <span class="circle"></span>
26
- <span class="circle"></span>
27
- <span class="circle"></span>
28
- <span class="circle"></span>
25
+ <span class="circle" [ngStyle]="{'background-color': stylesMap?.get('themeColor')}"></span>
26
+ <span class="circle" [ngStyle]="{'background-color': stylesMap?.get('themeColor')}"></span>
27
+ <span class="circle" [ngStyle]="{'background-color': stylesMap?.get('themeColor')}"></span>
28
+ <span class="circle" [ngStyle]="{'background-color': stylesMap?.get('themeColor')}"></span>
29
29
  </div>
30
30
  <div class="label">{{translationMap.get('LABEL_LOADING')}}</div>
31
31
  </div>
@@ -179,7 +179,7 @@ ion-item {
179
179
  width: 15px;
180
180
  height: 15px;
181
181
  border-radius: 50%;
182
- background-color: #1877f2;
182
+ background-color: var(--basic-blue);
183
183
  animation: move 500ms linear 0ms infinite;
184
184
  margin-right: 30px;
185
185
 
@@ -20,6 +20,7 @@ export class CannedResponseComponent implements OnInit {
20
20
  @Input() conversationWith: string;
21
21
  @Input() conversationWithFullname: string;
22
22
  @Input() currentString: string;
23
+ @Input() stylesMap: Map<string, string>;
23
24
  @Input() translationMap: Map<string, string>;
24
25
  @Output() onLoadedCannedResponses = new EventEmitter<[any]>();
25
26
  @Output() onClickCanned = new EventEmitter<any>();
@@ -1,28 +1,24 @@
1
1
 
2
- <ion-content padding>
3
- <ion-searchbar id="contacts-searchbar" debounce="500" (ionInput)="onSearchInput($event)"></ion-searchbar>
4
- <ion-list>
5
-
6
- <ion-item button="true" lines="none" class="ion-no-padding" *ngFor="let user of contacts" (click)="goToChat(user)">
7
- <div tabindex="0"></div>
8
- <!-- <div [class.selected]="user.uid === uidUserSelected"></div> [style.background-color]="user.color"-->
9
- <ion-avatar slot="start">
10
- <div #avatarPlaceholder class="avatar-placeholder" [ngStyle]="{'background': 'linear-gradient(rgb(255,255,255) -125%,' + user.color + ')'}" [innerHTML]="user.avatar"></div>
11
- <div *ngIf="user.imageurl" #avatarImage class="avatar-profile" [style.background-image]="'url(' + user.imageurl + ')'"></div>
12
- <!-- <div *ngIf="getImageAvatar(conversation.sender)" #avatarImage class="avatar-profile" [style.background-image]="'url(' + getImageAvatar(conversation.sender) + ')'"></div> -->
13
- <div class="user-presence">
14
- <app-presence
15
- [isOnline]="user.online">
16
- </app-presence>
17
- </div>
18
- </ion-avatar>
19
-
20
- <ion-label>
21
- <h2>{{ user.fullname }}</h2>
22
- <!-- <p>{{ user.uid }}</p> -->
23
- </ion-label>
24
-
25
- </ion-item>
2
+ <ion-searchbar id="contacts-searchbar" debounce="500" (ionInput)="onSearchInput($event)"></ion-searchbar>
3
+
4
+ <ion-item button="true" lines="none" class="ion-no-padding" *ngFor="let user of contacts" (click)="goToChat(user)">
5
+ <div tabindex="0"></div>
6
+ <!-- <div [class.selected]="user.uid === uidUserSelected"></div> [style.background-color]="user.color"-->
7
+ <ion-avatar slot="start">
8
+ <div #avatarPlaceholder class="avatar-placeholder" [ngStyle]="{'background': 'linear-gradient(rgb(255,255,255) -125%,' + user.color + ')'}" [innerHTML]="user.avatar"></div>
9
+ <div *ngIf="user.imageurl" #avatarImage class="avatar-profile" [style.background-image]="'url(' + user.imageurl + ')'"></div>
10
+ <!-- <div *ngIf="getImageAvatar(conversation.sender)" #avatarImage class="avatar-profile" [style.background-image]="'url(' + getImageAvatar(conversation.sender) + ')'"></div> -->
11
+ <div class="user-presence">
12
+ <app-presence
13
+ [isOnline]="user.online">
14
+ </app-presence>
15
+ </div>
16
+ </ion-avatar>
17
+
18
+ <ion-label>
19
+ <h2>{{ user.fullname }}</h2>
20
+ <!-- <p>{{ user.uid }}</p> -->
21
+ </ion-label>
22
+
23
+ </ion-item>
26
24
 
27
- </ion-list>
28
- </ion-content>
@@ -1,22 +1,24 @@
1
1
  ion-item {
2
2
  cursor: pointer;
3
3
  height: 64px;
4
+ --min-height: 64px;
4
5
  position: relative;
5
6
  display: flex;
6
7
  text-decoration: none;
7
- padding-left: 8px;
8
- padding-right: 8px;
8
+ margin: 4px 5px;
9
9
  --padding-start: 0;
10
10
  --inner-padding-end: 0;
11
+ --background: transparent;
12
+ --background-hover: #000000 !important;
13
+ border-radius: var(--border-radius-item);
14
+
11
15
  .selected {
12
- border-radius: 10px;
13
- padding-left: 8px;
14
- padding-right: 8px;
15
16
  position: absolute;
16
17
  width: 100%;
17
18
  height: 100%;
18
19
  z-index:-1;
19
- background-color: rgba(0, 0, 0, .05);
20
+ background: var(--list-bkg-color-selected);
21
+ border-right: 4px solid var(--basic-blue);
20
22
  }
21
23
  ion-avatar {
22
24
  position: relative;
@@ -1,51 +1,74 @@
1
- <ion-header no-border class="ion-no-border">
2
- <ion-toolbar>
1
+ <ion-header no-border class="ion-no-border" [class.mobile]="isMobile">
2
+ <ion-toolbar [class.mobile]="isMobile">
3
3
  <ion-buttons slot="start" style="height:60px" *ngIf="isMobile">
4
4
  <!-- (click)="pushPage('conversations-list')" defaultHref="/conversations-list" -->
5
5
  <ion-back-button style="display: block;" text="" (click)="goBackToConversationList()">
6
6
  </ion-back-button>
7
7
  </ion-buttons>
8
8
 
9
- <ion-title [class.info-open]="openInfoConversation || openInfoMessage">
9
+ <ion-title>
10
10
 
11
- <div *ngIf="conversationAvatar" class="avatar-and-typing-wpr" >
11
+ <div *ngIf="conversationAvatar" class="avatar-and-typing-wpr" [ngClass]="{'mobile': isMobile}">
12
12
  <!-- [ngStyle] = "{ 'left': platformName === 'ios' ? '55px' : '' }" -->
13
- <div *ngIf="conversationAvatar" class="avatar-container" (click)="onOpenCloseInfoConversation()" style="cursor: pointer"
13
+ <div class="avatar-container" style="cursor: pointer"
14
14
  [ngClass]="{ 'avatar-container-ios': platformName === 'ios' }">
15
15
  <app-avatar-profile
16
16
  [itemAvatar]=conversationAvatar>
17
17
  </app-avatar-profile>
18
18
  </div>
19
- <!-- [ngStyle] = "{ 'left': platformName === 'ios' ? '63px' : '' }" -->
20
- <div *ngIf="isDirect" class="user-presence" [ngClass]="{ 'user-presence-ios': platformName === 'ios' }">
21
- <app-user-presence
22
- [idUser]=conversationAvatar.conversation_with
23
- [translationMap]=translationMap
24
- [borderColor]=borderColor
25
- [fontColor]=fontColor>
26
- </app-user-presence>
27
- </div>
19
+ <div class="info-container">
20
+
21
+ <!-- [ngClass] = "{ 'tile-info-with-ios': platformName === 'ios' ? '82px' : ''82px'' }" -->
22
+ <!-- (click)="onOpenCloseInfoConversation()" -->
23
+ <div class="tile-info-with"
24
+ [ngClass]="{ 'tile-info-with-ios': platformName === 'ios' }">
25
+ <span class="tile-username truncate">{{ conversationAvatar.conversation_with_fullname}} </span>
26
+ <!-- <span class="tile-username">{{ conversation_with_fullname }} </span> -->
27
+ </div>
28
+
29
+ <!-- [ngStyle] = "{ 'left': platformName === 'ios' ? '63px' : '' }" -->
30
+ <!-- <div *ngIf="isDirect" class="user-presence" [ngClass]="{ 'user-presence-ios': platformName === 'ios' }">
31
+ <app-user-presence
32
+ [idUser]=conversationAvatar.conversation_with
33
+ [translationMap]=translationsMap
34
+ [borderColor]=borderColor
35
+ [fontColor]=fontColor>
36
+ </app-user-presence>
37
+ </div> -->
38
+
39
+ <div class="subtitle-info">
40
+ <div class="conversation_project">
41
+ <!-- DIRECT CONV -->
42
+ <div *ngIf="isDirect">
43
+ <app-user-presence
44
+ [idUser]="conversationAvatar.conversation_with"
45
+ [isMobile]="isMobile"
46
+ [translationMap]="translationsMap">
47
+ </app-user-presence>
48
+ <!-- <svg xmlns="http://www.w3.org/2000/svg" height="15" width="15" viewBox="0 0 24 24" fill="#000000"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>
49
+ <span class="truncate">{{translationsMap.get('DIRECT_CHAT')}}</span> -->
50
+ </div>
51
+ <!-- GROUP CONV -->
52
+ <div *ngIf="conversationUid?.startsWith(TYPE_GROUP)">
53
+ <svg xmlns="http://www.w3.org/2000/svg" height="15" width="15" viewBox="0 0 24 24" fill="#000000"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>
54
+ <span class="truncate">{{translationsMap.get('GROUP_CHAT')}}</span>
55
+ </div>
56
+ <!-- SUPPORT-GROUP CONV -->
57
+ <div *ngIf="conversationUid?.startsWith(TYPE_SUPPORT_GROUP)">
58
+ <svg xmlns="http://www.w3.org/2000/svg" data-v-78d18411="" width="15" height="15" fill="none" viewBox="0 0 24 24" class="inbox-icon"><path d="M22.002 12C22.002 6.477 17.524 2 12 2 6.476 1.999 2 6.477 2 12.001c0 5.186 3.947 9.45 9.001 9.952V20.11c-.778-.612-1.478-1.905-1.939-3.61h1.94V15H8.737a18.969 18.969 0 0 1-.135-5h6.794c.068.64.105 1.31.105 2h1.5c0-.684-.033-1.353-.095-2h3.358c.154.64.237 1.31.237 2h1.5ZM4.786 16.5h2.722l.102.396c.317 1.17.748 2.195 1.27 3.015a8.532 8.532 0 0 1-4.094-3.41ZM3.736 10h3.358a20.847 20.847 0 0 0-.095 2c0 1.043.075 2.051.217 3H4.043a8.483 8.483 0 0 1-.544-3c0-.682.08-1.347.232-1.983L3.736 10Zm5.122-5.902.023-.008C8.16 5.222 7.611 6.748 7.298 8.5H4.25c.905-2 2.56-3.587 4.608-4.402Zm3.026-.594L12 3.5l.126.006c1.262.126 2.48 2.125 3.045 4.995H8.83c.568-2.878 1.79-4.88 3.055-4.996Zm3.343.76-.107-.174.291.121a8.533 8.533 0 0 1 4.339 4.29h-3.048c-.298-1.665-.806-3.125-1.475-4.237Z M12 19a1 1 0 0 0 1 1h3v2h-.5a.5.5 0 1 0 0 1h4a.5.5 0 0 0 0-1H19v-2h3a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1h-9a1 1 0 0 0-1 1v5Z" fill="currentColor"/></svg>
59
+ <span *ngIf="conversationAvatar?.project_name" class="truncate">{{conversationAvatar?.project_name}}</span>
60
+ <span *ngIf="!conversationAvatar?.project_name" class="truncate">{{conversationAvatar?.projectId}}</span>
61
+ </div>
62
+ </div>
28
63
 
29
- <div *ngIf="conversationAvatar" class="user-typing">
30
- <app-user-typing
31
- [idConversation]=conversationAvatar.uid
32
- [idCurrentUser]=idLoggedUser
33
- [isDirect]=isDirect
34
- [translationMap]=translationMap
35
- [color]=fontColor
36
- [membersConversation]=membersConversation>
37
- </app-user-typing>
64
+ </div>
38
65
  </div>
66
+
39
67
 
40
- </div>
41
- <!-- [ngClass] = "{ 'tile-info-with-ios': platformName === 'ios' ? '82px' : ''82px'' }" -->
42
- <!-- (click)="onOpenCloseInfoConversation()" -->
43
- <div *ngIf="conversationAvatar" class="tile-info-with"
44
- [ngClass]="{ 'tile-info-with-ios': platformName === 'ios' }">
45
- <span class="tile-username">{{ conversationAvatar.conversation_with_fullname | truncate:50 }} </span>
46
- <!-- <span class="tile-username">{{ conversation_with_fullname }} </span> -->
68
+
47
69
 
48
70
  </div>
71
+
49
72
 
50
73
  <!-- <div *ngIf="conversationWithFullname" class="tile-info-with" (click)="onOpenCloseInfoConversation()">
51
74
  <span class="tile-username">{{ conversationWithFullname }} </span>
@@ -60,23 +83,20 @@
60
83
  <span style="text-transform: capitalize; margin-left: 5px;"> {{ 'Crea ticket' | translate}} </span>
61
84
  </ion-button> -->
62
85
 
63
- <ion-button *ngIf="conversationUid?.startsWith('support-group') && conv_type !== 'archived'" ion-button fill="clear" color="primary" size="small"
64
- (click)="closeConversation()" [ngClass]="{'resolve-conv-margin-right': !isMobile}" [disabled]="conv_closed === true">
86
+ <ion-button *ngIf="conversationUid?.startsWith('support-group') && conv_type !== 'archived'" ion-button fill="clear" size="small"
87
+ (click)="closeConversation()" [disabled]="conv_closed === true">
65
88
  <!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
66
89
  <ion-icon name="archive-outline"></ion-icon>
67
90
  <!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
68
- <span style="text-transform: capitalize; margin-left: 5px;"> {{ 'Resolve' | translate}} </span>
91
+ <span style="text-transform: capitalize; margin-left: 5px;"> {{translationsMap?.get('Resolve')}} </span>
69
92
  </ion-button>
70
93
 
71
- <ion-button *ngIf="!openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
72
- <!-- <ion-icon slot="icon-only" name="alert-circle-outline"></ion-icon> -->
73
- <ion-icon slot="icon-only" name="information-circle-outline"></ion-icon>
74
- <!-- <ion-icon slot="icon-only" name="information-outline"></ion-icon> -->
75
-
76
- </ion-button>
77
- <ion-button *ngIf="openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
94
+ <!-- <ion-button *ngIf="!openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
95
+ <ion-icon slot="icon-only" name="information-circle-outline"></ion-icon>
96
+ </ion-button> -->
97
+ <!-- <ion-button *ngIf="openInfoConversation" ion-button fill="clear" (click)="onOpenCloseInfoConversation()">
78
98
  <ion-icon slot="icon-only" name="close-circle-outline"></ion-icon>
79
- </ion-button>
99
+ </ion-button> -->
80
100
 
81
101
  </ion-buttons>
82
102
 
@@ -1,11 +1,18 @@
1
1
 
2
2
  ion-header {
3
- --ion-background-color: #fff;
4
- border-bottom-style: solid;
5
- border-color: var(--light-gray);
6
- border-bottom-width: thin;
3
+ border: none;
4
+ &.mobile{
5
+ --ion-background-color: #fff;
6
+ border-bottom-style: solid;
7
+ border-color: var(--light-gray);
8
+ border-bottom-width: thin;
9
+ }
10
+
7
11
  ion-toolbar{
8
- height: 60px;
12
+ height: var(--header-height);
13
+ &:not(.mobile){
14
+ --background: var(--list-bkg-color);
15
+ }
9
16
  .flex-container{
10
17
  display: flex;
11
18
  }
@@ -27,7 +34,7 @@ ion-header {
27
34
  text-align: left;
28
35
  padding-inline: unset;
29
36
  margin: 0px 10px;
30
- height: 40px;
37
+ // height: 40px;
31
38
  width: 100%;
32
39
  }
33
40
  ion-avatar {
@@ -69,17 +76,27 @@ ion-header {
69
76
  }
70
77
  }
71
78
  .tile-info-with {
72
- // position: relative;
73
- // display: inline-block;
74
- // vertical-align: middle;
75
- // margin: -6px 0px 0 6px;
76
- position: absolute;
77
- margin: auto 0;
78
- height: 100%;
79
- top: 0;
80
- left: 50px;
81
- vertical-align: middle;
82
- // cursor: pointer;
79
+ display: flex;
80
+
81
+ .tile-username {
82
+ display: inline-block;
83
+ font-size: 18px;
84
+ margin: 0;
85
+ padding: 0;
86
+
87
+ color: #1f2d3d;
88
+ font-weight: 400; //600;
89
+ -webkit-font-smoothing: antialiased;
90
+ text-rendering: optimizeLegibility;
91
+ -webkit-text-size-adjust: none;
92
+ -moz-text-size-adjust: none;
93
+ -ms-text-size-adjust: none;
94
+ text-size-adjust: none;
95
+ -webkit-user-select: text;
96
+ -moz-user-select: text;
97
+ -ms-user-select: text;
98
+ user-select: text;
99
+ }
83
100
  }
84
101
  .tile-point {
85
102
  width: 10px;
@@ -90,27 +107,7 @@ ion-header {
90
107
  margin-right: 5px;
91
108
  vertical-align: middle;
92
109
  }
93
- .tile-username {
94
- display: inline-block;
95
- font-size: 15px;
96
- color: var(--black);
97
- margin: 0;
98
- padding: 0;
99
-
100
- color: #3c4858;
101
- font-family: "Google Sans",sans-serif!important;
102
- font-weight: 600;
103
- -webkit-font-smoothing: antialiased;
104
- text-rendering: optimizeLegibility;
105
- -webkit-text-size-adjust: none;
106
- -moz-text-size-adjust: none;
107
- -ms-text-size-adjust: none;
108
- text-size-adjust: none;
109
- -webkit-user-select: text;
110
- -moz-user-select: text;
111
- -ms-user-select: text;
112
- user-select: text;
113
- }
110
+
114
111
 
115
112
  .tile-last-activity {
116
113
  color: var(--light-gray);
@@ -125,6 +122,9 @@ ion-header {
125
122
  }
126
123
 
127
124
  ion-buttons {
125
+ ion-icon , span{
126
+ color: var(--basic-blue)
127
+ }
128
128
  button {
129
129
  max-width: 30px;
130
130
  padding: 0;
@@ -133,18 +133,25 @@ ion-header {
133
133
  }
134
134
  }
135
135
 
136
+ .avatar-and-typing-wpr{
137
+ display: flex;
138
+ &.mobile{
139
+ margin-left: 25px;
140
+ }
141
+ }
142
+
136
143
  .avatar-container {
137
144
  background-color: #fff;
138
145
  color: #fff;
139
146
  text-align: center;
140
- width: 40px;
141
- height: 40px;
142
- position: absolute;
143
- top: 0;
147
+ width: 44px;
148
+ height: 44px;
149
+ // position: absolute;
150
+ // top: 0;
151
+ // left: 20px;
144
152
  border-radius: 50%;
145
153
  padding: 0px;
146
- transform: translateX(-50%);
147
- left: 20px;
154
+ // transform: translateX(-50%);
148
155
 
149
156
  border-color: #fff;
150
157
  border-style: solid;
@@ -152,23 +159,54 @@ ion-header {
152
159
  line-height: 40px;
153
160
  display: inline-block;
154
161
  }
162
+
163
+ .info-container{
164
+ display: flex;
165
+ flex-direction: column;
166
+ justify-content: center;
167
+ margin-left: 12px;
168
+ width: 80%;
169
+ }
170
+
155
171
  .user-presence {
156
172
  position: absolute;
157
- bottom: 0;
173
+ bottom: 3px; //0;
158
174
  height: 12px;
159
175
  left: 30px;
160
176
  width: 100px;
161
177
  }
162
- .user-typing {
163
- position: absolute;
164
- left: 50px;
165
- bottom: -3px;
166
- padding: 0;
167
- margin: 0;
168
- height: 16px;
169
- width: 140px;
178
+ .subtitle-info {
179
+ // position: absolute;
180
+ // left: 50px;
181
+ // bottom: -3px;
182
+ // padding: 0;
183
+ // margin: 0;
184
+ display: flex;
185
+ align-items: center;
186
+ // height: 16px;
187
+ // width: 140px;
188
+ font-size: 12px;
189
+ .conversation_project{
190
+ display: inline-flex;
191
+ align-items: center;
192
+ line-height: 1.2rem;
193
+ font-weight: 500;
194
+ color: #779bbb;
195
+ font-size: 10px;
196
+ max-width: 90%;
197
+ margin-right: 5px;
198
+ svg {
199
+ fill:#779bbb;
200
+ vertical-align: sub;
201
+ }
202
+ span{
203
+ padding-left: 5px
204
+ }
205
+ }
170
206
  }
171
207
 
208
+
209
+
172
210
  .tile-info-with-ios {
173
211
  left: 82px !important;
174
212
  top: 10px!important;
@@ -182,7 +220,3 @@ ion-header {
182
220
  left: 55px;
183
221
  top: 10px;
184
222
  }
185
-
186
- .resolve-conv-margin-right {
187
- margin-right: 52px;
188
- }
@@ -1,3 +1,4 @@
1
+ import { TYPE_GROUP } from './../../../../chat21-core/utils/constants';
1
2
  import {
2
3
  Component,
3
4
  OnInit,
@@ -22,7 +23,7 @@ import { ModalController } from '@ionic/angular'
22
23
  import { EventsService } from 'src/app/services/events-service'
23
24
  import { CreateTicketPage } from 'src/app/pages/create-ticket/create-ticket.page'
24
25
  import { TiledeskService } from 'src/app/services/tiledesk/tiledesk.service'
25
- import { TYPE_DIRECT } from 'src/chat21-core/utils/constants'
26
+ import { TYPE_DIRECT, TYPE_SUPPORT_GROUP } from 'src/chat21-core/utils/constants'
26
27
 
27
28
  @Component({
28
29
  selector: 'app-header-conversation-detail',
@@ -34,24 +35,22 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
34
35
  @Input() idLoggedUser: string
35
36
  @Input() conversationUid: string
36
37
  @Input() conv_type: string
37
- @Input() isOpenInfoConversation: boolean = true
38
38
  @Input() isMobile: boolean
39
- @Input() translationMap: Map<string, string>
40
- @Output() eventOpenCloseInfoConversation = new EventEmitter<boolean>()
39
+ @Input() translationsMap: Map<string, string>
41
40
  conversationWithFullname: string
42
41
  openInfoConversation = true
43
- openInfoMessage = true
44
-
42
+
45
43
  isDirect = false
46
- isTyping = false
47
44
  borderColor = '#ffffff'
48
45
  fontColor = '#949494'
49
- membersConversation = ['SYSTEM']
50
46
  platformName: string
51
47
  conv_closed: boolean = false;
52
48
  IS_ON_IOS_MOBILE_DEVICE: boolean
53
49
  private logger: LoggerService = LoggerInstance.getInstance()
54
50
 
51
+ TYPE_SUPPORT_GROUP = TYPE_SUPPORT_GROUP
52
+ TYPE_GROUP = TYPE_GROUP
53
+
55
54
  constructor(
56
55
  public imageRepoService: ImageRepoService,
57
56
  private route: ActivatedRoute,
@@ -73,7 +72,6 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
73
72
  this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - conversationAvatar', this.conversationAvatar,)
74
73
  this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnInit) - conv_type', this.conv_type)
75
74
  this.listenToConversationHasBeenClosed()
76
- this.initialize();
77
75
  // this.isOniOSMobileDevice()
78
76
  }
79
77
 
@@ -91,8 +89,8 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
91
89
  this.logger.log('[CONVS-DETAIL][HEADER] - (ngOnChanges) - conversationAvatar', this.conversationAvatar)
92
90
  if (this.conversationAvatar) {
93
91
  this.conversationAvatar.imageurl = this.imageRepoService.getImagePhotoUrl(this.conversationAvatar.uid)
94
- }
95
- this.openInfoConversation = this.isOpenInfoConversation
92
+ this.initialize()
93
+ }
96
94
  }
97
95
 
98
96
  // ----------------------------------------------------
@@ -102,8 +100,6 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
102
100
  this.getPlatformName()
103
101
  if ( this.conversationAvatar && this.conversationAvatar.channelType === TYPE_DIRECT ) {
104
102
  this.isDirect = true
105
- } else if (this.idLoggedUser) {
106
- this.membersConversation.push(this.idLoggedUser)
107
103
  }
108
104
  }
109
105
 
@@ -133,18 +129,6 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
133
129
  });
134
130
  }
135
131
 
136
-
137
-
138
- onOpenCloseInfoConversation() {
139
- this.openInfoMessage = false
140
- this.openInfoConversation = !this.openInfoConversation
141
- this.logger.log(
142
- '[CONVS-DETAIL][HEADER] - onOpenCloseInfoConversation - openInfoConversation ',
143
- this.openInfoConversation,
144
- )
145
- this.eventOpenCloseInfoConversation.emit(this.openInfoConversation)
146
- }
147
-
148
132
  /** */
149
133
  pushPage(event) { }
150
134
 
@@ -4,6 +4,10 @@
4
4
  height: auto;
5
5
  padding: 0;
6
6
  margin: 0;
7
+
8
+ ion-icon{
9
+ color: var(--basic-blue);
10
+ }
7
11
  .buttons-left {
8
12
  position: absolute;
9
13
  left: 0;
@@ -165,10 +169,6 @@
165
169
  border-radius: 50%;
166
170
  }
167
171
 
168
- .send-msg-activated {
169
- color: #3880ff !important;
170
- }
171
-
172
172
  .send-msg-disabled {
173
173
  cursor: default;
174
174
  opacity: 0.8;