{"version":3,"sources":["webpack:///src/app/components/location/location.component.ts","webpack:///src/app/components/location/location.component.html","webpack:///src/app/page/closed-chats/closed-chats.component.html","webpack:///src/app/page/closed-chats/closed-chats.component.ts","webpack:///src/app/components/message-window/message-window.component.ts","webpack:///src/app/components/message-window/message-window.component.html","webpack:///src/app/components/toast-message/toast-message.component.ts","webpack:///src/app/components/toast-message/toast-message.component.html","webpack:///src/app/pipes/chat-room-filter.pipe.ts","webpack:///src/app/services/socket.service.ts","webpack:///src/app/services/chats/chat.room.service.ts","webpack:///src/app/components/dialog/add-edit-reference-number-dialog/add-edit-reference-number-dialog.component.ts","webpack:///src/app/components/dialog/add-edit-reference-number-dialog/add-edit-reference-number-dialog.component.html","webpack:///src/app/enums.ts","webpack:///src/app/services/auth/auth.service.ts","webpack:///src/app/services/error.service.ts","webpack:///src/app/page/contacts/contacts.component.html","webpack:///src/app/page/contacts/contacts.component.ts","webpack:///src/environments/environment.ts","webpack:///src/app/components/dialog/dialog.component.ts","webpack:///src/app/components/dialog/dialog.component.html","webpack:///src/app/services/chats/chat.service.ts","webpack:///src/app/services/base-api.service.ts","webpack:///src/app/page/chats-landing-page/chats-landing-page.component.ts","webpack:///src/app/page/chats-landing-page/chats-landing-page.component.html","webpack:///src/app/components/dialog/edit-whatsapp-user-dialog/edit-whatsapp-user-dialog.component.ts","webpack:///src/app/components/dialog/edit-whatsapp-user-dialog/edit-whatsapp-user-dialog.component.html","webpack:///src/app/components/dialog/add-edit-chat-notes-dialog/add-edit-chat-notes-dialog.component.ts","webpack:///src/app/components/dialog/add-edit-chat-notes-dialog/add-edit-chat-notes-dialog.component.html","webpack:///src/app/page/online-users/online-users.component.html","webpack:///src/app/page/online-users/online-users.component.ts","webpack:///src/app/services/api/user.api.service.ts","webpack:///src/app/components/message-item/message-item.component.html","webpack:///src/app/components/message-item/message-item.component.ts","webpack:///src/app/page/template-manager/template-manager.component.html","webpack:///src/app/page/template-manager/template-manager.component.ts","webpack:///src/app/components/drop-down/drop-down.component.ts","webpack:///src/app/components/drop-down/drop-down.component.html","webpack:///src/app/components/dialog/add-whatsapp-user-dialog/add-whatsapp-user-dialog.component.ts","webpack:///src/app/components/dialog/add-whatsapp-user-dialog/add-whatsapp-user-dialog.component.html","webpack:///src/app/services/notification.service.ts","webpack:///src/app/services/chats/claimed.chats.service.ts","webpack:///node_modules/moment/locale sync ^\\.\\/.*$","webpack:///src/app/services/products.service.ts","webpack:///src/app/app.component.html","webpack:///src/app/app.component.ts","webpack:///src/app/components/dialog/close-chat-dialog/close-chat-dialog.component.ts","webpack:///src/app/components/dialog/close-chat-dialog/close-chat-dialog.component.html","webpack:///src/app/services/auth/auth.manager.ts","webpack:///src/app/components/chats-panel/chats-panel.component.html","webpack:///src/app/components/chats-panel/chats-panel.component.ts","webpack:///src/app/components/dialog/dialog.service.ts","webpack:///src/app/components/dialog/preview-messages-dialog/preview-messages-dialog.component.ts","webpack:///src/app/components/dialog/preview-messages-dialog/preview-messages-dialog.component.html","webpack:///src/app/components/room-chat-item/room-chat-item.component.ts","webpack:///src/app/components/room-chat-item/room-chat-item.component.html","webpack:///src/app/app.module.ts","webpack:///src/app/components/chat-item/chat-item.component.ts","webpack:///src/app/components/chat-item/chat-item.component.html","webpack:///src/app/page/chat-rooms/chat-rooms.component.html","webpack:///src/app/page/chat-rooms/chat-rooms.component.ts","webpack:///src/app/components/chat-window/chat-window.component.html","webpack:///src/app/components/chat-window/chat-window.component.ts","webpack:///src/app/components/spinner/spinner.component.ts","webpack:///src/app/components/spinner/spinner.component.html","webpack:///src/app/components/dialog/claim-room-chat-dialog/claim-room-chat-dialog.component.html","webpack:///src/app/components/dialog/claim-room-chat-dialog/claim-room-chat-dialog.component.ts","webpack:///src/app/components/dialog/reassign-chat-dialog/reassign-chat-dialog.component.html","webpack:///src/app/components/dialog/reassign-chat-dialog/reassign-chat-dialog.component.ts","webpack:///src/app/services/api/template.api.service.ts","webpack:///src/app/services/api/api.service.ts","webpack:///src/app/page/login/login.component.html","webpack:///src/app/page/login/login.component.ts","webpack:///src/app/services/permissions.service.ts","webpack:///src/app/services/browser.service.ts","webpack:///src/app/services/message.service.ts","webpack:///src/app/app-routing.module.ts","webpack:///src/app/services/api/chat.api.service.ts","webpack:///src/app/components/side-menu/side-menu.component.ts","webpack:///src/app/components/side-menu/side-menu.component.html","webpack:///src/app/material.module.ts","webpack:///src/app/components/dialog/messages-preview-claim-chat-dialog/messages-preview-claim-chat-dialog.component.html","webpack:///src/app/components/dialog/messages-preview-claim-chat-dialog/messages-preview-claim-chat-dialog.component.ts","webpack:///src/app/components/toast-message/toast.message.service.ts","webpack:///src/main.ts","webpack:///$_lazy_route_resource lazy namespace object"],"names":["LocationComponent","el","_ngZone","myLatLng","initialRenderComplete","fitBounds","undefined","LAYER_OSM","id","name","enabled","layer","maxZoom","attribution","layersControlOptions","position","baseLayers","options","zoom","center","attributionControl","markerClusterData","markerClusterOptions","iconCreateFunction","cluster","markers","getAllChildMarkers","hasAlert","found","d","html","length","className","iconSize","group","markerClusterGroup","map","setView","addTo","clearAllEventListeners","remove","nativeElement","onMapReady","selector","templateUrl","styleUrls","ClosedChatsComponent","chatService","chatApiService","userApiService","toastMessageService","dialog","error","location","displayedColumns","closedChats","systemUsers","whatsappUsers","selectedClosedChat","selectedRowIndex","tableSpinner","showSpinner","getSystemUsers","paginator","sort","resp","showToastMessage","errorCode","errorMessage","result","user","push","value","label","loginName","getWhatsappUsers","handleError","getWhatsAppUsers","whatsappUserId","getFormattedName","firstName","lastName","whatsappUserNumber","getClosedChatsFromDateAndOptionallyUser","selectedDate","selectedSystemUserId","selectedWhatsappUserId","data","cc","whatsappUserName","closedChat","index","dialogRef","open","dialogTypeId","PREVIEW_CHAT_MESSAGES","chat","autoFocus","afterClosed","subscribe","date","format","filter","trim","toLowerCase","back","goBack","filterClosedChats","picker","MessageWindowComponent","messageService","claimedChatService","messages","searchTerm","findNextResult","findPreviousResult","navigateToNextResultEmitter","navigateToPreviousResultEmitter","scrollToBottomEmitter","messageSearch","messageWindow","image","searchResults","currentResultIndex","selectedChatId","showScrollIcon","imagePreview","currentImageRotation","shouldAutoScroll","subscribeToParentEmitters","setup","chatId","handleDisplayMessages","scrollToBottom","navigateToNextResult","navigateToPreviousResult","getSelectedClaimChat","searchChatMessages","messageSearchChange","autoScrollToBottom","search","message","body","includes","scrollToResult","messageId","some","scrollThreshold","distanceFromBottom","scrollHeight","scrollTop","clientHeight","resultIndex","element","querySelector","scrollIntoView","behavior","block","scrollTo","top","payload","emit","degrees","newRotation","style","transform","onScroll","smoothScrollToBottom","ToastMessageComponent","ChatRoomFilterPipe","chatRoomService","chats","selectedChatFilter","selectedOrderFilter","filterChats","SocketService","auth","notificationService","claimedChatsService","browserService","router","_connected","_timeout","_notConnectedReason","socket","socketURL","reconnection","reconnectionAttempts","reconnectionDelay","reconnectionDelayMax","on","msg","internalMessage","disconnect","connect","connected","timeout","userId","lostConnection","logout","notConnectedReason","internalMessageType","USER_LOGGED_CLAIM_CHATS","DISCONNECT","INBOUND_MESSAGE","NOTIFY_USERS_CHAT_CLAIMED","CHAT_CLOSE","PRODUCT_CHANGE","MESSAGE_STATUS_UPDATE","REASSIGN_CHAT","handleUserLoggedClaimedChats","claimedChats","handleUserDisconnect","inboundWhatsappMessage","handleUserClaimChats","handleChatClose","handleProductChange","productName","handleMessageStatusupdate","handleReassignChat","handleInboundWhatsappMessage","browserFocused","messageReceivedNotification","serverUserId","url","getChatRooms","chatIds","c","handleRemovingChatsFromRoom","handleRemovingClaimedChats","handleChatsReassignToUser","resetUserSessionTimer","providedIn","ChatRoomService","authService","_heading","_chatRooms","_totalChats","_chatFilter","TALK_TO_AN_AGENT","_selectedTab","_selectedChats","_chatFilterOptions","CHAT_DATE","EXPIRED_CHATS","ACTIVE_CHATS","_orderFilter","DESCENDING","_orderFilterOptions","ASCENDING","chatRooms","selectedChats","calculateChatsInRoom","handleRoomHeading","chatRoom","totalChatCount","chatFilter","orderFilter","heading","selectedProduct","txt","roomIndex","selectedTab","roomName","activeChatFilterIndex","chatFilterOptions","findIndex","expiredChatFilterIndex","talkToAgentChatFilterIndex","activeChats","hasChatExpired","chatExpiryDate","expiredChats","talkToAgentChats","chatStatusId","OPEN_BUT_REQUESTED_AGENT","filterByChatDate","filterByExpiredChats","filterByActiveChats","filterByTalkToAnAgent","insertDate","currentDate","Date","orderBy","expired","totalChats","roomTabName","tab","orderByFiler","AddEditReferenceNumberDialogComponent","dialogService","referenceNumber","refNo","updateChatRefNo","setSelectedClaimChat","close","updateReferenceNumber","cancel","Product","DialogType","RoomChatFilterBy","RoomChatOrderBy","MessageType","InternalMessageType","ChatStatus","AuthService","http","_tokenExpiryTime","_sessionValidMins","_user","_isTimedOut","_userProducts","reasonLostConnection","loggedInSubject","loggedIn","asObservable","next","isTokenValid","setupTokenExpirationCheck","username","password","requestBody","post","serverURL","toPromise","handleSuccessfulLogin","token","sessionId","sessionValidMins","setSessionStorage","getSessionStorage","clearSessionStorage","tokenExpiryTime","sessionStorage","removeItem","clear","JSON","stringify","setUser","parse","clearUser","navigate","add","toDate","setInterval","duration","diff","timedOut","asSeconds","isTimedOut","toUpperCase","slice","userProducts","product","existingProduct","find","p","isDefaultProduct","productId","x","newIndex","ErrorService","stack","displaySource","alertSource","alertSourceHeader","err","caller","console","showMessage","log","ContactsComponent","refresh","getAllWhatsappUsers","getContacts","ADD_WHATSAPP_USER","whatsappUser","EDIT_WHATSAPP_USER","searchWhatsappUsers","addWhatsappUserDialog","environment","production","devMode","DialogComponent","ChatService","_chatWindowLeft","formattedExpiryDate","hasExpired","isAfter","capitalizeEachWord","word","regex","replace","chatWindowLeft","BaseApiService","route","headers","set","get","json","ChatsLandingPageComponent","EditWhatsappUserDialogComponent","updateWhatsappUserDetails","updateWhatsAppUser","AddEditChatNotesDialogComponent","notes","updateChatNotes","saveNotes","OnlineUsersComponent","onlineUsers","refreshOnlineUsers","getOnlineUsers","UserApiService","base","groupId","producId","firstname","cellPhoneNumber","previewImage","MessageItemComponent","sanitizer","messageMatch","messageBody","messageTimeStamp","messageStatusIcon","messageStatusIconClass","isMessageMedia","isMessageAFile","isMessageAnImage","isMessageAudio","isMessageVideo","currentModifiedMessageBody","unmodifiedMessageBody","handleMessageSentBy","makeTextBold","handleMessageTimeStamp","handleMessageFileType","highlightText","mediaUrl","extension","direction","systemUser","whatsappUserFirstName","whatsappUserLastName","boldRegex","italicRegex","formattedMessage","convertLinksToHtml","bypassSecurityTrustHtml","text","linkRegex","textColour","match","highlight","RegExp","mimeType","responseType","blob","reader","FileReader","readAsDataURL","onload","event","base64","target","fileName","save","onerror","base64ToBlob","objectURL","window","URL","createObjectURL","downloadLink","document","createElement","href","download","appendChild","click","removeChild","b64Data","sliceSize","type","byteCharacters","atob","byteArrays","offset","byteNumbers","Array","i","charCodeAt","byteArray","Uint8Array","Blob","sendDate","$event","stopPropagation","TemplateManagerComponent","templateApiService","selectedTemplate","templates","templateDropdownOptions","templateParams","selectedContact","contacts","contactDropdownOptions","sendingTemplate","getAllContacts","getAllTemplates","template","templateName","contact","getTemplateParams","templateId","t","replacedTemplateBody","findAndReplaceTemplateBody","sendTemplateToWhatsappUser","sentTo","variableName","param","variableType","Error","DropDownComponent","showClear","disabled","placeHolder","onDropdownOptionSelect","_originalOptions","previousSearch","filterChanged","filterSearch","filterInput","pipe","filterDropdownOptions","processOptions","preventSpaceBarSelectingDropdownOption","changes","originalOptions","currentValue","filteredOptions","focus","option","select","_handleKeydown","key","panelOpen","_handleOpenKeydown","_handleClosedKeydown","dropDownOptionSelect","focusInput","filterPlaceHolder","selectedDropDown","AddWhatsappUserDialogComponent","canAddNewWhatsAppUser","addWhatsappUser","splitArr","split","NotificationService","productService","notification","icon","smallLogo","dir","Notification","onclick","chatIndex","getClaimedChats","chatSelected","ClaimedChatsService","_chatsHeading","_search","_claimedChats","_claimedChatsOriginal","_selectedClaimChat","_hasChatExpired","_claimedChatsPanel","_claimedChatIdFromRoom","filterChatsOptions","method","filterByAllClaimedChats","bind","filterByMyUnreadMessages","filterByAllUnreadMessages","filterByMyActiveChats","filterByAllActiveChats","filterByMyExpiredChats","filterByAllExpiredChats","_selectedFilterChatOption","orignalClaimeChatsIndex","getClaimedChatsOriginal","claimeChatsIndex","setClaimedChatsOriginal","foundChat","applyChatFilterIfThereIsAFilter","handleClaimedChatsPanel","selectedFilterChatOption","call","chatsHeading","filterByMyClaimedChats","resetReassignedChats","getLoggedInUserClaimedChats","setClaimedChats","loggedInUserClaimedChats","unreadMessages","allClaimedChats","orderClaimedChatsByLatestMessage","claimedChatsPanel","groupIds","gc","groupExpanded","groupName","groupChatsLength","reassignedChats","claimedChatOrig","reassigned","claimedBy","claimedByUserId","splice","foundOrigChat","foundClaimedChat","foundGroup","ch","friendlyName","filters","item","searchValue","searchClaimedChats","latestMessage","getTime","forEach","menuOption","remainingTimeSeconds","remainingTimeFormatted","asMilliseconds","count","webpackContext","req","webpackContextResolve","__webpack_require__","o","e","code","keys","webpackContextKeys","Object","resolve","module","exports","ProductService","_bigLogo","_smallLogo","NOVADT","NOVADT_OLD","SAEX","logo","bigLogo","AppComponent","permissionService","socketService","claimChats","requestNotificationsPermissions","CloseChatDialogComponent","closeChats","closeChat","AuthManager","errorService","state","ChatsPanelComponent","multiModeOptions","openDialog","CLOSE_CHAT","selectedClaimedChats","productOptions","multiSelectMode","overlay","pageLoad","getUserProducts","setProduct","up","handleChatsWithUnreadMessages","autoSelectClaimedChat","u","indexOf","cg","claimedChatIdFromRoom","productChange","changeProduct","handleClosingOfDialog","handleReassignChatDialog","multiSelectModeChange","DialogService","_showSpinner","PreviewMessagesDialogComponent","whatsAppUserName","getMessagesForChatId","RoomChatItemComponent","multiselectMode","claimChatMessages","onClose","onChatSelection","whatsAppDisplayName","lastMessage","messageMediaIcon","unreadMessageCount","lastClaimedBy","chatExpired","handleWhatsAppUserName","handleMessageStatusIcon","handleMessageMediaIcon","handleLastClaimedBy","isSame","clone","subtract","undeliveredDate","readDate","deliveredDate","chatSelect","claim","AppModule","declarations","imports","providers","entryComponents","bootstrap","ChatItemComponent","onChatSelect","chatStatus","handleClaimedBy","handleChatStatus","ChatRoomsComponent","toolbar","chatListing","disabledOrderByFilter","refreshChats","room","handleChatFilterLabels","BULK_CLAIM_CHAT","PREVIEW_CLAIM_CHAT","toolbarHeight","offsetHeight","filtersHeight","messageWindowHeight","innerHeight","height","ChatWindowComponent","apiService","cd","selectedClaimChatId","chatWindow","footer","searchChatMessagesInput","chatWindowRemainingTime","fileToSend","messageFile","messageFileUrl","fileDropError","maxLinesForMaxHeight","currentMessageLines","previousMessageLines","detectChangesSub","mimeTypes","chatsOptions","closeDialog","getChatMessages","reassignChatDialog","EDIT_WHATSAPP_CHAT_NOTES","editReferenceNumberDialog","editWhatsAppUserDialog","record","startTime","timer","recordTime","stream","isDragging","searchMessagesOverlay","recording","sendingMessage","newRemainingTime","selectedClaimChatWindowLeft","markForCheck","getMediaTypes","complete","updateWhatsappUserName","handleChatOptions","clearSearch","updateClaimedChatMessages","getMimeTypes","co","setTimeout","isEnter","footerHeight","maxHeight","textarea","lineHeight","parseInt","getComputedStyle","Math","ceil","minFooterHeight","minHeight","maxFooterHeight","maxMessageWindowHeight","increaseLineAmount","multiplier","fileList","files","from","file","isValidFiles","handleFileUpload","handleFileDisplay","join","preventDefault","isStillInsideChatWindow","dataTransfer","items","header","values","validFile","dataURL","bypassSecurityTrustUrl","every","Promise","reject","fileSizeMB","size","toString","pop","selectedClaimedChat","filePrefixName","sendMessage","sendWhatsappMessage","systemUserId","handleFooterAndMessageWindowHeight","ADD_UPDATE_REFERENCE_NUMBER","chatToUpdate","getChatToUpdate","groupIndex","m","now","currentTime","elapsedTimeInSeconds","floor","formatTimer","time","minutes","seconds","startTimer","navigator","mediaDevices","getUserMedia","audio","then","successCallback","stopTimer","getTracks","track","stop","mediaStream","numberOfAudioChannels","processRecording","stopRecording","File","newGuid","r","random","v","contains","relatedTarget","SpinnerComponent","reason","ClaimRoomChatDialogComponent","groupOptions","selectedGroupOptionId","getUsersGroups","claimChat","sendInternalMessage","ReassignChatDialogComponent","userOptions","selectedUserOptionId","getUsersInGroup","getAllGroups","getOnlineUsersInGroup","reassignChatsToGroup","handleClosingAndReassigningChatToGroup","reassignChatToUser","reassignChat","TemplateApiService","ApiService","LoginComponent","userName","waitingResponse","loginUser","res","login","PermissionsService","alert","permission","requestPermission","BrowserService","_browserFocused","_visiblility","setupFocusDetection","initializePageVisibility","focus$","blur$","addEventListener","visiblility","visibilityState","MessageService","_messages","_displayMessages","displayMessages","messageDates","getMessageDates","getMessagesForDate","uniqueDates","sortedDates","formatMessageDate","dateString","today","yesterday","messageDate","chatPanel","messageIndex","imageExtensions","audioExtensions","mediaExtensions","imageUrl","routes","path","component","canActivate","redirectTo","AppRoutingModule","forRoot","ChatApiService","reassignToUserId","fromDate","SideMenuComponent","onMenuStateChange","MaterialModule","provide","useValue","appearance","MessagesPreviewClaimChatDialogComponent","ToastMessageService","snackBar","panelClass","durationInMs","verticalPosition","horizontalPosition","config","openFromComponent","bootstrapModule","webpackEmptyAsyncContext"],"mappings":"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","file":"main-es5.js","sourcesContent":["import { Component, ElementRef, NgZone, OnInit } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Location } from '@angular/common';\r\nimport * as L from \"leaflet\";\r\nimport \"leaflet.markercluster\";\r\nimport { latLng, tileLayer, marker, icon, Popup, Layer, Control, Map, } from 'leaflet';\r\nimport 'leaflet/dist/images/marker-shadow.png';\r\nimport 'leaflet/dist/images/marker-icon.png';\r\nimport * as _ from 'lodash'\r\n\r\n@Component({\r\n selector: 'app-location',\r\n templateUrl: './location.component.html',\r\n styleUrls: ['./location.component.scss']\r\n})\r\nexport class LocationComponent implements OnInit {\r\n\r\n myLatLng: any = [];\r\n initialRenderComplete = false;\r\n\r\n fitBounds: any = undefined;\r\n map: Map;\r\n LAYER_OSM = {\r\n id: \"openstreetmap\",\r\n name: \"Open Street Map\",\r\n enabled: false,\r\n layer: L.tileLayer(\"http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\", {\r\n maxZoom: 18,\r\n attribution: \"Open Street Map\"\r\n })\r\n };\r\n\r\n\r\n layersControlOptions = { position: \"bottomright\" };\r\n baseLayers = {\r\n \"Open Street Map\": this.LAYER_OSM.layer\r\n };\r\n options = {\r\n zoom: 5,\r\n center: latLng([-29.8225845, 30.8591048]),\r\n attributionControl: false,\r\n maxZoom: 18,\r\n };\r\n\r\n markerClusterData: any[] = []; \r\n\r\n markerClusterGroup: L.MarkerClusterGroup;\r\n markerClusterOptions: L.MarkerClusterGroupOptions = {\r\n iconCreateFunction: (cluster) => {\r\n var markers = cluster.getAllChildMarkers();\r\n let hasAlert = false\r\n let found = _.find(markers, (d) => {\r\n return d.hasAlert == true\r\n })\r\n if (found) {\r\n hasAlert = true\r\n }\r\n var html = '
' + markers.length + '
';\r\n if (hasAlert) {\r\n return L.divIcon({ html: html, className: 'marker-cluster marker-cluster-large', iconSize: L.point(40, 40) });\r\n }\r\n else {\r\n return L.divIcon({ html: html, className: 'marker-cluster marker-cluster-small', iconSize: L.point(40, 40) });\r\n }\r\n },\r\n // spiderfyOnMaxZoom: false, showCoverageOnHover: true, zoomToBoundsOnClick: false \r\n };\r\n\r\n markerClusterReady(group: L.MarkerClusterGroup) {\r\n this.markerClusterGroup = group;\r\n }\r\n\r\n constructor(private el: ElementRef,\r\n private _ngZone: NgZone,\r\n\r\n ) { }\r\n\r\n async ngOnInit() {\r\n this.map = L.map('map').setView([-32.9359151,27.7746228], 1);\r\n L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\r\n attribution: 'edupala.com © Angular LeafLet',\r\n }).addTo(this.map);\r\n }\r\n\r\n onMapReady(map: Map) {\r\n this.map = map;\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.map) {\r\n this.map.clearAllEventListeners();\r\n this.map.remove();\r\n } \r\n this.el.nativeElement.remove();\r\n }\r\n\r\n}\r\n","
\r\n
\r\n
\r\n","\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n search\r\n \r\n
\r\n
\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n Choose a date to start*\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
Reference No. {{ !closedChat.refNo ? 'None' : closedChat.refNo }} WhatsApp User\r\n {{ closedChat.whatsappUserName }}\r\n Body {{ closedChat.body }} Sent Date {{ formatDate( closedChat.sendDate) }} Group {{ closedChat.group }} Last Claimed By {{ closedChat.lastClaimedBy || '-' }}
\r\n\r\n
No\r\n Closed chats found
\r\n\r\n \r\n \r\n
\r\n","import { Component, OnInit, ViewChild } from '@angular/core';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport * as moment from 'moment';\r\nimport { ClosedChats as ClosedChat } from '../../../interfaces/chat.interfaces';\r\nimport { ChatApiService } from '../../services/api/chat.api.service';\r\nimport { ToastMessageService } from '../../components/toast-message/toast.message.service';\r\nimport { SystemUser, WhatsappUser } from '../../../interfaces/user.interfaces';\r\nimport { UserApiService } from '../../services/api/user.api.service';\r\nimport { Dropdown } from '../../../interfaces/global.interfaces';\r\nimport { ChatService } from '../../services/chats/chat.service';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DialogComponent } from '../../components/dialog/dialog.component';\r\nimport { DialogType } from '../../enums';\r\nimport { Location } from '@angular/common';\r\nimport { ErrorService } from '../../services/error.service';\r\n\r\n@Component({\r\n selector: 'app-closed-chats',\r\n templateUrl: './closed-chats.component.html',\r\n styleUrls: ['./closed-chats.component.scss']\r\n})\r\nexport class ClosedChatsComponent implements OnInit {\r\n\r\n @ViewChild(MatSort) sort!: MatSort;\r\n @ViewChild(MatPaginator) paginator!: MatPaginator;\r\n @ViewChild('picker') picker: any;\r\n public displayedColumns: string[] = ['refNo', 'whatsappUserName', 'body', 'sendDate', 'group', 'lastClaimedBy'];\r\n public closedChats: MatTableDataSource = new MatTableDataSource([]);\r\n public selectedDate!: Date;\r\n public systemUsers: Dropdown[] = [];\r\n public selectedSystemUserId!: number;\r\n public selectedWhatsappUserId!: number;\r\n public whatsappUsers: Dropdown[] = [];\r\n public selectedClosedChat: ClosedChat | null = null;\r\n public selectedRowIndex: number = -1;\r\n\r\n public tableSpinner: boolean = false;\r\n public showSpinner: boolean = false;\r\n\r\n constructor(\r\n public chatService: ChatService,\r\n private chatApiService: ChatApiService,\r\n private userApiService: UserApiService,\r\n private toastMessageService: ToastMessageService,\r\n public dialog: MatDialog,\r\n private error: ErrorService,\r\n private location: Location\r\n ) { }\r\n\r\n async ngOnInit() {\r\n this.showSpinner = true;\r\n await this.getSystemUsers();\r\n this.showSpinner = false;\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.closedChats.paginator = this.paginator;\r\n this.closedChats.sort = this.sort;\r\n }\r\n\r\n public async getSystemUsers(): Promise {\r\n try {\r\n const resp = await this.userApiService.getSystemUsers();\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get system users', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n resp.result.map((user: SystemUser) => {\r\n this.systemUsers.push({\r\n value: user.id,\r\n label: user.loginName\r\n });\r\n });\r\n await this.getWhatsappUsers();\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to get system users.', err, 'closed-chats.getSystemUsers()');\r\n this.toastMessageService.showToastMessage('Failed to get system users', 'toast-message-error');\r\n }\r\n }\r\n\r\n private async getWhatsappUsers(): Promise {\r\n try {\r\n const resp = await this.userApiService.getWhatsAppUsers();\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get whatsapp users', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n resp.result.map((user: WhatsappUser) => {\r\n this.whatsappUsers.push({\r\n value: user.whatsappUserId,\r\n label: this.chatService.getFormattedName(user.firstName, user.lastName, user.whatsappUserNumber) ?? user.whatsappUserNumber\r\n });\r\n });\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to get whatsapp users.', err, 'closed-chats.getWhatsappUsers()');\r\n this.toastMessageService.showToastMessage('Failed to get whatsapp users', 'toast-message-error');\r\n }\r\n }\r\n\r\n public async getClosedChats(): Promise {\r\n this.tableSpinner = true;\r\n try {\r\n const resp = await this.chatApiService.getClosedChatsFromDateAndOptionallyUser(this.selectedDate, this.selectedSystemUserId, this.selectedWhatsappUserId);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get closed chats', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else if (!resp.result || resp.result.length === 0) this.toastMessageService.showToastMessage('No closed chats found', 'toast-message-info');\r\n else {\r\n this.closedChats.data = resp.result;\r\n this.closedChats.data.map(cc => {\r\n cc.whatsappUserName = this.chatService.getFormattedName(cc.firstName, cc.lastName, cc.whatsappUserNumber) ?? cc.whatsappUserNumber;\r\n });\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to get closed chats.', err, 'closed-chats.getClosedChats()');\r\n this.toastMessageService.showToastMessage('Failed to get closed chats', 'toast-message-error');\r\n }\r\n this.tableSpinner = false;\r\n }\r\n\r\n public async onClosedChatClick(closedChat: ClosedChat, index: number) {\r\n this.selectedRowIndex = index;\r\n this.selectedClosedChat = closedChat;\r\n\r\n const dialogRef = this.dialog.open(DialogComponent, {\r\n data: { dialogTypeId: DialogType.PREVIEW_CHAT_MESSAGES, chat: this.selectedClosedChat },\r\n autoFocus: false\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(() => {\r\n this.selectedClosedChat = null;\r\n this.selectedRowIndex = -1;\r\n });\r\n }\r\n\r\n public formatDate(date: Date) { return moment(date).format('YYYY/MM/DD hh:mm a'); }\r\n\r\n public filterClosedChats(filter: string) { this.closedChats.filter = filter.trim().toLowerCase(); }\r\n\r\n public goBack() { this.location.back(); }\r\n}","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, ViewChild } from '@angular/core';\r\nimport { Message } from '../../../interfaces/message.interfaces';\r\nimport * as _ from 'lodash';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { ClaimedChatsService } from '../../services/chats/claimed.chats.service';\r\n\r\n@Component({\r\n selector: 'message-window',\r\n templateUrl: './message-window.component.html',\r\n styleUrls: ['./message-window.component.scss']\r\n})\r\nexport class MessageWindowComponent implements OnInit, OnChanges {\r\n\r\n @Input() public messages: Message[] = [];\r\n @Input() public searchTerm: string | null = '';\r\n @Input() public findNextResult: EventEmitter = new EventEmitter();\r\n @Input() public findPreviousResult: EventEmitter = new EventEmitter();\r\n @Input() public navigateToNextResultEmitter: EventEmitter = new EventEmitter();\r\n @Input() public navigateToPreviousResultEmitter: EventEmitter = new EventEmitter();\r\n @Input() public scrollToBottomEmitter: EventEmitter = new EventEmitter();\r\n @Output() public messageSearch: EventEmitter = new EventEmitter();\r\n @ViewChild('messageWindow', { static: false }) public messageWindow: ElementRef | null = null;\r\n @ViewChild('image', { static: false }) public image: ElementRef | null = null;\r\n\r\n public searchResults: Message[] = [];\r\n public currentResultIndex: number = 0;\r\n private selectedChatId: number | null = null;\r\n public showScrollIcon: boolean = false;\r\n public imagePreview: string | null = null;\r\n public currentImageRotation: number = 0;\r\n private shouldAutoScroll: boolean = true;\r\n\r\n constructor(public messageService: MessageService, private claimedChatService: ClaimedChatsService) { }\r\n\r\n ngOnInit() {\r\n this.subscribeToParentEmitters();\r\n if (this.messages?.length == 0) return;\r\n this.setup();\r\n }\r\n\r\n private setup() {\r\n this.selectedChatId = this.messages[0]?.chatId;\r\n this.messageService.messages = [...this.messages];\r\n this.shouldAutoScroll = true;\r\n this.messageService.handleDisplayMessages();\r\n this.scrollToBottom();\r\n }\r\n\r\n public subscribeToParentEmitters(): void {\r\n this.navigateToNextResultEmitter?.subscribe(() => {\r\n this.navigateToNextResult();\r\n });\r\n\r\n this.navigateToPreviousResultEmitter?.subscribe(() => {\r\n this.navigateToPreviousResult();\r\n });\r\n\r\n this.scrollToBottomEmitter?.subscribe(() => {\r\n this.scrollToBottom();\r\n });\r\n }\r\n\r\n ngOnChanges() {\r\n //will update the messages if the chat has changed\r\n if (this.selectedChatId !== this.claimedChatService.getSelectedClaimChat?.chatId || this.messageService.messages?.length !== this.messages.length) {\r\n this.imagePreview = null;\r\n this.setup();\r\n } else {\r\n this.searchChatMessages();\r\n this.messageSearchChange();\r\n }\r\n }\r\n\r\n ngAfterViewChecked() {\r\n this.autoScrollToBottom();\r\n }\r\n\r\n public searchChatMessages() {\r\n const search = this.searchTerm?.trim()?.toLowerCase();\r\n\r\n //search only kicks in if the search length is more than or equal to 2\r\n if (!search || search.length <= 2) {\r\n this.searchResults = [];\r\n this.currentResultIndex = 0;\r\n this.messageSearchChange();\r\n return;\r\n }\r\n\r\n this.searchResults = _.filter(this.messages, (message) => message.body.trim().toLowerCase().includes(search));\r\n this.messageSearchChange();\r\n }\r\n\r\n public navigateToNextResult(): void {\r\n if (this.searchResults.length === 0) {\r\n return; // No search results\r\n }\r\n\r\n this.currentResultIndex = (this.currentResultIndex + 1) % this.searchResults.length;\r\n this.scrollToResult();\r\n this.messageSearchChange();\r\n }\r\n\r\n public navigateToPreviousResult(): void {\r\n if (this.searchResults.length === 0) {\r\n return; // No search results\r\n }\r\n\r\n this.currentResultIndex = (this.currentResultIndex - 1 + this.searchResults.length) % this.searchResults.length;\r\n this.scrollToResult();\r\n this.messageSearchChange();\r\n }\r\n\r\n public isMessageSearchMatch(messageId: number): boolean {\r\n if (!this.searchResults) return false;\r\n return this.searchResults.some(message => message.messageId === messageId);\r\n }\r\n\r\n public onScroll() {\r\n const scrollThreshold = 150;\r\n if (!this.messageWindow) return;\r\n const distanceFromBottom = this.messageWindow.nativeElement.scrollHeight - (this.messageWindow.nativeElement.scrollTop + this.messageWindow.nativeElement.clientHeight);\r\n this.showScrollIcon = distanceFromBottom > scrollThreshold;\r\n }\r\n\r\n public autoScrollToBottom() {\r\n if (!this.shouldAutoScroll) return;\r\n this.scrollToBottom();\r\n this.shouldAutoScroll = false;\r\n }\r\n\r\n public scrollToBottom() {\r\n if (this.messageWindow) this.messageWindow.nativeElement.scrollTop = this.messageWindow.nativeElement.scrollHeight;\r\n }\r\n\r\n private scrollToResult(): void {\r\n const resultIndex = this.searchResults[this.currentResultIndex].messageId;\r\n if (!this.messageWindow) return;\r\n const element = this.messageWindow.nativeElement.querySelector(`#message-${resultIndex}`);\r\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n }\r\n\r\n public smoothScrollToBottom() {\r\n if (!this.messageWindow) return;\r\n\r\n this.messageWindow.nativeElement.scrollTo({\r\n top: this.messageWindow.nativeElement.scrollHeight,\r\n behavior: 'smooth'\r\n });\r\n }\r\n\r\n public messageSearchChange() {\r\n const payload: MessageSearch = {\r\n searchResults: this.searchResults.length,\r\n currentResultIndex: this.currentResultIndex\r\n };\r\n this.messageSearch.emit(payload);\r\n }\r\n\r\n public rotateImage(degrees: number) {\r\n if (!this.image) return;\r\n\r\n this.currentImageRotation += degrees;\r\n\r\n const newRotation = `rotate(${this.currentImageRotation}deg)`;\r\n\r\n this.image.nativeElement.style.transform = newRotation;\r\n }\r\n\r\n public initializeRotation() {\r\n if (!this.image) return null;\r\n\r\n this.image.nativeElement.style.transform = `rotate(${this.currentImageRotation}deg)`;\r\n }\r\n\r\n public clearSearch() {\r\n this.searchTerm = '';\r\n this.searchResults = [];\r\n this.currentResultIndex = 0;\r\n this.messageSearchChange();\r\n }\r\n}\r\n\r\nexport interface MessageSearch {\r\n searchResults: number;\r\n currentResultIndex: number;\r\n}","
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n arrow_downward\r\n \r\n
\r\n
\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\r\n\r\n@Component({\r\n templateUrl: './toast-message.component.html',\r\n styleUrls: ['./toast-message.component.scss']\r\n})\r\nexport class ToastMessageComponent {\r\n constructor(@Inject(MAT_SNACK_BAR_DATA) public data: any) {}\r\n}","{{ data.message }}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { RoomChat } from 'src/interfaces/chat.interfaces';\r\nimport { RoomChatFilterBy, RoomChatOrderBy } from '../enums';\r\nimport * as _ from 'lodash';\r\nimport { ChatRoomService } from '../services/chats/chat.room.service';\r\n\r\n@Pipe({\r\n name: 'chatRoomFilter'\r\n})\r\nexport class ChatRoomFilterPipe implements PipeTransform {\r\n\r\n constructor(private chatRoomService: ChatRoomService) { }\r\n\r\n transform(chats: RoomChat[], selectedChatFilter: RoomChatFilterBy, selectedOrderFilter: RoomChatOrderBy): RoomChat[] {\r\n return this.chatRoomService.filterChats(chats, selectedChatFilter, selectedOrderFilter);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { environment } from '../../environments/environment';\r\nimport { Socket, io } from 'socket.io-client/build/index';\r\nimport { AuthService } from './auth/auth.service';\r\nimport { Message } from '../../interfaces/message.interfaces';\r\nimport { ClaimChatInternalMessage, CloseChatInternalMessage, DisconnectInternalMessage, InternalMessage, ReassignChatInternalMessage } from '../../interfaces/internal.message.interfaces';\r\nimport { InternalMessageType } from '../enums';\r\nimport { ClaimedChatsService } from './chats/claimed.chats.service';\r\nimport { NotificationService } from './notification.service';\r\nimport { BrowserService } from './browser.service';\r\nimport { MessageService } from './message.service';\r\nimport { ChatRoomService } from './chats/chat.room.service';\r\nimport { Router } from '@angular/router';\r\nimport { ToastMessageService } from '../components/toast-message/toast.message.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SocketService {\r\n\r\n private _connected: boolean = false;\r\n private _timeout: boolean = false;\r\n private _notConnectedReason: string = '';\r\n private socket: Socket = {} as Socket;\r\n\r\n public get timeout(): boolean { return this._timeout; }\r\n\r\n public get connected(): boolean { return this._connected; }\r\n\r\n public get notConnectedReason(): string { return this._notConnectedReason; }\r\n\r\n public set connected(value: boolean) { this._connected = value; }\r\n\r\n public set timeout(value: boolean) { this._timeout = value; }\r\n\r\n public set notConnectedReason(value: string) { this._notConnectedReason = value; }\r\n\r\n constructor(\r\n private auth: AuthService,\r\n private notificationService: NotificationService,\r\n private claimedChatsService: ClaimedChatsService,\r\n private chatRoomService: ChatRoomService,\r\n private messageService: MessageService,\r\n private browserService: BrowserService,\r\n private toastMessageService: ToastMessageService,\r\n private router: Router\r\n ) { }\r\n\r\n public setup() {\r\n this.socket = io(environment.socketURL, {\r\n reconnection: true,\r\n reconnectionAttempts: 5,\r\n reconnectionDelay: 1000,\r\n reconnectionDelayMax: 5000\r\n });\r\n\r\n //socket events\r\n this.socket.on('internalMsg', (msg: InternalMessage) => this.internalMessage(msg));\r\n this.socket.on('disconnect', () => this.disconnect());\r\n this.socket.on('connect', () => this.connect());\r\n }\r\n\r\n private connect() {\r\n this.connected = true;\r\n this.timeout = false;\r\n this.socket.emit('join', {\r\n userId: this.auth.userId,\r\n loginName: this.auth.loginName\r\n });\r\n this.auth.lostConnection = false;\r\n }\r\n\r\n //used in side menu component html\r\n public logout() {\r\n this.socket.disconnect();\r\n this.auth.logout();\r\n this.connected = false;\r\n }\r\n\r\n public disconnect(): void {\r\n this.timeout = true;\r\n this.connected = false;\r\n this.notConnectedReason = 'Connection lost to server. Please wait while we try to reconnect';\r\n }\r\n\r\n private async internalMessage(msg: InternalMessage) {\r\n switch (msg.internalMessageType) {\r\n case InternalMessageType.USER_LOGGED_CLAIM_CHATS:\r\n this.claimedChatsService.handleUserLoggedClaimedChats(msg.internalMessage.claimedChats, msg.internalMessage.loginName);\r\n break;\r\n\r\n case InternalMessageType.DISCONNECT:\r\n await this.handleUserDisconnect(msg.internalMessage);\r\n break;\r\n\r\n case InternalMessageType.INBOUND_MESSAGE:\r\n this.inboundWhatsappMessage(msg.internalMessage.message);\r\n break;\r\n\r\n case InternalMessageType.NOTIFY_USERS_CHAT_CLAIMED:\r\n this.handleUserClaimChats(msg.internalMessage);\r\n break;\r\n\r\n case InternalMessageType.CHAT_CLOSE:\r\n this.handleChatClose(msg.internalMessage);\r\n break;\r\n\r\n case InternalMessageType.PRODUCT_CHANGE:\r\n this.claimedChatsService.handleProductChange(msg.internalMessage.userId, msg.internalMessage.loginName, msg.internalMessage.productName);\r\n break;\r\n\r\n case InternalMessageType.MESSAGE_STATUS_UPDATE:\r\n this.messageService.handleMessageStatusupdate(msg.internalMessage);\r\n break;\r\n\r\n case InternalMessageType.REASSIGN_CHAT:\r\n this.handleReassignChat(msg.internalMessage);\r\n break;\r\n }\r\n }\r\n\r\n private inboundWhatsappMessage(message: Message): void {\r\n this.claimedChatsService.handleInboundWhatsappMessage(message);\r\n\r\n if ((this.claimedChatsService.getSelectedClaimChat?.chatId !== message.chatId || this.claimedChatsService.getSelectedClaimChat?.chatId === message.chatId) && !this.browserService.browserFocused) {\r\n this.notificationService.messageReceivedNotification(message);\r\n } else if (!this.claimedChatsService.getSelectedClaimChat && !this.browserService.browserFocused) {\r\n this.notificationService.messageReceivedNotification(message);\r\n } else if (!this.claimedChatsService.getSelectedClaimChat && this.browserService.browserFocused) {\r\n this.notificationService.messageReceivedNotification(message);\r\n }\r\n }\r\n\r\n private async handleUserDisconnect(msg: DisconnectInternalMessage) {\r\n this.claimedChatsService.handleUserDisconnect(msg.serverUserId, msg.loginName);\r\n //only get chat rooms if the user is on the chat rooms screen\r\n if (this.router.url === '/chat-rooms') await this.chatRoomService.getChatRooms();\r\n }\r\n\r\n private handleUserClaimChats(msg: ClaimChatInternalMessage) {\r\n const chatIds: number[] = msg.chats.map(c => c.chatId);\r\n this.chatRoomService.handleRemovingChatsFromRoom(chatIds);\r\n }\r\n\r\n private handleChatClose(msg: CloseChatInternalMessage) {\r\n this.claimedChatsService.handleRemovingClaimedChats(msg.chatIds);\r\n this.chatRoomService.handleRemovingChatsFromRoom(msg.chatIds);\r\n }\r\n\r\n private handleReassignChat(msg: ReassignChatInternalMessage) {\r\n if (!this.auth.user || !this.auth.user.id || !this.auth.user.loginName) return;\r\n this.claimedChatsService.handleChatsReassignToUser(msg.chats, this.auth.user.id, this.auth.user.loginName);\r\n this.toastMessageService.showToastMessage(`You have been assigned ${msg.chats.length} chat(s) from ${msg.loginName}`, 'toast-message-info');\r\n }\r\n\r\n public async sendInternalMessage(internalMessage: InternalMessage) {\r\n if (!this.socket.connected) return;\r\n\r\n this.socket.emit('internalMsg', internalMessage);\r\n this.auth.resetUserSessionTimer();\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { ChatRooms, RoomChat } from \"../../../interfaces/chat.interfaces\";\r\nimport { ChatRoomTab, Dropdown } from \"../../../interfaces/global.interfaces\";\r\nimport { AuthService } from \"../auth/auth.service\";\r\nimport { ChatApiService } from \"../api/chat.api.service\";\r\nimport { ToastMessageService } from \"src/app/components/toast-message/toast.message.service\";\r\nimport { ErrorService } from \"../error.service\";\r\nimport { ChatStatus, RoomChatFilterBy, RoomChatOrderBy } from \"../../enums\";\r\nimport { ChatService } from \"./chat.service\";\r\nimport * as _ from \"lodash\";\r\nimport * as moment from \"moment\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ChatRoomService {\r\n\r\n private _heading: string = '';\r\n private _chatRooms: ChatRooms[] = [];\r\n private _totalChats: number = 0;\r\n private _chatFilter: RoomChatFilterBy = RoomChatFilterBy.TALK_TO_AN_AGENT;\r\n private _selectedTab: ChatRoomTab | null = null;\r\n private _selectedChats: RoomChat[] = [];\r\n private _chatFilterOptions: Dropdown[] = [\r\n {\r\n label: 'Talk To An Agent',\r\n value: RoomChatFilterBy.TALK_TO_AN_AGENT\r\n },\r\n {\r\n label: 'Chat Date',\r\n value: RoomChatFilterBy.CHAT_DATE\r\n },\r\n {\r\n label: 'Expired Chats',\r\n value: RoomChatFilterBy.EXPIRED_CHATS\r\n },\r\n {\r\n label: 'Active Chats',\r\n value: RoomChatFilterBy.ACTIVE_CHATS\r\n }\r\n ];\r\n\r\n private _orderFilter: RoomChatOrderBy = RoomChatOrderBy.DESCENDING;\r\n private _orderFilterOptions: Dropdown[] = [\r\n {\r\n label: 'Ascending',\r\n value: RoomChatOrderBy.ASCENDING\r\n },\r\n {\r\n label: 'Descending',\r\n value: RoomChatOrderBy.DESCENDING\r\n }\r\n ];\r\n\r\n\r\n public get heading(): string { return this._heading; }\r\n\r\n public get chatRooms(): ChatRooms[] { return this._chatRooms; }\r\n\r\n public get totalChats(): number { return this._totalChats; }\r\n\r\n public get selectedTab(): ChatRoomTab | null { return this._selectedTab; }\r\n\r\n public get selectedChats(): RoomChat[] { return this._selectedChats; }\r\n\r\n public get chatFilter(): RoomChatFilterBy { return this._chatFilter; }\r\n\r\n public get orderFilter(): RoomChatOrderBy { return this._orderFilter; }\r\n\r\n public get orderFilterOptions(): Dropdown[] { return this._orderFilterOptions; }\r\n\r\n public get chatFilterOptions(): Dropdown[] { return this._chatFilterOptions; }\r\n\r\n public set heading(heading: string) { this._heading = heading; }\r\n\r\n public set chatRooms(chatRooms: ChatRooms[]) { this._chatRooms = chatRooms; }\r\n\r\n public set totalChats(totalChats: number) { this._totalChats = totalChats; }\r\n\r\n public set selectedTab(tab: ChatRoomTab | null) { this._selectedTab = tab; }\r\n\r\n public set selectedChats(chatRooms: RoomChat[]) { this._selectedChats = chatRooms; }\r\n\r\n public set chatFilterOptions(chatFilterOptions: Dropdown[]) { this._chatFilterOptions = chatFilterOptions; }\r\n\r\n public set chatFilter(chatFilter: RoomChatFilterBy) { this._chatFilter = chatFilter; }\r\n\r\n public set orderFilter(orderByFiler: RoomChatOrderBy) { this._orderFilter = orderByFiler; }\r\n\r\n constructor(\r\n private authService: AuthService,\r\n private chatApiService: ChatApiService,\r\n private chatService: ChatService,\r\n private error: ErrorService,\r\n private toastMessageService: ToastMessageService) { }\r\n\r\n public async getChatRooms(): Promise {\r\n try {\r\n const resp = await this.chatApiService.getChatRooms();\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get chat rooms', 'toast-message-error');\r\n else if (resp.errorCode !== 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.chatRooms = resp.result;\r\n if (this.chatRooms?.length > 0) {\r\n this.selectedChats = [];\r\n this.calculateChatsInRoom();\r\n this.handleRoomHeading();\r\n }\r\n }\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to get chat rooms', 'toast-message-error');\r\n this.error.handleError('Failed to get chat rooms.', err, 'chat.room.service.getChatRooms()');\r\n }\r\n }\r\n\r\n public handleRemovingChatsFromRoom(chatIds: number[]) {\r\n if (!this.chatRooms) return;\r\n const chatRooms = this.chatRooms;\r\n\r\n for (const chatRoom of chatRooms) {\r\n chatRoom.chats = chatRoom.chats.filter(chat => !chatIds.map(chatId => chatId).includes(chat.chatId));\r\n }\r\n\r\n this.chatRooms = [...chatRooms];\r\n this.handleRoomHeading();\r\n this.calculateChatsInRoom();\r\n }\r\n\r\n public handleRoomHeading() {\r\n let totalChatCount: number = 0;\r\n\r\n this.chatRooms.map((chatRoom) => {\r\n const chats = this.filterChats(chatRoom.chats, this.chatFilter, this.orderFilter);\r\n totalChatCount += chats.length;\r\n });\r\n\r\n this.heading = `${this.authService.user?.selectedProduct?.txt} Chat Rooms (${totalChatCount})`;\r\n }\r\n\r\n public handleChatFilterLabels(roomIndex: number) {\r\n this.selectedTab = {\r\n index: roomIndex,\r\n txt: this.chatRooms[roomIndex].roomName\r\n };\r\n\r\n const activeChatFilterIndex = this.chatFilterOptions.findIndex(chatFilter => chatFilter.value == RoomChatFilterBy.ACTIVE_CHATS);\r\n const expiredChatFilterIndex = this.chatFilterOptions.findIndex(chatFilter => chatFilter.value == RoomChatFilterBy.EXPIRED_CHATS);\r\n const talkToAgentChatFilterIndex = this.chatFilterOptions.findIndex(chatFilter => chatFilter.value == RoomChatFilterBy.TALK_TO_AN_AGENT);\r\n\r\n const activeChats = this.chatRooms[roomIndex].chats.filter(chat => !this.chatService.hasChatExpired(chat.chatExpiryDate));\r\n const expiredChats = this.chatRooms[roomIndex].chats.filter(chat => this.chatService.hasChatExpired(chat.chatExpiryDate));\r\n const talkToAgentChats = this.chatRooms[roomIndex].chats.filter(chat => chat.chatStatusId === ChatStatus.OPEN_BUT_REQUESTED_AGENT);\r\n\r\n this.chatFilterOptions[activeChatFilterIndex].label = `Active Chats (${activeChats.length})`;\r\n this.chatFilterOptions[expiredChatFilterIndex].label = `Expired Chats (${expiredChats.length})`;\r\n this.chatFilterOptions[talkToAgentChatFilterIndex].label = `Talk To An Agent (${talkToAgentChats.length})`;\r\n\r\n //need to do this in order for the dropdown options to trigger a change\r\n this.chatFilterOptions = [...this.chatFilterOptions];\r\n }\r\n\r\n public filterChats(chats: RoomChat[], selectedChatFilter: RoomChatFilterBy, selectedOrderFilter: RoomChatOrderBy): RoomChat[] {\r\n switch (selectedChatFilter) {\r\n case RoomChatFilterBy.CHAT_DATE:\r\n return this.filterByChatDate(chats, selectedOrderFilter);\r\n\r\n case RoomChatFilterBy.EXPIRED_CHATS:\r\n return this.filterByExpiredChats(chats);\r\n\r\n case RoomChatFilterBy.ACTIVE_CHATS:\r\n return this.filterByActiveChats(chats);\r\n\r\n case RoomChatFilterBy.TALK_TO_AN_AGENT:\r\n return this.filterByTalkToAnAgent(chats);\r\n\r\n // other types of filters if they come up with any other ones\r\n default:\r\n return [] as RoomChat[];\r\n }\r\n }\r\n\r\n private filterByChatDate(chats: RoomChat[], selectedOrderFilter: RoomChatOrderBy): RoomChat[] {\r\n chats = _.sortBy(chats, (chat) => {\r\n const insertDate = moment(chat.insertDate).format('YYYY/HH/DD hh:mm a');\r\n const currentDate = moment(new Date()).format('YYYY/HH/DD hh:mm a');\r\n if (insertDate > currentDate) {\r\n return chat;\r\n }\r\n });\r\n //if no selected order by, default to desc\r\n if (!selectedOrderFilter) selectedOrderFilter = RoomChatOrderBy.DESCENDING;\r\n\r\n const orderBy = selectedOrderFilter == RoomChatOrderBy.ASCENDING ? 'asc' : 'desc';\r\n\r\n return _.orderBy(chats, ['insertDate'], [orderBy]);\r\n }\r\n\r\n private filterByExpiredChats(chats: RoomChat[]): RoomChat[] {\r\n return _.filter(chats, (chat) => {\r\n const expired = this.chatService.hasChatExpired(chat.chatExpiryDate);\r\n return expired;\r\n });\r\n }\r\n\r\n private filterByActiveChats(chats: RoomChat[]): RoomChat[] {\r\n return _.filter(chats, (chat) => {\r\n const expired = this.chatService.hasChatExpired(chat.chatExpiryDate);\r\n return !expired;\r\n });\r\n }\r\n\r\n private filterByTalkToAnAgent(chats: RoomChat[]): RoomChat[] {\r\n return _.filter(chats, (chat) => {\r\n return chat.chatStatusId === ChatStatus.OPEN_BUT_REQUESTED_AGENT;\r\n });\r\n }\r\n\r\n public clear() {\r\n this.chatRooms = [];\r\n this.selectedTab = null;\r\n this.heading = '';\r\n this.totalChats = 0;\r\n }\r\n\r\n public calculateChatsInRoom() {\r\n this.chatRooms.map((chatRoom) => {\r\n const chats = this.filterChats(chatRoom.chats, this.chatFilter, this.orderFilter);\r\n chatRoom.roomTabName = `${chatRoom.roomName} (${chats.length})`;\r\n });\r\n }\r\n}","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogComponent } from '../dialog.component';\r\nimport { DialogService } from '../dialog.service';\r\nimport { ClaimedChatsService } from '../../../services/chats/claimed.chats.service';\r\nimport { ChatApiService } from '../../../services/api/chat.api.service';\r\nimport { ToastMessageService } from '../../toast-message/toast.message.service';\r\nimport { Chat } from '../../../../interfaces/chat.interfaces';\r\nimport { ErrorService } from '../../../services/error.service';\r\n\r\n@Component({\r\n selector: 'add-edit-reference-number-dialog',\r\n templateUrl: './add-edit-reference-number-dialog.component.html',\r\n styleUrls: ['./add-edit-reference-number-dialog.component.scss']\r\n})\r\nexport class AddEditReferenceNumberDialogComponent implements OnInit {\r\n public referenceNumber: string = '';\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n private dialogService: DialogService,\r\n public claimedChatsService: ClaimedChatsService,\r\n private chatApiService: ChatApiService,\r\n private toastMessageService: ToastMessageService,\r\n private error: ErrorService\r\n ) { }\r\n\r\n ngOnInit(): void { this.referenceNumber = this.claimedChatsService.getSelectedClaimChat?.refNo ?? ''; }\r\n \r\n public async updateReferenceNumber(): Promise {\r\n if (!this.claimedChatsService.getSelectedClaimChat) return;\r\n \r\n this.dialogService.showSpinner = true;\r\n try {\r\n const chat: Chat = this.claimedChatsService.getSelectedClaimChat;\r\n const resp = await this.chatApiService.updateChatRefNo(chat.chatId, this.referenceNumber);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to update chat reference number.', 'toast-message-error');\r\n else if (resp.errorCode !== 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-success');\r\n chat.refNo = this.referenceNumber;\r\n this.claimedChatsService.setSelectedClaimChat = { ...chat };\r\n this.dialogRef.close(true);\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to update chat reference number', err, 'add-edit-reference-number-dialog.updateReferenceNumber()');\r\n this.toastMessageService.showToastMessage('Failed to update chat reference number.', 'toast-message-error');\r\n }\r\n this.dialogService.showSpinner = false;\r\n }\r\n\r\n public cancel() {\r\n this.dialogRef.close();\r\n }\r\n}","
\r\n

