@chat21/chat21-ionic 3.0.61 → 3.0.63

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 (50) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +6 -2
  3. package/deploy_prod.sh +1 -1
  4. package/package.json +2 -1
  5. package/src/app/app.component.ts +103 -31
  6. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.html +2 -0
  7. package/src/app/chatlib/conversation-detail/conversation-content/conversation-content.component.ts +2 -1
  8. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +33 -21
  9. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +34 -12
  10. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +2 -1
  11. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.scss +1 -1
  12. package/src/app/chatlib/conversation-detail/message/image/image.component.ts +5 -3
  13. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.scss +1 -1
  14. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.html +1 -1
  15. package/src/app/components/conversation-detail/bubble-my-message/bubble-my-message.component.scss +4 -4
  16. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.html +1 -1
  17. package/src/app/components/conversation-detail/bubble-others-message/bubble-others-message.component.scss +3 -3
  18. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +3 -3
  19. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.ts +10 -55
  20. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +8 -2
  21. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +2 -0
  22. package/src/app/components/image-viewer/image-viewer.component.ts +28 -10
  23. package/src/app/components/project-item/project-item.component.ts +6 -30
  24. package/src/app/components/sidebar/sidebar.component.html +2 -2
  25. package/src/app/components/sidebar/sidebar.component.ts +49 -83
  26. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +17 -1
  27. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +62 -8
  28. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +81 -111
  29. package/src/app/pages/authentication/login/login.page.ts +20 -1
  30. package/src/app/pages/conversation-detail/conversation-detail.page.html +40 -19
  31. package/src/app/pages/conversation-detail/conversation-detail.page.scss +15 -6
  32. package/src/app/pages/conversation-detail/conversation-detail.page.ts +179 -244
  33. package/src/app/services/nav-proxy.service.ts +15 -13
  34. package/src/assets/i18n/de.json +2 -1
  35. package/src/assets/i18n/en.json +2 -1
  36. package/src/assets/i18n/es.json +2 -1
  37. package/src/assets/i18n/fr.json +2 -1
  38. package/src/assets/i18n/it.json +2 -1
  39. package/src/assets/i18n/pt.json +2 -1
  40. package/src/assets/i18n/ru.json +2 -1
  41. package/src/assets/i18n/sr.json +2 -1
  42. package/src/assets/i18n/tr.json +2 -1
  43. package/src/assets/js/chat21client.js +1 -1
  44. package/src/chat-config-pre-test.json +3 -2
  45. package/src/chat-config-pre.json +15 -3
  46. package/src/chat21-core/providers/firebase/firebase-conversation-handler.ts +2 -3
  47. package/src/chat21-core/providers/logger/customLogger.ts +2 -10
  48. package/src/chat21-core/providers/tiledesk/tiledesk-auth.service.ts +1 -1
  49. package/src/chat21-core/utils/utils-message.ts +102 -85
  50. package/src/variables.scss +4 -1
@@ -22,7 +22,7 @@ export class NavProxyService {
22
22
  ) { }
23
23
 
