@chat21/chat21-ionic 3.0.59-rc4 → 3.0.59

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 (63) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/README.md +5 -0
  3. package/config.xml +2 -2
  4. package/env.sample +3 -1
  5. package/package.json +1 -1
  6. package/resources/Android/splash/drawable-land-hdpi-screen.png +0 -0
  7. package/resources/Android/splash/drawable-land-ldpi-screen.png +0 -0
  8. package/resources/Android/splash/drawable-land-mdpi-screen.png +0 -0
  9. package/resources/Android/splash/drawable-land-xhdpi-screen.png +0 -0
  10. package/resources/Android/splash/drawable-land-xxhdpi-screen.png +0 -0
  11. package/resources/Android/splash/drawable-land-xxxhdpi-screen.png +0 -0
  12. package/resources/Android/splash/drawable-port-hdpi-screen.png +0 -0
  13. package/resources/Android/splash/drawable-port-ldpi-screen.png +0 -0
  14. package/resources/Android/splash/drawable-port-mdpi-screen.png +0 -0
  15. package/resources/Android/splash/drawable-port-xhdpi-screen.png +0 -0
  16. package/resources/Android/splash/drawable-port-xxhdpi-screen.png +0 -0
  17. package/resources/Android/splash/drawable-port-xxxhdpi-screen.png +0 -0
  18. package/resources/Android/splash.png +0 -0
  19. package/src/app/app.component.scss +10 -5
  20. package/src/app/app.component.ts +393 -234
  21. package/src/app/app.module.ts +12 -7
  22. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.html +1 -1
  23. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +7 -6
  24. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +2 -1
  25. package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.html +1 -1
  26. package/src/app/components/authentication/login/login.component.html +8 -8
  27. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +2 -4
  28. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +7 -2
  29. package/src/app/components/ddp-header/ddp-header.component.html +1 -1
  30. package/src/app/components/ddp-header/ddp-header.component.ts +4 -2
  31. package/src/app/components/project-item/project-item.component.html +61 -16
  32. package/src/app/components/project-item/project-item.component.scss +165 -38
  33. package/src/app/components/project-item/project-item.component.ts +58 -36
  34. package/src/app/pages/authentication/login/login.page.html +1 -2
  35. package/src/app/pages/conversation-detail/conversation-detail.page.ts +2 -0
  36. package/src/app/pages/conversations-list/conversations-list.page.html +12 -7
  37. package/src/app/pages/conversations-list/conversations-list.page.scss +279 -261
  38. package/src/app/pages/conversations-list/conversations-list.page.ts +149 -17
  39. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +10 -2
  40. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +79 -0
  41. package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +47 -36
  42. package/src/app/services/app-config.ts +77 -5
  43. package/src/app/services/websocket/websocket-js.ts +12 -14
  44. package/src/app/services/websocket/websocket.service.ts +26 -8
  45. package/src/assets/i18n/en.json +2 -1
  46. package/src/assets/i18n/it.json +2 -1
  47. package/src/assets/js/chat21client.js +144 -82
  48. package/src/assets/logo.png +0 -0
  49. package/src/assets/transparent.png +0 -0
  50. package/src/chat-config-pre-test.json +3 -1
  51. package/src/chat-config-template.json +4 -1
  52. package/src/chat-config.json +4 -1
  53. package/src/chat21-core/providers/firebase/firebase-archivedconversations-handler.ts +1 -1
  54. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +1 -1
  55. package/src/chat21-core/providers/firebase/firebase-notifications.ts +31 -23
  56. package/src/chat21-core/providers/mqtt/mqtt-auth-service.ts +27 -27
  57. package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +3 -5
  58. package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +13 -5
  59. package/src/chat21-core/providers/mqtt/mqtt-notifications.ts +101 -11
  60. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +12 -3
  61. package/src/chat21-core/utils/utils-message.ts +2 -2
  62. package/src/firebase-messaging-sw-template.js +1 -1
  63. package/src/assets/images/tiledesk_logo_50x50.png +0 -0
