@chat21/chat21-ionic 3.0.65-rc1 → 3.0.66

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 (30) hide show
  1. package/CHANGELOG.md +23 -1
  2. package/deploy_amazon_beta.sh +0 -0
  3. package/deploy_amazon_prod.sh +3 -3
  4. package/package.json +3 -3
  5. package/src/app/app.component.ts +18 -61
  6. package/src/app/chatlib/conversation-detail/message/bubble-message/bubble-message.component.ts +0 -10
  7. package/src/app/chatlib/conversation-detail/message/return-receipt/return-receipt.component.html +49 -4
  8. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.html +1 -1
  9. package/src/app/chatlib/list-conversations-component/ion-list-conversations/ion-list-conversations.component.ts +18 -30
  10. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.html +6 -4
  11. package/src/app/components/conversation-detail/header-conversation-detail/header-conversation-detail.component.scss +2 -0
  12. package/src/app/components/project-item/project-item.component.ts +5 -0
  13. package/src/app/components/sidebar/sidebar.component.ts +28 -29
  14. package/src/app/components/sidebar-user-details/sidebar-user-details.component.html +12 -23
  15. package/src/app/components/sidebar-user-details/sidebar-user-details.component.scss +3 -0
  16. package/src/app/components/sidebar-user-details/sidebar-user-details.component.ts +88 -136
  17. package/src/app/directives/truncate.pipe.ts +0 -1
  18. package/src/app/pages/authentication/login/login.page.ts +0 -1
  19. package/src/app/pages/conversation-detail/conversation-detail.page.ts +44 -48
  20. package/src/app/pages/conversations-list/conversations-list.page.ts +27 -3
  21. package/src/assets/i18n/ar.json +266 -0
  22. package/src/assets/i18n/uk.json +266 -0
  23. package/src/assets/js/chat21client.js +57 -59
  24. package/src/chat21-core/models/conversation.ts +1 -1
  25. package/src/chat21-core/providers/firebase/firebase-archivedconversations-handler.ts +26 -21
  26. package/src/chat21-core/providers/firebase/firebase-conversations-handler.ts +72 -56
  27. package/src/chat21-core/providers/mqtt/mqtt-conversations-handler.ts +16 -13
  28. package/src/chat21-core/utils/constants.ts +1 -1
  29. package/src/global.scss +2 -2
  30. package/deploy_prod.sh +0 -14
@@ -320,17 +320,17 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
320
320
  const conversations = this.conversationsHandlerService.conversations
321
321
  // console.log('[CONVS-DETAIL] conversations', conversations);
322
322
  this.conversation_count = conversations.length