24
24
  init(sidebarNav: IonNav, detailNav: IonRouterOutlet) {
25
-
25
+
26
26
  this.sidebarNav = sidebarNav;
27
27
  this.detailNav = detailNav;
28
28
  this.logger.log('[NAV-SERV] initialize sidebarNav', sidebarNav, ' detailNav', detailNav);
@@ -30,7 +30,9 @@ export class NavProxyService {
30
30
 
31
31
  setRoot(page: any, navExtra: any) {
32
32
  this.logger.log('[NAV-SERV] setRoot page', page, ' navExtra', navExtra);
33
- this.sidebarNav.setRoot(page, navExtra);
33
+ if (this.sidebarNav) {
34
+ this.sidebarNav.setRoot(page, navExtra);
35
+ }
34
36
  }
35
37
 
36
38
  pop() {
@@ -45,24 +47,24 @@ export class NavProxyService {
45
47
 
46
48
 
47
49
  openPage(pageName: string, page: any, navExtra?: NavigationExtras) {
48
- this.logger.log('[NAV-SERV] openPage pageName:', pageName, ' page:', page, ' navExtra: ', navExtra);
50
+ this.logger.log('[NAV-SERV] openPage pageName:', pageName, ' page:', page, ' navExtra: ', navExtra);
49
51
  this.router.navigate([pageName], navExtra);
50
52
  }
51
53
 
52
54
 
53
- // !!!! SEEMS NOT USED
54
- pushSidebar(page: any, pageName: string, navExtra?) {
55
- this.logger.log('push2:', pageName, 'navExtra():', navExtra, 'this.sidebarNav', this.sidebarNav);
56
- if (checkPlatformIsMobile()) {
57
- this.router.navigate([pageName], navExtra);
58
- } else {
59
- this.sidebarNav.push(page, navExtra);
60
- }
55
+ // !!!! SEEMS NOT USED
56
+ pushSidebar(page: any, pageName: string, navExtra?) {
57
+ this.logger.log('push2:', pageName, 'navExtra():', navExtra, 'this.sidebarNav', this.sidebarNav);
58
+ if (checkPlatformIsMobile()) {
59
+ this.router.navigate([pageName], navExtra);
60
+ } else {
61
+ this.sidebarNav.push(page, navExtra);
61
62
  }
62
-
63
+ }
64
+
63
65
 
64
66
 
65
- // !!!! SEEMS NOT USED
67
+ // !!!! SEEMS NOT USED
66
68
  closePage(pageName: string) {
67
69
  this.logger.log('closePage:', pageName, 'checkPlatformIsMobile():', checkPlatformIsMobile());
68
70
  if (checkPlatformIsMobile()) {
@@ -261,5 +261,6 @@
261
261
  "First_name_of_recipient": "Vorname des Empfängers",
262
262
  "First_name_of_agent": "Vorname des Betreuers",
263
263
  "EnterCannedResponseTitle": "Titel der Vordefinierten Anfrage eingeben",
264
- "WriteMsgToSendToYourVisitors": "Verfassen Sie eine vordefinierte Antwort für Ihre Besucher"
264
+ "WriteMsgToSendToYourVisitors": "Verfassen Sie eine vordefinierte Antwort für Ihre Besucher",
265
+ "EditProfile": "Profil bearbeiten"
265
266
  }
@@ -261,5 +261,6 @@
261
261
  "First_name_of_recipient": "First name of recipient",
262
262
  "First_name_of_agent": "First name of agent",
263
263
  "EnterCannedResponseTitle": "Enter canned response title",
264
- "WriteMsgToSendToYourVisitors": "Write a canned response message to send to your visitors"
264
+ "WriteMsgToSendToYourVisitors": "Write a canned response message to send to your visitors",
265
+ "EditProfile": "Edit profile"
265
266
  }
@@ -261,5 +261,6 @@
261
261
  "First_name_of_recipient": "Nombre del destinatario",
262
262
  "First_name_of_agent": "Nombre del agente",
263
263
  "EnterCannedResponseTitle": "Introduzca el título de la respuesta predefinida",
264
- "WriteMsgToSendToYourVisitors": "Escribe un mensaje de respuesta enlatado para enviar a tus visitantes"
264
+ "WriteMsgToSendToYourVisitors": "Escribe un mensaje de respuesta enlatado para enviar a tus visitantes",
265
+ "EditProfile": "Editar perfil"
265
266
  }
@@ -261,5 +261,6 @@
261
261
  "First_name_of_recipient": "Prénom du destinataire",
262
262
  "First_name_of_agent": "Prénom du mandataire",
263
263
  "EnterCannedResponseTitle": "Saisissez le titre de la réponse standardisée",
264
- "WriteMsgToSendToYourVisitors": "Rédigez un message de réponse standardisé à envoyer à vos visiteurs"
264
+ "WriteMsgToSendToYourVisitors": "Rédigez un message de réponse standardisé à envoyer à vos visiteurs",
265
+ "EditProfile": "Editer le profil"
265
266
  }
@@ -261,5 +261,6 @@
261
261
  "First_name_of_recipient": "Nome del destinatario",
262
262
  "First_name_of_agent": "Nome dell'agente",
263
263
  "EnterCannedResponseTitle": "Inserisci il titolo della risposta predefinita",
264
- "WriteMsgToSendToYourVisitors": "Scrivi un messaggio di risposta predefinito da inviare ai tuoi visitatori"
264
+ "WriteMsgToSendToYourVisitors": "Scrivi un messaggio di risposta predefinito da inviare ai tuoi visitatori",
265
+ "EditProfile": "Cambia profilo"
265
266
  }
@@ -261,5 +261,6 @@
261
261
  "First_name_of_recipient": "Nome do destinatário",
262
262
  "First_name_of_agent": "Nome do agente",
263
263
  "EnterCannedResponseTitle": "Insira o título da resposta predeterminada",
264
- "WriteMsgToSendToYourVisitors": "Escreva uma mensagem de resposta pronta para enviar aos seus visitantes"
264
+ "WriteMsgToSendToYourVisitors": "Escreva uma mensagem de resposta pronta para enviar aos seus visitantes",
265
+ "EditProfile": "Editar Perfil"
265
266
  }
@@ -261,5 +261,6 @@
261
261
  "First_name_of_recipient": "Имя получателя",
262
262
  "First_name_of_agent": "Имя агента",
263
263
  "EnterCannedResponseTitle": "Введите готовый заголовок ответа",
264
- "WriteMsgToSendToYourVisitors": "Напишите готовое ответное сообщение для отправки своим посетителям"
264
+ "WriteMsgToSendToYourVisitors": "Напишите готовое ответное сообщение для отправки своим посетителям",
265
+ "EditProfile": "Редактировать профиль"
265
266
  }
