@chat21/chat21-ionic 3.0.79-rc.1 → 3.0.79-rc.3
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 +14 -0
- package/README.md +1 -0
- package/env.sample +1 -0
- package/package.json +1 -1
- package/src/app/app.component.html +7 -1
- package/src/app/app.component.scss +16 -1
- package/src/app/app.component.ts +182 -11
- package/src/app/app.module.ts +3 -1
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +37 -12
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +55 -50
- package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +24 -0
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +0 -18
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +1 -10
- package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +1 -22
- package/src/app/chatlib/conversation-detail/message/message-attachment/message-attachment.component.scss +1 -3
- package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.scss +1 -0
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +1 -2
- package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +8 -5
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +6 -5
- package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +3 -82
- package/src/app/components/conversations-list/header-conversations-list/header-conversations-list.component.html +1 -1
- package/src/app/components/navbar/navbar.component.html +103 -0
- package/src/app/components/navbar/navbar.component.scss +249 -0
- package/src/app/components/{conversation-detail/bubble-my-message/bubble-my-message.component.spec.ts → navbar/navbar.component.spec.ts} +6 -6
- package/src/app/components/navbar/navbar.component.ts +189 -0
- package/src/app/components/project-item/project-item.component.ts +11 -1
- package/src/app/pages/contacts-directory/contacts-directory.page.scss +1 -1
- package/src/app/pages/conversation-detail/conversation-detail.module.ts +0 -8
- package/src/app/pages/conversation-detail/conversation-detail.page.ts +71 -2
- package/src/app/pages/conversations-list/conversations-list.page.scss +1 -0
- package/src/app/pages/conversations-list/conversations-list.page.ts +51 -22
- package/src/app/pages/create-canned-response/create-canned-response.page.ts +13 -13
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.html +1 -1
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.scss +42 -0
- package/src/app/pages/unassigned-conversations/unassigned-conversations.page.ts +1 -0
- package/src/app/services/canned-responses/canned-responses.service.ts +26 -0
- package/src/app/services/projects/projects.service.spec.ts +12 -0
- package/src/app/services/projects/projects.service.ts +43 -0
- package/src/app/services/tiledesk/tiledesk.service.ts +1 -25
- package/src/app/shared/shared.module.ts +3 -12
- package/src/assets/i18n/ar.json +10 -2
- package/src/assets/i18n/az.json +9 -1
- package/src/assets/i18n/de.json +10 -2
- package/src/assets/i18n/en.json +10 -2
- package/src/assets/i18n/es.json +10 -2
- package/src/assets/i18n/fr.json +9 -1
- package/src/assets/i18n/it.json +9 -1
- package/src/assets/i18n/kk.json +10 -2
- package/src/assets/i18n/pt.json +10 -2
- package/src/assets/i18n/ru.json +9 -1
- package/src/assets/i18n/sr.json +277 -269
- package/src/assets/i18n/sv.json +10 -2
- package/src/assets/i18n/tr.json +10 -2
- package/src/assets/i18n/uk.json +10 -2
- package/src/assets/i18n/uz.json +9 -1
- package/src/assets/sounds/wheep-wheep.mp3 +0 -0
- package/src/chat-config-mqtt-localhost.json +1 -0
- package/src/chat-config-native-mqtt.json +1 -0
- package/src/chat-config-pre.json +2 -1
- package/src/chat-config-template.json +1 -0
- package/src/chat-config.json +1 -0
- package/src/chat21-core/models/conversation.ts +0 -1
- package/src/chat21-core/models/projects.ts +27 -0
- package/src/chat21-core/utils/constants.ts +1 -1
- package/src/chat21-core/utils/convertRequestToConversation.ts +41 -0
- package/src/global.scss +1 -13
- package/src/index.html +6 -47
- package/src/variables.scss +5 -2
- package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.html +0 -3
- package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.scss +0 -21
- package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.spec.ts +0 -24
- package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.ts +0 -14
- package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.html +0 -54
- package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.scss +0 -98
- package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.ts +0 -84
- package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.html +0 -30
- package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.scss +0 -83
- package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.spec.ts +0 -24
- package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.ts +0 -68
- package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.html +0 -3
- package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.scss +0 -10
- package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.spec.ts +0 -24
- package/src/app/components/conversation-detail/bubble-system-message/bubble-system-message.component.ts +0 -14
package/src/assets/i18n/tr.json
CHANGED
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"INFO_SUPPORT_CHAT_CLOSED": "sohbet kapatıldı",
|
|
71
71
|
"INFO_SUPPORT_LEAD_UPDATED":"Potansiyel müşteri güncellendi",
|
|
72
72
|
"INFO_SUPPORT_MEMBER_LEFT_GROUP":"gruptan kaldırıldı",
|
|
73
|
-
"INFO_SUPPORT_MEMBER_ABANDONED_GROUP":"
|
|
73
|
+
"INFO_SUPPORT_MEMBER_ABANDONED_GROUP":"görüşmeden ayrıldı",
|
|
74
74
|
"INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Size yeni bir destek talebi atandı",
|
|
75
75
|
"LABEL_PROFILE": "Profil",
|
|
76
76
|
"LABEL_CLOSE": "Kapalı",
|
|
@@ -268,5 +268,13 @@
|
|
|
268
268
|
"First_name_of_agent": "Ajanın adı",
|
|
269
269
|
"EnterCannedResponseTitle": "Hazır yanıt başlığını girin",
|
|
270
270
|
"WriteMsgToSendToYourVisitors": "Ziyaretçilerinize göndermek için hazır bir yanıt mesajı yazın",
|
|
271
|
-
"EditProfile": "Profili Düzenle"
|
|
271
|
+
"EditProfile": "Profili Düzenle",
|
|
272
|
+
"NAVBAR":{
|
|
273
|
+
"SIMULATE_VISITOR":"Ziyaretçiyi simüle et",
|
|
274
|
+
"PROJECT_SETTINGS":"Proje ayarları",
|
|
275
|
+
"VIEW_ALL_PROJECTS":"Tüm projeleri görüntüle",
|
|
276
|
+
"ADD_PROJECT":"Proje ekle",
|
|
277
|
+
"RECENT_PROJECTS":"Son Projeler",
|
|
278
|
+
"OTHER_PROJECTS":"Diğer projeler"
|
|
279
|
+
}
|
|
272
280
|
}
|
package/src/assets/i18n/uk.json
CHANGED
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"INFO_SUPPORT_CHAT_CLOSED": "Чат закритий",
|
|
71
71
|
"INFO_SUPPORT_LEAD_UPDATED":"Лід оновлено",
|
|
72
72
|
"INFO_SUPPORT_MEMBER_LEFT_GROUP":"видалено з групи",
|
|
73
|
-
"INFO_SUPPORT_MEMBER_ABANDONED_GROUP":"залишив
|
|
73
|
+
"INFO_SUPPORT_MEMBER_ABANDONED_GROUP":"залишив бесіду",
|
|
74
74
|
"INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Вам призначено новий запит на підтримку",
|
|
75
75
|
"LABEL_PROFILE": "Профіль",
|
|
76
76
|
"LABEL_CLOSE": "зачинено",
|
|
@@ -268,5 +268,13 @@
|
|
|
268
268
|
"First_name_of_agent": "Ім'я агента",
|
|
269
269
|
"EnterCannedResponseTitle": "Введіть назву готової відповіді",
|
|
270
270
|
"WriteMsgToSendToYourVisitors": "Напишіть готове повідомлення-відповідь, щоб надіслати його відвідувачам",
|
|
271
|
-
"EditProfile": "Редагувати профіль"
|
|
271
|
+
"EditProfile": "Редагувати профіль",
|
|
272
|
+
"NAVBAR":{
|
|
273
|
+
"SIMULATE_VISITOR":"Імітація відвідувача",
|
|
274
|
+
"PROJECT_SETTINGS":"Налаштування проекту",
|
|
275
|
+
"VIEW_ALL_PROJECTS":"Переглянути всі проекти",
|
|
276
|
+
"ADD_PROJECT":"Додати проект",
|
|
277
|
+
"RECENT_PROJECTS":"Останні проекти",
|
|
278
|
+
"OTHER_PROJECTS":"Інші проекти"
|
|
279
|
+
}
|
|
272
280
|
}
|
package/src/assets/i18n/uz.json
CHANGED
|
@@ -269,5 +269,13 @@
|
|
|
269
269
|
"First_name_of_agent": "Agentning ismi",
|
|
270
270
|
"EnterCannedResponseTitle": "Tayyor javob sarlavhasini kiriting",
|
|
271
271
|
"WriteMsgToSendToYourVisitors": "Mehmonlaringizga yuborish uchun konservalangan javob xabarini yozing",
|
|
272
|
-
"EditProfile": "Profilni tahrirlash"
|
|
272
|
+
"EditProfile": "Profilni tahrirlash",
|
|
273
|
+
"NAVBAR":{
|
|
274
|
+
"SIMULATE_VISITOR":"Mehmonni simulyatsiya qilish",
|
|
275
|
+
"PROJECT_SETTINGS":"Loyiha sozlamalari",
|
|
276
|
+
"VIEW_ALL_PROJECTS":"Barcha loyihalarni ko'rish",
|
|
277
|
+
"ADD_PROJECT":"Loyiha qo'shish",
|
|
278
|
+
"RECENT_PROJECTS":"So'nggi loyihalar",
|
|
279
|
+
"OTHER_PROJECTS":"Boshqa loyihalar"
|
|
280
|
+
}
|
|
273
281
|
}
|
|
Binary file
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"apiUrl": "http://localhost:3000/",
|
|
25
25
|
"baseImageUrl": "http://localhost:3000/",
|
|
26
26
|
"dashboardUrl": "http://localhost:8081/",
|
|
27
|
+
"testsiteBaseUrl": "http://localhost:8081/widget/assets/twp/index.html",
|
|
27
28
|
"logLevel": "DEBUG",
|
|
28
29
|
"authPersistence": "LOCAL",
|
|
29
30
|
"supportMode": true,
|
|
@@ -26,5 +26,6 @@
|
|
|
26
26
|
"apiUrl": "https://console.native.tiledesk.com/api/",
|
|
27
27
|
"baseImageUrl": "https://console.native.tiledesk.com/api/",
|
|
28
28
|
"dashboardUrl": "https://console.native.tiledesk.com/dashboard/",
|
|
29
|
+
"testsiteBaseUrl":"https://console.native.tiledesk.com/widget/assets/twp/index.html",
|
|
29
30
|
"authPersistence": "LOCAL"
|
|
30
31
|
}
|
package/src/chat-config-pre.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"t2y12PruGU9wUtEGzBJfolMIgK": "CAR:T-PAY:T-ANA:T-ACT:T-APP:T",
|
|
2
|
+
"t2y12PruGU9wUtEGzBJfolMIgK": "CAR:T-PAY:T-ANA:T-ACT:T-APP:T-MTT:T",
|
|
3
3
|
"chatEngine": "firebase",
|
|
4
4
|
"uploadEngine": "firebase",
|
|
5
5
|
"pushEngine": "firebase",
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"apiUrl": "https://tiledesk-server-pre.herokuapp.com/",
|
|
25
25
|
"baseImageUrl": "https://firebasestorage.googleapis.com/v0/b/",
|
|
26
26
|
"dashboardUrl": "https://support-pre.tiledesk.com/dashboard/",
|
|
27
|
+
"testsiteBaseUrl": "https://widget-pre.tiledesk.com/v5/assets/twp/index.html",
|
|
27
28
|
"logLevel": "DEBUG",
|
|
28
29
|
"authPersistence": "LOCAL",
|
|
29
30
|
"supportMode": true,
|
package/src/chat-config.json
CHANGED
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"apiUrl": "http://localhost:3000/",
|
|
27
27
|
"baseImageUrl": "https://firebasestorage.googleapis.com/v0/b/",
|
|
28
28
|
"dashboardUrl": "https://support-pre.tiledesk.com/dashboard/",
|
|
29
|
+
"testsiteBaseUrl": "https://widget-pre.tiledesk.com/v5/assets/twp/index.html",
|
|
29
30
|
"wsUrl": "ws://localhost:3000/",
|
|
30
31
|
"wsUrlRel": "${WS_URL_RELATIVE}",
|
|
31
32
|
"supportMode": false,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface Project {
|
|
2
|
+
_id: string;
|
|
3
|
+
updatedAt?: any;
|
|
4
|
+
createdAt?: any;
|
|
5
|
+
name?: string;
|
|
6
|
+
activeOperatingHours?: boolean;
|
|
7
|
+
operatingHours?: any
|
|
8
|
+
createdBy?: string;
|
|
9
|
+
id_project?: any;
|
|
10
|
+
widget?: any;
|
|
11
|
+
settings?: any;
|
|
12
|
+
role?: string;
|
|
13
|
+
user_available?: boolean;
|
|
14
|
+
profile_name?: any;
|
|
15
|
+
profile_agents?: any;
|
|
16
|
+
trial_expired?: any;
|
|
17
|
+
trial_days_left?: number;
|
|
18
|
+
trial_days?: number;
|
|
19
|
+
profile_type?: string;
|
|
20
|
+
subscription_is_active?: any;
|
|
21
|
+
profile?: any;
|
|
22
|
+
subscription_end_date?: any;
|
|
23
|
+
subscription_id?: any;
|
|
24
|
+
subscription_creation_date?: any;
|
|
25
|
+
subscription_start_date?: any;
|
|
26
|
+
__v?: any;
|
|
27
|
+
}
|
|
@@ -73,7 +73,7 @@ export const TOUCHING_OPERATOR = "TOUCHING_OPERATOR";
|
|
|
73
73
|
// URLS
|
|
74
74
|
// export const URL_SOUND = 'assets/sounds/pling.mp3';
|
|
75
75
|
export const URL_SOUND_LIST_CONVERSATION = '/assets/sounds/pling.mp3';
|
|
76
|
-
export const
|
|
76
|
+
export const URL_SOUND_CONVERSATION_ADDED = '/assets/sounds/wheep-wheep.mp3';
|
|
77
77
|
// export const CHAT_SEND_BY_EMAIL_LINK =
|
|
78
78
|
// 'mailto:?subject=Transcript Chat Conversation&body=Salve,%0D%0A%0D%0Adi
|
|
79
79
|
// seguito potrà scaricare il transcript della conversazione intercorsa con il nostro servizio di
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { TYPE_DIRECT, TYPE_SUPPORT_GROUP } from 'src/chat21-core/utils/constants';
|
|
2
|
+
import { ConversationModel } from 'src/chat21-core/models/conversation';
|
|
3
|
+
import { Inject, Injectable, OnInit } from '@angular/core';
|
|
4
|
+
import { avatarPlaceholder, getColorBck } from './utils-user';
|
|
5
|
+
import moment from 'moment';
|
|
6
|
+
|
|
7
|
+
@Injectable()
|
|
8
|
+
export class ConvertRequestToConversation {
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
initialize(){
|
|
13
|
+
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
getConvFromRequest(request: any): ConversationModel{
|
|
17
|
+
return new ConversationModel(
|
|
18
|
+
request.request_id,
|
|
19
|
+
request.attributes,
|
|
20
|
+
request.request_id && (request.request_id.startsWith('group-') || request.request_id.startsWith('support-group'))? TYPE_SUPPORT_GROUP: TYPE_DIRECT,
|
|
21
|
+
request.lead && request.lead.fullname ? request.lead.fullname: null,
|
|
22
|
+
request.requester_id,
|
|
23
|
+
request.lead && request.lead.fullname ? request.lead.fullname: null,
|
|
24
|
+
request.requester_id,
|
|
25
|
+
'',
|
|
26
|
+
true,
|
|
27
|
+
request.first_text,
|
|
28
|
+
request.first_text,
|
|
29
|
+
request.requester_id,
|
|
30
|
+
'',
|
|
31
|
+
request.lead && request.lead.fullname ? request.lead.fullname: null,
|
|
32
|
+
'0',
|
|
33
|
+
moment(request.createdAt).unix(),
|
|
34
|
+
getColorBck(request.lead.fullname),
|
|
35
|
+
avatarPlaceholder(request.lead.fullname),
|
|
36
|
+
false,
|
|
37
|
+
'text'
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
}
|
package/src/global.scss
CHANGED
|
@@ -362,19 +362,7 @@ app-message-text-area {
|
|
|
362
362
|
z-index: 99999; // nk
|
|
363
363
|
background: #fff; // nk
|
|
364
364
|
}
|
|
365
|
-
|
|
366
|
-
width: 100%;
|
|
367
|
-
}
|
|
368
|
-
app-bubble-system-message {
|
|
369
|
-
max-width: 80%;
|
|
370
|
-
margin: 0 auto;
|
|
371
|
-
}
|
|
372
|
-
app-bubble-my-message {
|
|
373
|
-
width: 100%;
|
|
374
|
-
}
|
|
375
|
-
app-bubble-others-message {
|
|
376
|
-
width: 100%;
|
|
377
|
-
}
|
|
365
|
+
|
|
378
366
|
app-conversation-info {
|
|
379
367
|
height: calc(100% - 60px);
|
|
380
368
|
}
|
package/src/index.html
CHANGED
|
@@ -33,56 +33,15 @@
|
|
|
33
33
|
<!-- <script src="https://unpkg.com/mqtt@4.1.0/dist/mqtt.min.js"></script> -->
|
|
34
34
|
<!-- <script src="./assets/js/watchToConnectionAtStartUp.js"></script> -->
|
|
35
35
|
|
|
36
|
-
<script>
|
|
37
|
-
// console.log("index.html Hey script watchToConnectionAtStartUp! ");
|
|
38
|
-
// // ononline version
|
|
39
|
-
window.ononline = (event) => {
|
|
40
|
-
// console.log("index.html You are now connected to the network.");
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
// // onoffline version
|
|
44
|
-
window.onoffline = (event) => {
|
|
45
|
-
// console.log("The network connection has been lost.");
|
|
46
|
-
};
|
|
47
|
-
// console.log('index.html window.navigator.onLine is ' + window.navigator.onLine);
|
|
48
|
-
|
|
49
|
-
// || window.navigator.onLine === true
|
|
50
|
-
if (window.navigator.onLine === false ) {
|
|
51
|
-
let app_root_el = document.getElementsByTagName('app-root');
|
|
52
|
-
// console.log('index.html app_root_el ', app_root_el);
|
|
53
|
-
|
|
54
|
-
setTimeout(function () {
|
|
55
|
-
// console.log('index.html app_root_el > childNodes ', app_root_el[0].childNodes);
|
|
56
|
-
if (app_root_el[0].childNodes.length > 0) { // Or just `if (element.childNodes.length)`
|
|
57
|
-
// console.log('index.html app_root_el has child', app_root_el[0].childNodes);
|
|
58
|
-
|
|
59
|
-
} else {
|
|
60
|
-
// console.log('index.html app_root_el not has child', app_root_el[0].childNodes);
|
|
61
|
-
|
|
62
|
-
var div = document.createElement('div');
|
|
63
|
-
div.className = 'img-connection';
|
|
64
36
|
|
|
65
|
-
div.style.cssText += 'background-image: url(data:image/gif;base64,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); width: 56px;height: 56px;background-size: contain;position: absolute;left: 50%;top: 50%;webkit-transform: translate(-50%, -50%);transform: translate(-50%, -50%);margin-top: -60px;';
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
div_1.textContent += "Internet is slow or not working."
|
|
72
|
-
|
|
73
|
-
document.body.appendChild(div)
|
|
74
|
-
document.body.appendChild(div_1);
|
|
75
|
-
|
|
76
|
-
window.ononline = (event) => {
|
|
77
|
-
// console.log("index.html You are now connected to the network.");
|
|
78
|
-
location.reload(true);
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
}, 4000);
|
|
82
|
-
}
|
|
37
|
+
<!-- segment analytics -->
|
|
38
|
+
<script>
|
|
39
|
+
!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics._writeKey="qaTU0wG6VH6xPAhOzD2kneI70Txg1fTB";;analytics.SNIPPET_VERSION="4.15.3";
|
|
40
|
+
analytics.load("qaTU0wG6VH6xPAhOzD2kneI70Txg1fTB");
|
|
41
|
+
analytics.page();
|
|
42
|
+
}}();
|
|
83
43
|
</script>
|
|
84
44
|
|
|
85
|
-
|
|
86
45
|
<!-- add to homescreen for ios -->
|
|
87
46
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
88
47
|
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
|
package/src/variables.scss
CHANGED
package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.scss
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
.row-day {
|
|
2
|
-
padding: 0 10px;
|
|
3
|
-
text-align: center;
|
|
4
|
-
width: 100%;
|
|
5
|
-
margin-top: 15px;
|
|
6
|
-
margin-bottom: 5px;
|
|
7
|
-
}
|
|
8
|
-
.header-day {
|
|
9
|
-
background-color: var(--transparent);
|
|
10
|
-
padding-top: 4px;
|
|
11
|
-
padding-bottom: 4px;
|
|
12
|
-
padding-left: 12px;
|
|
13
|
-
padding-right: 12px;
|
|
14
|
-
vertical-align: middle;
|
|
15
|
-
border-radius: 13px;
|
|
16
|
-
font-size: 14px;
|
|
17
|
-
font-weight: bold;
|
|
18
|
-
color: var(--basic-gray);
|
|
19
|
-
display: inline-block;
|
|
20
|
-
}
|
|
21
|
-
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
|
2
|
-
import { IonicModule } from '@ionic/angular';
|
|
3
|
-
|
|
4
|
-
import { BubbleDayMessageComponent } from './bubble-day-message.component';
|
|
5
|
-
|
|
6
|
-
describe('BubbleDayMessageComponent', () => {
|
|
7
|
-
let component: BubbleDayMessageComponent;
|
|
8
|
-
let fixture: ComponentFixture<BubbleDayMessageComponent>;
|
|
9
|
-
|
|
10
|
-
beforeEach(async(() => {
|
|
11
|
-
TestBed.configureTestingModule({
|
|
12
|
-
declarations: [ BubbleDayMessageComponent ],
|
|
13
|
-
imports: [IonicModule.forRoot()]
|
|
14
|
-
}).compileComponents();
|
|
15
|
-
|
|
16
|
-
fixture = TestBed.createComponent(BubbleDayMessageComponent);
|
|
17
|
-
component = fixture.componentInstance;
|
|
18
|
-
fixture.detectChanges();
|
|
19
|
-
}));
|
|
20
|
-
|
|
21
|
-
it('should create', () => {
|
|
22
|
-
expect(component).toBeTruthy();
|
|
23
|
-
});
|
|
24
|
-
});
|
package/src/app/components/conversation-detail/bubble-day-message/bubble-day-message.component.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { Component, OnInit, Input } from '@angular/core';
|
|
2
|
-
|
|
3
|
-
@Component({
|
|
4
|
-
selector: 'app-bubble-day-message',
|
|
5
|
-
templateUrl: './bubble-day-message.component.html',
|
|
6
|
-
styleUrls: ['./bubble-day-message.component.scss'],
|
|
7
|
-
})
|
|
8
|
-
export class BubbleDayMessageComponent implements OnInit {
|
|
9
|
-
@Input() messageDate = '';
|
|
10
|
-
constructor() { }
|
|
11
|
-
|
|
12
|
-
ngOnInit() {}
|
|
13
|
-
|
|
14
|
-
}
|
package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.html
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
<div class="message message-my" [class.first-message]="isFirstMessage" >
|
|
2
|
-
|
|
3
|
-
<div class="bubble-message"
|
|
4
|
-
[class.image]="message.type == 'image'"
|
|
5
|
-
[class.no-text]="!message.text"
|
|
6
|
-
(mouseover)="showButtonInfo()">
|
|
7
|
-
<span class="buttonInfo" (click)="presentPopover($event, message)"> </span>
|
|
8
|
-
|
|
9
|
-
<div *ngIf="message.type == 'image';"
|
|
10
|
-
(click)="popupUrl(message.metadata.src,'windowName')"
|
|
11
|
-
>
|
|
12
|
-
<img
|
|
13
|
-
class="message-content message-content-image"
|
|
14
|
-
[src]="message.metadata.src"
|
|
15
|
-
[width]="getSizeImg(message).width"
|
|
16
|
-
[height]="getSizeImg(message).height" />
|
|
17
|
-
</div>
|
|
18
|
-
|
|
19
|
-
<div *ngIf="message.type == 'file';" class="message-content message-content-text"
|
|
20
|
-
[innerHTML]="urlify(message.metadata.src, message.metadata.name)"
|
|
21
|
-
></div>
|
|
22
|
-
|
|
23
|
-
<div>
|
|
24
|
-
|
|
25
|
-
<!-- <div *ngIf="message.type == 'text'"> -->
|
|
26
|
-
<div *ngIf="isPopupUrl(message.text); then contentPopup else contentNewTab">here is ignored</div>
|
|
27
|
-
<ng-template #contentPopup>
|
|
28
|
-
<div style="text-decoration: underline; padding:8px; cursor: pointer;" (click)="popupUrl(message.text,'windowName')">{{stripTags(message.text)}}</div>
|
|
29
|
-
</ng-template>
|
|
30
|
-
<ng-template #contentNewTab>
|
|
31
|
-
<div class="message-content message-content-text" [innerHTML]="message.text"></div>
|
|
32
|
-
</ng-template>
|
|
33
|
-
<!-- </div> -->
|
|
34
|
-
|
|
35
|
-
</div>
|
|
36
|
-
|
|
37
|
-
<div class="timestamp-message right">{{message.timestamp | date: 'H:mm'}}</div>
|
|
38
|
-
</div>
|
|
39
|
-
|
|
40
|
-
<div class="attribute-message">
|
|
41
|
-
<div class="status-message">
|
|
42
|
-
<span *ngIf="!message.status" class="material-icons">
|
|
43
|
-
<ion-icon name="time-outline"></ion-icon>
|
|
44
|
-
</span>
|
|
45
|
-
<span *ngIf="message.status==MSG_STATUS_SENT" class="material-icons">
|
|
46
|
-
<ion-icon name="checkmark-outline"></ion-icon>
|
|
47
|
-
</span>
|
|
48
|
-
<span *ngIf="message.status==MSG_STATUS_RETURN_RECEIPT" class="material-icons">
|
|
49
|
-
<ion-icon name="checkmark-done-outline"></ion-icon>
|
|
50
|
-
</span>
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
|
-
|
|
54
|
-
</div>
|
package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.scss
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
.message {
|
|
2
|
-
.bubble-message {
|
|
3
|
-
position: relative;
|
|
4
|
-
border-radius: 15px;
|
|
5
|
-
font-size: 15px;
|
|
6
|
-
// padding: 5px 10px 10px 10px;
|
|
7
|
-
display: block;
|
|
8
|
-
width: auto;
|
|
9
|
-
max-width: 80%;
|
|
10
|
-
line-height: 1.34;
|
|
11
|
-
direction: ltr;
|
|
12
|
-
padding: 0px;
|
|
13
|
-
.message-content-image {
|
|
14
|
-
border-radius: 15px 6px 0px 0px;
|
|
15
|
-
}
|
|
16
|
-
&.no-text {
|
|
17
|
-
line-height: 0;
|
|
18
|
-
.message-content-image {
|
|
19
|
-
border-radius: 15px 6px 0px 15px;
|
|
20
|
-
}
|
|
21
|
-
.message-content.message-content-text{
|
|
22
|
-
padding: 0px;
|
|
23
|
-
height: 0px;
|
|
24
|
-
}
|
|
25
|
-
.timestamp-message {
|
|
26
|
-
background-color: #00000045;
|
|
27
|
-
padding: 4px;
|
|
28
|
-
color: white;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
&.image{
|
|
32
|
-
max-width: 300px;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
.message-content:after {
|
|
40
|
-
content: "\00a0\00a0\00a0\00a0\00a0\00a0";
|
|
41
|
-
}
|
|
42
|
-
.timestamp-message {
|
|
43
|
-
font-size: 10px;
|
|
44
|
-
padding: 0px;
|
|
45
|
-
position: absolute;
|
|
46
|
-
bottom: 2px;
|
|
47
|
-
right: 6px;
|
|
48
|
-
line-height: 15px;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
.message-my {
|
|
52
|
-
width: 100%;
|
|
53
|
-
margin-top: 4px;
|
|
54
|
-
.message-content.message-content-text{
|
|
55
|
-
color: var(--white)!important;
|
|
56
|
-
padding: 5px 20px 5px 10px;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
.bubble-message {
|
|
61
|
-
background-color: var(--bubble-blue);
|
|
62
|
-
color: white;
|
|
63
|
-
margin-right: 24px;
|
|
64
|
-
float: right;
|
|
65
|
-
border-top-right-radius: 6px;
|
|
66
|
-
border-bottom-right-radius: 6px;
|
|
67
|
-
}
|
|
68
|
-
&.first-message {
|
|
69
|
-
margin-top: 10px;
|
|
70
|
-
.bubble-message {
|
|
71
|
-
border-top-right-radius: 12px;
|
|
72
|
-
border-bottom-right-radius: 0px;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
.timestamp-message {
|
|
76
|
-
color: var(--white);
|
|
77
|
-
}
|
|
78
|
-
.attribute-message {
|
|
79
|
-
position: absolute;
|
|
80
|
-
width: 100%;
|
|
81
|
-
background-color: transparent;
|
|
82
|
-
bottom: 0;
|
|
83
|
-
right: 0;
|
|
84
|
-
.status-message {
|
|
85
|
-
position: absolute;
|
|
86
|
-
top: 0;
|
|
87
|
-
right: 0;
|
|
88
|
-
width: 15px;
|
|
89
|
-
.material-icons {
|
|
90
|
-
font-size: 15px;
|
|
91
|
-
color: var(--basic-blue);
|
|
92
|
-
position: absolute;
|
|
93
|
-
bottom: 4px;
|
|
94
|
-
right: 2px;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.ts
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import { Component, OnInit, Input } from '@angular/core';
|
|
2
|
-
import { MessageModel } from 'src/chat21-core/models/message';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
// utils
|
|
7
|
-
import {
|
|
8
|
-
popupUrl,
|
|
9
|
-
urlify,
|
|
10
|
-
isPopupUrl,
|
|
11
|
-
stripTags
|
|
12
|
-
} from 'src/chat21-core/utils/utils';
|
|
13
|
-
|
|
14
|
-
import {
|
|
15
|
-
getSizeImg
|
|
16
|
-
} from 'src/chat21-core/utils/utils-message';
|
|
17
|
-
|
|
18
|
-
import {
|
|
19
|
-
MSG_STATUS_SENT,
|
|
20
|
-
MSG_STATUS_RETURN_RECEIPT,
|
|
21
|
-
MAX_WIDTH_IMAGES
|
|
22
|
-
} from 'src/chat21-core/utils/constants';
|
|
23
|
-
|
|
24
|
-
@Component({
|
|
25
|
-
selector: 'app-bubble-my-message',
|
|
26
|
-
templateUrl: './bubble-my-message.component.html',
|
|
27
|
-
styleUrls: ['./bubble-my-message.component.scss'],
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
export class BubbleMyMessageComponent implements OnInit {
|
|
31
|
-
@Input() message: MessageModel;
|
|
32
|
-
@Input() isFirstMessage = true;
|
|
33
|
-
|
|
34
|
-
// utils functions
|
|
35
|
-
popupUrl = popupUrl;
|
|
36
|
-
urlify = urlify;
|
|
37
|
-
isPopupUrl = isPopupUrl;
|
|
38
|
-
stripTags = stripTags;
|
|
39
|
-
|
|
40
|
-
// utils-message functions
|
|
41
|
-
getSizeImg = getSizeImg;
|
|
42
|
-
|
|
43
|
-
MSG_STATUS_SENT = MSG_STATUS_SENT;
|
|
44
|
-
MSG_STATUS_RETURN_RECEIPT = MSG_STATUS_RETURN_RECEIPT;
|
|
45
|
-
MAX_WIDTH_IMAGES = MAX_WIDTH_IMAGES;
|
|
46
|
-
|
|
47
|
-
constructor() { }
|
|
48
|
-
|
|
49
|
-
ngOnInit() {
|
|
50
|
-
// console.log('msg::::', JSON.stringify(this.message));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/** */
|
|
54
|
-
showButtonInfo() {
|
|
55
|
-
//console.log('showButtonInfo');
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* apro il menu delle opzioni
|
|
60
|
-
* (metodo richiamato da html)
|
|
61
|
-
* alla chiusura controllo su quale opzione ho premuto e attivo l'azione corrispondete
|
|
62
|
-
*/
|
|
63
|
-
presentPopover(event, msg) {
|
|
64
|
-
// console.log('presentPopover');
|
|
65
|
-
// let popover = this.popoverCtrl.create(PopoverPage, { typePopup: TYPE_POPUP_DETAIL_MESSAGE, message: msg });
|
|
66
|
-
// popover.present({
|
|
67
|
-
// ev: event
|
|
68
|
-
// });
|
|
69
|
-
// /**
|
|
70
|
-
// *
|
|
71
|
-
// */
|
|
72
|
-
// popover.onDidDismiss((data: string) => {
|
|
73
|
-
// console.log(" ********* data::: ", data);
|
|
74
|
-
// if (data == 'logOut') {
|
|
75
|
-
// //this.logOut();
|
|
76
|
-
// }
|
|
77
|
-
// else if (data == 'ProfilePage') {
|
|
78
|
-
// if (this.chatManager.getLoggedUser()) {
|
|
79
|
-
// this.navCtrl.push(ProfilePage);
|
|
80
|
-
// }
|
|
81
|
-
// }
|
|
82
|
-
// });
|
|
83
|
-
}
|
|
84
|
-
}
|