323
- if (conv && conv.sender !== this.loggedUser.uid) {
323
+ if (conv && this.loggedUser && conv.sender !== this.loggedUser.uid) {
324
324
  this.logger.log('[CONVS-DETAIL] subscribe to BSConversationsChange data sender ', conv.sender)
325
325
  this.logger.log('[CONVS-DETAIL] subscribe to BSConversationsChange this.loggedUser.uid ', this.loggedUser.uid)
326
326
  this.logger.log('[CONVS-DETAIL] subscribe to BSConversationsChange is_new ', conv.is_new)
327
327
  this.logger.log('[CONVS-DETAIL] subscribe to BSConversationsChange showButtonToBottom ', this.showButtonToBottom)
328
328
  // UPDATE THE CONVERSATION TO 'READ' IF IT IS ME WHO WRITES THE LAST MESSAGE OF THE CONVERSATION
329
329
  // AND IF THE POSITION OF THE SCROLL IS AT THE END
330
- if (!this.showButtonToBottom && conv.is_new) {
331
- // ARE AT THE END
332
- this.updateConversationBadge()
333
- }
330
+ // if (!this.showButtonToBottom && conv.is_new) {
331
+ // // ARE AT THE END
332
+ // this.updateConversationBadge()
333
+ // }
334
334
  if(conv.uid && conv.uid === this.conversationWith){
335
335
  this.conversationAvatar = setConversationAvatar(conv.conversation_with,conv.conversation_with_fullname,conv.channel_type)
336
336
  }
@@ -761,6 +761,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
761
761
  if (this.conversationWith && this.conversationsHandlerService && this.conv_type === 'active') {
762
762
  this.logger.log('[CONVS-DETAIL] - setHeaderContent getConversationDetail CALLING')
763
763
  this.conversationsHandlerService.getConversationDetail(this.conversationWith, (conv) => {
764
+ this.logger.debug('[CONV-COMP] setHeaderContent getConversationDetail: conversationsHandlerService ', this.conversationWith, conv, this.conv_type)
764
765
  if (conv) {
765
766
  this.conversationAvatar = setConversationAvatar(
766
767
  conv.conversation_with,
@@ -768,19 +769,45 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
768
769
  conv.channel_type,
769
770
  )
770
771
  }
772
+ if(!conv){
773
+ this.logger.debug('[CONV-COMP] setHeaderContent getConversationDetail: conv not exist --> search in archived list', this.conversationWith, this.conv_type)
774
+ this.archivedConversationsHandlerService.getConversationDetail(this.conversationWith, (conv) => {
775
+ this.logger.debug('[CONV-COMP] setHeaderContent getConversationDetail: archivedConversationsHandlerService', this.conversationWith, conv)
776
+ if (conv) {
777
+ console.log('[CONVS-DETAIL] - setHeaderContent getConversationDetail (archived)', this.conversationWith, 'CONVS', conv)
778
+ this.conversationAvatar = setConversationAvatar(
779
+ conv.conversation_with,
780
+ conv.conversation_with_fullname,
781
+ conv.channel_type,
782
+ )
783
+ }
784
+ })
785
+ }
771
786
  this.logger.log('[CONVS-DETAIL] - setHeaderContent > conversationAvatar: ', this.conversationAvatar)
772
787
  })
773
788
  } else {
774
- //get conversation from 'conversations' firebase node
789
+ //get conversation from 'archived-conversations' firebase node
790
+ this.logger.debug('[CONV-COMP] setHeaderContent getConversationDetail: archivedConversationsHandlerService', this.conversationWith, this.conv_type)
775
791
  this.archivedConversationsHandlerService.getConversationDetail(this.conversationWith, (conv) => {
776
792
  if (conv) {
777
- // console.log('[CONVS-DETAIL] - setHeaderContent getConversationDetail (archived)', this.conversationWith, 'CONVS', conv)
778
793
  this.conversationAvatar = setConversationAvatar(
779
794
  conv.conversation_with,
780
795
  conv.conversation_with_fullname,
781
796
  conv.channel_type,
782
797
  )
783
798
  }
799
+ if(!conv){
800
+ this.conversationsHandlerService.getConversationDetail(this.conversationWith, (conv) => {
801
+ if (conv) {
802
+ this.conversationAvatar = setConversationAvatar(
803
+ conv.conversation_with,
804
+ conv.conversation_with_fullname,
805
+ conv.channel_type,
806
+ )
807
+ }
808
+ this.logger.log('[CONVS-DETAIL] - setHeaderContent > conversationAvatar: ', this.conversationAvatar)
809
+ })
810
+ }
784
811
  })
785
812
  }
786
813
 
@@ -934,7 +961,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
934
961
  subscriptionKey = 'messageAdded'
935
962
  subscription = this.subscriptions.find((item) => item.key === subscriptionKey)
936
963
  if (!subscription) {
937
- this.logger.log('[CONVS-DETAIL] subscribe to messageAdded - conversationHandlerService', this.conversationHandlerService)
938
964
  subscription = this.conversationHandlerService.messageAdded.subscribe((msg: any) => {
939
965
  this.logger.log('[CONVS-DETAIL] subscribe to messageAdded - msg ', msg)
940
966
  if (msg) {
@@ -950,7 +976,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
950
976
  subscriptionKey = 'messageChanged'
951
977
  subscription = this.subscriptions.find((item) => item.key === subscriptionKey)
952
978
  if (!subscription) {
953
- this.logger.log('[CONVS-DETAIL] subscribe to messageChanged')
954
979
  subscription = this.conversationHandlerService.messageChanged.subscribe((msg: any) => {
955
980
  this.logger.log('[CONVS-DETAIL] subscribe to messageChanged - msg ', msg)
956
981
  })
@@ -961,7 +986,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
961
986
  subscriptionKey = 'messageRemoved'
962
987
  subscription = this.subscriptions.find((item) => item.key === subscriptionKey)
963
988
  if (!subscription) {
964
- this.logger.log('[CONVS-DETAIL] subscribe to messageRemoved')
965
989
  subscription = this.conversationHandlerService.messageRemoved.subscribe((messageId: any) => {
966
990
  this.logger.log('[CONVS-DETAIL] subscribe to messageRemoved - messageId ', messageId)
967
991
  })
@@ -1186,26 +1210,15 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1186
1210
  this.logger.log('[CONVS-DETAIL] - returnChangeTextArea --> beforeSlash parts', beforeSlashParts)
1187
1211
 
1188
1212
  if (beforeSlashParts.length === 2) {
1189
- if (
1190
- beforeSlashParts[0].indexOf(' ') >= 0 &&
1191
- afterSlashParts[0] === ''
1192
- ) {
1213
+ if (beforeSlashParts[0].indexOf(' ') >= 0 && afterSlashParts[0] === '') {
1193
1214
  this.HIDE_CANNED_RESPONSES = false
1194
- this.logger.log(
1195
- '[CONVS-DETAIL] - returnChangeTextArea --> beforeSlash there is a white space After Not',
1196
- )
1215
+ this.logger.log('[CONVS-DETAIL] - returnChangeTextArea --> beforeSlash there is a white space After Not')
1197
1216
  // if (beforeSlashParts[0].indexOf(' ') >= 0 && afterSlashParts[0].indexOf(' ') >= 0)
1198
- } else if (
1199
- beforeSlashParts[0].indexOf(' ') < 0 &&
1200
- afterSlashParts[0] === ''
1201
- ) {
1217
+ } else if (beforeSlashParts[0].indexOf(' ') < 0 && afterSlashParts[0] === '') {
1202
1218
  this.HIDE_CANNED_RESPONSES = true
1203
1219
  this.tagsCannedFilter = []
1204
1220
  this.logger.log('[CONVS-DETAIL] - returnChangeTextArea --> beforeSlash not thete is a white space After Not')
1205
- } else if (
1206
- beforeSlashParts[0].indexOf(' ') >= 0 &&
1207
- afterSlashParts[0] === ' '
1208
- ) {
1221
+ } else if (beforeSlashParts[0].indexOf(' ') >= 0 && afterSlashParts[0] === ' ') {
1209
1222
  this.logger.log('[CONVS-DETAIL] - returnChangeTextArea --> beforeSlash not thete is a white space After YES')
1210
1223
  this.HIDE_CANNED_RESPONSES = true
1211
1224
  this.tagsCannedFilter = []
@@ -1475,11 +1488,6 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1475
1488
  this.logger.log('[CONVS-DETAIL] - insertAtCursor - myValue ', myValue)
1476
1489
  this.logger.log('[CONVS-DETAIL] - insertAtCursor - myField ', myField)
1477
1490
 
1478
- // myValue = ' ' + myValue;
1479
-
1480
- // console.log('[CONVS-DETAIL] - GET TEXT AREA - Here yes myValue ', myValue);
1481
- // console.log('[CONVS-DETAIL] - GET TEXT AREA - Here yes textArea value length', myField.value.length);
1482
-
1483
1491
  if (myField.value.length > 0) {
1484
1492
  myValue = ' ' + myValue
1485
1493
  }
@@ -1571,24 +1579,15 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1571
1579
  // this.audio.src = '/assets/sounds/pling.mp3';
1572
1580
  this.audio.src = URL_SOUND_LIST_CONVERSATION
1573
1581
  this.audio.load()
1574
- this.logger.log(
1575
- '[CONVS-DETAIL] soundMessage conversation this.audio',
1576
- this.audio,
1577
- )
1582
+ this.logger.log('[CONVS-DETAIL] soundMessage conversation this.audio',this.audio)
1578
1583
  clearTimeout(this.setTimeoutSound)
1579
1584
  this.setTimeoutSound = setTimeout(function () {
1580
- that.audio
1581
- .play()
1582
- .then(() => {
1585
+ that.audio.play().then(() => {
1583
1586
  // Audio is playing.
1584
- this.logger.log(
1585
- '[CONVS-DETAIL] soundMessag that.audio.src ',
1586
- that.audio.src,
1587
- )
1588
- })
1589
- .catch((error) => {
1587
+ this.logger.log('[CONVS-DETAIL] soundMessag that.audio.src ',that.audio.src)
1588
+ }).catch((error) => {
1590
1589
  that.logger.error(error)
1591
- })
1590
+ })
1592
1591
  }, 1000)
1593
1592
  }
1594
1593
 
@@ -1750,10 +1749,7 @@ export class ConversationDetailPage implements OnInit, OnDestroy, AfterViewInit
1750
1749
  * FIREBY BY: click event ScrollToBottom bottom-right icon button
1751
1750
  */
1752
1751
  public actionScrollBottom() {
1753
- this.logger.log(
1754
- '[CONVS-DETAIL] actionScrollBottom - ionContentChatArea: ',
1755
- this.ionContentChatArea,
1756
- )
1752
+ this.logger.log('[CONVS-DETAIL] actionScrollBottom - ionContentChatArea: ',this.ionContentChatArea)
1757
1753
  // const that = this;
1758
1754
  this.showButtonToBottom = false
1759
1755
  this.updateConversationBadge()
@@ -1,3 +1,4 @@
1
+ import { AppStorageService } from 'src/chat21-core/providers/abstract/app-storage.service';
1
2
  import { ArchivedConversationsHandlerService } from 'src/chat21-core/providers/abstract/archivedconversations-handler.service'
2
3
  import { Component, OnInit, ViewChild } from '@angular/core'
3
4
  import { IonContent, ModalController } from '@ionic/angular'
@@ -17,6 +18,8 @@ import {
17
18
  closeModal,
18
19
  convertMessage,
19
20
  isGroup,
21
+ searchIndexInArrayForUid,
22
+ compareValues,
20
23
  } from '../../../chat21-core/utils/utils'
21
24
 
22
25
  import { EventsService } from '../../services/events-service'
@@ -118,6 +121,7 @@ export class ConversationListPage implements OnInit {
118
121
  public appConfigProvider: AppConfigProvider,
119
122
  public platform: Platform,
120
123
  private networkService: NetworkService,
124
+ private appStorageService: AppStorageService
121
125
  ) {
122
126
  this.listenToAppCompConvsLengthOnInitConvs()
123
127
  this.listenToLogoutEvent()
@@ -168,6 +172,7 @@ export class ConversationListPage implements OnInit {
168
172
  ngOnInit() {
169
173
  this.watchToConnectionStatus()
170
174
  this.getAppConfigToHideDiplayBtns()
175
+
171
176
  }
172
177
 
173
178
  ngOnChanges() {
@@ -226,7 +231,7 @@ export class ConversationListPage implements OnInit {
226
231
  this.logger.log('Called ionViewDidEnter')
227
232
  this.logger.log('[CONVS-LIST-PAGE] ionViewWillEnter uidConvSelected',this.uidConvSelected )
228
233
  this.listnerStart()
229
-
234
+ // this.conversations = this.manageStoredConversations()
230
235
  // exit from app with hardware back button
231
236
  this.subscription = this.platform.backButton.subscribe(() => {
232
237
  navigator['app'].exitApp()
@@ -335,6 +340,7 @@ export class ConversationListPage implements OnInit {
335
340
  // Init convrsation handler
336
341
  // ------------------------------------------------------------------ //
337
342
  initConversationsHandler() {
343
+ // this.conversations = this.manageStoredConversations()
338
344
  this.conversations = this.conversationsHandlerService.conversations
339
345
  this.logger.log('[CONVS-LIST-PAGE] - CONVERSATIONS ', this.conversations.length, this.conversations)
340
346
  // save conversationHandler in chatManager
@@ -342,6 +348,19 @@ export class ConversationListPage implements OnInit {
342
348
  this.showPlaceholder = false
343
349
  }
344
350
 
351
+ private manageStoredConversations(): ConversationModel[] {
352
+ let conversationsStored = []
353
+ if(this.appStorageService.getItem('conversations')){
354
+ conversationsStored = JSON.parse(this.appStorageService.getItem('conversations'))
355
+ if(conversationsStored && conversationsStored.length > 0) {
356
+ // this.conversationsHandlerService.conversations = conversationsStored
357
+ this.logger.log('[CONVS-LIST-PAGE] retrive conversations from storage --> ', conversationsStored.length)
358
+ this.events.publish('appcompSubscribeToConvs:loadingIsActive', false);
359
+ }
360
+ }
361
+ return conversationsStored
362
+ }
363
+
345
364
  initArchivedConversationsHandler() {
346
365
  const keysConversation = ['CLOSED', 'Resolve']
347
366
  this.translationMapConversation = this.translateService.translateLanguage( keysConversation )
@@ -649,13 +668,14 @@ export class ConversationListPage implements OnInit {
649
668
  if (conversationType === 'active') {
650
669
  conversationSelected = this.conversations.find((item) => item.uid === this.uidConvSelected)
651
670
  } else if (conversationType === 'archived') {
652
- conversationSelected = this.archivedConversations.find((item) => item.uid === this.uidConvSelected)
671
+ conversationSelected = this.archivedConversations.find((item) => item.uid === this.uidConvSelected)
653
672
  }
654
673
  if (conversationSelected) {
655
674
  this.logger.log('[CONVS-LIST-PAGE] conversationSelected', conversationSelected)
656
675
  this.logger.log('[CONVS-LIST-PAGE] the conversation ', this.conversationSelected, ' has already been loaded')
657
676
  this.conversationSelected = conversationSelected
658
677
  this.logger.log('[CONVS-LIST-PAGE] setUidConvSelected: ', this.conversationSelected)
678
+ conversationType === 'active'? this.conversationsHandlerService.uidConvSelected = conversationSelected.uid : this.archivedConversationsHandlerService.uidConvSelected = conversationSelected.uid
659
679
  }
660
680
  }
661
681
  }
@@ -664,10 +684,12 @@ export class ConversationListPage implements OnInit {
664
684
  this.logger.log('onConversationSelected conversation', conversation)
665
685
  if (conversation.archived) {
666
686
  this.navigateByUrl('archived', conversation.uid)
687
+ this.archivedConversationsHandlerService.uidConvSelected = conversation.uid
667
688
  this.logger.log('[CONVS-LIST-PAGE] onConversationSelected archived conversation.uid ', conversation.uid,
668
689
  )
669
690
  } else {
670
691
  this.navigateByUrl('active', conversation.uid)
692
+ this.conversationsHandlerService.uidConvSelected = conversation.uid
671
693
  this.logger.log('[CONVS-LIST-PAGE] onConversationSelected active conversation.uid ', conversation.uid)
672
694
  }
673
695
  }
@@ -918,7 +940,9 @@ export class ConversationListPage implements OnInit {
918
940
  this.logger.log('[CONVS-LIST-PAGE] - onCloseConversation (closeSupportGroup) CONVS ',this.conversations)
919
941
  this.logger.log('[CONVS-LIST-PAGE] - onCloseConversation (closeSupportGroup) CONVS LENGHT ',this.conversations.length)
920
942
  this.events.publish('conversationhasbeenclosed', conversationId)
921
- this.navigateByUrl('archived', conversationId)
943
+ if(conversationId === this.uidConvSelected){
944
+ this.navigateByUrl('archived', conversationId)
945
+ }
922
946
  })
923
947
  }
924
948
 
@@ -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
+ }