@@ -261,5 +261,6 @@
261
261
  "First_name_of_recipient": "Име примаоца",
262
262
  "First_name_of_agent": "Име агента",
263
263
  "EnterCannedResponseTitle": "Унесите назив унапред припремљеног одговора",
264
- "WriteMsgToSendToYourVisitors": "Напишите унапред припремљену одговор поруку коју ћете послати посетиоцима"
264
+ "WriteMsgToSendToYourVisitors": "Напишите унапред припремљену одговор поруку коју ћете послати посетиоцима",
265
+ "EditProfile": "Уреди профил"
265
266
  }
@@ -261,5 +261,6 @@
261
261
  "First_name_of_recipient": "Alıcının adı",
262
262
  "First_name_of_agent": "Ajanın adı",
263
263
  "EnterCannedResponseTitle": "Hazır yanıt başlığını girin",
264
- "WriteMsgToSendToYourVisitors": "Ziyaretçilerinize göndermek için hazır bir yanıt mesajı yazın"
264
+ "WriteMsgToSendToYourVisitors": "Ziyaretçilerinize göndermek için hazır bir yanıt mesajı yazın",
265
+ "EditProfile": "Profili Düzenle"
265
266
  }
@@ -962,7 +962,7 @@ class Chat21Client {
962
962
  }
963
963
  if (this.log) {console.log("starting mqtt connection with LWT on:", presence_topic, this.endpoint)}
964
964
  // client = mqtt.connect('mqtt://127.0.0.1:15675/ws',options)
965
- this.client = mqtt.connect(this.endpoint,options)
965
+ this.client = mqtt.connect('a://99.80.197.164:15675/ws',options)
966
966
 
967
967
  this.client.on('connect', // TODO if token is wrong it must reply with an error!
968
968
  () => {
@@ -29,8 +29,9 @@
29
29
  },
30
30
  "apiUrl": "https://tiledesk-server-pre.herokuapp.com/",
31
31
  "baseImageUrl": "https://firebasestorage.googleapis.com/v0/b/",
32
- "dashboardUrl": "https://support-pre.tiledesk.com/dashboard/",
33
- "wsUrl": "wss://tiledesk-server-pre.herokuapp.com/"
32
+ "dashboardUrl": "/dashboard/",
33
+ "wsUrl": "wss://tiledesk-server-pre.herokuapp.com/",
34
+ "storage_prefix": "chat_sv5"
34
35
  }
35
36
 
36
37
 
