@chat21/chat21-ionic 3.0.64 → 3.0.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +34 -2
  2. package/deploy_amazon_beta.sh +0 -0
  3. package/deploy_amazon_prod.sh +1 -0
  4. package/deploy_pre.sh +39 -6
  5. package/package.json +8 -3
  6. package/publiccode.yml +110 -0
  7. package/src/app/app.component.ts +40 -66
  8. package/src/app/app.module.ts +1 -0
  9. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.html +2 -2
  10. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.scss +0 -1
  11. package/src/app/chatlib/conversation-detail/ion-conversation-detail/ion-conversation-detail.component.ts +2 -39
  12. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.html +18 -6
  13. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +1 -11
  14. package/src/app/chatlib/conversation-detail/message/html/html.component.html +1 -0
  15. package/src/app/chatlib/conversation-detail/message/html/html.component.scss +79 -0
  16. package/src/app/chatlib/conversation-detail/message/html/html.component.spec.ts +25 -0
  17. package/src/app/chatlib/conversation-detail/message/html/html.component.ts +33 -0
  18. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +1 -1
  19. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +18 -30
  20. package/src/app/chatlib/list-conversations-component/list-conversations/list-conversations.component.ts +0 -1
  21. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +7 -5
  22. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +21 -0
  23. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component_2.html +116 -0
  24. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.html +2 -2
  25. package/src/app/components/conversation-detail/message-text-area/message-text-area.component.ts +2 -2
  26. package/src/app/components/project-item/project-item.component.ts +5 -0
  27. package/src/app/components/sidebar/sidebar.component.ts +8 -15
  28. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +12 -23
  29. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +3 -0
  30. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +88 -136
  31. package/src/app/directives/safe-html.pipe.ts +2 -2
  32. package/src/app/directives/truncate.pipe.spec.ts +8 -0
  33. package/src/app/directives/truncate.pipe.ts +15 -0
  34. package/src/app/pages/authentication/login/login.page.ts +0 -1
  35. package/src/app/pages/conversation-detail/conversation-detail.module.ts +3 -2
  36. package/src/app/pages/conversation-detail/conversation-detail.page.html +4 -2
  37. package/src/app/pages/conversation-detail/conversation-detail.page.ts +56 -71
  38. package/src/app/pages/conversations-list/conversations-list.page.html +21 -12
  39. package/src/app/pages/conversations-list/conversations-list.page.ts +129 -367
  40. package/src/app/pages/loader-preview/loader-preview.module.ts +1 -2
  41. package/src/app/shared/shared.module.ts +4 -0
  42. package/src/assets/i18n/ar.json +266 -0
  43. package/src/assets/js/chat21client.js +58 -60
  44. package/src/chat21-core/models/conversation.ts +2 -2
  45. package/src/chat21-core/providers/abstract/conversations-handler.service.ts +1 -1
  46. package/src/chat21-core/providers/firebase/firebase-archivedconversations-handler.ts +26 -21
  47. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +78 -23
  48. package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +16 -13
  49. package/src/chat21-core/utils/constants.ts +1 -1
  50. package/src/chat21-core/utils/utils-message.ts +2 -3
  51. package/src/global.scss +2 -2
  52. package/deploy_prod.sh +0 -11
@@ -7,7 +7,6 @@ import { LoaderPreviewPage } from './loader-preview.page';
7
7
  import { TranslateLoader, TranslateModule} from '@ngx-translate/core';
8
8
  import { createTranslateLoader } from '../../../chat21-core/utils/utils';
9
9
  import { HttpClient } from '@angular/common/http';
10
- import { SafeHtmlPipe } from 'src/app/directives/safe-html.pipe';
11
10
 
12
11
 
13
12
  @NgModule({
@@ -24,6 +23,6 @@ import { SafeHtmlPipe } from 'src/app/directives/safe-html.pipe';
24
23
  }
25
24
  })
26
25
  ],
27
- declarations: [LoaderPreviewPage, SafeHtmlPipe]
26
+ declarations: [LoaderPreviewPage]
28
27
  })
29
28
  export class LoaderPreviewPageModule {}
@@ -1,3 +1,4 @@
1
+ import { HtmlComponent } from './../chatlib/conversation-detail/message/html/html.component';
1
2
  import { BubbleOthersMessageComponent } from './../components/conversation-detail/bubble-others-message/bubble-others-message.component';
2
3
 
3
4
  import { TextComponent } from '../chatlib/conversation-detail/message/text/text.component';
@@ -46,6 +47,7 @@ import { DefaultTooltipOptions } from 'src/chat21-core/utils/utils';
46
47
  import { MatTooltipModule } from '@angular/material/tooltip';
47
48
  import { MatSnackBarModule } from '@angular/material/snack-bar';
48
49
  import { MatSlideToggleModule } from '@angular/material/slide-toggle';
50
+ import { SafeHtmlPipe } from '../directives/safe-html.pipe';
49
51
 
50
52
  // import { MessageTextAreaComponent } from '../components/conversation-detail/message-text-area/message-text-area.component'; // MessageTextAreaComponent is part of the declarations ConversationDetailPageModule
51
53
 
@@ -75,6 +77,7 @@ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
75
77
  InfoMessageComponent,
76
78
  ReturnReceiptComponent,