Add/Update Ref Number

\r\n
\r\n \r\n Reference Number\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n","\r\n\r\nexport enum Product {\r\n NOVADT_OLD = 1,\r\n KENYA = 4,\r\n UAT = 5,\r\n UAT2 = 6,\r\n SAEX = 7,\r\n NOVADT = 8\r\n}\r\n\r\n//IF YOU ARE GOING TO RENAME THE ENUMS\r\n//BE AWARE THAT SOME OF THESE ENUMS ARE USED IN THE DIALOG COMPONENT HTML\r\nexport enum DialogType {\r\n EDIT_WHATSAPP_USER = 1,\r\n REASSIGN_CHAT = 2,\r\n CHAT_REASSIGNMENT = 3,\r\n LOGGED_TIMED_OUT = 4,\r\n ADD_UPDATE_REFERENCE_NUMBER = 5,\r\n CLOSE_CHAT = 6,\r\n USER_GROUPS = 7,\r\n LOGGED_IN_USERS = 8,\r\n PREVIEW_CHAT_MESSAGES = 9,\r\n LOGOUT_CONFIRMATION = 10,\r\n EDIT_WHATSAPP_CHAT_NOTES = 11,\r\n PREVIEW_CLAIM_CHAT = 12,\r\n BULK_CLAIM_CHAT = 13,\r\n ADD_WHATSAPP_USER = 14\r\n}\r\n\r\nexport enum RoomChatFilterBy {\r\n CHAT_DATE = 1,\r\n EXPIRED_CHATS = 2,\r\n ACTIVE_CHATS = 3,\r\n TALK_TO_AN_AGENT = 4\r\n}\r\n\r\nexport enum RoomChatOrderBy {\r\n ASCENDING = 1,\r\n DESCENDING = 2\r\n}\r\n\r\nexport enum MessageType {\r\n TEMPLATE = 1,\r\n AUTO_RESPONDER = 2,\r\n SYSTEM_USER = 3,\r\n WHATSAPP_USER = 4,\r\n TEMPLATE_RESPONSE = 5,\r\n SAEX_CLOSE_CHAT = 6\r\n}\r\n\r\nexport enum InternalMessageType {\r\n REASSIGN_CHAT = 1,\r\n DISCONNECT = 2,\r\n NOTIFY_USERS_CHAT_CLAIMED = 3,\r\n MESSAGE_STATUS_UPDATE = 4,\r\n CHAT_CLOSE = 6,\r\n USER_LOGGED_CLAIM_CHATS = 8,\r\n ACCEPT_REASSIGNMENT_OF_CHAT = 9,\r\n PRODUCT_CHANGE = 10,\r\n INBOUND_MESSAGE = 11\r\n}\r\n\r\nexport enum ChatStatus {\r\n OPEN = 1,\r\n TIMED_OUT = 2,\r\n CLOSED_FROM_A_SYSTEM_USER = 3,\r\n CLOSED_FROM_AUTO_RESPONDER_BY_WHATSAPP_USER = 4,\r\n CLOSED_BY_THE_SYSTEM = 5,\r\n OPEN_BUT_REQUESTED_AGENT = 6,\r\n CLOSED_FROM_AVECS_LEGAL_ENTITY = 7,\r\n CLOSED_FROM_CLOSE_JOB = 8\r\n}","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { ErrorService } from '../error.service';\r\nimport { environment } from '../../../environments/environment';\r\nimport * as moment from 'moment';\r\nimport { HttpResponse } from '../../../interfaces/result.interfaces';\r\nimport { Products, User } from '../../../interfaces/user.interfaces';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { LoginRequest } from 'src/interfaces/global.interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AuthService {\r\n \r\n private _tokenExpiryTime: any = undefined;\r\n private _sessionValidMins: number = 0;\r\n private _user: User | null = null;\r\n private _isTimedOut: boolean = false;\r\n private _userProducts: Products[] = [];\r\n\r\n public lostConnection: boolean = true;\r\n public reasonLostConnection: string = '';\r\n private loggedInSubject = new BehaviorSubject(false);\r\n public loggedIn = this.loggedInSubject.asObservable();\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private error: ErrorService,\r\n private router: Router\r\n ) {\r\n this.loggedInSubject.next(this.isTokenValid());\r\n this.setupTokenExpirationCheck();\r\n }\r\n \r\n public get user(): User | null { return this._user; }\r\n\r\n public get loginName(): string | null { return this.user?.loginName || null; }\r\n \r\n public get formattedLoginName(): string {\r\n if (this.user && this.user.loginName) {\r\n return this.user.loginName[0].toUpperCase() + this.user.loginName.slice(1);\r\n } else return '';\r\n }\r\n\r\n public get userProducts(): Products[] { return this._userProducts; }\r\n\r\n public get isTimedOut(): boolean { return this._isTimedOut; }\r\n\r\n public get userId(): number | null { return this._user?.id || null; }\r\n\r\n public get token(): string | null { return this._user?.token || null; }\r\n\r\n public get tokenExpiryTime(): any { return this._tokenExpiryTime; }\r\n\r\n public set user(user: User | null) { this._user = user; }\r\n\r\n public set tokenExpiryTime(value: any) { this._tokenExpiryTime = value; }\r\n\r\n public set timedOut(value: boolean) { this._isTimedOut = value; }\r\n\r\n private set setUser(user: User) { this._user = user; }\r\n\r\n public set userProducts(userProducts: Products[]) { this._userProducts = userProducts; }\r\n\r\n public set setProduct(product: Products) {\r\n if (this.user && this.userProducts) {\r\n const existingProduct = this.userProducts.find(p => p.isDefaultProduct == 1);\r\n\r\n //if the existing product id is the same as the product id we are changing to\r\n //don't need to change isDefaultProduct\r\n if (existingProduct?.productId == product.productId) {\r\n this.user.selectedProduct = product;\r\n this.setSessionStorage();\r\n return;\r\n }\r\n \r\n const index = this.userProducts.findIndex(x => x.isDefaultProduct == 1);\r\n if (index >= 0) this.userProducts[index].isDefaultProduct = 0;\r\n \r\n this.user.selectedProduct = product;\r\n this.setSessionStorage();\r\n\r\n const newIndex = this.userProducts.findIndex(x => x.productId == product.productId);\r\n if (newIndex >= 0) this.userProducts[newIndex].isDefaultProduct = 1;\r\n }\r\n }\r\n\r\n public async loginUser(username: string, password: string): Promise {\r\n try {\r\n const requestBody: LoginRequest = {\r\n loginName: username,\r\n password: password\r\n };\r\n\r\n const resp = await this.http.post(`${environment.serverURL}/user/loginUser`, requestBody).toPromise();\r\n if (resp.errorCode === 0) {\r\n this.loggedInSubject.next(true);\r\n this.handleSuccessfulLogin(username, resp);\r\n }\r\n return resp;\r\n }\r\n catch (err) {\r\n this.error.handleError('Failed to login user', err, 'auth.service.loginUser');\r\n throw err;\r\n }\r\n }\r\n\r\n public async regUser(username: string, password: string): Promise {\r\n try {\r\n const requestBody: LoginRequest = {\r\n loginName: username,\r\n password: password\r\n };\r\n\r\n const resp = await this.http.post(`${environment.serverURL}/user/registerUser`, requestBody).toPromise();\r\n if (resp.errorCode === 0) {\r\n this.handleSuccessfulLogin(username, resp);\r\n } else {\r\n this.error.handleError(resp.errorMessage, null, 'AuthService.loginUser');\r\n }\r\n return resp;\r\n }\r\n catch (err) {\r\n this.error.handleError('Failed to register user', err, 'AuthService.regUser');\r\n throw err;\r\n }\r\n }\r\n\r\n private handleSuccessfulLogin(username: string, resp: HttpResponse) {\r\n this.user = {\r\n id: resp.result.userId,\r\n loginName: username,\r\n token: resp.result.sessionId,\r\n selectedProduct: null\r\n };\r\n this._sessionValidMins = resp.result.sessionValidMins;\r\n this.resetUserSessionTimer();\r\n this._isTimedOut = false;\r\n this.setSessionStorage();\r\n }\r\n\r\n public isTokenValid(): boolean {\r\n if (this.user && this.user.token) {\r\n return true;\r\n } else {\r\n const user = this.getSessionStorage();\r\n if (user && user.token) {\r\n this.lostConnection = false;\r\n return true;\r\n }\r\n else return false;\r\n }\r\n }\r\n\r\n public clearUser() {\r\n this.user = null;\r\n this.clearSessionStorage();\r\n this.tokenExpiryTime = undefined;\r\n }\r\n\r\n private clearSessionStorage() {\r\n sessionStorage.removeItem('userId');\r\n sessionStorage.removeItem('loginName');\r\n sessionStorage.removeItem('token');\r\n sessionStorage.removeItem('selectedProduct');\r\n sessionStorage.removeItem('sessionValidMins');\r\n sessionStorage.clear();\r\n }\r\n\r\n private setSessionStorage(): void {\r\n sessionStorage.userId = this.user?.id;\r\n sessionStorage.loginName = this.user?.loginName;\r\n sessionStorage.token = this.user?.token;\r\n sessionStorage.selectedProduct = JSON.stringify(this.user?.selectedProduct);\r\n sessionStorage.sessionValidMins = this._sessionValidMins;\r\n }\r\n\r\n private getSessionStorage(): User | null {\r\n this.setUser = {\r\n id: +sessionStorage.userId,\r\n loginName: sessionStorage.loginName,\r\n token: sessionStorage.token,\r\n selectedProduct: sessionStorage.selectedProduct ? JSON.parse(sessionStorage.selectedProduct) as Products : null\r\n };\r\n this._sessionValidMins = +sessionStorage.sessionValidMins;\r\n\r\n return this.user;\r\n }\r\n\r\n public logout() {\r\n this.loggedInSubject.next(false);\r\n this.clearUser();\r\n this.router.navigate(['/login']);\r\n }\r\n\r\n public resetUserSessionTimer() {\r\n if (!this.user) return;\r\n this.tokenExpiryTime = moment(new Date).add(this._sessionValidMins, 'm').toDate();\r\n }\r\n\r\n private setupTokenExpirationCheck() {\r\n setInterval(() => {\r\n if (this.user && this.user.token && this.tokenExpiryTime) {\r\n const duration = moment.duration(moment(this.tokenExpiryTime).diff(moment(new Date()).toDate()));\r\n this.timedOut = duration.asSeconds() < 0;\r\n if (this.isTimedOut) {\r\n this.logout();\r\n }\r\n }\r\n }, 15000);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ErrorService {\r\n\r\n private messages: string[] = [];\r\n private error: Error[] = [];\r\n private stack: string[] = [];\r\n\r\n private displaySource = new BehaviorSubject(false);\r\n private alertSource = new BehaviorSubject(\"\");\r\n private alertSourceHeader = new BehaviorSubject(\"\");\r\n\r\n constructor() { }\r\n\r\n public handleError(message: string, err: Error | unknown, caller: string) {\r\n this.messages.push(message);\r\n this.error.push(err as Error);\r\n this.stack.push(caller);\r\n console.error(message);\r\n console.error(err);\r\n this.showMessage(message, err as Error);\r\n }\r\n\r\n public showNotification(heading: string, message: string) {\r\n console.log(heading, '-> ', message);\r\n this.showMessage(heading, message);\r\n }\r\n\r\n public getHistoricalErrors() {\r\n return {\r\n messages: this.messages,\r\n error: this.error,\r\n stack: this.stack\r\n };\r\n }\r\n\r\n public clearErrors() {\r\n this.messages = [];\r\n this.error = [];\r\n this.stack = [];\r\n }\r\n\r\n private showMessage(heading: string, message: string | Error) {\r\n this.alertSourceHeader.next(heading);\r\n this.alertSource.next(message);\r\n this.displaySource.next(true);\r\n }\r\n}\r\n","
\r\n \r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n search\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
First Name{{ whatsappUser.firstName }}Last Name{{ whatsappUser.lastName }}Number{{ whatsappUser.whatsappUserNumber }}Last Chat Date{{ whatsappUser.lastChatDate }}Notes{{ whatsappUser.notes }}Actions\r\n \r\n
\r\n\r\n
No\r\n WhatsApp Users found
\r\n\r\n \r\n \r\n \r\n
\r\n","import { AfterViewInit, Component, OnInit, ViewChild } from '@angular/core';\r\nimport { UserApiService } from '../../services/api/user.api.service';\r\nimport { ToastMessageService } from '../../components/toast-message/toast.message.service';\r\nimport { Contacts } from '../../../interfaces/user.interfaces';\r\nimport { Location } from '@angular/common';\r\nimport { MatTableDataSource } from '@angular/material/table';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort } from '@angular/material/sort';\r\nimport { DialogType } from '../../../app/enums';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DialogComponent } from '../../components/dialog/dialog.component';\r\nimport { ErrorService } from '../../services/error.service';\r\n\r\n@Component({\r\n selector: 'app-contacts',\r\n templateUrl: './contacts.component.html',\r\n styleUrls: ['./contacts.component.scss']\r\n})\r\nexport class ContactsComponent implements OnInit, AfterViewInit {\r\n\r\n @ViewChild(MatPaginator) public paginator: MatPaginator | null = null;\r\n @ViewChild(MatSort) public sort: MatSort | null = null;\r\n public whatsappUsers: MatTableDataSource = new MatTableDataSource([]);\r\n public displayedColumns: string[] = ['firstName', 'lastName', 'whatsappUserNumber', 'lastChatDate', 'notes', 'editUser'];\r\n\r\n public showSpinner: boolean = false;\r\n\r\n constructor(\r\n private userApiService: UserApiService,\r\n private toastMessageService: ToastMessageService,\r\n private location: Location,\r\n private error: ErrorService,\r\n public dialog: MatDialog\r\n ) { }\r\n\r\n async ngOnInit(): Promise {\r\n await this.refresh();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.whatsappUsers.paginator = this.paginator;\r\n this.whatsappUsers.sort = this.sort;\r\n }\r\n\r\n public async refresh(): Promise {\r\n this.showSpinner = true;\r\n await this.getAllWhatsappUsers();\r\n this.showSpinner = false;\r\n }\r\n\r\n private async getAllWhatsappUsers(): Promise {\r\n try {\r\n const resp = await this.userApiService.getContacts();\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get whatsapp users', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else this.whatsappUsers.data = resp.result;\r\n } catch (err) {\r\n this.error.handleError('Failed to get whatsapp users.', err, 'contacts.getAllWhatsappUsers()');\r\n this.toastMessageService.showToastMessage('Failed to get whatsapp users', 'toast-message-error');\r\n }\r\n }\r\n\r\n public addWhatsappUserDialog(): void {\r\n this.dialog.open(DialogComponent, {\r\n data: { dialogTypeId: DialogType.ADD_WHATSAPP_USER },\r\n autoFocus: false\r\n });\r\n }\r\n\r\n public editWhatsappUserDialog(whatsappUser: Contacts): void {\r\n const dialogRef = this.dialog.open(DialogComponent, {\r\n data: {\r\n dialogTypeId: DialogType.EDIT_WHATSAPP_USER,\r\n whatsappUserId: whatsappUser.whatsappUserId,\r\n firstName: whatsappUser.firstName,\r\n lastName: whatsappUser.lastName\r\n },\r\n autoFocus: false \r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result: Contacts | undefined) => {\r\n if (!result) return;\r\n\r\n whatsappUser.firstName = result.firstName;\r\n whatsappUser.lastName = result.lastName;\r\n });\r\n }\r\n\r\n public searchWhatsappUsers(search: string) {\r\n this.whatsappUsers.filter = search.trim().toLowerCase();\r\n }\r\n\r\n public goBack() {\r\n this.location.back();\r\n }\r\n}","export const environment = {\r\n production: false,\r\n\r\n // live\r\n socketURL: \"https://avecscomms.com:3022\",\r\n serverURL: \"https://avecscomms.com:3021\",\r\n\r\n //newuat\r\n // socketURL: \"http://whatsapp.marsserver.net:3022\",\r\n // serverURL: \"http://whatsapp.marsserver.net:3021\",\r\n\r\n // local\r\n // socketURL: \"http://localhost:3022\",\r\n // serverURL: \"http://localhost:3021\",\r\n\r\n //template broadcasting dev tool to show up\r\n //set to false when deploying\r\n devMode: false\r\n};","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { DialogType } from '../../enums';\r\nimport { DialogService } from './dialog.service';\r\nimport { Dialog } from '../../../interfaces/dialog.interfaces';\r\n\r\n@Component({\r\n selector: 'app-dialog',\r\n templateUrl: './dialog.component.html',\r\n styleUrls: ['./dialog.component.scss']\r\n})\r\nexport class DialogComponent {\r\n public get dialogType(): typeof DialogType { return DialogType; }\r\n\r\n constructor(\r\n public dialogService: DialogService,\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: Dialog\r\n ) { }\r\n \r\n public close(): void { this.dialogRef.close(); }\r\n}","\r\n \r\n\r\n\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n","import { Injectable } from \"@angular/core\";\r\nimport * as moment from \"moment\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ChatService {\r\n\r\n private _chatWindowLeft: string = '';\r\n\r\n public set chatWindowLeft(chatWindowLeft: string) { this._chatWindowLeft = chatWindowLeft; }\r\n public get chatWindowLeft(): string { return this._chatWindowLeft; }\r\n\r\n constructor() { }\r\n\r\n public hasChatExpired(chatExpiryDate: Date): boolean {\r\n const currentDate = moment();\r\n const formattedExpiryDate = moment(new Date(chatExpiryDate));\r\n const hasExpired: boolean = currentDate.isAfter(formattedExpiryDate);\r\n\r\n return hasExpired;\r\n }\r\n\r\n //you can pass in the whatsapp user details (first name, last name, number) and will return the correct formatting\r\n //or you can pass in the system user which will just be first name\r\n public getFormattedName(firstName: string, lastName?: string, whatsappUserNumber?: string): string | undefined {\r\n if (firstName && lastName) return `${this.capitalizeEachWord(firstName)} ${this.capitalizeEachWord(lastName)}`;\r\n else if (firstName) return this.capitalizeEachWord(firstName);\r\n else return whatsappUserNumber;\r\n }\r\n\r\n public capitalizeEachWord(word: string): string {\r\n const regex = /(\\b[a-z](?!\\s))/g;\r\n return word.replace(regex, function (x) { return x.toUpperCase(); });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { AuthService } from './auth/auth.service';\r\nimport { ErrorService } from './error.service';\r\nimport { environment } from '../../environments/environment';\r\nimport { HttpResponse } from '../../interfaces/result.interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BaseApiService {\r\n\r\n constructor(\r\n private http: HttpClient,\r\n private auth: AuthService,\r\n private error: ErrorService\r\n ) { }\r\n\r\n public async get(caller: string, route: string): Promise {\r\n try {\r\n if (!this.auth.token) return null;\r\n const headers = new HttpHeaders()\r\n .set('token', this.auth.token)\r\n .set('user-id', `${this.auth.userId}`)\r\n .set('user-name', `${this.auth.loginName}`)\r\n .set('content-type', 'application/json')\r\n .set('accept-language', ['en-US', 'en', 'q=0.9'])\r\n .set('accept', ['application/json', 'text/plain', '*/*']);\r\n \r\n const resp = await this.http.get(`${environment.serverURL}/${route}`, { headers: headers }).toPromise();\r\n if (resp.errorCode == 999) this.auth.logout();\r\n else this.auth.resetUserSessionTimer();\r\n return resp;\r\n }\r\n catch (err) {\r\n this.error.handleError(`${caller} failed`, err, caller);\r\n }\r\n return null;\r\n }\r\n\r\n public async post(caller: string, route: string, json: any): Promise {\r\n try {\r\n if (!this.auth.token) return null;\r\n const headers = new HttpHeaders()\r\n .set('token', this.auth.token)\r\n .set('user-id', `${this.auth.userId}`)\r\n .set('user-name', `${this.auth.loginName}`)\r\n .set('content-type', 'application/json')\r\n .set('accept-language', ['en-US', 'en', 'q=0.9'])\r\n .set('accept', ['application/json', 'text/plain', '*/*']);\r\n \r\n const resp = await this.http.post(`${environment.serverURL}/${route}`, json, { headers: headers }).toPromise();\r\n if (resp.errorCode == 999) this.auth.logout();\r\n else this.auth.resetUserSessionTimer();\r\n return resp;\r\n }\r\n catch (err) {\r\n this.error.handleError(`${caller} failed`, err, caller);\r\n }\r\n return null;\r\n }\r\n}","import { Component } from '@angular/core';\r\nimport { ClaimedChatsService } from '../../services/chats/claimed.chats.service';\r\n\r\n@Component({\r\n selector: 'app-chats-landing-page',\r\n templateUrl: './chats-landing-page.component.html',\r\n styleUrls: ['./chats-landing-page.component.scss']\r\n})\r\nexport class ChatsLandingPageComponent {\r\n\r\n constructor(\r\n public claimedChatsService: ClaimedChatsService // used in html\r\n ) { }\r\n}","
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { ToastMessageService } from '../../toast-message/toast.message.service';\r\nimport { ClaimedChatsService } from '../../../services/chats/claimed.chats.service';\r\nimport { DialogService } from '../dialog.service';\r\nimport { DialogComponent } from '../dialog.component';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { UserApiService } from 'src/app/services/api/user.api.service';\r\nimport { EditWhatsappUserDialog } from '../../../../interfaces/dialog.interfaces';\r\nimport { ErrorService } from '../../../services/error.service';\r\n\r\n@Component({\r\n selector: 'edit-whatsapp-user-dialog',\r\n templateUrl: './edit-whatsapp-user-dialog.component.html',\r\n styleUrls: ['./edit-whatsapp-user-dialog.component.scss']\r\n})\r\nexport class EditWhatsappUserDialogComponent implements OnInit {\r\n\r\n public firstName: string = '';\r\n public lastName: string = '';\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n private dialogService: DialogService,\r\n public claimedChatsService: ClaimedChatsService,\r\n private userApiService: UserApiService,\r\n private toastMessageService: ToastMessageService,\r\n private error: ErrorService,\r\n @Inject(MAT_DIALOG_DATA) public data: EditWhatsappUserDialog\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.firstName = this.data.firstName;\r\n this.lastName = this.data.lastName;\r\n }\r\n\r\n public async updateWhatsAppUser(): Promise {\r\n this.dialogService.showSpinner = true;\r\n try {\r\n const resp = await this.userApiService.updateWhatsappUserDetails(this.data.whatsappUserId, this.firstName, this.lastName);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to update WhatsApp User details.', 'toast-message-error');\r\n else if (resp.errorCode !== 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-success');\r\n this.data.firstName = this.firstName;\r\n this.data.lastName = this.lastName;\r\n this.dialogRef.close(this.data);\r\n }\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to update WhatsApp User details.', 'toast-message-error');\r\n this.error.handleError('Failed to update WhatsApp User details.', err, 'edit-whatsapp-user-dialog.updateWhatsAppUser()');\r\n }\r\n this.dialogService.showSpinner = false;\r\n }\r\n\r\n public cancel() {\r\n this.dialogRef.close();\r\n }\r\n}","
\r\n

Edit Whatsapp User

\r\n \r\n First Name\r\n \r\n \r\n \r\n Last Name\r\n \r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogService } from '../dialog.service';\r\nimport { DialogComponent } from '../dialog.component';\r\nimport { ToastMessageService } from '../../toast-message/toast.message.service';\r\nimport { ChatApiService } from '../../../services/api/chat.api.service';\r\nimport { ClaimedChatsService } from '../../../services/chats/claimed.chats.service';\r\nimport { ErrorService } from '../../../services/error.service';\r\n\r\n@Component({\r\n selector: 'add-edit-chat-notes-dialog',\r\n templateUrl: './add-edit-chat-notes-dialog.component.html',\r\n styleUrls: ['./add-edit-chat-notes-dialog.component.scss']\r\n})\r\nexport class AddEditChatNotesDialogComponent implements OnInit {\r\n\r\n public notes: string = '';\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n private dialogService: DialogService,\r\n public claimedChatsService: ClaimedChatsService,\r\n private chatApiService: ChatApiService,\r\n private toastMessageService: ToastMessageService,\r\n private error: ErrorService\r\n ) { }\r\n\r\n ngOnInit(): void { this.notes = this.claimedChatsService.getSelectedClaimChat?.notes ?? ''; }\r\n\r\n public async saveNotes(): Promise {\r\n if (!this.claimedChatsService.getSelectedClaimChat) return;\r\n this.dialogService.showSpinner = true;\r\n try {\r\n const resp = await this.chatApiService.updateChatNotes(this.claimedChatsService.getSelectedClaimChat.chatId, this.notes);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to save notes.', 'toast-message-error');\r\n else if (resp.errorCode !== 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-success');\r\n this.claimedChatsService.getSelectedClaimChat.notes = this.notes;\r\n this.dialogRef.close();\r\n }\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to save chat notes.', 'toast-message-error');\r\n this.error.handleError('Failed to save chat notes', err, 'add-edit-chat-notes-dialog.saveNotes()');\r\n }\r\n this.dialogService.showSpinner = false;\r\n }\r\n\r\n cancel() {\r\n this.dialogRef.close();\r\n }\r\n}","
\r\n

Add / Edit Notes

\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n","
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
0\">\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { Location } from '@angular/common';\r\nimport { UserApiService } from '../../services/api/user.api.service';\r\nimport { ToastMessageService } from '../../components/toast-message/toast.message.service';\r\nimport { SystemUser } from '../../../interfaces/user.interfaces';\r\nimport { ErrorService } from '../../services/error.service';\r\n\r\n@Component({\r\n selector: 'app-online-users',\r\n templateUrl: './online-users.component.html',\r\n styleUrls: ['./online-users.component.scss']\r\n})\r\nexport class OnlineUsersComponent implements OnInit {\r\n\r\n public onlineUsers: SystemUser[] = [];\r\n public showSpinner: boolean = false;\r\n\r\n constructor(\r\n private location: Location,\r\n private userApiService: UserApiService,\r\n private error: ErrorService,\r\n private toastMessageService: ToastMessageService\r\n ) { }\r\n\r\n async ngOnInit(): Promise {\r\n await this.refreshOnlineUsers();\r\n }\r\n\r\n public async refreshOnlineUsers(): Promise {\r\n this.showSpinner = true;\r\n await this.getOnlineUsers();\r\n this.showSpinner = false;\r\n }\r\n\r\n private async getOnlineUsers(): Promise {\r\n try {\r\n const resp = await this.userApiService.getOnlineUsers();\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get online users', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else this.onlineUsers = resp.result;\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to get online users', 'toast-message-error');\r\n this.error.handleError('Failed to get online users.', err, 'online-users.getOnlineUsers()');\r\n }\r\n }\r\n\r\n public goBack() {\r\n this.location.back();\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpResponse } from '../../../interfaces/result.interfaces';\r\nimport { BaseApiService } from '../base-api.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserApiService {\r\n\r\n private route: string = 'user/';\r\n\r\n constructor(private base: BaseApiService) { }\r\n\r\n public async getUserProducts(): Promise {\r\n return await this.base.get('user.api.service.getUserProducts', `${this.route}getUserProducts`);\r\n }\r\n\r\n public async getOnlineUsersInGroup(groupId: number): Promise {\r\n return await this.base.get('user.api.service.getOnlineUsersInGroup', `${this.route}getOnlineUsersInGroup?groupId=${groupId}`);\r\n }\r\n\r\n public async getAllGroups(producId: number): Promise {\r\n return await this.base.get('user.api.service.getAllGroups', `${this.route}getAllGroups?productId=${producId}`);\r\n }\r\n\r\n public async getContacts(): Promise {\r\n return await this.base.get('user.api.service.getContacts', `${this.route}getContacts`);\r\n }\r\n \r\n public async getWhatsAppUsers(): Promise {\r\n return await this.base.get('user.api.service.getAllWhatsappUsers', `${this.route}getAllWhatsappUsers`);\r\n }\r\n\r\n public async getOnlineUsers(): Promise {\r\n return await this.base.get(\"user.api.service.getOnlineUsers\", `${this.route}getOnlineUsers`);\r\n }\r\n\r\n public async getSystemUsers(): Promise {\r\n return await this.base.get('user.api.service.getSystemUsers', `${this.route}getSystemUsers`);\r\n }\r\n \r\n public async getUsersGroups(): Promise {\r\n return await this.base.get('user.api.service.getUsersGroups', `${this.route}getUsersGroups`);\r\n }\r\n\r\n public async updateWhatsappUserDetails(whatsappUserId: number, firstName: string, lastName: string): Promise {\r\n const payload = {\r\n whatsappUserId: whatsappUserId,\r\n firstName: firstName,\r\n lastName: lastName\r\n };\r\n\r\n return await this.base.post('user.api.service.updateWhatsappUserDetails', `${this.route}updateWhatsappUserDetails`, payload);\r\n }\r\n\r\n public async addWhatsappUser(firstname: string, lastName: string, cellPhoneNumber: string): Promise {\r\n const payload = {\r\n firstName: firstname,\r\n lastName: lastName,\r\n cellPhoneNumber: cellPhoneNumber\r\n };\r\n\r\n return await this.base.post('user.api.service.addWhatsappUser', `${this.route}addWhatsappUser`, payload);\r\n }\r\n \r\n public async changeProduct(productId: number): Promise {\r\n const payload = {\r\n productId: productId\r\n };\r\n\r\n return await this.base.post('user.api.service.changeProduct', `${this.route}changeProduct`, payload);\r\n }\r\n}","
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n
\r\n {{ message.friendlyName }}\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n {{ messageService.handleMessageStatusIcon(message.sendDate, message.readDate, message.deliveredDate, message.undeliveredDate).messageStatusIcon }}\r\n \r\n
\r\n
\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\nimport * as moment from 'moment';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Message } from '../../../interfaces/message.interfaces';\r\nimport { ChatService } from '../../services/chats/chat.service';\r\nimport { MessageService } from '../../services/message.service';\r\nimport { ToastMessageService } from '../toast-message/toast.message.service';\r\n\r\n@Component({\r\n selector: 'message-item',\r\n templateUrl: './message-item.component.html',\r\n styleUrls: ['./message-item.component.scss']\r\n})\r\nexport class MessageItemComponent implements OnInit, OnChanges {\r\n\r\n @Input() public message: Message | null = null;\r\n @Input() public messageMatch: boolean = false; //used for if the user is searching for a message and the message matches\r\n @Input() public searchTerm: string | null = null;\r\n @Output() public previewImage: EventEmitter = new EventEmitter();\r\n\r\n public messageBody: SafeHtml | null = null;\r\n public messageTimeStamp: string = '';\r\n public messageStatusIcon: string = '';\r\n public messageStatusIconClass: string = '';\r\n public isMessageMedia: boolean = false;\r\n public isMessageAFile: boolean = false;\r\n public isMessageAnImage: boolean = false;\r\n public isMessageAudio: boolean = false;\r\n public isMessageVideo: boolean = false;\r\n public imagePreview: boolean = false;\r\n private currentModifiedMessageBody: string = '';\r\n private unmodifiedMessageBody: string = '';\r\n\r\n constructor(\r\n private chatService: ChatService,\r\n public messageService: MessageService,\r\n private sanitizer: DomSanitizer,\r\n private toastMessageService: ToastMessageService,\r\n private http: HttpClient\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.handleMessageSentBy();\r\n this.makeTextBold();\r\n this.handleMessageTimeStamp();\r\n this.handleMessageFileType();\r\n }\r\n\r\n ngOnChanges(): void { this.highlightText(); }\r\n\r\n private handleMessageFileType() {\r\n if (!this.message?.mediaUrl) return;\r\n\r\n const result = this.messageService.isMessageAFile(this.message.extension);\r\n if (!result) return;\r\n this.isMessageMedia = result.isMessageMedia;\r\n this.isMessageAnImage = result.isMessageAnImage;\r\n this.isMessageAFile = result.isMessageAFile;\r\n this.isMessageVideo = result.isMessageVideo;\r\n this.isMessageAudio = result.isMessageAudio;\r\n }\r\n\r\n private handleMessageSentBy() {\r\n if (!this.message) return;\r\n\r\n if (this.message.direction == 1 && this.message.systemUser) {\r\n return this.chatService.getFormattedName(this.message.systemUser) ?? '';\r\n } else {\r\n return this.chatService.getFormattedName(this.message.whatsappUserFirstName, this.message.whatsappUserLastName, this.message.whatsappUserNumber) ?? '';\r\n }\r\n }\r\n\r\n private makeTextBold() {\r\n if (!this.message) return;\r\n\r\n const boldRegex = /\\*(.*?)\\*/g;\r\n const italicRegex = /_(.*?)_/g;\r\n\r\n let formattedMessage = this.message.body.replace(boldRegex, '$1');\r\n formattedMessage = this.convertLinksToHtml(formattedMessage);\r\n // formattedMessage = formattedMessage.replace(italicRegex, '$1');\r\n\r\n this.currentModifiedMessageBody = formattedMessage;\r\n this.messageBody = this.sanitizer.bypassSecurityTrustHtml(formattedMessage);\r\n this.unmodifiedMessageBody = formattedMessage;\r\n }\r\n\r\n private convertLinksToHtml(text: string): string {\r\n if (!this.message) return '';\r\n\r\n const linkRegex = /(https?:\\/\\/\\S+)/gi;\r\n const textColour: string = this.message.direction ? 'white' : 'black';\r\n return text.replace(linkRegex, (match) => `${match}`);\r\n }\r\n\r\n private highlightText(): void {\r\n\r\n if (!this.message) return;\r\n\r\n if (this.messageMatch && this.searchTerm) {\r\n const highlightText = this.highlight(this.searchTerm, this.unmodifiedMessageBody);\r\n if (highlightText !== this.currentModifiedMessageBody) {\r\n this.messageBody = this.sanitizer.bypassSecurityTrustHtml(highlightText);\r\n this.currentModifiedMessageBody = highlightText;\r\n }\r\n } else if (!this.messageMatch && this.currentModifiedMessageBody !== this.message.body) {\r\n this.currentModifiedMessageBody = this.message.body;\r\n this.makeTextBold();\r\n }\r\n }\r\n\r\n private highlight(search: string, text: string): string {\r\n const regex = new RegExp(search.toLowerCase().trim(), 'gi');\r\n return text.replace(regex, (match) => `${match}`);\r\n }\r\n\r\n public convertHttpResponseToBase64() {\r\n if (!this.message || !this.message.mediaUrl || !this.message.mimeType) return;\r\n\r\n try {\r\n this.http.get(this.message.mediaUrl, { responseType: \"blob\" }).subscribe(blob => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(blob);\r\n reader.onload = async (event: any) => {\r\n const base64 = event.target.result.replace(`data:${this.message?.mimeType};base64,`, '');\r\n if (!this.message?.fileName || !this.message.mimeType) return;\r\n this.save(this.message.fileName, base64, this.message.mimeType);\r\n };\r\n reader.onerror = (event: any) => {\r\n this.toastMessageService.showToastMessage('Failed to download file.', 'toast-message-error');\r\n };\r\n }, (err: any) => {\r\n this.toastMessageService.showToastMessage('Failed to download file.', 'toast-message-error');\r\n });\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to download file.', 'toast-message-error');\r\n }\r\n }\r\n\r\n private save(name: string, base64: string, mimeType: string) {\r\n const blob = this.base64ToBlob(base64, 512, mimeType);\r\n\r\n const objectURL = window.URL.createObjectURL(blob);\r\n\r\n const downloadLink = document.createElement('a');\r\n //set the link's href to the blob's url\r\n downloadLink.href = objectURL;\r\n //set the download attribute using the document name\r\n downloadLink.download = name;\r\n\r\n //append the download link to the documents body\r\n document.body.appendChild(downloadLink);\r\n //automatically click on the download link so it opens up in a new tab for the user\r\n downloadLink.click();\r\n //remove the download link from the document's body to clean up\r\n document.body.removeChild(downloadLink);\r\n }\r\n\r\n private base64ToBlob(b64Data: string, sliceSize: number = 512, type: string) {\r\n let byteCharacters = atob(b64Data);\r\n let byteArrays: Uint8Array[] = [];\r\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n let slice = byteCharacters.slice(offset, offset + sliceSize);\r\n\r\n let byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n let byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n return new Blob(byteArrays, { type: type });\r\n }\r\n\r\n public openFile() { window.open(this.message?.mediaUrl); }\r\n\r\n private handleMessageTimeStamp(): void { if (this.message?.sendDate) this.messageTimeStamp = moment(new Date(this.message.sendDate)).format('HH:mm a'); }\r\n}","
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n\r\n

\r\n Template message\r\n

\r\n\r\n \r\n\r\n \r\n\r\n

= 1\" class=\"title\">\r\n Replace the fields\r\n

\r\n\r\n
\r\n
\r\n \r\n \r\n {{ templateParam.display }}\r\n \r\n \r\n\r\n \r\n {{ templateParam.display }}\r\n \r\n \r\n\r\n \r\n {{ templateParam.display }}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {{ templateParam.display }}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ToastMessageService } from '../../components/toast-message/toast.message.service';\r\nimport { UserApiService } from '../../services/api/user.api.service';\r\nimport { Dropdown } from '../../../interfaces/global.interfaces';\r\nimport { Contacts as Contact } from '../../../interfaces/user.interfaces';\r\nimport { Location } from '@angular/common';\r\nimport { ChatService } from '../../services/chats/chat.service';\r\nimport { TemplateApiService } from '../../services/api/template.api.service';\r\nimport { Template, TemplateParam } from '../../../interfaces/template.interfaces';\r\nimport * as moment from 'moment';\r\nimport { ErrorService } from '../../services/error.service';\r\n\r\n@Component({\r\n selector: 'app-template-manager',\r\n templateUrl: './template-manager.component.html',\r\n styleUrls: ['./template-manager.component.scss']\r\n})\r\nexport class TemplateManagerComponent implements OnInit {\r\n\r\n public selectedTemplate: Template | undefined | null = null;\r\n public templates: Template[] = [];\r\n public templateDropdownOptions: Dropdown[] = [];\r\n public templateParams: TemplateParam[] | null = null;\r\n public selectedContact: Contact | undefined | null = null;\r\n public contacts: Contact[] = [];\r\n public contactDropdownOptions: Dropdown[] = [];\r\n\r\n public showSpinner: boolean = false;\r\n public sendingTemplate: boolean = false;\r\n\r\n constructor(\r\n private userApiService: UserApiService,\r\n private templateApiService: TemplateApiService,\r\n private toastMessageService: ToastMessageService,\r\n private chatService: ChatService,\r\n private error: ErrorService,\r\n private location: Location,\r\n ) { }\r\n\r\n async ngOnInit(): Promise {\r\n this.showSpinner = true;\r\n await this.getAllContacts();\r\n this.showSpinner = false;\r\n }\r\n\r\n private async getAllContacts(): Promise {\r\n try {\r\n const resp = await this.userApiService.getContacts();\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get contacts', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.contacts = resp.result;\r\n this.contactDropdownOptions = [];\r\n resp.result.map((user: Contact) => {\r\n this.contactDropdownOptions.push({\r\n value: user,\r\n label: this.chatService.getFormattedName(user.firstName, user.lastName, user.whatsappUserNumber) ?? user.whatsappUserNumber\r\n });\r\n });\r\n await this.getAllTemplates();\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to get chat rooms.', err, 'template-manager.getAllContacts()');\r\n this.toastMessageService.showToastMessage('Failed to get contacts', 'toast-message-error');\r\n }\r\n }\r\n \r\n private async getAllTemplates(): Promise {\r\n try {\r\n const resp = await this.templateApiService.getAllTemplates();\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get templates', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.templates = resp.result;\r\n this.templateDropdownOptions = [];\r\n resp.result.map((template: Template) => {\r\n this.templateDropdownOptions.push({\r\n value: template,\r\n label: template.templateName\r\n });\r\n });\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to get templates.', err, 'template-manager.getAllTemplates()');\r\n this.toastMessageService.showToastMessage('Failed to get templates', 'toast-message-error');\r\n }\r\n }\r\n\r\n public onContactSelected(contact: Contact) {\r\n this.selectedContact = this.contacts?.find(c => c.whatsappUserId === contact.whatsappUserId);\r\n }\r\n\r\n public async getTemplateParams(template: Template) {\r\n if (!template) {\r\n this.selectedTemplate = null;\r\n this.templateParams = null;\r\n return;\r\n }\r\n try {\r\n const resp = await this.templateApiService.getTemplateParams(template.templateId);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get template params', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.templateParams = resp.result;\r\n this.selectedTemplate = this.templates.find(t => t.templateId === template.templateId);\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to get templates params.', err, 'template-manager.getTemplateParams()');\r\n this.toastMessageService.showToastMessage('Failed to get template params', 'toast-message-error');\r\n }\r\n }\r\n\r\n public async sendTemplate() {\r\n this.sendingTemplate = true;\r\n try {\r\n if (!this.selectedTemplate || !this.templateParams || !this.selectedContact) return;\r\n\r\n const replacedTemplateBody = this.findAndReplaceTemplateBody(this.selectedTemplate.body, this.templateParams);\r\n if (!replacedTemplateBody) return;\r\n\r\n this.selectedTemplate.body = replacedTemplateBody;\r\n \r\n const resp = await this.templateApiService.sendTemplateToWhatsappUser(this.selectedTemplate, this.selectedContact);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to send template', 'toast-message-error');\r\n else if (resp.errorCode !== 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n const sentTo = this.chatService.getFormattedName(this.selectedContact.firstName, this.selectedContact.lastName, this.selectedContact.whatsappUserNumber);\r\n this.toastMessageService.showToastMessage(`Templated message has been sent to ${sentTo}`, 'toast-message-success');\r\n this.clear();\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to send template.', err, 'template-manager.sendTemplate()');\r\n this.toastMessageService.showToastMessage('Failed to send template', 'toast-message-error');\r\n }\r\n this.sendingTemplate = false;\r\n }\r\n\r\n public getVariableValueOrVariableName(variableName: string): string {\r\n const param = this.templateParams?.find(p => p.variableName === variableName);\r\n if (param?.value) {\r\n if (param.variableType == 'date') return moment(param.value).format('yyyy/MM/DD');\r\n return param.value;\r\n } else {\r\n return `#${variableName.trim()}#`;\r\n }\r\n }\r\n\r\n private findAndReplaceTemplateBody(body: string, templateParams: TemplateParam[]): string | null {\r\n try {\r\n for (const param of templateParams) {\r\n const name = param.variableName;\r\n const type = param.variableType;\r\n let value = param.value;\r\n\r\n //if there is a new template and the type doesn't exist here add it \r\n //can format the value however needed\r\n //for future, could have a template param type with enums so we know the type of param it is\r\n if (type == 'date') {\r\n value = moment(value).format('YYYY/MM/DD');\r\n } else if (type == 'datetime') {\r\n value = moment(value).format('YYYY/MM/DD hh:mm a');\r\n } else {\r\n throw new Error(`Template parm not implemented on ui. templateId: ${param.templateId} parmId: ${param.id} type: ${type}`);\r\n }\r\n body = body.replace('#' + name + '#', value);\r\n }\r\n return body;\r\n } catch (err) {\r\n this.error.handleError('Failed to find and replace template body.', err, 'template-manager.findAndReplaceTemplateBody()');\r\n this.toastMessageService.showToastMessage('Failed to do find and replace for the template', 'toast-message-error');\r\n }\r\n return null;\r\n }\r\n\r\n private clear() {\r\n this.selectedTemplate = null;\r\n this.templateParams = null;\r\n this.selectedContact = null;\r\n }\r\n\r\n public goBack() {\r\n this.location.back();\r\n }\r\n}","import { Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { Dropdown } from '../../../interfaces/global.interfaces';\r\nimport { MatSelectChange } from '@angular/material/select';\r\nimport { distinctUntilChanged } from 'rxjs/operators';\r\nimport { Subject } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'drop-down',\r\n templateUrl: './drop-down.component.html',\r\n styleUrls: ['./drop-down.component.scss']\r\n})\r\nexport class DropDownComponent implements OnInit, OnChanges {\r\n\r\n @Input() public filter: boolean = false;\r\n @Input() public showClear: boolean = false;\r\n @Input() public disabled: boolean = false;\r\n @Input() public placeHolder: string = '';\r\n @Input() public filterPlaceHolder?: string;\r\n @Input() public options: Dropdown[] = [];\r\n @Input() public selectedDropDown: any;\r\n @Output() public onDropdownOptionSelect: EventEmitter = new EventEmitter();\r\n\r\n private _originalOptions: Dropdown[] = [];\r\n private previousSearch: string = '';\r\n private filterChanged = new Subject();\r\n\r\n public get originalOptions(): Dropdown[] { return this._originalOptions; }\r\n public set originalOptions(options: Dropdown[]) { this._originalOptions = options; };\r\n public get filteredOptions(): Dropdown[] { return this.options; }\r\n public set filteredOptions(options: Dropdown[]) { this.options = options; }\r\n public filterSearch: string = '';\r\n\r\n @ViewChild('select', { static: true }) select: any;\r\n @ViewChild('filterInput') filterInput: ElementRef | null = null;\r\n \r\n constructor() { this.filterChanged.pipe(distinctUntilChanged()).subscribe(filter => this.filterDropdownOptions(filter)); }\r\n\r\n ngOnInit() {\r\n this.processOptions();\r\n this.preventSpaceBarSelectingDropdownOption();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes && changes.options && this.originalOptions != changes?.options?.currentValue) {\r\n this.originalOptions = changes.options.currentValue;\r\n }\r\n }\r\n\r\n public dropDownOptionSelect(event: MatSelectChange) {\r\n this.onDropdownOptionSelect.emit(event.value);\r\n }\r\n\r\n public onFilter() {\r\n //if nothing when filtering, set filteredOptions back to the original options array\r\n if (!this.filterSearch) {\r\n // this.originalOptions = [...this.originalOptions];\r\n this.filteredOptions = [...this.originalOptions];\r\n }\r\n\r\n if (this.filterSearch !== this.previousSearch) {\r\n this.filterChanged.next(this.filterSearch);\r\n this.previousSearch = this.filterSearch;\r\n }\r\n }\r\n\r\n //auto focus when opening the dropdown\r\n public focusInput() {\r\n if (!this.filterInput || !this.filterInput.nativeElement) return;\r\n this.filterInput.nativeElement.focus();\r\n }\r\n\r\n private processOptions() {\r\n //remove all extra spaces in the label property\r\n this.options = this.options.map(option => ({\r\n ...option,\r\n label: option.label.replace(/\\s+/g, ' ').trim()\r\n }));\r\n }\r\n\r\n private preventSpaceBarSelectingDropdownOption() {\r\n //preventing the space bar selecting a dropdown option\r\n this.select._handleKeydown = (event: KeyboardEvent) => {\r\n if (event.key === ' ') return;\r\n if (!this.select.disabled) {\r\n this.select.panelOpen ? this.select._handleOpenKeydown(event) : this.select._handleClosedKeydown(event);\r\n }\r\n };\r\n }\r\n\r\n private filterDropdownOptions(filter: string) { this.filteredOptions = this.options.filter(option => option.label.toLowerCase().includes(filter.toLowerCase())); }\r\n}","\r\n {{placeHolder}}\r\n \r\n \r\n
\r\n \r\n

No options found

\r\n
\r\n \r\n
{{ option.label }}
\r\n
\r\n
\r\n
\r\n","import { Component } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogComponent } from '../dialog.component';\r\nimport { DialogService } from '../dialog.service';\r\nimport { UserApiService } from '../../../services/api/user.api.service';\r\nimport { ToastMessageService } from '../../toast-message/toast.message.service';\r\nimport { ErrorService } from '../../../services/error.service';\r\nimport { HttpResponse } from '../../../../interfaces/result.interfaces';\r\n\r\n@Component({\r\n selector: 'add-whatsapp-user-dialog',\r\n templateUrl: './add-whatsapp-user-dialog.component.html',\r\n styleUrls: ['./add-whatsapp-user-dialog.component.scss']\r\n})\r\nexport class AddWhatsappUserDialogComponent {\r\n\r\n public firstName: string = '';\r\n public lastName: string = '';\r\n public cellPhoneNumber: string = '';\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n private dialogService: DialogService,\r\n private userApiService: UserApiService,\r\n private toastMessageService: ToastMessageService,\r\n private error: ErrorService\r\n ) { }\r\n\r\n public async addWhatsappUser(): Promise {\r\n const canAddNewWhatsAppUser = this.canAddNewWhatsAppUser();\r\n if (canAddNewWhatsAppUser.errorCode !== 0) {\r\n this.toastMessageService.showToastMessage(canAddNewWhatsAppUser.errorMessage, 'toast-message-error');\r\n return;\r\n }\r\n this.dialogService.showSpinner = true;\r\n try {\r\n const resp = await this.userApiService.addWhatsappUser(this.firstName, this.lastName, this.cellPhoneNumber);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to add whatsapp user.', 'toast-message-error');\r\n else if (resp.errorCode !== 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-success');\r\n this.dialogRef.close();\r\n }\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to add whatsapp user.', 'toast-message-error');\r\n this.error.handleError('Failed to add whatsapp user', err, 'add-whatsapp-user-dialog.addWhatsappUser()');\r\n }\r\n this.dialogService.showSpinner = false;\r\n }\r\n\r\n private canAddNewWhatsAppUser(): HttpResponse {\r\n const splitArr = this.cellPhoneNumber.split('+');\r\n\r\n //if the length is one there is no '+'\r\n if (splitArr.length == 1) {\r\n return {\r\n errorCode: -1,\r\n errorMessage: `Please put a '+' infront of the number`\r\n };\r\n }\r\n //not a number\r\n else if (!+splitArr[1].trim()) {\r\n return {\r\n errorCode: -1,\r\n errorMessage: 'The cell phone number is not a valid number'\r\n };\r\n }\r\n else return { errorCode: 0, errorMessage: '' };\r\n }\r\n\r\n public canAddWhatsAppUser() {\r\n if (this.lastName && this.cellPhoneNumber && this.firstName) return false;\r\n else if (this.lastName && !this.cellPhoneNumber) return true;\r\n else if (this.lastName && this.cellPhoneNumber) return true;\r\n else if (!this.cellPhoneNumber) return true;\r\n else return false;\r\n }\r\n\r\n public cancel() {\r\n this.dialogRef.close();\r\n }\r\n}","
\r\n

Add Whatsapp User

\r\n \r\n First Name\r\n \r\n \r\n \r\n Last Name\r\n \r\n \r\n \r\n Number\r\n phone\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n","import { Injectable } from '@angular/core';\r\nimport { environment } from 'src/environments/environment';\r\nimport { Message } from '../../interfaces/message.interfaces';\r\nimport { ChatService } from './chats/chat.service';\r\nimport { ProductService } from './products.service';\r\nimport { ClaimedChatsService } from './chats/claimed.chats.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NotificationService {\r\n\r\n private notification: Notification | null = null;\r\n\r\n constructor(\r\n private chatService: ChatService,\r\n private claimedChatService: ClaimedChatsService,\r\n private productService: ProductService\r\n ) { }\r\n\r\n public messageReceivedNotification(message: Message) {\r\n const whatsappUserName = this.chatService.getFormattedName(message.whatsappUserFirstName, message.whatsappUserLastName, message.whatsappUserNumber);\r\n const options: NotificationOptions = {\r\n body: `${whatsappUserName}\\n${message.body}`,\r\n icon: this.productService.smallLogo ?? '',\r\n dir: 'auto',\r\n data: {\r\n chatId: message.chatId\r\n },\r\n };\r\n\r\n if (message.mediaUrl) options.image = message.mediaUrl;\r\n\r\n this.notification = new Notification('Whatsapp', options);\r\n this.notification.onclick = () => {\r\n const chatIndex = this.claimedChatService.getClaimedChats.findIndex(chat => chat.chatId === message.chatId);\r\n if (chatIndex === -1) return;\r\n\r\n this.claimedChatService.setSelectedClaimChat = this.claimedChatService.getClaimedChats[chatIndex];\r\n if(this.claimedChatService.getSelectedClaimChat) this.claimedChatService.getSelectedClaimChat.chatSelected = true;\r\n };\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport * as _ from 'lodash';\r\nimport { AuthService } from '../auth/auth.service';\r\nimport * as moment from 'moment';\r\nimport { Chat, ClaimedChats } from '../../../interfaces/chat.interfaces';\r\nimport { ChatService } from './chat.service';\r\nimport { Message } from '../../../interfaces/message.interfaces';\r\nimport { ToastMessageService } from '../../components/toast-message/toast.message.service';\r\nimport { MenuOptions } from '../../../interfaces/global.interfaces';\r\nimport { BrowserService } from '../browser.service';\r\nimport { ChatRoomService } from './chat.room.service';\r\nimport { ErrorService } from '../error.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ClaimedChatsService {\r\n\r\n private _chatsHeading: string = 'My Claimed Chats';\r\n private _search: string = '';\r\n private _claimedChats: Chat[] = [];\r\n private _claimedChatsOriginal: Chat[] = [];\r\n private _selectedClaimChat: Chat | null = null;\r\n private _hasChatExpired: boolean = false;\r\n private _claimedChatsPanel: ClaimedChats[] | null = null;\r\n private _claimedChatIdFromRoom: number = 0;\r\n public filterChatsOptions: MenuOptions[] = [\r\n {\r\n icon: 'chat_bubble',\r\n label: 'All Claimed Chats',\r\n method: this.filterByAllClaimedChats.bind(this),\r\n disabled: false\r\n },\r\n {\r\n icon: 'how_to_reg',\r\n label: 'My Unread messages',\r\n method: this.filterByMyUnreadMessages.bind(this),\r\n disabled: false\r\n },\r\n {\r\n icon: 'done',\r\n label: 'All Unread messages',\r\n method: this.filterByAllUnreadMessages.bind(this),\r\n disabled: false\r\n },\r\n {\r\n icon: 'portrait', //portrait\r\n label: 'My Active Chats',\r\n method: this.filterByMyActiveChats.bind(this),\r\n disabled: false\r\n },\r\n {\r\n icon: 'question_answer',\r\n label: 'All Active Chats',\r\n method: this.filterByAllActiveChats.bind(this),\r\n disabled: false\r\n },\r\n {\r\n icon: 'voice_over_off',\r\n label: 'My Expired Chats',\r\n method: this.filterByMyExpiredChats.bind(this),\r\n disabled: false\r\n },\r\n {\r\n icon: 'volume_off',\r\n label: 'All Expired Chats',\r\n method: this.filterByAllExpiredChats.bind(this),\r\n disabled: false\r\n }\r\n ];\r\n\r\n private _selectedFilterChatOption: MenuOptions | null = null;\r\n\r\n public get selectedFilterChatOption(): MenuOptions | null { return this._selectedFilterChatOption; }\r\n\r\n public get search(): string { return this._search; }\r\n\r\n public get chatsHeading(): string { return this._chatsHeading; }\r\n \r\n public get getClaimedChats(): Chat[] { return this._claimedChats; }\r\n \r\n public get getClaimedChatsOriginal(): Chat[] { return this._claimedChatsOriginal; }\r\n\r\n public get getSelectedClaimChat(): Chat | null { return this._selectedClaimChat; }\r\n\r\n public get hasChatExpired(): boolean { return this._hasChatExpired; }\r\n\r\n public get claimedChatIdFromRoom() { return this._claimedChatIdFromRoom; };\r\n\r\n public get claimedChatsPanel() { return this._claimedChatsPanel; }\r\n\r\n public get selectedClaimChatWindowLeft(): string {\r\n if (!this.getSelectedClaimChat) return '';\r\n\r\n const currentDate = moment();\r\n const formattedExpiryDate = moment(new Date(this.getSelectedClaimChat.chatExpiryDate));\r\n const hasExpired: boolean = currentDate.isAfter(formattedExpiryDate);\r\n\r\n if (hasExpired) {\r\n this.hasChatExpired = true;\r\n return '';\r\n }\r\n\r\n this.hasChatExpired = false;\r\n\r\n const remainingTimeSeconds = formattedExpiryDate.diff(currentDate, 'seconds');\r\n const remainingTimeFormatted = moment.utc(moment.duration(remainingTimeSeconds, \"seconds\").asMilliseconds()).format(\"HH:mm\");\r\n\r\n return `Time Left: ${remainingTimeFormatted}`;\r\n }\r\n\r\n public get claimedChatsPanelChatCount(): number {\r\n let count = 0;\r\n this.claimedChatsPanel?.map(gc => gc.groupChatsLength).map(c => count += c);\r\n return count;\r\n }\r\n\r\n public set hasChatExpired(value: boolean) { this._hasChatExpired = value; }\r\n\r\n public set selectedFilterChatOption(menuOption: MenuOptions | null) { this._selectedFilterChatOption = menuOption; }\r\n\r\n public set chatsHeading(chatsHeading: string) { this._chatsHeading = chatsHeading; }\r\n\r\n public set search(search: string) { this._search = search; }\r\n\r\n public set setClaimedChats(chats: Chat[]) { this._claimedChats = chats; }\r\n\r\n public set setClaimedChatsOriginal(chats: Chat[]) { this._claimedChatsOriginal = chats; }\r\n\r\n public set setSelectedClaimChat(chat: Chat | null) { this._selectedClaimChat = chat; };\r\n\r\n public set claimedChatIdFromRoom(chatId: number) { this._claimedChatIdFromRoom = chatId; }\r\n \r\n public set claimedChatsPanel(claimedChatsPanel: ClaimedChats[] | null) { this._claimedChatsPanel = claimedChatsPanel; }\r\n\r\n constructor(\r\n private authService: AuthService,\r\n private chatService: ChatService,\r\n private chatRoomService: ChatRoomService,\r\n private browserService: BrowserService,\r\n private error: ErrorService,\r\n private toastMessageService: ToastMessageService\r\n ) { }\r\n \r\n public updateClaimedChatMessages(chatId: number, messages: Message[]) {\r\n const orignalClaimeChatsIndex = this.getClaimedChatsOriginal.findIndex(c => c.chatId === chatId);\r\n const claimeChatsIndex = this.getClaimedChats.findIndex(c => c.chatId === chatId);\r\n\r\n this.getClaimedChatsOriginal[orignalClaimeChatsIndex].messages = messages;\r\n this.getClaimedChats[claimeChatsIndex].messages = messages;\r\n \r\n if (this.getSelectedClaimChat?.chatId === chatId) {\r\n this.getSelectedClaimChat.messages = messages;\r\n }\r\n }\r\n\r\n public handleRemovingClaimedChats(chatIds: number[]): void {\r\n if (!this.getClaimedChatsOriginal) return;\r\n this.setClaimedChatsOriginal = this.getClaimedChatsOriginal.filter(chat => !chatIds.includes(chat.chatId));\r\n\r\n //if the chat that was closed from another user\r\n //make the selected claim chat null\r\n if (this.getSelectedClaimChat) {\r\n const foundChat = chatIds.find(chat => chat === this.getSelectedClaimChat?.chatId);\r\n if (foundChat) this.setSelectedClaimChat = null;\r\n }\r\n\r\n this.applyChatFilterIfThereIsAFilter();\r\n this.handleClaimedChatsPanel();\r\n }\r\n\r\n public applyChatFilterIfThereIsAFilter() {\r\n if (this.selectedFilterChatOption) {\r\n this.selectedFilterChatOption.method.call(this);\r\n this.chatsHeading = this.selectedFilterChatOption.label;\r\n } else {\r\n this.filterByMyClaimedChats();\r\n this.chatsHeading = 'My Claimed Chats';\r\n }\r\n }\r\n\r\n public filterChatOption(option: MenuOptions): void {\r\n if (this.selectedFilterChatOption == option) {\r\n this.selectedFilterChatOption = null;\r\n this.filterByMyClaimedChats();\r\n this.handleClaimedChatsPanel();\r\n this.chatsHeading = 'My Claimed Chats';\r\n } else {\r\n this.selectedFilterChatOption = option;\r\n option.method.call(this);\r\n this.handleClaimedChatsPanel();\r\n this.chatsHeading = option.label;\r\n }\r\n this.resetReassignedChats();\r\n }\r\n\r\n public filterByMyClaimedChats() {\r\n const claimedChats = this.getLoggedInUserClaimedChats();\r\n this.setClaimedChats = claimedChats;\r\n }\r\n\r\n public filterByAllClaimedChats() { this.setClaimedChats = this._claimedChatsOriginal; }\r\n \r\n public filterByMyUnreadMessages() {\r\n const loggedInUserClaimedChats = this.getLoggedInUserClaimedChats();\r\n this.setClaimedChats = loggedInUserClaimedChats.filter(cc => cc.unreadMessages && cc.unreadMessages > 0);\r\n }\r\n\r\n public filterByAllUnreadMessages() {\r\n const allClaimedChats = this._claimedChatsOriginal;\r\n this.setClaimedChats = allClaimedChats.filter(cc => cc.unreadMessages && cc.unreadMessages > 0);\r\n }\r\n\r\n public filterByMyActiveChats() {\r\n const loggedInUserClaimedChats = this.getLoggedInUserClaimedChats();\r\n const chats = loggedInUserClaimedChats.filter(cc => !this.chatService.hasChatExpired(cc.chatExpiryDate));\r\n this.setClaimedChats = chats;\r\n }\r\n\r\n public filterByAllActiveChats() {\r\n const allClaimedChats = this._claimedChatsOriginal;\r\n const chats = allClaimedChats.filter(cc => !this.chatService.hasChatExpired(cc.chatExpiryDate));\r\n this.setClaimedChats = chats;\r\n }\r\n\r\n public filterByMyExpiredChats() {\r\n const loggedInUserClaimedChats = this.getLoggedInUserClaimedChats();\r\n const chats = loggedInUserClaimedChats.filter(cc => this.chatService.hasChatExpired(cc.chatExpiryDate));\r\n this.setClaimedChats = chats;\r\n }\r\n\r\n public filterByAllExpiredChats() {\r\n const allClaimedChats = this._claimedChatsOriginal;\r\n const chats = allClaimedChats.filter(cc => this.chatService.hasChatExpired(cc.chatExpiryDate));\r\n this.setClaimedChats = chats;\r\n }\r\n\r\n public handleClaimedChatsPanel(): void {\r\n if (!this.getClaimedChats) return;\r\n\r\n //order the chats\r\n this.orderClaimedChatsByLatestMessage();\r\n\r\n let claimedChatsPanel: ClaimedChats[] = [];\r\n\r\n for (const chat of this.getClaimedChats) {\r\n //get an array of group ids from our group chats\r\n const groupIds = claimedChatsPanel.map(gc => gc.groupId);\r\n\r\n //group does not exist\r\n //so we can go ahead and add all the chats to this group\r\n if (!groupIds.includes(chat.groupId)) {\r\n //get all chats with the current chat group id\r\n let gc = this.getClaimedChats.filter(cc => cc.groupId === chat.groupId);\r\n\r\n const groupExpanded = this.claimedChatsPanel?.find(gc => gc.groupId === chat.groupId)?.groupExpanded;\r\n\r\n claimedChatsPanel.push({\r\n groupId: chat.groupId,\r\n groupName: `${chat.groupName} (${gc.length})`,\r\n groupChatsLength: gc.length,\r\n groupExpanded: groupExpanded ?? true,\r\n chats: gc\r\n });\r\n }\r\n }\r\n\r\n this.claimedChatsPanel = claimedChatsPanel;\r\n }\r\n\r\n public handleChatsReassignToUser(reassignedChats: Chat[], userId: number, loginName: string) {\r\n const claimedChatOrig = this.getClaimedChatsOriginal;\r\n\r\n for (const chat of claimedChatOrig) {\r\n const index = reassignedChats.findIndex(c => c.chatId === chat.chatId);\r\n\r\n chat.reassigned = false;\r\n\r\n if (index === -1) continue;\r\n\r\n chat.claimedBy = loginName;\r\n chat.claimedByUserId = userId;\r\n chat.reassigned = true;\r\n chat.chatSelected = false;\r\n chat.messages = [...reassignedChats[index].messages]\r\n }\r\n\r\n this.setClaimedChatsOriginal = [...claimedChatOrig];\r\n this.applyChatFilterIfThereIsAFilter();\r\n this.handleClaimedChatsPanel();\r\n }\r\n\r\n public handleClosingAndReassigningChatToGroup() {\r\n const index = this.getClaimedChats.findIndex(cc => cc.chatId == this.getSelectedClaimChat?.chatId);\r\n if (index >= 0) {\r\n //remove chat from claimed chats\r\n this.getClaimedChats.splice(index, 1);\r\n this.getClaimedChatsOriginal.splice(index, 1);\r\n this.setSelectedClaimChat = null;\r\n //redo the sort and group by\r\n this.handleClaimedChatsPanel();\r\n }\r\n }\r\n\r\n public handleUserDisconnect(userId: number, loginName: string) {\r\n this.setClaimedChatsOriginal = this.getClaimedChatsOriginal?.filter(cc => cc.claimedByUserId !== userId);\r\n this.setClaimedChats = this.getClaimedChats?.filter(cc => cc.claimedByUserId !== userId);\r\n this.resetReassignedChats();\r\n this.handleClaimedChatsPanel();\r\n this.toastMessageService.showToastMessage(`${loginName} Logged/Time out`, 'toast-message-info');\r\n }\r\n\r\n public handleUserLoggedClaimedChats(chats: Chat[], loginName: string) {\r\n this.toastMessageService.showToastMessage(`${loginName} logged in`, 'toast-message-info');\r\n const chatIds: number[] = chats.map(c => c.chatId);\r\n this.chatRoomService.handleRemovingChatsFromRoom(chatIds);\r\n\r\n if (!this.getClaimedChatsOriginal || !this.getClaimedChats) return;\r\n\r\n for (const chat of chats) {\r\n const foundOrigChat = this.getClaimedChatsOriginal.find(c => c.chatId === chat.chatId);\r\n const foundClaimedChat = this.getClaimedChats.find(c => c.chatId === chat.chatId);\r\n\r\n //if this chat does not exist in either the original or claimed chats array add chat\r\n if (!foundOrigChat) this.getClaimedChatsOriginal.push(chat);\r\n if (!foundClaimedChat) this.getClaimedChats.push(chat);\r\n \r\n const foundGroup = this.claimedChatsPanel?.find(gc => gc.groupId === chat.groupId);\r\n\r\n //group doesn't exist so add it\r\n if (!foundGroup) {\r\n this.claimedChatsPanel?.push({\r\n groupId: chat.groupId,\r\n groupName: `${chat.groupName}`,\r\n groupChatsLength: 0,\r\n groupExpanded: true,\r\n chats: [],\r\n });\r\n }\r\n\r\n this.claimedChatsPanel?.map(gc => {\r\n if (gc.groupId === chat.groupId) {\r\n const found = gc.chats.find(ch => ch.chatId === chat.chatId);\r\n //if the chat does not exist in the group then add it\r\n if (!found) {\r\n gc.chats.push(chat);\r\n gc.groupName = `${chat.groupName} (${gc.chats.length})`;\r\n }\r\n }\r\n });\r\n }\r\n\r\n if (!this.selectedFilterChatOption) {\r\n this.filterByMyClaimedChats();\r\n } else {\r\n this.selectedFilterChatOption.method.call(this);\r\n }\r\n\r\n this.handleClaimedChatsPanel();\r\n }\r\n\r\n //user has changed product\r\n //need to remove all the chats from the claimed chats\r\n public handleProductChange(userId: number, loginName: string, productName: string) {\r\n this.toastMessageService.showToastMessage(`${loginName} changed to ${productName}`, 'toast-message-info');\r\n this.setClaimedChatsOriginal = this.getClaimedChatsOriginal.filter(cc => cc.claimedByUserId !== userId);\r\n this.setClaimedChats = this.getClaimedChats.filter(cc => cc.claimedByUserId !== userId);\r\n this.handleClaimedChatsPanel();\r\n }\r\n\r\n public handleInboundWhatsappMessage(msg: Message) {\r\n const message: Message = {\r\n messageId: msg.messageId,\r\n body: msg.body,\r\n chatId: msg.chatId,\r\n direction: msg.direction,\r\n whatsappUserFirstName: msg.whatsappUserFirstName,\r\n whatsappUserLastName: msg.whatsappUserLastName,\r\n sendDate: msg.sendDate,\r\n whatsappUserNumber: msg.whatsappUserNumber,\r\n mediaUrl: msg.mediaUrl,\r\n extension: msg.extension,\r\n fileName: msg.fileName,\r\n friendlyName: msg.friendlyName\r\n };\r\n\r\n const chatIndex = this.getClaimedChats.findIndex(cc => cc.chatId === msg.chatId);\r\n\r\n if (chatIndex == -1) return;\r\n\r\n const chat = this.getClaimedChats[chatIndex];\r\n\r\n if (this.browserService.browserFocused && this.getSelectedClaimChat?.chatId === msg.chatId) {\r\n //don't increase\r\n } else if (this.getSelectedClaimChat?.chatId !== msg.chatId || (!this.browserService.browserFocused && this.getSelectedClaimChat?.chatId === msg.chatId)) {\r\n //increased unread messages count\r\n if (!chat.unreadMessages) chat.unreadMessages = 1;\r\n else chat.unreadMessages++;\r\n }\r\n\r\n //update chat expiry date\r\n chat.chatExpiryDate = new Date(moment(new Date()).add(1, 'day').format(\"YYYY/MM/DD HH:mm:ss\"));\r\n //add new inbound message\r\n chat.messages.push(message);\r\n\r\n //refresh selected claimed chat messages\r\n if (this.getSelectedClaimChat?.chatId === msg.chatId) {\r\n this.getSelectedClaimChat.messages = [...chat.messages];\r\n }\r\n\r\n this.handleClaimedChatsPanel();\r\n }\r\n\r\n public searchClaimedChats(): void {\r\n try {\r\n this.resetReassignedChats();\r\n const filters = ['firstName', 'lastName', 'whatsappUserNumber', 'refNo'];\r\n\r\n //not searching\r\n if (!this.search) {\r\n //reset claimed chats to original\r\n this.setClaimedChats = [...this.getClaimedChatsOriginal];\r\n this.applyChatFilterIfThereIsAFilter();\r\n this.handleClaimedChatsPanel();\r\n return;\r\n }\r\n\r\n this.applyChatFilterIfThereIsAFilter();\r\n\r\n //filtering\r\n this.setClaimedChats = _.filter(this.getClaimedChats, (item) => {\r\n return _.some(filters, (filter) => {\r\n const value = item[filter];\r\n const searchValue = this.search.toLowerCase().trim();\r\n return (value && value.toLowerCase().includes(searchValue));\r\n });\r\n });\r\n\r\n this.handleClaimedChatsPanel();\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to search chats.', 'toast-message-error');\r\n this.error.handleError('Failed to search chats.', err, 'claimed.chats.service.searchClaimedChats()');\r\n }\r\n }\r\n\r\n public clearSearch(): void {\r\n if (!this.search) return;\r\n \r\n this.search = '';\r\n this.searchClaimedChats();\r\n }\r\n \r\n private orderClaimedChatsByLatestMessage(): void {\r\n this.setClaimedChats = _.orderBy(this.getClaimedChats, (chat) => {\r\n const latestMessage = _.maxBy(chat.messages, 'sendDate');\r\n return latestMessage?.sendDate ? new Date(latestMessage.sendDate).getTime() : 0;\r\n }, 'desc');\r\n }\r\n\r\n private getLoggedInUserClaimedChats(): Chat[] {\r\n if (!this.authService?.user || !this.authService?.user?.loginName) return [];\r\n const claimedChats = this.getClaimedChatsOriginal.filter(cc => cc.claimedBy.toLowerCase() === this.authService?.user?.loginName?.toLowerCase());\r\n return claimedChats;\r\n }\r\n\r\n private resetReassignedChats(): void {\r\n //resset all chats reassigned to false\r\n this.getClaimedChats.forEach(c => {\r\n if (c.reassigned !== false) c.reassigned = false;\r\n });\r\n }\r\n}","var map = {\n\t\"./af\": \"K/tc\",\n\t\"./af.js\": \"K/tc\",\n\t\"./ar\": \"jnO4\",\n\t\"./ar-dz\": \"o1bE\",\n\t\"./ar-dz.js\": \"o1bE\",\n\t\"./ar-kw\": \"Qj4J\",\n\t\"./ar-kw.js\": \"Qj4J\",\n\t\"./ar-ly\": \"HP3h\",\n\t\"./ar-ly.js\": \"HP3h\",\n\t\"./ar-ma\": \"CoRJ\",\n\t\"./ar-ma.js\": \"CoRJ\",\n\t\"./ar-sa\": \"gjCT\",\n\t\"./ar-sa.js\": \"gjCT\",\n\t\"./ar-tn\": \"bYM6\",\n\t\"./ar-tn.js\": \"bYM6\",\n\t\"./ar.js\": \"jnO4\",\n\t\"./az\": \"SFxW\",\n\t\"./az.js\": \"SFxW\",\n\t\"./be\": \"H8ED\",\n\t\"./be.js\": \"H8ED\",\n\t\"./bg\": \"hKrs\",\n\t\"./bg.js\": \"hKrs\",\n\t\"./bm\": \"p/rL\",\n\t\"./bm.js\": \"p/rL\",\n\t\"./bn\": \"kEOa\",\n\t\"./bn-bd\": \"loYQ\",\n\t\"./bn-bd.js\": \"loYQ\",\n\t\"./bn.js\": \"kEOa\",\n\t\"./bo\": \"0mo+\",\n\t\"./bo.js\": \"0mo+\",\n\t\"./br\": \"aIdf\",\n\t\"./br.js\": \"aIdf\",\n\t\"./bs\": \"JVSJ\",\n\t\"./bs.js\": \"JVSJ\",\n\t\"./ca\": \"1xZ4\",\n\t\"./ca.js\": \"1xZ4\",\n\t\"./cs\": \"PA2r\",\n\t\"./cs.js\": \"PA2r\",\n\t\"./cv\": \"A+xa\",\n\t\"./cv.js\": \"A+xa\",\n\t\"./cy\": \"l5ep\",\n\t\"./cy.js\": \"l5ep\",\n\t\"./da\": \"DxQv\",\n\t\"./da.js\": \"DxQv\",\n\t\"./de\": \"tGlX\",\n\t\"./de-at\": \"s+uk\",\n\t\"./de-at.js\": \"s+uk\",\n\t\"./de-ch\": \"u3GI\",\n\t\"./de-ch.js\": \"u3GI\",\n\t\"./de.js\": \"tGlX\",\n\t\"./dv\": \"WYrj\",\n\t\"./dv.js\": \"WYrj\",\n\t\"./el\": \"jUeY\",\n\t\"./el.js\": \"jUeY\",\n\t\"./en-au\": \"Dmvi\",\n\t\"./en-au.js\": \"Dmvi\",\n\t\"./en-ca\": \"OIYi\",\n\t\"./en-ca.js\": \"OIYi\",\n\t\"./en-gb\": \"Oaa7\",\n\t\"./en-gb.js\": \"Oaa7\",\n\t\"./en-ie\": \"4dOw\",\n\t\"./en-ie.js\": \"4dOw\",\n\t\"./en-il\": \"czMo\",\n\t\"./en-il.js\": \"czMo\",\n\t\"./en-in\": \"7C5Q\",\n\t\"./en-in.js\": \"7C5Q\",\n\t\"./en-nz\": \"b1Dy\",\n\t\"./en-nz.js\": \"b1Dy\",\n\t\"./en-sg\": \"t+mt\",\n\t\"./en-sg.js\": \"t+mt\",\n\t\"./eo\": \"Zduo\",\n\t\"./eo.js\": \"Zduo\",\n\t\"./es\": \"iYuL\",\n\t\"./es-do\": \"CjzT\",\n\t\"./es-do.js\": \"CjzT\",\n\t\"./es-mx\": \"tbfe\",\n\t\"./es-mx.js\": \"tbfe\",\n\t\"./es-us\": \"Vclq\",\n\t\"./es-us.js\": \"Vclq\",\n\t\"./es.js\": \"iYuL\",\n\t\"./et\": \"7BjC\",\n\t\"./et.js\": \"7BjC\",\n\t\"./eu\": \"D/JM\",\n\t\"./eu.js\": \"D/JM\",\n\t\"./fa\": \"jfSC\",\n\t\"./fa.js\": \"jfSC\",\n\t\"./fi\": \"gekB\",\n\t\"./fi.js\": \"gekB\",\n\t\"./fil\": \"1ppg\",\n\t\"./fil.js\": \"1ppg\",\n\t\"./fo\": \"ByF4\",\n\t\"./fo.js\": \"ByF4\",\n\t\"./fr\": \"nyYc\",\n\t\"./fr-ca\": \"2fjn\",\n\t\"./fr-ca.js\": \"2fjn\",\n\t\"./fr-ch\": \"Dkky\",\n\t\"./fr-ch.js\": \"Dkky\",\n\t\"./fr.js\": \"nyYc\",\n\t\"./fy\": \"cRix\",\n\t\"./fy.js\": \"cRix\",\n\t\"./ga\": \"USCx\",\n\t\"./ga.js\": \"USCx\",\n\t\"./gd\": \"9rRi\",\n\t\"./gd.js\": \"9rRi\",\n\t\"./gl\": \"iEDd\",\n\t\"./gl.js\": \"iEDd\",\n\t\"./gom-deva\": \"qvJo\",\n\t\"./gom-deva.js\": \"qvJo\",\n\t\"./gom-latn\": \"DKr+\",\n\t\"./gom-latn.js\": \"DKr+\",\n\t\"./gu\": \"4MV3\",\n\t\"./gu.js\": \"4MV3\",\n\t\"./he\": \"x6pH\",\n\t\"./he.js\": \"x6pH\",\n\t\"./hi\": \"3E1r\",\n\t\"./hi.js\": \"3E1r\",\n\t\"./hr\": \"S6ln\",\n\t\"./hr.js\": \"S6ln\",\n\t\"./hu\": \"WxRl\",\n\t\"./hu.js\": \"WxRl\",\n\t\"./hy-am\": \"1rYy\",\n\t\"./hy-am.js\": \"1rYy\",\n\t\"./id\": \"UDhR\",\n\t\"./id.js\": \"UDhR\",\n\t\"./is\": \"BVg3\",\n\t\"./is.js\": \"BVg3\",\n\t\"./it\": \"bpih\",\n\t\"./it-ch\": \"bxKX\",\n\t\"./it-ch.js\": \"bxKX\",\n\t\"./it.js\": \"bpih\",\n\t\"./ja\": \"B55N\",\n\t\"./ja.js\": \"B55N\",\n\t\"./jv\": \"tUCv\",\n\t\"./jv.js\": \"tUCv\",\n\t\"./ka\": \"IBtZ\",\n\t\"./ka.js\": \"IBtZ\",\n\t\"./kk\": \"bXm7\",\n\t\"./kk.js\": \"bXm7\",\n\t\"./km\": \"6B0Y\",\n\t\"./km.js\": \"6B0Y\",\n\t\"./kn\": \"PpIw\",\n\t\"./kn.js\": \"PpIw\",\n\t\"./ko\": \"Ivi+\",\n\t\"./ko.js\": \"Ivi+\",\n\t\"./ku\": \"JCF/\",\n\t\"./ku.js\": \"JCF/\",\n\t\"./ky\": \"lgnt\",\n\t\"./ky.js\": \"lgnt\",\n\t\"./lb\": \"RAwQ\",\n\t\"./lb.js\": \"RAwQ\",\n\t\"./lo\": \"sp3z\",\n\t\"./lo.js\": \"sp3z\",\n\t\"./lt\": \"JvlW\",\n\t\"./lt.js\": \"JvlW\",\n\t\"./lv\": \"uXwI\",\n\t\"./lv.js\": \"uXwI\",\n\t\"./me\": \"KTz0\",\n\t\"./me.js\": \"KTz0\",\n\t\"./mi\": \"aIsn\",\n\t\"./mi.js\": \"aIsn\",\n\t\"./mk\": \"aQkU\",\n\t\"./mk.js\": \"aQkU\",\n\t\"./ml\": \"AvvY\",\n\t\"./ml.js\": \"AvvY\",\n\t\"./mn\": \"lYtQ\",\n\t\"./mn.js\": \"lYtQ\",\n\t\"./mr\": \"Ob0Z\",\n\t\"./mr.js\": \"Ob0Z\",\n\t\"./ms\": \"6+QB\",\n\t\"./ms-my\": \"ZAMP\",\n\t\"./ms-my.js\": \"ZAMP\",\n\t\"./ms.js\": \"6+QB\",\n\t\"./mt\": \"G0Uy\",\n\t\"./mt.js\": \"G0Uy\",\n\t\"./my\": \"honF\",\n\t\"./my.js\": \"honF\",\n\t\"./nb\": \"bOMt\",\n\t\"./nb.js\": \"bOMt\",\n\t\"./ne\": \"OjkT\",\n\t\"./ne.js\": \"OjkT\",\n\t\"./nl\": \"+s0g\",\n\t\"./nl-be\": \"2ykv\",\n\t\"./nl-be.js\": \"2ykv\",\n\t\"./nl.js\": \"+s0g\",\n\t\"./nn\": \"uEye\",\n\t\"./nn.js\": \"uEye\",\n\t\"./oc-lnc\": \"Fnuy\",\n\t\"./oc-lnc.js\": \"Fnuy\",\n\t\"./pa-in\": \"8/+R\",\n\t\"./pa-in.js\": \"8/+R\",\n\t\"./pl\": \"jVdC\",\n\t\"./pl.js\": \"jVdC\",\n\t\"./pt\": \"8mBD\",\n\t\"./pt-br\": \"0tRk\",\n\t\"./pt-br.js\": \"0tRk\",\n\t\"./pt.js\": \"8mBD\",\n\t\"./ro\": \"lyxo\",\n\t\"./ro.js\": \"lyxo\",\n\t\"./ru\": \"lXzo\",\n\t\"./ru.js\": \"lXzo\",\n\t\"./sd\": \"Z4QM\",\n\t\"./sd.js\": \"Z4QM\",\n\t\"./se\": \"//9w\",\n\t\"./se.js\": \"//9w\",\n\t\"./si\": \"7aV9\",\n\t\"./si.js\": \"7aV9\",\n\t\"./sk\": \"e+ae\",\n\t\"./sk.js\": \"e+ae\",\n\t\"./sl\": \"gVVK\",\n\t\"./sl.js\": \"gVVK\",\n\t\"./sq\": \"yPMs\",\n\t\"./sq.js\": \"yPMs\",\n\t\"./sr\": \"zx6S\",\n\t\"./sr-cyrl\": \"E+lV\",\n\t\"./sr-cyrl.js\": \"E+lV\",\n\t\"./sr.js\": \"zx6S\",\n\t\"./ss\": \"Ur1D\",\n\t\"./ss.js\": \"Ur1D\",\n\t\"./sv\": \"X709\",\n\t\"./sv.js\": \"X709\",\n\t\"./sw\": \"dNwA\",\n\t\"./sw.js\": \"dNwA\",\n\t\"./ta\": \"PeUW\",\n\t\"./ta.js\": \"PeUW\",\n\t\"./te\": \"XLvN\",\n\t\"./te.js\": \"XLvN\",\n\t\"./tet\": \"V2x9\",\n\t\"./tet.js\": \"V2x9\",\n\t\"./tg\": \"Oxv6\",\n\t\"./tg.js\": \"Oxv6\",\n\t\"./th\": \"EOgW\",\n\t\"./th.js\": \"EOgW\",\n\t\"./tk\": \"Wv91\",\n\t\"./tk.js\": \"Wv91\",\n\t\"./tl-ph\": \"Dzi0\",\n\t\"./tl-ph.js\": \"Dzi0\",\n\t\"./tlh\": \"z3Vd\",\n\t\"./tlh.js\": \"z3Vd\",\n\t\"./tr\": \"DoHr\",\n\t\"./tr.js\": \"DoHr\",\n\t\"./tzl\": \"z1FC\",\n\t\"./tzl.js\": \"z1FC\",\n\t\"./tzm\": \"wQk9\",\n\t\"./tzm-latn\": \"tT3J\",\n\t\"./tzm-latn.js\": \"tT3J\",\n\t\"./tzm.js\": \"wQk9\",\n\t\"./ug-cn\": \"YRex\",\n\t\"./ug-cn.js\": \"YRex\",\n\t\"./uk\": \"raLr\",\n\t\"./uk.js\": \"raLr\",\n\t\"./ur\": \"UpQW\",\n\t\"./ur.js\": \"UpQW\",\n\t\"./uz\": \"Loxo\",\n\t\"./uz-latn\": \"AQ68\",\n\t\"./uz-latn.js\": \"AQ68\",\n\t\"./uz.js\": \"Loxo\",\n\t\"./vi\": \"KSF8\",\n\t\"./vi.js\": \"KSF8\",\n\t\"./x-pseudo\": \"/X5v\",\n\t\"./x-pseudo.js\": \"/X5v\",\n\t\"./yo\": \"fzPg\",\n\t\"./yo.js\": \"fzPg\",\n\t\"./zh-cn\": \"XDpg\",\n\t\"./zh-cn.js\": \"XDpg\",\n\t\"./zh-hk\": \"SatO\",\n\t\"./zh-hk.js\": \"SatO\",\n\t\"./zh-mo\": \"OmwH\",\n\t\"./zh-mo.js\": \"OmwH\",\n\t\"./zh-tw\": \"kOpN\",\n\t\"./zh-tw.js\": \"kOpN\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"RnhZ\";","import { Injectable } from '@angular/core';\r\nimport * as _ from 'lodash';\r\nimport { AuthService } from './auth/auth.service';\r\nimport { Product } from '../enums';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ProductService {\r\n\r\n private _bigLogo: string | null = null;\r\n private _smallLogo: string | null = null;\r\n\r\n public get smallLogo(): string | null {\r\n switch (this.authService.user?.selectedProduct?.productId) {\r\n case Product.NOVADT:\r\n case Product.NOVADT_OLD:\r\n this.smallLogo = 'assets/product-logos/novadt-small.png';\r\n break;\r\n \r\n case Product.SAEX:\r\n this.smallLogo = 'assets/product-logos/saex-small.svg';\r\n break;\r\n \r\n default:\r\n this.smallLogo = 'assets/product-logos/default-small.png';\r\n break;\r\n }\r\n return this._smallLogo;\r\n }\r\n\r\n public get bigLogo(): string | null {\r\n switch (this.authService.user?.selectedProduct?.productId) {\r\n case Product.NOVADT:\r\n case Product.NOVADT_OLD:\r\n this.bigLogo = 'assets/product-logos/novadt-big.svg';\r\n break;\r\n \r\n case Product.SAEX:\r\n this.bigLogo = 'assets/product-logos/saex-big.svg';\r\n break;\r\n \r\n default:\r\n this.bigLogo = 'assets/product-logos/default-big.png';\r\n break;\r\n }\r\n return this._bigLogo;\r\n }\r\n\r\n public set bigLogo(logo: string | null) { this._bigLogo = logo; }\r\n\r\n public set smallLogo(logo: string | null) { this._smallLogo = logo; }\r\n\r\n constructor(private authService: AuthService) { }\r\n}","
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n","import { Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { AuthService } from './services/auth/auth.service';\r\nimport { SocketService } from './services/socket.service';\r\nimport { ProductService } from './services/products.service';\r\nimport { ChatApiService } from './services/api/chat.api.service';\r\nimport { PermissionsService } from './services/permissions.service';\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: './app.component.html',\r\n styleUrls: ['./app.component.scss']\r\n})\r\nexport class AppComponent implements OnInit, OnDestroy {\r\n\r\n constructor(\r\n public authService: AuthService,\r\n private permissionService: PermissionsService,\r\n private chatApiService: ChatApiService,\r\n public productService: ProductService, //used in app component html\r\n public socketService: SocketService) { }\r\n\r\n ngOnInit(): void {\r\n this.authService.loggedIn.subscribe(async (loggedIn) => {\r\n //socket not connected and the user is logged in (refresh browser)\r\n if (!this.socketService.connected && loggedIn) {\r\n this.socketService.notConnectedReason = 'Establishing connection to server. Please wait';\r\n await this.chatApiService.claimChats();\r\n this.socketService.setup();\r\n }\r\n //user logged in\r\n else if (loggedIn) {\r\n this.socketService.setup();\r\n }\r\n });\r\n this.permissionService.requestNotificationsPermissions();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.socketService.logout();\r\n }\r\n}","import { Component, Inject } from '@angular/core';\r\nimport { DialogComponent } from '../dialog.component';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogService } from '../dialog.service';\r\nimport { ChatApiService } from '../../../services/api/chat.api.service';\r\nimport { ToastMessageService } from '../../toast-message/toast.message.service';\r\nimport { CloseChatDialog } from '../../../../interfaces/dialog.interfaces';\r\nimport { ErrorService } from '../../../services/error.service';\r\n\r\n@Component({\r\n selector: 'close-chat-dialog',\r\n templateUrl: './close-chat-dialog.component.html',\r\n styleUrls: ['./close-chat-dialog.component.scss']\r\n})\r\nexport class CloseChatDialogComponent {\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n private dialogService: DialogService,\r\n private chatApiService: ChatApiService,\r\n private toastMessageService: ToastMessageService,\r\n private error: ErrorService,\r\n @Inject(MAT_DIALOG_DATA) public data: CloseChatDialog\r\n ) { }\r\n\r\n public async closeChat() {\r\n this.dialogService.showSpinner = true;\r\n try {\r\n const resp = await this.chatApiService.closeChats(this.data.chats);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to close chat.', 'toast-message-error');\r\n else if (resp.errorCode !== 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-success');\r\n this.dialogRef.close(true);\r\n }\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to close chat.', 'toast-message-error');\r\n this.error.handleError('Failed to close chat', err, 'close-chat-dialog.closeChat()');\r\n }\r\n this.dialogService.showSpinner = false;\r\n }\r\n\r\n cancel(): void {\r\n this.dialogRef.close();\r\n }\r\n}","
\r\n

Are you sure you want to close the chat?

\r\n \r\n
\r\n","import { Injectable } from '@angular/core';\r\nimport { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';\r\nimport { AuthService } from './auth.service';\r\nimport * as _ from 'lodash';\r\nimport { ErrorService } from '../error.service';\r\n\r\n@Injectable()\r\nexport class AuthManager implements CanActivate {\r\n\r\n constructor(\r\n private auth: AuthService,\r\n private router: Router,\r\n private errorService: ErrorService\r\n ) { }\r\n\r\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree {\r\n try {\r\n if (this.auth.isTokenValid()) return true;\r\n\r\n this.auth.clearUser;\r\n this.router.navigate(['/login']);\r\n return false;\r\n } catch (err) {\r\n this.router.navigate(['/login']);\r\n this.errorService.handleError('Failed to check if can activate', err, 'AuthManager.canActive()');\r\n return false;\r\n }\r\n }\r\n}","\r\n\r\n
\r\n
\r\n
\r\n
\r\n \"Avecs\"\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n Search Chats\r\n search\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n No\r\n chats\r\n \r\n \r\n \r\n \r\n {{ gc.groupName }}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ChatApiService } from '../../services/api/chat.api.service';\r\nimport { ClaimedChatsService } from '../../services/chats/claimed.chats.service';\r\nimport { Dropdown, MenuOptions } from '../../../interfaces/global.interfaces';\r\nimport { AuthService } from '../../services/auth/auth.service';\r\nimport { Chat } from '../../../interfaces/chat.interfaces';\r\nimport * as _ from 'lodash';\r\nimport { UserApiService } from '../../services/api/user.api.service';\r\nimport { ProductService } from '../../services/products.service';\r\nimport { ToastMessageService } from '../toast-message/toast.message.service';\r\nimport { Products } from '../../../interfaces/user.interfaces';\r\nimport { DialogType } from '../../enums';\r\nimport { DialogComponent } from '../dialog/dialog.component';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { ErrorService } from '../../services/error.service';\r\n\r\n@Component({\r\n selector: 'chats-panel',\r\n templateUrl: './chats-panel.component.html',\r\n styleUrls: ['./chats-panel.component.scss']\r\n})\r\nexport class ChatsPanelComponent implements OnInit {\r\n\r\n public search: string = '';\r\n public selectedProduct: Products | undefined | null = null;\r\n public multiModeOptions: MenuOptions[] = [\r\n {\r\n icon: 'cancel',\r\n label: 'Close Chat',\r\n method: this.openDialog.bind(this, DialogType.CLOSE_CHAT),\r\n disabled: false\r\n },\r\n {\r\n icon: 'reply',\r\n label: 'Reassign Chat',\r\n method: this.openDialog.bind(this, DialogType.REASSIGN_CHAT),\r\n disabled: false\r\n }\r\n ];\r\n public selectedClaimedChats: Chat[] = [];\r\n public productOptions: Dropdown[] = [];\r\n \r\n public multiSelectMode: boolean = false;\r\n public overlay: boolean = false;\r\n public showSpinner: boolean = false;\r\n\r\n constructor(\r\n private chatApiService: ChatApiService,\r\n public claimedChatsService: ClaimedChatsService,\r\n public authService: AuthService,\r\n public productService: ProductService,\r\n private error: ErrorService,\r\n public dialog: MatDialog,\r\n private userApiService: UserApiService,\r\n private toastMessageService: ToastMessageService\r\n ) { }\r\n\r\n async ngOnInit() { await this.pageLoad(); }\r\n\r\n private async pageLoad(): Promise {\r\n this.showSpinner = true;\r\n await this.getUserProducts();\r\n this.showSpinner = false;\r\n }\r\n \r\n private async getUserProducts(): Promise {\r\n try {\r\n const resp = await this.userApiService.getUserProducts();\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get products', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.authService.userProducts = resp.result;\r\n const selectedProduct = this.authService.userProducts.find(x => x.isDefaultProduct == 1);\r\n if (!selectedProduct) return;\r\n this.selectedProduct = selectedProduct;\r\n this.authService.setProduct = selectedProduct;\r\n this.productOptions = this.authService.userProducts.map((up: Products) => {\r\n return {\r\n label: up.txt,\r\n value: up\r\n };\r\n });\r\n await this.getClaimedChats();\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to get products', err, 'chats-panel.getUserProducts()');\r\n this.toastMessageService.showToastMessage('Failed to get products', 'toast-message-error');\r\n }\r\n }\r\n\r\n private async getClaimedChats(): Promise {\r\n try {\r\n const resp = await this.chatApiService.getClaimedChats();\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get claimed chats', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.handleChatsWithUnreadMessages(resp.result);\r\n this.claimedChatsService.applyChatFilterIfThereIsAFilter();\r\n this.claimedChatsService.handleClaimedChatsPanel();\r\n this.autoSelectClaimedChat();\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to get claimed chats', err, 'chats-panel.getClaimedChats()');\r\n this.toastMessageService.showToastMessage('Failed to get claimed chats', 'toast-message-error');\r\n }\r\n }\r\n\r\n //before we reassign the new incoming chats to the claimed chats we check a few things first\r\n //if there are no claimed chats we set claimed chats\r\n //but if there are claimed chats we check if there are any chats with unread messages\r\n //if there are unread messages we preserve them\r\n //if not we override claimed chats\r\n private handleChatsWithUnreadMessages(chats: Chat[]) {\r\n if (!this.claimedChatsService.getClaimedChats) {\r\n this.claimedChatsService.setClaimedChats = [...chats];\r\n this.claimedChatsService.setClaimedChatsOriginal = [...chats];\r\n return;\r\n }\r\n\r\n const unreadMessages = this.claimedChatsService.getClaimedChatsOriginal.filter(c => c.unreadMessages && c.unreadMessages > 0);\r\n //no unread messages\r\n if (!unreadMessages || unreadMessages.length === 0) {\r\n this.claimedChatsService.setClaimedChats = [...chats];\r\n this.claimedChatsService.setClaimedChatsOriginal = [...chats];\r\n return;\r\n }\r\n\r\n //there are unread messages so we need to preserve them\r\n chats.forEach(c => {\r\n unreadMessages.map(u => {\r\n if (c.chatId === u.chatId) {\r\n c.unreadMessages = u.unreadMessages;\r\n }\r\n });\r\n });\r\n\r\n this.claimedChatsService.setClaimedChats = [...chats];\r\n this.claimedChatsService.setClaimedChatsOriginal = [...chats];\r\n }\r\n\r\n public chatSelected(chat: Chat) {\r\n if (this.multiSelectMode) {\r\n if (chat.chatSelected) {\r\n this.selectedClaimedChats.push(chat);\r\n } else {\r\n const index = this.selectedClaimedChats.indexOf(chat);\r\n this.selectedClaimedChats.splice(index, 1);\r\n }\r\n } else {\r\n //if there is currently a selected claim chat\r\n //and the current claimed chat chat id is not the new selected chat id\r\n if (this.claimedChatsService.getSelectedClaimChat && this.claimedChatsService.getSelectedClaimChat.chatId !== chat.chatId) {\r\n //find the chat and set chat selected to false \r\n //because a new chat has been selected\r\n this.claimedChatsService.claimedChatsPanel?.map(cg => cg.chats.map(chat => {\r\n if (chat.chatId == this.claimedChatsService.getSelectedClaimChat?.chatId) {\r\n chat.chatSelected = false;\r\n chat.unreadMessages = null;\r\n };\r\n }));\r\n }\r\n this.claimedChatsService.setSelectedClaimChat = chat;\r\n }\r\n }\r\n\r\n private autoSelectClaimedChat() {\r\n const chatId = this.claimedChatsService.claimedChatIdFromRoom ? this.claimedChatsService?.claimedChatIdFromRoom : this.claimedChatsService.getSelectedClaimChat?.chatId;\r\n const chat = this.claimedChatsService.getClaimedChats.find(chat => chat.chatId === chatId);\r\n if (!chat) return;\r\n chat.chatSelected = true;\r\n this.claimedChatsService.setSelectedClaimChat = chat;\r\n this.claimedChatsService.claimedChatIdFromRoom = 0;\r\n }\r\n\r\n public multiSelectModeChange() {\r\n this.multiSelectMode = !this.multiSelectMode;\r\n if (!this.multiSelectMode) {\r\n // set chat selected to false when we go off multi-select mode\r\n this.claimedChatsService.claimedChatsPanel?.map(cg => cg.chats.map((chat) => chat.chatSelected = false));\r\n this.selectedClaimedChats = [];\r\n } else {\r\n if (this.selectedClaimedChats.length == 0 && this.claimedChatsService.getSelectedClaimChat) {\r\n this.selectedClaimedChats.push(this.claimedChatsService.getSelectedClaimChat);\r\n this.claimedChatsService.setSelectedClaimChat = null;\r\n }\r\n }\r\n }\r\n\r\n public async productChange(productChange: Products) {\r\n this.showSpinner = true;\r\n try {\r\n const resp = await this.userApiService.changeProduct(productChange.productId);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to change product', 'toast-message-error');\r\n else if (resp.errorCode !== 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.toastMessageService.showToastMessage('Product Changed', 'toast-message-success');\r\n this.claimedChatsService.setClaimedChatsOriginal = resp.result;\r\n this.claimedChatsService.setClaimedChats = resp.result;\r\n this.claimedChatsService.setSelectedClaimChat = null;\r\n this.claimedChatsService.claimedChatsPanel = null;\r\n this.authService.setProduct = productChange;\r\n this.selectedProduct = productChange;\r\n this.claimedChatsService.applyChatFilterIfThereIsAFilter();\r\n this.claimedChatsService.handleClaimedChatsPanel();\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to change product', err, 'chats-panel.productChange()');\r\n this.toastMessageService.showToastMessage('Failed to change product', 'toast-message-error');\r\n }\r\n this.showSpinner = false;\r\n }\r\n\r\n private openDialog(dialogTypeId: DialogType): void {\r\n const dialogRef = this.dialog.open(DialogComponent, {\r\n data: { dialogTypeId, chats: this.selectedClaimedChats },\r\n autoFocus: false\r\n });\r\n\r\n switch (dialogTypeId) {\r\n case DialogType.CLOSE_CHAT: this.handleClosingOfDialog(dialogRef); break;\r\n case DialogType.REASSIGN_CHAT: this.handleReassignChatDialog(dialogRef); break;\r\n default: return;\r\n }\r\n }\r\n \r\n private handleClosingOfDialog(dialogRef: MatDialogRef) {\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (!result) return;\r\n\r\n const chatIds: number[] = this.selectedClaimedChats.map(chat => chat.chatId);\r\n this.claimedChatsService.handleRemovingClaimedChats(chatIds);\r\n this.selectedClaimedChats = [];\r\n this.multiSelectMode = false;\r\n });\r\n }\r\n\r\n private handleReassignChatDialog(dialogRef: MatDialogRef): void {\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (!result) return;\r\n this.selectedClaimedChats = [];\r\n });\r\n }\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService {\r\n\r\n private _showSpinner: boolean = false;\r\n\r\n public get showSpinner(): boolean { return this._showSpinner; }\r\n\r\n public set showSpinner(value: boolean) { this._showSpinner = value; }\r\n\r\n constructor() { }\r\n}","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { Message } from '../../../../interfaces/message.interfaces';\r\nimport { ChatApiService } from '../../../services/api/chat.api.service';\r\nimport { ChatService } from '../../../services/chats/chat.service';\r\nimport { DialogService } from '../dialog.service';\r\nimport { ToastMessageService } from '../../toast-message/toast.message.service';\r\nimport { DialogComponent } from '../dialog.component';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { PreviewChatMessagesDialog } from '../../../../interfaces/dialog.interfaces';\r\n\r\n@Component({\r\n selector: 'preview-messages-dialog',\r\n templateUrl: './preview-messages-dialog.component.html',\r\n styleUrls: ['./preview-messages-dialog.component.scss']\r\n})\r\nexport class PreviewMessagesDialogComponent implements OnInit {\r\n \r\n public messages: Message[] = [];\r\n public whatsAppUserName: string | undefined = '';\r\n\r\n constructor(\r\n private chatApiService: ChatApiService,\r\n private chatService: ChatService,\r\n private dialogService: DialogService,\r\n private toastMessageService: ToastMessageService,\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: PreviewChatMessagesDialog\r\n ) { }\r\n\r\n async ngOnInit(): Promise {\r\n await this.getMessagesForChatId();\r\n this.whatsAppUserName = this.chatService.getFormattedName(this.data.chat.firstName, this.data.chat.lastName, this.data.chat.whatsappUserNumber);\r\n }\r\n\r\n private async getMessagesForChatId(): Promise {\r\n this.dialogService.showSpinner = true;\r\n try {\r\n const resp = await this.chatApiService.getMessagesForChatId(this.data.chat.chatId);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get messages for chat.', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else this.messages = resp.result;\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to get messages for chat.', 'toast-message-error');\r\n }\r\n this.dialogService.showSpinner = false;\r\n }\r\n}\r\n","
\r\n

{{ whatsAppUserName }}'s Chat Messages

\r\n
\r\n \r\n
\r\n
\r\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\r\nimport { ChatService } from '../../services/chats/chat.service';\r\nimport * as moment from 'moment';\r\nimport { RoomChat } from '../../../interfaces/chat.interfaces';\r\nimport { Message } from '../../../interfaces/message.interfaces';\r\nimport { MessageService } from '../../services/message.service';\r\n\r\n@Component({\r\n selector: 'room-chat-item',\r\n templateUrl: './room-chat-item.component.html',\r\n styleUrls: ['./room-chat-item.component.scss']\r\n})\r\nexport class RoomChatItemComponent {\r\n\r\n @Input() chat: RoomChat = {} as RoomChat;\r\n @Input() multiselectMode: boolean = false;\r\n\r\n @Output() claimChatMessages: EventEmitter = new EventEmitter();\r\n @Output() onClose: EventEmitter = new EventEmitter();\r\n @Output() onChatSelection: EventEmitter = new EventEmitter();\r\n\r\n public whatsAppDisplayName: string = '';\r\n public lastMessage: Message = {} as Message;\r\n public messageBody: string = '';\r\n public messageTimeStamp: string = '';\r\n public messageStatusIcon: string = '';\r\n public messageStatusIconClass: string = '';\r\n public messageMediaIcon: string = '';\r\n public unreadMessageCount: number = 5;\r\n public lastClaimedBy: string = '';\r\n public chatExpired: boolean = false;\r\n public chatSelected: boolean = false;\r\n\r\n constructor(\r\n private chatService: ChatService,\r\n private messageService: MessageService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.lastMessage = this.chat.messages[this.chat.messages.length - 1];\r\n this.messageBody = this.lastMessage.body;\r\n this.handleWhatsAppUserName();\r\n this.handleMessageTimeStamp();\r\n this.handleMessageStatusIcon();\r\n this.handleMessageMediaIcon();\r\n this.handleLastClaimedBy();\r\n this.chatExpired = this.chatService.hasChatExpired(this.chat.chatExpiryDate)\r\n }\r\n\r\n public chatSelect() {\r\n if (!this.multiselectMode) return;\r\n \r\n this.chat.chatSelected = !this.chat.chatSelected;\r\n this.onChatSelection.emit(this.chat);\r\n }\r\n\r\n public closeChat() {\r\n this.chat.chatSelected = !this.chat.chatSelected;\r\n this.onClose.emit(this.chat)\r\n }\r\n\r\n public claim() {\r\n this.chat.chatSelected = !this.chat.chatSelected;\r\n this.claimChatMessages.emit(this.chat);\r\n }\r\n \r\n private handleWhatsAppUserName(): void {\r\n if (this.chat.firstName && this.chat.lastName) this.whatsAppDisplayName = `${this.chat.firstName} ${this.chat.lastName}`;\r\n else if (this.chat.firstName) this.whatsAppDisplayName = this.chat.firstName;\r\n else this.whatsAppDisplayName = this.chat.whatsappUserNumber;\r\n }\r\n\r\n private handleMessageTimeStamp(): void {\r\n const message = moment(new Date(this.lastMessage.sendDate));\r\n if (message.isSame(moment(), 'day')) this.messageTimeStamp = moment(message).format('hh:mm a')\r\n else if (message.isSame(moment().clone().subtract(1, 'day'), 'day')) this.messageTimeStamp = 'Yesterday';\r\n else this.messageTimeStamp = moment(message).format('YYYY/MM/DD');\r\n }\r\n\r\n private handleMessageStatusIcon(): void {\r\n if (this.lastMessage.undeliveredDate) {\r\n this.messageStatusIcon = 'error';\r\n this.messageStatusIconClass = 'error';\r\n }\r\n else if (this.lastMessage.readDate) {\r\n this.messageStatusIcon = 'done_all';\r\n this.messageStatusIconClass = 'read';\r\n }\r\n else if (this.lastMessage.deliveredDate) this.messageStatusIcon = 'done_all';\r\n else if (this.lastMessage.sendDate) this.messageStatusIcon = 'done';\r\n }\r\n\r\n private handleMessageMediaIcon(): void {\r\n //last message is not a media message\r\n if (!this.lastMessage || !this.lastMessage.mediaUrl || !this.lastMessage.fileName) return;\r\n\r\n this.messageBody = this.lastMessage.fileName;\r\n\r\n const result = this.messageService.isMessageAFile(this.lastMessage.extension);\r\n if (!result) return;\r\n\r\n //if the media message has a friendly name we will set the message body to the friendly name\r\n if (this.lastMessage.body && this.lastMessage.friendlyName) this.messageBody = this.lastMessage.body;\r\n \r\n //setting the message media icon \r\n if (result.isMessageAnImage) this.messageMediaIcon = 'image';\r\n else if (result.isMessageAFile) this.messageMediaIcon = 'file_copy';\r\n else if (result.isMessageAudio) this.messageMediaIcon = 'mic';\r\n else if (result.isMessageVideo) this.messageMediaIcon = 'videocam';\r\n else this.messageMediaIcon = 'insert_drive_file';\r\n }\r\n\r\n private handleLastClaimedBy() {\r\n if (!this.chat.lastClaimedBy) this.lastClaimedBy = '';\r\n else this.lastClaimedBy = this.chatService.getFormattedName(this.chat.lastClaimedBy.split('@')[0]) ?? this.chat.lastClaimedBy;\r\n }\r\n}","\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {{ messageStatusIcon }}\r\n \r\n {{ messageMediaIcon }}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n","import { BrowserModule } from '@angular/platform-browser';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { MaterialModule } from './material.module';\r\nimport { AppComponent } from './app.component';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { RoomChatItemComponent } from './components/room-chat-item/room-chat-item.component';\r\nimport { DialogComponent } from './components/dialog/dialog.component';\r\nimport { LoginComponent } from './page/login/login.component';\r\nimport { SpinnerComponent } from './components/spinner/spinner.component';\r\nimport { ClosedChatsComponent } from './page/closed-chats/closed-chats.component';\r\nimport { LocationComponent } from './components/location/location.component';\r\nimport { LeafletModule } from \"@asymmetrik/ngx-leaflet\";\r\nimport { AuthManager } from './services/auth/auth.manager';\r\nimport { DropDownComponent } from './components/drop-down/drop-down.component';\r\nimport { SideMenuComponent } from './components/side-menu/side-menu.component';\r\nimport { ChatWindowComponent } from './components/chat-window/chat-window.component';\r\nimport { ChatsPanelComponent } from './components/chats-panel/chats-panel.component';\r\nimport { ChatsLandingPageComponent } from './page/chats-landing-page/chats-landing-page.component';\r\nimport { ToastMessageComponent } from './components/toast-message/toast-message.component';\r\nimport { ChatItemComponent } from './components/chat-item/chat-item.component';\r\nimport { MessageItemComponent } from './components/message-item/message-item.component';\r\nimport { CloseChatDialogComponent } from './components/dialog/close-chat-dialog/close-chat-dialog.component';\r\nimport { AddEditChatNotesDialogComponent } from './components/dialog/add-edit-chat-notes-dialog/add-edit-chat-notes-dialog.component';\r\nimport { ReassignChatDialogComponent } from './components/dialog/reassign-chat-dialog/reassign-chat-dialog.component';\r\nimport { AddEditReferenceNumberDialogComponent } from './components/dialog/add-edit-reference-number-dialog/add-edit-reference-number-dialog.component';\r\nimport { EditWhatsappUserDialogComponent } from './components/dialog/edit-whatsapp-user-dialog/edit-whatsapp-user-dialog.component';\r\nimport { ChatRoomsComponent } from './page/chat-rooms/chat-rooms.component';\r\nimport { ClaimRoomChatDialogComponent } from './components/dialog/claim-room-chat-dialog/claim-room-chat-dialog.component';\r\nimport { ChatRoomFilterPipe } from './pipes/chat-room-filter.pipe';\r\nimport { ContactsComponent } from './page/contacts/contacts.component';\r\nimport { AddWhatsappUserDialogComponent } from './components/dialog/add-whatsapp-user-dialog/add-whatsapp-user-dialog.component';\r\nimport { TemplateManagerComponent } from './page/template-manager/template-manager.component';\r\nimport { OnlineUsersComponent } from './page/online-users/online-users.component';\r\nimport { MessageWindowComponent } from './components/message-window/message-window.component';\r\nimport { PreviewMessagesDialogComponent } from './components/dialog/preview-messages-dialog/preview-messages-dialog.component';\r\nimport { MessagesPreviewClaimChatDialogComponent } from './components/dialog/messages-preview-claim-chat-dialog/messages-preview-claim-chat-dialog.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AppComponent,\r\n RoomChatItemComponent,\r\n LoginComponent,\r\n DialogComponent,\r\n SpinnerComponent,\r\n LocationComponent,\r\n ClosedChatsComponent,\r\n DropDownComponent,\r\n SideMenuComponent,\r\n ChatWindowComponent,\r\n ChatsPanelComponent,\r\n ChatsLandingPageComponent,\r\n ChatItemComponent,\r\n MessageItemComponent,\r\n CloseChatDialogComponent,\r\n AddEditChatNotesDialogComponent,\r\n ReassignChatDialogComponent,\r\n AddEditReferenceNumberDialogComponent,\r\n EditWhatsappUserDialogComponent,\r\n ChatRoomsComponent,\r\n ClaimRoomChatDialogComponent,\r\n ChatRoomFilterPipe,\r\n ContactsComponent,\r\n AddWhatsappUserDialogComponent,\r\n TemplateManagerComponent,\r\n OnlineUsersComponent,\r\n MessageWindowComponent,\r\n PreviewMessagesDialogComponent,\r\n MessagesPreviewClaimChatDialogComponent\r\n ],\r\n imports: [\r\n BrowserModule,\r\n AppRoutingModule,\r\n CommonModule,\r\n FormsModule,\r\n HttpClientModule,\r\n ReactiveFormsModule,\r\n BrowserAnimationsModule,\r\n MaterialModule,\r\n DragDropModule,\r\n LeafletModule\r\n ],\r\n providers: [\r\n AuthManager\r\n ],\r\n entryComponents: [ToastMessageComponent],\r\n bootstrap: [AppComponent]\r\n})\r\n \r\nexport class AppModule { }","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport * as moment from 'moment';\r\nimport { ClaimedChatsService } from '../../services/chats/claimed.chats.service';\r\nimport { Chat } from '../../../interfaces/chat.interfaces';\r\nimport { Message } from '../../../interfaces/message.interfaces';\r\nimport { ChatService } from '../../services/chats/chat.service';\r\nimport { MessageService } from '../../services/message.service';\r\n\r\n@Component({\r\n selector: 'chat-item',\r\n templateUrl: './chat-item.component.html',\r\n styleUrls: ['./chat-item.component.scss']\r\n})\r\nexport class ChatItemComponent implements OnInit {\r\n\r\n @Input() chat: Chat | null = null;\r\n @Input() multiSelectMode: boolean = false;\r\n @Output() onChatSelect: EventEmitter = new EventEmitter();\r\n\r\n public whatsAppDisplayName: string | undefined | null = undefined;\r\n public lastMessage: Message | undefined | null = undefined;\r\n public messageBody: string | undefined | null = undefined;\r\n public messageTimeStamp: string = '';\r\n public messageStatusIcon: string = '';\r\n public messageStatusIconClass: string = '';\r\n public messageMediaIcon: string = '';\r\n public chatExpired: boolean = false;\r\n public claimedBy: string | undefined = '';\r\n public chatStatus: string = '';\r\n\r\n constructor(\r\n public claimedChatsService: ClaimedChatsService,\r\n public messageService: MessageService,\r\n public chatService: ChatService\r\n ) { }\r\n\r\n ngOnInit(): void { this.setup(); }\r\n\r\n private setup() {\r\n this.lastMessage = this.chat?.messages[this.chat.messages.length - 1];\r\n this.messageBody = this.lastMessage?.body;\r\n if(this.chat) this.whatsAppDisplayName = this.chatService.getFormattedName(this.chat.firstName, this.chat.lastName, this.chat.whatsappUserNumber);\r\n this.handleMessageTimeStamp();\r\n this.handleMessageMediaIcon();\r\n this.handleClaimedBy();\r\n this.handleChatStatus();\r\n }\r\n\r\n public chatSelect() {\r\n if (!this.chat) return;\r\n\r\n this.chat.reassigned = false;\r\n if (this.multiSelectMode && this.chat) this.chat.chatSelected = !this.chat.chatSelected;\r\n else this.chat.chatSelected = true;\r\n if (!this.multiSelectMode) this.chat.unreadMessages = null;\r\n this.onChatSelect.emit(this.chat);\r\n }\r\n\r\n private handleMessageTimeStamp(): void {\r\n if (!this.lastMessage) return;\r\n\r\n const message = moment(new Date(this.lastMessage.sendDate));\r\n if (message.isSame(moment(), 'day')) this.messageTimeStamp = moment(message).format('hh:mm a')\r\n else if (message.isSame(moment().clone().subtract(1, 'day'), 'day')) this.messageTimeStamp = 'Yesterday';\r\n else this.messageTimeStamp = moment(message).format('YYYY/MM/DD');\r\n }\r\n\r\n private handleMessageMediaIcon(): void {\r\n if (!this.lastMessage) return;\r\n\r\n //last message is not a media message\r\n if (!this.lastMessage.mediaUrl) return;\r\n\r\n if (!this.messageBody) {\r\n this.messageBody = this.lastMessage.friendlyName;\r\n if (this.lastMessage.friendlyName) this.messageBody = this.lastMessage.friendlyName;\r\n else if (this.lastMessage.fileName) this.messageBody = this.lastMessage.fileName;\r\n }\r\n\r\n const result = this.messageService.isMessageAFile(this.lastMessage.extension);\r\n if (!result) return;\r\n\r\n //setting the message media icon \r\n if (result.isMessageAnImage) this.messageMediaIcon = 'image';\r\n else if (result.isMessageAFile) this.messageMediaIcon = 'file_copy';\r\n else if (result.isMessageAudio) this.messageMediaIcon = 'mic';\r\n else if (result.isMessageVideo) this.messageMediaIcon = 'videocam';\r\n else this.messageMediaIcon = 'insert_drive_file';\r\n }\r\n\r\n private handleChatStatus() {\r\n if (!this.chat) return;\r\n\r\n const expired = this.chatService.hasChatExpired(this.chat.chatExpiryDate);\r\n this.chatExpired = expired;\r\n if (expired) this.chatStatus = 'Expired'\r\n else this.chatStatus = 'Open';\r\n }\r\n\r\n private handleClaimedBy() {\r\n if (!this.chat) return;\r\n this.claimedBy = this.chatService.getFormattedName(this.chat.claimedBy.split('@')[0]);\r\n }\r\n}","
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {{ messageService.handleMessageStatusIcon(lastMessage.sendDate, lastMessage.readDate, lastMessage.deliveredDate, lastMessage.undeliveredDate).messageStatusIcon }}\r\n \r\n \r\n {{ messageMediaIcon }}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n","
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n 0\" mat-align-tabs=\"start\" animationDuration=\"0ms\"\r\n (selectedIndexChange)=\"chatRoomService.handleChatFilterLabels($event)\"\r\n [selectedIndex]=\"chatRoomService.selectedTab?.index\">\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Search {{ chatRoom.roomName }} Chats...\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Multiselect Mode\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n","import { Component, ElementRef, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { RoomChat } from '../../../interfaces/chat.interfaces';\r\nimport { Location } from '@angular/common';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ChatService } from '../../services/chats/chat.service';\r\nimport { DialogComponent } from '../../components/dialog/dialog.component';\r\nimport { DialogType, RoomChatFilterBy, RoomChatOrderBy } from '../../enums';\r\nimport * as _ from 'lodash';\r\nimport { ChatRoomService } from '../../services/chats/chat.room.service';\r\n\r\n@Component({\r\n selector: 'app-chat-rooms',\r\n templateUrl: './chat-rooms.component.html',\r\n styleUrls: ['./chat-rooms.component.scss']\r\n})\r\nexport class ChatRoomsComponent implements OnInit, OnDestroy {\r\n\r\n @ViewChild('toolbar', { static: false }) public toolbar: ElementRef | null = null;\r\n @ViewChild('filters', { static: false }) public filters: ElementRef | null = null;\r\n @ViewChild('chatListing', { static: false }) public chatListing: ElementRef | null = null;\r\n\r\n public multiSelectMode: boolean = false;\r\n public showSpinner: boolean = false;\r\n public disabledOrderByFilter: boolean = true;\r\n\r\n constructor(\r\n public chatRoomService: ChatRoomService,\r\n private location: Location,\r\n public dialog: MatDialog,\r\n public chatService: ChatService\r\n ) { }\r\n\r\n async ngOnInit(): Promise {\r\n await this.refreshChats();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.chatRoomService.chatRooms.map(room => room.chats.map(chat => chat.chatSelected = false));\r\n this.chatRoomService.clear();\r\n }\r\n\r\n public async refreshChats() {\r\n this.showSpinner = true;\r\n await this.chatRoomService.getChatRooms();\r\n if (this.chatRoomService.chatRooms?.length > 0 && !this.chatRoomService.selectedTab) this.chatRoomService.handleChatFilterLabels(0);\r\n this.showSpinner = false;\r\n }\r\n\r\n public multiSelectModeChange() {\r\n this.multiSelectMode = !this.multiSelectMode;\r\n if (!this.multiSelectMode) {\r\n //set chat selected to false when we go off multi-select mode\r\n this.chatRoomService.chatRooms.map((chatRoom) => chatRoom.chats.map((chat) => chat.chatSelected = false));\r\n this.chatRoomService.selectedChats = [];\r\n }\r\n }\r\n\r\n public onChatSelection(chat: RoomChat) {\r\n if (chat.chatSelected) {\r\n this.chatRoomService.selectedChats.push(chat);\r\n } else {\r\n const index = this.chatRoomService.selectedChats.indexOf(chat);\r\n this.chatRoomService.selectedChats.splice(index, 1);\r\n }\r\n }\r\n\r\n //gets called in the html\r\n //used to single closing of a chat\r\n //and also when we are bulk closing chats\r\n public handleCloseChatDialog(chats: RoomChat[]) {\r\n const dialog = this.dialog.open(DialogComponent, {\r\n data: { dialogTypeId: DialogType.CLOSE_CHAT, chats: chats },\r\n autoFocus: false\r\n });\r\n\r\n dialog.afterClosed().subscribe(result => {\r\n //user did not say yes for closing chat\r\n if (!result) {\r\n if (chats.length == 1) {\r\n chats.map(chat => chat.chatSelected = false);\r\n this.chatRoomService.selectedChats = [];\r\n }\r\n return;\r\n }\r\n\r\n //remove all the chats that were selected from the chats array in the room\r\n this.chatRoomService.chatRooms.map(chatRoom => chatRoom.chats = chatRoom.chats.filter(chat => !chats.includes(chat)));\r\n\r\n //refresh the room heading\r\n this.chatRoomService.handleRoomHeading();\r\n //recalculate the chats in room\r\n this.chatRoomService.calculateChatsInRoom();\r\n this.chatRoomService.selectedChats = [];\r\n });\r\n }\r\n\r\n public bulkClaimChat() {\r\n const dialog = this.dialog.open(DialogComponent, {\r\n data: { dialogTypeId: DialogType.BULK_CLAIM_CHAT, chats: this.chatRoomService.selectedChats },\r\n autoFocus: false\r\n });\r\n\r\n dialog.afterClosed().subscribe((result) => {\r\n if (!result) {\r\n if (this.chatRoomService.selectedChats.length == 1) {\r\n this.chatRoomService.selectedChats.map(chat => chat.chatSelected = false);\r\n this.chatRoomService.selectedChats = [];\r\n }\r\n return;\r\n }\r\n });\r\n }\r\n\r\n public previewClaimChatMessages(chat: RoomChat) {\r\n chat.chatSelected = true;\r\n\r\n const dialog = this.dialog.open(DialogComponent, {\r\n data: { dialogTypeId: DialogType.PREVIEW_CLAIM_CHAT, chats: [chat] },\r\n autoFocus: false\r\n });\r\n\r\n dialog.afterClosed().subscribe(() => { chat.chatSelected = false; });\r\n }\r\n\r\n public onChatFilter(chatFilter: RoomChatFilterBy) {\r\n this.chatRoomService.chatFilter = chatFilter;\r\n\r\n if (!this.chatRoomService.chatFilter) {\r\n this.chatRoomService.orderFilter = RoomChatOrderBy.DESCENDING;\r\n this.disabledOrderByFilter = true;\r\n }\r\n\r\n if (this.chatRoomService.chatFilter != RoomChatFilterBy.CHAT_DATE) this.disabledOrderByFilter = true;\r\n else this.disabledOrderByFilter = false;\r\n\r\n this.chatRoomService.calculateChatsInRoom();\r\n this.chatRoomService.handleRoomHeading();\r\n }\r\n\r\n public calculateHeight() {\r\n if (!this.toolbar || !this.chatListing || !this.filters) {\r\n return;\r\n }\r\n\r\n const toolbarHeight = this.toolbar.nativeElement.offsetHeight;\r\n const filtersHeight = this.filters.nativeElement.offsetHeight;\r\n const messageWindowHeight = window.innerHeight - toolbarHeight - filtersHeight - 45;\r\n\r\n //only if the calculated height is different to what it currently is then we will set message window height\r\n if (this.chatListing.nativeElement.style.height !== messageWindowHeight) {\r\n return `${messageWindowHeight}px`;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n\r\n public onOrderBy(orderBy: RoomChatOrderBy) {\r\n this.chatRoomService.orderFilter = orderBy;\r\n }\r\n\r\n public goBack() {\r\n this.location.back();\r\n }\r\n}","\r\n\r\n
\r\n
\r\n person\r\n \r\n {{ chatWindowRemainingTime }}\r\n \r\n \r\n
\r\n
\r\n
\r\n search\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n

Drop files here.

\r\n \r\n

{{ fileDropError }}

\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n File\r\n preview not\r\n supported\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n","import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, OnInit, ViewChild } from '@angular/core';\r\nimport { ClaimedChatsService } from '../../services/chats/claimed.chats.service';\r\nimport * as _ from 'lodash';\r\nimport { Subject, Subscription, interval } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { AuthService } from '../../services/auth/auth.service';\r\nimport { MenuOptions } from '../../../interfaces/global.interfaces';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { DialogComponent } from '../dialog/dialog.component';\r\nimport { DialogType } from '../../enums';\r\nimport { ChatService } from '../../services/chats/chat.service';\r\nimport { ChatApiService } from '../../services/api/chat.api.service';\r\nimport { ToastMessageService } from '../toast-message/toast.message.service';\r\nimport { Chat } from '../../../interfaces/chat.interfaces';\r\nimport { EditWhatsappUserDialog } from '../../../interfaces/dialog.interfaces';\r\nimport { MessageSearch } from '../message-window/message-window.component';\r\nimport { Message, MessageFile } from '../../../interfaces/message.interfaces';\r\nimport { ApiService } from '../../services/api/api.service';\r\nimport * as RecordRTC from 'recordrtc';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { ErrorService } from '../../services/error.service';\r\n\r\n@Component({\r\n selector: 'chat-window',\r\n templateUrl: './chat-window.component.html',\r\n styleUrls: ['./chat-window.component.scss']\r\n})\r\nexport class ChatWindowComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n @Input() public selectedClaimChatId: number | null = null;\r\n @ViewChild('chatWindow', { static: false }) public chatWindow: ElementRef | null = null;\r\n @ViewChild('messageWindow', { static: false }) public messageWindow: ElementRef | null = null;\r\n @ViewChild('footer', { static: false }) public footer: ElementRef | null = null;\r\n @ViewChild('toolbar', { static: false }) public toolbar: ElementRef | null = null;\r\n @ViewChild('searchChatMessagesInput') public searchChatMessagesInput: ElementRef | null = null;\r\n public navigateToNextResultEmitter: EventEmitter = new EventEmitter();\r\n public navigateToPreviousResultEmitter: EventEmitter = new EventEmitter();\r\n public scrollToBottomEmitter: EventEmitter = new EventEmitter();\r\n\r\n public chatWindowRemainingTime: string = '';\r\n public fileToSend: File | null = null;\r\n public messageFile: MessageFile | null = null;\r\n public messageFileUrl: SafeUrl | null = null;\r\n public fileDropError: string = '';\r\n private maxLinesForMaxHeight: number = 10;\r\n private currentMessageLines: number = 2;\r\n private previousMessageLines: number = 2;\r\n public messageWindowHeight: number = 0;\r\n private detectChangesSub: Subject = new Subject();\r\n public whatsAppUserName: string = '';\r\n public mimeTypes: string[] = [];\r\n public search: string = '';\r\n public message: string | undefined | null = null;\r\n public searchResults: number = 0;\r\n public currentResultIndex: number = 0;\r\n public chatsOptions: MenuOptions[] = [\r\n {\r\n icon: 'cancel',\r\n label: 'Close Chat',\r\n method: this.closeDialog.bind(this),\r\n disabled: false\r\n },\r\n {\r\n icon: 'refresh',\r\n label: 'Refresh Messages',\r\n method: async () => await this.getChatMessages(),\r\n disabled: false,\r\n },\r\n {\r\n icon: 'reply',\r\n label: 'Reassign Chat',\r\n method: this.reassignChatDialog.bind(this),\r\n disabled: false\r\n },\r\n {\r\n icon: 'note_add',\r\n label: 'Add / Edit Chat Notes',\r\n method: this.openDialog.bind(this, DialogType.EDIT_WHATSAPP_CHAT_NOTES),\r\n disabled: false\r\n },\r\n {\r\n icon: 'edit',\r\n label: 'Add / Edit Reference Number',\r\n method: this.editReferenceNumberDialog.bind(this),\r\n disabled: false\r\n },\r\n {\r\n icon: 'perm_contact_calendar',\r\n label: 'Edit WhatsApp User',\r\n method: this.editWhatsAppUserDialog.bind(this),\r\n disabled: false\r\n }\r\n ];\r\n\r\n //recording audio\r\n record: RecordRTC.StereoAudioRecorder | null = null;\r\n startTime: number | null = null;\r\n timer: ReturnType | null = null;\r\n recordTime: string = '00:00';\r\n stream: MediaStream = {} as MediaStream;\r\n\r\n public isDragging: boolean = false;\r\n public showSpinner: boolean = false;\r\n public searchMessagesOverlay: boolean = false;\r\n public chatExpired: boolean = false;\r\n public recording: boolean = false;\r\n public sendingMessage: boolean = false;\r\n\r\n constructor(\r\n public claimedChatsService: ClaimedChatsService,\r\n private chatApiService: ChatApiService,\r\n private toastMessageService: ToastMessageService,\r\n public chatService: ChatService,\r\n private apiService: ApiService,\r\n private authService: AuthService,\r\n private error: ErrorService,\r\n private cd: ChangeDetectorRef,\r\n private sanitizer: DomSanitizer,\r\n public dialog: MatDialog\r\n ) {\r\n interval(1000)\r\n .pipe(takeUntil(this.detectChangesSub))\r\n .subscribe(() => {\r\n const newRemainingTime = this.claimedChatsService.selectedClaimChatWindowLeft;\r\n if (newRemainingTime !== this.chatWindowRemainingTime) {\r\n this.chatWindowRemainingTime = newRemainingTime;\r\n this.cd.markForCheck();\r\n }\r\n });\r\n }\r\n async ngOnInit() { await this.getMediaTypes(); }\r\n\r\n ngOnDestroy() {\r\n this.detectChangesSub.next();\r\n this.detectChangesSub.complete();\r\n }\r\n\r\n ngOnChanges() {\r\n if (!this.selectedClaimChatId) return;\r\n\r\n this.updateWhatsappUserName();\r\n this.handleChatOptions();\r\n this.clearSearch();\r\n if (this.claimedChatsService.getSelectedClaimChat) this.chatExpired = this.chatService.hasChatExpired(this.claimedChatsService.getSelectedClaimChat.chatExpiryDate);\r\n }\r\n\r\n private async getChatMessages(): Promise {\r\n this.showSpinner = true;\r\n if (!this.claimedChatsService.getSelectedClaimChat) return;\r\n try {\r\n const resp = await this.chatApiService.getMessagesForChatId(this.claimedChatsService.getSelectedClaimChat.chatId);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to refresh chat messages', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n const chat = this.claimedChatsService.getSelectedClaimChat;\r\n this.claimedChatsService.updateClaimedChatMessages(chat.chatId, resp.result);\r\n this.claimedChatsService.getSelectedClaimChat.messages = chat.messages;\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to get chat messages', err, 'chats-window.getChatMessages()');\r\n this.toastMessageService.showToastMessage('Failed to refresh chat messages', 'toast-message-error');\r\n }\r\n this.showSpinner = false;\r\n }\r\n\r\n private async getMediaTypes(): Promise {\r\n try {\r\n const resp = await this.apiService.getMimeTypes();\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get mime types', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else this.mimeTypes = resp.result.map((x: { mimeType: string; }) => x.mimeType);\r\n } catch (err) {\r\n this.error.handleError('Failed to get media types', err, 'chats-window.getMediaTypes()');\r\n this.toastMessageService.showToastMessage('Failed to get mime types', 'toast-message-error');\r\n }\r\n }\r\n\r\n private handleChatOptions() {\r\n //use does not own the chat\r\n if (this.claimedChatsService.getSelectedClaimChat?.claimedBy.toLowerCase() !== this.authService.loginName?.toLowerCase()) {\r\n this.chatsOptions.filter(co => {\r\n if (co.label.toLowerCase() !== 'close chat' && co.label.toLowerCase() !== 'refresh messages') {\r\n co.disabled = true;\r\n }\r\n });\r\n } else {\r\n this.chatsOptions.filter(co => {\r\n co.disabled = false;\r\n });\r\n }\r\n }\r\n\r\n public openSearchMessagesOverlay() {\r\n this.searchMessagesOverlay = !this.searchMessagesOverlay;\r\n\r\n if (this.searchMessagesOverlay) {\r\n setTimeout(() => {\r\n if (!this.searchChatMessagesInput || !this.searchChatMessagesInput.nativeElement) return;\r\n this.searchChatMessagesInput.nativeElement.focus();\r\n }, 0);\r\n }\r\n }\r\n\r\n public handleMessageSearchTyping(event: KeyboardEvent) {\r\n if (!this.search || this.search.trim().length <= 2) return;\r\n\r\n const isEnter = event.key === 'Enter' || event.code === 'Enter';\r\n if (isEnter) this.navigateToNextResult();\r\n }\r\n\r\n public navigateToNextResult(): void {\r\n this.navigateToNextResultEmitter.emit();\r\n }\r\n\r\n public navigateToPreviousResult(): void {\r\n this.navigateToPreviousResultEmitter.emit();\r\n }\r\n\r\n public messageSearch(event: MessageSearch) {\r\n this.currentResultIndex = event.currentResultIndex;\r\n this.searchResults = event.searchResults;\r\n }\r\n\r\n public calculateHeight() {\r\n if (!this.footer || !this.toolbar || !this.messageWindow) {\r\n return;\r\n }\r\n\r\n const toolbarHeight = this.toolbar.nativeElement.offsetHeight;\r\n const footerHeight = this.footer.nativeElement.offsetHeight;\r\n const messageWindowHeight = window.innerHeight - toolbarHeight - footerHeight;\r\n\r\n //only if the calculated height is different to what it currently is then we will set message window height\r\n if (this.messageWindow.nativeElement.style.height !== messageWindowHeight) {\r\n this.messageWindowHeight = messageWindowHeight;\r\n this.messageWindow.nativeElement.style.height = `${this.messageWindowHeight}px`;\r\n this.messageWindow.nativeElement.style.maxHeight = `${this.messageWindowHeight}px`;\r\n }\r\n }\r\n\r\n //to sum up what this method is doing\r\n //whenever the user is making a new line we will expand the footer and make the message window height smaller\r\n //if the user is removing lines we will contract the footer and expand the message window height\r\n //there is a max height by checking the current lines and if the lines is greater than the max line height we won't expand\r\n public handleFooterAndMessageWindowHeight(): void {\r\n //get the footer element\r\n const footer = this.footer?.nativeElement as HTMLElement | null;\r\n //get the message window element\r\n const messageWindow = this.messageWindow?.nativeElement as HTMLElement | null;\r\n\r\n if (!footer || !messageWindow) return;\r\n\r\n //get the text area element\r\n const textarea = document.querySelector('.footer textarea') as HTMLTextAreaElement | null;\r\n\r\n if (!textarea) return;\r\n\r\n //get the line height for the textarea\r\n const lineHeight = parseInt(window.getComputedStyle(textarea).lineHeight || '0', 10);\r\n //the amount of lines textarea is at\r\n this.currentMessageLines = Math.ceil(textarea.scrollHeight / lineHeight);\r\n\r\n //get the min footer height\r\n const minFooterHeight = parseInt(window.getComputedStyle(footer).minHeight || '0', 10);\r\n //get the max footer height\r\n const maxFooterHeight = parseInt(window.getComputedStyle(footer).maxHeight || '0', 10);\r\n //get the max message window height\r\n const maxMessageWindowHeight = parseInt(window.getComputedStyle(messageWindow).maxHeight || '0', 10);\r\n\r\n //user cleared out everything in the text area\r\n if (_.isEmpty(this.message)) {\r\n //set footer and message window height back to normal\r\n messageWindow.style.height = `${maxMessageWindowHeight}px`;\r\n footer.style.height = `${minFooterHeight}px`;\r\n this.currentMessageLines = 2;\r\n this.previousMessageLines = 2;;\r\n return;\r\n }\r\n\r\n //don't do anything if the live lines is equal to the current message window lines\r\n // if it is it means the person hasn't made a new line and is typing on the same message\r\n if (this.currentMessageLines == this.previousMessageLines) return;\r\n\r\n //max lines is dependant on the max height of the footer\r\n //footer height goes up in 10px\r\n //the difference between the max and current height is 10 so that's where we get 6 from\r\n const increaseLineAmount: number = 10;\r\n\r\n //we are removing lines\r\n if (this.currentMessageLines < this.previousMessageLines) {\r\n // only decrease heights if the lines are not less than the minimum allowed\r\n if (this.currentMessageLines <= this.maxLinesForMaxHeight) {\r\n // decrease the footer height\r\n footer.style.height = `${footer.clientHeight - increaseLineAmount}px`;\r\n // increase the message window height\r\n messageWindow.style.height = `${messageWindow.clientHeight + increaseLineAmount}px`;\r\n }\r\n }\r\n //we are adding lines\r\n else if (this.currentMessageLines > this.previousMessageLines) {\r\n //this is to cater for a sudden change of current lines\r\n //eg being if the user copy pastes a message in the text area\r\n let multiplier: number = Math.ceil(this.currentMessageLines - this.previousMessageLines);\r\n if (multiplier > this.maxLinesForMaxHeight) multiplier = this.maxLinesForMaxHeight;\r\n //increase the height of the footer and decrease the height of the message window\r\n //only if the footer is not equal to the max height\r\n if (maxFooterHeight !== footer.offsetHeight) {\r\n //decrease the message window height\r\n messageWindow.style.height = `${messageWindow.clientHeight - (increaseLineAmount * multiplier)}px`;\r\n //increase the footer height\r\n footer.style.height = `${footer.clientHeight + (increaseLineAmount * multiplier)}px`;\r\n }\r\n }\r\n\r\n this.previousMessageLines = this.currentMessageLines;\r\n\r\n //emit scroll to bottom\r\n this.scrollToBottomEmitter.emit();\r\n }\r\n\r\n public async onFileSelected(fileList: FileList) {\r\n const files: File[] = Array.from(fileList || []);\r\n const mimeTypes = files.map(file => file.type);\r\n\r\n if (this.isValidFiles(mimeTypes)) {\r\n this.fileToSend = files[0];\r\n const resp = await this.handleFileUpload(this.fileToSend);\r\n if (!resp) return;\r\n this.handleFileDisplay();\r\n }\r\n else this.toastMessageService.showToastMessage(`Invalid file type. Accepted file types are: ${this.mimeTypes.join(', ')}`, 'toast-message-error', 6000);\r\n }\r\n\r\n public onDragEnter(event: DragEvent): void {\r\n event.preventDefault();\r\n if (this.fileToSend) return;\r\n else if (!this.isDragging) this.isDragging = true;\r\n else if (this.isStillInsideChatWindow(event)) return;\r\n\r\n const files: DataTransferItemList | undefined = event.dataTransfer?.items;\r\n\r\n if (!files || files.length > 1) {\r\n this.fileDropError = `Can only send one file at a time.`;\r\n return;\r\n }\r\n\r\n const header = files.length == 1 ? 'Invalid file type' : 'Invalid file types';\r\n const mimeTypes: string[] = Object.values(files).map(file => file.type);\r\n const validFile = this.isValidFiles(mimeTypes);\r\n if (!validFile) this.fileDropError = `${header}.\\nAccepted file types are:\\n${this.mimeTypes.join(', ')}`;\r\n else this.fileDropError = '';\r\n }\r\n\r\n public onDragOver(event: DragEvent) { event.preventDefault(); }\r\n\r\n public onDragLeave(event: DragEvent): void {\r\n event.preventDefault();\r\n if (this.isStillInsideChatWindow(event)) return;\r\n this.isDragging = false;\r\n }\r\n\r\n public async onFilesDropped(event: DragEvent) {\r\n event.preventDefault();\r\n if (this.fileToSend) return;\r\n\r\n //for sending media\r\n if (this.claimedChatsService.getSelectedClaimChat) {\r\n const chatExpired = this.chatService.hasChatExpired(this.claimedChatsService.getSelectedClaimChat.chatExpiryDate);\r\n if (chatExpired) {\r\n this.isDragging = false;\r\n this.toastMessageService.showToastMessage('Chat is expired. Cannot send file', 'toast-message-error');\r\n return;\r\n }\r\n }\r\n\r\n this.isDragging = false;\r\n if (this.fileDropError) return;\r\n\r\n const files: File[] = Array.from(event.dataTransfer?.files || []);\r\n this.fileToSend = files[0];\r\n await this.handleFileUpload(this.fileToSend);\r\n this.handleFileDisplay();\r\n }\r\n\r\n private handleFileDisplay() {\r\n if (!this.fileToSend) return;\r\n const reader = new FileReader();\r\n reader.onload = (e) => {\r\n const dataURL = e.target?.result as string;\r\n this.messageFileUrl = this.sanitizer.bypassSecurityTrustUrl(dataURL);\r\n };\r\n reader.readAsDataURL(this.fileToSend);\r\n }\r\n\r\n private isValidFiles(mimeTypes: string[]): boolean {\r\n if (mimeTypes?.length == 0) return false;\r\n return mimeTypes.every(file => this.mimeTypes.includes(file));\r\n }\r\n\r\n public async handleFileUpload(file: File): Promise {\r\n return new Promise((resolve, reject) => {\r\n const fileSizeMB = file.size / 1024 / 1024;\r\n if (fileSizeMB > 15) {\r\n this.toastMessageService.showToastMessage(`${file.name} is too large to send`, 'toast-message-error');\r\n this.fileToSend = null;\r\n return resolve(false);\r\n }\r\n\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file as Blob);\r\n reader.onload = async () => {\r\n const base64 = reader.result?.toString().replace(`data:${file.type};base64,`, '');\r\n\r\n if (!base64) {\r\n this.toastMessageService.showToastMessage(`Unable to send ${file.name}`, 'toast-message-error', 4000);\r\n // continue;\r\n reject(false);\r\n }\r\n if (base64) {\r\n const extension: string | undefined = file?.name ? file.name.split('.').pop() : file.type.split('/').pop();\r\n\r\n if (!extension) return reject('can not find file extension');\r\n\r\n const selectedClaimedChat: Chat | null = this.claimedChatsService.getSelectedClaimChat;\r\n\r\n if (!selectedClaimedChat) return reject('no selected claim chat');\r\n\r\n this.messageFile = {\r\n base64: base64,\r\n fileName: file.name,\r\n mimeType: file.type,\r\n extension: extension,\r\n filePrefixName: selectedClaimedChat.refNo ? selectedClaimedChat.refNo : `${selectedClaimedChat.chatId}`\r\n };\r\n resolve(true);\r\n }\r\n };\r\n });\r\n }\r\n\r\n public async validateMessage(event: KeyboardEvent): Promise {\r\n //prevent enter key from making a new line\r\n if (event) event.preventDefault();\r\n\r\n //empty message so do nothing and no message file\r\n if (_.isEmpty(this.message?.trim()) && !this.messageFile) return;\r\n\r\n await this.sendMessage();\r\n }\r\n\r\n public async sendMessage(): Promise {\r\n this.sendingMessage = true;\r\n try {\r\n if (!this.claimedChatsService.getSelectedClaimChat) return;\r\n\r\n //for sending media\r\n const chatExpired = this.chatService.hasChatExpired(this.claimedChatsService.getSelectedClaimChat.chatExpiryDate);\r\n if (chatExpired) {\r\n this.toastMessageService.showToastMessage('Chat is expired. Cannot send messages', 'toast-message-error');\r\n return;\r\n }\r\n\r\n const body = this.message?.trim() ?? '';\r\n const resp = await this.chatApiService.sendWhatsappMessage(this.claimedChatsService.getSelectedClaimChat.chatId, body, this.messageFile);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to send whatsapp message', 'toast-message-error');\r\n else if (resp.errorCode !== 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n const message: Message = {\r\n messageId: resp.result.messageId,\r\n body: body,\r\n chatId: this.claimedChatsService.getSelectedClaimChat.chatId,\r\n direction: 1,\r\n systemUser: this.authService?.user?.loginName,\r\n systemUserId: this.authService?.user?.id,\r\n whatsappUserFirstName: this.claimedChatsService.getSelectedClaimChat.firstName,\r\n whatsappUserLastName: this.claimedChatsService.getSelectedClaimChat.lastName,\r\n whatsappUserNumber: this.claimedChatsService.getSelectedClaimChat.whatsappUserNumber,\r\n sendDate: new Date(),\r\n fileName: this.messageFile?.fileName,\r\n friendlyName: this.messageFile?.fileName,\r\n mediaUrl: resp.result?.mediaUrl,\r\n extension: this.messageFile?.extension,\r\n mimeType: this.messageFile?.mimeType\r\n };\r\n this.claimedChatsService.getSelectedClaimChat.messages = [...this.claimedChatsService.getSelectedClaimChat.messages, message];\r\n this.claimedChatsService.handleClaimedChatsPanel();\r\n this.scrollToBottomEmitter.emit();\r\n this.messageFile = null;\r\n this.messageFileUrl = null;\r\n this.message = null;\r\n this.handleFooterAndMessageWindowHeight();\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to send message', err, 'chats-window.sendMessage()');\r\n this.toastMessageService.showToastMessage('Failed to send whatsapp message', 'toast-message-error');\r\n }\r\n this.sendingMessage = false;\r\n }\r\n\r\n public chatOption(option: MenuOptions) { option.method.call(this); }\r\n\r\n private openDialog(dialogTypeId: DialogType): void {\r\n this.dialog.open(DialogComponent, {\r\n data: { dialogTypeId },\r\n autoFocus: false\r\n });\r\n }\r\n\r\n private closeDialog(): void {\r\n const dialogRef = this.dialog.open(DialogComponent, {\r\n data: { dialogTypeId: DialogType.CLOSE_CHAT, chats: [this.claimedChatsService.getSelectedClaimChat] },\r\n autoFocus: false\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (!result || !this.claimedChatsService.getSelectedClaimChat) return;\r\n\r\n const chatIds: number[] = [this.claimedChatsService.getSelectedClaimChat.chatId];\r\n this.claimedChatsService.handleRemovingClaimedChats(chatIds);\r\n });\r\n }\r\n\r\n private reassignChatDialog(): void {\r\n this.dialog.open(DialogComponent, {\r\n data: { dialogTypeId: DialogType.REASSIGN_CHAT, chats: [this.claimedChatsService.getSelectedClaimChat] },\r\n autoFocus: false\r\n });\r\n }\r\n\r\n private editReferenceNumberDialog() {\r\n const dialogRef = this.dialog.open(DialogComponent, {\r\n data: {\r\n dialogTypeId: DialogType.ADD_UPDATE_REFERENCE_NUMBER\r\n },\r\n autoFocus: false\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result: boolean | undefined) => {\r\n if (!result) return;\r\n\r\n const chat: Chat | null = this.claimedChatsService.getSelectedClaimChat;\r\n\r\n if (chat) {\r\n const chatToUpdate = this.getChatToUpdate(chat.chatId);\r\n if (!chatToUpdate) return;\r\n else if (!this.claimedChatsService.claimedChatsPanel) return;\r\n\r\n const foundChat: Chat = this.claimedChatsService.claimedChatsPanel[chatToUpdate.groupIndex].chats[chatToUpdate.chatIndex];\r\n foundChat.refNo = chat.refNo;\r\n this.claimedChatsService.claimedChatsPanel[chatToUpdate.groupIndex].chats[chatToUpdate.chatIndex] = { ...foundChat };\r\n }\r\n\r\n });\r\n }\r\n\r\n private editWhatsAppUserDialog() {\r\n if (!this.claimedChatsService.getSelectedClaimChat) return;\r\n\r\n const chat: Chat | null = this.claimedChatsService.getSelectedClaimChat;\r\n const dialogRef = this.dialog.open(DialogComponent, {\r\n data: {\r\n dialogTypeId: DialogType.EDIT_WHATSAPP_USER,\r\n whatsappUserId: chat.whatsappUserId,\r\n firstName: chat.firstName,\r\n lastName: chat.lastName\r\n },\r\n autoFocus: false\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((whatsappUser: EditWhatsappUserDialog | undefined) => {\r\n if (!whatsappUser || !this.claimedChatsService.getSelectedClaimChat) return;\r\n\r\n this.claimedChatsService.getSelectedClaimChat.firstName = whatsappUser.firstName;\r\n this.claimedChatsService.getSelectedClaimChat.lastName = whatsappUser.lastName;\r\n\r\n if (!this.claimedChatsService.claimedChatsPanel) return;\r\n\r\n const chatToUpdate = this.getChatToUpdate(chat.chatId);\r\n if (!chatToUpdate) return;\r\n\r\n const foundChat: Chat = this.claimedChatsService.claimedChatsPanel[chatToUpdate.groupIndex].chats[chatToUpdate.chatIndex];\r\n foundChat.firstName = whatsappUser.firstName;\r\n foundChat.lastName = whatsappUser.lastName;\r\n\r\n foundChat.messages.map(m => {\r\n m.whatsappUserFirstName = whatsappUser.firstName;\r\n m.whatsappUserLastName = whatsappUser.lastName;\r\n });\r\n\r\n this.claimedChatsService.claimedChatsPanel[chatToUpdate.groupIndex].chats[chatToUpdate.chatIndex] = { ...foundChat };\r\n\r\n this.updateWhatsappUserName();\r\n });\r\n }\r\n\r\n private updateWhatsappUserName() {\r\n if (!this.claimedChatsService.getSelectedClaimChat) return;\r\n\r\n const chat: Chat | null = this.claimedChatsService.getSelectedClaimChat;\r\n const whatsappUserName = this.chatService.getFormattedName(chat.firstName, chat.lastName, chat.whatsappUserNumber);\r\n\r\n this.whatsAppUserName = whatsappUserName ?? '';\r\n }\r\n\r\n private getChatToUpdate(chatId: number): ChatToUpdate | null {\r\n if (!this.claimedChatsService.claimedChatsPanel) return null;\r\n\r\n const groupIndex: number = this.claimedChatsService.claimedChatsPanel.findIndex(group =>\r\n group.chats.some(c => c.chatId === chatId)\r\n );\r\n\r\n if (groupIndex === -1) return null;\r\n\r\n const chatIndex: number = this.claimedChatsService.claimedChatsPanel[groupIndex].chats.findIndex(c =>\r\n c.chatId === chatId\r\n );\r\n\r\n if (chatIndex === -1) return null;\r\n\r\n return {\r\n groupIndex: groupIndex,\r\n chatIndex: chatIndex\r\n };\r\n }\r\n\r\n public clearSearch() {\r\n this.searchMessagesOverlay = false;\r\n this.search = '';\r\n this.searchResults = 0;\r\n this.currentResultIndex = 0;\r\n }\r\n\r\n //handling when the user pressing escape\r\n //need to clear the search\r\n public handleOverlayKeydown(event: KeyboardEvent) {\r\n if (event.key === 'Escape') {\r\n this.clearSearch();\r\n }\r\n }\r\n\r\n private startTimer() {\r\n this.startTime = Date.now();\r\n\r\n this.timer = setInterval(() => {\r\n if (!this.startTime) return;\r\n const currentTime = Date.now();\r\n const elapsedTimeInSeconds = Math.floor((currentTime - this.startTime) / 1000);\r\n this.formatTimer(elapsedTimeInSeconds);\r\n }, 1000);\r\n }\r\n\r\n private formatTimer(time: number) {\r\n const minutes = Math.floor(time / 60);\r\n const seconds = Math.floor(time % 60);\r\n this.recordTime = `${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;\r\n }\r\n\r\n public startRecording() {\r\n try {\r\n this.startTimer();\r\n navigator.mediaDevices.getUserMedia({ audio: true })\r\n .then(this.successCallback.bind(this),\r\n this.toastMessageService.showToastMessage.bind('Can not record audio in your browser', 'toast-message-error')\r\n );\r\n } catch (err) {\r\n this.recording = false;\r\n this.toastMessageService.showToastMessage.bind('Failed to record audio in your browser', 'toast-message-error');\r\n }\r\n }\r\n\r\n public stopRecording() {\r\n this.recording = false;\r\n this.stopTimer();\r\n this.stream.getTracks().forEach(track => track.stop());\r\n this.record?.stop(this.stopTimer.bind(this));\r\n this.record = null;\r\n }\r\n\r\n private stopTimer() {\r\n this.recordTime = '00:00';\r\n this.timer = null;\r\n this.startTime = null;\r\n }\r\n\r\n private successCallback(mediaStream: MediaStream) {\r\n this.recording = true;\r\n const options: RecordRTC.Options = {\r\n mimeType: \"audio/ogg\",\r\n numberOfAudioChannels: 1\r\n };\r\n\r\n //starting audio recording\r\n this.record = new RecordRTC.StereoAudioRecorder(mediaStream, options);\r\n this.record.record();\r\n this.stream = mediaStream;\r\n\r\n\r\n }\r\n\r\n public submitRecording() {\r\n this.record?.stop(this.processRecording.bind(this));\r\n }\r\n\r\n //strange thing that happens\r\n //when recording audio we set it to audio/ogg but when we get the file it's not, it's set to audio/wav\r\n //but by setting the file name to have '.mp3' at the end works even though the file itself is audio/wav\r\n private async processRecording(file: Blob) {\r\n this.stopTimer();\r\n this.stopRecording();\r\n this.fileToSend = new File([file], `${this.newGuid()}.wav`, { type: file.type });\r\n const resp = await this.handleFileUpload(this.fileToSend);\r\n if (!resp) return;\r\n await this.sendMessage();\r\n }\r\n\r\n private newGuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n const r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n private isStillInsideChatWindow(event: DragEvent): boolean { return this.chatWindow?.nativeElement.contains(event.relatedTarget as Node); }\r\n}\r\n\r\nexport interface ChatToUpdate {\r\n groupIndex: number;\r\n chatIndex: number;\r\n}","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'spinner',\r\n templateUrl: './spinner.component.html',\r\n styleUrls: ['./spinner.component.scss']\r\n})\r\nexport class SpinnerComponent {\r\n @Input() reason: string = '';\r\n}\r\n","
\r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n","
\r\n

Claim {{ data.chats.length }} Chats

\r\n
\r\n 0\" filter=\"true\" placeHolder=\"Select a group\"\r\n [options]=\"groupOptions\" filterPlaceHolder=\"Filter groups\" (onDropdownOptionSelect)=\"onGroupSelect($event)\">\r\n \r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { ChatApiService } from '../../../services/api/chat.api.service';\r\nimport { DialogService } from '../dialog.service';\r\nimport { ToastMessageService } from '../../toast-message/toast.message.service';\r\nimport { DialogComponent } from '../dialog.component';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ClaimChatDialog } from '../../../../interfaces/dialog.interfaces';\r\nimport { Dropdown, Groups } from '../../../../interfaces/global.interfaces';\r\nimport { UserApiService } from '../../../services/api/user.api.service';\r\nimport { Router } from '@angular/router';\r\nimport { SocketService } from '../../../services/socket.service';\r\nimport { InternalMessage } from '../../../../interfaces/internal.message.interfaces';\r\nimport { InternalMessageType } from '../../../enums';\r\nimport { AuthService } from '../../../services/auth/auth.service';\r\nimport { ErrorService } from '../../../services/error.service';\r\n@Component({\r\n selector: 'claim-room-chat-dialog',\r\n templateUrl: './claim-room-chat-dialog.component.html',\r\n styleUrls: ['./claim-room-chat-dialog.component.scss']\r\n})\r\nexport class ClaimRoomChatDialogComponent implements OnInit {\r\n\r\n public groupOptions: Dropdown[] = [];\r\n public selectedGroupOptionId: number | null = null;\r\n\r\n constructor(\r\n private chatApiService: ChatApiService,\r\n private userApiService: UserApiService,\r\n private dialogService: DialogService,\r\n private toastMessageService: ToastMessageService,\r\n public dialogRef: MatDialogRef,\r\n private socketService: SocketService,\r\n private router: Router,\r\n private error: ErrorService,\r\n private authService: AuthService,\r\n @Inject(MAT_DIALOG_DATA) public data: ClaimChatDialog\r\n ) { }\r\n\r\n async ngOnInit(): Promise {\r\n this.dialogService.showSpinner = true;\r\n await this.getUsersGroups();\r\n this.dialogService.showSpinner = false;\r\n }\r\n\r\n private async getUsersGroups(): Promise {\r\n try {\r\n const resp = await this.userApiService.getUsersGroups();\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get groups.', 'toast-message-error');\r\n else if (resp.errorCode !== 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n resp.result.map((group: Groups) => {\r\n this.groupOptions.push({\r\n label: group.txt,\r\n value: group.id\r\n });\r\n });\r\n }\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to get groups.', 'toast-message-error');\r\n this.error.handleError('Failed to get groups', err, 'claim-room-chat-dialog.getUserGroups()');\r\n }\r\n }\r\n\r\n public onGroupSelect(groupId: number): void { this.selectedGroupOptionId = groupId; }\r\n\r\n public async claimChat(): Promise {\r\n if (!this.selectedGroupOptionId || !this.authService.userId) return;\r\n\r\n this.dialogService.showSpinner = true;\r\n try {\r\n const chatIds = this.data.chats.map(chat => chat.chatId);;\r\n const resp = await this.chatApiService.claimChat(chatIds, this.selectedGroupOptionId);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to claim chat.', 'toast-message-error');\r\n else if (resp.errorCode !== 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.toastMessageService.showToastMessage('Chat claimed.', 'toast-message-success');\r\n const internalMessage: InternalMessage = {\r\n internalMessage: {\r\n chats: this.data.chats,\r\n serverUserId: this.authService.userId\r\n },\r\n internalMessageType: InternalMessageType.NOTIFY_USERS_CHAT_CLAIMED\r\n };\r\n this.socketService.sendInternalMessage(internalMessage);\r\n this.cancel();\r\n this.router.navigate(['/chats']);\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to claim chat', err, 'claim-room-chat-dialog.claimChat()');\r\n this.toastMessageService.showToastMessage('Failed to claim chat.', 'toast-message-error');\r\n }\r\n this.dialogService.showSpinner = false;\r\n }\r\n\r\n public cancel() {\r\n this.dialogRef.close();\r\n }\r\n}","
\r\n

Reassign Chat

\r\n 0\" filter=true showClear=\"true\" placeHolder=\"Select a user\"\r\n [options]=\"userOptions\" [disabled]=\"selectedGroupOptionId ? true : false\" filterPlaceHolder=\"Filter users\"\r\n (onDropdownOptionSelect)=\"onUserSelect($event)\">\r\n \r\n\r\n 0\" [disabled]=\"selectedUserOptionId ? true : false\"\r\n filter=true showClear=\"true\" placeHolder=\"Select a group\" [options]=\"groupOptions\" filterPlaceHolder=\"Filter groups\"\r\n (onDropdownOptionSelect)=\"onGroupSelect($event)\">\r\n \r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { DialogComponent } from '../dialog.component';\r\nimport { DialogService } from '../dialog.service';\r\nimport { ToastMessageService } from '../../toast-message/toast.message.service';\r\nimport { Dropdown, Groups } from '../../../../interfaces/global.interfaces';\r\nimport { UserApiService } from '../../../services/api/user.api.service';\r\nimport { AuthService } from '../../../services/auth/auth.service';\r\nimport { ChatApiService } from '../../../services/api/chat.api.service';\r\nimport { ReassignChatDialog } from '../../../../interfaces/dialog.interfaces';\r\nimport * as _ from 'lodash';\r\nimport { ClaimedChatsService } from '../../../services/chats/claimed.chats.service';\r\nimport { ErrorService } from '../../../services/error.service';\r\n\r\n@Component({\r\n selector: 'reassign-chat-dialog',\r\n templateUrl: './reassign-chat-dialog.component.html',\r\n styleUrls: ['./reassign-chat-dialog.component.scss']\r\n})\r\nexport class ReassignChatDialogComponent implements OnInit {\r\n\r\n public userOptions: Dropdown[] = [];\r\n public selectedUserOptionId: number | null = null;\r\n public groupOptions: Dropdown[] = [];\r\n public selectedGroupOptionId: number | null = null;\r\n\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n private dialogService: DialogService,\r\n private userApiService: UserApiService,\r\n private authService: AuthService,\r\n private chatApiService: ChatApiService,\r\n private claimedChatsService: ClaimedChatsService,\r\n private toastMessageService: ToastMessageService,\r\n private error: ErrorService,\r\n @Inject(MAT_DIALOG_DATA) public data: ReassignChatDialog\r\n ) { }\r\n\r\n async ngOnInit() {\r\n this.dialogService.showSpinner = true;\r\n await this.getUsersInGroup();\r\n await this.getAllGroups();\r\n this.dialogService.showSpinner = false;\r\n }\r\n\r\n private async getUsersInGroup() {\r\n try {\r\n const groupIds: number[] = _.uniq(this.data.chats.map(chat => chat.groupId));\r\n if (groupIds.length > 1) return;\r\n const resp = await this.userApiService.getOnlineUsersInGroup(groupIds[0]);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get users in group.', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n if (!resp.result || resp.result.length == 0) return;\r\n resp.result.map((user: { id: number; loginName: string; }) => {\r\n this.userOptions.push({\r\n value: user.id,\r\n label: user.loginName\r\n })\r\n });\r\n }\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to get users in group.', 'toast-message-error');\r\n this.error.handleError('Failed to get users in group.', err, 'reassign-chat-dialog.getUsersInGroup()');\r\n }\r\n }\r\n\r\n private async getAllGroups() {\r\n if (!this.authService.user?.selectedProduct?.productId) return;\r\n try {\r\n const resp = await this.userApiService.getAllGroups(this.authService.user.selectedProduct.productId);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get all groups.', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n resp.result.map((group: Groups) => {\r\n this.groupOptions.push({\r\n label: group.txt,\r\n value: group.id\r\n });\r\n });\r\n }\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to get all groups.', 'toast-message-error');\r\n this.error.handleError('Failed to get all groups.', err, 'reassign-chat-dialog.getAllGroups()');\r\n }\r\n }\r\n\r\n public async reassignChat(): Promise {\r\n this.dialogService.showSpinner = true;\r\n try {\r\n //reassigning chat to a group\r\n if (this.selectedGroupOptionId) {\r\n const chatIds: number[] = this.data.chats.map(chat => chat.chatId);\r\n const resp = await this.chatApiService.reassignChatsToGroup(this.selectedGroupOptionId, chatIds);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to reassign chat to group.', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-success');\r\n this.claimedChatsService.handleClosingAndReassigningChatToGroup();\r\n this.dialogRef.close(true);\r\n }\r\n }\r\n //reassigning chat to a user\r\n else if (this.selectedUserOptionId) {\r\n const resp = await this.chatApiService.reassignChatToUser(this.data.chats, this.selectedUserOptionId);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to reassign chat to user.', 'toast-message-error');\r\n else if (resp.errorCode !== 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-success');\r\n const loginName: string | undefined = this.userOptions.find(u => u.value === this.selectedUserOptionId)?.label;\r\n this.dialogRef.close(true);\r\n if (loginName) {\r\n this.claimedChatsService.handleChatsReassignToUser(this.data.chats, this.selectedUserOptionId, loginName);\r\n this.claimedChatsService.setSelectedClaimChat = null;\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to reassign chat.', 'toast-message-error');\r\n this.error.handleError('Failed to reassign chat.', err, 'reassign-chat-dialog.reassignChat()');\r\n }\r\n this.dialogService.showSpinner = false;\r\n }\r\n\r\n public onUserSelect(userId: number): void { this.selectedUserOptionId = userId; }\r\n\r\n public onGroupSelect(groupId: number): void { this.selectedGroupOptionId = groupId; }\r\n\r\n public cancel(): void { this.dialogRef.close(); }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpResponse } from '../../../interfaces/result.interfaces';\r\nimport { BaseApiService } from '../base-api.service';\r\nimport { Template } from '../../../interfaces/template.interfaces';\r\nimport { Contacts } from '../../../interfaces/user.interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class TemplateApiService {\r\n\r\n private route: string = 'template/';\r\n\r\n constructor(private base: BaseApiService) { }\r\n\r\n public async getAllTemplates(): Promise {\r\n return await this.base.get('template.api.service.getAllTemplates', `${this.route}getAllTemplates`);\r\n }\r\n\r\n public async getTemplateParams(templateId: number): Promise {\r\n return await this.base.get('data.service.getTemplateParams', `${this.route}getTemplateParams?templateId=${templateId}`);\r\n }\r\n\r\n public async sendTemplateToWhatsappUser(template: Template, whatsappUser: Contacts): Promise {\r\n const payload = {\r\n template: template,\r\n whatsappUser: whatsappUser\r\n };\r\n\r\n return await this.base.post('template.api.service.sendTemplateToWhatsappUser', `${this.route}sendTemplateToWhatsappUser`, payload);\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { HttpResponse } from '../../../interfaces/result.interfaces';\r\nimport { BaseApiService } from '../base-api.service';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ApiService {\r\n\r\n constructor(private base: BaseApiService) { }\r\n\r\n public async getMimeTypes(): Promise {\r\n return await this.base.get('api.service.getMimeTypes', `getMimeTypes`);\r\n }\r\n}","
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n \r\n Username\r\n \r\n \r\n \r\n Password\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n","import { Component } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ErrorService } from '../../services/error.service';\r\nimport { AuthService } from '../../services/auth/auth.service';\r\nimport { ToastMessageService } from '../../components/toast-message/toast.message.service';\r\n\r\n@Component({\r\n\tselector: 'app-login',\r\n\ttemplateUrl: './login.component.html',\r\n\tstyleUrls: ['./login.component.scss']\r\n})\r\nexport class LoginComponent {\r\n\tpublic userName: string = '';\r\n\tpublic password: string = '';\r\n\tpublic waitingResponse: boolean = false;\r\n\r\n\tconstructor(\r\n\t\tprivate auth: AuthService,\r\n\t\tprivate error: ErrorService,\r\n\t\tprivate router: Router,\r\n\t\tprivate toastMessageService: ToastMessageService\r\n\t) { }\r\n\r\n\tpublic async login() {\r\n\t\tthis.waitingResponse = true;\r\n\t\ttry {\r\n\t\t\tconst res = await this.auth.loginUser(this.userName, this.password);\r\n\t\t\tif (!res) this.toastMessageService.showToastMessage('Failed to login', 'toast-message-error');\r\n\t\t\telse if (res.errorCode !== 0) this.toastMessageService.showToastMessage(res.errorMessage, 'toast-message-error');\r\n\t\t\telse this.router.navigate(['/chats']);\r\n\t\t}\r\n\t\tcatch (error) {\r\n\t\t\tthis.toastMessageService.showToastMessage('Failed to login', 'toast-message-error');\r\n\t\t\tthis.error.handleError('Failed to Login', error, 'login.login()');\r\n\t\t}\r\n\t\tthis.waitingResponse = false;\r\n\t}\r\n}","import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class PermissionsService {\r\n public requestNotificationsPermissions() {\r\n if (!('Notification' in window)) {\r\n alert('This browser does not support desktop notification');\r\n }\r\n else if (Notification.permission === 'granted') {\r\n return;\r\n }\r\n //default = neither deined nor granted\r\n else if (Notification.permission === 'default') {\r\n Notification.requestPermission();\r\n }\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { fromEvent } from \"rxjs\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class BrowserService {\r\n\r\n private _browserFocused: boolean = false;\r\n private _visiblility: string = '';\r\n\r\n public get browserFocused(): boolean { return this._browserFocused; }\r\n\r\n public get visiblility(): string { return this._visiblility; }\r\n\r\n public set browserFocused(value: boolean) { this._browserFocused = value; }\r\n\r\n public set visiblility(value: string) { this._visiblility = value; }\r\n\r\n constructor() { this.setupFocusDetection(); this.initializePageVisibility(); }\r\n \r\n private setupFocusDetection(): void {\r\n const focus$ = fromEvent(window, 'focus');\r\n const blur$ = fromEvent(window, 'blur');\r\n\r\n focus$.subscribe(() => {\r\n this.browserFocused = true;\r\n });\r\n\r\n blur$.subscribe(() => {\r\n this.browserFocused = false;\r\n });\r\n }\r\n\r\n private initializePageVisibility(): void {\r\n document.addEventListener('visibilitychange', () => {\r\n this.visiblility = document.visibilityState;\r\n });\r\n\r\n this.visiblility = document.visibilityState;\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport * as moment from \"moment\";\r\nimport { DisplayMessages, Message, MessageFileResult, MessageStatus } from \"../../interfaces/message.interfaces\";\r\nimport * as _ from \"lodash\";\r\nimport { ClaimedChatsService } from \"./chats/claimed.chats.service\";\r\nimport { MessageStatusInternalMessage } from \"../../interfaces/internal.message.interfaces\";\r\nimport { DomSanitizer, SafeUrl } from \"@angular/platform-browser\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class MessageService {\r\n\r\n private _messages: Message[] = [];\r\n private _displayMessages: DisplayMessages[] = [];\r\n\r\n public get messages(): Message[] { return this._messages; }\r\n public get displayMessages(): DisplayMessages[] { return this._displayMessages; }\r\n\r\n public set messages(messages: Message[]) { this._messages = messages; }\r\n public set displayMessages(messages: DisplayMessages[]) { this._displayMessages = messages; }\r\n\r\n constructor(private claimedChatService: ClaimedChatsService, private sanitizer: DomSanitizer) { }\r\n\r\n public handleDisplayMessages(): void {\r\n this.displayMessages = [];\r\n const messageDates = this.getMessageDates();\r\n\r\n for (const date of messageDates) {\r\n const messages = this.getMessagesForDate(date);\r\n this.displayMessages.push({\r\n date: date,\r\n messages: messages\r\n });\r\n }\r\n }\r\n\r\n private getMessageDates(): string[] {\r\n const uniqueDates = _.uniq(this.messages.map(message => moment(new Date(message.sendDate)).format('YYYY-MM-DD')));\r\n const sortedDates = _.sortBy(uniqueDates, date => moment(new Date(date)));\r\n return sortedDates.map(date => this.formatMessageDate(date));\r\n }\r\n\r\n private formatMessageDate(dateString: string): string {\r\n const today = moment();\r\n const yesterday = moment().subtract(1, 'day');\r\n const messageDate = moment(new Date(dateString));\r\n\r\n if (messageDate.isSame(today, 'day')) {\r\n return 'Today';\r\n } else if (messageDate.isSame(yesterday, 'day')) {\r\n return 'Yesterday';\r\n } else if (messageDate.isSame(today, 'week')) {\r\n // if within the same week we going to display the day of the week\r\n return messageDate.format('dddd');\r\n } else {\r\n return messageDate.format('YYYY-MM-DD');\r\n }\r\n }\r\n\r\n public getMessagesForDate(date: string): Message[] {\r\n const today = moment();\r\n const yesterday = moment().subtract(1, 'day');\r\n\r\n return this.messages.filter(message => {\r\n const messageDate = moment(new Date(message.sendDate));\r\n\r\n if (messageDate.isSame(today, 'day') && date === 'Today') {\r\n return true;\r\n } else if (messageDate.isSame(yesterday, 'day') && date === 'Yesterday') {\r\n return true;\r\n } else if (messageDate.isSame(today, 'week') && date === messageDate.format('dddd')) {\r\n return true;\r\n } else if (date === messageDate.format('YYYY-MM-DD')) {\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n }\r\n\r\n public handleMessageStatusupdate(message: MessageStatusInternalMessage) {\r\n if (!this.claimedChatService.claimedChatsPanel) return;\r\n\r\n for (const chatPanel of this.claimedChatService.claimedChatsPanel) {\r\n for (const chat of chatPanel.chats) {\r\n const messageIndex = chat.messages.findIndex(m => m.messageId === message.messageId);\r\n\r\n if (messageIndex !== -1) {\r\n if (!chat.messages[messageIndex].deliveredDate) chat.messages[messageIndex].deliveredDate = message.deliveredDate;\r\n if (!chat.messages[messageIndex].readDate) chat.messages[messageIndex].readDate = message.readDate;\r\n if (!chat.messages[messageIndex].undeliveredDate) chat.messages[messageIndex].undeliveredDate = message.undeliveredDate;\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public handleMessageStatusIcon(sendDate: Date, readDate: Date, deliveredDate: Date, undeliveredDate: Date): MessageStatus {\r\n if (undeliveredDate) {\r\n return {\r\n messageStatusIcon: 'error',\r\n messageStatusIconClass: 'error'\r\n };\r\n } else if (readDate) {\r\n return {\r\n messageStatusIcon: 'done_all',\r\n messageStatusIconClass: 'read'\r\n };\r\n }\r\n else if (deliveredDate) return { messageStatusIcon: 'done_all', messageStatusIconClass: '' };\r\n else if (sendDate) return { messageStatusIcon: 'done', messageStatusIconClass: '' };\r\n else return { messageStatusIcon: '', messageStatusIconClass: '' };\r\n }\r\n\r\n public isMessageAFile(extension: string | null | undefined): MessageFileResult | null {\r\n\r\n if (!extension) return null;\r\n\r\n const result = {\r\n isMessageMedia: true,\r\n isMessageAnImage: false,\r\n isMessageAFile: false,\r\n isMessageVideo: false,\r\n isMessageAudio: false\r\n };\r\n\r\n const imageExtensions: string[] = ['jpg', 'png', 'jpeg'];\r\n const audioExtensions: string[] = ['mp3', 'ogg', 'amr', 'wav'];\r\n const mediaExtensions: string[] = ['mp4', 'mpeg'];\r\n\r\n if (imageExtensions.includes(extension)) result.isMessageAnImage = true;\r\n else if (extension == 'pdf') result.isMessageAFile = true;\r\n else if (mediaExtensions.includes(extension)) result.isMessageVideo = true;\r\n else if (audioExtensions.includes(extension)) result.isMessageAudio = true;\r\n\r\n return result;\r\n }\r\n\r\n public sanitizeImageUrl(imageUrl: string): SafeUrl { return this.sanitizer.bypassSecurityTrustUrl(imageUrl); }\r\n}","import { NgModule } from '@angular/core';\r\nimport { Routes, RouterModule } from '@angular/router';\r\nimport { LoginComponent } from './page/login/login.component';\r\nimport { AuthManager } from './services/auth/auth.manager';\r\nimport { ChatsLandingPageComponent } from './page/chats-landing-page/chats-landing-page.component';\r\nimport { ChatRoomsComponent } from './page/chat-rooms/chat-rooms.component';\r\nimport { ContactsComponent } from './page/contacts/contacts.component';\r\nimport { TemplateManagerComponent } from './page/template-manager/template-manager.component';\r\nimport { ClosedChatsComponent } from './page/closed-chats/closed-chats.component';\r\nimport { OnlineUsersComponent } from './page/online-users/online-users.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: 'chats',\r\n component: ChatsLandingPageComponent,\r\n canActivate: [AuthManager]\r\n },\r\n {\r\n path: 'chat-rooms',\r\n component: ChatRoomsComponent,\r\n canActivate: [AuthManager]\r\n },\r\n {\r\n path: 'contacts',\r\n component: ContactsComponent,\r\n canActivate: [AuthManager]\r\n },\r\n {\r\n path: 'online-users',\r\n component: OnlineUsersComponent,\r\n canActivate: [AuthManager]\r\n },\r\n {\r\n path: 'template-manager',\r\n component: TemplateManagerComponent,\r\n canActivate: [AuthManager]\r\n },\r\n {\r\n path: 'closed-chats',\r\n component: ClosedChatsComponent,\r\n canActivate: [AuthManager]\r\n },\r\n {\r\n path: 'error',\r\n component: LoginComponent\r\n },\r\n {\r\n path: 'accessdenied',\r\n component: LoginComponent\r\n },\r\n {\r\n path: '404',\r\n component: LoginComponent\r\n },\r\n {\r\n path: 'login',\r\n component: LoginComponent\r\n },\r\n {\r\n path: '',\r\n component: LoginComponent\r\n },\r\n {\r\n path: '**',\r\n redirectTo: '/login'\r\n },\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule { }","import { Injectable } from '@angular/core';\r\nimport { HttpResponse } from '../../../interfaces/result.interfaces';\r\nimport { BaseApiService } from '../base-api.service';\r\nimport { Chat, RoomChat } from '../../../interfaces/chat.interfaces';\r\nimport { MessageFile } from '../../../interfaces/message.interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ChatApiService {\r\n\r\n private route: string = 'chat/';\r\n constructor(private base: BaseApiService) { }\r\n\r\n public async claimChats(): Promise {\r\n return await this.base.post('chat.api.service.claimChats', `${this.route}claimChats`, null);\r\n }\r\n\r\n public async getClaimedChats(): Promise {\r\n return await this.base.get('chat.api.service.getClaimedChats', `${this.route}getClaimedChats`);\r\n }\r\n\r\n public async getMessagesForChatId(chatId: number): Promise {\r\n return await this.base.get('chat.api.service.getMessagesForChatId', `${this.route}getMessagesForChatId?chatId=${chatId}`);\r\n }\r\n\r\n public async closeChats(chats: Chat[] | RoomChat[]): Promise {\r\n return await this.base.post('chat.api.service.closeChats', `${this.route}closeChats`, chats);\r\n }\r\n\r\n public async reassignChatsToGroup(groupId: number, chatIds: number[]): Promise {\r\n const payload = {\r\n chatIds: chatIds,\r\n groupId: groupId\r\n };\r\n\r\n return await this.base.post('chat.api.service.reassignChatsToGroup', `${this.route}reassignChatsToGroup`, payload);\r\n }\r\n\r\n public async reassignChatToUser(chats: Chat[], reassignToUserId: number): Promise {\r\n const payload = {\r\n chats: chats,\r\n reassignToUserId: reassignToUserId\r\n };\r\n\r\n return await this.base.post('chat.api.service.reassignChatToUser', `${this.route}reassignChatToUser`, payload);\r\n }\r\n\r\n public async updateChatNotes(chatId: number, notes: string): Promise {\r\n const payload = {\r\n chatId: chatId,\r\n notes: notes\r\n };\r\n\r\n return await this.base.post('chat.api.service.updateChatNotes', `${this.route}updateChatNotes`, payload);\r\n }\r\n\r\n public async updateChatRefNo(chatId: number, refNo: string): Promise {\r\n const payload = {\r\n chatId: chatId,\r\n refNo: refNo,\r\n };\r\n\r\n return await this.base.post('chat.api.service.updateChatRefNo', `${this.route}updateChatRefNo`, payload);\r\n }\r\n\r\n public async claimChat(chatIds: number[], groupId: number): Promise {\r\n const json = {\r\n chatIds: chatIds,\r\n groupId: groupId\r\n };\r\n return await this.base.post('chat.api.service.claimChat', `${this.route}claimChat`, json);\r\n }\r\n\r\n public async getChatRooms(): Promise {\r\n return await this.base.get('chat.api.service.getChatRooms', `${this.route}getChatRooms`);\r\n }\r\n\r\n public async getClosedChatsFromDateAndOptionallyUser(fromDate: Date, systemUserId?: number, whatsappUserId?: number): Promise {\r\n const payload = {\r\n fromDate: fromDate,\r\n systemUserId: systemUserId,\r\n whatsappUserId: whatsappUserId\r\n };\r\n\r\n return await this.base.post('chat.api.service.getClosedChatsFromDateAndOptionallyUser', `${this.route}getClosedChatsFromDateAndOptionallyUser`, payload);\r\n }\r\n\r\n public async sendWhatsappMessage(chatId: number, body: string, messageFile?: MessageFile | null): Promise {\r\n const payload = {\r\n chatId: chatId,\r\n body: body,\r\n messageFile: messageFile\r\n };\r\n\r\n return await this.base.post('chat.api.service.sendWhatsappMessage', `${this.route}sendWhatsappMessage`, payload);\r\n }\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { ProductService } from '../../services/products.service';\r\nimport { SocketService } from '../../services/socket.service';\r\n\r\n@Component({\r\n selector: 'app-side-menu',\r\n templateUrl: './side-menu.component.html',\r\n styleUrls: ['./side-menu.component.scss']\r\n})\r\nexport class SideMenuComponent {\r\n @Input() public socketService!: SocketService;\r\n @Input() public productService!: ProductService;\r\n @Output() public onMenuStateChange: EventEmitter = new EventEmitter();\r\n\r\n constructor() { }\r\n}","
\r\n
\r\n \"Avecs\"\r\n
\r\n\r\n
\r\n\r\n \r\n
\r\n","import { NgModule } from '@angular/core';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\nimport { ClipboardModule } from '@angular/cdk/clipboard';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { CdkStepperModule } from '@angular/cdk/stepper';\r\nimport { CdkTableModule } from '@angular/cdk/table';\r\nimport { CdkTreeModule } from '@angular/cdk/tree';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatBottomSheetModule } from '@angular/material/bottom-sheet';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatNativeDateModule , MatRippleModule} from '@angular/material/core';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatTreeModule } from '@angular/material/tree';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';\r\nimport { Ng2SearchPipeModule } from 'ng2-search-filter';\r\nimport { NgxMatDatetimePickerModule, NgxMatTimepickerModule } from '@angular-material-components/datetime-picker';\r\nimport { NgxMatMomentModule } from '@angular-material-components/moment-adapter';\r\n\r\n@NgModule({\r\n exports: [\r\n A11yModule,\r\n ClipboardModule,\r\n CdkStepperModule,\r\n CdkTableModule,\r\n CdkTreeModule,\r\n DragDropModule,\r\n MatAutocompleteModule,\r\n MatBadgeModule,\r\n MatBottomSheetModule,\r\n MatButtonModule,\r\n MatButtonToggleModule,\r\n MatCardModule,\r\n MatCheckboxModule,\r\n MatChipsModule,\r\n MatStepperModule,\r\n MatDatepickerModule,\r\n MatDialogModule,\r\n MatDividerModule,\r\n MatExpansionModule,\r\n MatGridListModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatListModule,\r\n MatMenuModule,\r\n MatNativeDateModule,\r\n MatPaginatorModule,\r\n MatProgressBarModule,\r\n MatProgressSpinnerModule,\r\n MatRadioModule,\r\n MatRippleModule,\r\n MatSelectModule,\r\n MatSidenavModule,\r\n MatSliderModule,\r\n MatSlideToggleModule,\r\n MatSnackBarModule,\r\n MatSortModule,\r\n MatTableModule,\r\n MatTabsModule,\r\n MatToolbarModule,\r\n MatTooltipModule,\r\n MatTreeModule,\r\n OverlayModule,\r\n PortalModule,\r\n ScrollingModule,\r\n MatDialogModule,\r\n Ng2SearchPipeModule,\r\n NgxMatDatetimePickerModule,\r\n NgxMatTimepickerModule,\r\n NgxMatMomentModule,\r\n MatPaginatorModule,\r\n MatSortModule,\r\n MatTableModule,\r\n MatSortModule\r\n ],\r\n providers: [\r\n { provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: { appearance: 'fill' } },\r\n ],\r\n})\r\n\r\nexport class MaterialModule {}","
\r\n

{{ whatsAppUserName }}'s Chat Messages

\r\n
\r\n \r\n
\r\n
\r\n 0\" filter=\"true\" placeHolder=\"Select a group\"\r\n [options]=\"groupOptions\" filterPlaceHolder=\"Filter groups\" (onDropdownOptionSelect)=\"onGroupSelect($event)\">\r\n \r\n\r\n \r\n
\r\n
\r\n","import { Component, Inject, OnInit } from '@angular/core';\r\nimport { Message } from '../../../../interfaces/message.interfaces';\r\nimport { ChatApiService } from '../../../services/api/chat.api.service';\r\nimport { ChatService } from '../../../services/chats/chat.service';\r\nimport { DialogService } from '../dialog.service';\r\nimport { ToastMessageService } from '../../toast-message/toast.message.service';\r\nimport { DialogComponent } from '../dialog.component';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ClaimChatDialog } from '../../../../interfaces/dialog.interfaces';\r\nimport { Dropdown, Groups } from '../../../../interfaces/global.interfaces';\r\nimport { UserApiService } from '../../../services/api/user.api.service';\r\nimport { Router } from '@angular/router';\r\nimport { ClaimedChatsService } from '../../../services/chats/claimed.chats.service';\r\nimport { RoomChat } from '../../../../interfaces/chat.interfaces';\r\nimport { InternalMessage } from '../../../../interfaces/internal.message.interfaces';\r\nimport { InternalMessageType } from '../../../enums';\r\nimport { AuthService } from '../../../services/auth/auth.service';\r\nimport { SocketService } from '../../../services/socket.service';\r\nimport { ErrorService } from '../../../services/error.service';\r\n\r\n@Component({\r\n selector: 'messages-preview-claim-chat-dialog',\r\n templateUrl: './messages-preview-claim-chat-dialog.component.html',\r\n styleUrls: ['./messages-preview-claim-chat-dialog.component.scss']\r\n})\r\nexport class MessagesPreviewClaimChatDialogComponent implements OnInit {\r\n\r\n public groupOptions: Dropdown[] = [];\r\n public selectedGroupOptionId: number | null = null;\r\n public messages: Message[] = [];\r\n public whatsAppUserName: string | undefined = '';\r\n public chat: RoomChat | null = null;\r\n\r\n constructor(\r\n private chatApiService: ChatApiService,\r\n private chatService: ChatService,\r\n private userApiService: UserApiService,\r\n private dialogService: DialogService,\r\n private toastMessageService: ToastMessageService,\r\n public dialogRef: MatDialogRef,\r\n private router: Router,\r\n private claimedChatsService: ClaimedChatsService,\r\n private authService: AuthService,\r\n private socketService: SocketService,\r\n private error: ErrorService,\r\n @Inject(MAT_DIALOG_DATA) public data: ClaimChatDialog\r\n ) { }\r\n\r\n async ngOnInit(): Promise {\r\n this.chat = this.data.chats[0];\r\n this.dialogService.showSpinner = true;\r\n this.whatsAppUserName = this.chatService.getFormattedName(this.chat.firstName, this.chat.lastName, this.chat.whatsappUserNumber);\r\n await this.getMessagesForChatId();\r\n await this.getUsersGroups();\r\n this.dialogService.showSpinner = false;\r\n }\r\n\r\n private async getMessagesForChatId(): Promise {\r\n if (!this.chat) return;\r\n try {\r\n const resp = await this.chatApiService.getMessagesForChatId(this.chat.chatId);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get messages for chat.', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else this.messages = resp.result;\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to get messages for chat.', 'toast-message-error');\r\n this.error.handleError('Failed to get messages for chat.', err, 'messages-preview-claim-chat-dialog.getMessagesForChatId()');\r\n }\r\n }\r\n\r\n private async getUsersGroups(): Promise {\r\n try {\r\n const resp = await this.userApiService.getUsersGroups();\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to get groups.', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n resp.result.map((group: Groups) => {\r\n this.groupOptions.push({\r\n label: group.txt,\r\n value: group.id\r\n });\r\n });\r\n }\r\n } catch (err) {\r\n this.toastMessageService.showToastMessage('Failed to get groups.', 'toast-message-error');\r\n this.error.handleError('Failed to get groups.', err, 'messages-preview-claim-chat-dialog.getUsersGroups()');\r\n }\r\n }\r\n\r\n public onGroupSelect(groupId: number): void {\r\n this.selectedGroupOptionId = groupId;\r\n }\r\n\r\n public async claimChat(): Promise {\r\n if (!this.chat || !this.authService.userId || !this.selectedGroupOptionId) return;\r\n this.dialogService.showSpinner = true;\r\n try {\r\n const resp = await this.chatApiService.claimChat([this.chat.chatId], this.selectedGroupOptionId);\r\n if (!resp) this.toastMessageService.showToastMessage('Failed to claim chat.', 'toast-message-error');\r\n else if (resp.errorCode != 0) this.toastMessageService.showToastMessage(resp.errorMessage, 'toast-message-error');\r\n else {\r\n this.toastMessageService.showToastMessage('Chat claimed.', 'toast-message-success');\r\n this.claimedChatsService.claimedChatIdFromRoom = this.chat.chatId;\r\n const internalMessage: InternalMessage = {\r\n internalMessage: {\r\n chats: this.data.chats,\r\n serverUserId: this.authService.userId\r\n },\r\n internalMessageType: InternalMessageType.NOTIFY_USERS_CHAT_CLAIMED\r\n };\r\n this.socketService.sendInternalMessage(internalMessage);\r\n this.cancel();\r\n this.router.navigate(['/chats']);\r\n }\r\n } catch (err) {\r\n this.error.handleError('Failed to claim chat.', err, 'messages-preview-claim-chat-dialog.claimChat()');\r\n this.toastMessageService.showToastMessage('Failed to claim chat.', 'toast-message-error');\r\n }\r\n this.dialogService.showSpinner = false;\r\n }\r\n\r\n public cancel() {\r\n this.dialogRef.close();\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { MatSnackBar, MatSnackBarConfig, MatSnackBarHorizontalPosition, MatSnackBarVerticalPosition } from '@angular/material/snack-bar';\r\nimport { ToastMessageComponent } from './toast-message.component';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ToastMessageService {\r\n constructor(private snackBar: MatSnackBar) { }\r\n\r\n //available horizontal position = 'start' | 'center' | 'end' | 'left' | 'right'\r\n //available vertical position = 'top' | 'bottom'\r\n //panelClass is the css class for the toast message, e.g. toast-message-error\r\n public showToastMessage(message: string, panelClass: string = '', durationInMs: number = 3000, verticalPosition: string = 'top', horizontalPosition: string = 'right') {\r\n const config: MatSnackBarConfig = {\r\n data: { message },\r\n duration: durationInMs,\r\n horizontalPosition: horizontalPosition as MatSnackBarHorizontalPosition,\r\n verticalPosition: verticalPosition as MatSnackBarVerticalPosition,\r\n panelClass: panelClass\r\n };\r\n\r\n this.snackBar.openFromComponent(ToastMessageComponent, config);\r\n }\r\n}","import { enableProdMode } from '@angular/core';\r\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\r\n\r\nimport { AppModule } from './app/app.module';\r\nimport { environment } from './environments/environment';\r\n\r\nif (environment.production) {\r\n enableProdMode();\r\n}\r\n\r\nplatformBrowserDynamic().bootstrapModule(AppModule)\r\n .catch(err => console.error(err));\r\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"zn8P\";"]}