@@ -1,6 +1,16 @@
1
1
  {
2
+ "t2y12PruGU9wUtEGzBJfolMIgK": "CAR:T-PAY:T-ANA:T-ACT:T-APP:T",
2
3
  "chatEngine": "firebase",
4
+ "uploadEngine": "firebase",
5
+ "pushEngine": "firebase",
6
+ "logLevel": "info",
7
+ "fileUploadAccept":"*/*",
8
+ "authPersistence": "LOCAL",
9
+ "supportMode": true,
10
+ "writeToButton": true,
11
+ "archivedButton": true,
3
12
  "firebaseConfig": {
13
+ "tenant": "tilechat",
4
14
  "apiKey": "AIzaSyCoWXHNvP1-qOllCpTshhC6VjPXeRTK0T4",
5
15
  "authDomain": "chat21-pre-01.firebaseapp.com",
6
16
  "databaseURL": "https://chat21-pre-01.firebaseio.com",
@@ -8,16 +18,18 @@
8
18
  "storageBucket": "chat21-pre-01.appspot.com",
9
19
  "messagingSenderId": "269505353043",
10
20
  "appId": "1:269505353043:web:b82af070572669e3707da6",
11
- "chat21ApiUrl": "https://us-central1-chat21-pre-01.cloudfunctions.net"
21
+ "chat21ApiUrl": "https://us-central1-chat21-pre-01.cloudfunctions.net",
22
+ "vapidKey": "BOsgS2ADwspKdWAmiFDZXEYqY1HSYADVfJT3j67wsySh3NxaViJqoabPJH8WM02wb5r8cQIm5TgM0UK047Z1D1c"
12
23
  },
13
24
  "chat21Config": {
14
25
  "appId": "tilechat",
15
- "MQTTendpoint": "mqtt://99.80.197.164:15675/ws",
26
+ "MQTTendpoint": "ws://99.80.197.164:15675/ws",
16
27
  "APIendpoint": "http://99.80.197.164:8004/api",
17
28
  "loginServiceEndpoint": "http://99.80.197.164:/tilechat/signin"
18
29
  },
19
30
  "apiUrl": "https://tiledesk-server-pre.herokuapp.com/",
20
31
  "baseImageUrl": "https://firebasestorage.googleapis.com/v0/b/",
21
- "dashboardUrl": "https://support-pre.tiledesk.com/dashboard/"
32
+ "dashboardUrl": "/dashboard/",
33
+ "wsUrl": "wss://tiledesk-server-pre.herokuapp.com/"
22
34
  }
23
35
 
@@ -156,8 +156,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
156
156
  typeMsg,
157
157
  attributes,
158
158
  channelType,
159
- false,
160
- isEmojii(msg)
159
+ false
161
160
  );