77
79
  TextComponent,
80
+ HtmlComponent,
78
81
  BubbleDayMessageComponent,
79
82
  BubbleSystemMessageComponent,
80
83
  BubbleMyMessageComponent,
@@ -87,6 +90,7 @@ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
87
90
  MarkedPipe,
88
91
  AutofocusDirective,
89
92
  HtmlEntitiesEncodePipe,
93
+ SafeHtmlPipe,
90
94
  OptionHeaderComponent
91
95
  ],
92
96
  exports: [
@@ -0,0 +1,266 @@
1
+ {
2
+ "LABEL_TU": "أنت: ",
3
+ "LABEL_MSG_PUSH_START_CHAT": "لا محادثة حتى الآن",
4
+ "LABEL_MSG_START_CHAT": "ابدأ الدردشة",
5
+ "LABEL_ACTIVE_NOW": "متوفرة",
6
+ "LABEL_AVAILABLE": "متوفرة",
7
+ "LABEL_NOT_AVAILABLE": "غير متاح",
8
+ "LABEL_NO_MSG_HERE": "لا توجد رسالة هنا حتى الآن ...",
9
+ "LABEL_TODAY": "اليوم",
10
+ "LABEL_TOMORROW": "في الامس",
11
+ "LABEL_LAST_ACCESS": "آخر ولوج",
12
+ "LABEL_TO": "في",
13
+ "ARRAY_DAYS": [
14
+ "الاثنين",
15
+ "يوم الثلاثاء",
16
+ "الأربعاء",
17
+ "يوم الخميس",
18
+ "جمعة",
19
+ "السبت",
20
+ "الأحد"
21
+ ],
22
+ "LABEL_SEND": "إرسال",
23
+ "ID_CONVERSATION": "معرف محادثة",
24
+ "LABEL_CREATED_THE": "تم إنشاء المجموعة في",
25
+ "LABEL_INFO_ATTRIBUTE": "صفات",
26
+ "LABEL_INFO_ADVANCED": "متقدم",
27
+ "LABEL_CLIENT": "عميل ",
28
+ "LABEL_SOURCEPAGE": "مصدر ",
29
+ "LABEL_DEPARTMENT_ID": "معرف القسم ",
30
+ "LABEL_DEPARTMENT_NAME": " قسم، أقسام ",
31
+ "requester_id": "معرف مقدم الطلب",
32
+ "projectId": "معرف المشروع ",
33
+ "LABEL_NAME": "اسم االمستخدم ",
34
+ "LABEL_EMAIL": "بريد الالكتروني ",
35
+ "LABEL_MEMBERS": "مشاركون",
36
+ "LABEL_INFO_MESSAGE": "رسالة معلومات",
37
+ "LABEL_READ_BY": "قرأ من قبل",
38
+ "LABEL_STATUS_MESSAGE": "حالة",
39
+ "LABEL_SENT_THE": "أرسلت في",
40
+ "LABEL_SENT_BY": "من",
41
+ "LABEL_GUEST": "زائر",
42
+ "LABEL_CREATE_TICKET": "إنشاء تذكرة",
43
+ "LABEL_SEND_BY_EMAIL": "ارسل بالبريد الإلكترونى",
44
+ "LABEL_VIDEO_CHAT": "مكالمة فيديو",
45
+ "LABEL_LEAVE_GROUP": "اترك المجموعة",
46
+ "LABEL_CLOSE_GROUP": "اغلاق",
47
+ "ALERT_TITLE": "انتباه!",
48
+ "CLOSE_ALERT_CONFIRM_LABEL": "موافق",
49
+ "CLOSE_ALERT_CANCEL_LABEL": "إلغاء",
50
+ "LEAVE_ALERT_MSG": "مغادرة المجموعة؟",
51
+ "CLOSE_ALERT_MSG": "أغلق المحادثة؟",
52
+ "VIDEOCHAT_ALERT_MSG": "الخدمة غير متوفرة",
53
+ "CLOSING_CONVERSATION_SPINNER_MSG": "أرجو الإنتظار.<br> نحن نغلق المحادثة",
54
+ "CONVERSATION_CLOSED_ALERT_MSG": "تم إغلاق المحادثة بنجاح.",
55
+ "CANNOT_CLOSE_CONVERSATION_ALERT_MSG": "تعذر إغلاق المحادثة",
56
+ "LEAVING_GROUP_SPINNER_MSG": "أرجو الإنتظار.<br> أنت تغادر المجموعة",
57
+ "CONVERSATION_LEFT_ALERT_MSG": "تم ترك المجموعة بنجاح.",
58
+ "CANNOT_LEAVE_GROUP_ALERT_MSG": "لا يمكن ترك المجموعة",
59
+ "GREETING": "مرحبًا {{ value }}",
60
+ "ARCHIVED_CONVERSATIONS_PAGE_NO_CONVERSATIONS_ARCHIVED": "لا توجد محادثة في الأرشيف",
61
+ "INFO_SUPPORT_USER_ADDED_SUBJECT": "أنت",
62
+ "INFO_SUPPORT_USER_ADDED_YOU_VERB": "تمت إضافته إلى ",
63
+ "INFO_SUPPORT_USER_ADDED_VERB": "انضم",
64
+ "INFO_SUPPORT_USER_ADDED_COMPLEMENT": "المحادثة",
65
+ "INFO_SUPPORT_USER_ADDED_MESSAGE": "{{ subject }} {{ verb }} {{ complement }}",
66
+ "INFO_SUPPORT_CHAT_REOPENED": "تمت إعادة فتح الدردشة",
67
+ "INFO_SUPPORT_CHAT_CLOSED": "الدردشة مغلقة",
68
+ "INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "تم تعيين طلب دعم جديد لك",
69
+ "LABEL_PROFILE": "الملف الشخصي",
70
+ "LABEL_CLOSE": "مغلق",
71
+ "LABEL_DISCONNECT": "قطع الاتصال",
72
+ "LABEL_NEW_CHAT": "محادثة جديدة",
73
+ "LABEL_FORGOT_PASSWORD": "هل نسيت كلمة المرور الخاصة بك؟",
74
+ "LABEL_SIGNIN": "تسجيل الدخول",
75
+ "LABEL_SIGNIN_TO": "تسجيل الدخول إلى",
76
+ "LABEL_SIGNIN_ERROR": "خطأ في تسجيل الدخول",
77
+ "LABEL_PASSWORD": "كلمة المرور",
78
+ "LABEL_ERROR_EMAIL": "أدخل عنوان بريد إلكتروني صالح.",
79
+ "LABEL_ERROR_PASSWORD": "يجب أن تتكون كلمة المرور من 6 أحرف على الأقل.",
80
+ "LABEL_LOGIN": "تسجيل الدخول",
81
+ "LABEL_LOGOUT": "تسجيل خروج",
82
+ "LABEL_WELCOME_TO": "مرحبا بك في",
83
+ "LABEL_SIGNUP": "اشتراك",
84
+ "LABEL_ALREDY_HAVE_AN_ACCOUNT": "هل لديك حساب؟",
85
+ "LABEL_DONT_HAVE_AN_ACCOUNT_YET": "لا تملك حسابا حتى الآن؟",
86
+ "LABEL_FORGOT_YOUR_PASSWORD": "نسيت رقمك السري؟",
87
+ "LABEL_CLICK_HERE": "انقر هنا",
88
+ "LABEL_REGISTRATION": "تسجيل",
89
+ "LABEL_PLACEHOLDER_EMAIL": "بريدك الالكتروني",
90
+ "LABEL_PLACEHOLDER_PASSWORD": "كلمة السر خاصتك",
91
+ "LABEL_PLACEHOLDER_NAME": "اسمك",
92
+ "LABEL_PLACEHOLDER_LAST_NAME": "اسمك الاخير",
93
+ "LABEL_LAST_NAME": "الكنية",
94
+ "LABEL_FIELD_NOT_EMPTY": "لا يمكن أن يكون الحقل فارغًا.",
95
+ "LABEL_NEW_PASSWORD": "أنشئ كلمة مرور جديدة",
96
+ "LABEL_CLOSED": "مغلق",
97
+ "LABEL_INFO": "معلومات",
98
+ "ALERT_NOTIFICATION": "تحذير: إرسال الإخطارات معطل ، يغير إعدادات المتصفح للسماح بإرسال الإشعارات.",
99
+ "LABEL_EXTERNAL_ID": "معرف خارجي",
100
+ "LABEL_IAT": "إيات",
101
+ "LABEL_REQUEST_DETAIL": "طلب التفاصيل",
102
+ "LABEL_ENTER_MSG": "أدخل رسالة أو اضغط على / للردود الجاهزة",
103
+ "LABEL_ENTER_MSG_SHORT": "أدخل رسالة",
104
+ "LABEL_ENTER_MSG_SHORTER": "يدخل...",
105
+ "LABEL_MSG_LOGIN_TILEDESK": "اذهب إلى تسجيل الدخول لبدء الدردشة",
106
+ "LABEL_ARCHIVED": "مؤرشف",
107
+ "LABEL_INFO_CONVERSATION": "محادثة معلومات",
108
+ "LABEL_INFO_USER": "مستخدم المعلومات",
109
+ "LABEL_IS_WRITING": "الكتابة",
110
+ "LABEL_VERSION": "الإصدار",
111
+ "LABEL_CONTACTS": "جهات الاتصال",
112
+ "LABEL_PLACEHOLDER": "اكتب رسالتك ..",
113
+ "LABEL_START_NW_CONV": "محادثة جديدة",
114
+ "LABEL_FIRST_MSG": "صِف مشكلتك بعد قليل ، وسيتواصل معك أحد الوكلاء.",
115
+ "LABEL_FIRST_MSG_NO_AGENTS": "🤔 جميع المشغلين غير متصلين في الوقت الحالي. يمكنك على أي حال وصف مشكلتك. سيتم تعيينه لفريق الدعم الذي سيرد عليك في أقرب وقت ممكن.",
116
+ "LABEL_SELECT_TOPIC": "اختر عنوانا",
117
+ "LABEL_COMPLETE_FORM": "أكمل النموذج لبدء محادثة مع الوكيل المتاح التالي.",
118
+ "LABEL_FIELD_NAME": "اسم",
119
+ "LABEL_ERROR_FIELD_NAME": "حقل مطلوب (بحد أدنى 5 أحرف).",
120
+ "LABEL_FIELD_EMAIL": "بريد الالكتروني",
121
+ "LABEL_ERROR_FIELD_EMAIL": "أدخل عنوان بريد إلكتروني صالح.",
122
+ "LABEL_WRITING": "يكتب...",
123
+ "AGENT_NOT_AVAILABLE": " غير متصل على الانترنت",
124
+ "AGENT_AVAILABLE": " متصل",
125
+ "GUEST_LABEL": "زائر",
126
+ "ALL_AGENTS_OFFLINE_LABEL": "جميع المشغلين غير متصلون في الوقت الحالي",
127
+ "LABEL_LOADING": "جار التحميل...",
128
+ "CALLOUT_TITLE_PLACEHOLDER": "تحتاج مساعدة؟",
129
+ "CALLOUT_MSG_PLACEHOLDER": "انقر هنا وابدأ الدردشة معنا!",
130
+ "CUSTOMER_SATISFACTION": "رضا العملاء",
131
+ "YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "رأيك في خدمة العملاء لدينا",
132
+ "DOWNLOAD_TRANSCRIPT": "تنزيل النص",
133
+ "BACK": "عودة",
134
+ "YOUR_RATING": "تقييمك",
135
+ "WRITE_YOUR_OPINION": "أكتب رأيك ... (اختياري)",
136
+ "SUBMIT": "إرسال",
137
+ "THANK_YOU_FOR_YOUR_EVALUATION": "شكرا لتقييمك",
138
+ "YOUR_RATING_HAS_BEEN_RECEIVED": "لقد تم استلام تقييمك",
139
+ "ALERT_LEAVE_CHAT": "هل تريد مغادرة الدردشة؟",
140
+ "YES": "نعم",
141
+ "NO": "رقم",
142
+ "BUTTON_CLOSE_TO_ICON": "تصغير الدردشة",
143
+ "BUTTON_EDIT_PROFILE": "تحديث الملف",
144
+ "RATE_CHAT": "معدل الدردشة",
145
+ "WELLCOME_TITLE": "مرحبًا ، مرحبًا بك في Tiledesk 👋",
146
+ "WELLCOME_MSG": "كيف يمكن أن نساعد؟",
147
+ "WELLCOME": "مرحبا",
148
+ "OPTIONS": "والخيارات",
149
+ "SOUND_OFF": "الصوت مقفل",
150
+ "SOUND_ON": "الصوت مفعل",
151
+ "LOGOUT": "تسجيل خروج",
152
+ "CLOSE": "أغلق",
153
+ "PREV_CONVERSATIONS": "محادثاتك",
154
+ "YOU": "أنت",
155
+ "SHOW_ALL_CONV": "عرض الكل",
156
+ "START_A_CONVERSATION": "بدء محادثة",
157
+ "NO_CONVERSATION": "لا محادثة",
158
+ "SEE_PREVIOUS": "انظر السابق",
159
+ "WAITING_TIME_FOUND": "يرد الفريق عادةً بـ $reply_time",
160
+ "WAITING_TIME_NOT_FOUND": "سيقوم الفريق بالرد في أقرب وقت ممكن",
161
+ "CLOSED": "مغلق",
162
+ "PleaseSelectChatToStartMessaging": "الرجاء تحديد دردشة لبدء المراسلة",
163
+ "FromThisAreNew": "------------------",
164
+ "Preview": "معاينة",
165
+ "AddACaption": "إضافة تسمية توضيحية",
166
+ "AnErrorOccurredWhileUnsubscribingFromNotifications": "عفواً! حدث خطأ أثناء إلغاء الاشتراك من الإشعارات",
167
+ "SIGNIN_ERROR_USER_NOT_FOUND": "المصادقة فشلت. المستخدم ليس موجود.",
168
+ "SIGNIN_ERROR_USER_WRONG_PSW": "المصادقة فشلت. كلمة مرور خاطئة.",
169
+ "Email is required": "البريد الالكتروني مطلوب.",
170
+ "Email must be a valid email": "يجب أن يكون البريد الإلكتروني بريدًا إلكترونيًا صالحًا.",
171
+ "Password is required": "كلمة المرور مطلوبة.",
172
+ "Password must be at least 6 characters long": "الرقم السري يجب الا يقل عن 6 احرف على الاقل.",
173
+ "UPLOAD_FILE_ERROR": "حدث خطأ غير متوقع أثناء تحميل الملف",
174
+ "DROP_IMAGE_HERE_TO_SEND_IT": "أفلت الصورة هنا لإرسالها",
175
+ "ONLY_IMAGE_FILES_ARE_ALLOWED_TO_PASTE": "يُسمح فقط بلصق ملفات الصور والنصوص",
176
+ "FAILED_TO_UPLOAD_THE_FORMAT_IS_NOT_SUPPORTED": "فشل التحميل: التنسيق غير مدعوم",
177
+ "SENT_AN_IMAGE": "أرسل صورة",
178
+ "SENT_AN_ATTACHMENT": "أرسل مرفقًا",
179
+ "NO_INFORMATION_AVAILABLE": "لا توجد معلومات متاحة",
180
+ "CONTACT_ID": "معرف جهة الاتصال",
181
+ "USER_ID": "معرف المستخدم",
182
+ "CLOSE_TOAST": "قريب",
183
+ "WAITING_FOR_NETWORK": "في انتظار الشبكة",
184
+ "Available": "متوفرة",
185
+ "Unavailable": "غير متوفره",
186
+ "Busy": "مشغول",
187
+ "YouAreAboutToJoinThisChat": "أنت على وشك الانضمام إلى هذه الدردشة",
188
+ "Cancel": "يلغي",
189
+ "AreYouSure": "هل أنت متأكد؟",
190
+ "UnassignedConversations": "المحادثات غير المعينة",
191
+ "NewConversations": "محادثات جديدة",
192
+ "UPLOAD": "تحميل",
193
+ "CANNED_RESPONSES": "الردود الجاهزة",
194
+ "NO_CANNED_RESPONSES": "لا توجد ردود جاهزة",
195
+ "THERE_ARE_NO_CANNED_RESPONSES_AVAILABLE": "لا توجد ردود جاهزة متاحة",
196
+ "TO_CREATE_THEM_GO_TO_THE_PROJECT": "لإنشائها ، انتقل إلى المشروع (يمكنك النقر فوق اسم المشروع المتاح في الشريط الجانبي الأيمن) وتحت عنصر القائمة \"الإعدادات\" في الشريط الجانبي للوحة التحكم ، انقر فوق \"الردود الجاهزة\" ثم على الزر \"إنشاء رد\"",
197
+ "YES_CANNED_RESPONSES": "عرض الردود الجاهزة بالنقر فوق الزر ⚡️ أو عن طريق كتابة / في منطقة النص ، يمكنك أيضًا تصفية القائمة عن طريق الكتابة بعد /",
198
+ "VIEW_ALL_CONVERSATIONS": "عرض جميع المحادثات",
199
+ "CONVERSATIONS_IN_QUEUE": "المحادثات في قائمة الانتظار ، اختر واحدة",
200
+ "CONVERSATION_IN_QUEUE": "محادثة في قائمة الانتظار ، اخترها",
201
+ "NO_CONVERSATION_IN_QUEUE": "لا محادثة في قائمة الانتظار",
202
+ "PIN_A_PROJECT": "تثبيت مشروع",
203
+ "PINNED_PROJECT": "مشروع مثبت",
204
+ "CHANGE_PINNED_PROJECT": "تغيير المشروع المثبت",
205
+ "CHANGE_TO_AVAILABLE_UNAVAILABLE": "التغيير إلى متاح / غير متاح",
206
+ "CHANGE_TO_YOUR_STATUS_TO_AVAILABLE": "تغيير حالتك إلى متاح",
207
+ "CHANGE_TO_YOUR_STATUS_TO_UNAVAILABLE": "تغيير حالتك إلى غير متوفر",
208
+ "ALL_CONVS_SERVED": "هل تم تقديم جميع المحادثات؟ أحسنت!",
209
+ "PaydPlanName": "{{projectprofile}} خطة",
210
+ "PaydPlanNamePro": "خطة احترافية",
211
+ "PaydPlanNameEnterprise": "خطة المؤسسة",
212
+ "ProPlanTrial": "خطة Pro (نسخة تجريبية)",
213
+ "FreePlan": "خطة مجانية",
214
+ "SubscriptionPaymentProblem": "مشكلة دفع الاشتراك",
215
+ "ThePlanHasExpired": "انتهت صلاحية الخطة",
216
+ "owner": "صاحب",
217
+ "admin": "مدير",
218
+ "agent": "وكيل",
219
+ "Conversations": "المحادثات",
220
+ "Apps": "تطبيقات",
221
+ "Analytics": "تحليلات",
222
+ "Activities": "أنشطة",
223
+ "History": "تاريخ",
224
+ "Settings": "إعدادات",
225
+ "Resolve": "حل",
226
+ "Archive": "أرشيف",
227
+ "ActionNotAllowed": "الإجراء غير مسموح به",
228
+ "YouAreNoLongerAmongTheTeammatesManagingThisConversation": "لم تعد من بين زملائك في الفريق الذين يديرون هذه المحادثة",
229
+ "TicketSuccessfullyCreated":"تم إنشاء التذكرة بنجاح",
230
+ "Continue":"استمر",
231
+ "ViewArchivedConversations":"المحادثات المؤرشفة",
232
+ "ViewContactsList":"قائمة جهات الاتصال",
233
+ "AddAsCannedResponse":"إضافة كإجابة جاهزة",
234
+ "AddNewCannedResponse":"إضافة رد جاهز جديد",
235
+ "TitleIsRequired":"العنوان مطلوب",
236
+ "MessageIsRequired":"الرسالة مطلوبة",
237
+ "Already_present_in_the_dashboard_json":"........",
238
+ "CreateTicket": "إنشاء تذكرة",
239
+ "Requester": "مقدم الطلب",
240
+ "ViewRequesterDetails": "عرض تفاصيل مقدم الطلب",
241
+ "Priority": "أولوية",
242
+ "urgent": "العاجلة",
243
+ "high": "عالٍ",
244
+ "medium": "متوسطة",
245
+ "low": "منخفض",
246
+ "SelectRequester": "حدد مقدم الطلب",
247
+ "AddRequester": "إضافة مقدم الطلب",
248
+ "Subject": "المادة",
249
+ "SelectAssignee": "حدد المحال إليه",
250
+ "Message": "رسالة",
251
+ "CreateNewRequester": "إنشاء متقدم جديد",
252
+ "Name": "الاسم",
253
+ "NameIsRequired": "مطلوب اسم",
254
+ "EnterValidEmail": "أدخل عنوان بريد إلكتروني صالح",
255
+ "Title": "عنوان",
256
+ "Add": "يضيف",
257
+ "AddCustomization": "أضف التخصيص",
258
+ "SelectACustomizationToAddToYourMessage": "حدد قيمة التخصيص لإضافتها إلى الرسالة",
259
+ "recipient_name_desc": "ستتم إضافة الاسم الأول للشخص الذي يرد عليه الوكيل إلى الرسالة.",
260
+ "agent_name_desc": "سيتم إضافة اسم الوكيل الذي يقوم بالرد على الرسالة.",
261
+ "First_name_of_recipient": "الاسم الأول للمستلم",
262
+ "First_name_of_agent": "الاسم الأول للوكيل",
263
+ "EnterCannedResponseTitle": "أدخل عنوان الرد الجاهز",
264
+ "WriteMsgToSendToYourVisitors": "اكتب رسالة رد جاهزة لإرسالها إلى الزائرين",
265
+ "EditProfile": "تعديل الملف الشخصي"
266
+ }
@@ -1,14 +1,14 @@
1
1
  /*
2
2
  Chat21Client
3
3
 
4
- v0.1.10
4
+ v0.1.11
5
5
 
6
6
  @Author Andrea Sponziello
7
7
  (c) Tiledesk 2020
8
8
  */
9
9
 
10
- // let mqtt = require('mqtt');
11
- // let axios = require('axios');
10
+ //let mqtt = require('mqtt');
11
+ //let axios = require('axios');
12
12
 
13
13
  const _CLIENTADDED = "/clientadded"
14
14
  const _CLIENTUPDATED = "/clientupdated"
@@ -141,7 +141,7 @@ class Chat21Client {
141
141
  const payload = JSON.stringify(outgoing_message)
142
142
  this.client.publish(dest_topic, payload, null, (err) => {
143
143
  callback(err, outgoing_message)
144
- })
144
+ });
145
145
  }
