@chat21/chat21-ionic 3.0.65-rc2 → 3.0.65

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 (24) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/deploy_amazon_prod.sh +2 -2
  3. package/package.json +3 -3
  4. package/src/app/app.component.ts +14 -33
  5. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +0 -10
  6. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +1 -1
  7. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +18 -30
  8. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +1 -1
  9. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +2 -0
  10. package/src/app/components/project-item/project-item.component.ts +5 -0
  11. package/src/app/components/sidebar/sidebar.component.ts +8 -15
  12. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +12 -23
  13. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +3 -0
  14. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +88 -136
  15. package/src/app/directives/truncate.pipe.ts +0 -1
  16. package/src/app/pages/authentication/login/login.page.ts +0 -1
  17. package/src/app/pages/conversation-detail/conversation-detail.page.ts +40 -44
  18. package/src/app/pages/conversations-list/conversations-list.page.ts +25 -5
  19. package/src/assets/i18n/ar.json +266 -0
  20. package/src/chat21-core/providers/firebase/firebase-archivedconversations-handler.ts +26 -21
  21. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +62 -55
  22. package/src/chat21-core/utils/constants.ts +1 -1
  23. package/src/global.scss +2 -2
  24. package/deploy_prod.sh +0 -14
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # chat21-ionic ver 3.0
2
2
 
3
+ ### 3.0.65 in PROD
4
+ - bug-fixed: icons in sidebar were not alignet correctly on Safari
5
+ - bug-fixed: missing translations on sidebar-detail component and login-modal page on start when user logged in for the first time
6
+ - bug-fixed: some icons not showed in side-bar user detail component: replaced material-design-icons with material-icons
7
+ - bug-fixed: if removed conversation.uid is the selected ones, change url from /active to /archived with navigateByUrl after archivedConversation is completed
8
+ - bug-fixed: truncate sender_fullname in conversation-list and conversation-detail header components
9
+ - added: arabic translations language
10
+ - changed: behaviour of is_new of a conversation (not update 'is_new' conversation property if conv is the selected one or if sender is me)
11
+
12
+ ### 3.0.65-rc3 - LATEST
13
+ - changed: retrive conversations with 'onces' firebase event and remove lastTimestamp from added, changed and removed fireabase subscriptions event
14
+ - bug-fixed: conversation not archived due to conversation_removed unhandled event
15
+ - bug-fixed: if removed conversation.uid is the selected ones, change url from /active to /archived with navigateByUrl after archivedConversation is completed
16
+
3
17
 
4
18
  ### 3.0.65-rc2 - LATEST
5
19
  - changed: behaviour of is_new of a conversation (not update 'is_new' conversation property if conv is the selected one or if sender is me)
@@ -15,9 +15,9 @@ cp -p src/manifest.json platforms/browser/www/
15
15
  cp -p src/chat-config.json platforms/browser/www/
16
16
 
17
17
  cd platforms/browser/www
18
- # aws s3 sync . s3://tiledesk-console/v2/chat/
18
+ aws s3 sync . s3://tiledesk-console/v2/chat/
19
19
  # aws s3 sync . s3://tiledesk-console/v2/chat/$version/
20
- aws s3 sync . s3://tiledesk-console/v2/chat/latest/
20
+ # aws s3 sync . s3://tiledesk-console/v2/chat/latest/
21
21
  cd ../../../
22
22
  # aws cloudfront create-invalidation --distribution-id E36UIP90GOSFPM --paths "/*"
23
23
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@chat21/chat21-ionic",
3
3
  "author": "Tiledesk SRL",
4
- "version": "3.0.65-rc2",
4
+ "version": "3.0.65",
5
5
  "license": "AGPL-3.0",
6
6
  "homepage": "https://tiledesk.com/",