@@ -103,7 +103,7 @@ export function createTranslateLoader(http: HttpClient) {
103
103
 
104
104
  }
105
105
 
106
- export function authenticationFactory(http: HttpClient, appConfig: AppConfigProvider, chat21Service: Chat21Service, appSorage: AppStorageService, network: Network, connectionService:ConnectionService) {
106
+ export function authenticationFactory(http: HttpClient, appConfig: AppConfigProvider, chat21Service: Chat21Service, appSorage: AppStorageService, network: Network, connectionService: ConnectionService) {
107
107
  const config = appConfig.getConfig()
108
108
  if (config.chatEngine === CHAT_ENGINE_MQTT) {
109
109
 
@@ -112,8 +112,13 @@ export function authenticationFactory(http: HttpClient, appConfig: AppConfigProv
112
112
 
113
113
  const auth = new MQTTAuthService(http, chat21Service, appSorage);
114
114
 
115
- auth.setBaseUrl(appConfig.getConfig().apiUrl)
116
-
115
+ auth.setBaseUrl(appConfig.getConfig().apiUrl);
116
+
117
+ if (config.pushEngine = PUSH_ENGINE_MQTT) {
118
+ // FOR PUSH NOTIFICATIONS INIT FIREBASE APP
119
+ FirebaseInitService.initFirebase(config.firebaseConfig);
120
+ }
121
+
117
122
  return auth
118
123
  } else {
119
124
 
@@ -121,7 +126,7 @@ export function authenticationFactory(http: HttpClient, appConfig: AppConfigProv
121
126
  // console.log('[APP-MOD] FirebaseInitService config ', config)
122
127
  const auth = new FirebaseAuthService(http, network, connectionService);
123
128
  auth.setBaseUrl(config.apiUrl)
124
-
129
+
125
130
  return auth
126
131
  }
127
132
  }
@@ -217,12 +222,12 @@ export function uploadFactory(http: HttpClient, appConfig: AppConfigProvider, ap
217
222
  }
218
223
  }
219
224
 
220
- export function notificationsServiceFactory(appConfig: AppConfigProvider) {
225
+ export function notificationsServiceFactory(appConfig: AppConfigProvider, chat21Service: Chat21Service) {
221
226
  const config = appConfig.getConfig()
222
227
  if (config.pushEngine === PUSH_ENGINE_FIREBASE) {
223
228
  return new FirebaseNotifications();
224
229
  } else if (config.pushEngine === PUSH_ENGINE_MQTT) {
225
- return new MQTTNotifications();
230
+ return new MQTTNotifications(chat21Service);
226
231
  } else {
227
232
  return;
228
233
  }
@@ -340,7 +345,7 @@ const appInitializerFn = (appConfig: AppConfigProvider, logger: NGXLogger) => {
340
345
  {
341
346
  provide: NotificationsService,
342
347
  useFactory: notificationsServiceFactory,
343
- deps: [AppConfigProvider]
348
+ deps: [AppConfigProvider, Chat21Service]
344
349
  },
345
350
  {
346
351
  provide: AppStorageService,
@@ -10,7 +10,7 @@
10
10
  <div class="chat21-bounce1" [ngStyle]="{'background-color': stylesMap.get('themeColor')}"></div>
11
11
  <div class="chat21-bounce2" [ngStyle]="{'background-color': stylesMap.get('themeColor')}"></div>
12
12
  <div class="chat21-bounce3" [ngStyle]="{'background-color': stylesMap.get('themeColor')}"></div>
13
- <span>{{translationMap.get('LABEL_LOADING')}}</span>
13
+ <span>{{translationMap?.get('LABEL_LOADING')}}</span>
14
14
  </div>
15
15
  </span>
16
16
 
@@ -74,6 +74,7 @@
74
74
  </ion-item-options>
75
75
  </ion-item-sliding> -->
76
76
 
77
+
77
78
  <ion-item button="true" lines="none" class="ion-no-padding" [class.ion-selected]="conversation.uid === uidConvSelected"
78
79
  *ngFor="let conversation of listConversations" (click)="openConversationByID(conversation)" detail=false>
79
80
  <div tabindex="0"></div>
@@ -117,7 +118,8 @@
117
118
  <ion-note *ngIf="!conversation.archived" class="conversation_time">{{conversation.timestamp | amTimeAgo}}</ion-note>
118
119
 
119
120
  <ion-buttons slot="end">
120
- <ion-button *ngIf="!conversation.archived" [ngClass]="{'hide': !isApp, 'button-on-desktop': !isApp, 'button-on-mobile': isApp }"
121
+ <ion-button *ngIf="!conversation.archived"
122
+ [ngClass]="{'hide': !isApp, 'button-on-desktop': !isApp, 'button-on-mobile': isApp }"
121
123
  id="{{ 'close_conversation_button' + conversation.uid }}" class="close-conversation-button" ion-button clear
122
124
  item-end (click)="closeConversation(conversation);$event.stopPropagation();" padding>
123
125
  <ion-icon slot="icon-only" style="display:block;" id="{{ 'close_button_icon' + conversation.uid }}"
@@ -132,21 +134,20 @@
132
134
 
133
135
  <div item-end *ngIf="conversation?.archived" class="achived-icon-wpr">
134
136
  <span *ngIf="(conversation.timestamp | amDateFormat:'YYYY') === currentYear" class="time-in-archived">
135
- {{browserLang === 'it' ? (conversation.timestamp| amDateFormat:'DD MMM') : (conversation.timestamp |
136
- amDateFormat:'MMM DD')}}
137
+ {{browserLang === 'en' ? (conversation.timestamp | amDateFormat:'MMM DD') : (conversation.timestamp| amDateFormat:'DD MMM')}}
137
138
 
138
139
  <!-- {{conversation.timestamp | amDateFormat:'DD MMM'}} -->
139
140
  </span>
140
141
  <span *ngIf="(conversation.timestamp | amDateFormat:'YYYY') !== currentYear" class="time-in-archived">
141
- {{browserLang === 'it' ? (conversation.timestamp| amDateFormat:'DD MMM') : (conversation.timestamp |
142
- amDateFormat:'MMM DD YYYY')}}
142
+ {{browserLang === 'en' ? (conversation.timestamp | amDateFormat:'MMM DD YYYY') : (conversation.timestamp| amDateFormat:'DD MMM YYYY') }}
143
143
  <!-- {{conversation.timestamp | amDateFormat:'DD MMM YYYY'}} -->
144
144
  </span>
145
145
  <i class="material-icons" item-end style="font-size: 15px;font-weight: 400;color: #666666;"> history </i>
146
146
  </div>
147
147
 
148
148
  <!-- && !conversation?.archived -->
149
- <div item-end class="notification_point" [ngClass]="{'notification_point-on-desktop': !isApp, 'notification_point-on-mobile': isApp }"
149
+ <div item-end class="notification_point"
150
+ [ngClass]="{'notification_point-on-desktop': !isApp, 'notification_point-on-mobile': isApp }"
150
151
  *ngIf="conversation.is_new">
151
152
  </div>
152
153
 
@@ -78,9 +78,10 @@ export class IonListConversationsComponent extends ListConversationsComponent im
78
78
  this.isApp = this.platform.is('ios') || this.platform.is('android')
79
79
  this.logger.log('[ION-LIST-CONVS-COMP] - ngOnInit - IS-APP ', this.isApp)
80
80
  this.logger.log('[ION-LIST-CONVS-COMP] - ngOnInit - Platform', this.platform.platforms());
81
-
82
81
  }
83
82
 
83
+
84
+
84
85
 
85
86
 
86
87
  // --------------------------------------------------
@@ -34,7 +34,7 @@
34
34
  width="24px" height="24px" viewBox="0 0 24 24">
35
35
  <path fill="none" d="M0 0h24v24H0z"/>
36
36
  <path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"/>
37
- <title id="altIconTitle">{{ translationMap.get('CLOSED') }}</title>
37
+ <title id="altIconTitle">{{ translationMap?.get('CLOSED') }}</title>
38
38
  </svg>
39
39
  </button>
40
40
  </div>
@@ -8,25 +8,25 @@
8
8
 
9
9
  <div class="signin-title" style="text-align:center">
10
10
  <h2 style="font-family: 'Montserrat', sans-serif; font-weight: 400;">
11
- {{ translationMap.get('LABEL_SIGNIN_TO') }}
11
+ {{ translationMap?.get('LABEL_SIGNIN_TO') }}
12
12
  {{companyName}}
13
13
  </h2>
14
14
  </div>
15
15
  <div class="login-container">
16
16
  <form [formGroup]="userForm" (ngSubmit)="signInWithEmailAndPassword()" novalidate>
17
17
 
18
- <ion-label stacked for="email">{{ translationMap.get('LABEL_EMAIL') }}</ion-label>
18
+ <ion-label stacked for="email">{{ translationMap?.get('LABEL_EMAIL') }}</ion-label>
19
19
  <ion-input #email formControlName="email" type="email" id="email" required autocapitalize="off" spellcheck="false"
20
- placeholder="{{ translationMap.get('LABEL_PLACEHOLDER_EMAIL') }}"
20
+ placeholder="{{ translationMap?.get('LABEL_PLACEHOLDER_EMAIL') }}"
21
21
  [class.invalid]="!userForm.controls.email.valid" ></ion-input>
22
22
  <div *ngIf="formErrors.email" class="is-danger">
23
23
  {{ formErrors.email }}
24
24
  </div>
25
25
 
26
26
 
27
- <ion-label stacked for="password">{{ translationMap.get('LABEL_PASSWORD') }}</ion-label>
27
+ <ion-label stacked for="password">{{ translationMap?.get('LABEL_PASSWORD') }}</ion-label>
28
28
  <ion-input #password formControlName="password" type="password" id="password" required
29
- placeholder="{{ translationMap.get('LABEL_PLACEHOLDER_PASSWORD') }}"
29
+ placeholder="{{ translationMap?.get('LABEL_PLACEHOLDER_PASSWORD') }}"
30
30
  [class.invalid]="!userForm.controls.password.valid"></ion-input>
31
31
 
32
32
  <div *ngIf="formErrors.password" class="is-danger">
@@ -36,7 +36,7 @@
36
36
 
37
37
  <button type="submit" class="btn signin-button ion-activatable ripple-parent" [ngClass]="{'signin-button-is-disabled': !userForm.valid}" [disabled]="!userForm.valid">
38
38
  <span class="signin-button-label" *ngIf="showSpinnerInLoginBtn === false" >
39
- {{ translationMap.get('LABEL_SIGNIN') }}
39
+ {{ translationMap?.get('LABEL_SIGNIN') }}
40
40
  </span>
41
41
  <ion-ripple-effect type="unbounded"></ion-ripple-effect>
42
42
  <ion-spinner *ngIf="showSpinnerInLoginBtn === true" name="bubbles" color="white" duration="2" ></ion-spinner>
@@ -50,9 +50,9 @@
50
50
  </p> -->
51
51
 
52
52
  <p style="color: #666666; font-size: 1.1em; text-align: center; margin-top: 16px;">
53
- {{ translationMap.get('LABEL_FORGOT_YOUR_PASSWORD') }}
53
+ {{ translationMap?.get('LABEL_FORGOT_YOUR_PASSWORD') }}
54
54
  <span style="color: #03a5e8; cursor:pointer" (click)="goToResetPsw()">
55
- {{ translationMap.get('LABEL_CLICK_HERE') }}
55
+ {{ translationMap?.get('LABEL_CLICK_HERE') }}
56
56
  </span>
57
57
  </p>
58
58
 
@@ -3,10 +3,8 @@
3
3
  <ion-toolbar>
4
4
 
5
5
  <ion-buttons slot="start">
6
- <!-- (click)="pushPage('conversations-list')" -->
7
- <ion-back-button text="" *ngIf="isMobile"
8
- defaultHref="/conversations-list"
9
- >
6
+ <!-- (click)="pushPage('conversations-list')" defaultHref="/conversations-list" -->
7
+ <ion-back-button style="display: block;" text="" *ngIf="isMobile" (click)="goBackToConversationList()">
10
8
  </ion-back-button>
11
9
  </ion-buttons>
12
10
 
@@ -1,5 +1,5 @@
1
1
  import { Component, OnInit, Input, Output, EventEmitter, OnChanges } from '@angular/core';
2
- import { ActivatedRoute } from '@angular/router';
2
+ import { ActivatedRoute, Router } from '@angular/router';
3
3
  import { ImageRepoService } from 'src/chat21-core/providers/abstract/image-repo.service';
4
4
 
5
5
  // Logger
@@ -43,7 +43,8 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
43
43
  constructor(
44
44
  public imageRepoService: ImageRepoService,
45
45
  private route: ActivatedRoute,
46
- public platform: Platform
46
+ public platform: Platform,
47
+ private router: Router
47
48
  ) {
48
49
  this.route.paramMap.subscribe(params => {
49
50
 
@@ -125,4 +126,8 @@ export class HeaderConversationDetailComponent implements OnInit, OnChanges {
125
126
  /** */
126
127
  pushPage(event) { }
127
128
 
129
+ goBackToConversationList() {
130
+ this.router.navigateByUrl('/conversations-list');
131
+ }
132
+
128
133
  }
@@ -14,7 +14,7 @@
14
14
 
15
15
  <ion-buttons slot="end">
16
16
 
17
- <ion-button *ngIf="!supportMode" ion-button fill="clear" (click)="onOpenContactsDirectory($event)">
17
+ <ion-button *ngIf="supportMode" ion-button fill="clear" (click)="onOpenContactsDirectory($event)">
18
18
  <ion-icon slot="icon-only" name="create-outline"></ion-icon>
19
19
  </ion-button>
20
20
 
@@ -7,14 +7,16 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
7
7
  })
8
8
  export class DdpHeaderComponent implements OnInit {
9
9
  @Input() numberOpenConv: number;
10
- @Input() supportMode = false;
10
+ @Input() supportMode: boolean;
11
11
  @Output() openContactsDirectory = new EventEmitter();
12
12
  @Output() openProfileInfo = new EventEmitter();
13
13
 
14
14
  constructor(
15
15
  ) { }
16
16
 
17
- ngOnInit() {}
17
+ ngOnInit() {
18
+ // console.log('DDP HEADER SUPPORT MODE ', this.supportMode)
19
+ }
18
20
 
19
21
  // START @Output() //
20
22
  /** */
@@ -15,7 +15,7 @@
15
15
  <div class="flex-child-left">
16
16
  <!-- padding:6px; background: rgb(31,107,192); -->
17
17
  <div class="unassigned-notifications-icon-wpr">
18
- <svg viewBox="0 0 28 28" alt="" class="a8c37x1j ms05siws hwsy1cff b7h9ocf4 fzdkajry" height="40"
18
+ <!-- <svg viewBox="0 0 28 28" alt="" class="a8c37x1j ms05siws hwsy1cff b7h9ocf4 fzdkajry" height="40"
19
19
  width="40"
20
20
  style="vertical-align: middle;border-radius: 50%;">
21
21
  <style type="text/css">
@@ -26,21 +26,40 @@
26
26
  <path class="notifications-icons"
27
27
  d="M7.847 23.488C9.207 23.488 11.443 23.363 14.467 22.806 13.944 24.228 12.581 25.247 10.98 25.247 9.649 25.247 8.483 24.542 7.825 23.488L7.847 23.488ZM24.923 15.73C25.17 17.002 24.278 18.127 22.27 19.076 21.17 19.595 18.724 20.583 14.684 21.369 11.568 21.974 9.285 22.113 7.848 22.113 7.421 22.113 7.068 22.101 6.79 22.085 4.574 21.958 3.324 21.248 3.077 19.976 2.702 18.049 3.295 17.305 4.278 16.073L4.537 15.748C5.2 14.907 5.459 14.081 5.035 11.902 4.086 7.022 6.284 3.687 11.064 2.753 15.846 1.83 19.134 4.096 20.083 8.977 20.506 11.156 21.056 11.824 21.986 12.355L21.986 12.356 22.348 12.561C23.72 13.335 24.548 13.802 24.923 15.73Z">
28
28
  </path>
29
+ </svg> -->
30
+
31
+ <!-- <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="bell"
32
+ class="svg-inline--fa fa-bell fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg"
33
+ viewBox="0 0 448 512" height="auto" width="24px">
34
+ <path fill="currentColor"
35
+ d="M439.39 362.29c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71zM67.53 368c21.22-27.97 44.42-74.33 44.53-159.42 0-.2-.06-.38-.06-.58 0-61.86 50.14-112 112-112s112 50.14 112 112c0 .2-.06.38-.06.58.11 85.1 23.31 131.46 44.53 159.42H67.53zM224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64z">
36
+ </path>
37
+ </svg> -->
38
+
39
+ <svg viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet" focusable="false"
40
+ class="style-scope yt-icon"
41
+ style="pointer-events: none; width: 37px; height:auto; fill: rgb(107,107,107);margin-left:4px">
42
+ <g class="style-scope yt-icon">
43
+ <path
44
+ d="M10,20h4c0,1.1-0.9,2-2,2S10,21.1,10,20z M20,17.35V19H4v-1.65l2-1.88v-5.15c0-2.92,1.56-5.22,4-5.98V3.96 c0-1.42,1.49-2.5,2.99-1.76C13.64,2.52,14,3.23,14,3.96l0,0.39c2.44,0.75,4,3.06,4,5.98v5.15L20,17.35z M19,17.77l-2-1.88v-5.47 c0-2.47-1.19-4.36-3.13-5.1c-1.26-0.53-2.64-0.5-3.84,0.03C8.15,6.11,7,7.99,7,10.42v5.47l-2,1.88V18h14V17.77z"
45
+ class="style-scope yt-icon"></path>
46
+ </g>
29
47
  </svg>
48
+
30
49
  </div>
31
50
  <div class="unassigned-notifications-badge">
32
51
  <!-- || currentUserRequestCount > 0 -->
33
52
  <!-- <span *ngIf="unservedRequestCount > 0 "> -->
34
- <!-- + currentUserRequestCount -->
35
- <span class="notification-count">{{ unservedRequestCount }}</span>
53
+ <!-- + currentUserRequestCount -->
54
+ <span class="notification-count">{{ unservedRequestCount }}</span>
36
55
  <!-- </span> -->
37
-
56
+
38
57
  </div>
39
58
 
40
59
  </div>
41
60
 
42
-
43
- <div class="flex-child-right" *ngIf="!window_width_is_60">
61
+
62
+ <div class="flex-child-right">
44
63
  <div class="project-name-project-for-panel">
45
64
  {{ project?.id_project?.name }}
46
65
  </div>
@@ -62,30 +81,56 @@
62
81
  </span>
63
82
  </div> -->
64
83
  <div class="availabily-and-busy-wpr">
65
- <div class="onoffswitch"
84
+ <!-- <div class="onoffswitch"
66
85
  (click)="$event.stopPropagation();changeAvailabilityState(project?.id_project?._id, project?.ws_projct_user_available)">
67
86
  <input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="myonoffswitch"
68
87
  tabindex="0" [checked]="project?.ws_projct_user_available">
69
88
  <label class="onoffswitch-label" for="myonoffswitch"></label>
89
+ </div> -->
90
+ <div class="availabily---wpr">
91
+ <!-- <div class="i_onoffswitch"
92
+ (click)="$event.stopPropagation();changeAvailabilityState(project?.id_project?._id, project?.ws_projct_user_available)">
93
+ <input type="checkbox" name="i_onoffswitch" class="i_onoffswitch-checkbox"
94
+ id="i_switch_availability" tabindex="0" [checked]="project?.ws_projct_user_available">
95
+ <label style="margin-bottom: 0px" class="i_onoffswitch-label" for="i_switch_availability"></label>
96
+ </div> -->
97
+
98
+
99
+ <div class="onoffswitch"
100
+ (click)="$event.stopPropagation();changeAvailabilityState(project?.id_project?._id, project?.ws_projct_user_available)">
101
+ <input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="myonoffswitch"
102
+ tabindex="0" [checked]="project?.ws_projct_user_available">
103
+ <label class="onoffswitch-label" for="myonoffswitch"></label>
104
+ </div>
70
105
  </div>
71
106
 
107
+ <!-- (click)="$event.stopPropagation();changeAvailabilityState(project?.id_project?._id, project?.ws_projct_user_available)" -->
72
108
  <span *ngIf="project?.ws_projct_user_available === true" class="availibility-status-text"
73
- [ngClass]="{'online-text-color' : project?.ws_projct_user_available === true, 'offline-text-color' : project?.ws_projct_user_available === false}"
74
- (click)="$event.stopPropagation();changeAvailabilityState(project?.id_project?._id, project?.ws_projct_user_available)">
75
- {{translationMap.get('Available') }}
109
+ [ngClass]="{'online-text-color' : project?.ws_projct_user_available === true, 'offline-text-color' : project?.ws_projct_user_available === false}">
110
+ {{translationMap?.get('Available') }}
76
111
  </span>
112
+ <!-- (click)="$event.stopPropagation();changeAvailabilityState(project?.id_project?._id, project?.ws_projct_user_available)" -->
77
113
  <span *ngIf="project?.ws_projct_user_available === false" class="availibility-status-text"
78
- [ngClass]="{'online-text-color' : project?.ws_projct_user_available === true, 'offline-text-color' : project?.ws_projct_user_available === false}"
79
- (click)="$event.stopPropagation();changeAvailabilityState(project?.id_project?._id, project?.ws_projct_user_available)">
80
- {{translationMap.get('Unavailable')}}
114
+ [ngClass]="{'online-text-color' : project?.ws_projct_user_available === true, 'offline-text-color' : project?.ws_projct_user_available === false}">
115
+ {{translationMap?.get('Unavailable')}}
81
116
  </span>
82
117
  <div class="project-item--isBusy-icon-wpr" *ngIf="project?.ws_projct_user_isBusy === true">
83
- <span class="material-icons project-item--isBusy-icon">
118
+ <!-- <span class="material-icons project-item--isBusy-icon">
84
119
  access_time
85
- </span>
120
+ </span> -->
121
+ <svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="16px"
122
+ viewBox="0 0 24 24" width="16px" fill="#FEB92C">
123
+ <g>
124
+ <path d="M0,0h24v24H0V0z" fill="none" />
125
+ </g>
126
+ <g>
127
+ <path
128
+ d="M11.99,2C6.47,2,2,6.48,2,12s4.47,10,9.99,10C17.52,22,22,17.52,22,12S17.52,2,11.99,2z M15.29,16.71L11,12.41V7h2v4.59 l3.71,3.71L15.29,16.71z" />
129
+ </g>
130
+ </svg>
86
131
  </div>
87
132
  <span *ngIf="project?.ws_projct_user_isBusy === true" class="project-item--isBusy-busy-text text-pulse-animation">
88
- {{translationMap.get('Busy')}}
133
+ {{translationMap?.get('Busy')}}
89
134
  </span>
90
135
  </div>
91
136