146
146
 
147
147
  updateMessageStatus(messageId, conversWith, status, callback) {
@@ -236,10 +236,6 @@ class Chat21Client {
236
236
  group_members: members
237
237
  },
238
238
  method: 'POST'
239
- // url: options.url,
240
- // headers: options.headers,
241
- // json: options.json,
242
- // method: options.method
243
239
  }
244
240
  Chat21Client.myrequest(options, (err, response, json) => {
245
241
  if (err) {
@@ -249,23 +245,6 @@ class Chat21Client {
249
245
  callback(null, json);
250
246
  }
251
247
  }, this.log);
252
- // var xmlhttp = new XMLHttpRequest();
253
- // xmlhttp.open("POST", URL, true);
254
- // xmlhttp.setRequestHeader("authorization", this.jwt);
255
- // xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
256
- // xmlhttp.onreadystatechange = function() {
257
- // if (callback && xmlhttp.readyState == 4 && xmlhttp.status == 200 && xmlhttp.responseText) {
258
- // try {
259
- // const json = JSON.parse(xmlhttp.responseText)
260
- // callback(null, json.result)
261
- // }
262
- // catch (err) {
263
- // console.log("parsing json ERROR", err)
264
- // callback(err, null)
265
- // }
266
- // }
267
- // };
268
- // xmlhttp.send(JSON.stringify(data));
269
248
  }