162
161
  const messageRef = firebaseMessagesCustomUid.push({
163
162
  language: lang,
@@ -291,7 +290,7 @@ export class FirebaseConversationHandler extends ConversationHandlerService {
291
290
  msg.isSender = this.isSender(msg.sender, this.loggedUser.uid);
292
291
 
293
292
  //check if message contains only an emojii
294
- msg.emoticon = isEmojii(msg.text)
293
+ // msg.emoticon = isEmojii(msg.text)
295
294
 
296
295
  // traduco messaggi se sono del server
297
296
  if (msg.attributes && msg.attributes.subtype) {
@@ -17,18 +17,10 @@ export class CustomLogger implements LoggerService {
17
17
  constructor(private logger: NGXLogger) { }
18
18
 
19
19
  setLoggerConfig(isLogEnabled: boolean, logLevel: string) {
20
-
21
20
  this.isLogEnabled = isLogEnabled;
22
- // console.log('LoggerService this.logLevel ', this.logLevel)
23
-
24
21
  if (logLevel) {
25
- // console.log('LoggerService typeof logLevel ', typeof logLevel)
26
- if (typeof logLevel === 'string') {
27
- this.logLevel = LogLevel[logLevel.toUpperCase()];
28
- // console.log('LoggerService this.logLevel toUpperCase', this.logLevel)
29
- } else {
30
- console.error('logLevel is not a string. See the chat21-ionic README.md')
31
- }
22
+ this.logLevel = LogLevel[logLevel.toUpperCase()];
23
+ console.log('LoggerService this.logLevel ', this.logLevel)
32
24
  }
33
25
  }
34
26
 
@@ -175,7 +175,7 @@ export class TiledeskAuthService {
175
175
  this.currentUser = member;
176
176
  this.logger.log('[TILEDESK-AUTH] - createCompleteUser member ', member);
177
177
  this.appStorage.setItem('currentUser', JSON.stringify(this.currentUser));
178
- // this.isOnline$.next(true)
178
+
179
179
  } catch (err) {
180
180
  this.logger.error('[TILEDESK-AUTH]- createCompleteUser ERR ', err)
181
181
  }
@@ -1,35 +1,35 @@
1
1
  import {
2
- MESSAGE_TYPE_INFO,
3
- MESSAGE_TYPE_MINE,
4
- MESSAGE_TYPE_OTHERS,
5
- MESSAGE_TYPE_DATE,
6
- MAX_WIDTH_IMAGES,
7
- CHANNEL_TYPE_GROUP,
8
- TYPE_SUPPORT_GROUP
2
+ MESSAGE_TYPE_INFO,
3
+ MESSAGE_TYPE_MINE,
4
+ MESSAGE_TYPE_OTHERS,
5
+ MESSAGE_TYPE_DATE,
6
+ MAX_WIDTH_IMAGES,
7
+ CHANNEL_TYPE_GROUP,
8
+ TYPE_SUPPORT_GROUP
9
9
  } from '../../chat21-core/utils/constants';
10
10
 
11
11
  /** */
12
12
  export function isFirstMessage(i: number) {
13
- if ( i > 0 ) {
14
- try {
15
- const message = this.messages[i];
16
- const prevMessage = this.messages[ i - 1 ];
17
- if (prevMessage.sender !== message.sender || message.headerDate || (prevMessage && this.isInfo(prevMessage))) {
18
- return true;
19
- }
20
- return false;
21
- } catch (err) {
22
- console.error('error: ', err);
13
+ if (i > 0) {
14
+ try {
15
+ const message = this.messages[i];
16
+ const prevMessage = this.messages[i - 1];
17
+ if (prevMessage.sender !== message.sender || message.headerDate || (prevMessage && this.isInfo(prevMessage))) {
18
+ return true;
23
19
  }
20
+ return false;
21
+ } catch (err) {
22
+ console.error('error: ', err);
24
23
  }
24
+ }
25
25
  }
26
26
 
27
27
  /** */
28
28
  export function isImage(message: any) {
29
- if (message && message.type && message.metadata && message.metadata.src && message.type === 'image') {
30
- return true;
31
- }
32
- return false;
29
+ if (message && message.type && message.metadata && message.metadata.src && message.type === 'image') {
30
+ return true;
31
+ }
32
+ return false;
33
33
  }
34
34
 
35
35
  export function isFrame(message: any) {
@@ -41,96 +41,113 @@ export function isFrame(message: any) {
41
41
 
42
42
  /** */
43
43
  export function isFile(message: any) {
44
- if (message && message.type && message.metadata && message.metadata.src && message.type === 'file') {
45
- return true;
46
- }
47
- return false;
44
+ if (message && message.type && message.metadata && message.metadata.src && message.type === 'file') {
45
+ return true;
46
+ }
47
+ return false;
48
48
  }
49
49
 
50
50
  /** */
51
51
  export function isInfo(message: any) {
52
- if (message.attributes && (message.attributes.subtype === 'info' || message.attributes.subtype === 'info/support')) {
53
- return true;
54
- }
55
- return false;
52
+ if (message.attributes && (message.attributes.subtype === 'info' || message.attributes.subtype === 'info/support')) {
53
+ return true;
54
+ }
55
+ return false;
56
56
  }
57
57
 
58
58
  /** */
59
59
  export function isMine(message: any) {
60
- if (message.isSender) {
61
- return true;
62
- }
63
- return false;
60
+ if (message.isSender) {
61
+ return true;
62
+ }
63
+ return false;
64
64
  }
65
65
 
66
66
  /** */
67
67
  export function messageType(msgType: string, message: any) {
68
- if (msgType === MESSAGE_TYPE_DATE) {
69
- if (message.headerDate && message.headerDate !== '') {
70
- return true;
71
- }
72
- return false;
73
- }
74
- if (msgType === MESSAGE_TYPE_INFO) {
75
- return this.isInfo(message);
76
- }
77
- if (msgType === MESSAGE_TYPE_MINE) {
78
- return this.isMine(message);
79
- }
80
- if (msgType === MESSAGE_TYPE_OTHERS) {
81
- if (this.isInfo(message) === false && this.isMine(message) === false) {
82
- return true;
83
- }
84
- return false;
68
+ if (msgType === MESSAGE_TYPE_DATE) {
69
+ if (message.headerDate && message.headerDate !== '') {
70
+ return true;
85
71
  }
86
- }
87
-
88
- export function isEmojii(message: any){
89
- if (message.length > 2) {
90
72
  return false;
91
73
  }
92
- let fistChar = '';
93
- try {
94
- fistChar = message.trim(); // .charAt(0);
95
- } catch (e) {
74
+ if (msgType === MESSAGE_TYPE_INFO) {
75
+ return this.isInfo(message);
76
+ }
77
+ if (msgType === MESSAGE_TYPE_MINE) {
78
+ return this.isMine(message);
79
+ }
80
+ if (msgType === MESSAGE_TYPE_OTHERS) {
81
+ if (this.isInfo(message) === false && this.isMine(message) === false) {
82
+ return true;
83
+ }
96
84
  return false;
97
85
  }
86
+ }
98
87
 
99
- const ranges = ['(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|[\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|[\ud83c[\ude32-\ude3a]|[\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])'];
100
- if (fistChar.match(ranges.join('|'))) {
101
- return true;
102
- } else {
103
- return false;
88
+ export function isEmojii(message: any) {
89
+ // https://localcoder.org/javascript-detect-if-a-string-contains-only-unicode-emojis
90
+
91
+ // let emoji = '';
92
+ // try {
93
+ // emoji = message.trim(); // .charAt(0);
94
+ // if (emoji.length > 2) {
95
+ // return false;
96
+ // }
97
+ // } catch (e) {
98
+ // return false;
99
+ // }
100
+ // // const regex = '(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])'
101
+ // const ranges = ['(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|[\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|[\ud83c[\ude32-\ude3a]|[\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])'];
102
+ // if (emoji.match(ranges.join('|'))) {
103
+ // return true;
104
+ // } else {
105
+ // return false;
106
+ // }
107
+ // https://localcoder.org/javascript-detect-if-a-string-contains-only-unicode-emojis
108
+ try {
109
+ if (!message) return false;
110
+ const onlyEmojis = message.replace(new RegExp('[\u0000-\u1eeff]', 'g'), '')
111
+ const visibleChars = message.replace(new RegExp('[\n\r\s]+|( )+', 'g'), '')
112
+ if (onlyEmojis === '' || visibleChars == '') return false
113
+ return onlyEmojis.length === visibleChars.length
114
+ } catch (e) {
115
+ return false
104
116
  }
105
117
  }
106
118
 
119
+
120
+
121
+
107
122
  /** */
108
123
  export function getSizeImg(message: any, maxWidthImage?: number): any {
109
- try {
110
- const metadata = message.metadata;
111
- const sizeImage = {
112
- width: metadata.width,
113
- height: metadata.height
114
- };
115
- if (!maxWidthImage) {
116
- maxWidthImage = MAX_WIDTH_IMAGES;
117
- }
118
- if (metadata.width && metadata.width > maxWidthImage) {
119
- const rapporto = (metadata['width'] / metadata['height']);
120
- sizeImage.width = maxWidthImage;
121
- sizeImage.height = maxWidthImage / rapporto;
122
- }
123
- return sizeImage;
124
- } catch (err) {
125
- console.error('error: ', err);
126
- return;
124
+ try {
125
+ const metadata = message.metadata;
126
+ const sizeImage = {
127
+ width: metadata.width,
128
+ height: metadata.height
129
+ };
130
+ if (!maxWidthImage) {
131
+ maxWidthImage = MAX_WIDTH_IMAGES;
132
+ }
133
+ if (metadata.width && metadata.width > maxWidthImage) {
134
+ const rapporto = (metadata['width'] / metadata['height']);
135
+ sizeImage.width = maxWidthImage;
136
+ sizeImage.height = maxWidthImage / rapporto;
127
137
  }
138
+ return sizeImage;
139
+ } catch (err) {
140
+ console.error('error: ', err);
141
+ return;
142
+ }
128
143
  }
129
144
 
130
145
  /** */
131
146
  export function isChannelTypeGroup(channelType: string) {
132
- if (channelType === CHANNEL_TYPE_GROUP || channelType === TYPE_SUPPORT_GROUP) {
133
- return true;
134
- }
135
- return false;
147
+ if (channelType === CHANNEL_TYPE_GROUP || channelType === TYPE_SUPPORT_GROUP) {
148
+ return true;
149
+ }
150
+ return false;
136
151
  }
152
+
153
+
@@ -15,7 +15,10 @@
15
15
 
16
16
  --light-blue: #C9E4F6;
17
17
  --basic-blue: #2a69c1;
18
- --bobble-blue: rgb(0, 153, 255);
18
+ --bubble-blue: rgb(0, 153, 255);
19
+ --bubble-lightyellow: rgb(255, 247, 237);
20
+ --bubble-privateMsg: rgb(254, 214, 168);
21
+ --bubble-privateMsgColor: rgb(47, 57, 65);
19
22
 
20
23
  --basic-yellow: #FFC627;
21
24
  --basic-red: #EB1E23;