7
7
  "repository": {
@@ -60,7 +60,7 @@
60
60
  "file-saver": "^2.0.5",
61
61
  "firebase": "^8.6.7",
62
62
  "marked": "^2.0.1",
63
- "material-design-icons": "^3.0.1",
63
+ "material-icons": "^1.11.2",
64
64
  "moment": "^2.24.0",
65
65
  "moment-timezone": "^0.5.28",
66
66
  "ng-connection-service": "^1.0.4",
@@ -119,4 +119,4 @@
119
119
  "ios"
120
120
  ]
121
121
  }
122
- }
122
+ }
@@ -37,7 +37,7 @@ import { LoginPage } from './pages/authentication/login/login.page';
37
37
  import { ConversationListPage } from './pages/conversations-list/conversations-list.page';
38
38
 
39
39
  // utils
40
- import { createExternalSidebar, checkPlatformIsMobile, isGroup, getParameterByName } from '../chat21-core/utils/utils';
40
+ import { checkPlatformIsMobile, isGroup, getParameterByName, searchIndexInArrayForUid, compareValues } from '../chat21-core/utils/utils';
41
41
  import { STORAGE_PREFIX, PLATFORM_MOBILE, PLATFORM_DESKTOP, CHAT_ENGINE_FIREBASE, AUTH_STATE_OFFLINE, AUTH_STATE_ONLINE } from '../chat21-core/utils/constants';
42
42
  import { environment } from '../environments/environment';
43
43
  import { UserModel } from '../chat21-core/models/user';
@@ -481,6 +481,7 @@ export class AppComponent implements OnInit {
481
481
  }
482
482
  this.uploadService.initialize();
483
483
 
484
+ this.setLanguage(null)
484
485
  this.initAuthentication();
485
486
  this.initSubscriptions();
486
487
  this.initAudio();
@@ -627,16 +628,13 @@ export class AppComponent implements OnInit {
627
628
 
628
629
 
629
630
  translateToastMsgs() {
630
- this.translate.get('AnErrorOccurredWhileUnsubscribingFromNotifications')
631
- .subscribe((text: string) => {
631
+ this.translate.get('AnErrorOccurredWhileUnsubscribingFromNotifications').subscribe((text: string) => {
632
632
  this.toastMsgErrorWhileUnsubscribingFromNotifications = text;
633
633
  });
634
- this.translate.get('CLOSE_TOAST')
635
- .subscribe((text: string) => {
634
+ this.translate.get('CLOSE_TOAST').subscribe((text: string) => {
636
635
  this.toastMsgCloseToast = text;
637
636
  });
638
- this.translate.get('WAITING_FOR_NETWORK')
639
- .subscribe((text: string) => {
637
+ this.translate.get('WAITING_FOR_NETWORK').subscribe((text: string) => {
640
638
  this.toastMsgWaitingForNetwork = text;
641
639
  });
642
640
  }
@@ -867,7 +865,7 @@ export class AppComponent implements OnInit {
867
865
  }).catch((error: any) => {
868
866
  that.logger.error('[APP-COMP] ***soundMessage error*', error);
869
867
  });
870
- }, 1000);
868
+ }, 4000);
871
869
  }
872
870
  /**---------------- SOUND FUNCTIONS --> END <--- +*/
873
871
  /***************************************************+*/
@@ -922,8 +920,8 @@ export class AppComponent implements OnInit {
922
920
  // that.conversationsChanged(conversations);
923
921
  if (conversation && conversation.is_new === true) {
924
922
  this.manageTabNotification()
925
- this.updateConversationsOnStorage()
926
923
  }
924
+ if(conversation) this.updateConversationsOnStorage()
927
925
  });
928
926
 