270
249
 
271
250
  groupData(group_id, callback) {
@@ -590,7 +569,7 @@ class Chat21Client {
590
569
  }
591
570
  // map.forEach((value, key, map) =>)
592
571
  this.onConversationUpdatedCallbacks.forEach((callback, handler, map) => {
593
- callback(JSON.parse(message.toString()), topic)
572
+ callback(JSON.parse(message.toString()), _topic)
594
573
  });
595
574
  }
596
575
  }
@@ -602,7 +581,7 @@ class Chat21Client {
602
581
  console.log("conversation deleted! /conversations/, topic:", topic, message.toString() );
603
582
  }
604
583
  this.onConversationDeletedCallbacks.forEach((callback, handler, map) => {
605
- callback(JSON.parse(message.toString()), topic)
584
+ callback(JSON.parse(message.toString()), _topic)
606
585
  });
607
586
  }
608
587
  }
@@ -611,7 +590,7 @@ class Chat21Client {
611
590
  if (topic.includes("/archived_conversations/") && topic.endsWith(_CLIENTADDED)) {
612
591
  // map.forEach((value, key, map) =>)
613
592
  this.onArchivedConversationAddedCallbacks.forEach((callback, handler, map) => {
614
- callback(JSON.parse(message.toString()), topic)
593
+ callback(JSON.parse(message.toString()), _topic)
615
594
  });
616
595
  }
617
596
  }
