@chat21/chat21-ionic 3.0.59-rc2 → 3.0.59-rc21
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.
- package/CHANGELOG.md +72 -1
- package/README.md +5 -0
- package/config.xml +2 -2
- package/env.sample +3 -1
- package/package.json +1 -1
- package/resources/Android/splash/drawable-land-hdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-land-ldpi-screen.png +0 -0
- package/resources/Android/splash/drawable-land-mdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-land-xhdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-land-xxhdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-land-xxxhdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-port-hdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-port-ldpi-screen.png +0 -0
- package/resources/Android/splash/drawable-port-mdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-port-xhdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-port-xxhdpi-screen.png +0 -0
- package/resources/Android/splash/drawable-port-xxxhdpi-screen.png +0 -0
- package/resources/Android/splash.png +0 -0
- package/src/app/app-routing.module.ts +21 -17
- package/src/app/app.component.scss +10 -5
- package/src/app/app.component.ts +339 -65
- package/src/app/app.module.ts +16 -8
- package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.html +1 -1
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +20 -8
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +0 -144
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +14 -17
- package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.html +1 -1
- package/src/app/components/authentication/login/login.component.html +10 -10
- package/src/app/components/authentication/login/login.component.ts +2 -1
- package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.ts +1 -1
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +2 -4
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +7 -2
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +20 -15
- package/src/app/components/ddp-header/ddp-header.component.html +1 -1
- package/src/app/components/ddp-header/ddp-header.component.ts +4 -2
- package/src/app/components/project-item/project-item.component.html +147 -0
- package/src/app/components/project-item/project-item.component.scss +669 -0
- package/src/app/components/project-item/project-item.component.spec.ts +24 -0
- package/src/app/components/project-item/project-item.component.ts +317 -0
- package/src/app/components/utils/avatar-profile/avatar-profile.component.html +9 -3
- package/src/app/pages/authentication/login/login.page.html +1 -2
- package/src/app/pages/authentication/login/login.page.ts +1 -1
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +26 -22
- package/src/app/pages/conversations-list/conversations-list.page.html +45 -23
- package/src/app/pages/conversations-list/conversations-list.page.scss +290 -127
- package/src/app/pages/conversations-list/conversations-list.page.ts +189 -17
- package/src/app/pages/unassigned-conversations/unassigned-conversations-routing.module.ts +17 -0
- package/src/app/pages/unassigned-conversations/unassigned-conversations.module.ts +22 -0
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +22 -0
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +79 -0
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.spec.ts +24 -0
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +108 -0
- package/src/app/services/app-config.ts +77 -5
- package/src/app/services/tiledesk/tiledesk.service.ts +22 -1
- package/src/app/services/websocket/websocket-js.ts +557 -0
- package/src/app/services/websocket/websocket.service.spec.ts +12 -0
- package/src/app/services/websocket/websocket.service.ts +274 -0
- package/src/app/shared/shared.module.ts +3 -0
- package/src/assets/i18n/en.json +9 -1
- package/src/assets/i18n/it.json +9 -1
- package/src/assets/js/chat21client.js +144 -82
- package/src/assets/logo.png +0 -0
- package/src/assets/transparent.png +0 -0
- package/src/chat-config-pre-test.json +3 -1
- package/src/chat-config-template.json +4 -1
- package/src/chat-config.json +4 -1
- package/src/chat21-core/providers/firebase/firebase-auth-service.ts +2 -2
- package/src/chat21-core/providers/firebase/firebase-notifications.ts +31 -23
- package/src/chat21-core/providers/mqtt/mqtt-auth-service.ts +27 -27
- package/src/chat21-core/providers/mqtt/mqtt-conversation-handler.ts +3 -5
- package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +13 -5
- package/src/chat21-core/providers/mqtt/mqtt-notifications.ts +101 -11
- package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +13 -4
- package/src/chat21-core/utils/utils-message.ts +2 -2
- package/src/firebase-messaging-sw-template.js +1 -1
- package/src/assets/images/tiledesk_logo_50x50.png +0 -0
package/src/app/app.module.ts
CHANGED
|
@@ -94,7 +94,8 @@ import { TooltipModule } from 'ng2-tooltip-directive';
|
|
|
94
94
|
import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
|
|
95
95
|
import { Network } from '@ionic-native/network/ngx';
|
|
96
96
|
import { ConnectionService } from 'ng-connection-service';
|
|
97
|
-
|
|
97
|
+
import { WebSocketJs } from './services/websocket/websocket-js';
|
|
98
|
+
import { UnassignedConversationsPageModule } from './pages/unassigned-conversations/unassigned-conversations.module';
|
|
98
99
|
|
|
99
100
|
// FACTORIES
|
|
100
101
|
export function createTranslateLoader(http: HttpClient) {
|
|
@@ -102,7 +103,7 @@ export function createTranslateLoader(http: HttpClient) {
|
|
|
102
103
|
|
|
103
104
|
}
|
|
104
105
|
|
|
105
|
-
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) {
|
|
106
107
|
const config = appConfig.getConfig()
|
|
107
108
|
if (config.chatEngine === CHAT_ENGINE_MQTT) {
|
|
108
109
|
|
|
@@ -111,8 +112,13 @@ export function authenticationFactory(http: HttpClient, appConfig: AppConfigProv
|
|
|
111
112
|
|
|
112
113
|
const auth = new MQTTAuthService(http, chat21Service, appSorage);
|
|
113
114
|
|
|
114
|
-
auth.setBaseUrl(appConfig.getConfig().apiUrl)
|
|
115
|
-
|
|
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
|
+
|
|
116
122
|
return auth
|
|
117
123
|
} else {
|
|
118
124
|
|
|
@@ -120,7 +126,7 @@ export function authenticationFactory(http: HttpClient, appConfig: AppConfigProv
|
|
|
120
126
|
// console.log('[APP-MOD] FirebaseInitService config ', config)
|
|
121
127
|
const auth = new FirebaseAuthService(http, network, connectionService);
|
|
122
128
|
auth.setBaseUrl(config.apiUrl)
|
|
123
|
-
|
|
129
|
+
|
|
124
130
|
return auth
|
|
125
131
|
}
|
|
126
132
|
}
|
|
@@ -216,12 +222,12 @@ export function uploadFactory(http: HttpClient, appConfig: AppConfigProvider, ap
|
|
|
216
222
|
}
|
|
217
223
|
}
|
|
218
224
|
|
|
219
|
-
export function notificationsServiceFactory(appConfig: AppConfigProvider) {
|
|
225
|
+
export function notificationsServiceFactory(appConfig: AppConfigProvider, chat21Service: Chat21Service) {
|
|
220
226
|
const config = appConfig.getConfig()
|
|
221
227
|
if (config.pushEngine === PUSH_ENGINE_FIREBASE) {
|
|
222
228
|
return new FirebaseNotifications();
|
|
223
229
|
} else if (config.pushEngine === PUSH_ENGINE_MQTT) {
|
|
224
|
-
return new MQTTNotifications();
|
|
230
|
+
return new MQTTNotifications(chat21Service);
|
|
225
231
|
} else {
|
|
226
232
|
return;
|
|
227
233
|
}
|
|
@@ -253,6 +259,7 @@ const appInitializerFn = (appConfig: AppConfigProvider, logger: NGXLogger) => {
|
|
|
253
259
|
LoginPageModule,
|
|
254
260
|
ConversationListPageModule,
|
|
255
261
|
ConversationDetailPageModule,
|
|
262
|
+
UnassignedConversationsPageModule,
|
|
256
263
|
TranslateModule.forRoot({
|
|
257
264
|
loader: {
|
|
258
265
|
provide: TranslateLoader,
|
|
@@ -338,7 +345,7 @@ const appInitializerFn = (appConfig: AppConfigProvider, logger: NGXLogger) => {
|
|
|
338
345
|
{
|
|
339
346
|
provide: NotificationsService,
|
|
340
347
|
useFactory: notificationsServiceFactory,
|
|
341
|
-
deps: [AppConfigProvider]
|
|
348
|
+
deps: [AppConfigProvider, Chat21Service]
|
|
342
349
|
},
|
|
343
350
|
{
|
|
344
351
|
provide: AppStorageService,
|
|
@@ -352,6 +359,7 @@ const appInitializerFn = (appConfig: AppConfigProvider, logger: NGXLogger) => {
|
|
|
352
359
|
EventsService,
|
|
353
360
|
Chooser,
|
|
354
361
|
Chat21Service,
|
|
362
|
+
WebSocketJs
|
|
355
363
|
]
|
|
356
364
|
})
|
|
357
365
|
export class AppModule { }
|
package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.html
CHANGED
|
@@ -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
|
|
13
|
+
<span>{{translationMap?.get('LABEL_LOADING')}}</span>
|
|
14
14
|
</div>
|
|
15
15
|
</span>
|
|
16
16
|
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
<!-- -------------------------------------------------------------------------- -->
|
|
26
26
|
<!-- New <ion-spinner class="spinner-middle" style="margin-left: 19px;"></ion-spinner> -->
|
|
27
27
|
<!-- -------------------------------------------------------------------------- -->
|
|
28
|
-
<ion-item *ngIf="isOnline === false" button="true" lines="none" class="ion-no-padding waiting-for-connection">
|
|
28
|
+
<!-- <ion-item *ngIf="isOnline === false" button="true" lines="none" class="ion-no-padding waiting-for-connection">
|
|
29
|
+
<div tabindex="0"></div>
|
|
29
30
|
<ion-avatar item-start>
|
|
30
31
|
<div class="sk-fading-circle">
|
|
31
32
|
<div class="sk-circle1 sk-circle"></div>
|
|
@@ -43,7 +44,17 @@
|
|
|
43
44
|
</div>
|
|
44
45
|
</ion-avatar>
|
|
45
46
|
<ion-label part="message-text" class="waiting-for-network-msg"> Waiting for network</ion-label>
|
|
46
|
-
</ion-item>
|
|
47
|
+
</ion-item> -->
|
|
48
|
+
|
|
49
|
+
<!-- <ion-item>
|
|
50
|
+
<div tabindex="0"></div>
|
|
51
|
+
<iframe loading="lazy" width="100%" height="70px" style="border: unset;" [src]="PROJECT_FOR_PANEL"></iframe>
|
|
52
|
+
</ion-item> -->
|
|
53
|
+
<!-- <ion-item button="true" (click)="openUnsevedConversationIframe()">
|
|
54
|
+
<app-project-item
|
|
55
|
+
(projectIdEvent)="getLastProjectId($event)"></app-project-item>
|
|
56
|
+
</ion-item> -->
|
|
57
|
+
|
|
47
58
|
|
|
48
59
|
<!-- <ion-item-sliding disabled>
|
|
49
60
|
<ion-item>
|
|
@@ -63,6 +74,7 @@
|
|
|
63
74
|
</ion-item-options>
|
|
64
75
|
</ion-item-sliding> -->
|
|
65
76
|
|
|
77
|
+
|
|
66
78
|
<ion-item button="true" lines="none" class="ion-no-padding" [class.ion-selected]="conversation.uid === uidConvSelected"
|
|
67
79
|
*ngFor="let conversation of listConversations" (click)="openConversationByID(conversation)" detail=false>
|
|
68
80
|
<div tabindex="0"></div>
|
|
@@ -106,7 +118,8 @@
|
|
|
106
118
|
<ion-note *ngIf="!conversation.archived" class="conversation_time">{{conversation.timestamp | amTimeAgo}}</ion-note>
|
|
107
119
|
|
|
108
120
|
<ion-buttons slot="end">
|
|
109
|
-
<ion-button *ngIf="!conversation.archived"
|
|
121
|
+
<ion-button *ngIf="!conversation.archived"
|
|
122
|
+
[ngClass]="{'hide': !isApp, 'button-on-desktop': !isApp, 'button-on-mobile': isApp }"
|
|
110
123
|
id="{{ 'close_conversation_button' + conversation.uid }}" class="close-conversation-button" ion-button clear
|
|
111
124
|
item-end (click)="closeConversation(conversation);$event.stopPropagation();" padding>
|
|
112
125
|
<ion-icon slot="icon-only" style="display:block;" id="{{ 'close_button_icon' + conversation.uid }}"
|
|
@@ -121,21 +134,20 @@
|
|
|
121
134
|
|
|
122
135
|
<div item-end *ngIf="conversation?.archived" class="achived-icon-wpr">
|
|
123
136
|
<span *ngIf="(conversation.timestamp | amDateFormat:'YYYY') === currentYear" class="time-in-archived">
|
|
124
|
-
{{browserLang === '
|
|
125
|
-
amDateFormat:'MMM DD')}}
|
|
137
|
+
{{browserLang === 'en' ? (conversation.timestamp | amDateFormat:'MMM DD') : (conversation.timestamp| amDateFormat:'DD MMM')}}
|
|
126
138
|
|
|
127
139
|
<!-- {{conversation.timestamp | amDateFormat:'DD MMM'}} -->
|
|
128
140
|
</span>
|
|
129
141
|
<span *ngIf="(conversation.timestamp | amDateFormat:'YYYY') !== currentYear" class="time-in-archived">
|
|
130
|
-
{{browserLang === '
|
|
131
|
-
amDateFormat:'MMM DD YYYY')}}
|
|
142
|
+
{{browserLang === 'en' ? (conversation.timestamp | amDateFormat:'MMM DD YYYY') : (conversation.timestamp| amDateFormat:'DD MMM YYYY') }}
|
|
132
143
|
<!-- {{conversation.timestamp | amDateFormat:'DD MMM YYYY'}} -->
|
|
133
144
|
</span>
|
|
134
145
|
<i class="material-icons" item-end style="font-size: 15px;font-weight: 400;color: #666666;"> history </i>
|
|
135
146
|
</div>
|
|
136
147
|
|
|
137
148
|
<!-- && !conversation?.archived -->
|
|
138
|
-
<div item-end class="notification_point"
|
|
149
|
+
<div item-end class="notification_point"
|
|
150
|
+
[ngClass]="{'notification_point-on-desktop': !isApp, 'notification_point-on-mobile': isApp }"
|
|
139
151
|
*ngIf="conversation.is_new">
|
|
140
152
|
</div>
|
|
141
153
|
|
|
@@ -220,147 +220,3 @@ ion-item:hover {
|
|
|
220
220
|
}
|
|
221
221
|
|
|
222
222
|
|
|
223
|
-
.waiting-for-connection {
|
|
224
|
-
--background: #fdd764;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// -------------------------------
|
|
228
|
-
// Spinner
|
|
229
|
-
// -------------------------------
|
|
230
|
-
.sk-fading-circle {
|
|
231
|
-
// margin: 100px auto;
|
|
232
|
-
width: 40px;
|
|
233
|
-
height: 40px;
|
|
234
|
-
position: relative;
|
|
235
|
-
margin-left: 5px;
|
|
236
|
-
margin-top: 5px;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
.sk-fading-circle .sk-circle {
|
|
240
|
-
width: 100%;
|
|
241
|
-
height: 100%;
|
|
242
|
-
position: absolute;
|
|
243
|
-
left: 0;
|
|
244
|
-
top: 0;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
.sk-fading-circle .sk-circle:before {
|
|
248
|
-
content: '';
|
|
249
|
-
display: block;
|
|
250
|
-
margin: 0 auto;
|
|
251
|
-
width: 15%;
|
|
252
|
-
height: 15%;
|
|
253
|
-
background-color: #333;
|
|
254
|
-
border-radius: 100%;
|
|
255
|
-
-webkit-animation: sk-circleFadeDelay 1.2s infinite ease-in-out both;
|
|
256
|
-
animation: sk-circleFadeDelay 1.2s infinite ease-in-out both;
|
|
257
|
-
}
|
|
258
|
-
.sk-fading-circle .sk-circle2 {
|
|
259
|
-
-webkit-transform: rotate(30deg);
|
|
260
|
-
-ms-transform: rotate(30deg);
|
|
261
|
-
transform: rotate(30deg);
|
|
262
|
-
}
|
|
263
|
-
.sk-fading-circle .sk-circle3 {
|
|
264
|
-
-webkit-transform: rotate(60deg);
|
|
265
|
-
-ms-transform: rotate(60deg);
|
|
266
|
-
transform: rotate(60deg);
|
|
267
|
-
}
|
|
268
|
-
.sk-fading-circle .sk-circle4 {
|
|
269
|
-
-webkit-transform: rotate(90deg);
|
|
270
|
-
-ms-transform: rotate(90deg);
|
|
271
|
-
transform: rotate(90deg);
|
|
272
|
-
}
|
|
273
|
-
.sk-fading-circle .sk-circle5 {
|
|
274
|
-
-webkit-transform: rotate(120deg);
|
|
275
|
-
-ms-transform: rotate(120deg);
|
|
276
|
-
transform: rotate(120deg);
|
|
277
|
-
}
|
|
278
|
-
.sk-fading-circle .sk-circle6 {
|
|
279
|
-
-webkit-transform: rotate(150deg);
|
|
280
|
-
-ms-transform: rotate(150deg);
|
|
281
|
-
transform: rotate(150deg);
|
|
282
|
-
}
|
|
283
|
-
.sk-fading-circle .sk-circle7 {
|
|
284
|
-
-webkit-transform: rotate(180deg);
|
|
285
|
-
-ms-transform: rotate(180deg);
|
|
286
|
-
transform: rotate(180deg);
|
|
287
|
-
}
|
|
288
|
-
.sk-fading-circle .sk-circle8 {
|
|
289
|
-
-webkit-transform: rotate(210deg);
|
|
290
|
-
-ms-transform: rotate(210deg);
|
|
291
|
-
transform: rotate(210deg);
|
|
292
|
-
}
|
|
293
|
-
.sk-fading-circle .sk-circle9 {
|
|
294
|
-
-webkit-transform: rotate(240deg);
|
|
295
|
-
-ms-transform: rotate(240deg);
|
|
296
|
-
transform: rotate(240deg);
|
|
297
|
-
}
|
|
298
|
-
.sk-fading-circle .sk-circle10 {
|
|
299
|
-
-webkit-transform: rotate(270deg);
|
|
300
|
-
-ms-transform: rotate(270deg);
|
|
301
|
-
transform: rotate(270deg);
|
|
302
|
-
}
|
|
303
|
-
.sk-fading-circle .sk-circle11 {
|
|
304
|
-
-webkit-transform: rotate(300deg);
|
|
305
|
-
-ms-transform: rotate(300deg);
|
|
306
|
-
transform: rotate(300deg);
|
|
307
|
-
}
|
|
308
|
-
.sk-fading-circle .sk-circle12 {
|
|
309
|
-
-webkit-transform: rotate(330deg);
|
|
310
|
-
-ms-transform: rotate(330deg);
|
|
311
|
-
transform: rotate(330deg);
|
|
312
|
-
}
|
|
313
|
-
.sk-fading-circle .sk-circle2:before {
|
|
314
|
-
-webkit-animation-delay: -1.1s;
|
|
315
|
-
animation-delay: -1.1s;
|
|
316
|
-
}
|
|
317
|
-
.sk-fading-circle .sk-circle3:before {
|
|
318
|
-
-webkit-animation-delay: -1s;
|
|
319
|
-
animation-delay: -1s;
|
|
320
|
-
}
|
|
321
|
-
.sk-fading-circle .sk-circle4:before {
|
|
322
|
-
-webkit-animation-delay: -0.9s;
|
|
323
|
-
animation-delay: -0.9s;
|
|
324
|
-
}
|
|
325
|
-
.sk-fading-circle .sk-circle5:before {
|
|
326
|
-
-webkit-animation-delay: -0.8s;
|
|
327
|
-
animation-delay: -0.8s;
|
|
328
|
-
}
|
|
329
|
-
.sk-fading-circle .sk-circle6:before {
|
|
330
|
-
-webkit-animation-delay: -0.7s;
|
|
331
|
-
animation-delay: -0.7s;
|
|
332
|
-
}
|
|
333
|
-
.sk-fading-circle .sk-circle7:before {
|
|
334
|
-
-webkit-animation-delay: -0.6s;
|
|
335
|
-
animation-delay: -0.6s;
|
|
336
|
-
}
|
|
337
|
-
.sk-fading-circle .sk-circle8:before {
|
|
338
|
-
-webkit-animation-delay: -0.5s;
|
|
339
|
-
animation-delay: -0.5s;
|
|
340
|
-
}
|
|
341
|
-
.sk-fading-circle .sk-circle9:before {
|
|
342
|
-
-webkit-animation-delay: -0.4s;
|
|
343
|
-
animation-delay: -0.4s;
|
|
344
|
-
}
|
|
345
|
-
.sk-fading-circle .sk-circle10:before {
|
|
346
|
-
-webkit-animation-delay: -0.3s;
|
|
347
|
-
animation-delay: -0.3s;
|
|
348
|
-
}
|
|
349
|
-
.sk-fading-circle .sk-circle11:before {
|
|
350
|
-
-webkit-animation-delay: -0.2s;
|
|
351
|
-
animation-delay: -0.2s;
|
|
352
|
-
}
|
|
353
|
-
.sk-fading-circle .sk-circle12:before {
|
|
354
|
-
-webkit-animation-delay: -0.1s;
|
|
355
|
-
animation-delay: -0.1s;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
@-webkit-keyframes sk-circleFadeDelay {
|
|
359
|
-
0%, 39%, 100% { opacity: 0; }
|
|
360
|
-
40% { opacity: 1; }
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
@keyframes sk-circleFadeDelay {
|
|
364
|
-
0%, 39%, 100% { opacity: 0; }
|
|
365
|
-
40% { opacity: 1; }
|
|
366
|
-
}
|
|
@@ -7,10 +7,13 @@ import { Platform } from '@ionic/angular';
|
|
|
7
7
|
import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
|
|
8
8
|
import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
|
|
9
9
|
import { TranslateService } from '@ngx-translate/core';
|
|
10
|
+
|
|
10
11
|
import * as moment from 'moment';
|
|
11
12
|
// import { EventsService } from 'src/app/services/events-service';
|
|
12
13
|
// import { TiledeskService } from '../../../services/tiledesk/tiledesk.service';
|
|
13
14
|
import { NetworkService } from '../../../services/network-service/network.service';
|
|
15
|
+
import { AppConfigProvider } from 'src/app/services/app-config';
|
|
16
|
+
import { DomSanitizer } from '@angular/platform-browser'
|
|
14
17
|
// import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
|
|
15
18
|
// import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
|
|
16
19
|
|
|
@@ -29,8 +32,8 @@ export class IonListConversationsComponent extends ListConversationsComponent im
|
|
|
29
32
|
public logger: LoggerService = LoggerInstance.getInstance();
|
|
30
33
|
public currentYear: any;
|
|
31
34
|
public browserLang: string;
|
|
32
|
-
|
|
33
|
-
public
|
|
35
|
+
|
|
36
|
+
public PROJECT_FOR_PANEL: any;
|
|
34
37
|
|
|
35
38
|
/**
|
|
36
39
|
*
|
|
@@ -45,7 +48,9 @@ export class IonListConversationsComponent extends ListConversationsComponent im
|
|
|
45
48
|
private translate: TranslateService,
|
|
46
49
|
// private events: EventsService,
|
|
47
50
|
// private tiledeskService: TiledeskService,
|
|
48
|
-
private networkService: NetworkService
|
|
51
|
+
private networkService: NetworkService,
|
|
52
|
+
private appConfigProvider: AppConfigProvider,
|
|
53
|
+
private sanitizer: DomSanitizer,
|
|
49
54
|
) {
|
|
50
55
|
super(iterableDiffers, kvDiffers)
|
|
51
56
|
this.browserLang = this.translate.getBrowserLang();
|
|
@@ -62,31 +67,23 @@ export class IonListConversationsComponent extends ListConversationsComponent im
|
|
|
62
67
|
|
|
63
68
|
this.currentYear = moment().format('YYYY');
|
|
64
69
|
this.logger.log('[ION-LIST-CONVS-COMP] - currentYear ', this.currentYear)
|
|
70
|
+
|
|
71
|
+
const DASHBOARD_BASE_URL = this.appConfigProvider.getConfig().dashboardUrl;
|
|
72
|
+
|
|
73
|
+
// console.log('[ION-LIST-CONVS-COMP] - DASHBOARD_BASE_URL ', DASHBOARD_BASE_URL)
|
|
74
|
+
this.PROJECT_FOR_PANEL = this.sanitizer.bypassSecurityTrustResourceUrl(DASHBOARD_BASE_URL + '#/project-for-panel');
|
|
65
75
|
}
|
|
66
76
|
|
|
67
77
|
ngOnInit() {
|
|
68
78
|
this.isApp = this.platform.is('ios') || this.platform.is('android')
|
|
69
79
|
this.logger.log('[ION-LIST-CONVS-COMP] - ngOnInit - IS-APP ', this.isApp)
|
|
70
80
|
this.logger.log('[ION-LIST-CONVS-COMP] - ngOnInit - Platform', this.platform.platforms());
|
|
71
|
-
this.watchToConnectionStatus();
|
|
72
81
|
}
|
|
73
82
|
|
|
83
|
+
|
|
74
84
|
|
|
75
|
-
watchToConnectionStatus() {
|
|
76
|
-
|
|
77
|
-
this.networkService.checkInternetFunc().subscribe(isOnline => {
|
|
78
|
-
this.checkInternet = isOnline
|
|
79
|
-
this.logger.log('[ION-LIST-CONVS-COMP] - watchToConnectionStatus - isOnline', this.checkInternet)
|
|
80
85
|
|
|
81
|
-
// checking internet connection
|
|
82
|
-
if (this.checkInternet == true) {
|
|
83
86
|
|
|
84
|
-
this.isOnline = true;
|
|
85
|
-
} else {
|
|
86
|
-
this.isOnline = false;
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
87
|
// --------------------------------------------------
|
|
91
88
|
// subdsribe to event
|
|
92
89
|
// --------------------------------------------------
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,23 +36,23 @@
|
|
|
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
|
|
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>
|
|
43
43
|
</button>
|
|
44
44
|
|
|
45
|
-
<p style="color: #666666; font-size: 1.1em; text-align: center; margin-top: 16px;">
|
|
45
|
+
<!-- <p style="color: #666666; font-size: 1.1em; text-align: center; margin-top: 16px;">
|
|
46
46
|
{{ translationMap.get('LABEL_DONT_HAVE_AN_ACCOUNT_YET') }}
|
|
47
47
|
<span style="color: #03a5e8; cursor:pointer" (click)="goToSignupPage()">
|
|
48
48
|
{{ translationMap.get('LABEL_SIGNUP') }}
|
|
49
49
|
</span>
|
|
50
|
-
</p>
|
|
50
|
+
</p> -->
|
|
51
51
|
|
|
52
52
|
<p style="color: #666666; font-size: 1.1em; text-align: center; margin-top: 16px;">
|
|
53
|
-
{{ translationMap
|
|
53
|
+
{{ translationMap?.get('LABEL_FORGOT_YOUR_PASSWORD') }}
|
|
54
54
|
<span style="color: #03a5e8; cursor:pointer" (click)="goToResetPsw()">
|
|
55
|
-
{{ translationMap
|
|
55
|
+
{{ translationMap?.get('LABEL_CLICK_HERE') }}
|
|
56
56
|
</span>
|
|
57
57
|
</p>
|
|
58
58
|
|
|
@@ -3,6 +3,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms';
|
|
|
3
3
|
import { ToastController, IonInput } from '@ionic/angular';
|
|
4
4
|
import { AppConfigProvider } from '../../../services/app-config';
|
|
5
5
|
|
|
6
|
+
|
|
6
7
|
// Logger
|
|
7
8
|
import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
|
|
8
9
|
import { LoggerInstance } from 'src/chat21-core/providers/logger/loggerInstance';
|
|
@@ -59,7 +60,7 @@ export class LoginComponent implements OnInit {
|
|
|
59
60
|
this.buildForm();
|
|
60
61
|
this.DASHBOARD_URL = this.appConfig.getConfig().dashboardUrl;
|
|
61
62
|
this.logger.log('LOGIN-COMP OnInit DASHBOARD_URL', this.DASHBOARD_URL)
|
|
62
|
-
this.showSpinnerInLoginBtn = false;
|
|
63
|
+
// this.showSpinnerInLoginBtn = false;
|
|
63
64
|
}
|
|
64
65
|
// ngAfterViewChecked() {
|
|
65
66
|
// this.emailInputEl.setFocus()
|
package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.ts
CHANGED
|
@@ -61,7 +61,7 @@ export class BubbleMyMessageComponent implements OnInit {
|
|
|
61
61
|
* alla chiusura controllo su quale opzione ho premuto e attivo l'azione corrispondete
|
|
62
62
|
*/
|
|
63
63
|
presentPopover(event, msg) {
|
|
64
|
-
console.log('presentPopover');
|
|
64
|
+
// console.log('presentPopover');
|
|
65
65
|
// let popover = this.popoverCtrl.create(PopoverPage, { typePopup: TYPE_POPUP_DETAIL_MESSAGE, message: msg });
|
|
66
66
|
// popover.present({
|
|
67
67
|
// ev: event
|
|
@@ -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
|
}
|
package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts
CHANGED
|
@@ -112,8 +112,8 @@ export class MessageTextAreaComponent implements OnInit, AfterViewInit, OnChange
|
|
|
112
112
|
|
|
113
113
|
this.logger.log("[CONVS-DETAIL][MSG-TEXT-AREA] ngOnChanges DROP EVENT ", this.dropEvent);
|
|
114
114
|
this.logger.log("[CONVS-DETAIL][MSG-TEXT-AREA] ngOnChanges tagsCannedFilter ", this.tagsCannedFilter);
|
|
115
|
-
this.logger.log('[CONVS-DETAIL] - returnChangeTextArea ngOnChanges in [MSG-TEXT-AREA] this.tagsCannedFilter.length ', this.tagsCannedFilter.length
|
|
116
|
-
|
|
115
|
+
this.logger.log('[CONVS-DETAIL] - returnChangeTextArea ngOnChanges in [MSG-TEXT-AREA] this.tagsCannedFilter.length ', this.tagsCannedFilter.length)
|
|
116
|
+
|
|
117
117
|
// use case drop
|
|
118
118
|
if (this.dropEvent) {
|
|
119
119
|
this.presentModal(this.dropEvent)
|
|
@@ -507,7 +507,7 @@ export class MessageTextAreaComponent implements OnInit, AfterViewInit, OnChange
|
|
|
507
507
|
|
|
508
508
|
|
|
509
509
|
|
|
510
|
-
|
|
510
|
+
let message = e.target.textContent.trim();
|
|
511
511
|
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - event target textContent (message): ', message);
|
|
512
512
|
// e.inputType === 'insertLineBreak' &&
|
|
513
513
|
if (e.inputType === 'insertLineBreak' && message === '') {
|
|
@@ -525,17 +525,29 @@ export class MessageTextAreaComponent implements OnInit, AfterViewInit, OnChange
|
|
|
525
525
|
this.messageString = '';
|
|
526
526
|
this.sendMessage(text);
|
|
527
527
|
this.countClicks = 0
|
|
528
|
-
} else if (text.includes("/") && pos
|
|
528
|
+
} else if (text.includes("/") && pos === 0 && this.countClicks > 1 && this.tagsCannedFilter.length > 0) {
|
|
529
529
|
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - tagsCannedFilter.length 2: ', this.tagsCannedFilter.length);
|
|
530
530
|
this.logger.log("[CONVS-DETAIL] replaceTagInMessage onKeydown in msg-texarea SEND MESSAGE 2 message: ", message);
|
|
531
|
+
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - SEND MESSAGE 2 message value: ', message.value);
|
|
531
532
|
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - SEND MESSAGE 2 text: ', text);
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
533
|
+
|
|
534
|
+
this.logger.log("[CONVS-DETAIL] replaceTagInMessage onKeydown in msg-texarea SEND MESSAGE 2 this.tagsCannedFilter.length: ", this.tagsCannedFilter.length);
|
|
535
|
+
this.logger.log("[CONVS-DETAIL] replaceTagInMessage onKeydown in msg-texarea SEND MESSAGE 2 this.countClicks: ", this.countClicks);
|
|
536
|
+
this.logger.log("[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown in msg-texarea SEND MESSAGE 2 this.countClicks: ", this.countClicks);
|
|
537
|
+
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - SEND MESSAGE 2 message: ', message);
|
|
538
|
+
this.messageString = '';
|
|
539
|
+
|
|
540
|
+
this.sendMessage(text);
|
|
541
|
+
this.countClicks = 0
|
|
542
|
+
} else if (text.includes("/") && pos > 0 && this.countClicks > 1 && this.tagsCannedFilter.length > 0 && text.substr(-1) !== '/' ) {
|
|
543
|
+
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - tagsCannedFilter.length 3: ', this.tagsCannedFilter.length);
|
|
544
|
+
this.logger.log("[CONVS-DETAIL] replaceTagInMessage onKeydown in msg-texarea SEND MESSAGE 3 message: ", message);
|
|
545
|
+
// this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - SEND MESSAGE 3 message value: ', message.value);
|
|
546
|
+
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - SEND MESSAGE 3 text: ', text);
|
|
536
547
|
|
|
537
548
|
this.logger.log("[CONVS-DETAIL] replaceTagInMessage onKeydown in msg-texarea SEND MESSAGE 2 this.tagsCannedFilter.length: ", this.tagsCannedFilter.length);
|
|
538
549
|
this.logger.log("[CONVS-DETAIL] replaceTagInMessage onKeydown in msg-texarea SEND MESSAGE 2 this.countClicks: ", this.countClicks);
|
|
550
|
+
this.logger.log("[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown in msg-texarea SEND MESSAGE 2 this.countClicks: ", this.countClicks);
|
|
539
551
|
this.logger.log('[CONVS-DETAIL][MSG-TEXT-AREA] onKeydown - SEND MESSAGE 2 message: ', message);
|
|
540
552
|
this.messageString = '';
|
|
541
553
|
|
|
@@ -551,13 +563,6 @@ export class MessageTextAreaComponent implements OnInit, AfterViewInit, OnChange
|
|
|
551
563
|
this.countClicks = 0
|
|
552
564
|
|
|
553
565
|
}
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
// }
|
|
561
566
|
}
|
|
562
567
|
}
|
|
563
568
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
<ion-buttons slot="end">
|
|
16
16
|
|
|
17
|
-
<ion-button *ngIf="
|
|
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
|
|
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
|
/** */
|