929
927
  this.conversationsHandlerService.conversationChanged.subscribe((conversation: ConversationModel) => {
@@ -1195,9 +1193,7 @@ export class AppComponent implements OnInit {
1195
1193
  // 1 - init chatConversationsHandler and archviedConversationsHandler
1196
1194
  this.conversationsHandlerService.initialize(this.tenant, userId, translationMap);
1197
1195
  // this.subscribeToConvs()
1198
- const lastTimestamp = this.manageStoredConversations()
1199
- this.logger.log('[APP-COMP] initConversationsHandler: get lastTimestamp', lastTimestamp)
1200
- this.conversationsHandlerService.subscribeToConversations(lastTimestamp, () => {
1196
+ this.conversationsHandlerService.subscribeToConversations(null, () => {
1201
1197
  // this.logger.log('[APP-COMP] - CONVS - INIT CONV')
1202
1198
  const conversations = this.conversationsHandlerService.conversations;
1203
1199
  this.logger.info('initialize FROM [APP-COMP] - [APP-COMP]-CONVS - INIT CONV CONVS', conversations)
@@ -1211,34 +1207,18 @@ export class AppComponent implements OnInit {
1211
1207
 
1212
1208
  }
1213
1209
 
1214
- // START: manage conversations on firebase upon last timestamp from stored conversations
1215
- private manageStoredConversations(): number {
1216
- let timestamp = 0
1217
- if(this.appStorageService.getItem('conversations')){
1218
- const conversationsStored = JSON.parse(this.appStorageService.getItem('conversations'))
1219
- if(conversationsStored && conversationsStored.length > 0) {
1220
- this.conversationsHandlerService.conversations = conversationsStored
1221
- timestamp = conversationsStored[0].timestamp
1222
- this.events.publish('appcompSubscribeToConvs:loadingIsActive', false);
1223
- }
1224
- }
1225
- return timestamp
1226
- }
1227
-
1228
1210
  private updateConversationsOnStorage(){
1229
1211
  const that = this
1230
1212
  //reset timer and save conversation on storage after 2s
1231
- clearTimeout(this.setTimeoutConversationsEvent);
1232
- this.setTimeoutConversationsEvent = setTimeout(() => {
1233
- this.logger.debug('[APP-COMP] updateConversationsOnStorage: reset timer and save conversations -> ', this.conversationsHandlerService.conversations.length)
1234
- that.appStorageService.setItem('conversations', JSON.stringify(this.conversationsHandlerService.conversations))
1235
- }, 2000);
1213
+ // clearTimeout(this.setTimeoutConversationsEvent);
1214
+ // this.setTimeoutConversationsEvent = setTimeout(() => {
1215
+ // this.logger.debug('[APP-COMP] updateConversationsOnStorage: reset timer and save conversations -> ', this.conversationsHandlerService.conversations.length)
1216
+ // that.appStorageService.setItem('conversations', JSON.stringify(this.conversationsHandlerService.conversations))
1217
+ // }, 2000);
1236
1218
  }
1237
- // END: manage conversations on firebase upon last timestamp from stored conversations
1238
1219
 
1239
1220
  private initArchivedConversationsHandler(userId: string) {
1240
1221
  const keys = ['YOU'];
1241
-
1242
1222
  const translationMap = this.translateService.translateLanguage(keys);
1243
1223
 
1244
1224
  this.logger.debug('[APP-COMP] initArchivedConversationsHandler ------------->', userId, this.tenant);
@@ -1305,3 +1285,4 @@ export class AppComponent implements OnInit {
1305
1285
  }
1306
1286
  }
1307
1287
  }
1288
+
@@ -59,16 +59,12 @@ export class BubbleMessageComponent implements OnInit, OnChanges {
59
59
  setMomentLocale() {
60
60
  this.browserLang = this.translate.getBrowserLang();
61
61
  const currentUser = this.tiledeskAuthService.getCurrentUser();
62
- this.logger.log('[BUBBLE-MESSAGE] - ngOnInit - currentUser ', currentUser)
63
62
  let currentUserId = ''
64
63
  if (currentUser) {
65
64
  currentUserId = currentUser.uid
66
- this.logger.log('[BUBBLE-MESSAGE] - ngOnInit - currentUserId ', currentUserId)
67
65
  }
68
66
 
69
67
  const stored_preferred_lang = localStorage.getItem(currentUserId + '_lang');
70
- this.logger.log('[BUBBLE-MESSAGE] stored_preferred_lang: ', stored_preferred_lang);
71
-
72
68
 
73
69
  let chat_lang = ''
74
70
  if (this.browserLang && !stored_preferred_lang) {
@@ -81,15 +77,9 @@ export class BubbleMessageComponent implements OnInit, OnChanges {
81
77
  sameElse: 'LLLL'
82
78
  }
83
79
  });
84
- // this.translate.getTranslation(chat_lang).subscribe((labels: string) => {
85
- // console.log('[BUBBLE-MESSAGE] translations: ', labels);
86
- // });
87
80
  }
88
81
 
89
82
  ngOnChanges() {
90
- this.logger.log('BUBBLE-MSG Hello !!!! this.message ', this.message)
91
- this.logger.log('BUBBLE-MSG ngOnChanges areVisibleCAR', this.areVisibleCAR)
92
- this.logger.log('BUBBLE-MSG ngOnChanges supportMode', this.supportMode)
93
83
  if (this.message && this.message.metadata && typeof this.message.metadata === 'object') {
94
84
  this.getMetadataSize(this.message.metadata)
95
85
  }
@@ -76,7 +76,7 @@
76
76
 
77
77
 
78
78
  <ion-item button="true" lines="none" class="ion-no-padding" [class.ion-selected]="conversation?.uid === uidConvSelected"
79
- *ngFor="let conversation of listConversations" (click)="openConversationByID(conversation)" detail=false>
79
+ *ngFor="let conversation of listConversations; let index= index" (click)="openConversationByID(conversation)" detail=false>
80
80
  <div tabindex="0"></div>
81
81
 
82
82
  <!-- <div [class.selected]="conversation.uid === uidConvSelected"></div> -->
@@ -41,7 +41,7 @@ export class IonListConversationsComponent extends ListConversationsComponent im
41
41
  public alert_lbl: string;
42
42
  public actionNotAllowed_lbl: string;
43
43
  public youAreNoLongerAmongTheTeammatesManagingThisConversation_lbl: string;
44
- public ok_lbl: string;
44
+ public ok_lbl: string;
45
45
 
46
46
  tooltip_options = {
47
47
  'show-delay': 0,
@@ -119,35 +119,22 @@ public ok_lbl: string;
119
119
 
120
120
 
121
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
- });
122
+ const translationKeys = [
123
+ 'Resolve',
124
+ 'Archive',
125
+ 'ALERT_TITLE',
126
+ 'ActionNotAllowed',
127
+ 'CLOSE_ALERT_CONFIRM_LABEL',
128
+ 'YouAreNoLongerAmongTheTeammatesManagingThisConversation'
129
+ ]
130
+ this.translate.get(['Resolve', 'Archive', 'ALERT_TITLE']).subscribe((translations: string) => {
131
+ this.resolve_btn_tooltip = translations['Resolve'];
132
+ this.archive_btn_tooltip = translations['Archive'];
133
+ this.alert_lbl = translations['ALERT_TITLE']
134
+ this.actionNotAllowed_lbl = translations['ActionNotAllowed']
135
+ this.ok_lbl = translations['CLOSE_ALERT_CONFIRM_LABEL']
136
+ this.youAreNoLongerAmongTheTeammatesManagingThisConversation_lbl = translations['YouAreNoLongerAmongTheTeammatesManagingThisConversation']
137
+ });
151
138
  }
152
139
 
153
140
  setMomentLocale() {
@@ -227,6 +214,7 @@ public ok_lbl: string;
227
214
  var conversationId = conversation.uid;
228
215
  this.logger.log('[ION-LIST-CONVS-COMP] - closeConversation - conversationId ', conversationId)
229
216
  this.onCloseConversation.emit(conversation)
217
+ let currentIndex = this.listConversations.findIndex(conv => conv.uid === conversation.uid)
230
218
  }
231
219
 
232
220
 
@@ -1,5 +1,5 @@
1
1
  <ion-header no-border class="ion-no-border">
2
- <ion-toolbar style="height:60px">
2
+ <ion-toolbar>
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()">
@@ -25,6 +25,8 @@ ion-header {
25
25
  }
26
26
  ion-title {
27
27
  text-align: left;
28
+ padding-inline: unset;
29
+ margin: 0px 10px;
28
30
  height: 40px;
29
31
  width: 100%;
30
32
  }
@@ -1,3 +1,4 @@
1
+ import { EventsService } from './../../services/events-service';
1
2
  import { Component, EventEmitter, HostListener, OnInit, Output } from '@angular/core';
2
3
  import { WebsocketService } from 'src/app/services/websocket/websocket.service';
3
4
  import { Subject } from 'rxjs';
@@ -53,6 +54,7 @@ export class ProjectItemComponent implements OnInit {
53
54
  public tiledeskService: TiledeskService,
54
55
  public webSocketJs: WebSocketJs,
55
56
  private appConfigProvider: AppConfigProvider,
57
+ public events: EventsService
56
58
  ) { }
57
59
 
58
60
  ngOnInit() {
@@ -209,10 +211,13 @@ export class ProjectItemComponent implements OnInit {
209
211
  this.logger.log('[PROJECT-ITEM] - LAST PROJECT PARSED ', this.project)
210
212
  }
211
213
 
214
+
215
+
212
216
 
213
217
  }
214
218
 
215
219
  doProjectSubscriptions(project) {
220
+ this.events.publish('storage:last_project', project)
216
221
  this.logger.log('[PROJECT-ITEM] doProjectSubscriptions project ', project)
217
222
  if (project) {
218
223
  const user_role = this.project.role
@@ -83,21 +83,14 @@ export class SidebarComponent implements OnInit {
83
83
 
84
84
 
85
85
  getStoredProjectAndUserRole() {
86
- const stored_project = localStorage.getItem('last_project')
87
- this.logger.log('[SIDEBAR] stored_project ', stored_project)
88
- if (stored_project && stored_project !== 'undefined') {
89
- const project = JSON.parse(stored_project)
90
- this.logger.log('[SIDEBAR] project ', project)
91
-
92
- this.project_id = project.id_project.id
93
- this.logger.log('[SIDEBAR] project_id ', this.project_id)
94
-
95
- this.USER_ROLE = project.role;
96
- this.logger.log('[SIDEBAR] USER_ROLE ', this.USER_ROLE)
97
- this.buildURLs(this.USER_ROLE)
98
- } else {
99
- this.logger.error('[SIDEBAR] stored_project not found in storage', stored_project)
100
- }
86
+ this.events.subscribe('storage:last_project',project =>{
87
+ this.logger.log('[SIDEBAR] stored_project ', project)
88
+ if (project && project !== 'undefined') {
89
+ this.project_id = project.id_project.id
90
+ this.USER_ROLE = project.role;
91
+ this.buildURLs(this.USER_ROLE)
92
+ }
93
+ })
101
94
  }
102
95
 
103
96
  buildURLs(USER_ROLE) {
@@ -25,9 +25,9 @@
25
25
  onerror="this.src='assets/images/no_image_user.png'" />
26
26
 
27
27
  <div *ngIf="!USER_PHOTO_PROFILE_EXIST" class="user-img-in-sidebar-user-details"
28
- [ngStyle]="{'background': 'linear-gradient(rgb(255,255,255) -125%,' + user?.fillColour + ')'}">
28
+ [ngStyle]="{'background': 'linear-gradient(rgb(255,255,255) -125%,' + user?.color + ')'}">
29
29
  <span id="sidebaravatar-altenative-user-avatar" class="sidebar-user-details-altenative-user-avatar">
30
- {{ user?.fullname_initial }}
30
+ {{ user?.avatar }}
31
31
  </span>
32
32
  </div>
33
33
 
@@ -36,9 +36,7 @@
36
36
  <div class="user-details-user-isbusy" *ngIf="IS_BUSY === true" style="cursor:pointer"
37
37
  matTooltipClass="custom-mat-tooltip" matTooltip="{{IS_BUSY_msg}}" #tooltip="matTooltip"
38
38
  matTooltipPosition='right' matTooltipHideDelay="100">
39
- <span class="material-icons user-details-user-isbusy-icon">
40
- access_time
41
- </span>
39
+ <span class="material-icons user-details-user-isbusy-icon">access_time</span>
42
40
  </div>
43
41
 
44
42
 
@@ -78,22 +76,20 @@
78
76
  <hr class="first-divider">
79
77
 
80
78
  <section *ngIf="isVisiblePAY" class="user-details-plan-info">
81
- <span class="material-icons user-details-plan-icon">
82
- apps
83
- </span>
79
+ <span class="material-icons user-details-plan-icon">apps</span>
84
80
  <span>
85
- <div> {{prjct_name}} </div>
81
+ <div> {{project?.name}} </div>
86
82
  <div style="display: inline-block; margin-left: 26px;"> {{ profile_name_translated }} </div>
87
83
 
88
- <div *ngIf="plan_type === 'payment' && plan_subscription_is_active === false"
89
- style="color:#f44336; position:relative; top: -1px;;display: inline-block;">
90
- <i *ngIf="plan_name !== 'enterprise'" class="material-icons" style="vertical-align: middle; color:#f44336; cursor:pointer;
84
+ <div *ngIf="project?.type === 'payment' && project?.isActiveSubscription === false"
85
+ style="color:#f44336; position:relative; top: -1px;display: inline-block;">
86
+ <i *ngIf="project?.plan_name !== 'enterprise'" class="material-icons" style="vertical-align: middle; color:#f44336; cursor:pointer;
91
87
  font-size: 16px;" matTooltipClass="custom-mat-tooltip"
92
88
  matTooltip="{{ SUBSCRIPTION_PAYMENT_PROBLEM_msg }}" #tooltip="matTooltip" matTooltipPosition='right'
93
89
  matTooltipHideDelay="100">
94
90
  error_outline
95
91
  </i>
96
- <i *ngIf="plan_name === 'enterprise'" class="material-icons" style="vertical-align: middle; color:#f44336; cursor:pointer;
92
+ <i *ngIf="project?.plan_name === 'enterprise'" class="material-icons" style="vertical-align: middle; color:#f44336; cursor:pointer;
97
93
  font-size: 16px;" matTooltipClass="custom-mat-tooltip" matTooltip="{{ THE_PLAN_HAS_EXPIRED_msg }}"
98
94
  #tooltip="matTooltip" matTooltipPosition='right' matTooltipHideDelay="100">
99
95
  error_outline
@@ -103,12 +99,8 @@
103
99
  </section>
104
100
 
105
101
  <section class="user-details-help-center">
106
- <span class="material-icons user-details-help-center-icon">
107
- support
108
- </span>
109
- <span class="user-details-help-center" (click)="goToHelpCenter()">
110
- Help center
111
- </span>
102
+ <span class="material-icons user-details-help-center-icon">support</span>
103
+ <span class="user-details-help-center" (click)="goToHelpCenter()"> Help center</span>
112
104
  </section>
113
105
 
114
106
  <!-- <hr class="second-divider" style="margin-top: 20px;border: 0;
@@ -128,10 +120,7 @@
128
120
  </section>
129
121
 
130
122
  <section class="user-details-footer-chat-version">
131
- <div class="chat-version">
132
- <!-- &copy; {{test | date: 'yyyy'}} {{company_name}} ver {{version}} -->
133
- ver {{version}}
134
- </div>
123
+ <div class="chat-version"> ver {{version}}</div>
135
124
  </section>
136
125
 
137
126
  </div>
@@ -280,6 +280,9 @@ button.user-details-btn-close {
280
280
  font-size: 20px;
281
281
  vertical-align: middle;
282
282
  margin-right: 3px;
283
+ svg{
284
+ fill: #a9afbb
285
+ }
283
286
  }
284
287
 
285
288
  .user-details-help-center {