@@ -620,7 +599,7 @@ class Chat21Client {
620
599
  if (topic.includes("/archived_conversations/") && topic.endsWith(_CLIENTDELETED)) {
621
600
  // map.forEach((value, key, map) =>)
622
601
  this.onArchivedConversationDeletedCallbacks.forEach((callback, handler, map) => {
623
- callback(JSON.parse(message.toString()), topic)
602
+ callback(JSON.parse(message.toString()), _topic)
624
603
  });
625
604
  }
626
605
  }
@@ -720,20 +699,20 @@ class Chat21Client {
720
699
  }
721
700
 
722
701
  parseTopic(topic) {
723
- var topic_parts = topic.split("/")
702
+ var topic_parts = topic.split("/");
724
703
  // /apps/tilechat/users/(ME)/messages/RECIPIENT_ID/ACTION
725
704
  if (topic_parts.length >= 7) {
726
- const app_id = topic_parts[1]
727
- const sender_id = topic_parts[3]
728
- const recipient_id = topic_parts[5]
729
- const convers_with = recipient_id
730
- const me = sender_id
705
+ const app_id = topic_parts[1];
706
+ const sender_id = topic_parts[3];
707
+ const recipient_id = topic_parts[5];
708
+ const convers_with = recipient_id;
709
+ const me = sender_id;
731
710
  const parsed = {
732
711
  "conversWith": convers_with
733
712
  }
734
- return parsed
713
+ return parsed;
735
714
  }
736
- return null
715
+ return null;
737
716
  }
738
717
 
739
718
  lastArchivedConversations(callback) {
@@ -801,27 +780,46 @@ class Chat21Client {
801
780
  const URL = `${this.APIendpoint}/${this.appid}/${this.user_id}/${path}/${conversWith}`
802
781
  console.log("getting conversation detail:", URL)
803
782
  console.log("conversWith:", conversWith)
804
- var xmlhttp = new XMLHttpRequest();
805
- xmlhttp.open("GET", URL, true);
806
- xmlhttp.setRequestHeader("authorization", this.jwt);
807
- xmlhttp.onreadystatechange = function() {
808
- if (callback && xmlhttp.readyState == 4 && xmlhttp.status == 200 && xmlhttp.responseText) {
809
- try {
810
- const json = JSON.parse(xmlhttp.responseText);
811
- if (json && json.result && Array.isArray(json.result) && json.result.length ==1) {
812
- callback(null, json.result[0]);
813
- }
814
- else {
815
- callback({"message": "Incorrect conversation result."}, null);
816
- }
817
- }
818
- catch (err) {
819
- console.error("parsing json ERROR", err);
820
- callback(err, null);
821
- }
783
+
784
+ let options = {
785
+ url: URL,
786
+ headers: {
787
+ "Authorization": this.jwt
788
+ // "Content-Type": "application/json;charset=UTF-8"
789
+ },
790
+ method: 'GET'
791
+ }
792
+ Chat21Client.myrequest(options, (err, response, json) => {
793
+ console.log("JSON...", json)
794
+ if (json && json.result && Array.isArray(json.result) && json.result.length ==1) {
795
+ callback(null, json.result[0]);
822
796
  }
823
- };
824
- xmlhttp.send(null);
797
+ else {
798
+ callback(null, null);
799
+ }
800
+ }, this.log);
801
+
802
+ // var xmlhttp = new XMLHttpRequest();
803
+ // xmlhttp.open("GET", URL, true);
804
+ // xmlhttp.setRequestHeader("authorization", this.jwt);
805
+ // xmlhttp.onreadystatechange = function() {
806
+ // if (callback && xmlhttp.readyState == 4 && xmlhttp.status == 200 && xmlhttp.responseText) {
807
+ // try {
808
+ // const json = JSON.parse(xmlhttp.responseText);
809
+ // if (json && json.result && Array.isArray(json.result) && json.result.length ==1) {
810
+ // callback(null, json.result[0]);
811
+ // }
812
+ // else {
813
+ // callback({"message": "Incorrect conversation result."}, null);
814
+ // }
815
+ // }
816
+ // catch (err) {
817
+ // console.error("parsing json ERROR", err);
818
+ // callback(err, null);
819
+ // }
820
+ // }
821
+ // };
822
+ // xmlhttp.send(null);
825
823
  }
826
824
 
827
825
  lastMessages(convers_with, callback) {
@@ -962,7 +960,7 @@ class Chat21Client {
962
960
  }
963
961
  if (this.log) {console.log("starting mqtt connection with LWT on:", presence_topic, this.endpoint)}
964
962
  // client = mqtt.connect('mqtt://127.0.0.1:15675/ws',options)
965
- this.client = mqtt.connect('a://99.80.197.164:15675/ws',options)
963
+ this.client = mqtt.connect(this.endpoint,options)
966
964
 
967
965
  this.client.on('connect', // TODO if token is wrong it must reply with an error!
968
966
  () => {
@@ -1033,8 +1031,8 @@ class Chat21Client {
1033
1031
 
1034
1032
  function isBrowser() {
1035
1033
  return true;
1036
- // return false;
1034
+ //return false;
1037
1035
  }
1038
1036
 
1039
1037
  export { Chat21Client }; // Browser
1040
- // module.exports = { Chat21Client };
1038
+ //module.exports = { Chat21Client };
@@ -15,9 +15,9 @@ export class ConversationModel {
15
15
  public senderAuthInfo: any,
16
16
  public sender_fullname: string,
17
17
  public status: string,
18
- public timestamp: string,
18
+ public timestamp: number,
19
19
  public time_last_message: string,
20
- public selected: boolean,
20
+ // public selected: boolean,
21
21
  public color: string,
22
22
  public avatar: string,
23
23
  public archived: boolean,
@@ -29,7 +29,7 @@ export abstract class ConversationsHandlerService {
29
29
  // functions
30
30
  abstract initialize(tenant: string, userId: string, translationMap: Map<string, string>): void;
31
31
  // abstract connect(): void;
32
- abstract subscribeToConversations(callback: any): void;
32
+ abstract subscribeToConversations(lastConversatioTimestamp: number, callback: any): void;
33
33
  abstract countIsNew(): number;
34
34
  abstract setConversationRead(conversationId: string): void;
35
35
  abstract dispose(): void;
@@ -1,4 +1,3 @@
1
- import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
2
1
  import { Injectable } from '@angular/core';
3
2
  import { BehaviorSubject } from 'rxjs';
4
3
 
@@ -13,17 +12,11 @@ import 'firebase/storage';
13
12
  // models
14
13
  import { ConversationModel } from '../../models/conversation';
15
14
 
16
- // services
17
- import { ConversationsHandlerService } from '../abstract/conversations-handler.service';
18
-
19
-
20
15
  // utils
21
16
  import { avatarPlaceholder, getColorBck } from '../../utils/utils-user';
22
17
  import { compareValues, getFromNow, searchIndexInArrayForUid, archivedConversationsPathForUserId, isGroup } from '../../utils/utils';
23
- import { ImageRepoService } from '../abstract/image-repo.service';
24
- import { FirebaseImageRepoService } from './firebase-image-repo';
25
18
  import { ArchivedConversationsHandlerService } from '../abstract/archivedconversations-handler.service';
26
- import { CustomLogger } from '../logger/customLogger';
19
+ import { LoggerService } from 'src/chat21-core/providers/abstract/logger.service';
27
20
  import { LoggerInstance } from '../logger/loggerInstance';
28
21
 
29
22
 
@@ -54,6 +47,8 @@ export class FirebaseArchivedConversationsHandler extends ArchivedConversationsH
54
47
  private logger: LoggerService = LoggerInstance.getInstance()
55
48
  private ref: firebase.database.Query;
56
49
 
50
+ private subscribe: any;
51
+
57
52
  constructor(
58
53
  //public databaseProvider: DatabaseProvider
59
54
  ) {
@@ -183,23 +178,33 @@ export class FirebaseArchivedConversationsHandler extends ArchivedConversationsH
183
178
  // this.BSConversationDetail.next(conversationSelected);
184
179
  } else {
185
180
  // const urlNodeFirebase = '/apps/' + this.tenant + '/users/' + this.loggedUserId + '/archived_conversations/' + conversationId;
186
- const urlNodeFirebase = archivedConversationsPathForUserId(this.tenant, this.loggedUserId) + '/' + conversationId;
181
+ const urlNodeFirebase = archivedConversationsPathForUserId(this.tenant, this.loggedUserId) // + '/' + conversationId;
187
182
  this.logger.log('[FIREBASEArchivedConversationsHandlerSERVICE] urlNodeFirebase conversationDetail *****', urlNodeFirebase)
188
183
  const firebaseMessages = firebase.database().ref(urlNodeFirebase);
189
- firebaseMessages.on('value', (childSnapshot) => {
190
- const childData: ConversationModel = childSnapshot.val();
191
- this.logger.log('[FIREBASEArchivedConversationsHandlerSERVICE] childData *****', childData)
192
- // if (childSnapshot && childSnapshot.key && childData.uid) {
193
- if (childSnapshot && childSnapshot.key && childData) {
194
- childData.uid = childSnapshot.key;
195
- const conversation = this.completeConversation(childData);
196
- if (conversation) {
197
- callback(conversation)
198
- } else {
199
- callback(null)
184
+ if(this.subscribe){
185
+ this.logger.log('[FIREBASEArchivedConversationsHandlerSERVICE] getConversationDetail ALREADY SUBSCRIBED')
186
+ return;
187
+ }
188
+
189
+ this.subscribe = firebaseMessages.on('value', (snap) => {
190
+ const childSnapshot = snap.child('/'+conversationId)
191
+ if(!childSnapshot.exists()){
192
+ this.logger.log('[FIREBASEArchivedConversationsHandlerSERVICE] getConversationDetail archived conversation NOT exist', conversationId)
193
+ callback(null)
194
+ } else {
195
+ const childData: ConversationModel = childSnapshot.val();
196
+ this.logger.log('[FIREBASEArchivedConversationsHandlerSERVICE] getConversationDetail archived conversation exist', childData)
197
+ if (childSnapshot && childSnapshot.key && childData) {
198
+ childData.uid = childSnapshot.key;
199
+ const conversation = this.completeConversation(childData);
200
+ if (conversation) {
201
+ callback(conversation)
202
+ } else {
203
+ callback(null)
204
+ }
200
205
  }
206
+ // this.BSConversationDetail.next(conversation);
201
207
  }
202
- // this.BSConversationDetail.next(conversation);
203
208
  });
204
209
  }
205
210
  }