{"version":3,"sources":["Utilities/HttpRequest/Axios.js","Components/Layout/SideNav.js","Services/ChatService.js","Components/Drawers/SwitchRoleDrawer/SwitchRoleDrawer.jsx","Components/Layout/ProfileDropDown.js","Components/Drawers/ChatDrawer/ConversationList/Conversation/Conversation.js","Components/Drawers/ChatDrawer/ConversationList/ConversationList.js","Components/Drawers/ChatDrawer/ChatContacts/ChatUser/ChatUser.jsx","Components/Drawers/ChatDrawer/ChatContacts/ChatContacts.js","Services/NotificationService.js","Components/Drawers/ChatDrawer/Notifications/Notification/Notification.jsx","Components/Drawers/LockRequestsDrawer/LockRequestsDrawer.js","Components/Drawers/ChatDrawer/Notifications/NotificationList.jsx","Services/UtilityService.js","Components/Drawers/ChatDrawer/ChatDrawer.js","Components/Common/ChatBoxContainer/ChatBox/MessagePost/MessagePost.js","Components/Common/ChatBoxContainer/ChatBox/ChatBox.js","Components/Common/ChatBoxContainer/ChatBoxContainer.js","Components/Common/AutoComplete/AutoComplete.js","Components/Drawers/JobPostDrawer/ProviderProfileDrawer/ProviderProfileDrawer.jsx","Components/Drawers/JobPostDrawer/InviteTradee/InviteTradee.jsx","Components/Drawers/JobPostDrawer/JobPostDrawer.jsx","Components/Layout/TopNavigationBar/TopNavigationBar.jsx","Components/Layout/Layout.js","Components/Common/TextInput/TextInput.js","Components/Tenant/TenantProfile/UploadProfilePicture/UploadProfilePicture.js","Components/Drawers/ProfilePicUploadDrawer/ProfilePicUploadDrawer.js","Components/Tenant/TenantProfile/ProfileDetails/ProfileDetails.js","Components/Tenant/TenantProfile/TenantProfile.js","Services/PouchDbService.js","Components/Common/GoogleJobImage/GoogleJobImage.jsx","Components/Common/JobPostWizard/OwnerJobPost/OwnerJobPostWizard.jsx","Components/Common/JobPostWizard/TenantManage/TenantManageJobPostWizard.jsx","Components/Tenant/Home/Home.js","App.js","Components/Drawers/ExternalFeedbackDrawer/ExternalFeedbackDrawer.js","Components/Drawers/JobNotesDrawer/JobNotesDrawer.jsx","Components/External/JobDetails/ExternalJobDetails.jsx","Components/External/Timeline/ExternalTimeline.jsx","Components/External/MenuBar/MenuBar.jsx","Components/External/AddAttachments/ExternalAddAttachments.jsx","Components/External/EditJob/ExternalEditJob.jsx","Components/External/OwnerApproval/ExternalJobApprove.jsx","Components/External/OwnerReject/ExternalJobReject.jsx","Components/External/OwnerAttend/ExternalOwnerAttend.jsx","Components/Common/JobEditWizard/JobEditWizard.jsx","Components/External/OwnerApproveRejectDrawer/OwnerApproveRejectDrawer.jsx","Components/External/OwnerApproveRejectDrawer/OwnerApproveDrawer.jsx","Components/External/OwnerApproveRejectDrawer/OwnerRejectDrawer.jsx","Components/Layout/ExternalUserLayout.jsx","Components/Layout/ToolTipLayout.jsx","Components/External/DownloadPage/DownloadPage.jsx","ExternalUserApp.jsx","registerServiceWorker.js","ReduxStore/Reducers/TenantReducer.js","ReduxStore/Reducers/OwnerReducer.js","ReduxStore/Reducers/AppSettingsReducer.js","ReduxStore/Reducers/JobsReducer.js","ReduxStore/Reducers/ConversationReducer.js","ReduxStore/Reducers/UserReducer.js","ReduxStore/Reducers/RootReducer.js","Configuration/LoadFirebaseConfig.js","Components/External/LogMaintenanceBot/JobPost/BotJobPost_Wizard.jsx","Components/External/LogMaintenanceBot/QandA/QandA_Wizard.jsx","Components/External/LogMaintenanceBot/RentalDetails/RentalDetailsWizard.jsx","Components/External/LogMaintenanceBot/OwnerApprovals/OwnerApprovals_Wizard.jsx","Components/External/LogMaintenanceBot/LogMaintenanceBot.jsx","Components/Layout/LogMaintenanceBotLayout.jsx","LogMaintenanceBotApp.jsx","i18n.js","Services/ExternalService.js","Components/External/TroubleShootGuidePage/TroubleShootGuidePage.jsx","Components/External/InvoiceProcessor/ExternalInvoiceOwnerFeedBack.jsx","Components/External/CompletedJobAttachmentsPage/CompletedJobAttachmentsPage.jsx","Components/External/ViewJobAttachments/ViewJobAttachments.jsx","Components/External/Assets/AssetCommanView.jsx","Components/External/Assets/AssetForm.jsx","Components/External/Assets/PropertyAssets.jsx","Components/External/Assets/ExternalAssets.jsx","Components/External/AddJobAttachments/AddJobAttachments.jsx","index.js","Components/Common/GoogleMapLocationsAutoComplete/GoogleMapLocationsAutoComplete.jsx","Services/GoogleAnalyticsService.js","Components/Drawers/JobPostDrawer/FrequentlyUsedServices/FrequentlyUsedServices.jsx","Components/Drawers/JobLocksDrawer/JobLocksDrawer.js","Constants/Enums.js","Components/Common/JobPostWizard/JobPostWizard.jsx","Components/Drawers/JobDetailsDrawer/JobNotes/JobNotes.jsx","Services/ScheduleService.js","Components/Drawers/ScheduleJobDrawer/ScheduleJobDrawer.jsx","Services/JobService.js","Components/Drawers/JobPostDrawer/ProviderProfileDrawer/ProviderMiniProfileDrawer.jsx","Components/Drawers/TroubleshootGuidModal/TroubleshootGuidModal.jsx","Components/Common/Drawer/Drawer.js","Components/Common/Node/bootstrapTable.js","Components/Common/ImageViewer/FilesViewer.jsx","Components/Common/ImageViewer/ImageViewer.jsx","Components/Drawers/JobRejectDrawer/JobRejectDrawer.js","Components/Common/JobIssueTag/JobIssueTag.jsx","Components/Common/PropertyComponent/PropertyComponent.jsx","Components/Common/ImageViewer/SignatureViewer.jsx","Components/Drawers/JobDetailsDrawer/JobDetail/JobDetail.jsx","Components/Common/FeedbackViewer/FeedbackViewer.jsx","Components/Drawers/JobDetailsDrawer/Quotes/Quotes.jsx","Components/Drawers/JobDetailsDrawer/JobDetailsDrawer.jsx","Components/Drawers/FeedbackDrawer/FeedbackDrawer.js","Components/Drawers/JobApproveDrawer/JobApproveDrawer.js","Services/BotService.js","Services/settingsService.js","Components/Drawers/JobVariationDrawer/JobVariationDrawer.jsx","Services/UserService.js","Services/PropertyService.js","Components/External/JobNote/JobNotes.jsx","Components/Drawers/ConfirmationDrawer/ConfirmationDrawer.jsx","Components/External/QuotesDetail/QuoteAcceptRejectDrawer.jsx","Components/Drawers/DeclineAllQuotesDrawer/DeclineAllQuotesDrawer.js","Components/Drawers/QuoteAcceptDrawer/QuoteAcceptDrawer.js","Components/External/QuotesDetail/QuotesDetails.jsx","Components/Common/EventScheduler/Time.jsx","Components/Common/EventScheduler/EventScheduler.jsx","Components/Drawers/EventScheduleDrawer/EventScheduleDrawer.jsx","Components/Tenant/Settings/Payment/CardSection.js","Components/Tenant/Settings/Payment/Payment.jsx","Components/External/LogMaintenanceBot/TrackIssue/TrackIssueWizard.jsx","Components/Common/Paginator/Paginator.jsx","Components/Drawers/JobCancelDrawer/JobCancelDrawer.jsx","Services/TranslateService.js","Components/Drawers/AttachmentsDrawer/AttachmentsDrawer.js","Services/BidService.js","Components/Drawers/JobPostDrawer/Disclaimer/Disclaimer.jsx"],"names":["apiendpoint","AppConfiguration","Setting","axios","defaults","headers","post","ClientSecret","get","config","crossdomain","AXIOS","GET","url","then","res","data","POST","body","header","CROSS_ORIGIN","PUT","put","DELETE","delete","NavHeader","styled","div","props","expanded","NavImage","NavTitle","SideNave","state","getMenuForMyJobs","localStorage","getItem","UserType","Owner","className","eventKey","active","location","pathname","indexOf","title","getMenuForPropertyAccessControls","Tenant","getJobsForReviewMenu","subnavClassName","navitemClassName","jobsForReviewMenu","this","myJobMenu","propertyAccessControlsMenu","userType","Fragment","onSelect","selected","to","history","push","sideNavOnSelect","onToggle","setState","onSideNaveExpand","role","onClick","src","alt","style","fontSize","icon","faBars","Nav","properties","length","Component","connect","ownProps","tenantProperties","error","console","log","getConversationUsersByConversationId","conversationId","firebase","ref","getUnreadMessageCountChanges","userId","getUnreadCommonMessageCountChanges","chatService","updateUserActiveStatus","status","databseRef","update","getUpdatedChats","getConversationById","getConversationIdByUserWithOrderByIsRead","senderId","orderByChild","getConversationIdByUser","resetConversationData","off","getConversationByIdChunk","chunkSize","limitToLast","getConversationChanges","model","sender","resetConversationMessages","conversation","sendChatMessage","messageObj","conversationThread","message","prevMessage","on","snapshot","Updates","receiverList","conversationNotifications","type","dataList","forEach","element","childKey","key","childData","val","mobileChatUsersViewModel","unreadMessageCount","unreadMessageCountAll","msgCountChanges","UpdatesV2","commonChanges","UpdatesV3","sentDate","dateNow","Date","getTime","userList","newKey","senderUpdates","channelId","receiverId","resetConversationNotification","seenByuserList","once","Object","values","toJSON","_","_data","loggedInUserId","conversationMessages","seenbyUpdates","firstName","loggedUserFirstName","userImage","undefined","senderImageUrl","seenTime","moment","toUTCString","split","format","doNotShowSeenByForSP","seenByTimeAdded","seenByList","keys","map","value","j","createPrivateConversation","tread","updates","_obj","isRead","profileImageUrl","senderImage","senderFirstName","lastName","senderLastName","senderConversationObj","conversationName","receiverFirstName","receiverLastName","unReadMessageCount","receiver","receiverName","senderName","receiverImageUrl","receiverImage","isPrivate","_objReceiver","receiverConversationObj","geActivationStatus","getConversationReadStatus","getConversationSubTypeStatus","subtypeId","SwitchRoleDrawer","roles","organizations","selectedOrgniztion","createBody","a","name","id","organizationId","onChange","event","onChangeOrganization","htmlFor","organizationName","roleId","filter","roleName","document","querySelector","userRoles","createHeader","toggleSwitchRoleDrawer","createFooter","onSubmitSwitchedRole","getUserRoles","userService","response","providerRole","find","window","href","BAndAApiEndPoint","selectedRole","toast","position","POSITION","BOTTOM_RIGHT","footer","Drawer","size","open","showSwitchRoleDrawer","orgRoles","groupedRoles","setTimeout","getElementById","selectedUserRole","checked","React","ProfileDropDown","closeNav","isSelected","setItem","dispatchUserRoles","e","closeNavigation","preventDefault","target","onClickLogout","endPoint","returnUrl","toUpperCase","JllBaseUrl","charAt","redirectUrl","onClickSwitchBackToSuperAdmin","removeItem","adminId","SuperAdminEndpoint","item","onError","onerror","subsString","userDetails","search","trim","NavDropdown","Item","User","profileThumbnailsCdnEndpoint","AppSettings","imageCdnEndpoint","dispatch","Conversation","getUnReadMsgs","chatUser","userImg","getUserImg","unreadMsgCount","getUnreadMsgCount","openChatBox","lastMessage","msg","chatList","JSON","parse","addToChatBoxList","stringify","msges","conversationList","imageThumbnailsCdnEndpoint","ConversationList","chatRecived","getChatList","chatuser","index","placeholder","searchUserByUserName","$event","filterdList","Array","option","toLowerCase","includes","chatBoxes","updateUserDetails","details","updateChatboxes","ChatUser","userActiveStatus","user","activationStatus","openChatWindowFromContactList","displayName","ChatContacts","chatUsers","chatUserLists","getChatUsersList","Intercom","loggedUserId","loggedUserLastName","loggedUserProfileImage","notificationService","GetNotifications","isShowMore","orgId","GetUnreadNotifications","UpdateNotificationAsRead","notificationId","ClearUserUnreadNotifications","databaseRef","Notification","isTenantManage","result","replace","isActionClicked","openJobDetailsDrawer","strCreatedDate","isClickedOnNotification","updateNotificationAsRead","notificationCategory","Guid","EMPTY","openPendingPropertyLocksDrawer","lockCodeRequestId","primaryId","optionalValue","LockRequestsDrawer","approveOrReject","isApprove","row","selcted","propertyLock","jobId","lockId","propertyLockId","requestedByUserId","approvalDrawerShow","selectedProperyLock","isLoadingLockRequests","trackPromise","dataJson","success","getPropertyLockRequests","fromPagination","lockList","sizePerPage","total","table","createDocumentTable","createDrawer","drawerOpen","color","height","width","toggleDrawer","handleInit","handleTableChange","page","filters","sortField","sortOrder","cellEdit","loading","createApprovalDrawer","createApprovalHeader","createApprovalBody","createApprovalFooter","hideApprovalDrawer","Dropdown","selectOnNavigation","selection","options","accessibleHourOption","handleAccessibleHoursChange","showCustomAccessibleHour","customHour","min","step","onkeypress","customHourOnChange","permissionPeriod","approveLockRequest","jobLockViewModel","permissions","grantedToUserId","grantedByUserId","permissionPeriodForTrade","text","drawer","approveDrawer","columns","dataField","formatter","cell","rowIndex","keyField","rowEvents","totalSize","onTableChange","NotificationList","notificationCount","notifications","showJobDetails","selectedJobId","showMore","unreadCount","getAllNotifications","selectedLockCodeRequestId","showPendingLockRequests","slice","updateUnreadCount","JobDetailsDrawer","toggleLocksDrawer","userReadNotificationEvent","utilityService","getDescriptedUserId","saveAttachments","ChatDrawer","chatDrawerOpen","getUserConversations","childSnapshot","autoTriggerConversationWindow","conData","isStart","findIndex","createChatDrawer","headerButtons","createHeaderButtons","panelBody","createPanelBody","drawerIcons","getDrawerIcons","show","togglePanels","panelType","Tabs","defaultActiveKey","Tab","toggleNotificationDrawer","getNotificationCount","count","chatDrawer","useState","setMessage","onSendMessage","newMessage","loggedUserImg","startsWith","senderFirstNameCompany","timestamp","toLocaleString","seenBy","isEmoteText","subTypeId","conversationTread","subType","senderBusinessName","disabled","isJobSpecificChat","isJobCompleted","onKeyDown","aria-label","ChatBox","receiversId","chatMessageCount","isInitialChatChunk","unreadChat","isUnread","workflowStatus","isMinimized","conversationCommon","profileImageThumbnailCdn","userIdDecripted","getMesseges","senderMsg","getSenderMessageInfo","receivermsg","getReceiverMsgInfo","getSeenByList","conMessage","messageSeenByList","seenMsg","getConversation","conversationData","convType","getTitleByConversationType","data-toggle","data-placement","selectedChat","filteredChats","chat","chatsStr","isConversationIdNull","ConversationId","getConversationDetails","conList","unreadChats","getFirstUnreadChat","statusId","IsPrivate","items","allUnreadMsgs","chatBoxBody","createRef","chatHeading","messeges","jobChatCompletedMessage","getConversationInput","current","scrollTop","scrollHeight","globalText","seen","getConversationId","stateTread","findx","chatsObj","chatObjIndex","newConversationId","ChatBoxContainer","conversations","getConversationList","chats","it","Map","x","con","AutoComplete","suggestions","userInput","currentTarget","activeSuggestion","filteredSuggestions","showSuggestions","innerText","keyCode","suggest","label","suggestionsListComponent","suggestion","errorMsg","defaultProps","ProviderProfileDrawer","showProfileDrawer","profileDetails","isPmView","isSpView","isUserView","isDataLoaded","isSelectedTradee","feedbackList","filteredFeedback","filterUserType","isShowAreas","isLoadingFeedback","toggleProfileDrawer","isClose","onCloseProviderDrawer","filterByUserType","feedBackUserType","pageCount","createProfileHeader","createProfileBody","createProfileFooter","onSelectTradee","providerProfile","selectTradee","overallRating","isFromBot","class","isLoadingData","defaultChecked","visible","preferredStates","getLicensedTrades","getInsurance","getSPDetails","providerLicenses","mainJobTypeName","licenceNumber","publicLiabilityDisplay","professionalIndemnityDisplay","tradeeLeaveCalendars","service","startDateTime","toString","numberOfDays","abn","businessName","email","mobileNumber","officePhone","readyToWork","editing","starCount","workingCountry","primaryServices","hourlyRate","completedJobsCount","calloutFee","hasABNBadge","hasCm3CertifiedBadge","getFeedbackTable","getSPAllSkillsSummary","getProfile","includeAttachments","includeBidRatings","includeNearbySuburbs","includeTradeeAttachments","isDetailedView","includeBadges","isTimeline","inCludePrefferedJobTypes","numberOfSuburbsNeeded","ischat","getProviderProfile","btoa","propertyManagerProfile","userProfile","GetProviderBidFeedbacks","toLocaleDateString","dateFormatter","dateTime","userTypeFormatter","avarageRating","InviteTradee","showDrawer","isSelectedOnDemand","quoteLimit","selectedQuoteLimit","tradeeCount","nearBytradees","markers","selectedTradees","providerId","isShowProviderDrawer","isMarketPlaceLoading","notifyError","validateBeforeInviteTradee","jobService","GetJobTradeeCount","jobTypeId","suburbId","isNaN","Number","addJobLocation","latitude","longitude","address","loadNearByTrade","GetMarketplace","marketplace","markersList","tradie","random1","getRandomNumber","random2","tardieLat","tardieLng","lat","lng","toolTip","tradee","marker","addTradieLocations","tradieMarker","google","maps","Marker","_vm","infowindow","InfoWindow","content","set","addListener","close","onClickTradeeProfile","jobLat","jobLng","jobLocation","zoom","center","property","Circle","strokeColor","strokeOpacity","strokeWeight","fillColor","fillOpacity","radius","ratings","selectedTradee","filteredTradees","handleQuoteLimitChange","onAttachToPost","onAttachTradeesToTheJob","quoteLimitRef","inviteToProviders","ButtonToolbar","ToggleButtonGroup","defaultValue","ToggleButton","profileImg","phoneNumber","onBlur","OnChangeQouteLimit","onKeyUp","onKeyupQuoteLimit","settingsService","getUserSettings","quoteSettings","max","Math","random","registerPlugin","FilePondPluginImageExifOrientation","FilePondPluginImagePreview","corsProxy","JobPostDrawer","propertySearchData","formData","propertyId","propertyName","propertyType","jobBudget","availableServices","availableServicesDetails","selectedService","childJobTypes","selectedServiceType","parentJobType","selectedSubServiceType","jobDetails","attachments","dueDate","formattedDueDate","jobUrgency","propertyList","isLoading","filteredResults","isPropertiesLoading","parentJobTypes","primaryJobTypes","secondaryJobTypes","frequentlyUsedServices","isShowMoreServices","locationDetails","placeId","isMandatoryToUploadFiles","isJobForMe","jobForMe","isJobPosting","isRestrictKeyCollectionForResidentialProperties","showDisclaimerDrawer","jobPostWorkflowStatus","propertyLocks","isJobForMeText","isSubServiceTypeSelected","GetTenantPropertiesByUserId","none","getPropertyDetailsByPropertyId","closeJobPostDrawer","validateJob","workflow","v","budget","childJobType","description","budgetRef","refs","jobPropertyTypes","jobDescription","onSubmitJob","postJob","loadDisclaimer","propertyService","GetDisclaimerByPropertyId","disclamimerText","closeDisclaimer","workflowId","propertyTypeId","budgetId","parseInt","budgetAmount","targetedTradeeOption","sendInvitationtoAll","tradees","isAssigned","propertyKeyCollectType","secondaryJobType","secondaryJobTypeDisplay","primaryJobType","primaryJobTypeDisplay","jobPropertyLocks","jobLock","childJobTypeId","jobType","jobTypeDisplay","jobUrgencyId","jobValidityPeriod","serviceConsumerId","workflowStatusId","isActive","selectedProperty","getOrganizationSettings","orgnizationId","keyCollectType","handleResultSelect","getChildJobTypes","handleSearchChange","classList","remove","add","resultRenderer","Label","handlePropertyChange","setLocationDetails","onChangeJobType","onChangePropertyTypeForMe","jobforMe","formdata","onKeyCollectionChange","serviceTypes","createTypeOfServicesButtons","serviceTypeChild","createTypeOfServicesChildButtons","getDueDate","forMeText","Form","GoogleMapLocationsAutoComplete","readOnly","Search","onResultSelect","onSearchChange","leading","results","FrequentlyUsedServices","onSelectFrequentlyUsedJobTypes","services","onClickMore","showHideMoreService","handleJobUrgencyOnChange","onChangeJobBudget","onBlurBudgetAmount","JobLocksDrawer","isSelectable","onPropertyKeySelected","AttachmentsDrawer","onSubmitAttachments","isJobPost","Disclaimer","disclaimer","onAgreedForDisclaimer","onCloseDisclaimer","ImageViewer","dateFormat","minDate","handleDueDateChange","date","getUploadedAttachments","uploadedFiles","uploadedFile","fileUrl","fileName","onChangeChildTypeOfServices","jbType","input","isServiceTypeSelected","getSubChildJobTypes","onChangeTypeOfServices","GetFrequentlyUsedJobTypes","getAvailableServices","onChangeServiceAutoComplete","filteredJobTypes","onSelectServiceAutoComplete","onChangePropertyAutoCompelete","fetch","json","onSelectPropertyAutoComplete","create","getAllAvailableJobTypes","getOrganizationSettingsByOrgId","organizationSettingsModel","allowTenantsToImageAttachmentFeatureForTheJobposting","jobTypes","parents","m","f","parentRef","parentId","selectedNode","formData2","formData1","Jobs","updateProperties","withRouter","TopNavigationBar","bind","host","Layout","mainMarginLeft","showJobPostDrawer","showChatDrawer","showChatHelper","navExpanded","styleCode","trackGoogleAnalytics","googleAnalyticsService","sendPageStatsViaStringToGoogle","setNavExpanded","onClickSupport","openPostJobDrawer","sendEventStatsToGoogle","chatDrawerStatus","toggleChatDrawer","hideJobPost","logoUrl","Navbar","expand","Toggle","aria-controls","Collapse","origin","Button","usePromiseTracker","promiseInProgress","children","isCurrentTenant","TextInput","wrapperClass","ProfilePicUploadDrawer","showAttachmentsDrawer","toggleAttachmentsDrawer","labelfor","pond","file","allowMultiple","server","process","fieldName","metadata","load","progress","abort","transfer","FormData","append","request","XMLHttpRequest","attComponent","upload","onprogress","lengthComputable","loaded","onload","responseText","send","oninit","labelIdle","onCancel","onSubmitAttachment","profileImageId","ProfileDetails","homePhoneNumber","officePhoneNumber","errors","redirect","isEditing","createProfilePicUploader","handleSubmitAttachment","urlId","onClickSaveProfile","profileData","formIsValid","saveTenantProfile","userData","onInputChange","onRemoveProfilePicture","handleAddressKeyUp","nextProps","_errors","updateProfilePicBody","onSubmit","background","updateIsTenantField","addJobTypes","TenantProfile","createProfileInfoFields","profileImageUrlEndpoint","profileDataBody","PouchDbService","InsertDocumentList","tableName","documents","promise","Promise","resolve","addDoc","i","doc","_id","InsertDocument","PouchDB","catch","err","RemoveTable","destroy","GetAllDocument","allDocs","include_docs","GoogleJobImage","handleImageOnChange","selectedGoogleImage","uploadFile","that","resp","setAttachments","createFile","CorsAnywhereUrl","blob","File","files","uploadedSelectedFile","nextStep","t","isLoadingGoogleImage","googleImages","attachmentUrl","getGoogleImages","link","image","thumbnailLink","previousStep","secondaryButtonStyle","uploadToBlob","primaryButtonStyle","GetGoogleImages","isJobTypeTagsNotFound","ele","OwnerJobPostWizard","showChatbotError","stepFlow","isJobEdit","jobEditId","currentStep","isConsumerJobPost","jobDescriptionEng","issueAreaInProperty","issueAreaInPropertyEng","isShowAttchmentDrawer","subChildJobTypeId","jobNumber","isPropertyOwner","isShowInviteTradeDrawer","isPropertySelected","isLoadingTroubleshootingGuide","troubleShootingGuideDetails","troubleshootGuideId","troubleshootGuide","primaryJobTypeId","secondaryJobTypeId","customStyle","optionsStyle","isMaintatanceIssueProvided","isJobPostOrTroubleshootGuideSelected","isDraftJob","jobTypeTags","isLoadingJobTypeTags","jobAssignTags","selectedComponent","selectedFeatureComponent","chatbotSetting","hideQandABot","hideCheckRentalStatus","hideKeyCollectionOptions","hideTroubleshootGuide","enableDraftJobFeature","maintenanceTroubleshootGuideId","actionValue","getJobDetailsByJobId","isJobDetailsLoading","propertyNames","i18n","applyTranslation","language","trans","jobTypesLabels","handleOnChangeJobDescription","typedDescription","handleOnChangeJobIssueArea","typedArea","onChangeAmount","showCurrentStep","selectPropertyStep","getMaintenaceIssue","getMaintenaceTroubleShootGuide","selectServiceType","selectUgency","selectJobRelatedGoogleImage","getJobTypeTags","getPropertyComponent","selectKeyCollectionType","defaultKeyCollectionOption","selectBudget","getAttachments","getTrades","selectSubmitOption","setResponse","setTroubleShooteResponse","hidden","dangerouslySetInnerHTML","__html","continueJobPosting","saveTroubleShootResult","isEnableSuggestingImage","handleGoogleImageCallback","attch","handleJobTypeTagCallback","handlePropertyComponentCallback","isEnableIssueTag","previousIndex","JobIssueTag","PropertyComponent","addParentJobTypeToFrequentlyUsedServices","translationInstance","showAttachmentDrawer","checkIfFilesMandatory","brand","resetChat","validate","getTroubleShoutingGuide","allowTenantsToSeeMatchingTrades","handleChatbotScroll","permissionCheckNextStep","permissionCheckBackStep","nextIndex","errorMessage","parseFloat","JobPropertyComponentId","JobAssignTagIds","JobPropertyFeatureComponentIds","isResolved","troubleShootResult","saveTroubleShootingResult","setSecondaryJobType","scorolToTop","parentJob","parent","unshift","isCustomThemeEnable","createToggleBtnDynamicStyle","createOkBtnDynamicStyle","createActiveBtnDynamicStyle","attchmentBarStyle","texts","sourceLng","targetLng","requestModel","targetCode","sourceCode","translateService","translate","border","labelInsideToggleGroup","querySelectorAll","okIcons","activeBackground","boader","GetTroubleShootingGuide","responseCode","currentStepIndex","withTranslation","TenantManageJobPostWizard","jobTitle","placeToCome","contactPerson","contactNumber","phone","filteredTradeesResults","allTrades","valueOfTradeSearch","isTradeLoading","tradeSearchtext","selectedProviderId","providerViewId","displayTradesArray","recurringType","fromDate","toDate","isCardAvailable","isCardLoading","minBudgetAmount","maxBudgetAmount","recurringCustomType","tradeRequestType","quoteRequestLimit","isHoldAmountFromTenant","holdAmountFromTenantPerJob","selectedParent","checkCardDetailsAvailabilityStep","getContactDetails","selectRecurringType","getTradesList","checkTradeRequestType","handleOnChangeJobTitle","handleOnChangeContactNumber","number","handleOnChangeContactPerson","person","handleOnChangePlaceTocome","getRecurringDate","setDate","getDate","setMonth","getMonth","handleFromDateChange","handleCustomRecurring","getCustomRecurringDate","numberOfWeek","handleToDateChange","amount","toFixed","onChangeMinAmount","onChangeMaxAmount","handleJobRecurringTypeOnChange","getCardDetailsByUserId","checkCardAvailability","Payment","isFromTenantManageJob","marginRight","preventMinus","charCode","presicion","onKeyPress","isFromTenantManageJobPost","handleTradeRequestChange","handleTradeSearchChange","aria-hidden","selectTrade","providerProfileView","borderRadius","cursor","companyName","display","pageSize","pop","stopPropagation","pagenumber","updateJobList","jobCategoryDisplay","isTradePostedJob","isScheduled","isPropertyRelatedJob","awardedTradeeId","endTime","taskStatus","whereJobLocated","whereToCome","contactPersonName","contactPersonNumber","countryId","countryID","jobCategoryId","isHideTenantDetailsToOwner","isCloneFromJobPost","hasBidsForOwnerApproval","placeBidType","isDeclined","jobInformation","hasRecuringJobs","isOwnerAttending","consumerTypePropertyId","payerId","secondJobTypeLevel","isRecurred","postedUserId","jobCountryId","budgetMax","awardedAmount","isTenantPost","recurSettings","recurTypeIdString","recurCustomTypeId","recurTypeId","startDate","endDate","discardDetails","GetAllTrades","tradesList","pageTotal","createPreAuthorizedHeader","createPreAuthorizedBody","createPreAuthorizedFooter","showPreAuthorizedDrawer","toggleConfirmationeDrawer","confirmPreAuthorized","backtoList","num","fixed","re","RegExp","match","preAuthorizedAmount","GetPropertyDetailsWithHoldAmount","isEnableHoldAmountFromTenantJob","ProviderMiniProfileDrawer","Home","backToList","isTenant","jllPageReq","jobEditid","JobPostWizard","MyJobs","lazy","AllJobs","PropertyAccessControls","Settings","JobsForReview","DocumentList","PropertyInspection","createBrowserHistory","ReactGA","initialize","App","getActiveMasterDataFileVersion","GetActiveMasterDataFileVersion","MasterDataType","JobTypes","readJsonFile","minimizeJobDetailsDraw","minimizeDrawers","maximizeJobDetailsDraw","filteredArray","addJobTypesToTheState","jobTypesList","allJobTypes","CountryId","rows","subTypes","p","ParentJobTypeId","Id","Name","Description","tooltip","Tooltip","jobCategory","JobGroupId","hasChildRef","getJobTypesByCountryId","getUserDetails","userIdEncripted","dateTimeFormat","dateTimeFormatMin","countryCode","getPropertyByUserId","d","createdDateTime","intercomSettings","user_id","created_at","profileImage","usertype","userRole","alignment","horizontal_padding","vertical_padding","getCommonOrganizationSettings","isTenantManageJob","stripePublicKey","getOrgDetails","filePath","azureStorage","BlobStorageCdnEndPoint","JobTypesContainerName","JSZip","external","reject","JSZipUtils","getBinaryContent","loadAsync","zip","async","obj","atob","jsonObj","GetPropertyByUserId","intercomApiKey","appID","autoClose","hideProgressBar","onEnter","nextState","render","fallback","path","component","exact","ExternalFeedbackDrawer","showFeedbackDrawer","isFeedbackProvided","userFeedbackNote","createFeedbackHeader","createFeedbackBody","createFeedbackFooter","toggleFeedbackDrawer","jobData","bidFeedBackList","userFeedback","feedback","feedbackGivenByUser","bidRatings","rating","ratingsCriteriaId","acceptedBid","serviceProviderNote","onStarClick","onRatingStarClick","propertyManagerAgencyPlaceId","providerAgencyPlaceId","onClickAddReview","googleMapReviewUrl","onUpdateFeedback","showJobDetailsDrawer","bidFeedback","FeedBackUserType","FeedbackRatings","reload","nextValue","prevValue","isOpen","isShowDrawer","isRefresh","refreshMyJobs","JobNotesDrawer","toggleJobNotesDrawer","jobNotes","note","createdUserName","createdOn","createdUserType","isAfter","isExternal","showJobNotesDrawer","ExternalJobDetails","showAverageCostWhenOwnerApproval","isOrganizationSettingsLoaded","averageCostModel","jobAverageCost","jobCount","confidenceLevel","isAverageCostModelLoaded","selectedRoleForFeedBack","showJobNotes","getPredictiveAverageCost","GetPredictiveJobAverageCost","getOwnerApprovalStatus","isLoadingTimeline","GetOwnerApprovalStatus","ownerApprovalStatus","urlExpired","isExpired","keyCollectionType","customKeyCollectionValue","urgencyType","version","links","fileNames","zipFilename","filename","r","binary","generateAsync","FileSaver","saveAs","jobCompleteAttachments","hasOwnProperty","jobAttachments","textColor","isExternalConsumerJob","urgencyFormatter","jobUrgencyDisplay","statusDisplay","DateFormat","lastUpdatedDateTime","postedOn","isUserPorpertyOwner","budgetFormatter","scheduleEventId","scheduleFromDate","scheduleToDate","issueTags","getPropertyKeyMessage","downloadAllAttachments","isReadyForMonthlyPayment","marginTop","getConfidenceLevelClass","isEnableTenantJobPostDisclaimer","tenantJobPostDisclaimer","ExternalTimeline","_ngcontent-c0","MenuBar","bidCount","backgroundColor","brandBackground","ExternalAddAttachments","isUploading","showImageViewer","imageUrl","downloadImageUrl","getUploadedImages","Trans","i18nKey","setJobDetails","revert","uniqueFileId","fileObj","fileId","att","onFileSelected","defaultFileSrc","extension","downloadUrl","click","downloadable","changeable","downloadInNewWindow","onClose","images","setJobDetailsLoadingStatus","ExternalEditJob","isJobTypesLoaded","propertyAddress","isAttachmentsMandotary","loadJobTypes","selectedDate","GetSubJobTypes","validateExternalJobDetails","onSubmitJobDetails","isAttachmentMandatory","GetJobDetailsForExternalUsers","ExternalJobApprove","showJobApproveDrawer","jobApproveOption","showQuoteLimitSelection","showSuggestedTrade","selectedTrade","suggestedTradeList","disableApproveButton","createJobApproveBody","quoteLimitSelection","createQuoteLimitSelection","suggestedTradeSelection","createSuggestedTradeSelection","JobApprove","goBack","messageForEmptySuggestedTradeSelection","createMessageForEmptySuggestedTradeSelection","handleTradeChange","isEmptySuggestedTradeList","handleJobApproveOptionOnChange","onQuoteLimitSelection","validateApproval","jobApprovalRequest","tradeId","IsOwnerApproved","variationText","isOwnerApprovalPendingForVariation","currentVariation","onJobApproveOrReject","createJobApproveHeader","approvedAmount","ExternalJobReject","disableRejctButton","createJobRejectBody","JobReject","ExternalOwnerAttend","createJobAttendBody","JobAttend","callbackUrl","JobEditWizard","trgLng","selectedServiceTypeName","jobDetail","troubleshootingGuideText","troubleshootingGuideId","jobUrgencyList","primaryJobTypeName","secondaryJobTypeName","isShowTroubleshootGuid","initialJobDetails","channel","isOnMount","GetKeyCollectionTypeDescription","GetJobUrgency","closeTroubleshootGuid","jobPostSummary","GoToHomePage","GetResolvedResponseByTroubleshootGuide","isPostedViaOmniChannel","JobUrgencyDisplay","beckToOverview","reloadPage","SetSelectedServiceType","isUrgentIssue","setStateForEditJob","CheckJobsViaOmniChannel","jobAssignTagIds","jobPropertyComponentId","jobPropertyFeatureComponentIds","TroubleshootGuidModal","closeModal","OwnerApproveRejectDrawer","toggleOwnerApproveRejectDrawer","showOwnerApproveRejectDrawer","OwnerApproveDrawer","toggleOwnerApproveDrawer","showOwnerApproveDrawer","OwnerRejectDrawer","toggleOwnerRejectDrawer","showOwnerRejectDrawer","MILLISECONDS_PER_DAY","ExternalUserLayout","timelineData","inValidStatus","completedStatus","isJobEditing","isJobApprovedOrRejected","showScheduleJob","showApproveRejectDrawer","showApproveDrawer","showRejectDrawer","getJobTimelineByJobId","GetJobRelatedTimelineForExternalUsers","dayDifference","date1","date2","toDateString","timeDiff","abs","ceil","onAcceptSchedule","JobId","bidId","acceptedBidId","onRejectSchedule","toggleSheduleJobDrawer","onOwnerAttend","URLSearchParams","theme","brandColor","primaryButtonTextColor","primaryButtonBackground","isUserTenant","routerProps","QuotesDetails","isPercentageReached","toggleApproveRejectDrawer","toggleApproveDrawer","toggleRejectDrawer","scheduleEventStatus","ScheduleJobDrawer","showScheduleJobDrawer","getJobDetails","CloseJobDetailsDrawer","ExternalDownloadPage","AppStoreUrl","PlayStoreUrl","ExternalUserApp","join","getJobNotesByJobId","GetJobNotesByJobId","Error","getOrgOmniThemeSettings","getExternalUserDetails","encryptedUserId","getOmniOrgThemeSettings","organizationThemeSettingsModel","newTheme","userid","isSendEmail","isLocalhost","Boolean","hostname","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","initState","tenantCount","TenantReducer","action","ownerCount","OwnerReducer","ImageCdnEndpoint","ImageThumbnailsCdnEndpoint","clientSecret","apiEndPoint","ProfileThumbnailsCdnEndpoint","videoCdnEndpoint","VideoCdnEndpoint","generalFilesCdnEndpoint","GeneralFilesCdnEndpoint","BAndAEndPoint","ApiKey","appSettingsReducers","appSettings","isRefreshGrid","JobsReducer","ConversationReducer","UserReducer","RootReducer","combineReducers","AppSettingsReducer","appsettings","firebaseConfig","apiKey","PushSettings","RealtimeApiKey","authDomain","RealtimeAuthDomain","databaseURL","RealtimeDatabaseURL","projectId","RealtimeProjectId","storageBucket","RealtimeStorageBucket","messagingSenderId","RealtimeMessagingSenderId","BotJobPostWizard","jobUrgencyCheckbox","showBackToHomeConfirmation","jobOverViewUrl","aiPoweredTroubleshootGuide","isAIPoweredTroubleshootRequested","isAlternativeAITroubleshootGuideRequested","aiPoweredTroubleshootResultsEmpty","isSkipTroubleshootGuideLoading","urgencyLabelStyle","urgencyCheckboxStyle","isTrackIssue","enableAIPoweredTroubleshootGuide","isUrgent","directToAIPoweredTroubleShootGuide","showAlternativeTroubleshootResults","getAIPoweredTroubleShoutingGuide","getAIPoweredTroubleShootGuide","selectPrePostSummary","backToHomeConfirmationModal","str","showTroubleshootSuccessResult","backToMainMenu","includeJobOverViewUrl","skipAIPoweredTroubleshootGuide","setInterval","backToHomeModal","Modal","closeReturnHomeConfirmation","Content","Actions","primary","getDefaultTroubleShoutingGuide","GetAIPoweredTroubleShootingGuide","contents","QandA_Wizard","LoadQandAForTenant","botService","getQandAForTenant","qandAListModel","questionList","answerList","question","transAns","answer","qandaList","handleQandATypeOnChange","addBodyStyle","cssText","documentElement","setTheme","getQandAList","addProblemBoxtWizard","authenticate","addFinalSend","createQandAList","activeKey","selectedQandAType","k","overflowX","translationTag","selectedQandATypeNumber","selectedQandATypeDisplay","pageNumber","o","qandAType","list","pageWiseList","Accordion","Card","as","Header","Body","more","backToQandAList","isNotificationSended","assignedPM","contact","refProblem","problem","handleOnChangeProblem","sendToPropertyManager","sendingNotification","Loader","primaryColor","showQuestionView","rest","typedProblem","tenantId","problemEng","sendTenantPostNewQandANotification","postNewQandA","fromQandAMessege","RentalDetailsWizard","LoadRentalDetails","currentPropertyName","rentalDetails","getRentalDetails","tenancyRentalDetailList","leaseStartDate","leaseEndDate","leasePeriod","rentalAmount","rentalDueDate","isRentalDetailFound","LoadArrearsDetails","arrearsDetails","getArrearsDetails","tenancyArrearsDetailList","arrears","b","arrearsAmount","arrearsDays","paidToDate","isArreasDetailFound","currentPropertyId","OwnerApprovals_Wizard","LoadPendingOwnerApprovalJobList","jobListLoading","ownerId","getPendingOwnerApprovalList","jobsList","pendingApprovalJobList","totalJobCount","pendingApprovalListVisible","scrollToWizardHeight","isJobApproval","isActionResultView","jobList","createOwnerApprovalList","jobActionView","createPendingApprovalActionView","jobActionResultView","createActionResultView","minHeight","jobVariations","bids","bidsList","jobActionProcessing","clickJobQuoteAccept","selectedBidId","postedBy","createdDate","jobVariationAttachments","onJobApproveRejectClick","clickJobDeclineAllQuotes","isJobAcceptClick","selectedJobNumber","refActionReason","handleOnChangeActionReason","actionReason","clickJobApproveRejectAction","backToPendingApprovalList","isQuoteAcceptClick","isDeclineAllQuotesClick","isSuccessActionResult","selectedJobTitle","job","ownerApproveRejectJob","bid","quoteId","ownerAcceptJobQuote","ownerDeclineAllJobQuotes","LogMaintenanceBot","chatContainer","mainViewContainer","jobPostContainer","qAndAContainer","ownerLoginContainer","trackIssueContainer","mobileNumberField","otpDigit1Ref","otpDigit2Ref","otpDigit3Ref","otpDigit4Ref","scrollToMyRef","clientHeight","scroll","scrollTo","scrollToJobPost","jobPostHeight","viewHeight","scrollToQandA","qAndA","scrollToOwnerLogin","ownerLogin","scrollToTrackIssue","trackIssue","getMainMenu","getMobileAuthentication","getMobileOTPVerification","addJobPostWizard","addTrackIssueWizard","addCheckRentalWizard","addQandAWizard","addOwnerApprovalWizard","chatBody","onMenuOptionSelect","ChatbotOptionType","LogMaintenance","TrackIssue","CheckRental","QandA","OwnerLogin","isUserStep","isBotStep","isLogMaintenance","isMobileAuthentication","optionSelected","isCheckRental","isQandA","isOwnerLogin","startTimer","menuOptionSelected","country","callingCode","mobileNumberInput","evnt","updateMobileNumber","ev","validateMobileNumberAndOTP","showInvalidMobileError","showNoAssociatedPropertyError","showCannotProcessError","showSwitchAuthentication","enableEmailAuthentication","emailAddressInput","updateEmailAddress","showInvalidEmailError","enableMobileAuthentication","evt","enableResendOTP","remainingOTPAttempts","showInvalidOTPError","stopTimer","emailAddress","resendPinHeader","goBackStep","maxLength","otpDigit1","updateOTPCode","otpInputKeypress","otpDigit2","otpDigit3","otpDigit4","showTimer","time","s","resendOTP","resendOTPViaEmail","secondValue","thirdValue","forthValue","focus","verificationCode","test","SendMobileOTP","SendOTPViaEmail","inputCode","remainOTPAttempts","CheckOwnerExist","propertyOwners","orgwiseUser","applicationUserCountryId","applicationUserId","SendVerificationCodeForOwner","code","CheckUserExist","propertyTenants","SendVerificationCode","addBotMsg","CheckUserExistByEmail","SendVerificationCodeViaEmail","resetValidations","directToMainMenu","showError","botErrorMsg","createFotter","footerValue","updateUserInput","submitUserInput","xmlns","viewBox","points","cretateMsg","currentBotStep","botmsg","botSteps","data-name","transform","cx","cy","fill","stroke","stroke-width","opacity","headerBackground","addChatbotOptionButtons","addResendVerificationButton","addUserMsg","validateUserInput","currentUserStep","nextUserStep","nextBotStep","stepChange","SendMobileVerificationCode","addResendButtonForInvalidCode","resendBtn","resendPin","innerHTML","optionBtn","onOptionSelect","userSelect","chatoptions","rederectToAuthenticate","TrackIssueWizard","ValidateCurrentStep","hasMultipleProperty","userName","seconds","isUserExist","chatbotKey","tenantDetail","isBotTyping","getBotSteps","userSteps","getUserSteps","currentLang","linkedAgencies","timer","countDown","timeLeftVar","secondsToTime","secs","divisor_for_minutes","divisor_for_seconds","floor","clearInterval","timeLimitReachAction","LogMaintenanceBotLayout","getChatbotSettings","chatbotSettingsModel","chatbotHeader","chatbotPrimaryColor","setting","countrySetting","setLanguageSelection","isMenuOptionSelected","handleLanguageChange","i18next","changeLanguage","lang","passLanguageChange","languageList","isLanguageInitialized","LogMaintenanceBotApp","themeColor","isMultipleAgenciesExist","isPrefferedAgencySelected","prefferedAgencies","prefferedAgencySelect","marginLeft","agencyName","use","Backend","LanguageDetector","initReactI18next","init","fallbackLng","debug","interpolation","escapeValue","externalService","getTroubleShootGuideById","getAttachmentsByJobId","getAssetById","updateAssetDetails","submitInvitationAssetList","getPropertyAssetReviewInfo","assetId","invitationId","TroubleShootGuidePage","troubleShootGuideId","troubleShootGuide","getTroubleShootGuide","textArray","imageArray","sections","extentionIndex","lastIndexOf","nameIndex","extention","substr","fileType","lineHeight","ExternalInvoiceOwnerFeedBack","agencyLogoUrl","invoiceId","commentCode","createExternalInvoiceOwnerFeedBackBody","commentString","updateOwnerComment","getOrgnizationUrl","CompletedJobAttachmentsPage","ViewJobAttachments","AssetCommanView","assetDetails","asset","assetList","handleClick","sendDataToParent","updateAssetDetals","saveAssetList","updatedArray","isUpdated","assetsReviewInfo","recipientTeantName","requestedPropertyMangerName","requestedPropertyMangerEmail","recipientEmail","AssetForm","assetName","assets","barcode","dateOfPurchase","frontFacingAttachments","compliancePlateAttachments","assetIndex","assetUniqId","isValidationError","validationErrorMessage","handleChange","handleDateChange","handleFileChange","attachment","handleSubmit","goToLastStep","addToList","Container","overflow","padding","assetSubmittedUserId","encriptedUserId","assetAttachments","isFromAsset","RemoveFromList","fileid","removeFromList","el","ffAttachments","cpAttachments","PropertyAssets","assetCount","assetComponentCount","addComponentDisabled","uuidv4","openRemoveConfirmation","isNew","addAssetComponent","deleteAssetComponent","_state","updatedAssetList","editAsset","array","removeAssetConfirmation","removeAsset","splice","removeAssetRow","cancelAssetRemove","toggleAccordion","itemIsOpen","Col","md","aria-expanded","variant","isFromAsset_ff_cp","ExternalAssets","relatedOrganizationLogo","requestedPropertyMangerId","relatedOrganizationId","isLinkExpired","submittedUserId","getAssetsReviewInfo","IsLinkExpired","getAssets","goToNextStep","submitAssetList","AddJobAttachments","showSuccessMsg","jobState","enableJobPostDisclaimer","jobDisclaimer","encryptedServiceConsumerId","isEnableSave","checkSettings","isDrawerOpen","save","addEventListener","uplorder","timeAgo","now","round","minutes","hours","days","months","years","rootElement","Firebase","initializeApp","store","createStore","urlParams","getState","langCode","substring","ReactDOM","externalInvoiceId","pushState","onbeforeunload","URL","ready","unregister","checkValidServiceWorker","registerServiceWorker","createElement","resetComponent","Geocoder","geocode","place","geometry","place_id","suburbName","address_components","types","postalCode","GetSuburb","long_name","vm","countryArray","componentRestrictions","places","AutocompleteService","getPlacePredictions","PlacesServiceStatus","OK","geolocate","geolocation","getCurrentPosition","coords","circle","accuracy","LatLngBounds","getBounds","debounce","category","trackername","ga","showJobLocksDrawer","renderPropertyLocks","toggleJobLocksDrawer","lock","onKeySelectionChange","lockName","changedList","assignedLocks","JobsListTypes","WorkflowStates","PropertyInspectionStatus","ChatbotLanguageOptionType","JobNotes","createdUserProfileImageUrl","scheduleService","saveScheduleJob","scheduleData","saveExternalScheduleJob","events","fromTime","toTime","yesterday","Datetime","subtract","validDate","isValidDate","closeOnSelect","timeFormat","inputProps","validateUI","onScheduleAJob","refreshGrid","OwnerAttendingToTheJob","postCode","jobRef","GetAllJobTypes","CancelJob","troubleShootingResultData","GetJobTypeTags","GetPropertyComponent","CreatePropertyComponent","issue","GetAllChildJobTypes","parentJobTypeId","isIncludePendingInvitationTrades","isTenantManagedJob","removeSuburbFilter","pageIndex","GetVariationHistory","GetRecurringJobList","borderLeft","drawerClassName","headerIcons","SearchBar","BootstrapTable","pagination","CaptionElement","caption","textAlign","getOverlay","spinner","baseProps","remote","sort","filterFactory","defaultSorted","paginationFactory","getPagination","hover","overlay","overlayFactory","rowStyle","FilesViewer","isInspectionAttachmentWithComments","isCommentsAvailable","attachmentComment","aria-labelledby","centered","closeButton","httpHeaders","withCredentials","hideZoom","hideRotation","navigation","css","navbarWrapper","previousPageBtn","pageIndicator","nextPageBtn","downloadurl","setVisible","imgUrl","setImgUrl","downloadImgUrl","setDownloadImgUrl","setFileType","setFilePath","modalShow","setModalShow","setCommentsAvailable","setAttachmentComment","isEsignature","isInvoice","isVariation","isInspectionReport","attachmentComments","lastModified","onHide","RejectDrawer","showJobRejectDrawer","disableJobRejectButton","createJobRejectHeader","createJobRejectFooter","toggleJobRejectDrawer","onClickJobReject","toggleJobRejectButton","handleJobTypeTagOnChange","getJobTypeTagsData","issueTagId","issueTagName","tagList","handlePropertyComponentOnChange","propertyComponents","componentName","features","componentFeatures","featureList","selectedComponentName","isComponentSelected","handlePropertyFeatureComponentOnChange","generateComponent","isLoadingPropertyComponent","isPropertyComponentNotFound","next","getPropertyComponentData","updateSelected","SignatureViewer","JobDetail","getSignatureAttachments","signatureAttachments","jobCompleteSigneeName","getPMNotes","ownerComment","isMyJobs","propertyTypeName","suburbDisplay","ownerApprovalComment","serviceConsumer","mobile","FeedbackViewer","bidFeedbackList","bidFeedbackProviderViewModel","feedBackUser","showFeedbackOverView","bidRating","ratedUser","ratingsCriteria","Quotes","skillsLoad","isShowNearbySuburbs","showLicensesTradee","jobTypeArray","showInsurancesTradee","itemSelected","feedBackUserTypeCount","feedbackResult","ActivateIndex","ExpandedIndex","getSPNotes","notes","feedbacks","convertLicensedTrades","getFeedbackData","getFeedbackListByBidId","nearbySuburbs","showNearbySuburbs","showLicenses","selectedJobType","providerInsurances","showInsurances","insuranceExpiredStatus","isApplicableToAllTradeType","selectedMainJobTypes","onOptionsSelected","toogleItems","colspan","toogleExpandItems","increaseShow","getSPBusinessName","getSPSkillsSummary","completedJobCount","hasLicenseBadge","hasInsuranceBadge","hasJobFiftyPlusBadge","hasCompletedMoreThanFiftyJobs","prevState","resultArrey","preferredJobTypesGrouped","parentLabel","toogleItemsInSkills","getQuotesList","getQuoteAmount","availabilityStart","availabilityEnd","estimatedTimeDisplay","isApprovedOrDeclined","quoteApprovalStatusId","onClickApproveBid","bidService","approveBidByOwner","onApproveBid","getInvoiceAttachments","invoiceAttachments","quotesList","selectedJobTypeId","licenseNos","amountMax","callOutFee","quotes","jobVariation","isJobQuotesLoading","isJobNotesLoading","isPostingData","isJobQuotesOwnerApprovalPending","buttons","GetButtonsByUserType","feedbackButton","getFeedbackButton","wordId","workFlowId","isSharedSchedule","EventScheduleDrawer","serviceStatus","JobVariationDrawer","isTenantPendingReviewRejected","onDeclineAllQuotes","declineAllBidsByOwner","getQoutesByJobId","draftedJob","isUpdatingJobStaus","source","JobPendingReview","JobCompleted","thirdPartyTradeeEmail","FeedbackDrawer","JobAwaitingOwnerApproval","JobApproveDrawer","attendanceRating","communicationRating","cleanlinessRating","qualityRating","createJobApproveFooter","toggleJobApproveDrawer","onClickJobApprove","isEnableOwnerApprovalPercentage","PamApiEndPoint","orgid","getAssignedPm","getScheduleJobs","revokeDevice","channelType","activateDevice","updateTwoFactorAuthentication","updateCommunicationPreferences","updateQuoteSettings","generateMobileValidationToken","confirmMobileValidationToken","getGeneralSettings","addCardDetails","deleteCardDetails","setDefaultCardDetails","showJobVariationDrawer","variationAmout","createJobVariationHeader","createJobVariationBody","createJobVariationFooter","toggleJobVariationDrawer","onClickJobVariationApprove","onClickJobVariationReject","jobVariationApproveRequest","jobVariationRejectRequest","formValues","GetAssignedPropertyManagersForProperty","createJobNotesBody","SeparateLine","ConfirmationDrawer","approve","onAccept","onReject","onConfirm","approveButtonName","rejectButtonName","QuoteAcceptRejectDrawer","quoteNote","showConfirmationDrawer","onCloseDrawer","onConfirmation","onCloseConfirmationDrawer","handleOnChangeNote","isAcceptQuote","bidAcceptedOrRejectedUserId","acceptTenantMangeQuote","rejectTenantMangeQuote","DeclineQuotesDrawer","showDeclineAllQuotesDrawer","disableDeclineButton","createDeclineAllQuotesHeader","createDeclineAllQuotesBody","createDeclineAllQuotesFooter","toggleDeclineAllQuotesDrawer","alignItems","QuoteAcceptDrawer","showAcceptQuoteDrawer","disableAcceptButton","createAcceptQuoteHeader","createAcceptQuoteBody","createAcceptQuoteFooter","toggleAcceptQuoteDrawer","bidDetails","showAcceptRejectDrawer","selectedbidId","selectedbidAmount","ownerApprovalCount","createJobQuoteBody","getQuotesListForTenantManageJobs","float","bidDeclineButton","jobStatus","timeConvert","estimatedHours","approveQuote","rejectQuote","n","rhours","priceRevised","WEEKDAYS","fullName","shortName","initial","MONTHS","WORK_DAY","start","end","day","slot","flat","TIME_SLOTS","displayText","EventScheduler","workDays","suggestedTimeSlots","totalJobTimeHoursPortion","totalJobTimeMinutesPortion","estimatedJobTimeHoursPortion","estimatedJobTimeMinutesPortion","travelTimeHoursPortion","travelTimeMinutesPortion","fillTimeSlots","onPrepareGrid","fillAvailableTimeSlots","fillWorkingTimeSlots","fillSuggestedTimeSlots","fillNotAvailableTimeSlots","availableTimeSlots","daysCount","daysCountBetween","from","dateObj","localDateString","fromHoursCount","getHours","fromMinsCount","getMinutes","toHoursCount","toMinsCount","mins","availableSlots","concat","tomorrow","fromObj","updateAvailableTimeSlots","startTime","arrayIndex","hoursIndex","workingSlots","fromDateTime","updateWorkingTimeSlots","sugesstedSlots","updateSuggestedTimeSlots","isDeletedEvent","notAvailableTimeSlots","notAvilableSlots","updateNotAvailableTimeSlots","onCLickAddNewSuggestedTimeSlots","slots","isSingle","updateState","differenceMs","roundToThrityMins","quarterHours","setHours","rounded","setMinutes","onClickUpdateTimeSlot","isValid","minsBetween","getMinutesBetweenDates","scheduledDuration","timeSlotKey","minuteSlots","newDate","minutesToAdd","onClickDeleteTimeSlot","disableFromDates","currentDate","disableToDates","onClickAvailableSlot","workDay","minutesDiff","renderTimeSlots","time-slot","onChangeStartTime","onChangeStartDate","onChangeEndTime","onChangeEndDate","convertJobTimesToHoursAndMinutes","onRef","newToDate","getDay","totalJobTimeInMinutes","travelTimeDuration","shortcuts","showTimePicker","showSecond","inputReadOnly","use12Hours","popupClassName","scheduledByPm","getFullYear","index2","tempAvailableArray","tempblockedArray","tempsuggestArray","isDetailsLoading","isUpdating","tempWorkingSlots","onUpdateSchedule","schedules","suggestedTaskScheduleListViewModel","mobileTaskScheduleModel","convertToScheduleEvent","taskSchedules","toggleJobCancelDrawer","totalJobTime","availableStart","setTime","getTimezoneOffset","availableEnd","setSchedulerByDates","getJobSchedulerDetail","setAvailableTimeSlot","scheduler","eventId","toDateTime","jobScheduledPMId","lastUpdatedUserId","isJobScheduleFromPM","assigneeId","travelTime","startDates","availableEvents","availableScheduleArray","getConvertedDateTime","eventScheduleArray","suggestedEventsForDate","suggestScheduleArray","suggestedUserId","workingHours","allData","CardSection","card","elements","handleChangeFor","stripe","createToken","token","_element","clear","refresh","hidePostalCode","base","fontFamily","fontSmoothing","invalid","iconColor","onReady","c","injectStripe","cardDetails","loadCardDetails","defaultCard","isDefault","otherCards","cardMask","exp_month","exp_year","setDefault","Stripe","cardDetailsView","LoadScheduleJobs","PropertyId","UserId","PageSize","OnlyScheduledJobs","LangCode","isJobsLoading","base64param","Buffer","titleList","scheduleJobs","jobsNotFount","isDetailsView","currentJob","nextStepIndex","handleJobChange","validateCurrentStep","JobsNotFound","postedOnUTCDisplay","acceptedServiceProviderName","dueDateUTCDisplay","Paginator","getPageArray","pageNavigetor","updateList","itemCount","listSize","curenntPage","pageArray","JobCancelDrawer","showJobCancelDrawer","createJobCancelHeader","createJobCancelBody","createJobCancelFooter","onClickJobCancel","isAwarded","isDraftedJob","tradeOption","info","Translate_API","allowDynamicTranslate","AllowDynamicTranslate","isFromVariation","isJobPosted","oninitfile","setAsstJobAttachments","closeDrawer","onAgree"],"mappings":"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","file":"static/js/main.0719dbdb.chunk.js","sourcesContent":["import axios from 'axios';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nconst apiendpoint = AppConfiguration.Setting().apiendpoint;\r\naxios.defaults.headers.post['ClientSecret'] = AppConfiguration.Setting().ClientSecret;\r\naxios.defaults.headers.get['ClientSecret'] = AppConfiguration.Setting().ClientSecret;\r\n\r\nvar config = {\r\n crossdomain: true,\r\n headers: {\r\n ClientSecret: AppConfiguration.Setting().ClientSecret\r\n }\r\n};\r\nconst Get = (url) => {\r\n return axios.get(apiendpoint + url, config)\r\n .then(res => {\r\n return res.data;\r\n });\r\n} \r\n\r\nconst Post = (url, body, header) => {\r\n return axios.post(apiendpoint + url, body, header)\r\n .then(res => {\r\n return res.data;\r\n });\r\n }\r\n\r\n const PostOther = (url, body, header) => {\r\n return axios.post(url, body, header)\r\n .then(res => {\r\n return res.data;\r\n });\r\n }\r\n\r\n \r\n const GetOther = (url, body, header) => {\r\n return axios.get(url, body, header)\r\n .then(res => {\r\n return res.data;\r\n });\r\n }\r\n\r\n const Put = (url, body, header) => {\r\n return axios.put(apiendpoint + url, body, header)\r\n .then(res => {\r\n return res.data;\r\n });\r\n }\r\n\r\n const Delete = (url, body, header) => {\r\n return axios.delete(apiendpoint + url, { data: body }, header)\r\n .then(res => {\r\n return res.data;\r\n });\r\n }\r\n\r\n export const AXIOS = {\r\n GET: Get,\r\n POST: Post,\r\n CROSS_ORIGIN: {\r\n POST: PostOther,\r\n GET: GetOther\r\n },\r\n PUT: Put,\r\n DELETE:Delete\r\n };","//#region [IMPORT REACT COMPONENTS]\r\nimport React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\n//#endregion\r\n\r\n//#region [IMPORT FONT AWSOME COMPONENTS]\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\r\nimport { faBars, faTasks } from '@fortawesome/free-solid-svg-icons'\r\n//#endregion\r\n\r\n//#region [IMPORT NAV COMPONENTS]\r\nimport SideNav, { Toggle, Nav, NavItem, NavIcon, NavText } from '@trendmicro/react-sidenav';\r\nimport \"bootstrap/dist/css/bootstrap.min.css\";\r\n// Import the side navigation CSS\r\nimport '@trendmicro/react-sidenav/dist/react-sidenav.css';\r\nimport styled from 'styled-components';\r\n\r\nimport { UserType } from '../../Constants/Enums';\r\n\r\n//#endregion\r\n\r\nconst NavHeader = styled.div`\r\n display: ${props => (props.expanded ? 'block' : 'none')};\r\n white-space: nowrap;\r\n background-color: #db3d44;\r\n color: #fff;\r\n > * {\r\n color: inherit;\r\n background-color: #fff;\r\n }\r\n`;\r\n\r\nconst NavImage = styled.div`display: ${props => (props.expanded ? 'none' : 'block')};`;\r\n\r\n// height: 20px + 10px + 10px = 40px\r\nconst NavTitle = styled.div`\r\n font-size: 2em;\r\n line-height: 20px;\r\n padding: 10px 0;\r\n`;\r\n\r\nclass SideNave extends Component {\r\n state = {\r\n expanded: true\r\n }\r\n render() {\r\n\r\n const jobsForReviewMenu = this.getJobsForReviewMenu();\r\n const myJobMenu = this.getMenuForMyJobs();\r\n const propertyAccessControlsMenu = this.getMenuForPropertyAccessControls(); \r\n const userType = (localStorage.getItem('userType') == UserType.Owner) ? 'owner' : 'tenant';\r\n return (\r\n\r\n \r\n sideNavOnSelect(selected, this.props)}\r\n onToggle={(expanded) => {\r\n this.setState({ expanded });\r\n this.props.onSideNaveExpand(expanded);\r\n }}\r\n className=\"side-nav-tray\">\r\n {/* */}\r\n\r\n \r\n { this.setState({ expanded: true }); this.props.onSideNaveExpand(true); }}>\r\n \"Bricks\r\n \r\n \r\n \r\n \r\n { this.setState({ expanded: false }); this.props.onSideNaveExpand(false); }}>\r\n \r\n \r\n \"Bricks\r\n \r\n \r\n\r\n \r\n {jobsForReviewMenu}\r\n {myJobMenu}\r\n {propertyAccessControlsMenu}\r\n {(localStorage.getItem('userType') == UserType.Owner) ?\r\n -1}>\r\n \r\n \r\n \r\n \r\n All Jobs\r\n \r\n : ''\r\n }\r\n \r\n -1}>\r\n \r\n \r\n \r\n \r\n Document List\r\n \r\n \r\n {this.props.properties.length > 0 ?\r\n -1}>\r\n \r\n \r\n \r\n \r\n Property Inspection\r\n \r\n : ''\r\n }\r\n -1}>\r\n \r\n \r\n \r\n \r\n Settings\r\n \r\n \r\n \r\n \r\n \r\n\r\n );\r\n }\r\n\r\n getMenuForMyJobs = () => {\r\n if (localStorage.getItem('userType') == UserType.Owner) {\r\n return (\r\n -1}>\r\n \r\n \r\n \r\n \r\n My Jobs\r\n \r\n \r\n );\r\n } else {\r\n return (\r\n -1}>\r\n \r\n \r\n \r\n \r\n My Jobs\r\n \r\n \r\n );\r\n }\r\n }\r\n\r\n getMenuForPropertyAccessControls = () => {\r\n if (localStorage.getItem('userType') == UserType.Tenant) {\r\n return (\r\n -1}>\r\n \r\n \r\n \r\n \r\n Property Access Controls\r\n \r\n \r\n );\r\n }\r\n }\r\n\r\n getJobsForReviewMenu = () => {\r\n if (localStorage.getItem('userType') == UserType.Owner) {\r\n return (\r\n -1}>\r\n \r\n \r\n \r\n \r\n Jobs for review\r\n \r\n \r\n );\r\n } else {\r\n return (\r\n -1}>\r\n \r\n \r\n \r\n \r\n Jobs for review\r\n \r\n \r\n );\r\n }\r\n }\r\n}\r\n\r\nfunction sideNavOnSelect(selected, props) {\r\n const to = '/' + selected;\r\n if (props.location.pathname !== to) {\r\n props.history.push(to);\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n\r\n return {\r\n properties: state.Tenant.tenantProperties\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\nexport default connect(mapStateToProps)(SideNave);","import * as firebase from 'firebase';\r\nimport * as _ from 'lodash';\r\nimport moment from 'moment';\r\nimport { AXIOS } from '../Utilities/HttpRequest/Axios';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\n\r\nexport const getConversationIdByUserWithOrderByIsRead = (senderId) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref(`users/${senderId}/conversations`).orderByChild('isRead');\r\n}\r\n\r\nexport const getConversationIdByUser = (senderId) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref(`users/${senderId}/conversations`);\r\n}\r\n\r\nexport const getConversationById = (conversationId) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref(`conversations/${conversationId}/conversationMessages`);\r\n}\r\n\r\nexport const createPrivateConversation = (tread) => {\r\n const databseRef = firebase.database();\r\n const updates = {};\r\n const newKey = databseRef.ref().push().key;\r\n\r\n let _obj = {};\r\n _obj.userId = tread.sender;\r\n _obj.isRead = true;\r\n _obj.unreadMessageCount = 0;\r\n _obj.profileImageUrl = tread.senderImage;\r\n _obj.firstName = tread.senderFirstName;\r\n _obj.lastName = tread.senderLastName;\r\n\r\n updates[\"/conversations/\" + newKey + \"/conversationUsers/\" + tread.sender] = _obj;\r\n\r\n let senderConversationObj = {};\r\n senderConversationObj.conversationId = newKey;\r\n senderConversationObj.conversationName = tread.receiverFirstName + \" \" + tread.receiverLastName;\r\n senderConversationObj.isRead = true;\r\n senderConversationObj.unReadMessageCount = 0;\r\n senderConversationObj.receiver = tread.receiver;\r\n senderConversationObj.receiverName = tread.receiverFirstName + ' ' + tread.receiverLastName;\r\n senderConversationObj.senderName = tread.senderFirstName + ' ' + tread.senderLastName;\r\n senderConversationObj.sender = tread.sender;\r\n senderConversationObj.receiverImageUrl = tread.receiverImage || '';\r\n senderConversationObj.senderImageUrl = tread.senderImage || '';\r\n senderConversationObj.isPrivate = true;\r\n senderConversationObj.senderFirstName = tread.senderFirstName;\r\n senderConversationObj.senderLastName = tread.senderLastName;\r\n senderConversationObj.receiverFirstName = tread.receiverFirstName;\r\n senderConversationObj.receiverLastName = tread.receiverLastName;\r\n\r\n updates[\"/users/\" + tread.sender + \"/conversations/\" + newKey] = senderConversationObj;\r\n\r\n let _objReceiver = {};\r\n _objReceiver.userId = tread.receiver;\r\n _objReceiver.isRead = false;\r\n _objReceiver.unreadMessageCount = 0;\r\n _objReceiver.profileImageUrl = tread.receiverImage || '';\r\n _objReceiver.firstName = tread.receiverFirstName;\r\n _objReceiver.lastName = tread.receiverLastName;\r\n\r\n updates[\"/conversations/\" + newKey + \"/conversationUsers/\" + tread.receiver] = _objReceiver;\r\n\r\n let receiverConversationObj = {};\r\n receiverConversationObj.conversationId = newKey;\r\n receiverConversationObj.conversationName = tread.senderFirstName + \" \" + tread.senderLastName;\r\n receiverConversationObj.isRead = true;\r\n receiverConversationObj.unReadMessageCount = 0;\r\n receiverConversationObj.receiver = tread.sender;\r\n receiverConversationObj.receiverName = tread.senderFirstName + ' ' + tread.senderLastName;\r\n receiverConversationObj.senderName = tread.receiverFirstName + ' ' + tread.receiverLastName;\r\n receiverConversationObj.sender = tread.receiver;\r\n receiverConversationObj.receiverImageUrl = tread.senderImage || '';\r\n receiverConversationObj.senderImageUrl = tread.receiverImage || '';\r\n receiverConversationObj.isPrivate = true;\r\n receiverConversationObj.senderFirstName = tread.receiverFirstName;\r\n receiverConversationObj.senderLastName = tread.receiverLastName;\r\n receiverConversationObj.receiverFirstName = tread.senderFirstName;\r\n receiverConversationObj.receiverLastName = tread.senderLastName;\r\n\r\n updates[\"/users/\" + tread.receiver + \"/conversations/\" + newKey] = receiverConversationObj;\r\n\r\n updates[\"/conversations/\" + newKey + \"/createdBy\"] = tread.sender;\r\n\r\n databseRef.ref().update(updates);\r\n return newKey;\r\n\r\n}\r\n\r\nexport const resetConversationData = (conversationId) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref('/conversations/' + conversationId).off();\r\n}\r\n\r\nexport const resetConversationMessages = (conversation) => {\r\n const databseRef = firebase.database();\r\n databseRef.ref(`conversations/${conversation.conversationId}/conversationMessages`).off();\r\n databseRef.ref(`users/${conversation.sender}/conversations/${conversation.conversationId}`).off();\r\n}\r\n\r\nexport const getConversationByIdChunk = (conversationId, chunkSize) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref('conversations/' + conversationId + '/conversationMessages').limitToLast(chunkSize);\r\n}\r\n\r\nexport const getConversationUsersByConversationId = (conversationId) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref('conversations/' + conversationId + '/conversationUsers');\r\n}\r\n\r\nexport const getConversationChanges = (model) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref(\"users/\" + model.sender + \"/conversations/\" + model.conversationId)\r\n}\r\n\r\nexport const getUnreadMessageCountChanges = (userId, conversationId) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref(`users/${userId}/conversations/${conversationId}/unReadMessageCount`);\r\n}\r\n\r\nexport const getUnreadCommonMessageCountChanges = (userId) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref(`users/${userId}/unReadMessageCount`);\r\n}\r\n\r\nexport const updateUserActiveStatus = (userId, status) => {\r\n const databseRef = firebase.database();\r\n let update = {};\r\n update[`users/${userId}/isActive`] = status;\r\n return databseRef.ref().update(update);\r\n}\r\n\r\nexport const geActivationStatus = (userId) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref(`users/${userId}/isActive`);\r\n}\r\n\r\nexport const sendChatMessage = (senderId, messageObj, conversationThread, message) => {\r\n let prevMessage = -1;\r\n const databseRef = firebase.database();\r\n let convemessage = getConversationUsersByConversationId(conversationThread.conversationId)\r\n .on('value', snapshot => {\r\n if (prevMessage === -1) {\r\n prevMessage = 1;\r\n const Updates = {};\r\n let receiverList = [];\r\n let conversationNotifications = {};\r\n conversationNotifications.message = message;\r\n conversationNotifications.type = 1;\r\n conversationNotifications.conversationId = conversationThread.conversationId;\r\n conversationNotifications.senderId = senderId;\r\n let dataList = [];\r\n snapshot.forEach(element => {\r\n const childKey = element.key;\r\n let childData = element.val();\r\n childData.key = childKey;\r\n dataList.push(childData);\r\n\r\n let mobileChatUsersViewModel = {}\r\n mobileChatUsersViewModel.userId = childData['userId'];\r\n\r\n if (mobileChatUsersViewModel.userId !== senderId) {\r\n receiverList.push(mobileChatUsersViewModel.userId);\r\n let unreadMessageCount = -1;\r\n let onMsgCountChanges = getUnreadMessageCountChanges(mobileChatUsersViewModel.userId, conversationThread.conversationId)\r\n .on('value', msgCountChanges => {\r\n const UpdatesV2 = {};\r\n if (unreadMessageCount === -1) {\r\n unreadMessageCount = msgCountChanges.val() + 1;\r\n UpdatesV2['/users/' + mobileChatUsersViewModel.userId + '/conversations/' + conversationThread.conversationId + '/unReadMessageCount'] = msgCountChanges.val() + 1;\r\n databseRef.ref().update(UpdatesV2);\r\n }\r\n databseRef.ref('users/' + mobileChatUsersViewModel.userId + '/conversations/' + conversationThread.conversationId + '/unReadMessageCount').off();\r\n // databseRef.ref().off('value',onMsgCountChanges);\r\n // onMsgCountChanges = undefined;\r\n });\r\n let unreadMessageCountAll = -1;\r\n let onCommonChanges = getUnreadCommonMessageCountChanges(mobileChatUsersViewModel.userId)\r\n .on('value', (commonChanges) => {\r\n const UpdatesV3 = {};\r\n if (unreadMessageCountAll === -1) {\r\n unreadMessageCountAll = commonChanges.val() + 1;\r\n UpdatesV3['users/' + mobileChatUsersViewModel.userId + '/unReadMessageCount'] = commonChanges.val() + 1;\r\n databseRef.ref().update(UpdatesV3);\r\n }\r\n databseRef.ref('users/' + mobileChatUsersViewModel.userId + '/unReadMessageCount').off();\r\n // databseRef.ref().off('value',onCommonChanges);\r\n // onCommonChanges = undefined;\r\n });\r\n Updates[\"users/\" + mobileChatUsersViewModel.userId + \"/conversations/\" + conversationThread.conversationId + \"/isRead\"] = false;\r\n Updates[\"users/\" + mobileChatUsersViewModel.userId + \"/conversations/\" + conversationThread.conversationId + \"/lastMessage\"] = message;\r\n Updates[\"users/\" + mobileChatUsersViewModel.userId + \"/conversations/\" + conversationThread.conversationId + \"/lastMessageSentAt\"] = messageObj.sentDate;\r\n let dateNow = new Date();\r\n Updates[\"users/\" + mobileChatUsersViewModel.userId + \"/lastChatReceivedTime\"] = dateNow.getTime() * 1000;\r\n Updates[\"users/\" + mobileChatUsersViewModel.userId + \"/hasSentNotification\"] = false;\r\n }\r\n });\r\n\r\n conversationNotifications.userList = receiverList;\r\n\r\n databseRef.ref().update(Updates);\r\n const newKey = databseRef.ref().push().key;\r\n let senderUpdates = {};\r\n messageObj.channelId = 1;\r\n messageObj.receiverId = senderId;\r\n senderUpdates[\"conversations/\" + conversationThread.conversationId + \"/conversationMessages/\" + newKey] = messageObj;\r\n databseRef.ref().update(senderUpdates);\r\n databseRef.ref('/conversations/' + conversationThread.conversationId + '/conversationUsers').off();\r\n databseRef.ref('/notifications').push(conversationNotifications);\r\n }\r\n // convemessage.unsubscribe();\r\n // convemessage = undefined;\r\n })\r\n}\r\n\r\nexport const queueChatMessage = (senderId, receiverId, message, messageObj) => {\r\n if (!messageObj.isEmoteText) {\r\n let auditMessage = {};\r\n auditMessage.UserId = senderId;\r\n auditMessage.SecondaryUserId = receiverId;\r\n auditMessage.OptionalValue = message;\r\n if (messageObj.subType === 1) {\r\n auditMessage.MessageStatusType = 402;\r\n auditMessage.JobId = messageObj.subTypeId;\r\n }\r\n else {\r\n auditMessage.MessageStatusType = 401;\r\n }\r\n AXIOS.POST(`tenant-api/audit-chat`, auditMessage, {\r\n 'headers': { 'ClientSecret': AppConfiguration.Setting().ClientSecret }\r\n });\r\n \r\n }\r\n}\r\n\r\nexport const getConversationMessageList = (conversationId) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref('/conversations/' + conversationId + '/conversationMessages');\r\n}\r\n\r\nexport const getUpdatedChats = (userId) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref('/users/' + userId + '/conversations')\r\n}\r\n\r\nexport const getConversationReadStatus = (loggedInUserId, conversationId) => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref(`/users/${loggedInUserId}/conversations/${conversationId}/isRead`);\r\n}\r\n\r\nexport const getConversationSubTypeStatus = (subtypeId) => {\r\n return AXIOS.GET(`chat/sub-type-status?jobId=${subtypeId}`);\r\n}\r\n\r\nexport const resetConversationNotification = (model) => {\r\n const databseRef = firebase.database();\r\n let seenByuserList = {};\r\n databseRef.ref('conversations/' + model.conversationId + '/conversationUsers')\r\n .once('value', snapshot => {\r\n let data = Object.values(snapshot.toJSON());\r\n let findx = _.findIndex(data, _data => {\r\n return _data['userId'] == model.loggedInUserId\r\n });\r\n\r\n if (findx >= 0) {\r\n const Updates = {};\r\n //Updates[\"/users/\"+model.LoggedInUserId+\"/unreadChats\"] = false;\r\n Updates[\"/users/\" + model.loggedInUserId + \"/unReadMessageCount\"] = 0;\r\n Updates[\"/users/\" + model.loggedInUserId + \"/conversations/\" + model.conversationId + \"/unReadMessageCount\"] = 0;\r\n Updates[\"/users/\" + model.loggedInUserId + \"/conversations/\" + model.conversationId + \"/isRead\"] = true;\r\n\r\n databseRef.ref().update(Updates);\r\n\r\n getConversationMessageList(model.conversationId)\r\n .once('value', conversationMessages => {\r\n const seenbyUpdates = {};\r\n\r\n seenByuserList = {\r\n firstName: model.loggedUserFirstName,\r\n userImage: model.senderImageUrl === undefined?\"\":model.senderImageUrl,\r\n userId: model.loggedInUserId,\r\n seenTime: moment(new Date().toUTCString().split(' GMT')[0]).format('DD/MM/YYYY HH:mm:ss'),\r\n doNotShowSeenByForSP: false\r\n };\r\n\r\n //let conversationMessagesList = Object.values(conversationMessages.toJSON());\r\n\r\n conversationMessages.forEach(res => {\r\n let element = res.val();\r\n const childKey = res.key;\r\n\r\n if (element['senderId'] !== model.loggedInUserId) {\r\n\r\n let seenByTimeAdded = false;\r\n\r\n if (element['seenBy'] !== undefined) {\r\n let seenByList = Object.keys(element['seenBy']).map(key => ({ type: key, value: element['seenBy'][key] }));\r\n for (var j = 0; j < seenByList.length; j++) {\r\n if (seenByList[j].value.userId == model.loggedInUserId) {\r\n seenByTimeAdded = true;\r\n }\r\n }\r\n } else {\r\n element['seenBy'] = [];\r\n }\r\n\r\n if (!seenByTimeAdded && element['seenBy'] !== undefined) {\r\n const newKey = databseRef.ref().push().key;\r\n seenbyUpdates[\"/conversations/\" + model.conversationId + \"/conversationMessages/\" + childKey + \"/seenBy/\" + newKey] = seenByuserList;\r\n\r\n }\r\n\r\n }\r\n });\r\n\r\n let seenbyUpdatesList = Object.keys(seenbyUpdates).map(key => ({ type: key, value: seenbyUpdates[key] }));\r\n if (seenbyUpdatesList.length > 0) {\r\n databseRef.ref().update(seenbyUpdates);\r\n }\r\n });\r\n }\r\n })\r\n}\r\n\r\nconst chatService = {\r\n updateUserActiveStatus,\r\n getUpdatedChats,\r\n getConversationById,\r\n getConversationIdByUserWithOrderByIsRead,\r\n getConversationIdByUser,\r\n resetConversationData,\r\n getConversationByIdChunk,\r\n getConversationChanges,\r\n resetConversationMessages,\r\n getConversationUsersByConversationId,\r\n getUnreadMessageCountChanges,\r\n getUnreadCommonMessageCountChanges,\r\n sendChatMessage,\r\n resetConversationNotification,\r\n createPrivateConversation,\r\n geActivationStatus,\r\n getConversationReadStatus,\r\n getConversationSubTypeStatus\r\n}\r\n\r\nexport default chatService;\r\n\r\n","import React from 'react';\r\nimport { NavDropdown } from \"react-bootstrap\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport Drawer from '../../Common/Drawer/Drawer';\r\nimport { toast } from \"react-toastify\";\r\nimport userService from '../../../Services/UserService';\r\n\r\nclass SwitchRoleDrawer extends React.Component {\r\n\r\n state = {\r\n roles: [],\r\n organizations: [],\r\n selectedOrgniztion: ''\r\n }\r\n\r\n render() {\r\n const header = this.createHeader();\r\n const body = this.createBody();\r\n const footer = this.createFooter();\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n componentDidMount() {\r\n var orgRoles = [];\r\n Object.keys(this.props.groupedRoles).forEach(element => {\r\n var role = {}\r\n if(element == 'null') {\r\n role = this.props.roles.find(a => a.organizationId == null);\r\n role.organizationId = 0;\r\n role.organizationName = 'Providers';\r\n } else {\r\n role = this.props.roles.find(a => a.organizationId == element);\r\n }\r\n orgRoles.push(role);\r\n })\r\n\r\n this.setState({\r\n organizations: orgRoles\r\n });\r\n\r\n setTimeout(() => {\r\n if( document.getElementById(this.props.selectedUserRole.organizationId) != null) {\r\n document.getElementById(this.props.selectedUserRole.organizationId).checked = true;\r\n this.onChangeOrganization();\r\n //document.getElementById(this.props.selectedUserRole.roleId).checked = true;\r\n }\r\n }, 500);\r\n\r\n for (var j = 0; j < this.props.roles.length; j++) {\r\n if (this.props.roles[j].roleName == 'PropertyManagers') {\r\n this.props.roles[j].roleName = 'Property Manager';\r\n } else if(this.props.roles[j].roleName == 'PropertyTenant') {\r\n this.props.roles[j].roleName = 'Property Tenant';\r\n } else if(this.props.roles[j].roleName == 'OrganizationAdmins') {\r\n this.props.roles[j].roleName = 'Organisation Admin';\r\n }\r\n }\r\n }\r\n\r\n createBody = () => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

\r\n \r\n Select Organization\r\n

\r\n {(this.state.organizations.map(a => {\r\n return (\r\n
\r\n
\r\n this.onChangeOrganization()}/>\r\n \r\n
\r\n
\r\n \r\n )\r\n }))}\r\n
\r\n
\r\n
\r\n
0) ? 'col-sm-12' : 'col-sm-12 d-none' }>\r\n
\r\n

\r\n \r\n Select User Role\r\n

\r\n {(this.state.roles.map(a => {\r\n return (\r\n <>\r\n {(a.roleId == 4 && this.state.roles.filter(a => a.roleId == 2).length > 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 )\r\n }\r\n\r\n onChangeOrganization = () => {\r\n if((document.querySelector('input[name=organization]:checked')) != null) {\r\n if(document.querySelector('input[name=organization]:checked').value == 0) {\r\n this.setState({\r\n roles: []\r\n })\r\n } else {\r\n let userRoles = this.props.roles.filter(a => a.organizationId == document.querySelector('input[name=organization]:checked').value);\r\n this.setState({\r\n roles: userRoles\r\n })\r\n }\r\n \r\n } else {\r\n this.setState({\r\n roles: []\r\n })\r\n }\r\n }\r\n\r\n createHeader = () => {\r\n return (\r\n <>\r\n

\r\n Switch Role\r\n

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n createFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n {\" \"}\r\n Cancel{\" \"}\r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n getUserRoles = () => {\r\n userService.getUserRoles().then(response => {\r\n this.setState({\r\n roles: response\r\n });\r\n })\r\n }\r\n\r\n onSubmitSwitchedRole = () => {\r\n if(document.querySelector('input[name=organization]:checked') && document.querySelector('input[name=organization]:checked').value == 0) {\r\n var providerRole = this.props.roles.find(a => a.organizationId == 0);\r\n window.location.href = AppConfiguration.Setting().BAndAApiEndPoint + `Account/SwitchRoleSelectionWithRedirection?selectedOrgRoleId=${providerRole.id}&roleId=${providerRole.roleId}&userId=${localStorage.getItem('userIdDecripted')}`;\r\n }\r\n else if((document.querySelector('input[name=roles]:checked') != null)) {\r\n const selectedRole = this.props.roles.find(a => a.id == document.querySelector('input[name=roles]:checked').value);\r\n window.location.href = AppConfiguration.Setting().BAndAApiEndPoint + `Account/SwitchRoleSelectionWithRedirection?selectedOrgRoleId=${selectedRole.id}&roleId=${selectedRole.roleId}&userId=${localStorage.getItem('userIdDecripted')}`;\r\n } else {\r\n toast.error(\"Please select an user role.\",{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }\r\n\r\n\r\n\r\n}\r\n\r\nexport default SwitchRoleDrawer;","import React, { Component } from \"react\";\r\nimport { NavDropdown } from \"react-bootstrap\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport { connect } from 'react-redux';\r\nimport { UserType } from \"../../Constants/Enums\";\r\nimport chatService from \"../../Services/ChatService\";\r\nimport SwitchRoleDrawer from \"../Drawers/SwitchRoleDrawer/SwitchRoleDrawer\";\r\nimport userService from \"../../Services/UserService\";\r\nimport * as _ from 'lodash';\r\n\r\n \r\nclass ProfileDropDown extends Component {\r\n\r\n state = {\r\n showSwitchRoleDrawer: false,\r\n roles: [],\r\n selectedUserRole: {},\r\n groupedRoles: []\r\n }\r\n\r\n toggleSwitchRoleDrawer = () => {\r\n if(this.state.showSwitchRoleDrawer){\r\n this.props.closeNav();\r\n }\r\n\r\n this.setState(state => ({\r\n showSwitchRoleDrawer: !this.state.showSwitchRoleDrawer\r\n }));\r\n };\r\n\r\n componentDidMount() {\r\n this.getUserRoles();\r\n }\r\n\r\n getUserRoles = () => {\r\n userService.getUserRoles().then(response => {\r\n \r\n let selectedRole = (response.length == 1) ? response[0] : response.find(a => a.isSelected);\r\n if (selectedRole == undefined) {\r\n selectedRole = response[0]\r\n }\r\n localStorage.setItem('orgId', selectedRole.organizationId);\r\n this.props.dispatchUserRoles(response);\r\n localStorage.setItem('userRoles', response);\r\n let roles = _.groupBy(response, (e) => {\r\n return e.organizationId\r\n })\r\n console.log(roles);\r\n\r\n this.setState({\r\n selectedUserRole: selectedRole,\r\n roles: response,\r\n groupedRoles: roles,\r\n\r\n });\r\n })\r\n \r\n }\r\n\r\n closeNavigation = (e) => {\r\n e.preventDefault();\r\n this.props.closeNav();\r\n window.location.href = e.target.href;\r\n }\r\n\r\n render() {\r\n\r\n let item = { e.target.onerror = null; e.target.src = \"/Images/default-profile.png\" }}\r\n >\r\n let subsString = this.props.userDetails.profileImageUrl.search(\"/null\");\r\n\r\n if (this.props.userDetails.profileImageUrl != null && subsString == -1 && this.props.userDetails.profileImageUrl.trim() != \"\") {\r\n\r\n item = { e.target.onerror = null; e.target.src = \"/Images/default-profile.png\" }}\r\n >\r\n }\r\n\r\n return (\r\n \r\n \r\n {(this.props.userDetails.userType == UserType.Tenant) ?\r\n Profile\r\n : Profile\r\n }\r\n {(this.state.roles.length > 1) ? Switch Role : ''}\r\n {(localStorage.getItem('isSuperAdminAsOtherUser') === \"true\") ? Switch back User : ''}\r\n {(localStorage.getItem('isSuperAdminAsOtherUser') == null || localStorage.getItem('isSuperAdminAsOtherUser') === \"false\") ? Logout : ''}\r\n \r\n {(this.state.roles.length > 1) ?\r\n \r\n : ''\r\n }\r\n\r\n \r\n );\r\n }\r\n\r\n onClickLogout = () => {\r\n this.props.closeNav();\r\n chatService.updateUserActiveStatus(localStorage.getItem(\"userIdDecripted\"), false);\r\n let endPoint = AppConfiguration.Setting().BAndAApiEndPoint;\r\n var returnUrl = \"\";\r\n if(localStorage.getItem('styleCode').toUpperCase()===\"JLL\"){\r\n returnUrl = AppConfiguration.Setting().JllBaseUrl;\r\n endPoint = AppConfiguration.Setting().JllBaseUrl;\r\n }\r\n localStorage.setItem('userId', null);\r\n localStorage.setItem('styleCode',null);\r\n endPoint = endPoint.charAt(endPoint.length - 1) == '/' ? endPoint : `${endPoint}/`;\r\n let redirectUrl = (returnUrl!==null)?'?returnUrl='+returnUrl:\"\";\r\n window.location.href = endPoint+'tenant-api/log-out'+redirectUrl;\r\n }\r\n\r\n onClickSwitchBackToSuperAdmin = () => {\r\n this.props.closeNav();\r\n localStorage.removeItem(\"isSuperAdminAsOtherUser\");\r\n let adminId = localStorage.getItem(\"ImpersonatingUserId\");\r\n localStorage.removeItem(\"ImpersonatingUserId\");\r\n\r\n let endPoint = AppConfiguration.Setting().SuperAdminEndpoint;\r\n endPoint = endPoint.charAt(endPoint.length - 1) == '/' ? endPoint : `${endPoint}/`;\r\n\r\n window.location.href = endPoint + 'Admin/User/SwitchBackToSuperAdmin?id=' + adminId;\r\n }\r\n\r\n\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n try {\r\n let userDetails = state.User\r\n\r\n return {\r\n profileThumbnailsCdnEndpoint: state.AppSettings.imageCdnEndpoint,\r\n userDetails: userDetails\r\n };\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n}\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n dispatchUserRoles: userRoles => {\r\n dispatch({ type: \"SET_USER_ROLES\", roles: userRoles });\r\n }\r\n };\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ProfileDropDown);\r\n","import React from 'react';\r\nimport { connect } from 'react-redux';\r\n\r\nclass Conversation extends React.Component {\r\n state = {};\r\n constructor(props) {\r\n super(props)\r\n }\r\n\r\n render() {\r\n const msges = this.getUnReadMsgs();\r\n return (\r\n
\r\n {msges}\r\n
\r\n )\r\n }\r\n\r\n getUnReadMsgs = () => {\r\n const chatUser = this.props.conversation;\r\n const userImg = this.getUserImg();\r\n const unreadMsgCount = this.getUnreadMsgCount()\r\n if (chatUser.isRead) {\r\n return (\r\n
\r\n
\r\n {userImg}\r\n
\r\n
\r\n {chatUser.conversationName}\r\n {chatUser.lastMessage}\r\n
\r\n
\r\n )\r\n } else {\r\n return (\r\n
\r\n
\r\n {userImg}\r\n
\r\n
\r\n {chatUser.conversationName}\r\n {chatUser.lastMessage}\r\n
\r\n {unreadMsgCount}\r\n
\r\n );\r\n }\r\n }\r\n\r\n getUnreadMsgCount = () => {\r\n const msg = this.props.conversation;\r\n if (msg.unReadMessageCount !== 0 && msg.unReadMessageCount >= 100) {\r\n return
99+
\r\n } else {\r\n if (msg.unReadMessageCount !== 0) {\r\n return
{msg.unReadMessageCount}
\r\n }\r\n }\r\n\r\n }\r\n\r\n getUserImg = () => {\r\n if (this.props.conversation.isPrivate) {\r\n return {e.target.onerror = null; e.target.src=\"/Images/default-profile.png\"}}>\r\n } else {\r\n return \r\n }\r\n }\r\n\r\n openChatBox = () => {\r\n let chatList = (this.props.chatList == '') ? [] : JSON.parse(this.props.chatList);\r\n chatList.push(this.props.conversation)\r\n this.props.addToChatBoxList(JSON.stringify(chatList));\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n chatList : state.Conversation.conversationList,\r\n imageThumbnailsCdnEndpoint: state.AppSettings.imageThumbnailsCdnEndpoint,\r\n imageCdnEndpoint: state.AppSettings.imageCdnEndpoint,\r\n profileThumbnailsCdnEndpoint: state.AppSettings.profileThumbnailsCdnEndpoint,\r\n }\r\n }\r\n \r\n const mapDispatchToProps = (dispatch) => {\r\n\r\n return {\r\n addToChatBoxList: (chatList) => { dispatch({type:'SHOW_CONVERSATION', chatList: chatList})}\r\n }\r\n }\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Conversation);","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport Conversation from './Conversation/Conversation';\r\n\r\nclass ConversationList extends React.Component {\r\n\r\n state = {\r\n conversationList: [],\r\n chatRecived: false\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n componentDidMount() {\r\n }\r\n\r\n render() {\r\n const chatList = this.getChatList();\r\n return (\r\n <>\r\n
\r\n this.searchUserByUserName(event.target.value)} />\r\n
\r\n\r\n
\r\n {chatList}\r\n
\r\n \r\n );\r\n }\r\n\r\n getChatList = () => {\r\n var conversationList = this.state.conversationList.length === 0 ? this.props.conversationList : this.state.conversationList;\r\n const listItems = conversationList.map((chatuser, index) => {\r\n return \r\n })\r\n return listItems;\r\n }\r\n\r\n searchUserByUserName($event) {\r\n this.setState({\r\n conversationList: this.props.conversationList\r\n });\r\n if ($event.length > 2) {\r\n var filterdList = new Array();\r\n this.state.conversationList.forEach(option => {\r\n if (option.conversationName != null || option.conversationName != undefined) {\r\n if (option.conversationName.toLowerCase().includes($event.toLowerCase())) {\r\n filterdList.push(option);\r\n }\r\n }\r\n });\r\n this.setState({\r\n conversationList: filterdList\r\n });\r\n }\r\n return;\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n let userDetails = state.User\r\n return {\r\n userDetails: userDetails,\r\n chatBoxes: state.Conversation.conversationList,\r\n };\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n updateUserDetails: (details) => { dispatch({ type: 'SET_USER_DETAILS', userDetails: details }) },\r\n updateChatboxes: chatList => { dispatch({ type: \"SHOW_CONVERSATION\", chatList: chatList }) }\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ConversationList);","import React from 'react';\r\nimport chatService from '../../../../../Services/ChatService';\r\n\r\nclass ChatUser extends React.Component { \r\n state = {\r\n userActiveStatus: false\r\n }\r\n \r\n componentDidMount() {\r\n chatService.geActivationStatus(this.props.user.userId).on('value', activationStatus => {\r\n this.setState({ userActiveStatus: activationStatus.val()})\r\n })\r\n }\r\n\r\n render() {\r\n const { user } = this.props;\r\n const { userActiveStatus } = this.state;\r\n return <>\r\n this.props.openChatWindowFromContactList(user)}\r\n >\r\n
\r\n {e.target.onerror = null; e.target.src=\"/Images/default-profile.png\"}}\r\n alt={user.displayName}\r\n />\r\n
\r\n
\r\n {user.displayName}\r\n
\r\n {(userActiveStatus) ?
online
:
offline
}\r\n \r\n \r\n }\r\n}\r\n\r\nexport default ChatUser;","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport userService from \"../../../../Services/UserService\";\r\nimport chatService from \"../../../../Services/ChatService\";\r\nimport ChatUser from \"./ChatUser/ChatUser\";\r\nclass ChatContacts extends React.Component {\r\n state = {\r\n chatUsers: [],\r\n chatUserLists: []\r\n };\r\n\r\n componentDidMount() {\r\n this.getChatUsersList();\r\n }\r\n\r\n getChatUsersList = () => {\r\n userService.getChatUsersList().then(res => {\r\n this.setState({\r\n chatUsers: res.chatUsers,\r\n chatUserLists: res.chatUsers\r\n });\r\n });\r\n };\r\n\r\n \r\n\r\n render() {\r\n return (\r\n \r\n
\r\n this.searchUserByUserName(event.target.value)} />\r\n
\r\n
\r\n
{ window.Intercom('show'); }}>\r\n
\r\n \"\"\r\n
\r\n
\r\n \r\n Help\r\n \r\n
\r\n
\r\n\r\n {\r\n (this.state.chatUsers && this.state.chatUsers.length > 0) ?\r\n this.state.chatUsers.map((user, index) => {\r\n return this.openChatWindowFromContactList(user)}>\r\n \r\n }) : ''\r\n }\r\n\r\n
\r\n
\r\n );\r\n }\r\n\r\n searchUserByUserName($event) {\r\n this.setState({\r\n chatUsers: this.state.chatUserLists\r\n });\r\n if ($event.length > 2) {\r\n var filterdList = new Array();\r\n this.state.chatUsers.forEach(option => {\r\n if (option.displayName != null || option.displayName !== undefined) {\r\n if (option.displayName.toLowerCase().includes($event.toLowerCase())) {\r\n filterdList.push(option);\r\n }\r\n }\r\n });\r\n this.setState({\r\n chatUsers: filterdList\r\n });\r\n }\r\n return;\r\n }\r\n\r\n\r\n\r\n openChatWindowFromContactList(user) {\r\n let conversationThread = {}\r\n conversationThread.sender = this.props.loggedUserId;\r\n conversationThread.senderFirstName = this.props.loggedUserFirstName;\r\n conversationThread.senderLastName = this.props.loggedUserLastName;\r\n conversationThread.senderImage = this.props.loggedUserProfileImage;\r\n conversationThread.receiver = user.userId;\r\n conversationThread.receiverFirstName = user.firstName;\r\n conversationThread.receiverLastName = user.lastName;\r\n conversationThread.receiverImage = user.profileImageUrl;\r\n conversationThread.conversationName = user.firstName + ' ' + user.lastName;\r\n\r\n let chatList = (this.props.chatBoxes == '') ? [] : JSON.parse(this.props.chatBoxes);\r\n chatList.push(conversationThread)\r\n this.props.updateChatboxes(JSON.stringify(chatList));\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n let chats = state.Conversation.conversationList;\r\n\r\n return {\r\n chatBoxes: chats,\r\n imageThumbnailsCdnEndpoint: state.AppSettings.imageThumbnailsCdnEndpoint,\r\n imageCdnEndpoint: state.AppSettings.imageCdnEndpoint,\r\n profileThumbnailsCdnEndpoint:\r\n state.AppSettings.profileThumbnailsCdnEndpoint,\r\n loggedUserProfileImage: state.User.profileImageUrl,\r\n loggedUserFirstName: state.User.firstName,\r\n loggedUserLastName: state.User.lastName,\r\n loggedUserId: state.User.userId\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateChatboxes: chatList => {\r\n dispatch({ type: \"SHOW_CONVERSATION\", chatList: chatList });\r\n }\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(ChatContacts);\r\n","import { AXIOS } from '../Utilities/HttpRequest/Axios';\r\nimport * as firebase from 'firebase';\r\nimport * as _ from 'lodash';\r\n\r\nconst GetNotifications = (isShowMore) => {\r\n return AXIOS.POST(`tenant-api/notification/load-notification-min?chatNotifications=false&userId=${localStorage.getItem('userId')}&orgId=${localStorage.orgId}&isShowAll=${isShowMore}`);\r\n}\r\n\r\nconst GetUnreadNotifications = () => {\r\n const databseRef = firebase.database();\r\n return databseRef.ref(`users/${localStorage.getItem('userIdDecripted')}/unreadNotificationCount`);\r\n}\r\n\r\nconst UpdateNotificationAsRead = (notificationId) => {\r\n return AXIOS.PUT(`tenant-api/notification/updateNotificationAsRead?notificationId=${notificationId}`)\r\n}\r\n\r\nconst ClearUserUnreadNotifications = () => {\r\n const databaseRef = firebase.database();\r\n const Updates = { };\r\n Updates[`/users/${localStorage.getItem('userIdDecripted')}/unreadNotificationCount`] = 0;\r\n databaseRef.ref().update(Updates);\r\n }\r\n\r\nconst notificationService = {\r\n GetNotifications,\r\n GetUnreadNotifications,\r\n UpdateNotificationAsRead,\r\n ClearUserUnreadNotifications\r\n}\r\n\r\nexport default notificationService;","import React from 'react';\r\nimport { trackPromise } from 'react-promise-tracker';\r\nimport notificationService from '../../../../../Services/NotificationService';\r\nimport { Guid } from 'guid-typescript';\r\n\r\nclass Notification extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n state = {\r\n isRead: this.props.isRead\r\n }\r\n\r\n render() {\r\n const isTenantManage = localStorage.getItem('isTenantManageJob');\r\n let result = this.props.data.body.replace(/the B\\+A Team/ig,\"\").replace(/the B \\+ A Team/ig,\"\");\r\n return (\r\n
\r\n \r\n
\r\n
\r\n\r\n )\r\n }\r\n\r\n openJobDetailsDrawer(event) {\r\n event.preventDefault();\r\n this.setState({ isRead : true });\r\n this.props.isClickedOnNotification();\r\n this.updateNotificationAsRead();\r\n if (this.props.data.notificationCategory == 49\r\n || this.props.data.notificationCategory == 50\r\n || this.props.data.notificationCategory == 51\r\n || this.props.data.notificationCategory == 59\r\n || this.props.data.notificationCategory == 60\r\n || this.props.data.notificationCategory == 62\r\n || this.props.data.notificationCategory == 66\r\n || this.props.data.notificationCategory == 67\r\n || this.props.data.notificationCategory == 68\r\n || this.props.data.notificationCategory == 69\r\n || this.props.data.notificationCategory == 113\r\n || this.props.data.notificationCategory == 114\r\n || this.props.data.notificationCategory == 115\r\n || this.props.data.notificationCategory == 116\r\n || this.props.data.notificationCategory == 117) {\r\n this.props.openJobDetailsDrawer(Guid.EMPTY);\r\n } else if (this.props.data.notificationCategory == 127) {\r\n this.props.openPendingPropertyLocksDrawer(this.props.data.lockCodeRequestId);\r\n } \r\n else if(this.props.data.notificationCategory == 343 ){\r\n if (this.props.data.primaryId == this.props.data.optionalValue)\r\n {\r\n this.props.openJobDetailsDrawer(this.props.data.primaryId)\r\n }\r\n else{\r\n this.props.openJobDetailsDrawer(Guid.EMPTY);\r\n }\r\n }\r\n else { \r\n this.props.openJobDetailsDrawer(this.props.data.primaryId);\r\n } \r\n }\r\n\r\n updateNotificationAsRead() {\r\n try {\r\n notificationService.UpdateNotificationAsRead(this.props.data.id)\r\n .then(response => {\r\n console.log(response);\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n}\r\n\r\nexport default Notification;","import React, { useState } from \"react\";\r\nimport \"react-bootstrap-table/dist/react-bootstrap-table-all.min.css\";\r\nimport BootstrapTable from \"../../Common/Node/bootstrapTable\";\r\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport { Dropdown } from 'semantic-ui-react'\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\n// Plugins\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\n\r\nclass LockRequestsDrawer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n open: false,\r\n page: 1,\r\n sizePerPage: 10,\r\n loading: true,\r\n lockList: [],\r\n total: 10,\r\n isLoadingLockRequests: false,\r\n approvalDrawerShow: false,\r\n accessibleHourOption: [{ key: 1, text: \"1 hours\", value: 1 }, { key: 2, text: \"2 hours\", value: 2 }, { key: 3, text: \"3 hours\", value: 3 }, { key: 4, text: \"Custom\", value: 4 }],\r\n showCustomAccessibleHour: false,\r\n customHour: 0,\r\n selectedProperyLock: { id: '', jobId: '', lockId: '', requestedByUserId: '' }\r\n };\r\n }\r\n\r\n approveOrReject = (isApprove, row) => {\r\n\r\n if (!isApprove) {\r\n this.setState({ isLoadingLockRequests: true });\r\n try {\r\n trackPromise(\r\n AXIOS.GET(\r\n `tenant-api/access/property/tenant/reject-access-request?requestId=${row.id}&requestHandledBy=${localStorage.getItem('userId')}`\r\n ).then(dataJson => {\r\n this.setState({\r\n isLoadingLockRequests: false\r\n });\r\n toast.success('Request Rejected', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.getPropertyLockRequests(false);\r\n })\r\n );\r\n } catch (error) {\r\n console.log(error);\r\n this.setState({ isLoadingLockRequests: false });\r\n }\r\n } else {\r\n let selcted = {\r\n id: row.propertyLock.id,\r\n jobId: (row.jobId) ? row.jobId : '00000000-0000-0000-0000-000000000000',\r\n lockId: row.propertyLockId,\r\n requestedByUserId: row.requestedByUserId\r\n }\r\n this.setState({ approvalDrawerShow: true, selectedProperyLock: selcted });\r\n }\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n let approveDrawer = <>;\r\n if (this.state.approvalDrawerShow) {\r\n approveDrawer = this.createApprovalDrawer();\r\n }\r\n return
\r\n {drawer}\r\n {(this.state.approvalDrawerShow) ?\r\n approveDrawer\r\n : ''}\r\n
;\r\n }\r\n\r\n componentDidMount() {\r\n this.getPropertyLockRequests(false);\r\n }\r\n\r\n getPropertyLockRequests = fromPagination => {\r\n this.setState({ isLoadingLockRequests: true });\r\n try {\r\n trackPromise(\r\n AXIOS.GET(\r\n `tenant-api/access/property/tenant/lock-requests?userId=${localStorage.getItem(\"userId\")}`\r\n ).then(dataJson => {\r\n this.setState({\r\n lockList: dataJson.lockList,\r\n sizePerPage: 10,\r\n total: fromPagination ? this.state.total : dataJson.total,\r\n isLoadingLockRequests: false\r\n });\r\n })\r\n );\r\n } catch (error) {\r\n console.log(error);\r\n this.setState({ isLoadingLockRequests: false })\r\n }\r\n };\r\n\r\n createBody = () => {\r\n let table = this.createDocumentTable();\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {table}\r\n
\r\n
\r\n
\r\n
\r\n\r\n );\r\n };\r\n\r\n createDrawer = () => {\r\n if (this.props.drawerOpen) {\r\n let header = this.createHeader();\r\n let body = this.createBody();\r\n return (\r\n \r\n );\r\n }\r\n };\r\n\r\n createHeader = () => {\r\n const { isLoadingLockRequests } = this.state;\r\n return (\r\n <>\r\n

\r\n Smart lock requests\r\n {(isLoadingLockRequests) ? : ''}\r\n

\r\n
\r\n {/* */}\r\n {/* */}\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n handleInit = () => { };\r\n\r\n createDocumentTable() {\r\n\r\n const actionsFormatter = (cell, row, rowIndex) => {\r\n return (\r\n
\r\n \r\n {/* this.approveOrReject(row)}>Approve */}\r\n \r\n \r\n \r\n {/* this.approveOrReject(row)}>Approve */}\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n const columns = [\r\n { text: \"ID\", dataField: \"propertyLock.lockId\" },\r\n { text: \"Lock Name\", dataField: \"propertyLock.lockName\" },\r\n { text: \"Property\", dataField: \"propertyLock.propertyName\" },\r\n { text: \"Job Number\", dataField: \"jobNumber\" },\r\n { text: \"Requested By\", dataField: \"requestedByUser.name\" },\r\n {\r\n text: \"Action\",\r\n dataField: \"extention\",\r\n formatter: actionsFormatter\r\n }\r\n ];\r\n\r\n\r\n const rowEvents = {\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n handleTableChange = (\r\n type,\r\n { page, sizePerPage, filters, sortField, sortOrder, cellEdit }\r\n ) => {\r\n console.log(\"this.state.page: \", this.state.page);\r\n console.log(\"this.state.loading: \", this.state.loading);\r\n this.setState(\r\n {\r\n page,\r\n sizePerPage,\r\n loading: true\r\n },\r\n () => {\r\n console.log(\"this.state.page: \", this.state.page);\r\n console.log(\"this.state.loading: \", this.state.loading);\r\n this.getPropertyLockRequests();\r\n }\r\n );\r\n };\r\n\r\n createApprovalDrawer = () => {\r\n if (this.state.approvalDrawerShow) {\r\n let header = this.createApprovalHeader();\r\n let body = this.createApprovalBody();\r\n let footer = this.createApprovalFooter();\r\n return (\r\n \r\n );\r\n }\r\n\r\n }\r\n\r\n createApprovalHeader = () => {\r\n return (\r\n <>\r\n

\r\n Requests Approval\r\n

\r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n\r\n hideApprovalDrawer = () => {\r\n this.setState({ approvalDrawerShow: false });\r\n }\r\n createApprovalBody = () => {\r\n\r\n return <>\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n {(this.state.showCustomAccessibleHour) ?\r\n
\r\n \r\n
\r\n = 48 && event.charCode <= 57\"\r\n onChange={event => this.customHourOnChange(event.target.value)} />\r\n
\r\n
\r\n : ''}\r\n\r\n\r\n
\r\n
\r\n
\r\n \r\n }\r\n\r\n customHourOnChange = (val) => {\r\n this.setState({ customHour: val, permissionPeriod: val });\r\n }\r\n\r\n handleAccessibleHoursChange = (event, props) => {\r\n let option = props.value;\r\n if (option == 4) {\r\n this.setState({ showCustomAccessibleHour: true });\r\n } else {\r\n this.setState({ showCustomAccessibleHour: false, permissionPeriod: option });\r\n }\r\n }\r\n\r\n createApprovalFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n
\r\n \r\n )\r\n }\r\n\r\n approveLockRequest = () => {\r\n this.hideApprovalDrawer();\r\n let selectedProperyLock = this.state.selectedProperyLock;\r\n this.setState({ isLoadingLockRequests: true });\r\n const jobLockViewModel = {};\r\n jobLockViewModel.jobId = selectedProperyLock.jobId;\r\n jobLockViewModel.permissions = [1];\r\n jobLockViewModel.propertyLock = { id: selectedProperyLock.lockId }\r\n jobLockViewModel.grantedToUserId = selectedProperyLock.requestedByUserId;\r\n jobLockViewModel.grantedByUserId = localStorage.getItem('userId');\r\n jobLockViewModel.permissionPeriod = 3;\r\n jobLockViewModel.permissionPeriodForTrade = this.state.permissionPeriod;\r\n try {\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/access/job/grantpropertylock`, jobLockViewModel, {\r\n 'headers': { 'ClientSecret': AppConfiguration.Setting().ClientSecret }\r\n })\r\n .then(dataJson => {\r\n this.setState({\r\n isLoadingLockRequests: false\r\n });\r\n toast.success('Request Granted', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.getPropertyLockRequests(false);\r\n })\r\n )\r\n } catch (error) {\r\n console.log(error);\r\n this.setState({ isLoadingLockRequests: false });\r\n toast.success('Failed to Grant Access', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.getPropertyLockRequests(false);\r\n }\r\n }\r\n}\r\n\r\nexport default LockRequestsDrawer;","import React from 'react';\r\nimport notificationService from '../../../../Services/NotificationService';\r\nimport Notification from './Notification/Notification';\r\nimport JobDetailsDrawer from '../../JobDetailsDrawer/JobDetailsDrawer';\r\nimport { trackPromise } from 'react-promise-tracker';\r\nimport { Guid } from 'guid-typescript';\r\nimport LockRequestsDrawer from '../../LockRequestsDrawer/LockRequestsDrawer';\r\n\r\nclass NotificationList extends React.Component {\r\n\r\n state = {\r\n notificationCount: 0,\r\n notifications: [],\r\n showJobDetails: false,\r\n selectedJobId: '',\r\n showMore: true,\r\n unreadCount: this.props.unreadCount\r\n };\r\n\r\n componentDidMount() {\r\n this.GetNotifications();\r\n }\r\n\r\n componentWillUpdate(){\r\n if (this.state.unreadCount != this.props.unreadCount && this.props.unreadCount > 0 ) {\r\n this.setState({unreadCount: this.props.unreadCount});\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
You have ({this.state.unreadCount}) unread notifications
\r\n
\r\n
\r\n
    \r\n
  • \r\n {this.state.notifications.slice(0,this.state.unreadCount).map((data, index) => {\r\n return this.openJobDetailsDrawer(event)}\r\n openPendingPropertyLocksDrawer={(event) => this.openPendingPropertyLocksDrawer(event)}\r\n isClickedOnNotification = {() => this.updateUnreadCount()}\r\n isRead={false}>\r\n \r\n })}\r\n {this.state.notifications.slice(this.state.unreadCount, this.state.notifications.length).map((data, index) => {\r\n return this.openJobDetailsDrawer(event)}\r\n openPendingPropertyLocksDrawer={(event) => this.openPendingPropertyLocksDrawer(event)}\r\n isClickedOnNotification = {() => this.updateUnreadCount()}\r\n isRead={true}>\r\n \r\n })}\r\n
  • \r\n
  • \r\n \r\n
  • \r\n
\r\n
\r\n {(this.state.showJobDetails) ?\r\n this.toggleDrawer()}>\r\n : ''\r\n }\r\n\r\n {(this.state.showPendingLockRequests) ?\r\n this.toggleLocksDrawer()}>\r\n : ''\r\n }\r\n
\r\n )\r\n }\r\n\r\n toggleDrawer() {\r\n this.setState({\r\n showJobDetails: !this.state.showJobDetails,\r\n })\r\n }\r\n toggleLocksDrawer() {\r\n this.setState({\r\n showPendingLockRequests: !this.state.showPendingLockRequests,\r\n });\r\n }\r\n\r\n openJobDetailsDrawer(jobId) {\r\n if (jobId != Guid.EMPTY) {\r\n this.setState({\r\n selectedJobId: jobId,\r\n showJobDetails: true,\r\n })}\r\n \r\n }\r\n\r\n updateUnreadCount() {\r\n if(this.state.unreadCount != 0){\r\n this.setState({unreadCount: this.state.unreadCount-1});\r\n }\r\n this.props.userReadNotificationEvent();\r\n }\r\n\r\n getAllNotifications = (event) => {\r\n event.preventDefault();\r\n trackPromise(\r\n notificationService.GetNotifications(true)\r\n .then(response => {\r\n this.setState({ notifications: response, showMore: false });\r\n })\r\n )\r\n \r\n }\r\n\r\n GetNotifications = () => {\r\n trackPromise(\r\n notificationService.GetNotifications(false)\r\n .then(response => {\r\n this.setState({ notifications: response });\r\n })\r\n )\r\n \r\n }\r\n\r\n openPendingPropertyLocksDrawer = (lockCodeRequestId) => {\r\n this.setState({\r\n selectedLockCodeRequestId: lockCodeRequestId,\r\n showPendingLockRequests: !this.state.showPendingLockRequests,\r\n })\r\n }\r\n\r\n}\r\n\r\nexport default NotificationList;","import { AXIOS } from '../Utilities/HttpRequest/Axios';\r\n\r\nexport const getDescriptedUserId = () => {\r\n return AXIOS.GET(`tenant-api/decrypt?text=${localStorage.getItem('userId')}`);\r\n}\r\n\r\nexport const saveAttachments = (model) => {\r\n return AXIOS.POST(`tenant-api/file-save`,model);\r\n}\r\n\r\nconst utilityService = {\r\n getDescriptedUserId,\r\n saveAttachments\r\n}\r\n\r\nexport default utilityService;","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport Drawer from '../../Common/Drawer/Drawer';\r\nimport { Tabs, Tab} from 'react-bootstrap'\r\nimport ConversationList from './ConversationList/ConversationList';\r\n\r\nimport './ChatDrawer.scss';\r\nimport ChatContacts from './ChatContacts/ChatContacts';\r\nimport NotificationList from './Notifications/NotificationList';\r\nimport notificationService from '../../../Services/NotificationService';\r\nimport utilityService from \"../../../Services/UtilityService\";\r\nimport chatService from \"../../../Services/ChatService\";\r\n\r\nclass ChatDrawer extends React.Component {\r\n\r\n state = {\r\n chatDrawerOpen: false,\r\n title: '',\r\n notificationCount: 0,\r\n conversationList: []\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n componentDidMount(){\r\n utilityService.getDescriptedUserId().then(res => {\r\n localStorage.setItem(\"userIdDecripted\", res);\r\n this.getNotificationCount();\r\n this.getUserConversations();\r\n this.autoTriggerConversationWindow();\r\n });\r\n \r\n }\r\n\r\n getUserConversations = () => {\r\n chatService.getConversationIdByUserWithOrderByIsRead(localStorage.getItem('userIdDecripted'))\r\n .on('value', (snapshot) => {\r\n let dataList = [];\r\n snapshot.forEach(function (childSnapshot) {\r\n var childKey = childSnapshot.key;\r\n var childData = childSnapshot.val();\r\n dataList.push(childData);\r\n });\r\n this.setState({\r\n conversationList: dataList\r\n });\r\n });\r\n }\r\n\r\n autoTriggerConversationWindow = () => {\r\n chatService.getUpdatedChats(localStorage.getItem('userIdDecripted'))\r\n .on('child_changed', (snapshot) => {\r\n var conData = snapshot.toJSON();\r\n let conversationThread = {}\r\n conversationThread.sender = conData.sender;\r\n conversationThread.conversationId = conData.conversationId;\r\n conversationThread.senderFirstName =conData.senderFirstName;\r\n conversationThread.senderLastName = conData.senderLastName;\r\n conversationThread.senderImage = conData.senderImageUrl;\r\n conversationThread.senderImageUrl = conData.senderImageUrl;\r\n conversationThread.receiver = conData.receiver;\r\n conversationThread.receiverFirstName = conData.receiverFirstName;\r\n conversationThread.receiverLastName = conData.receiverLastName;\r\n conversationThread.receiverImage = conData.profileImageUrl;\r\n conversationThread.receiverImageUrl = conData.profileImageUrl;\r\n conversationThread.isPrivate = conData.profileImageUrl;\r\n conversationThread.isRead = conData.profileImageUrl;\r\n conversationThread.lastMessage = conData.profileImageUrl;\r\n conversationThread.conversationName = conData.conversationName;\r\n conversationThread.unReadMessageCount = conData.unReadMessageCount;\r\n conversationThread.isStart = conData.isStart;\r\n if(!conversationThread.isStart) {\r\n let chatList = (this.props.chatBoxes == '') ? [] : JSON.parse(this.props.chatBoxes);\r\n const index = chatList.findIndex(a => a.conversationId == conversationThread.conversationId);\r\n if(index == -1) {\r\n chatList.push(conversationThread)\r\n this.props.updateChatboxes(JSON.stringify(chatList));\r\n }\r\n }\r\n \r\n })\r\n }\r\n\r\n getNotificationCount() {\r\n notificationService.GetUnreadNotifications()\r\n .on('value', (snapshot) => {\r\n let count = snapshot.val();\r\n count = count > 0 ? count : 0;\r\n this.setState({ notificationCount: count});\r\n });\r\n }\r\n\r\n createChatDrawer = () => {\r\n // let title ='Job Details'\r\n let headerButtons = this.createHeaderButtons();\r\n let panelBody = this.createPanelBody();\r\n let drawerIcons = this.getDrawerIcons();\r\n return (\r\n \r\n \r\n )\r\n }\r\n\r\n getDrawerIcons = () => {\r\n return (\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 togglePanels = (panelType) => {\r\n (!this.props.show) && this.props.toggleDrawer();\r\n switch(panelType) {\r\n case 1:\r\n this.setState({ title: 'Notifications'});\r\n break;\r\n case 2:\r\n this.setState({ title: 'Chats'});\r\n break;\r\n case 3:\r\n this.setState({ title: 'Timeline'});\r\n break;\r\n default:\r\n this.setState({ title: 'Notifications'});\r\n break;\r\n }\r\n }\r\n\r\n createPanelBody = () => {\r\n\r\n return (\r\n <>\r\n {(this.state.title === 'Notifications') ? \r\n
\r\n this.updateUnreadCount()}>\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 createHeaderButtons = () => {\r\n return (\r\n <>\r\n

\r\n {this.state.title}\r\n

\r\n {(this.state.title == 'Notifications') ? \r\n
\r\n \r\n
:\r\n
\r\n \r\n
\r\n }\r\n \r\n )\r\n }\r\n\r\n render() {\r\n let chatDrawer = this.createChatDrawer();\r\n\r\n return (\r\n <>\r\n {chatDrawer}\r\n \r\n );\r\n }\r\n\r\n updateUnreadCount() {\r\n this.setState({notificationCount: this.state.notificationCount-1});\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n let userDetails = state.User\r\n return {\r\n userDetails: userDetails,\r\n chatBoxes: state.Conversation.conversationList,\r\n };\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n }\r\n \r\n const mapDispatchToProps = (dispatch) => {\r\n return {\r\n updateUserDetails: (details) => { dispatch({ type: 'SET_USER_DETAILS', userDetails: details }) },\r\n updateChatboxes: chatList => { dispatch({ type: \"SHOW_CONVERSATION\", chatList: chatList }) }\r\n }\r\n }\r\n \r\n export default connect(mapStateToProps, mapDispatchToProps)(ChatDrawer);","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport chatService from '../../../../../Services/ChatService';\r\nimport moment from 'moment';\r\n\r\nconst MessagePost = (props) => {\r\n const [message, setMessage] = useState('');\r\n\r\n const onSendMessage = () => {\r\n console.log(message);\r\n if (message === null || message.trim() === \"\") return\r\n let chatAllowed = true;\r\n let newMessage = {}\r\n\r\n if (chatAllowed) {\r\n let loggedUserImg = props.loggedUserProfileImage;\r\n if (loggedUserImg === undefined || loggedUserImg === \"\" ||\r\n loggedUserImg === \"null\" || loggedUserImg === null ||\r\n loggedUserImg.startsWith(\"/images/default-profile.png\")) {\r\n loggedUserImg = \"/images/default-profile.png\";\r\n } else {\r\n loggedUserImg = props.imageThumbnailsCdnEndpoint + loggedUserImg;\r\n }\r\n let senderFirstNameCompany = props.loggedUserFirstName;\r\n //if (false) {//this.userRole.indexOf('Providers') > -1\r\n // // if (this.baseService.companyName) {\r\n // // senderFirstNameCompany = `${this.baseService.loggedUserFirstName}(${this.baseService.companyName})`;\r\n // // }\r\n\r\n // senderFirstNameCompany = `${props.senderFirstNameCompany}(company name)`;\r\n // newMessage = {\r\n // message: message,\r\n // senderId: props.loggedUserId,\r\n // senderImage: loggedUserImg,\r\n // senderName: props.loggedUserFirstName,\r\n // senderFirstName: senderFirstNameCompany,\r\n // sentDate: new Date().toLocaleString(),\r\n // timestamp: new Date().toLocaleString(),\r\n // seenBy: [],\r\n // isEmoteText: false,\r\n // subTypeId: '',\r\n // subType: 3,\r\n // senderBusinessName: props.loggedUserFirstName\r\n // }\r\n // chatService.sendChatMessage(props.loggedUserId, newMessage, props.conversationTread, message);\r\n //} else {\r\n newMessage = {\r\n message: message,\r\n senderId: props.loggedUserId,\r\n senderImage: loggedUserImg,\r\n senderName: props.loggedUserFirstName,\r\n senderFirstName: senderFirstNameCompany,\r\n sentDate: moment(new Date().toUTCString().split(' GMT')[0]).format('DD/MM/YYYY HH:mm:ss'),\r\n timestamp: new Date().toLocaleString(),\r\n seenBy: [],\r\n isEmoteText: false,\r\n subTypeId: props.conversationTread.jobId ? props.conversationTread.jobId : '',\r\n subType: props.conversationTread.jobId ? 1 : 3,\r\n senderBusinessName: props.loggedUserFirstName\r\n }\r\n chatService.sendChatMessage(props.loggedUserId, newMessage, props.conversationTread, message);\r\n setMessage('');\r\n //}\r\n }\r\n }\r\n\r\n const onHandleKeyDown = (e) => {\r\n if (e.key === 'Enter') {\r\n onSendMessage();\r\n }\r\n }\r\n\r\n const resetCurrentNotifications = () => {\r\n props.conversationTread.loggedInUserId = props.loggedUserId;\r\n props.conversationTread.loggedUserFirstName = props.loggedUserFirstName\r\n chatService.resetConversationNotification(props.conversationTread);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n setMessage(event.target.value)}\r\n onKeyDown={onHandleKeyDown}\r\n onClick={resetCurrentNotifications}\r\n className=\"form-control\"\r\n placeholder=\"Type a message..\"\r\n aria-label=\"Recipient's username\" />\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n try {\r\n let chats = state.Conversation.conversationList\r\n\r\n return {\r\n chatBoxes: chats,\r\n imageThumbnailsCdnEndpoint: state.AppSettings.imageThumbnailsCdnEndpoint,\r\n imageCdnEndpoint: state.AppSettings.imageCdnEndpoint,\r\n profileThumbnailsCdnEndpoint: state.AppSettings.profileThumbnailsCdnEndpoint,\r\n loggedUserProfileImage: state.User.profileImageUrl,\r\n loggedUserFirstName: state.User.firstName,\r\n loggedUserId: state.User.userId,\r\n };\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\r\n return {\r\n updateChatboxes: (chatList) => { dispatch({ type: 'SHOW_CONVERSATION', chatList: chatList }) }\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MessagePost);","import React from 'react';\r\nimport * as _ from 'lodash';\r\nimport { connect } from 'react-redux';\r\nimport chatService from '../../../../Services/ChatService';\r\nimport MessagePost from './MessagePost/MessagePost';\r\n\r\nclass ChatBox extends React.Component {\r\n\r\n state = {\r\n conversationList: [],\r\n receiversId: [],\r\n chatMessageCount: 50,\r\n isInitialChatChunk: true,\r\n unreadChat: [],\r\n isUnread: false,\r\n isJobSpecificChat: false,\r\n workflowStatus: 0,\r\n conversation: {\r\n conversationId: '',\r\n conversationName: '',\r\n isPrivate: true,\r\n isRead: false,\r\n lastMessage: '',\r\n receiver: '',\r\n receiverFirstName: '',\r\n receiverImageUrl: '',\r\n receiverLastName: '',\r\n receiverName: '',\r\n sender: '',\r\n senderFirstName: '',\r\n senderImageUrl: '',\r\n senderName: '',\r\n unReadMessageCount: 0\r\n },\r\n isMinimized: false,\r\n conversationTread: {},\r\n conversationId: '',\r\n conversationCommon: {},\r\n profileImageThumbnailCdn: 'https://ancillary-dev-profile-thumbnails.azureedge.net/'\r\n }\r\n\r\n render() {\r\n const chatHeading = this.getConversation();\r\n const messeges = this.getMesseges();\r\n let jobChatCompletedMessage = '';\r\n if (this.state.isJobSpecificChat && this.state.workflowStatus == 7) {\r\n jobChatCompletedMessage =
\r\n This chat thread is no longer active due to the job being completed.\r\n
\r\n }\r\n\r\n return (\r\n
\r\n
\r\n {chatHeading}\r\n
\r\n
\r\n {messeges}\r\n {jobChatCompletedMessage}\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n constructor(props) {\r\n super(props); \r\n this.chatBoxBody = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n this.getConversationInput();\r\n this.getConversationReadStatus();\r\n\r\n }\r\n\r\n componentDidUpdate() {\r\n let chatBoxBody = this.chatBoxBody.current;\r\n chatBoxBody.scrollTop = chatBoxBody.scrollHeight;\r\n }\r\n\r\n getConversationReadStatus = () => {\r\n chatService.getConversationReadStatus(localStorage.userIdDecripted, this.props.conversation.conversationId)\r\n .on('value', snapshot => {\r\n let isRead = snapshot.val();\r\n this.setState(state => ({ isUnread: !isRead }));\r\n });\r\n }\r\n\r\n getMesseges = () => {\r\n const msgItems = this.state.conversationList;\r\n return msgItems.map((item, index) => {\r\n const senderMsg = this.getSenderMessageInfo(item)\r\n const receivermsg = this.getReceiverMsgInfo(item);\r\n if (localStorage.getItem('userIdDecripted') == item.senderId) {\r\n return (\r\n
\r\n {senderMsg}\r\n
\r\n )\r\n } else {\r\n return (\r\n
\r\n {receivermsg}\r\n
\r\n )\r\n }\r\n\r\n });\r\n }\r\n\r\n getReceiverMsgInfo(item) {\r\n let globalText = '';\r\n if (this.state.unreadChat && item.timestamp == this.state.unreadChat.timestamp) {\r\n globalText =
\r\n _____________________ Unread Chat _____________________\r\n
\r\n }\r\n\r\n if (item.isEmoteText) {\r\n return <>\r\n {globalText}\r\n
\r\n {item.message}\r\n
\r\n \r\n } else {\r\n return <>\r\n {globalText}\r\n
\r\n
\r\n {e.target.onerror = null; e.target.src=\"/Images/default-profile.png\"}} />\r\n
\r\n
\r\n {item.message}\r\n
{item.senderFirstName}, {item.sentDate}
\r\n {/* {(item.senderBusinessName && item.senderBusinessName != null && item.senderBusinessName != 'null') ? (\r\n
\r\n {item.senderBusinessName}\r\n
\r\n ) : ('')} */}\r\n
\r\n
\r\n \r\n }\r\n }\r\n\r\n getSenderMessageInfo(item) {\r\n if (item.isEmoteText) {\r\n return <>\r\n
\r\n {item.message}\r\n
\r\n \r\n } else {\r\n const seen = this.getSeenByList(item)\r\n return <>\r\n
\r\n {item.message}\r\n
{item.sentDate}
\r\n {seen}\r\n
\r\n \r\n }\r\n }\r\n\r\n getSeenByList = (conMessage) => {\r\n if(conMessage.seenBy !== undefined) {\r\n let messageSeenByList = Object.keys(conMessage.seenBy).map(key => ({type: key, value: conMessage.seenBy[key]}));\r\n\r\n if(messageSeenByList.length > 0) {\r\n return
\r\n {messageSeenByList.map((seenMsg, index) =>\r\n
\r\n Seen by {seenMsg.value.firstName} , {seenMsg.value.seenTime}, \r\n
\r\n )}\r\n
\r\n } else {\r\n return \r\n }\r\n } else {\r\n return \r\n }\r\n }\r\n\r\n getConversation = () => {\r\n const conversationData = this.props.conversation;\r\n const convType = this.getTitleByConversationType(conversationData);\r\n return (\r\n <>\r\n
\r\n {convType}\r\n
\r\n \r\n
\r\n {!(this.state.isJobSpecificChat && this.state.workflowStatus == 7) ? \r\n <> \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n : ''\r\n }\r\n
{ this.setState({ isMinimized: true }) }} className={this.state.isMinimized ? 'ch-minimize d-none' : 'ch-minimize'}>\r\n \r\n
\r\n
{ this.setState({ isMinimized: false }) }} className={this.state.isMinimized ? 'ch-minimize' : 'ch-minimize d-none'}>\r\n \r\n
\r\n
{\r\n let selectedChat = conversationData;\r\n let chats = (this.props.chatBoxes == '') ? [] : JSON.parse(this.props.chatBoxes);\r\n \r\n const filteredChats = chats.filter((chat) => {\r\n return chat.conversationId !== selectedChat.conversationId;\r\n });\r\n const chatsStr = (filteredChats.length > 0) ? JSON.stringify(filteredChats) : '';\r\n this.props.updateChatboxes(chatsStr);\r\n }}>\r\n \r\n
\r\n
\r\n \r\n ) \r\n }\r\n\r\n getTitleByConversationType = (conversation) => {\r\n if (conversation.isPrivate) {\r\n return (\r\n <>\r\n
\r\n \"\"\r\n{e.target.onerror = null; e.target.src=\"/Images/default-profile.png\"}} />\r\n
\r\n
\r\n \r\n
\r\n \r\n )\r\n } else {\r\n return (\r\n <>\r\n
\r\n \"\"\r\n
\r\n
\r\n { }} \r\n data-toggle=\"tooltip\" title={conversation.conversationName}/>\r\n
\r\n \r\n )\r\n }\r\n }\r\n\r\n getConversationInput() {\r\n let tread = this.props.conversation;\r\n if (tread.conversationId !== undefined) {\r\n chatService.resetConversationMessages(tread);\r\n }\r\n if (tread.conversationId === undefined && tread.receiver === undefined) {\r\n return;\r\n }\r\n this.setState({ conversation: tread });\r\n this.getConversationId(tread);\r\n }\r\n\r\n getConversationId(tread) {\r\n this.state.receiversId.push(tread.receiver);\r\n let stateTread = tread;\r\n if (tread.conversationId === '' || tread.conversationId === undefined) {\r\n stateTread.isPrivate = true;\r\n this.setState({ conversation: stateTread });\r\n chatService.getConversationIdByUser(stateTread.sender)\r\n .on('value', snapshot => {\r\n let dataList = [];\r\n snapshot.forEach(childSnapshot => {\r\n const childKey = childSnapshot.key;\r\n let childData = childSnapshot.val();\r\n childData.key = childKey;\r\n dataList.push(childData);\r\n });\r\n\r\n let findx = dataList.findIndex(data => {\r\n return data.receiver == stateTread.receiver;\r\n });\r\n\r\n if (findx >= 0) {\r\n if (!stateTread || !stateTread.conversationId || !stateTread.conversationId == '' || !stateTread.conversationId == undefined) {\r\n stateTread.conversationId = dataList[findx].key;\r\n let chatsObj = JSON.parse(this.props.chatBoxes);\r\n let chatObjIndex = chatsObj.findIndex(a => {\r\n return a.conversationId === undefined && a.receiver === stateTread.receiver && a.sender === stateTread.sender;\r\n });\r\n if(chatObjIndex >= 0) {\r\n chatsObj[chatObjIndex] = stateTread;\r\n this.props.updateChatboxes(JSON.stringify(chatsObj));\r\n }\r\n this.setState({ conversation: stateTread });\r\n this.getConversationDetails(stateTread);\r\n }\r\n if (stateTread && stateTread.conversationId && stateTread.conversationId !== '' && stateTread.conversationId !== undefined) {\r\n this.getConversationDetails(stateTread);\r\n }\r\n } else {\r\n let newConversationId = chatService.createPrivateConversation(stateTread);\r\n if (this.isConversationIdNull(stateTread)) {\r\n this.resetConversationData(stateTread.conversationId)\r\n }\r\n\r\n this.props.conversation.conversationId = newConversationId;\r\n stateTread.conversationId = newConversationId;\r\n stateTread.isPrivate = true;\r\n let chatsObj = JSON.parse(this.props.chatBoxes);\r\n let chatObjIndex = chatsObj.findIndex(a => {\r\n return a.conversationId === undefined && a.receiver === stateTread.receiver && a.sender === stateTread.sender;\r\n });\r\n if(chatObjIndex >= 0) {\r\n chatsObj[chatObjIndex] = stateTread;\r\n this.props.updateChatboxes(JSON.stringify(chatsObj));\r\n }\r\n this.setState({ conversation: stateTread });\r\n this.getConversationDetails(stateTread);\r\n }\r\n });\r\n } else {\r\n this.getConversationDetails(stateTread);\r\n }\r\n }\r\n\r\n isConversationIdNull = (conversation) => {\r\n if (conversation.ConversationId === null || conversation.ConversationId === undefined) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n resetConversationData = (conversationId) => {\r\n chatService.resetConversationData(conversationId);\r\n }\r\n\r\n getConversationDetails = (conversation) => {\r\n if (conversation.conversationId !== undefined) {\r\n this.setState({ conversationId: conversation.conversationId });\r\n chatService.getConversationByIdChunk(conversation.conversationId, this.state.chatMessageCount)\r\n .on('value', (snapshot) => {\r\n let conList = [];\r\n if (this.props.conversation.conversationId === conversation.conversationId) {\r\n snapshot.forEach((childSnapshot) => {\r\n const childKey = childSnapshot.key;\r\n let childData = childSnapshot.val();\r\n childData.key = childKey;\r\n conList.push(childData);\r\n });\r\n let unreadChats = this.getFirstUnreadChat(conList);\r\n this.setState({\r\n isInitialChatChunk: true,\r\n conversationList: conList,\r\n unreadChat: unreadChats\r\n });\r\n\r\n if(unreadChats) {\r\n conversation.jobId = unreadChats.subTypeId;\r\n this.setState({ conversation: conversation });\r\n }\r\n if(conList.length > 0) {\r\n let statusId = 0;\r\n if (conList[0].subType == 1) {\r\n if (conversation.jobId == undefined) {\r\n conversation.jobId = conList[0].subTypeId;\r\n }\r\n chatService.getConversationSubTypeStatus(conversation.jobId)\r\n .then(data => {\r\n statusId = data;\r\n this.setState(state => ({ isJobSpecificChat: true, workflowStatus: statusId }));\r\n });\r\n }\r\n this.setState(state => ({ isJobSpecificChat: conList[0].subType == 1, workflowStatus: statusId }));\r\n } \r\n } else {\r\n chatService.resetConversationMessages(conversation);\r\n }\r\n\r\n this.getConversationChanges(conversation);\r\n // this.checkConversationType(conversation);\r\n // this.checkIfConversationDisabled();\r\n });\r\n }\r\n }\r\n\r\n getConversationChanges = (conversation) => {\r\n if (conversation.conversationId !== undefined) {\r\n chatService.getConversationChanges(conversation)\r\n .on('value', (snapshot) => {\r\n const data = snapshot.val();\r\n if (data && data[\"conversationId\"] == this.props.conversation.conversationId) {\r\n this.setState({\r\n conversationCommon: {\r\n isRead: data[\"isRead\"]\r\n },\r\n conversation: {\r\n conversationName: data[\"conversationName\"],\r\n IsPrivate: data[\"isPrivate\"]\r\n }\r\n });\r\n // if (this.state.isInitialChatChunk) {\r\n // this.scrollToBottom();\r\n // }\r\n }\r\n });\r\n } else {\r\n this.setState({\r\n conversationCommon: {\r\n isRead: true\r\n }\r\n });\r\n }\r\n\r\n }\r\n\r\n getFirstUnreadChat = (items) => {\r\n let allUnreadMsgs = items.filter((item) => {\r\n const seenBy = (item.seenBy) ? Object.values(item.seenBy) : [];\r\n return localStorage.getItem('userIdDecripted') !== item.senderId && (!item.seenBy || (item.seenBy && !_.some(seenBy, ['userId', localStorage.getItem('userIdDecripted')])))\r\n })\r\n return _.minBy(allUnreadMsgs, data => {\r\n return new Date(data.timestamp);\r\n });\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n try {\r\n let chats = state.Conversation.conversationList\r\n\r\n return {\r\n chatBoxes: chats,\r\n imageThumbnailsCdnEndpoint: state.AppSettings.imageThumbnailsCdnEndpoint,\r\n imageCdnEndpoint: state.AppSettings.imageCdnEndpoint,\r\n profileThumbnailsCdnEndpoint: state.AppSettings.profileThumbnailsCdnEndpoint,\r\n };\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\r\n return {\r\n updateChatboxes: (chatList) => { dispatch({ type: 'SHOW_CONVERSATION', chatList: chatList }) }\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ChatBox);","import React from 'react';\r\nimport ChatBox from './ChatBox/ChatBox';\r\nimport { connect } from 'react-redux';\r\n\r\nclass ChatBoxContainer extends React.Component {\r\n state = {\r\n conversations: []\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n componentDidUpdate() {\r\n\r\n }\r\n\r\n render() {\r\n\r\n const chatList = this.getConversationList();\r\n return (\r\n
\r\n {chatList}\r\n
\r\n );\r\n }\r\n\r\n getConversationList = () => {\r\n let chats = this.props.chatBoxes == '' ? [] : JSON.parse(this.props.chatBoxes);\r\n chats = removeDuplicate(chats,it => it.conversationId);\r\n return chats.map((con, index) => {\r\n if(con.ConversationId != undefined) con.conversationId = con.ConversationId; \r\n return \r\n })\r\n }\r\n\r\n}\r\n\r\nfunction removeDuplicate(data,key){\r\n return [\r\n ...new Map(\r\n data.map(x=> [key(x),x])\r\n ).values()\r\n ]\r\n}\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n try {\r\n let chats = state.Conversation.conversationList\r\n\r\n return {\r\n chatBoxes: chats\r\n };\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n}\r\n\r\n// const mapDispatchToProps = (dispatch) => {\r\n\r\n// return {\r\n// addToChatBoxList: (chatList) => { dispatch({ type: 'SHOW_CONVERSATION', chatList: chatList }) }\r\n// }\r\n// }\r\n\r\nexport default connect(mapStateToProps, null)(ChatBoxContainer);","import React, { Component, Fragment } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport './AutoComplete.scss';\r\n\r\nclass AutoComplete extends Component {\r\n static propTypes = {\r\n suggestions: PropTypes.instanceOf(Array)\r\n };\r\n\r\n static defaultProps = {\r\n suggestions: []\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n // The active selection's index\r\n activeSuggestion: 0,\r\n // The suggestions that match the user's input\r\n filteredSuggestions: [],\r\n // Whether or not the suggestion list is shown\r\n showSuggestions: false,\r\n // What the user has entered\r\n userInput: \"\"\r\n };\r\n }\r\n\r\n // Event fired when the input value is changed\r\n onChange = (e) => {\r\n const { suggestions } = this.props;\r\n const userInput = e.currentTarget.value;\r\n\r\n if(userInput.length > 2) {\r\n this.props.onChange(userInput);\r\n this.setState({\r\n activeSuggestion: 0,\r\n filteredSuggestions: this.props.dataList,\r\n showSuggestions: true,\r\n userInput: userInput\r\n });\r\n \r\n } else {\r\n this.setState({\r\n activeSuggestion: 0,\r\n filteredSuggestions: [],\r\n showSuggestions: false,\r\n userInput: userInput\r\n });\r\n this.props.onSelect(null);\r\n }\r\n\r\n \r\n\r\n // Filter our suggestions that don't contain the user's input\r\n // const filteredSuggestions = suggestions.filter(\r\n // suggestion => suggestion.toLowerCase().indexOf(userInput.toLowerCase()) > -1\r\n // );\r\n\r\n // Update the user input and filtered suggestions, reset the active\r\n // suggestion and make sure the suggestions are shown\r\n // this.setState({\r\n // activeSuggestion: 0,\r\n // filteredSuggestions,\r\n // showSuggestions: true,\r\n // userInput: e.currentTarget.value\r\n // });\r\n };\r\n\r\n // Event fired when the user clicks on a suggestion\r\n onClick = (event, data) => {\r\n // Update the user input and reset the rest of the state\r\n this.setState({\r\n activeSuggestion: 0,\r\n filteredSuggestions: [],\r\n showSuggestions: false,\r\n userInput: event.currentTarget.innerText\r\n });\r\n\r\n this.props.onSelect(data);\r\n };\r\n\r\n // Event fired when the user presses a key down\r\n onKeyDown = (e) => {\r\n const { activeSuggestion, filteredSuggestions } = this.state;\r\n\r\n this.setState({\r\n activeSuggestion: 0,\r\n filteredSuggestions: this.props.dataList,\r\n });\r\n switch (e.keyCode) {\r\n \r\n case 13: // User pressed the enter key, update the input and close the suggestions\r\n let suggest = activeSuggestion;\r\n this.setState({\r\n activeSuggestion: 0,\r\n showSuggestions: false,\r\n userInput: this.props.dataList[suggest].label\r\n });\r\n this.props.onSelect(this.props.dataList[suggest]);\r\n break;\r\n case 38: // User pressed the up arrow, decrement the index\r\n if (activeSuggestion === 0) {\r\n return;\r\n }\r\n this.setState({ activeSuggestion: activeSuggestion - 1 }); \r\n break;\r\n case 40: // User pressed the down arrow, increment the index\r\n if (filteredSuggestions.length>0 &&(activeSuggestion - 1 === filteredSuggestions.length)) {\r\n return;\r\n }\r\n this.setState({ activeSuggestion: activeSuggestion + 1 });\r\n break;\r\n };\r\n };\r\n\r\n render() {\r\n const {\r\n onChange,\r\n onClick,\r\n onKeyDown,\r\n state: {\r\n activeSuggestion,\r\n showSuggestions,\r\n userInput\r\n }\r\n } = this;\r\n\r\n const { placeholder } = this.props;\r\n\r\n let suggestionsListComponent;\r\n\r\n if(showSuggestions && userInput) {\r\n if(this.props.dataList && this.props.dataList.length > 0) {\r\n suggestionsListComponent = (\r\n
    \r\n {\r\n this.props.dataList.map((suggestion, index) => {\r\n let className;\r\n\r\n // Flag the active suggetion with a class\r\n if(index == activeSuggestion) {\r\n className = 'suggestion-active';\r\n }\r\n\r\n return (\r\n
  • onClick(event, suggestion)}>\r\n {suggestion[this.props.title]}\r\n
  • \r\n );\r\n })\r\n }\r\n
\r\n );\r\n } else {\r\n if (this.props.errorMsg == null) {\r\n suggestionsListComponent = (\r\n
\r\n No Suggestions !\r\n
\r\n );\r\n }\r\n else {\r\n suggestionsListComponent = (\r\n
\r\n {this.props.errorMsg}\r\n
\r\n );\r\n }\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n {suggestionsListComponent}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default AutoComplete;","import React, { useState } from \"react\";\r\nimport { ButtonToolbar, ToggleButtonGroup, ToggleButton, Form, Button } from 'react-bootstrap';\r\nimport { Dropdown } from 'semantic-ui-react';\r\nimport Drawer from \"../../../Common/Drawer/Drawer\";\r\nimport BootstrapTable from \"../../../Common/Node/bootstrapTable\";\r\nimport { trackPromise, usePromiseTracker } from \"react-promise-tracker\";\r\nimport StarRatingComponent from \"react-star-rating-component\";\r\nimport userService from \"../../../../Services/UserService\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport Moment from \"react-moment\";\r\nimport moment from 'moment';\r\n\r\nexport default class ProviderProfileDrawer extends React.Component {\r\n state = {\r\n showProfileDrawer: false,\r\n profileDetails: {},\r\n isPmView: false,\r\n isSpView: false,\r\n isUserView: false,\r\n isDataLoaded: false,\r\n profileImageUrl: \"/images/default-profile.png\",\r\n isSelectedTradee: false,\r\n page: 1,\r\n total: 0,\r\n feedbackList: [],\r\n filteredFeedback: [],\r\n filterUserType: 0,\r\n isShowAreas: false,\r\n isLoadingFeedback: false,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n componentDidMount(){\r\n if (this.props.userId != null) {\r\n this.setState({ showProfileDrawer: true, isSelectedTradee: this.props.isSelected })\r\n this.getProfile(this.props.userId);\r\n }\r\n }\r\n\r\n render() {\r\n \r\n let drawer = this.createDrawer();\r\n return
{drawer}
;\r\n \r\n }\r\n\r\n toggleProfileDrawer = isClose => {\r\n // if (!this.state.showProfileDrawer && this.props.userId != null) {\r\n // this.getProfile(userId);\r\n // }\r\n this.setState(state => ({\r\n showProfileDrawer: !this.state.showProfileDrawer\r\n }));\r\n\r\n if(isClose) {\r\n this.props.onCloseProviderDrawer();\r\n }\r\n \r\n };\r\n\r\n filterByUserType = (event) => {\r\n if(document.getElementById('filterUserType') != null) {\r\n let val = document.getElementById('filterUserType').value;\r\n let result = (val == 0) ? this.state.feedbackList : this.state.feedbackList.filter(a => a.feedBackUserType == val);\r\n let pageCount = document.getElementById('filterPageSize').value;\r\n result = (pageCount == -999) ? result : result.slice(0, pageCount);\r\n this.setState({\r\n filteredFeedback: result\r\n })\r\n }\r\n }\r\n\r\n userTypeFormatter(cell) {\r\n switch (cell) {\r\n case 3:\r\n return Property Manager;\r\n case 4:\r\n return Tenant;\r\n case 2:\r\n return Consumer;\r\n }\r\n }\r\n\r\n dateFormatter(cell) {\r\n return {new Date(cell).toLocaleDateString()};\r\n }\r\n\r\n getFeedbackTable() {\r\n \r\n return (\r\n \r\n \r\n \r\n {this.state.filteredFeedback.map((element, index) => {\r\n return (\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 {this.dateFormatter(element.dateTime)}\r\n
\r\n
\r\n
\r\n {this.userTypeFormatter(element.feedBackUserType)}\r\n
\r\n
{element.user}
\r\n
\r\n \r\n
\r\n
\r\n
{element.avarageRating}
\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n const header = this.createProfileHeader();\r\n const body = this.createProfileBody();\r\n const footer = this.createProfileFooter();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n onSelectTradee = () => {\r\n const { providerProfile } = this.state.profileDetails;\r\n this.props.selectTradee(this.props.userId, !this.props.isSelected, providerProfile.overallRating)\r\n this.setState({\r\n isSelectedTradee: !this.state.isSelectedTradee\r\n })\r\n this.toggleProfileDrawer(true);\r\n }\r\n\r\n createProfileFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n this.toggleProfileDrawer(true)}\r\n >\r\n {\" \"}\r\n Cancel{\" \"}\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createProfileHeader = () => {\r\n return (\r\n <>\r\n

\r\n Profile View\r\n \r\n

\r\n
\r\n this.toggleProfileDrawer(true)}\r\n >\r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createProfileBody = () => {\r\n if (this.state.isDataLoaded) {\r\n return (\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

Areas Covered :

\r\n
\r\n {this.state.profileDetails.providerProfile.preferredStates.map(element => {\r\n return \r\n })}\r\n
\r\n\r\n

Licensed Trades

\r\n {this.getLicensedTrades()}\r\n\r\n

Insurance

\r\n {this.getInsurance()}\r\n
\r\n
\r\n {this.getSPDetails()}\r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n };\r\n\r\n getLicensedTrades = () => {\r\n const { providerProfile } = this.state.profileDetails;\r\n return (\r\n
\r\n \r\n \r\n {providerProfile.providerLicenses.map((element, index) => {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n \r\n
{element.mainJobTypeName}{element.licenceNumber}
\r\n
\r\n )\r\n }\r\n\r\n getInsurance = () => {\r\n const { providerProfile } = this.state.profileDetails;\r\n return (\r\n
\r\n
\r\n
\r\n

Applicable to All job Types

\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
Public Liability$ {providerProfile.publicLiabilityDisplay}
Professional indemnity$ {providerProfile.professionalIndemnityDisplay}
\r\n
\r\n )\r\n }\r\n\r\n getSPDetails = () => {\r\n const { providerProfile } = this.state.profileDetails;\r\n \r\n if (this.state.isSpView) {\r\n return (\r\n <>\r\n
\r\n
\r\n {(providerProfile.tradeeLeaveCalendars && providerProfile.tradeeLeaveCalendars.length > 0) ?\r\n
\r\n {providerProfile.tradeeLeaveCalendars.map((service, index) => {\r\n return

\r\n })}\r\n
\r\n : ''}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n SP Name : \r\n {providerProfile.displayName}\r\n
\r\n
\r\n ABN : \r\n {providerProfile.abn}\r\n
\r\n
\r\n Business Name : \r\n {providerProfile.businessName}\r\n
\r\n
\r\n Email : \r\n {providerProfile.email}\r\n
\r\n
\r\n Mobile No : \r\n {providerProfile.mobileNumber}\r\n
\r\n {(providerProfile.officePhone != null) ? \r\n
\r\n Office No : \r\n {providerProfile.officePhone}\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 Rating : \r\n {providerProfile.overallRating}\r\n
\r\n
\r\n Country in Operation : \r\n {providerProfile.workingCountry}\r\n
\r\n
\r\n

Skills :

\r\n
\r\n
\r\n {this.state.profileDetails.providerProfile.primaryServices.map((service, index) => {\r\n return \r\n })}\r\n
\r\n {/* */}\r\n
\r\n
\r\n
\r\n {/* {(this.state.isShowAreas) ? \r\n
\r\n
\r\n {providerProfile.nearbySuburbs.map(element => {\r\n return {element.label}\r\n })}\r\n
\r\n
: ''} */}\r\n
\r\n
\r\n
${providerProfile.hourlyRate}
\r\n
\r\n Per hour\r\n rate\r\n
\r\n
\r\n
\r\n
{providerProfile.completedJobsCount}
\r\n
\r\n Completed\r\n Jobs\r\n
\r\n
\r\n
\r\n
${providerProfile.calloutFee}
\r\n
\r\n Callout\r\n Fee\r\n
\r\n
\r\n
\r\n
\r\n {(providerProfile.hasABNBadge) ?\r\n
\r\n
\r\n
\r\n ABN\r\n
\r\n Registered\r\n
\r\n
: ''}\r\n {(providerProfile.hasCm3CertifiedBadge) ?\r\n
\r\n
\r\n
\r\n CM3\r\n
\r\n Certified\r\n
\r\n
: ''}\r\n
\r\n
\r\n
\r\n
\r\n

Feedback Received ({this.state.feedbackList.length})

\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 {(this.state.isLoadingFeedback) ?\r\n
\r\n : this.getFeedbackTable()}\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n };\r\n\r\n getSPAllSkillsSummary = () => {\r\n const skills = this.state.profileDetails.providerProfile.primaryServices.map(\r\n (service, index) => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n );\r\n return skills;\r\n };\r\n\r\n getProfile = userId => {\r\n \r\n try {\r\n let filters = {\r\n userId: userId,\r\n includeAttachments: false,\r\n includeBidRatings: false,\r\n includeNearbySuburbs: true,\r\n includeTradeeAttachments: false,\r\n isDetailedView: false,\r\n includeBadges: true,\r\n isTimeline: false,\r\n inCludePrefferedJobTypes: true,\r\n numberOfSuburbsNeeded: 10,\r\n ischat: false\r\n };\r\n let isLoadedSpProfile = false;\r\n let isLoadedSpFeedback = false;\r\n this.setState({\r\n isLoadingFeedback: true,\r\n isLoadingData: true\r\n });\r\n userService.getProviderProfile(btoa(JSON.stringify(filters))).then(dataJson => {\r\n isLoadedSpProfile = true;\r\n this.setState({\r\n profileDetails: dataJson,\r\n isDataLoaded: true,\r\n isLoadingData:false\r\n //feedbackList: dataJson.providerProfile.feedbacks,\r\n //total: dataJson.providerProfile.feedbacks.length\r\n });\r\n\r\n // this.filterByUserType();\r\n\r\n if (dataJson.providerProfile.userId !== null) {\r\n this.setState({\r\n isPmView: false,\r\n isSpView: true,\r\n isUserView: false\r\n });\r\n if (\r\n dataJson.providerProfile.profileImageUrl != null &&\r\n dataJson.providerProfile.profileImageUrl.trim() != \"\"\r\n ) {\r\n this.setState({\r\n profileImageUrl: dataJson.providerProfile.profileImageUrl\r\n });\r\n }\r\n } else if (dataJson.propertyManagerProfile.userId !== null) {\r\n this.setState({\r\n isPmView: true,\r\n isSpView: false,\r\n isUserView: false\r\n });\r\n\r\n if (\r\n dataJson.propertyManagerProfile.profileImageUrl !== null ||\r\n dataJson.propertyManagerProfile.profileImageUrl.trim() != \"\"\r\n ) {\r\n this.setState({\r\n profileImageUrl: dataJson.propertyManagerProfile.profileImageUrl\r\n });\r\n }\r\n } else if (dataJson.userProfile.userId !== null) {\r\n this.setState({\r\n isPmView: false,\r\n isSpView: false,\r\n isUserView: true\r\n });\r\n if (\r\n dataJson.userProfile.profileImageUrl !== null ||\r\n dataJson.userProfile.profileImageUrl.trim() != \"\"\r\n ) {\r\n this.setState({\r\n profileImageUrl: dataJson.userProfile.profileImageUrl\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n isDataLoaded: false\r\n });\r\n }\r\n\r\n userService.GetProviderBidFeedbacks(this.props.userId).then(res => {\r\n isLoadedSpFeedback = true\r\n this.setState({\r\n feedbackList: res,\r\n isLoadingFeedback: false,\r\n total: res.length\r\n });\r\n if (res.length > 0) {\r\n this.filterByUserType('1')\r\n }\r\n\r\n })\r\n })\r\n\r\n \r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n}\r\n","import React, { useState } from \"react\";\r\nimport { ButtonToolbar, ToggleButtonGroup, ToggleButton, Form, Button } from 'react-bootstrap';\r\nimport { Dropdown } from 'semantic-ui-react';\r\nimport Drawer from \"../../../Common/Drawer/Drawer\";\r\nimport jobService from \"../../../../Services/JobService\";\r\nimport { toast } from 'react-toastify';\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport ProviderProfileDrawer from \"../ProviderProfileDrawer/ProviderProfileDrawer\";\r\nimport StarRatingComponent from \"react-star-rating-component\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport settingsService from \"../../../../Services/settingsService\";\r\n\r\nclass InviteTradee extends React.Component {\r\n\r\n state = {\r\n showDrawer: false,\r\n isSelectedOnDemand: true,\r\n map: null,\r\n quoteLimit: [\r\n { key: 1, text: '1', value: 1 },\r\n { key: 2, text: '2', value: 2 },\r\n { key: 3, text: '3', value: 3 },\r\n { key: 4, text: '4', value: 4 },\r\n { key: 5, text: '5', value: 5 },\r\n { key: 6, text: '6', value: 6 },\r\n { key: 7, text: '7', value: 7 },\r\n { key: 8, text: '8', value: 8 },\r\n { key: 9, text: '9', value: 9 },\r\n { key: 10, text: '10', value: 10 },\r\n { key: 11, text: 'Unlimited', value: 11 }\r\n ],\r\n selectedQuoteLimit: 1,\r\n tradeeCount: 0,\r\n nearBytradees: [],\r\n markers: [],\r\n selectedTradees: [],\r\n providerId: '',\r\n isShowProviderDrawer: false,\r\n isMarketPlaceLoading: false\r\n };\r\n\r\n notifyError = (msg) => toast.error(msg, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n\r\n constructor(props) {\r\n super(props);\r\n this.quoteLimitRef = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n settingsService.getUserSettings().then(response => {\r\n if (response.quoteSettings !== null && response.quoteSettings.quoteLimit) {\r\n this.quoteLimitRef.current.value = response.quoteSettings.quoteLimit;\r\n } else {\r\n this.quoteLimitRef.current.value = 0;\r\n }\r\n\r\n });\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n return
{drawer}
;\r\n }\r\n\r\n toggleDrawer = () => {\r\n if (this.props.validateBeforeInviteTradee()) {\r\n this.setState({\r\n showDrawer: !this.state.showDrawer\r\n })\r\n if (!this.state.showDrawer) {\r\n this.setState({\r\n selectedTradees: this.props.selectedTradees,\r\n isLoadingData: true\r\n })\r\n jobService.GetJobTradeeCount(this.props.jobTypeId, this.props.location.suburbId).then(res => {\r\n if (!isNaN(Number(res.toString()))) {\r\n this.setState({\r\n tradeeCount: res,\r\n isLoadingData: false\r\n });\r\n } else {\r\n this.setState({\r\n tradeeCount: 0,\r\n isLoadingData: false\r\n });\r\n }\r\n })\r\n this.addJobLocation(this.props.location.latitude, this.props.location.longitude, this.props.location.address);\r\n this.loadNearByTrade();\r\n }\r\n }\r\n }\r\n\r\n loadNearByTrade = () => {\r\n this.setState({\r\n isMarketPlaceLoading: true\r\n });\r\n \r\n jobService.GetMarketplace(this.props.location.suburbId, this.props.jobTypeId).then(res => {\r\n this.setState({\r\n nearBytradees: res.marketplace\r\n })\r\n let markersList = this.state.markers;\r\n res['marketplace'].map(\r\n tradie => {\r\n if (tradie.latitude != 0 && tradie.longitude != 0) {\r\n let random1 = this.getRandomNumber(0.0010, 0.0030);\r\n let random2 = this.getRandomNumber(0.0010, 0.0030);\r\n\r\n let tardieLat = tradie.latitude - random1;\r\n let tardieLng = tradie.longitude - random2;\r\n markersList.push({ id: tradie.userId, lat: tardieLat, lng: tardieLng, toolTip: tradie.name, isSelected: false });\r\n } else {\r\n markersList.push({ id: tradie.userId, lat: tradie.latitude, lng: tradie.longitude, toolTip: tradie.name, isSelected: false });\r\n }\r\n }\r\n );\r\n\r\n if (this.state.selectedTradees.length > 0) {\r\n this.state.selectedTradees.forEach(tradee => {\r\n markersList.forEach(marker => {\r\n if (tradee.userId == marker.id) {\r\n marker.isSelected = true;\r\n }\r\n });\r\n });\r\n // this.firstTimeLoadFlag = false;\r\n }\r\n\r\n this.setState({\r\n markers: markersList,\r\n isMarketPlaceLoading: false\r\n });\r\n this.addTradieLocations(markersList);\r\n });\r\n }\r\n\r\n addTradieLocations = (markers) => {\r\n if (markers != null && markers.length > 0) {\r\n markers.forEach(tradee => {\r\n let icon;\r\n if (tradee.isSelected == true) {\r\n icon = \"/images/dashboardN/trades-icon-on.png\";\r\n } else {\r\n icon = \"/images/dashboardN/trades-icon.png\";\r\n }\r\n let tradieMarker = new window.google.maps.Marker({\r\n position: { lat: tradee.lat, lng: tradee.lng },\r\n map: this.state.map,\r\n icon: icon\r\n });\r\n\r\n let _vm = this;\r\n\r\n var infowindow = new window.google.maps.InfoWindow({\r\n content: tradee.toolTip\r\n });\r\n\r\n tradieMarker.set(\"id\", tradee.id);\r\n tradieMarker.addListener('mouseover', function () {\r\n infowindow.open(_vm.state.map, tradieMarker);\r\n });\r\n tradieMarker.addListener('mouseout', () => infowindow.close())\r\n tradieMarker.addListener('click', function () {\r\n _vm.onClickTradeeProfile(tradee.id);\r\n });\r\n });\r\n }\r\n }\r\n\r\n addJobLocation = (jobLat, jobLng, address) => {\r\n let jobLocation = { lat: jobLat, lng: jobLng };\r\n\r\n let map = new window.google.maps.Map(document.getElementById('gmap'), {\r\n zoom: 11,\r\n center: jobLocation\r\n });\r\n\r\n let property = new window.google.maps.Marker({\r\n position: jobLocation,\r\n map: map,\r\n icon: '/images/dashboardN/trades-icon-job.png'\r\n });\r\n\r\n var infowindow = new window.google.maps.InfoWindow({\r\n content: address\r\n });\r\n\r\n property.set(\"id\", \"property\");\r\n property.addListener('click', function () {\r\n infowindow.open(map, property);\r\n });\r\n\r\n new window.google.maps.Circle({\r\n strokeColor: '#00D0A0',\r\n strokeOpacity: 0.0,\r\n strokeWeight: 0,\r\n fillColor: '#00D0A0',\r\n fillOpacity: 0.3,\r\n map: map,\r\n center: jobLocation,\r\n radius: 20000//Math.sqrt(20000) * 100\r\n });\r\n\r\n this.setState({ map: map });\r\n }\r\n\r\n selectTradee = (userId, isSelected, ratings) => {\r\n\r\n let tradees = this.state.nearBytradees;\r\n let selectedTradee = tradees.find(a => a.userId == userId);\r\n\r\n selectedTradee.overallRating = ratings;\r\n\r\n if (isSelected) {\r\n this.setState({\r\n selectedTradees: [...this.state.selectedTradees, selectedTradee]\r\n })\r\n } else {\r\n let filteredTradees = this.state.selectedTradees.filter(a => a.userId != userId);\r\n this.setState({\r\n selectedTradees: filteredTradees\r\n })\r\n }\r\n\r\n }\r\n\r\n onClickTradeeProfile = (userId) => {\r\n this.setState({\r\n providerId: userId,\r\n isShowProviderDrawer: true\r\n })\r\n }\r\n\r\n onCloseProviderDrawer = () => {\r\n this.setState({\r\n isShowProviderDrawer: false\r\n })\r\n }\r\n\r\n getRandomNumber(min, max) {\r\n return Math.random() * (max - min) + min;\r\n }\r\n\r\n handleQuoteLimitChange = (event, props) => {\r\n this.state.selectedQuoteLimit = props.value;\r\n }\r\n\r\n onAttachToPost = () => {\r\n const { selectedTradees, selectedQuoteLimit, isSelectedOnDemand, tradeeCount } = this.state;\r\n\r\n if (isSelectedOnDemand && selectedTradees.length == 0) {\r\n this.notifyError('There are no trades registered in the B+A available for the selected service type.');\r\n } else if (!isSelectedOnDemand && tradeeCount == 0) {\r\n this.notifyError('There are no trades registered in the B+A available for the selected service type.');\r\n } else {\r\n this.props.onAttachTradeesToTheJob({ selectedTradees, selectedQuoteLimit: this.quoteLimitRef.current.value, isSelectedOnDemand, inviteToProviders: true, tradeeCount: this.state.tradeeCount });\r\n this.toggleDrawer();\r\n }\r\n }\r\n\r\n createDrawer = () => {\r\n let header = this.createHeader();\r\n let body = this.createBody();\r\n let footer = this.createFooter();\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \"user-add-icon\"\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 createHeader = () => {\r\n return (\r\n <>\r\n

\r\n Invite Trade\r\n \r\n

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createBody = () => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n Matching trades around my suburb\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 {this.state.selectedTradees.map((element, index) => {\r\n let profileImg = (element.profileImageUrl == null || element.profileImageUrl == undefined) ? '/Images/default-profile.png' : element.profileImageUrl;\r\n return (\r\n
this.onClickTradeeProfile(element.userId)}>\r\n
\r\n
\r\n
\r\n {\r\n e.target.onerror = null;\r\n e.target.src = \"/Images/default-profile.png\";\r\n }}\r\n />\r\n
\r\n
\r\n

{element.name}

\r\n

email: {element.email}

\r\n

tel: {element.phoneNumber}

\r\n
\r\n
\r\n
\r\n \r\n
Rating: {element.overallRating}
\r\n
\r\n
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n this.OnChangeQouteLimit(e)} onKeyUp={e => this.onKeyupQuoteLimit(e)}>\r\n \r\n
\r\n
\r\n
\r\n {(this.state.isShowProviderDrawer) ?\r\n a.userId == this.state.providerId) > -1}\r\n selectedTradees={this.state.selectedTradees}\r\n selectTradee={this.selectTradee}\r\n userId={this.state.providerId}\r\n isShowProviderDrawer={this.state.isShowProviderDrawer}\r\n onCloseProviderDrawer={this.onCloseProviderDrawer}\r\n isFromBot={this.props.isFromBot} >\r\n : ''\r\n }\r\n\r\n
\r\n )\r\n }\r\n\r\n onKeyupQuoteLimit = (event) => {\r\n let value = event.target.value.replace('-', '').replace('#', '');\r\n this.quoteLimitRef.current.value = value == 0 ? '' : value;\r\n }\r\n\r\n OnChangeQouteLimit = (event) => {\r\n if (event.target.value < 1) {\r\n this.quoteLimitRef.current.value = 1;\r\n }\r\n }\r\n\r\n createFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n {\" \"}\r\n Cancel{\" \"}\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n}\r\n\r\n\r\nexport default InviteTradee;","//import Grid from '../../Components/Grid';\r\nimport React, { Component } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { connect } from 'react-redux';\r\nimport Loader from \"react-loader-spinner\";\r\n\r\nimport Drawer from '../../Common/Drawer/Drawer';\r\nimport './JobPostDrawer.scss';\r\nimport AutoComplete from '../../Common/AutoComplete/AutoComplete';\r\nimport { ButtonToolbar, ToggleButtonGroup, ToggleButton, Form, Button } from 'react-bootstrap';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { Search, Label, Dropdown } from 'semantic-ui-react'\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport * as _ from 'lodash';\r\nimport 'semantic-ui-css/semantic.min.css'\r\n\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\n\r\nimport { AXIOS } from '../../../Utilities/HttpRequest/Axios';\r\nimport { registerPlugin, FilePond } from 'react-filepond';\r\nimport 'filepond/dist/filepond.min.css';\r\n\r\nimport FilePondPluginImageExifOrientation from 'filepond-plugin-image-exif-orientation';\r\nimport FilePondPluginImagePreview from 'filepond-plugin-image-preview';\r\nimport 'filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css';\r\nimport { Guid } from \"guid-typescript\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport AttachmentsDrawer from '../../Drawers/AttachmentsDrawer/AttachmentsDrawer';\r\nimport JobLocksDrawer from '../../Drawers/JobLocksDrawer/JobLocksDrawer';\r\nimport propertyService from '../../../Services/PropertyService';\r\nimport settingsService from '../../../Services/settingsService';\r\nimport ImageViewer from '../../Common/ImageViewer/ImageViewer';\r\nimport jobService from '../../../Services/JobService';\r\nimport FrequentlyUsedServices from './FrequentlyUsedServices/FrequentlyUsedServices';\r\nimport { trackPromise } from 'react-promise-tracker';\r\nimport GoogleMapLocationsAutoComplete from '../../Common/GoogleMapLocationsAutoComplete/GoogleMapLocationsAutoComplete';\r\nimport InviteTradee from './InviteTradee/InviteTradee';\r\nimport Disclaimer from './Disclaimer/Disclaimer'\r\n\r\nregisterPlugin(FilePondPluginImageExifOrientation, FilePondPluginImagePreview);\r\n\r\nconst corsProxy = 'https://cors-anywhere.herokuapp.com/';\r\n\r\nclass JobPostDrawer extends Component {\r\n notifyError = (msg) => toast.error(msg,{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n state = {\r\n propertySearchData: [],\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: '',\r\n propertyName: '',\r\n suburbId: '',\r\n propertyType: '',\r\n jobBudget: 0\r\n },\r\n availableServices: [],\r\n availableServicesDetails: [],\r\n selectedService: { childJobTypes: [] },\r\n selectedServiceType: {\r\n parentJobType: { id: ''}\r\n },\r\n selectedSubServiceType: {},\r\n jobDetails: { attachments: [] },\r\n attachments: [],\r\n jobId: '',\r\n dueDate: '',\r\n formattedDueDate: '',\r\n jobUrgency: '',\r\n propertyList: [],\r\n value:'',\r\n isLoading: false,\r\n filteredResults: [],\r\n propertyId: '',\r\n isPropertiesLoading: false,\r\n parentJobTypes: [],\r\n primaryJobTypes: [],\r\n secondaryJobTypes: [],\r\n frequentlyUsedServices: [],\r\n isShowMoreServices: false,\r\n locationDetails: {\r\n latitude: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n location: ''\r\n },\r\n isMandatoryToUploadFiles: true,\r\n isJobForMe: 1,\r\n jobBudget: 0,\r\n jobForMe: {},\r\n selectedTradees: [],\r\n isSelectedOnDemand: false,\r\n selectedQuoteLimit: 0,\r\n inviteToProviders: false,\r\n isJobPosting: false,\r\n isRestrictKeyCollectionForResidentialProperties: false,\r\n showDisclaimerDrawer: false,\r\n jobPostWorkflowStatus: 1,\r\n propertyLocks: [],\r\n isJobForMeText: '',\r\n isSubServiceTypeSelected:false,\r\n } \r\n\r\n constructor(props) {\r\n super(props);\r\n this.title = React.createRef();\r\n this.jobDescription = React.createRef();\r\n this.budgetRef = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n setTimeout(() => {\r\n this.GetTenantPropertiesByUserId();\r\n }, 1000);\r\n this.getAvailableServices();\r\n this.GetFrequentlyUsedJobTypes();\r\n this.setState({\r\n jobId: Guid.create().toString(),\r\n jobDetails: {\r\n id: this.state.jobId\r\n }\r\n });\r\n this.getAllAvailableJobTypes();\r\n if(localStorage.userType == 5) {\r\n this.setState({\r\n isJobForMe: 0\r\n })\r\n }\r\n\r\n \r\n }\r\n\r\n\r\n\r\n getOrganizationSettings(organizationId) {\r\n settingsService.getOrganizationSettingsByOrgId(organizationId)\r\n .then((res) => {\r\n this.setState({ isMandatoryToUploadFiles: res.organizationSettingsModel.allowTenantsToImageAttachmentFeatureForTheJobposting, \r\n isRestrictKeyCollectionForResidentialProperties: res.organizationSettingsModel.isRestrictKeyCollectionForResidentialProperties\r\n })\r\n\r\n })\r\n\r\n }\r\n\r\n //TODO: This lifecycle event is deprecated and must be updated before updating to React v17\r\n componentWillReceiveProps() {\r\n this.setState({\r\n jobId: Guid.create().toString(),\r\n jobDetails: {\r\n id: this.state.jobId\r\n }\r\n });\r\n this.getAllAvailableJobTypes();\r\n }\r\n\r\n GetTenantPropertiesByUserId = () => {\r\n let none = [{ propertyId: 0, propertyName: '--None--', suburbId: '', location: '', address: '', propertyType: 'Residential' }];\r\n if (this.props.properties.length > 0) {\r\n\r\n let properties = this.props.properties;\r\n\r\n this.setState({\r\n propertyList: properties,\r\n propertyId: properties[0].propertyId\r\n });\r\n this.getPropertyDetailsByPropertyId(properties[0].propertyId);\r\n } else {\r\n this.setState({\r\n propertyList: none,\r\n propertyId: none[0].propertyId\r\n });\r\n }\r\n }\r\n\r\n onAttachTradeesToTheJob = ({ selectedTradees, selectedQuoteLimit, isSelectedOnDemand, inviteToProviders }) => {\r\n this.setState({\r\n selectedTradees: selectedTradees,\r\n selectedQuoteLimit: selectedQuoteLimit,\r\n isSelectedOnDemand: isSelectedOnDemand,\r\n inviteToProviders: inviteToProviders\r\n })\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n return (\r\n
\r\n {drawer}\r\n
\r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n let header = this.createHeader();\r\n let body = this.createBody();\r\n let footer = this.createFooter();\r\n return (\r\n \r\n \r\n )\r\n }\r\n\r\n createHeader = () => {\r\n return (\r\n <>\r\n

\r\n {(localStorage.getItem(\"userType\") == 4) ? 'Post a job' : 'Post a job for me'}\r\n

\r\n
\r\n \r\n
\r\n \r\n )\r\n }\r\n\r\n validateJob = (workflow) => {\r\n let v = true;\r\n if(this.state.isJobForMe == 0) {\r\n\r\n const { address, budget, latitude, location, longitude, placeId, propertyType, suburbId} = this.state.jobForMe;\r\n const { selectedService, selectedServiceType, formData, jobBudget, selectedTradees, isSelectedOnDemand, inviteToProviders } = this.state;\r\n if(address == '') {this.notifyError('Please enter your address.'); v = v && false; };\r\n if(suburbId == '') {this.notifyError('Please enter a valid address.'); v = v && false; };\r\n if(propertyType == '') {this.notifyError('Please select your property type.'); v = v && false; };\r\n\r\n if (selectedService && selectedService.parentJobType) {\r\n if (selectedServiceType && selectedServiceType.parentJobType && selectedServiceType.parentJobType.id != '') {\r\n if (selectedServiceType.childJobTypes.length > 0 && (!formData.childJobType || formData.childJobType === '')) {\r\n this.notifyError(`Please select ${selectedServiceType.parentJobType.description.replace('?', '')} that you need.`); v = v && false;\r\n }\r\n } else {\r\n this.notifyError('Please select a type of service.'); v = v && false;\r\n }\r\n } else {\r\n this.notifyError('Please select a service.'); v = v && false;\r\n }\r\n\r\n if(jobBudget == '') {this.notifyError('Please select your estimate.'); v = v && false; };\r\n if(jobBudget == '-999' && (this.budgetRef.current.value == '' || this.budgetRef.current.value == 0)) {this.notifyError('Please enter your estimate.'); v = v && false; };\r\n\r\n if(isSelectedOnDemand) {\r\n if(selectedTradees.length == 0) {this.notifyError('Please select one or more trades to progress.'); v = v && false;}\r\n } else {\r\n if(!inviteToProviders) {this.notifyError('Please select one or more trades to progress.'); v = v && false;}\r\n }\r\n } else {\r\n if(this.state.formData.propertyId == 0 || this.state.formData.propertyId == undefined){\r\n if(this.state.locationDetails.address == '' || this.state.locationDetails.address == undefined) {this.notifyError('Please enter your address.'); v = v && false; }\r\n if(this.refs.jobPropertyTypes.props.value == undefined) {this.notifyError('Please select your property type.'); v = v && false; }\r\n } \r\n if (this.state.formData.propertyName === '') { this.notifyError('Please select a property.'); v = v && false; };\r\n if (this.state.selectedService && this.state.selectedService.parentJobType) {\r\n if (!this.state.isSubServiceTypeSelected) {\r\n this.notifyError(`Please select type of sub service.`); v = v && false;\r\n }\r\n if (this.state.selectedServiceType && this.state.selectedServiceType.parentJobType) {\r\n if (this.state.selectedServiceType.childJobTypes && this.state.selectedServiceType.childJobTypes.length > 0 && (!this.state.formData.childJobType || this.state.formData.childJobType === '')) {\r\n this.notifyError(`Please select ${this.state.selectedServiceType.parentJobType.description.replace('?', '')} that you need.`); v = v && false;\r\n }\r\n } else {\r\n this.notifyError('Please select a type of service.'); v = v && false;\r\n }\r\n } else {\r\n this.notifyError('Please select a service.'); v = v && false;\r\n }\r\n if (document.querySelector('input[name=propertyKey]:checked') == null) { this.notifyError('Please select property key collection method.'); v = v && false; }\r\n if (workflow != 1 && localStorage.userType != 5 && this.state.isMandatoryToUploadFiles && this.state.attachments.length < 1) { this.notifyError('Attachments are required.'); v = v && false; }\r\n \r\n }\r\n \r\n if (this.title.current.value === '') { this.notifyError('Please enter a job title.'); v = v && false; }\r\n if (this.jobDescription.current.value === '') { this.notifyError('Please enter a job description.'); v = v && false; }\r\n if (this.refs.jobUrgency.props.value == undefined) { this.notifyError('Please select job urgency.'); v = v && false; }\r\n if (this.refs.jobUrgency.props.value == -999 && this.state.dueDate == '') { this.notifyError('Please select a due date.'); v = v && false; }\r\n if (this.state.formData.propertyType == '') { this.notifyError('Please select property type.'); v = v && false; }\r\n \r\n return v;\r\n }\r\n\r\n onSubmitJob = (workflow) => { \r\n if (this.validateJob(workflow)) {\r\n if(this.state.isJobForMe == 0 || workflow == 1) {\r\n this.postJob(workflow);\r\n } else {\r\n this.loadDisclaimer(workflow);\r\n }\r\n }\r\n }\r\n\r\n loadDisclaimer = (workflow) => {\r\n this.setState({\r\n isLoading : true\r\n });\r\n propertyService.GetDisclaimerByPropertyId(this.state.formData.propertyId).then(res => {\r\n this.setState({\r\n isLoading : false\r\n });\r\n if(res !== null && res !== '') {\r\n this.setState({ \r\n showDisclaimerDrawer: true,\r\n disclamimerText: res,\r\n jobPostWorkflowStatus: workflow\r\n });\r\n } else {\r\n this.postJob(workflow);\r\n }\r\n });\r\n }\r\n\r\n closeDisclaimer = () => {\r\n this.setState({ \r\n showDisclaimerDrawer: false,\r\n });\r\n }\r\n\r\n postJob = (workflow) => {\r\n const workflowId = workflow;\r\n let jobDetails = {};\r\n if(this.state.isJobForMe == 0) { \r\n\r\n const { address, budget, latitude, location, longitude, placeId, propertyType, suburbId} = this.state.jobForMe;\r\n const { selectedService, selectedServiceType, formData, jobBudget, selectedTradees, isSelectedOnDemand, selectedQuoteLimit } = this.state; \r\n\r\n jobDetails.propertyId = null;\r\n jobDetails.suburbId = suburbId;\r\n jobDetails.address = address;\r\n jobDetails.location = location;\r\n jobDetails.jobPropertyTypes = propertyType;\r\n if (jobDetails.jobPropertyTypes === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n } else {\r\n jobDetails.propertyTypeId = 1;\r\n }\r\n jobDetails.budgetId = parseInt(jobBudget);\r\n if(jobBudget == '-999') {\r\n jobDetails.budgetAmount = this.budgetRef.current.value;\r\n }\r\n if(isSelectedOnDemand) {\r\n jobDetails.targetedTradeeOption = 4;\r\n jobDetails.sendInvitationtoAll = false;\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n let tradees = [];\r\n selectedTradees.forEach(element => {\r\n tradees.push({\r\n isAssigned: true,\r\n userId: element.userId,\r\n name: element.name,\r\n email: element.email,\r\n firstName: element.name,\r\n lastName: element.name,\r\n });\r\n });\r\n jobDetails.tradees = tradees;\r\n } else {\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n jobDetails.targetedTradeeOption = 0;\r\n jobDetails.sendInvitationtoAll = true;\r\n jobDetails.tradees = [];\r\n }\r\n } else {\r\n if(this.state.formData.propertyId == 0 || this.state.formData.propertyId == undefined){\r\n jobDetails.propertyId = null;\r\n jobDetails.suburbId = this.state.locationDetails.suburbId;\r\n jobDetails.address = this.state.locationDetails.address;\r\n jobDetails.jobPropertyTypes = this.refs.jobPropertyTypes.props.value;\r\n if (jobDetails.jobPropertyTypes === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n } else {\r\n jobDetails.propertyTypeId = 1;\r\n }\r\n } else {\r\n jobDetails.propertyId = this.state.formData.propertyId;\r\n jobDetails.address = this.state.formData.address;\r\n jobDetails.location = this.state.formData.location;\r\n jobDetails.propertyName = this.state.formData.propertyName;\r\n jobDetails.suburbId = this.state.formData.suburbId;\r\n if (this.state.formData.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n } else {\r\n jobDetails.propertyTypeId = 1;\r\n }\r\n jobDetails.jobPropertyTypes = this.state.formData.propertyType;\r\n }\r\n jobDetails.propertyKeyCollectType = parseInt(document.querySelector('input[name=propertyKey]:checked').value);\r\n }\r\n jobDetails.id = this.props.jobId;\r\n jobDetails.secondaryJobType = this.state.selectedServiceType.parentJobType.id;\r\n jobDetails.secondaryJobTypeDisplay = this.state.selectedServiceType.parentJobType.title;\r\n jobDetails.primaryJobType = this.state.selectedService.parentJobType.id;\r\n jobDetails.primaryJobTypeDisplay = this.state.selectedService.parentJobType.title;\r\n jobDetails.jobPropertyLocks = this.state.propertyLocks.map((item, index) => {\r\n const jobLock = {};\r\n jobLock.jobId = null;\r\n jobLock.propertyLock = {};\r\n jobLock.propertyLock.id = item.id;\r\n jobLock.propertyLock.lockId = item.lockId;\r\n jobLock.propertyLock.propertyId = jobDetails.propertyId;\r\n return jobLock;\r\n });\r\n\r\n if (this.state.formData.childJobTypeId.trim() != \"\") {\r\n jobDetails.jobType = this.state.formData.childJobTypeId;\r\n }\r\n else{\r\n jobDetails.jobType = this.state.selectedServiceType.parentJobType.id;;\r\n }\r\n \r\n jobDetails.jobTypeDisplay = this.state.formData.childJobType;\r\n jobDetails.title = this.title.current.value;\r\n jobDetails.description = this.jobDescription.current.value;\r\n jobDetails.jobUrgencyId = parseInt(this.refs.jobUrgency.props.value);\r\n \r\n jobDetails.dueDate = (!this.state.dueDate) ? null : this.state.dueDate;\r\n // jobDetails.JobUrgencyDisplay = this.refs.jobUrgency.props.value;\r\n jobDetails.jobValidityPeriod = 1;\r\n jobDetails.serviceConsumerId = localStorage.getItem('userId');\r\n \r\n jobDetails.workflowStatusId = workflow === 1 ? 1 : 2;\r\n jobDetails.attachments = this.state.attachments;\r\n jobDetails.isActive = true;\r\n this.setState({isJobPosting: true})\r\n try {\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/job-post`, jobDetails, {\r\n 'headers': { 'ClientSecret': AppConfiguration.Setting().ClientSecret }})\r\n .then(dataJson => {\r\n this.setState({isJobPosting: false})\r\n const message = workflowId === 1 ? 'drafted' : 'posted'\r\n if(dataJson == 'Request Unauthorized' || dataJson == 'Job creation failed'){\r\n toast.error(`Job is not ${message} successfully. Please try again.`,{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n } else {\r\n toast.success(`Job is ${message} successfully.`,{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n let { history } = this.props;\r\n history.push({ pathname: '/'});\r\n this.props.closeJobPostDrawer();\r\n this.setState({\r\n attachments: [], \r\n value:'', \r\n isShowMoreServices: false,\r\n showDisclaimerDrawer: false,\r\n jobPostWorkflowStatus: 1\r\n })\r\n }\r\n }, error => {\r\n console.log(error);\r\n this.setState({isJobPosting: false});\r\n toast.error(`Fail to post the job. Please try again.`,{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n })\r\n )\r\n \r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n getPropertyDetailsByPropertyId = (propertyId) => {\r\n const selectedProperty = this.state.propertyList.filter(a => a.propertyId == propertyId);\r\n if(selectedProperty && selectedProperty.length > 0 && selectedProperty[0].propertyId != null) {\r\n this.setState({\r\n propertyId: propertyId,\r\n locationDetails: {},\r\n formData: {\r\n address: selectedProperty[0].address,\r\n location: selectedProperty[0].location,\r\n propertyId: selectedProperty[0].propertyId,\r\n propertyName: selectedProperty[0].propertyName,\r\n suburbId: selectedProperty[0].suburbId,\r\n propertyType: selectedProperty[0].propertyType\r\n }\r\n });\r\n this.getOrganizationSettings(selectedProperty[0].orgnizationId);\r\n } else {\r\n this.setState({\r\n propertyId: null,\r\n locationDetails: {},\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: null,\r\n propertyName: '',\r\n suburbId: null,\r\n propertyType: ''\r\n }\r\n });\r\n }\r\n setTimeout(() => {\r\n if(this.state.isJobForMe == 1) {\r\n document.getElementById('check1').checked = true;\r\n this.setState({keyCollectType: 1});\r\n } \r\n }, 500);\r\n }\r\n\r\n handleResultSelect = (e, { result }) => {\r\n this.setState({ value: result.label })\r\n this.getChildJobTypes(result.id);\r\n }\r\n handleSearchChange = (e, { value }) => {\r\n this.setState({filteredResults: [], value });\r\n if(value.length > 2) {\r\n this.setState({ isLoading: true })\r\n setTimeout(() => {\r\n document.querySelector('.jobpost-main-details .auto-complete').classList.remove(\"hide-results\");\r\n this.setState({\r\n isLoading: false,\r\n filteredResults: this.state.parentJobTypes.filter(suggestion => suggestion.label.toLowerCase().indexOf(this.state.value.toLowerCase()) > -1)\r\n })\r\n }, 300)\r\n } else {\r\n document.querySelector('.jobpost-main-details .auto-complete').classList.add(\"hide-results\");\r\n }\r\n }\r\n\r\n resultRenderer = (event) => {\r\n return \r\n }\r\n\r\n handlePropertyChange = (event, props) => {\r\n this.setState({ property: props.value });\r\n this.getPropertyDetailsByPropertyId(props.value);\r\n }\r\n\r\n setLocationDetails = (event) => {\r\n this.setState({ \r\n locationDetails: event, \r\n jobForMe: {\r\n propertyType: '',\r\n address: event.address,\r\n latitude: event.latitude,\r\n location: event.location,\r\n longitude: event.longitude,\r\n placeId: event.placeId,\r\n suburbId: event.suburbId,\r\n },\r\n });\r\n }\r\n\r\n onChangeJobType = (value) => {\r\n if(value === 1){\r\n this.setState({isJobForMeText :

You (tenant) will be paying for this job and are responsible

for all costs involved.

This job is not being sent to your property manager.

});\r\n } else {\r\n this.setState({isJobForMeText : ''});\r\n }\r\n \r\n this.setState({\r\n isJobForMe: this.refs.jobType.props.value,\r\n jobForMe: {\r\n propertyType: '',\r\n address: '',\r\n latitude: '',\r\n location: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n budget: ''\r\n },\r\n });\r\n }\r\n\r\n onChangePropertyTypeForMe = (event) => {\r\n let jobforMe = this.state.jobForMe;\r\n jobforMe.propertyType = event;\r\n this.setState({ jobForMe: jobforMe });\r\n\r\n let formdata = this.state.formData;\r\n formdata.propertyType = event;\r\n this.setState({ formdata: formdata });\r\n }\r\n\r\n onKeyCollectionChange = (event) => {\r\n this.setState({\r\n keyCollectType: event.currentTarget.value\r\n });\r\n }\r\n\r\n createBody = () => {\r\n const { isLoading, value, propertyList, filteredResults, propertyId, isPropertiesLoading, isJobForMe, jobForMe } = this.state\r\n if(this.props.drawerOpen){\r\n let serviceTypes = this.createTypeOfServicesButtons();\r\n let serviceTypeChild = this.createTypeOfServicesChildButtons();\r\n // const attachmentlist = this.getUploadedAttachments();\r\n const dueDate = this.getDueDate();\r\n const forMeText = this.state.isJobForMeText\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n { this.onChangeJobType(value) }}>\r\n Property Manager\r\n Job I will Pay For\r\n \r\n \r\n
\r\n {forMeText}\r\n
\r\n
\r\n {(isJobForMe == 1) ? \r\n
\r\n \r\n
\r\n { return { key: index, text: a.propertyName, value: a.propertyId }; })}\r\n placeholder='Choose a Property'\r\n onChange={this.handlePropertyChange}\r\n />\r\n
\r\n
: ''}\r\n
\r\n \r\n {(propertyId == 0 || isJobForMe == 0) ? \r\n this.setLocationDetails(event)}>: \r\n }\r\n
\r\n \r\n
\r\n \r\n {propertyId == 0 || isJobForMe == 0 ? \r\n : }\r\n \r\n
\r\n \r\n
\r\n \r\n {(isJobForMe == 0) ?\r\n \r\n \r\n Residential\r\n Commercial\r\n \r\n :\r\n \r\n {}}>\r\n Residential\r\n Commercial\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 {(this.state.isShowMoreServices) ? \r\n
\r\n \r\n \r\n
: \r\n \r\n \r\n }\r\n {serviceTypes}\r\n {serviceTypeChild}\r\n
\r\n
\r\n \r\n \r\n \r\n Urgently\r\n Within a few days\r\n Within a week\r\n By this date\r\n \r\n \r\n
\r\n {dueDate}\r\n {(isJobForMe == 0) ? \r\n
\r\n \r\n \r\n \r\n Under $500\r\n $500 - $1000\r\n $1000 - $2000\r\n $2000 - $5000\r\n $5000+\r\n Unsure\r\n Custom\r\n \r\n \r\n
: ''}\r\n
\r\n this.onBlurBudgetAmount(e)}>\r\n \r\n
\r\n { (isJobForMe == 0) ? '' : \r\n
\r\n \r\n {(this.state.isRestrictKeyCollectionForResidentialProperties && this.state.formData.propertyType == 'Residential') ? \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 (isJobForMe != 0 \r\n && this.state.keyCollectType != null \r\n && (this.state.keyCollectType == 1 || this.state.keyCollectType == 2)) ?\r\n this.onPropertyKeySelected(event)}>\r\n : ''\r\n }\r\n \r\n { this.setState( { attachments: event } ) }} \r\n isJobPost={true}> \r\n \r\n\r\n {(isJobForMe == 0) ? \r\n this.onAttachTradeesToTheJob(event)}\r\n selectedTradees={this.state.selectedTradees}> \r\n : ''}\r\n {(this.state.showDisclaimerDrawer==true) ?\r\n this.postJob(event)}\r\n onCloseDisclaimer = {() => this.closeDisclaimer()}\r\n isFromBot={false}\r\n >: ''\r\n }\r\n\r\n
\r\n \r\n
\r\n {(this.state.attachments) ? \r\n : ''\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n }\r\n\r\n onPropertyKeySelected = (event) => {\r\n this.setState({ propertyLocks: event });\r\n console.log(event);\r\n }\r\n\r\n onBlurBudgetAmount = (event) => {\r\n if(event.target.value < 1) {\r\n this.budgetRef.current.value = 1;\r\n }\r\n }\r\n\r\n validateBeforeInviteTradee = () => {\r\n var v = true;\r\n if(this.state.jobForMe.address == '') { this.notifyError('Please enter your address.'); v = v && false; }\r\n if (this.state.selectedService && this.state.selectedService.parentJobType) {\r\n if (this.state.selectedServiceType && this.state.selectedServiceType.parentJobType && this.state.selectedServiceType.parentJobType.id != '') {\r\n if (this.state.selectedServiceType.childJobTypes.length > 0 && (!this.state.formData.childJobType || this.state.formData.childJobType === '')) {\r\n this.notifyError(`Please select ${this.state.selectedServiceType.parentJobType.description.replace('?', '')} that you need.`); v = v && false;\r\n }\r\n } else {\r\n this.notifyError('Please select a type of service.'); v = v && false;\r\n }\r\n } else {\r\n this.notifyError('Please select a service.'); v = v && false;\r\n }\r\n\r\n return v;\r\n }\r\n\r\n onChangeJobBudget = (value) => {\r\n this.setState({ jobBudget: value }); \r\n }\r\n\r\n handleJobUrgencyOnChange = (value) => {\r\n this.setState({ jobUrgency: value }); \r\n }\r\n\r\n getDueDate = () =>{\r\n if (this.state.jobUrgency == -999) {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n }\r\n\r\n handleDueDateChange = (date) => {\r\n this.setState({\r\n dueDate: date, // ISO String, ex: \"2016-11-19T12:00:00.000Z\"\r\n });\r\n }\r\n\r\n getUploadedAttachments = () => {\r\n if (this.state.attachments) {\r\n const uploadedFiles = this.state.attachments.map(uploadedFile => {\r\n return (\r\n
\r\n {uploadedFile.fileName}{e.target.onerror = null; e.target.src=\"/Images/attachment.png\"}} />\r\n
\r\n )\r\n })\r\n return (\r\n
\r\n {uploadedFiles}\r\n
\r\n );\r\n }\r\n }\r\n\r\n handleInit = () => {}\r\n\r\n createFooter = () => {\r\n return (\r\n <>\r\n
\r\n\r\n \r\n \r\n {/* */}\r\n \r\n\r\n {/* {this.props.footerButtons} */}\r\n\r\n
\r\n \r\n )\r\n }\r\n\r\n getAllAvailableJobTypes() {\r\n let jobTypes = this.props.jobTypes;\r\n let parents = _.map(jobTypes ,m => m.parentJobType );\r\n const parentJobTypes = _.filter(parents, f => f.parentRef === null);\r\n this.setState({ parentJobTypes: parentJobTypes});\r\n }\r\n\r\n getChildJobTypes(parentId) {\r\n let jobTypes = this.props.jobTypes;\r\n let selectedNode = _.find(jobTypes, f => f.parentJobType.id === parentId);\r\n if (this.state.selectedServiceType && this.state.selectedServiceType.parentJobType && _.find(selectedNode.childJobTypes, f => f.id === this.state.selectedServiceType.parentJobType.id)) {\r\n this.setState({\r\n primaryJobTypes: selectedNode.childJobTypes,\r\n selectedService: selectedNode\r\n });\r\n } else {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: '',\r\n\r\n }\r\n this.setState({\r\n primaryJobTypes: selectedNode.childJobTypes,\r\n selectedService: selectedNode,\r\n secondaryJobTypes: [],\r\n selectedServiceType: {\r\n parentJobType: { id: '' }\r\n },\r\n formData: formData2\r\n });\r\n }\r\n }\r\n\r\n getSubChildJobTypes(parentId) {\r\n this.setState({isSubServiceTypeSelected:true});\r\n let jobTypes = this.props.jobTypes;\r\n let selectedNode = _.find(jobTypes, f => f.parentJobType.id === parentId);\r\n if(selectedNode == undefined) {\r\n let selectedServiceType = {\r\n childJobTypes: [],\r\n parentJobType: _.find(this.state.primaryJobTypes, f => f.id === parentId)\r\n }\r\n let formData1 = {...this.state.formData, childJobType: '',\r\n childJobTypeId: ''};\r\n this.setState({ \r\n secondaryJobTypes: [],\r\n selectedServiceType: selectedServiceType,\r\n formData: formData1\r\n });\r\n \r\n } else {\r\n let formData2 = {...this.state.formData, childJobType: '',\r\n childJobTypeId: ''};\r\n this.setState({ \r\n secondaryJobTypes: selectedNode.childJobTypes,\r\n selectedServiceType: selectedNode,\r\n formData: formData2\r\n });\r\n }\r\n \r\n }\r\n\r\n //#region Available service types Childs Methods\r\n\r\n createTypeOfServicesChildButtons = (props) => {\r\n if (this.state.secondaryJobTypes.length > 0) {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n {this.state.secondaryJobTypes.map((jbType, index) => {\r\n return {jbType.label};\r\n })}\r\n \r\n \r\n
\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n\r\n }\r\n\r\n onChangeChildTypeOfServices = (input) => {\r\n const childJobType = this.state.selectedServiceType.childJobTypes.filter(a => a.id === input)[0];\r\n let formData = this.state.formData;\r\n formData.childJobTypeId = childJobType.id;\r\n formData.childJobType = childJobType.title;\r\n this.setState({formData: formData});\r\n }\r\n\r\n //#endregion Available service types Childs Methods\r\n\r\n //#region Available service types Methods\r\n\r\n createTypeOfServicesButtons = (props) => {\r\n let isServiceTypeSelected = this.state.isServiceTypeSelected;\r\n if (this.state.selectedService.childJobTypes) {\r\n return (\r\n <>\r\n
\r\n {(isServiceTypeSelected) ? \r\n : ''}\r\n \r\n \r\n { this.getSubChildJobTypes(event); }}>\r\n {this.state.selectedService.childJobTypes.map((jbType, index) => {\r\n return {jbType.label};\r\n })}\r\n \r\n \r\n
\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n }\r\n\r\n onChangeTypeOfServices = (event) => {\r\n try {\r\n this.setState({ isLoading: true })\r\n AXIOS.GET(`tenant-api/job-sub-types?parentRef=${event}`)\r\n .then(dataJson => {\r\n this.setState({ isLoading: false })\r\n this.setState({ selectedServiceType: dataJson });\r\n let formData = this.state.formData;\r\n formData.childJobTypeId = '';\r\n formData.childJobType = '';\r\n this.setState({formData: formData});\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n\r\n //#endregion Available service types Methods\r\n\r\n //#region Frequently UsedJob Types\r\n\r\n GetFrequentlyUsedJobTypes = () => {\r\n try {\r\n jobService.GetFrequentlyUsedJobTypes()\r\n .then(data => {\r\n this.setState({ frequentlyUsedServices: data});\r\n })\r\n \r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n onSelectFrequentlyUsedJobTypes = (event) => { \r\n try {\r\n this.setState({ isServiceTypeSelected: true });\r\n this.getChildJobTypes(event);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n showHideMoreService = () => {\r\n this.setState({\r\n isShowMoreServices: !this.state.isShowMoreServices,\r\n selectedService: {},\r\n isServiceTypeSelected: true\r\n })\r\n }\r\n\r\n //#endregion Frequently UsedJob Types\r\n\r\n //#region Available services AutoComplete Methods\r\n\r\n getAvailableServices = () => {\r\n try {\r\n this.setState({ isLoading: true })\r\n AXIOS.GET(`tenant-api/available-job-types?userId=${localStorage.getItem('userId')}`)\r\n .then(dataJson => {\r\n this.setState({ isLoading: false })\r\n this.setState({ availableServicesDetails: dataJson });\r\n this.setState({ availableServices: dataJson });\r\n let formData = this.state.formData;\r\n formData.childJobTypeId = '';\r\n formData.childJobType = '';\r\n this.setState({formData: formData});\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n onChangeServiceAutoComplete = (userInput) => {\r\n const filteredJobTypes = this.state.availableServicesDetails.filter(a => a.label.toLowerCase().indexOf(userInput.toLowerCase()) > -1);\r\n this.setState({ availableServices: filteredJobTypes});\r\n }\r\n\r\n onSelectServiceAutoComplete = (data) => {\r\n if(data != null){\r\n this.setState({ isLoading: true })\r\n try {\r\n AXIOS.GET(`tenant-api/job-sub-types?parentRef=${data.value}`)\r\n .then(dataJson => {\r\n this.setState({ isLoading: false })\r\n this.setState({ selectedService: dataJson , selectedServiceType : {}});\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n }\r\n\r\n //#endregion Available services AutoComplete Methods\r\n\r\n //#region Available Properties AutoComplete Methods\r\n\r\n onChangePropertyAutoCompelete = (userInput) => {\r\n try {\r\n fetch( corsProxy + `https://bnaancillarytest.azurewebsites.net/general/search?userId=a0ae4466-9188-4907-a864-73b6afeca5d9&type=1&searchKey=${userInput}`)\r\n .then(res => res.json())\r\n .then(dataJson => {\r\n this.setState({ \r\n propertySearchData: dataJson.properties,\r\n formData: {\r\n address: this.state.formData.address,\r\n location: this.state.formData.location,\r\n propertyId: this.state.formData.id,\r\n propertyName: this.state.formData.propertyName,\r\n suburbId: this.state.formData.suburbId,\r\n }\r\n });\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n onSelectPropertyAutoComplete = (data) => {\r\n if(data == null) {\r\n this.setState({\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: '',\r\n propertyName: '',\r\n suburbId: ''\r\n }\r\n })\r\n } else {\r\n this.setState({\r\n propertySearchData: this.setState.propertySearchData,\r\n formData: {\r\n address: data.address,\r\n location: data.location,\r\n propertyId: data.id,\r\n propertyName: data.propertyName,\r\n suburbId: data.suburbId\r\n }\r\n })\r\n }\r\n \r\n }\r\n //#endregion Available Properties AutoComplete Methods\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n return {\r\n jobTypes: state.Jobs.jobTypes,\r\n dateFormat: state.User.dateFormat,\r\n userRoles: state.User.userRoles,\r\n properties: state.Tenant.tenantProperties\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n \r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateProperties: properties => {\r\n dispatch({ type: \"SET_PROPERTIES\", properties: properties });\r\n },\r\n };\r\n };\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(JobPostDrawer));","import React from 'react';\r\nimport {Link} from 'react-router-dom'\r\nimport { UserType } from '../../../Constants/Enums';\r\nclass TopNavigationBar extends React.Component {\r\n constructor(props) {\r\n super(props); \r\n this.closeNavigation = this.closeNavigation.bind(this);\r\n }\r\n\r\n closeNavigation = () => {\r\n this.props.closeNav();\r\n }\r\n \r\n render() {\r\n const isTenantManage = localStorage.getItem('styleCode')==\"JLL\";\r\n const { pathname,host } = this.props;\r\n const userType = localStorage.getItem(\"userType\") == UserType.Owner ? \"/owner\" : \"/tenant\";\r\n return (\r\n
    \r\n
  • -1 ? 'active' : ''}`}>\r\n -1 ? 'active' : ''}`}>Home\r\n
  • \r\n
  • -1 ? 'active' : ''}`}>\r\n -1 ? 'active' : ''}`}>Items for Review\r\n
  • \r\n
  • -1 ? 'active' : ''}`}>\r\n -1 ? 'active' : ''}`}>Maintenance Requests\r\n
  • \r\n {(userType ==\"/owner\")?\r\n
  • -1 ? 'active' : ''}`}>\r\n -1 ? 'active' : ''}`}>All Maintenance Requests\r\n
  • :''\r\n }\r\n {(userType==\"/tenant\" && !isTenantManage)?\r\n
  • -1 ? 'active' : ''}`}>\r\n -1 ? 'active' : ''}`}>Property Access Controls\r\n
  • :''\r\n }\r\n {!isTenantManage?\r\n
  • -1 ? 'active' : ''}`}>\r\n -1 ? 'active' : ''}`}>Inspections\r\n
  • :\"\"}\r\n \r\n {!isTenantManage?\r\n
  • -1 ? 'active' : ''}`}>\r\n -1 ? 'active' : ''}`}>Documents\r\n
  • :\"\"}\r\n \r\n
  • -1 ? 'active' : ''}`}>\r\n -1 ? 'active' : ''}`}>Settings\r\n
  • \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default TopNavigationBar;","import React, { Component } from \"react\";\r\nimport SideNav from \"./SideNav\";\r\nimport ProfileDropDown from \"./ProfileDropDown\";\r\n\r\n//#region [IMPORT FONT AWESOME COMPONENTS]\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faHeadset, faCommentAlt, faSignOutAlt, faArrowAltCircleRight } from '@fortawesome/free-solid-svg-icons';\r\n//#endregion\r\nimport { usePromiseTracker } from \"react-promise-tracker\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport { Navbar } from \"react-bootstrap\";\r\nimport { Button } from \"react-bootstrap\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport { Guid } from \"guid-typescript\";\r\n\r\n\r\nimport ChatDrawer from \"../Drawers/ChatDrawer/ChatDrawer\";\r\nimport ChatBoxContainer from \"../Common/ChatBoxContainer/ChatBoxContainer\";\r\nimport googleAnalyticsService from \"../../Services/GoogleAnalyticsService\"\r\nimport { connect } from \"react-redux\";\r\nimport { UserType } from '../../Constants/Enums';\r\nimport chatService from \"../../Services/ChatService\";\r\nimport JobPostDrawer from \"../Drawers/JobPostDrawer/JobPostDrawer\";\r\nimport notificationService from \"../../Services/NotificationService\";\r\nimport propertyService from \"../../Services/PropertyService\";\r\nimport TopNavigationBar from \"./TopNavigationBar/TopNavigationBar\"\r\n//import log from '../External/LogMaintenanceBot/BricksAndAgentMaintenanceBot.js';\r\nclass Layout extends Component {\r\n state = {\r\n mainMarginLeft: 0,\r\n showJobPostDrawer: false,\r\n showChatDrawer: false,\r\n showChatHelper: false,\r\n jobId: '',\r\n navExpanded: false,\r\n styleCode:''\r\n };\r\n\r\n host = '';\r\n\r\n componentDidMount() {\r\n this.GetTenantPropertiesByUserId();\r\n let endPoint = AppConfiguration.Setting().BAndAApiEndPoint;\r\n endPoint = endPoint.charAt(endPoint.length - 1) == '/' ? endPoint : `${endPoint}/`;\r\n this.host = endPoint;\r\n }\r\n componentWillMount() {\r\n if(localStorage.getItem('styleCode') === \"JLL\" || localStorage.getItem('styleCode') === \"jll\") {\r\n import('./JLL/Layout.scss');\r\n } else {\r\n import('./Layout.scss');\r\n }\r\n }\r\n trackGoogleAnalytics = location => {\r\n if (location != null) {\r\n googleAnalyticsService.sendPageStatsViaStringToGoogle(location.pathname, \"\", \"\");\r\n }\r\n\r\n };\r\n\r\n setNavExpanded = (value) => {\r\n this.setState({ navExpanded: value });\r\n }\r\n\r\n closeNav = () => {\r\n this.setState({ navExpanded: false });\r\n }\r\n\r\n render() {\r\n this.trackGoogleAnalytics(this.props.location);\r\n const LoadingIndicator = props => {\r\n const { promiseInProgress } = usePromiseTracker();\r\n return (\r\n promiseInProgress && (\r\n
\r\n \r\n
\r\n )\r\n );\r\n };\r\n\r\n let logoUrl=\"\";\r\n if(localStorage.getItem('styleCode')===\"JLL\"){\r\n // logoUrl = this.host + \"Images/Jll/app-logo-new.svg\"; \r\n logoUrl = \"Images/Jll/app-logo-new.svg\";\r\n } else{\r\n logoUrl = \"Images/app-logo.svg\";\r\n }\r\n \r\n\r\n // const postJob = this.openPostJobDrawer(false);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \"Bricks\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 {this.props.children}\r\n \r\n
\r\n
\r\n {(this.state.showJobPostDrawer) ?\r\n : ''}\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n GetTenantPropertiesByUserId = () => {\r\n this.setState({ isPropertiesLoading: true })\r\n propertyService.GetTenantPropertiesByUserId()\r\n .then((res) => {\r\n this.props.updateProperties(res.properties);\r\n })\r\n }\r\n\r\n onClickLogout = () => {\r\n chatService.updateUserActiveStatus(localStorage.getItem(\"userIdDecripted\"), false);\r\n localStorage.setItem('userId', null);\r\n localStorage.setItem('userType', null);\r\n let endPoint = localStorage.getItem('styleCode').toUpperCase()===\"JLL\" ?AppConfiguration.Setting().JllBaseUrl : AppConfiguration.Setting().BAndAApiEndPoint;\r\n endPoint = endPoint.charAt(endPoint.length - 1) == '/' ? endPoint : `${endPoint}/`;\r\n window.location.href = endPoint + 'tenant-api/log-off';\r\n window.location.href = endPoint + 'Account/UserLogin';\r\n }\r\n\r\n onClickSupport = () => {\r\n this.closeNav();\r\n if (this.state.showChatHelper) {\r\n window.Intercom('hide');\r\n } else {\r\n window.Intercom('show');\r\n }\r\n this.setState({ showChatHelper: !this.state.showChatHelper })\r\n }\r\n\r\n openPostJobDrawer = () => {\r\n this.setState({ showJobPostDrawer: true });\r\n this.setState({\r\n jobId: Guid.create().toString(),\r\n });\r\n googleAnalyticsService.sendEventStatsToGoogle(\"View\", \"Button click\", \"Post a Job\");\r\n\r\n };\r\n\r\n toggleNotificationDrawer = () => {\r\n let chatDrawerStatus = this.state.showChatDrawer == false ? \"Open\" : \"Close\";\r\n this.setState({ showChatDrawer: !this.state.showChatDrawer });\r\n googleAnalyticsService.sendEventStatsToGoogle(\"View\", \"Button click\", `${chatDrawerStatus} Chat Drawer`);\r\n\r\n if (this.state.showChatDrawer) {\r\n notificationService.ClearUserUnreadNotifications();\r\n\r\n }\r\n }\r\n\r\n toggleChatDrawer = () => {\r\n\r\n console.log()\r\n let chatDrawerStatus = this.state.showChatDrawer == false ? \"Open\" : \"Close\";\r\n this.setState({ showChatDrawer: !this.state.showChatDrawer });\r\n googleAnalyticsService.sendEventStatsToGoogle(\"View\", \"Button click\", `${chatDrawerStatus} Chat Drawer`);\r\n };\r\n\r\n hideJobPost = () => {\r\n setTimeout(() => {\r\n this.setState({ showJobPostDrawer: false });\r\n }, 500);\r\n googleAnalyticsService.sendEventStatsToGoogle(\"Cancel\", \"Button click\", \"Post a Job\");\r\n };\r\n\r\n // onSideNaveExpand = isExpanded => {\r\n // var marginCalculated = isExpanded ? 240 : 55;\r\n // this.setState({ mainMarginLeft: marginCalculated });\r\n // };\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n let userDetails = state.User\r\n return {\r\n isCurrentTenant: state.Tenant.isCurrentTenant,\r\n userDetails: userDetails\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateProperties: properties => {\r\n dispatch({ type: \"SET_PROPERTIES\", properties: properties });\r\n },\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Layout);\r\n","import React, { SetState } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nfunction TextInput(props) {\r\n\r\n // const [textValue, setTextValue] = SetState();\r\n let wrapperClass = \"form-group\";\r\n if (props.error.length > 0) {\r\n wrapperClass += \" has-error\";\r\n }\r\n\r\n // if (props.value != undefined || props.value != null) {\r\n // setTextValue(props.value);\r\n // }\r\n\r\n return (\r\n
\r\n \r\n
\r\n { setTextValue(event.target.value); props.value = textValue; }}\r\n onChange={props.onChange}\r\n name={props.name}\r\n className=\"form-control\"\r\n value={props.value}\r\n />\r\n \r\n
\r\n {props.error &&
{props.error}
}\r\n
\r\n );\r\n}\r\n\r\nTextInput.propTypes = {\r\n id: PropTypes.string.isRequired,\r\n name: PropTypes.string.isRequired,\r\n label: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired,\r\n value: PropTypes.string,\r\n error: PropTypes.string\r\n};\r\n\r\nTextInput.defaultProps = {\r\n error: \"\"\r\n};\r\n\r\nexport default TextInput;\r\n","import React, { Component } from \"react\";\r\n\r\n\r\nclass UploadProfilePicture extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n\r\n render() {\r\n return (\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

Add Image

\r\n

Drop image here to upload

\r\n

(.jpg, .jpeg, .png, .bmp, .gif)

\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\nexport default UploadProfilePicture;\r\n","import React, { useState } from 'react';\r\nimport { connect } from 'react-redux';\r\n// Plugins\r\nimport { AXIOS } from '../../../Utilities/HttpRequest/Axios';\r\nimport { registerPlugin, FilePond } from 'react-filepond';\r\nimport FilePondPluginImageExifOrientation from 'filepond-plugin-image-exif-orientation';\r\nimport FilePondPluginImagePreview from 'filepond-plugin-image-preview';\r\nimport 'filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css';\r\n\r\n// Components \r\nimport Drawer from '../../Common/Drawer/Drawer';\r\n\r\n// App Settings\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\n\r\n// Styles\r\nimport './ProfilePicUploadDrawer.scss';\r\n\r\nregisterPlugin(FilePondPluginImageExifOrientation, FilePondPluginImagePreview);\r\nclass ProfilePicUploadDrawer extends React.Component {\r\n state = {\r\n profileImageUrl: '',\r\n showAttachmentsDrawer: false,\r\n\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n return (\r\n
\r\n {drawer}\r\n
\r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n let header = this.createHeader();\r\n let body = this.createBody();\r\n let footer = this.createFooter();\r\n return (\r\n <>\r\n
\r\n
\r\n \"upload-icon\"\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 createHeader = () => {\r\n return (\r\n <>\r\n

\r\n {/* {this.props.title} */}\r\n Add Attachments\r\n

\r\n
\r\n \r\n
\r\n \r\n )\r\n }\r\n\r\n createBody = () => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \"upload-icon\"\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n this.pond = ref}\r\n name={'filepond--browser'}\r\n type={'remote'}\r\n file={this.state.profileImageUrl}\r\n allowMultiple={false}\r\n server={{\r\n\r\n process: (fieldName, file, metadata, load, error, progress, abort, transfer, options) => {\r\n // fieldName is the name of the input field\r\n // file is the actual file object to send\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n console.log(\"insideFilePond\");\r\n const request = new XMLHttpRequest();\r\n let attComponent = this;\r\n request.open('POST', `/tenant-api/profilePic-upload?userId=${localStorage.getItem('userId')}`);\r\n {/* request.setRequestHeader(\"Content-Type\", \"multipart/form-data\"); */}\r\n\r\n // Should call the progress method to update the progress to 100% before calling load\r\n // Setting computable to false switches the loading indicator to infinite mode\r\n request.upload.onprogress = (e) => {\r\n progress(e.lengthComputable, e.loaded, e.total);\r\n };\r\n\r\n // Should call the load method when done and pass the returned server file id\r\n // this server file id is then used later on when reverting or restoring a file\r\n // so your server knows which file to return without exposing that info to the client\r\n request.onload = function () {\r\n if (request.status >= 200 && request.status < 300) {\r\n // the load method accepts either a string (id) or an object\r\n load(request.responseText);\r\n attComponent.setState({ profileImageUrl: JSON.parse(request.response).fileUrl });\r\n\r\n }\r\n else {\r\n // Can call the error method if something is wrong, should exit after\r\n error('oh no');\r\n }\r\n };\r\n\r\n request.send(formData);\r\n\r\n // Should expose an abort method so the request can be cancelled\r\n return {\r\n abort: () => {\r\n // This function is entered if the user has tapped the cancel button\r\n request.abort();\r\n\r\n // Let FilePond know the request has been cancelled\r\n abort();\r\n }\r\n };\r\n }\r\n }}\r\n oninit={() => this.handleInit()}\r\n labelIdle='Drop attachment(s) here to upload or browse (.jpg, .jpeg, .png, .gif)'\r\n >\r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n createFooter = () => {\r\n return (\r\n <>\r\n
\r\n\r\n \r\n \r\n\r\n
\r\n \r\n )\r\n }\r\n\r\n onAttachToPost = () => {\r\n if(this.state.profileImageUrl == '') {\r\n this.toggleAttachmentsDrawer();\r\n } else {\r\n let url = this.props.profileThumbnailsCdnEndpoint + this.state.profileImageUrl\r\n this.props.onSubmitAttachment(this.state.profileImageUrl, url);\r\n this.toggleAttachmentsDrawer();\r\n }\r\n }\r\n\r\n onCancel = () => {\r\n let url = this.props.profileThumbnailsCdnEndpoint + this.props.userDetails.profileImageId\r\n this.props.onSubmitAttachment(this.props.userDetails.profileImageId, url);\r\n this.toggleAttachmentsDrawer();\r\n }\r\n\r\n handleInit = () => { }\r\n\r\n toggleAttachmentsDrawer = () => {\r\n this.setState({ profileImageUrl: '' });\r\n this.setState({\r\n showAttachmentsDrawer: !this.state.showAttachmentsDrawer\r\n });\r\n }\r\n\r\n}\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n try {\r\n let userDetails = state.User\r\n\r\n return {\r\n profileThumbnailsCdnEndpoint: state.AppSettings.imageCdnEndpoint,\r\n userDetails: userDetails\r\n };\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n}\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n dispatchUserRoles: userRoles => {\r\n dispatch({ type: \"SET_USER_ROLES\", roles: userRoles });\r\n }\r\n };\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ProfilePicUploadDrawer);","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport TextInput from '../../../Common/TextInput/TextInput';\r\nimport UploadProfilePicture from '../UploadProfilePicture/UploadProfilePicture';\r\nimport userService from '../../../../Services/UserService';\r\nimport ProfilePicUploadDrawer from '../../../Drawers/ProfilePicUploadDrawer/ProfilePicUploadDrawer';\r\nimport { toast } from \"react-toastify\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport GoogleMapLocationsAutoComplete from '../../../Common/GoogleMapLocationsAutoComplete/GoogleMapLocationsAutoComplete';\r\n\r\nimport \"./ProfileDetails.scss\";\r\n\r\n\r\nclass ProfileDetails extends Component {\r\n\r\n constructor(props){\r\n super(props);\r\n this.handleAddressKeyUp = this.handleAddressKeyUp.bind(this);\r\n }\r\n\r\n state = {\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n location: '',\r\n mobileNumber: '',\r\n homePhoneNumber: '',\r\n officePhoneNumber: '',\r\n profileImageUrl: '',\r\n profileImageId: '',\r\n errors: {\r\n\r\n },\r\n redirect: false,\r\n isEditing: false\r\n }\r\n\r\n createProfilePicUploader = () => {\r\n return (\r\n this.handleSubmitAttachment(event, url)}\r\n >);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n this.setState({\r\n firstName: nextProps.userData.firstName,\r\n lastName: nextProps.userData.lastName,\r\n email: nextProps.userData.email,\r\n location: nextProps.userData.location,\r\n mobileNumber: nextProps.userData.mobileNumber,\r\n homePhoneNumber: nextProps.userData.homePhoneNumber,\r\n officePhoneNumber: nextProps.userData.officePhoneNumber,\r\n profileImageUrl: nextProps.userData.profileImageUrl,\r\n profileImageId: nextProps.userData.profileImageId,\r\n });\r\n\r\n }\r\n\r\n handleSubmitAttachment = (urlId, url) => {\r\n this.setState({ profileImageId: urlId, profileImageUrl: url });\r\n }\r\n\r\n formIsValid() {\r\n const _errors = {};\r\n if (!this.state.firstName) _errors.firstName = \"First Name is required\";\r\n if (!this.state.lastName) _errors.lastName = \"Last Name is required\";\r\n if (!this.state.email) _errors.email = \"Email is required\";\r\n if (!this.state.location) \r\n {\r\n _errors.location = \"Address is required\";\r\n toast.error(_errors.location,{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n if (!this.state.mobileNumber) _errors.mobileNumber = \"Mobile Number is required\";\r\n\r\n this.setState({ errors: _errors });\r\n // Form is valid if the errors object has no properties\r\n return Object.keys(_errors).length === 0;\r\n }\r\n\r\n onClickSaveProfile = (event) => {\r\n event.preventDefault();\r\n let profileData = { ...this.state };\r\n profileData.profileImageUrl = this.state.profileImageId\r\n profileData.userId = localStorage.getItem('userId');\r\n if (!this.formIsValid()) return;\r\n try {\r\n userService.saveTenantProfile(profileData).then(res => {\r\n let userData = this.props.userDetails;\r\n userData.profileImageUrl = this.state.profileImageUrl;\r\n this.props.updateUserDetails(userData);\r\n this.setState({ redirect: true });\r\n toast.success(\"User data edited.\",{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n });\r\n } catch (error) {\r\n\r\n }\r\n\r\n }\r\n\r\n onInputChange = (event) => {\r\n switch (event.target.name) {\r\n case 'firstName': this.setState({ firstName: event.target.value }); break;\r\n case 'lastName': this.setState({ lastName: event.target.value }); break;\r\n case 'email': this.setState({ email: event.target.value }); break;\r\n case 'mobileNumber': this.setState({ mobileNumber: event.target.value.replace(/[^+ | 0-9]/g, '').replace(/(\\..*)\\./g, '$1') }); break;\r\n case 'homePhoneNumber': this.setState({ homePhoneNumber: event.target.value.replace(/[^+ | 0-9]/g, '').replace(/(\\..*)\\./g, '$1') }); break;\r\n case 'officePhoneNumber': this.setState({ officePhoneNumber: event.target.value.replace(/[^+ | 0-9]/g, '').replace(/(\\..*)\\./g, '$1') }); break;\r\n default: break;\r\n }\r\n }\r\n\r\n handleAddressKeyUp(){\r\n this.setState({isEditing: true})\r\n\r\n }\r\n\r\n setLocationDetails = (event) => {\r\n this.setState({ location: event.address });\r\n }\r\n\r\n render() {\r\n var style = {\r\n background: 'white'\r\n };\r\n const { redirect } = this.state;\r\n let updateProfilePicBody = this.createProfilePicUploader();\r\n if (redirect) {\r\n if (localStorage.getItem(\"userType\") === \"4\") {\r\n return ;\r\n }\r\n return ;\r\n }\r\n\r\n return (\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 {(!this.state.isEditing) ? \r\n :\r\n this.setLocationDetails(event)} address={this.state.location}>}\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n {updateProfilePicBody}\r\n
\r\n
\r\n { e.target.onerror = null; e.target.src = \"/Images/default-profile.png\" }} />\r\n
\r\n {this.state.profileImageId == null ? '' : }\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
);\r\n }\r\n\r\n onRemoveProfilePicture = (event) => {\r\n event.preventDefault();\r\n this.setState({\r\n profileImageId: null,\r\n profileImageUrl: '/Images/default-profile.png'\r\n })\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n let userDetails = state.User;\r\n\r\n return {\r\n userDetails: userDetails,\r\n profileThumbnailsCdnEndpoint: state.AppSettings.imageCdnEndpoint,\r\n jobTypes: state.Jobs.jobTypes\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateUserDetails: details => {\r\n dispatch({ type: \"SET_USER_DETAILS\", userDetails: details });\r\n },\r\n updateIsTenantField: isCurrentTenant => {\r\n dispatch({ type: \"CHECK_CURRENT_TENANT\", isCurrentTenant: isCurrentTenant });\r\n },\r\n addJobTypes: jobTypes => { dispatch({ type: 'SET_JOB_TYPES', jobTypes: jobTypes })}\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ProfileDetails);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\n\r\nimport ProfileDetails from './ProfileDetails/ProfileDetails';\r\n\r\n\r\nclass TenantProfile extends Component {\r\n\r\n createProfileInfoFields = () => {\r\n return (\r\n );\r\n }\r\n\r\n render() {\r\n\r\n let profileDataBody = this.createProfileInfoFields();\r\n return \r\n
{profileDataBody}
\r\n
;\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n try {\r\n let userDetails = state.User\r\n\r\n return {\r\n profileThumbnailsCdnEndpoint: state.AppSettings.imageCdnEndpoint,\r\n userDetails: userDetails\r\n };\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n\r\n return {\r\n updateUserDetails: (details) => { dispatch({ type: 'SET_USER_DETAILS', userDetails: details }) }\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TenantProfile);\r\n","import PouchDB from 'pouchdb';\r\n\r\nconst InsertDocumentList = (tableName, documents) => {\r\n var promise = Promise.resolve();\r\n function addDoc(i) {\r\n return doAddDoc;\r\n function doAddDoc() {\r\n var doc = documents[i];\r\n doc._id = 'doc_' + i;\r\n return new window['PouchDB'](tableName).put(doc);\r\n }\r\n }\r\n for (var i = 0; i < documents.length; i++) {\r\n promise = promise.then(addDoc(i));\r\n }\r\n return promise;\r\n}\r\n\r\nconst GetAllDocument = (tableName) => {\r\n return new PouchDB(tableName).allDocs({ include_docs: true, attachments: false });\r\n}\r\n\r\nconst RemoveTable = (tableName) => {\r\n return new PouchDB(tableName).destroy();\r\n}\r\n\r\nconst InsertDocument = (tableName, document) => {\r\n const table = new PouchDB(tableName);\r\n\r\n return table.post(document).then((res) => {\r\n console.log(`${tableName} inserted SUCCESSFULLY`);\r\n }).catch((err) => {\r\n console.error(err);\r\n }); \r\n}\r\n\r\nconst PouchDbService = {\r\n InsertDocumentList,\r\n InsertDocument,\r\n RemoveTable,\r\n GetAllDocument\r\n}\r\n\r\nexport default PouchDbService;\r\n\r\n\r\n\r\n","import { Button, ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport jobService from '../../../Services/JobService';\r\nimport React, { useRef } from 'react';\r\nimport { Guid } from \"guid-typescript\";\r\nimport './GoogleJobImage.scss';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\n\r\nclass GoogleJobImage extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n isLoadingGoogleImage: true,\r\n googleImages: [],\r\n selectedGoogleImage: [],\r\n attachmentUrl: \"\",\r\n uploadedSelectedFile: []\r\n };\r\n\r\n };\r\n\r\n\r\n\r\n componentWillMount() {\r\n this.getGoogleImages();\r\n }\r\n\r\n render() {\r\n const { isLoadingGoogleImage, googleImages } = this.state;\r\n const { t } = this.props.data;\r\n return (\r\n <>\r\n
\r\n
\r\n {isLoadingGoogleImage ? : ''}\r\n {!isLoadingGoogleImage ?

{t != undefined ? t('lbl_google_image') : \"Select images that best describes your issue\"}

:''}\r\n \r\n
\r\n {!isLoadingGoogleImage &&
\r\n \r\n\r\n this.handleImageOnChange(value)} >\r\n {googleImages.map((a, index) => {\r\n return \r\n })\r\n }\r\n \r\n\r\n \r\n
}\r\n {!isLoadingGoogleImage &&
\r\n \r\n \r\n
\r\n }\r\n\r\n
\r\n );\r\n\r\n }\r\n\r\n getGoogleImages() {\r\n this.setState({\r\n isLoadingGoogleImage: true\r\n });\r\n\r\n jobService.GetGoogleImages(this.props.data.jobDescription, 3, this.props.data.attachmentUrl).then(res => {\r\n if (res.items.length > 0) {\r\n this.setState({\r\n googleImages: res.items,\r\n isLoadingGoogleImage: false,\r\n isJobTypeTagsNotFound: false\r\n });\r\n } else {\r\n this.setState({\r\n isLoadingGoogleImage: false,\r\n isJobTypeTagsNotFound: true\r\n });\r\n }\r\n })\r\n }\r\n\r\n handleImageOnChange = (value) => {\r\n this.setState({ selectedGoogleImage: value });\r\n }\r\n\r\n uploadToBlob() {\r\n this.setState({\r\n isLoadingGoogleImage: true\r\n });\r\n if (this.state.selectedGoogleImage && this.state.selectedGoogleImage.length > 0) {\r\n\r\n this.state.selectedGoogleImage.forEach(ele => {\r\n this.createFile(ele);\r\n });\r\n\r\n } else {\r\n this.props.data.nextStep({\r\n index: this.props.data.index,\r\n selectedGoogleImage: [],\r\n attachments: undefined,\r\n t: this.props.data\r\n })\r\n }\r\n\r\n }\r\n\r\n uploadFile = (file) => {\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n\r\n const request = new XMLHttpRequest();\r\n const attComponent = this;\r\n request.open(\r\n \"POST\",\r\n `/tenant-api/file-upload?id=${Guid.EMPTY\r\n }&persist=false&userId=${localStorage.getItem(\"userId\")}`)\r\n {\r\n };\r\n var that = this;\r\n request.onload = function () {\r\n if (request.status >= 200 && request.status < 300) {\r\n var resp = JSON.parse(request.response);\r\n that.setAttachments(resp);\r\n }\r\n };\r\n\r\n request.send(formData);\r\n }\r\n\r\n\r\n createFile = (url) => {\r\n \r\n fetch(AppConfiguration.Setting().CorsAnywhereUrl + url)\r\n .then(res => res.blob())\r\n .then(blob => {\r\n let metadata = {\r\n type: 'image/jpeg'\r\n };\r\n var id = Guid.create().toString();\r\n let file = new File([blob], id + \".jpg\", metadata);\r\n this.uploadFile(file);\r\n });\r\n }\r\n\r\n setAttachments = (resp) => {\r\n var files = this.state.uploadedSelectedFile;\r\n files.push(resp);\r\n this.setState({\r\n uploadedSelectedFile: files\r\n }); \r\n\r\n if (files.length === this.state.selectedGoogleImage.length) {\r\n this.props.data.nextStep({\r\n index: this.props.data.index,\r\n selectedGoogleImage: this.state.selectedGoogleImage,\r\n attachments: files,\r\n t: this.props.data\r\n })\r\n }\r\n\r\n }\r\n\r\n}\r\n\r\nexport default GoogleJobImage;","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport { ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport ImageViewer from '../../../Common/ImageViewer/ImageViewer';\r\nimport { AXIOS } from \"../../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { Form } from 'react-bootstrap';\r\nimport GoogleMapLocationsAutoComplete from '../../GoogleMapLocationsAutoComplete/GoogleMapLocationsAutoComplete';\r\nimport settingsService from '../../../../Services/settingsService';\r\nimport jobService from '../../../../Services/JobService';\r\nimport { Guid } from 'guid-typescript';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { Search, Label } from 'semantic-ui-react'\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport * as _ from 'lodash';\r\nimport 'semantic-ui-css/semantic.min.css'\r\n\r\nimport './OwnerJobPostWizard.scss';\r\nimport propertyService from '../../../../Services/PropertyService';\r\nimport FrequentlyUsedServices from '../../../Drawers/JobPostDrawer/FrequentlyUsedServices/FrequentlyUsedServices';\r\nimport JobLocksDrawer from '../../../Drawers/JobLocksDrawer/JobLocksDrawer';\r\nimport AttachmentsDrawer from '../../../Drawers/AttachmentsDrawer/AttachmentsDrawer';\r\nimport Disclaimer from '../../../Drawers/JobPostDrawer/Disclaimer/Disclaimer';\r\nimport { AppConfiguration } from 'read-appsettings-json';\r\nimport { trackPromise } from 'react-promise-tracker';\r\nimport InviteTradee from '../../../Drawers/JobPostDrawer/InviteTradee/InviteTradee';\r\nimport { Link } from 'react-router-dom';\r\nimport JobIssueTag from '../../JobIssueTag/JobIssueTag';\r\nimport GoogleJobImage from '../../GoogleJobImage/GoogleJobImage';\r\nimport PropertyComponent from '../../PropertyComponent/PropertyComponent';\r\nimport { withTranslation } from 'react-i18next';\r\nimport translateService from '../../../../Services/TranslateService';\r\n\r\nclass OwnerJobPostWizard extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.title = React.createRef();\r\n this.jobDescription = React.createRef();\r\n this.budgetRef = React.createRef();\r\n this.issueAreaInProperty = React.createRef();\r\n }\r\n notifyError = (msg) => {\r\n toast.error(msg, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n if (this.props.isFromBot) {\r\n this.props.showChatbotError(msg);\r\n }\r\n }\r\n\r\n state = {\r\n userType: localStorage.getItem(\"userType\"),\r\n userId: localStorage.getItem(\"userId\"),\r\n //stepFlow: [[0, \"selectProperty\"], [1, \"getMaintenaceIssue\"], [2, \"getMaintenaceTroubleShootGuide\"], [3, \"selectServiceType\"], [4, \"selectUgency\"], [5, \"selectKeyCollectionType\"], [6, \"selectBudget\"], [7, \"getAttachments\"], [8, \"getTrades\"], [9, \"selectSubmitOption\"], [10, \"setResponse\"], [11, \"setTroubleShooteResponse\"]],\r\n stepFlow: [[0, \"selectProperty\"], [1, \"getMaintenaceIssue\"], [2, \"getMaintenaceTroubleShootGuide\"], [3, \"selectServiceType\"], [4, \"selectUgency\"], [5, \"getAttachments\"], [6, \"selectJobRelatedGoogleImage\"], [7, \"getJobTypeTags\"], [8, \"selectKeyCollectionType\"], [9, \"selectBudget\"], [10, \"getTrades\"], [11, \"selectSubmitOption\"], [12, \"setResponse\"], [13, \"setTroubleShooteResponse\"]], /*[8, \"getPropertyComponent\"]*/\r\n isJobEdit: (this.props.isJobEdit) ? true : false,\r\n jobEditId: (this.props.jobEditId) ? this.props.jobEditId : \"\",\r\n currentStep: 0,\r\n isConsumerJobPost: false,\r\n propertySearchData: [],\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: '',\r\n propertyName: '',\r\n suburbId: '',\r\n propertyType: '',\r\n jobBudget: 0,\r\n jobDescription: '',\r\n jobDescriptionEng: '',\r\n issueAreaInProperty: '',\r\n issueAreaInPropertyEng: '',\r\n },\r\n availableServices: [],\r\n availableServicesDetails: [],\r\n selectedService: { childJobTypes: [] },\r\n selectedServiceType: {\r\n parentJobType: { id: '' }\r\n },\r\n selectedSubServiceType: {},\r\n jobDetails: { attachments: [] },\r\n attachments: [],\r\n jobId: '',\r\n dueDate: '',\r\n formattedDueDate: '',\r\n jobUrgency: '',\r\n propertyList: [],\r\n value: '',\r\n isLoading: false,\r\n filteredResults: [],\r\n propertyId: '',\r\n isPropertiesLoading: false,\r\n parentJobTypes: [],\r\n primaryJobTypes: [],\r\n secondaryJobTypes: [],\r\n frequentlyUsedServices: [],\r\n isShowMoreServices: false,\r\n locationDetails: {\r\n latitude: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n location: ''\r\n },\r\n isMandatoryToUploadFiles: false,\r\n isJobForMe: false,\r\n jobBudget: \"\",\r\n jobForMe: {},\r\n selectedTradees: [],\r\n isSelectedOnDemand: false,\r\n selectedQuoteLimit: 0,\r\n inviteToProviders: false,\r\n isJobPosting: false,\r\n isRestrictKeyCollectionForResidentialProperties: false,\r\n showDisclaimerDrawer: false,\r\n jobPostWorkflowStatus: 1,\r\n propertyLocks: [],\r\n isJobForMeText: '',\r\n isSubServiceTypeSelected: false,\r\n isShowAttchmentDrawer: false,\r\n parentId: '',\r\n childJobTypeId: '',\r\n subChildJobTypeId: '',\r\n jobNumber: '',\r\n isPropertyOwner: (localStorage.userType == 5) ? true : false,\r\n isShowInviteTradeDrawer: false,\r\n budgetAmount: 0,\r\n isPropertySelected: false,\r\n title: '',\r\n isLoadingTroubleshootingGuide: false,\r\n troubleShootingGuideDetails: {\r\n troubleshootGuideId: '',\r\n troubleshootGuide: '',\r\n primaryJobTypeId: '',\r\n secondaryJobTypeId: ''\r\n },\r\n primaryButtonStyle: (this.props.customStyle && this.props.customStyle.primaryButtonStyle) ? this.props.customStyle.primaryButtonStyle : {\r\n color: ''\r\n },\r\n secondaryButtonStyle: (this.props.customStyle && this.props.customStyle.secondaryButtonStyle) ? this.props.customStyle.secondaryButtonStyle : {\r\n color: ''\r\n },\r\n optionsStyle: (this.props.customStyle && this.props.customStyle.optionsStyle) ? this.props.customStyle.optionsStyle : {\r\n color: ''\r\n },\r\n isFromBot: (this.props.isFromBot) ? true : false,\r\n isMaintatanceIssueProvided: false,\r\n isJobPostOrTroubleshootGuideSelected: false,\r\n isDraftJob: false,\r\n tradeeCount: 0,\r\n jobTypeTags: [],\r\n isLoadingJobTypeTags: false,\r\n jobAssignTags: [],\r\n selectedComponent: '',\r\n selectedGoogleImage: [],\r\n selectedFeatureComponent: [],\r\n previousStep: 0,\r\n chatbotSetting: this.props.chatbotSetting ? this.props.chatbotSetting : {\r\n hideQandABot: false,\r\n hideCheckRentalStatus: false,\r\n hideKeyCollectionOptions: false,\r\n hideTroubleshootGuide: false,\r\n enableDraftJobFeature: false\r\n },\r\n maintenanceTroubleshootGuideId: null,\r\n propertyType: \"Residential\",\r\n actionValue: 0\r\n }\r\n\r\n componentDidMount() {\r\n var normalFlow = [[0, \"selectProperty\"], [1, \"getMaintenaceIssue\"], [2, \"getMaintenaceTroubleShootGuide\"], [3, \"selectServiceType\"], [4, \"selectUgency\"], [5, \"selectKeyCollectionType\"], [6, \"selectBudget\"], [7, \"getAttachments\"], [8, \"getTrades\"], [9, \"selectSubmitOption\"], [10, \"setResponse\"], [11, \"setTroubleShooteResponse\"]];\r\n setTimeout(() => {\r\n this.GetTenantPropertiesByUserId();\r\n }, 1000);\r\n this.getAvailableServices();\r\n this.GetFrequentlyUsedJobTypes();\r\n this.setState({\r\n jobId: Guid.create().toString(),\r\n jobDetails: {\r\n id: this.state.jobId\r\n }\r\n });\r\n this.getAllAvailableJobTypes();\r\n if (localStorage.userType == 5) {\r\n this.setState({\r\n isJobForMe: true\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.props.isCustomThemeEnable) {\r\n this.createToggleBtnDynamicStyle();\r\n this.createOkBtnDynamicStyle();\r\n this.createActiveBtnDynamicStyle();\r\n this.attchmentBarStyle();\r\n }\r\n }\r\n\r\n applyTranslation(texts, sourceLng, targetLng) {\r\n const requestModel = {\r\n text: texts,\r\n targetCode: (targetLng == \"en-US\" || targetLng ==\"en-GB\") ? \"en\" : targetLng,\r\n sourceCode: sourceLng\r\n };\r\n\r\n return translateService.translate(requestModel);\r\n }\r\n\r\n createToggleBtnDynamicStyle() {\r\n const color = this.props.customStyle.optionsStyle.color;\r\n const border = this.props.customStyle.optionsStyle.border;\r\n let labelInsideToggleGroup = document.querySelectorAll('label.btn');\r\n\r\n for (var i = 0; i < labelInsideToggleGroup.length; i++) {\r\n labelInsideToggleGroup[i].style.color = color;\r\n labelInsideToggleGroup[i].style.border = border;\r\n labelInsideToggleGroup[i].style.background = '';\r\n }\r\n }\r\n createOkBtnDynamicStyle() {\r\n const color = this.props.customStyle.optionsStyle.color;\r\n let okIcons = document.querySelectorAll('span.ba-icn-ok');\r\n\r\n for (var i = 0; i < okIcons.length; i++) {\r\n okIcons[i].style.background = color;\r\n }\r\n }\r\n createActiveBtnDynamicStyle() {\r\n const color = this.props.customStyle.optionsStyle.activeBackground;\r\n let active = document.querySelectorAll('label.btn.active');\r\n for (var i = 0; i < active.length; i++) {\r\n active[i].style.background = color;\r\n }\r\n }\r\n attchmentBarStyle() {\r\n const color = this.props.customStyle.optionsStyle.color;\r\n const border = this.props.customStyle.optionsStyle.border;\r\n let label = document.querySelector('.rich-control');\r\n if (label) {\r\n label.querySelector('label').style.color = color;\r\n }\r\n let boader = document.querySelector('div.form-control.rich-control');\r\n if (boader) {\r\n boader.style.border = border;\r\n }\r\n }\r\n\r\n //get data\r\n\r\n getJobDetailsByJobId = jobId => {\r\n const userId = localStorage.getItem(\"userId\");\r\n this.setState({ isJobDetailsLoading: true })\r\n if (jobId) {\r\n try {\r\n AXIOS.GET(`tenant-api/job?jobId=${jobId}&userId=${userId}`).then(\r\n data => {\r\n //need to set jobdetails to state\r\n this.setState({});\r\n }\r\n )\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n };\r\n\r\n\r\n getOrganizationSettings(organizationId) {\r\n settingsService.getOrganizationSettingsByOrgId(organizationId)\r\n .then((res) => {\r\n this.setState({\r\n isMandatoryToUploadFiles: res.organizationSettingsModel.allowTenantsToImageAttachmentFeatureForTheJobposting,\r\n isRestrictKeyCollectionForResidentialProperties: res.organizationSettingsModel.isRestrictKeyCollectionForResidentialProperties,\r\n allowTenantsToSeeMatchingTrades: res.organizationSettingsModel.allowTenantsToSeeMatchingTrades,\r\n isEnableSuggestingImage: res.organizationSettingsModel.isEnableSuggestingImage,\r\n isEnableIssueTag: res.organizationSettingsModel.isEnableIssueTag,\r\n })\r\n\r\n })\r\n\r\n }\r\n\r\n GetTenantPropertiesByUserId = () => {\r\n let none = [{ propertyId: 0, propertyName: '--None--', suburbId: '', location: '', address: '', propertyType: 'Residential' }];\r\n\r\n this.setState({ isPropertiesLoading: true });\r\n let properties;\r\n let propertyNames = [];\r\n const { i18n } = this.props;\r\n\r\n propertyService.GetTenantPropertiesByUserId()\r\n .then((res) => {\r\n properties = res.properties;\r\n if (res.properties.length > 0) {\r\n\r\n properties.forEach(x => {\r\n propertyNames.push(x.address ? x.address : \" \");\r\n });\r\n if (this.state.isFromBot) {\r\n this.applyTranslation(([propertyNames]), \"en\", i18n.language).then((trans) => {\r\n if (trans.length > 0) {\r\n trans.forEach((x, i) => {\r\n properties[i].address = trans[i];\r\n });\r\n }\r\n\r\n this.setState({\r\n propertyList: properties,\r\n propertyId: properties[0].propertyId\r\n });\r\n this.getPropertyDetailsByPropertyId(properties[0].propertyId);\r\n this.setState({ isPropertiesLoading: false });\r\n });\r\n }\r\n else {\r\n this.setState({\r\n propertyList: properties,\r\n propertyId: properties[0].propertyId,\r\n isCurrentTenant:properties[0].isCurrentTenant\r\n });\r\n if (localStorage.userType != 5) {\r\n this.getPropertyDetailsByPropertyId(properties[0].propertyId);\r\n }\r\n this.setState({ isPropertiesLoading: false });\r\n }\r\n } else {\r\n this.setState({\r\n propertyList: [],\r\n propertyId: 0\r\n });\r\n this.onChangeJobType(1);\r\n }\r\n });\r\n }\r\n\r\n onAttachTradeesToTheJob = ({ selectedTradees, selectedQuoteLimit, isSelectedOnDemand, inviteToProviders, tradeeCount }) => {\r\n this.setState({\r\n selectedTradees: selectedTradees,\r\n selectedQuoteLimit: selectedQuoteLimit,\r\n isSelectedOnDemand: isSelectedOnDemand,\r\n inviteToProviders: inviteToProviders,\r\n tradeeCount: tradeeCount\r\n })\r\n }\r\n\r\n getAvailableServices = () => {\r\n try {\r\n this.setState({ isLoading: true })\r\n AXIOS.GET(`tenant-api/available-job-types?userId=${localStorage.getItem('userId')}`)\r\n .then(dataJson => {\r\n this.setState({ isLoading: false })\r\n this.setState({ availableServicesDetails: dataJson });\r\n this.setState({ availableServices: dataJson });\r\n let formData = this.state.formData;\r\n formData.childJobTypeId = '';\r\n formData.childJobType = '';\r\n this.setState({ formData: formData });\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n GetFrequentlyUsedJobTypes = () => {\r\n try {\r\n let jobTypesLabels = [];\r\n let data;\r\n const { i18n } = this.props;\r\n if (this.state.isFromBot) {\r\n jobService.GetFrequentlyUsedJobTypes()\r\n .then(result => {\r\n data = result;\r\n jobTypesLabels = data.map(x => x.label);\r\n return this.applyTranslation((jobTypesLabels), \"en\", i18n.language);\r\n\r\n }).then((trans) => {\r\n if (trans.length > 0) {\r\n trans.forEach((x, i) => {\r\n data[i].label = trans[i];\r\n });\r\n }\r\n this.setState({ frequentlyUsedServices: data });\r\n })\r\n }\r\n else {\r\n jobService.GetFrequentlyUsedJobTypes()\r\n .then(data => {\r\n this.setState({ frequentlyUsedServices: data });\r\n })\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n getAllAvailableJobTypes() {\r\n let jobTypes = this.props.jobTypes;\r\n let parents = _.map(jobTypes, m => m.parentJobType);\r\n const parentJobTypes = _.filter(parents, f => f.parentRef === null);\r\n this.setState({ parentJobTypes: parentJobTypes });\r\n }\r\n\r\n getPropertyDetailsByPropertyId = (propertyId) => {\r\n const selectedProperty = this.state.propertyList.filter(a => a.propertyId == propertyId);\r\n if (selectedProperty && selectedProperty.length > 0 && selectedProperty[0].propertyId != null) {\r\n this.setState({\r\n propertyId: propertyId,\r\n //locationDetails: {},\r\n formData: {\r\n address: selectedProperty[0].address,\r\n location: selectedProperty[0].location,\r\n propertyId: selectedProperty[0].propertyId,\r\n propertyName: selectedProperty[0].propertyName,\r\n suburbId: selectedProperty[0].suburbId,\r\n propertyType: selectedProperty[0].propertyType\r\n },\r\n locationDetails: selectedProperty[0],\r\n jobForMe: {\r\n propertyType: selectedProperty[0].propertyType,\r\n address: selectedProperty[0].address,\r\n latitude: selectedProperty[0].latitude,\r\n location: selectedProperty[0].location,\r\n longitude: selectedProperty[0].longitude,\r\n placeId: selectedProperty[0].placeId,\r\n suburbId: selectedProperty[0].suburbId,\r\n },\r\n });\r\n this.getOrganizationSettings(selectedProperty[0].orgnizationId);\r\n } else {\r\n this.setState({\r\n propertyId: null,\r\n locationDetails: {},\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: null,\r\n propertyName: '',\r\n suburbId: null,\r\n propertyType: ''\r\n }\r\n });\r\n }\r\n setTimeout(() => {\r\n if (this.state.isJobForMe == 1) {\r\n // document.getElementById('check1').checked = true;\r\n this.setState({ keyCollectType: 1 });\r\n }\r\n }, 500);\r\n }\r\n\r\n onChangeJobType = (value) => {\r\n if (value === 1 && localStorage.userType == 4) {\r\n this.setState({ isJobForMeText:

You (tenant) will be paying for this job and are responsible

for all costs involved.

This job is not being sent to your property manager.

});\r\n } else {\r\n this.setState({ isJobForMeText: '' });\r\n }\r\n\r\n this.setState({\r\n isJobForMe: (value === 1) ? true : false,\r\n jobForMe: {\r\n propertyType: '',\r\n address: '',\r\n latitude: '',\r\n location: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n budget: ''\r\n },\r\n formData: {\r\n propertyId: \"\"\r\n }\r\n });\r\n }\r\n\r\n onChangePropertyTypeForMe = (event) => {\r\n let formdata = {};\r\n if (!event) {\r\n formdata.propertyType = \"Residential\";\r\n this.setState({ formdata: formdata, propertyType: \"Residential\" });\r\n }\r\n let jobforMe = this.state.jobForMe;\r\n jobforMe.propertyType = event;\r\n this.setState({ jobForMe: jobforMe, propertyType: event });\r\n\r\n formdata = this.state.formData;\r\n formdata.propertyType = event;\r\n this.setState({ formdata: formdata, propertyType: event });\r\n }\r\n\r\n onKeyCollectionChange = (event) => {\r\n this.setState({\r\n keyCollectType: event\r\n });\r\n }\r\n\r\n handlePropertyChange = (props) => {\r\n this.setState({ property: props });\r\n this.getPropertyDetailsByPropertyId(props);\r\n }\r\n setLocationDetails = (event) => {\r\n this.setState({\r\n locationDetails: event,\r\n jobForMe: {\r\n propertyType: '',\r\n address: event.address,\r\n latitude: event.latitude,\r\n location: event.location,\r\n longitude: event.longitude,\r\n placeId: event.placeId,\r\n suburbId: event.suburbId,\r\n },\r\n formData: {\r\n address: event.address\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n handleOnChangeJobDescription = (value) => {\r\n\r\n let jobforMe = this.state.jobForMe;\r\n jobforMe.jobDescription = this.jobDescription.current.value;\r\n this.setState({ jobForMe: jobforMe });\r\n\r\n\r\n let formdata = this.state.formData;\r\n const typedDescription = this.jobDescription.current.value;\r\n formdata.jobDescription = typedDescription;\r\n formdata.jobDescriptionEng = typedDescription;\r\n this.setState({\r\n formdata: formdata,\r\n isMaintatanceIssueProvided: true\r\n });\r\n\r\n }\r\n\r\n handleOnChangeJobIssueArea = (value) => {\r\n const { i18n } = this.props;\r\n let formdata = this.state.formData;\r\n const typedArea = this.issueAreaInProperty.current.value;\r\n formdata.issueAreaInProperty = typedArea;\r\n formdata.issueAreaInPropertyEng = typedArea;\r\n this.setState({ formdata: formdata });\r\n }\r\n\r\n //createTypeOfServicesButtons = (props) => {\r\n // let isServiceTypeSelected = this.state.isServiceTypeSelected;\r\n // const { t } = this.props;\r\n // if (this.state.selectedService.childJobTypes) {\r\n // return (\r\n // <>\r\n //
\r\n // {(isServiceTypeSelected) ?\r\n //
\r\n //

{this.state.isFromBot ? t('pj_lbl_select_sub_type') : 'Please select the type of subservice you require.'}*

\r\n //

{this.state.isFromBot ? t('pj_lbl_choose_an_option') : 'choose an option'}

\r\n //
\r\n // : ''}\r\n\r\n // \r\n // { this.getSubChildJobTypes(event); }}>\r\n // {this.state.selectedService.childJobTypes.map((jbType, index) => {\r\n // return {jbType.label};\r\n // })}\r\n // \r\n // \r\n //
\r\n // \r\n // )\r\n // } else {\r\n // return\r\n // }\r\n //}\r\n //createTypeOfServicesChildButtons = (props) => {\r\n // if (this.state.secondaryJobTypes.length > 0) {\r\n // return (\r\n // <>\r\n //
\r\n // \r\n // \r\n // \r\n // {this.state.secondaryJobTypes.map((jbType, index) => {\r\n // return {jbType.label};\r\n // })}\r\n // \r\n // \r\n //
\r\n // \r\n // )\r\n // } else {\r\n // return\r\n // }\r\n\r\n //}\r\n\r\n //showHideMoreService = () => {\r\n // this.setState({\r\n // isShowMoreServices: !this.state.isShowMoreServices,\r\n // selectedService: {},\r\n // isServiceTypeSelected: true\r\n // })\r\n //}\r\n\r\n handleResultSelect = (e, { result }) => {\r\n this.setState({ value: result.label })\r\n this.getChildJobTypes(result.id);\r\n }\r\n handleSearchChange = (e, { value }) => {\r\n this.setState({ filteredResults: [], value });\r\n if (value.length > 2) {\r\n this.setState({ isLoading: true })\r\n setTimeout(() => {\r\n document.querySelector('.jobpost-wizard-owner .auto-complete').classList.remove(\"hide-results\");\r\n this.setState({\r\n isLoading: false,\r\n filteredResults: this.state.parentJobTypes.filter(suggestion => suggestion.label.toLowerCase().indexOf(this.state.value.toLowerCase()) > -1)\r\n })\r\n }, 300)\r\n } else {\r\n document.querySelector('.jobpost-wizard-owner .auto-complete').classList.add(\"hide-results\");\r\n }\r\n }\r\n\r\n resultRenderer = (event) => {\r\n return \r\n }\r\n\r\n\r\n\r\n\r\n\r\n onSelectFrequentlyUsedJobTypes = (event) => {\r\n try {\r\n this.setState({ parentId: event });\r\n this.setState({ isServiceTypeSelected: true });\r\n this.getChildJobTypes(event);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n showHideMoreService = () => {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: '',\r\n }\r\n this.setState({\r\n isShowMoreServices: !this.state.isShowMoreServices,\r\n selectedService: {},\r\n secondaryJobTypes: [],\r\n subChildJobTypeId: '',\r\n formData: formData2,\r\n isServiceTypeSelected: true\r\n })\r\n }\r\n\r\n getChildJobTypes(parentId) {\r\n let jobTypes = this.props.jobTypes;\r\n let selectedNode = _.find(jobTypes, f => f.parentJobType.id === parentId);\r\n\r\n if (this.state.selectedServiceType && this.state.selectedServiceType.parentJobType && _.find(selectedNode.childJobTypes, f => f.id === this.state.selectedServiceType.parentJobType.id)) {\r\n this.setState({\r\n primaryJobTypes: selectedNode.childJobTypes,\r\n selectedService: selectedNode\r\n });\r\n this.setState({ childJobTypeId: selectedNode });\r\n } else {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: '',\r\n\r\n }\r\n this.setState({\r\n primaryJobTypes: selectedNode.childJobTypes,\r\n selectedService: selectedNode,\r\n secondaryJobTypes: [],\r\n selectedServiceType: {\r\n parentJobType: { id: '' }\r\n },\r\n formData: formData2\r\n });\r\n }\r\n }\r\n\r\n getSubChildJobTypes(parentId) {\r\n\r\n this.setState({ childJobTypeId: parentId });\r\n this.setState({ isSubServiceTypeSelected: true });\r\n let jobTypes = this.props.jobTypes;\r\n let selectedNode = _.find(jobTypes, f => f.parentJobType.id === parentId);\r\n\r\n if (selectedNode == undefined) {\r\n let selectedServiceType = {\r\n childJobTypes: [],\r\n parentJobType: _.find(this.state.primaryJobTypes, f => f.id === parentId)\r\n }\r\n let formData1 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: ''\r\n };\r\n this.setState({\r\n secondaryJobTypes: [],\r\n selectedServiceType: selectedServiceType,\r\n formData: formData1\r\n });\r\n\r\n } else {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: ''\r\n };\r\n this.setState({\r\n secondaryJobTypes: selectedNode.childJobTypes,\r\n selectedServiceType: selectedNode,\r\n formData: formData2\r\n });\r\n }\r\n\r\n }\r\n\r\n createTypeOfServicesChildButtons = (props) => {\r\n if (this.state.secondaryJobTypes.length > 0) {\r\n return (\r\n <>\r\n
\r\n

{this.state.selectedServiceType.parentJobType.description}*

\r\n \r\n \r\n {this.state.secondaryJobTypes.map((jbType, index) => {\r\n return {jbType.label};\r\n })}\r\n \r\n \r\n
\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n\r\n }\r\n\r\n onChangeChildTypeOfServices = (input) => {\r\n this.setState({ subChildJobTypeId: input });\r\n const childJobType = this.state.selectedServiceType.childJobTypes.filter(a => a.id === input)[0];\r\n let formData = this.state.formData;\r\n formData.childJobTypeId = childJobType.id;\r\n formData.childJobType = childJobType.title;\r\n this.setState({ formData: formData });\r\n }\r\n\r\n createTypeOfServicesButtons = (props) => {\r\n const { t } = this.props;\r\n let isServiceTypeSelected = this.state.isServiceTypeSelected;\r\n if (this.state.selectedService.childJobTypes) {\r\n return (\r\n <>\r\n
\r\n {(isServiceTypeSelected) ?\r\n
\r\n

{this.state.isFromBot ? t('pj_lbl_select_sub_type') : 'Please select the type of subservice you require.'}*

\r\n

{this.state.isFromBot ? t('pj_lbl_choose_an_option') : 'choose an option'}

\r\n
\r\n\r\n : ''}\r\n\r\n \r\n { this.getSubChildJobTypes(event); }}>\r\n {this.state.selectedService.childJobTypes.map((jbType, index) => {\r\n return {jbType.label};\r\n })}\r\n \r\n \r\n
\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n }\r\n\r\n onChangeTypeOfServices = (event) => {\r\n\r\n try {\r\n this.setState({ isLoading: true })\r\n AXIOS.GET(`tenant-api/job-sub-types?parentRef=${event}`)\r\n .then(dataJson => {\r\n this.setState({ isLoading: false })\r\n this.setState({ selectedServiceType: dataJson });\r\n let formData = this.state.formData;\r\n formData.childJobTypeId = '';\r\n formData.childJobType = '';\r\n this.setState({ formData: formData });\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n handleDueDateChange = (date) => {\r\n this.setState({\r\n dueDate: date,\r\n });\r\n }\r\n\r\n handleJobUrgencyOnChange = (value) => {\r\n this.setState({ jobUrgency: value });\r\n }\r\n\r\n getDueDate = () => {\r\n const { t } = this.props;\r\n if (this.state.jobUrgency == -999) {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n }\r\n\r\n closeDisclaimer = () => {\r\n this.setState({\r\n showDisclaimerDrawer: false,\r\n });\r\n }\r\n\r\n onChangeJobBudget = (value) => {\r\n this.setState({ jobBudget: value });\r\n }\r\n\r\n onChangeAmount = (event) => {\r\n this.setState({ budgetAmount: event.target.value });\r\n }\r\n\r\n getTroubleShoutingGuide(index) {\r\n const { i18n } = this.props;\r\n this.setState({\r\n isLoadingTroubleshootingGuide: true\r\n });\r\n jobService.GetTroubleShootingGuide(this.state.formData.propertyId, this.state.formData.jobDescriptionEng).then(res => {\r\n if (res.responseCode == 12 && res.troubleshootGuide != null) {\r\n if (this.state.isFromBot) {\r\n if (i18n.language != \"en\" && !i18n.language.toString().includes(\"en\")) {\r\n this.applyTranslation(res.troubleshootGuide, \"en\", i18n.language).then((trans) => {\r\n res.troubleshootGuide = trans[0];\r\n this.setState({\r\n troubleShootingGuideDetails: res,\r\n maintenanceTroubleshootGuideId: res.troubleshootGuideId,\r\n isLoadingTroubleshootingGuide: false\r\n });\r\n });\r\n } else {\r\n this.setState({\r\n troubleShootingGuideDetails: res,\r\n maintenanceTroubleshootGuideId: res.troubleshootGuideId,\r\n isLoadingTroubleshootingGuide: false\r\n });\r\n }\r\n }\r\n else {\r\n this.setState({\r\n troubleShootingGuideDetails: res,\r\n maintenanceTroubleshootGuideId: res.troubleshootGuideId,\r\n isLoadingTroubleshootingGuide: false\r\n });\r\n }\r\n\r\n } else {\r\n this.setState({\r\n isLoadingTroubleshootingGuide: false,\r\n currentStep: (index + 2)\r\n });\r\n }\r\n })\r\n }\r\n\r\n\r\n render() {\r\n const currentStepIndex = this.state.currentStep;\r\n let step = this.showCurrentStep(currentStepIndex);\r\n return (\r\n
\r\n
\r\n {step}\r\n
\r\n {(this.state.showDisclaimerDrawer == true) ?\r\n this.postJob(event)}\r\n onCloseDisclaimer={() => this.closeDisclaimer()}\r\n isFromBot={this.state.isFromBot}\r\n > : ''\r\n }\r\n );\r\n }\r\n\r\n showCurrentStep = (index) => {\r\n let currentStep = this.state.stepFlow[index][1];\r\n switch (currentStep) {\r\n case \"selectProperty\":\r\n return this.selectPropertyStep(index);\r\n case \"getMaintenaceIssue\":\r\n return this.getMaintenaceIssue(index);\r\n case \"getMaintenaceTroubleShootGuide\":\r\n if (this.state.chatbotSetting.hideTroubleshootGuide && this.state.isFromBot) {\r\n this.setState({\r\n currentStep: index + 1\r\n }, () => {\r\n this.nextStep(index);\r\n })\r\n }\r\n else {\r\n return this.getMaintenaceTroubleShootGuide(index);\r\n }\r\n case \"selectServiceType\":\r\n return this.selectServiceType(index);\r\n case \"selectUgency\":\r\n return this.selectUgency(index);\r\n case \"selectJobRelatedGoogleImage\":\r\n return this.selectJobRelatedGoogleImage(index);\r\n case \"getJobTypeTags\":\r\n return this.getJobTypeTags(index)\r\n case \"getPropertyComponent\":\r\n return this.getPropertyComponent(index)\r\n case \"selectKeyCollectionType\":\r\n if (this.state.chatbotSetting.hideKeyCollectionOptions && this.state.isFromBot) {\r\n this.setState({\r\n keyCollectType: this.state.chatbotSetting.defaultKeyCollectionOption,\r\n currentStep: index + 1\r\n }, () => {\r\n return this.nextStep(index);\r\n })\r\n }\r\n else {\r\n return this.selectKeyCollectionType(index);\r\n }\r\n case \"selectBudget\":\r\n return this.selectBudget(index);\r\n case \"getAttachments\":\r\n return this.getAttachments(index);\r\n case \"getTrades\":\r\n return this.getTrades(index);\r\n case \"selectSubmitOption\":\r\n return this.selectSubmitOption(index);\r\n case \"setResponse\":\r\n return this.setResponse(index);\r\n case \"setTroubleShooteResponse\":\r\n return this.setTroubleShooteResponse();\r\n default:\r\n return this.nextStep(index);\r\n }\r\n }\r\n\r\n selectPropertyStep = (index) => {\r\n const { propertyList, propertyId, isJobForMe, jobForMe, formData, isPropertyOwner } = this.state;\r\n const forMeText = this.state.isJobForMeText;\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n {!this.state.isFromBot ?\r\n
\r\n
\r\n

Job posting for

\r\n

(Choose an option)

\r\n
\r\n \r\n { this.onChangeJobType(value) }}>\r\n {this.state.isCurrentTenant && localStorage.userType == 4 ?\r\n Property Manager : ''}\r\n Job I will Pay For\r\n \r\n \r\n
\r\n
{forMeText}
\r\n
\r\n
\r\n : ''}\r\n {(!isJobForMe) ?\r\n
\r\n
\r\n

{this.state.isFromBot ? t('pj_lbl_prop_selection_q'): 'Which property do you wish to log a maintenance request for?'}

\r\n

({this.state.isFromBot ? t('pj_lbl_choose_an_option') : 'choose an option'})

\r\n
\r\n\r\n
\r\n {(this.state.isPropertiesLoading) ? : ''}\r\n \r\n { this.handlePropertyChange(value) }}>\r\n {propertyList.map((a, index) => {\r\n return {a.address}\r\n })\r\n }\r\n \r\n \r\n
\r\n \r\n
: ''}\r\n \r\n\r\n \r\n {(isJobForMe || isPropertyOwner) ?\r\n
\r\n
\r\n

Property Type

\r\n

(Choose an option)*

\r\n
\r\n \r\n this.onChangePropertyTypeForMe(value)}>\r\n Residential\r\n Commercial\r\n \r\n \r\n
: ''}\r\n
\r\n
\r\n \r\n
\r\n\r\n
);\r\n }\r\n getMaintenaceIssue = (index) => {\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n

{this.state.isFromBot ? t('pj_lbl_describe_job') : 'Please describe your maintenance issue'}

\r\n {(this.state.formData.address) ?\r\n

({this.state.isFromBot ? t('pj_lbl_job_property') : 'You are logging this maintenance issue for'} {this.state.formData.address})

: ''}\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n this.handleOnChangeJobIssueArea(value)} >\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
);\r\n }\r\n\r\n getMaintenaceTroubleShootGuide = (index) => {\r\n const { troubleShootingGuideDetails, isLoadingTroubleshootingGuide } = this.state;\r\n const { t } = this.props;\r\n\r\n return (\r\n
\r\n
\r\n {!isLoadingTroubleshootingGuide &&
\r\n

{this.state.isFromBot ? t('pj_lbl_issue_desc') : 'Issue Description'}

\r\n {(this.state.formData.address) ?\r\n

{this.state.isFromBot ? t('pj_lbl_job_property') : 'You are logging this maintenance issue for'} {this.state.formData.address}

: ''}\r\n
\r\n \r\n
\r\n
}\r\n {isLoadingTroubleshootingGuide ? \r\n : (
\r\n

{this.state.isFromBot ? t('pj_lbl_lets_troubleshoot') : 'Let’s troubleshoot your problem'}

\r\n
\r\n
)}\r\n
\r\n {!isLoadingTroubleshootingGuide && (
\r\n

{this.state.isFromBot ? t('pj_lbl_issue_resoved_verification') : 'Were you able to resolve your issue?'}

\r\n
\r\n \r\n \r\n
\r\n
)}\r\n
);\r\n }\r\n\r\n selectJobRelatedGoogleImage = (index) => {\r\n if (!this.state.isEnableSuggestingImage) return this.state.previousStep > index ? this.previousStep(index) : '';\r\n const data = {\r\n secondaryButtonStyle: this.state.secondaryButtonStyle,\r\n primaryButtonStyle: this.state.primaryButtonStyle,\r\n index: index,\r\n jobDescription: this.state.formData.jobDescriptionEng,\r\n previousStep: this.previousStep,\r\n nextStep: this.handleGoogleImageCallback,\r\n selectedGoogleImage: this.state.selectedGoogleImage,\r\n attachmentUrl: this.state.attachments && (this.state.attachments.length > 0) && this.state.attachments[0] ? this.state.attachments[0].fileUrl : \"\",\r\n t: this.state.isFromBot ? this.props.t : undefined\r\n }\r\n return ()\r\n }\r\n\r\n handleGoogleImageCallback = (value) => {\r\n var attachments = this.state.attachments;\r\n if (value.attachments) {\r\n\r\n if (attachments) {\r\n value.attachments.forEach((attch) => {\r\n attachments.push(attch);\r\n });\r\n\r\n } else {\r\n attachments = [];\r\n value.attachments.forEach((attch) => {\r\n attachments.push(attch);\r\n });\r\n\r\n }\r\n }\r\n this.setState({ selectedGoogleImage: value.selectedGoogleImage, attachments: attachments });\r\n this.nextStep(value.index);\r\n }\r\n\r\n handleJobTypeTagCallback = (value) => {\r\n this.setState({ jobAssignTags: value.data });\r\n this.nextStep(value.index);\r\n }\r\n\r\n handlePropertyComponentCallback = (value) => {\r\n this.setState({ selectedComponent: value.selectedComponent, selectedFeatureComponent: value.selectedFeatureComponent });\r\n this.nextStep(value.index);\r\n }\r\n\r\n getJobTypeTags = (index) => {\r\n var childJobTypeId = this.state.childJobTypeId;\r\n if (this.state.formData.childJobTypeId && this.state.formData.childJobTypeId.trim() != \"\") {\r\n childJobTypeId = this.state.formData.childJobTypeId;\r\n }\r\n else {\r\n childJobTypeId = this.state.selectedServiceType.parentJobType.id;\r\n }\r\n\r\n if (!this.state.isEnableIssueTag) return this.state.previousStep > index ? this.previousStep(index) : '';\r\n const data = {\r\n secondaryButtonStyle: this.state.secondaryButtonStyle,\r\n primaryButtonStyle: this.state.primaryButtonStyle,\r\n index: index,\r\n childJobTypeId: childJobTypeId,\r\n previousStep: this.previousStep,\r\n nextStep: this.handleJobTypeTagCallback,\r\n jobAssignTags: this.state.jobAssignTags,\r\n t: this.state.isFromBot ? this.props.t : undefined,\r\n previousIndex: this.state.previousStep,\r\n isFromBot: this.state.isFromBot,\r\n i18n: this.props.i18n\r\n }\r\n return ()\r\n\r\n }\r\n\r\n getPropertyComponent = (index) => {\r\n const data = {\r\n secondaryButtonStyle: this.state.secondaryButtonStyle,\r\n primaryButtonStyle: this.state.primaryButtonStyle,\r\n index: index,\r\n propertyId: this.state.propertyId,\r\n previousStep: this.previousStep,\r\n nextStep: this.handlePropertyComponentCallback,\r\n selectedComponent: this.state.selectedComponent,\r\n selectedFeatureComponent: this.state.selectedFeatureComponent,\r\n t: this.state.isFromBot ? this.props.t : undefined\r\n }\r\n return ()\r\n }\r\n\r\n\r\n selectServiceType = (index) => {\r\n const { isLoading, value, propertyList, filteredResults, propertyId, isPropertiesLoading, isJobForMe, jobForMe } = this.state\r\n let serviceTypes = this.createTypeOfServicesButtons();\r\n let serviceTypeChild = this.createTypeOfServicesChildButtons();\r\n const { t } = this.props;\r\n if (this.state.parentId) {\r\n this.addParentJobTypeToFrequentlyUsedServices(this.state.parentId);\r\n }\r\n return (\r\n <>\r\n
\r\n
\r\n {(this.state.isShowMoreServices) ?\r\n
\r\n
\r\n

Type the service that you need.

\r\n

( eg. Electrician )

\r\n
\r\n
\r\n \r\n \r\n
\r\n
:\r\n \r\n \r\n\r\n }\r\n {serviceTypes}\r\n {serviceTypeChild}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n selectUgency = (index) => {\r\n const dueDate = this.getDueDate();\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n

{this.state.isFromBot ? t('pj_lbl_select_urgency') : 'When do you want this issue to be fixed?'}

\r\n

({this.state.isFromBot ? t('pj_lbl_choose_an_option') : 'choose an option'})

\r\n
\r\n
\r\n \r\n this.handleJobUrgencyOnChange(value)} defaultValue={this.state.jobUrgency}>\r\n {this.state.isFromBot ? t('pj_lbl_select_urgency_urgently') : ' Urgently'}\r\n {this.state.isFromBot ? t('pj_lbl_select_urgency_few_days') : ' Within a few days'}\r\n {this.state.isFromBot ? t('pj_lbl_select_urgency_within_week') : ' Within a week'}\r\n {this.state.isFromBot ? t('pj_lbl_select_urgency_scheduled') : ' Schedule a date'}\r\n \r\n \r\n
\r\n {dueDate}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n selectKeyCollectionType = (index) => {\r\n const { isJobForMe, isPropertyOwner } = this.state;\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n {(isJobForMe) ? '' :\r\n
\r\n
\r\n

{this.state.isFromBot ? t('hdr_keycollection_option') : 'Choose your preferred key collection option.'} *

\r\n

({this.state.isFromBot ? t('pj_lbl_choose_an_option') : 'choose an option'})

\r\n
\r\n
\r\n\r\n {(this.state.isRestrictKeyCollectionForResidentialProperties && this.state.formData.propertyType == 'Residential') ?\r\n \r\n this.onKeyCollectionChange(value)} defaultValue={3}>\r\n {this.state.isFromBot ? t('lbl_propkey_case6') : 'Don\\'t take the key, I want to be home so let’s arrange a time'}\r\n \r\n \r\n :\r\n
\r\n \r\n this.onKeyCollectionChange(value)} defaultValue={this.state.keyCollectType}>\r\n {this.state.isFromBot ? t('lbl_keycollection_option1') : 'Please collect keys from the office to enter the property'}\r\n {this.state.isFromBot ? t('lbl_keycollection_option2') : 'Collect the key from the office, inform the tenant on date & time'}\r\n {this.state.isFromBot ? t('lbl_keycollection_option3') : 'Contact tenant to arrange access and time'}\r\n \r\n \r\n\r\n
\r\n }\r\n
\r\n
\r\n }\r\n\r\n {\r\n (!isJobForMe\r\n && this.state.keyCollectType != null\r\n && (this.state.keyCollectType == 1 || this.state.keyCollectType == 2)) ?\r\n this.onPropertyKeySelected(event)}>\r\n : ''\r\n }\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n getAttachments = (index) => {\r\n const { isShowAttchmentDrawer, isJobForMe } = this.state;\r\n const { t } = this.props;\r\n const styleflex = {\r\n flexDirection: \"column !important\",\r\n }\r\n return (\r\n <>\r\n
\r\n {(!isShowAttchmentDrawer) ?\r\n
\r\n
\r\n
\r\n

{this.state.isFromBot ? t('pj_lbl_attachment') : 'Do you wish to attach images or videos of the issue?'}

\r\n

({this.state.isFromBot ? t('pj_lbl_choose_an_option') : 'choose an option'})

\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

{this.state.isFromBot ? t('pj_lbl_attachment_sub') : 'Attach images or videos that describe your issue properly.'}

\r\n
\r\n
\r\n
\r\n { this.setState({ attachments: event }) }}\r\n isJobPost={true}\r\n isFromBot={this.state.isFromBot}\r\n t={t}>\r\n \r\n {(this.state.attachments) ?\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 selectBudget = (index) => {\r\n const { isJobForMe } = this.state;\r\n return (\r\n <>\r\n {(isJobForMe) ?\r\n
\r\n
\r\n
\r\n

Do you have an estimate in mind?*

\r\n

(choose an option)

\r\n
\r\n
\r\n \r\n this.onChangeJobBudget(value)} defaultValue={this.state.jobBudget}>\r\n Under $500\r\n $500 - $1000\r\n $1000 - $2000\r\n $2000 - $5000\r\n $5000+\r\n Unsure\r\n Custom\r\n \r\n \r\n
\r\n
\r\n this.onChangeAmount(e)}>\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 getTrades = (index) => {\r\n\r\n const { inviteToProviders, selectedTradees, isSelectedOnDemand } = this.state;\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n

Invite trade/trades for maintenance request.*

\r\n
\r\n
\r\n this.onAttachTradeesToTheJob(event)}\r\n selectedTradees={this.state.selectedTradees}\r\n isFromBot = {this.state.isFromBot}>\r\n \r\n
\r\n {(inviteToProviders && !isSelectedOnDemand) ? : \"\"}\r\n {(isSelectedOnDemand) ?\r\n
\r\n {selectedTradees.map((item, index) => {\r\n return

{item.name}

\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 selectSubmitOption = (index) => {\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n

{this.state.isFromBot ? t('pj_lbl_select_submit_options') : 'Please select submit option.'}

\r\n

({this.state.isFromBot ? t('pj_lbl_choose_an_option') : 'choose an option'})

\r\n
\r\n \r\n { this.onSubmitJob(value) }} value={this.state.actionValue}>\r\n {this.state.isFromBot ? t('pj_button_job_post') : 'Job Post'}\r\n {this.state.isFromBot ? !this.state.chatbotSetting.enableDraftJobFeature &&\r\n {t('pj_button_job_draft')}\r\n :\r\n {this.state.isFromBot ? t('pj_button_job_draft') : 'Job Draft'}\r\n }\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
)\r\n }\r\n\r\n setResponse = (index) => {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n {(this.state.isFromBot && this.state.isDraftJob) ? \r\n

{t('pj_lbl_job_draft_response')}

\r\n :

{this.state.isFromBot ?\r\n t('lbl_jobpost_success') \r\n : (this.state.isDraftJob) ? \r\n

{t('pj_lbl_job_draft_response')}

\r\n : t('lbl_jobpost_success')}}\r\n
\r\n
\r\n {(this.state.isFromBot) ? : Back to home}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n nextStep = (index) => {\r\n const { i18n } = this.props;\r\n var currentStep = index;\r\n if (this.validate(index)) {\r\n if (index == 1) {\r\n if (this.state.isJobForMe) {\r\n currentStep = (index + 2);\r\n }\r\n else {\r\n\r\n let formdata = this.state.formData;\r\n const typedDescription = this.jobDescription.current.value;\r\n if (typedDescription.length > 0) {\r\n if (i18n.language != 'en' && !i18n.language.toString().includes(\"en\")) {\r\n this.applyTranslation(typedDescription, i18n.language, 'en').then((trans) => {\r\n formdata.jobDescription = typedDescription;\r\n formdata.jobDescriptionEng = trans[0];\r\n this.setState({\r\n formdata: formdata,\r\n isMaintatanceIssueProvided: true\r\n });\r\n this.getTroubleShoutingGuide(index);\r\n });\r\n } else {\r\n this.getTroubleShoutingGuide(index);\r\n }\r\n }\r\n const typedArea = this.issueAreaInProperty.current.value;\r\n\r\n if (typedArea.length > 0) {\r\n if (i18n.language != \"en\" && !i18n.language.toString().includes(\"en\")) {\r\n this.applyTranslation(typedArea, i18n.language, 'en').then((trans) => {\r\n formdata.issueAreaInProperty = typedArea;\r\n formdata.issueAreaInPropertyEng = trans[0];\r\n this.setState({ formdata: formdata });\r\n });\r\n } else {\r\n formdata.issueAreaInProperty = typedArea;\r\n formdata.issueAreaInPropertyEng = typedArea;\r\n this.setState({ formdata: formdata });\r\n }\r\n }\r\n\r\n\r\n currentStep = (index + 1);\r\n }\r\n } else if (this.state.isJobForMe && index == 4) {\r\n currentStep = (index + 5);\r\n }\r\n\r\n else if (this.state.isJobForMe && index == 9) {\r\n currentStep = (index - 4);\r\n }\r\n else if (this.state.isJobForMe && index == 5) {\r\n currentStep = (index + 5);\r\n }\r\n else if (!this.state.isJobForMe && !this.state.allowTenantsToSeeMatchingTrades && index == 8) { // 7\r\n currentStep = (index + 3);\r\n }\r\n else if (!this.state.isJobForMe && this.state.allowTenantsToSeeMatchingTrades && index == 8) { \r\n currentStep = (index + 2);\r\n }\r\n else if (!this.state.isJobForMe && !this.state.allowTenantsToSeeMatchingTrades && index == 10) { //7\r\n currentStep = (index + 2);\r\n }\r\n else {\r\n currentStep = (index + 1);\r\n\r\n }\r\n\r\n\r\n } else {\r\n return false;\r\n }\r\n this.handleChatbotScroll();\r\n currentStep = this.permissionCheckNextStep(currentStep);\r\n this.setState({ currentStep: currentStep, previousStep: index });\r\n }\r\n\r\n previousStep = (index) => {\r\n var currentStep = index;\r\n if (this.state.isJobForMe && index == 9) { // 7\r\n currentStep = (index - 6);\r\n }\r\n else if (this.state.isJobForMe && index == 8) { //6\r\n currentStep = (index - 5);\r\n }\r\n else if (this.state.isJobForMe && index == 10) { //6\r\n currentStep = (index - 6);\r\n }\r\n else if (this.state.isJobForMe && index == 5) { //6\r\n currentStep = (index + 5);\r\n }\r\n else if (!this.state.isJobForMe && index == 9) { //7\r\n currentStep = (index - 2);\r\n }\r\n else if (!this.state.isJobForMe && this.state.allowTenantsToSeeMatchingTrades && index == 11) {\r\n currentStep = (index - 1);\r\n }\r\n else if (!this.state.isJobForMe && index == 11) { //7\r\n currentStep = (index - 3);\r\n }\r\n else if (!this.state.isJobForMe && this.state.allowTenantsToSeeMatchingTrades && index == 10) { \r\n currentStep = (index - 2);\r\n }\r\n else if (index == 3) {\r\n currentStep = (index - 2);\r\n }\r\n else {\r\n currentStep = (index - 1);\r\n }\r\n this.handleChatbotScroll();\r\n currentStep = this.permissionCheckBackStep(currentStep);\r\n this.setState({ currentStep: currentStep, previousStep: index });\r\n }\r\n\r\n permissionCheckNextStep = (nextIndex) => {\r\n if (!this.state.isJobForMe && nextIndex == 6 && !this.state.isEnableSuggestingImage) {\r\n nextIndex = (nextIndex + 1);\r\n }\r\n if (!this.state.isJobForMe && nextIndex == 7 && !this.state.isEnableIssueTag) {\r\n nextIndex = (nextIndex + 1);\r\n }\r\n return nextIndex;\r\n }\r\n\r\n permissionCheckBackStep = (nextIndex) => {\r\n if (!this.state.isJobForMe && nextIndex == 6 && !this.state.isEnableSuggestingImage) {\r\n nextIndex = (nextIndex - 1);\r\n }\r\n if (!this.state.isJobForMe && nextIndex == 7 && !this.state.isEnableIssueTag) {\r\n nextIndex = (nextIndex - 1);\r\n }\r\n return nextIndex;\r\n }\r\n\r\n showAttachmentDrawer = () => {\r\n this.setState({ isShowAttchmentDrawer: true });\r\n }\r\n\r\n checkIfFilesMandatory = (index) => {\r\n const { t } = this.props;\r\n if (!this.state.isJobForMe) {\r\n if (this.state.isMandatoryToUploadFiles) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_attachments_empty') : 'Attachments are required.');\r\n return false;\r\n } else {\r\n this.nextStep(index);\r\n }\r\n } {\r\n this.nextStep(index);\r\n }\r\n }\r\n\r\n onSubmitJob = (workflow) => {\r\n const { t } = this.props; \r\n if (this.state.isJobForMe || workflow == 1) {\r\n if (workflow == 1) {\r\n this.setState({ isDraftJob: true });\r\n }\r\n this.postJob(workflow);\r\n } else {\r\n if (!this.state.isJobForMe && this.state.isMandatoryToUploadFiles && (this.state.attachments == [] || this.state.attachments.length == 0)) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_attachments_empty') : 'Attachments are required.');\r\n return false;\r\n } else {\r\n this.loadDisclaimer(workflow);\r\n }\r\n }\r\n }\r\n\r\n loadDisclaimer = (workflow) => {\r\n this.setState({\r\n isLoading: true\r\n });\r\n propertyService.GetDisclaimerByPropertyId(this.state.formData.propertyId).then(res => {\r\n this.setState({\r\n isLoading: false\r\n });\r\n if (res !== null && res !== '') {\r\n this.setState({\r\n showDisclaimerDrawer: true,\r\n disclamimerText: res,\r\n jobPostWorkflowStatus: workflow,\r\n actionValue :0\r\n });\r\n } else {\r\n this.postJob(workflow);\r\n }\r\n });\r\n }\r\n\r\n validate = (index) => {\r\n const { tradeeCount, jobBudget, budgetAmount, suburbId, isSelectedOnDemand,\r\n inviteToProviders, isJobForMe, selectedTradees, selectedService,\r\n selectedServiceType, formData } = this.state\r\n let currentStep = this.state.stepFlow[index][1];\r\n const { t } = this.props;\r\n switch (currentStep) {\r\n case \"selectProperty\":\r\n if (isJobForMe && (this.state.jobForMe.suburbId == '' || this.state.jobForMe.suburbId == null)) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_invalid_address') : 'Please enter a valid address.');\r\n return false;\r\n }\r\n if (this.state.jobForMe.address == \"\" && isJobForMe) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_no_address') : 'Please enter the address.');\r\n return false;\r\n } else if (!isJobForMe && !this.state.property) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_no_property_selected') : 'Please select a property.');\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n case \"getMaintenaceIssue\":\r\n if ((this.state.formData.jobDescription == '' || this.state.formData.jobDescription == undefined) && (!this.jobDescription.current.value || this.jobDescription.current.value == '')) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_no_jd') : 'Please enter job description.');\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n case \"selectServiceType\":\r\n if (selectedService && selectedService.parentJobType) {\r\n if (selectedServiceType && selectedServiceType.parentJobType && selectedServiceType.parentJobType.id != '') {\r\n if (selectedServiceType.childJobTypes.length > 0 && (!formData.childJobType || formData.childJobType === '')) {\r\n var errorMessage = this.state.isFromBot ? t('pj_error_child_job_type_not_selected') : 'Please select -parentTypeDesc- that you need.';\r\n //errorMessage.replace('-parentType-', selectedServiceType.parentJobType.description.replace(' ? ', ''));\r\n this.notifyError(errorMessage);\r\n return false;\r\n }\r\n } else {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_parent_job_type_not_selected') : 'Please select a type of service.');\r\n return false;\r\n }\r\n } else if (!selectedService.parentJobType) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_service_not_selected') : 'Please select a service.');\r\n return false;\r\n }\r\n return true;\r\n case \"selectUgency\":\r\n if (this.state.jobUrgency == undefined || this.state.jobUrgency == '') {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_urgency_not_selected') : 'Please select job urgency.');\r\n return false;\r\n }\r\n if (this.state.jobUrgency == -999 && this.state.dueDate == '') {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_due_date_not_selected') : 'Please select a due date.');\r\n return false;\r\n }\r\n return true;\r\n case \"selectKeyCollectionType\":\r\n if (this.state.keyCollectType == undefined || this.state.keyCollectType == '') {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_key_coll_method_not_selected') : 'Please select property key collection method.');\r\n return false;\r\n }\r\n return true;\r\n case \"selectBudget\":\r\n if (jobBudget == '') {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_budget_not_selected') : 'Please select your estimate.');\r\n return false;\r\n }\r\n if (jobBudget == '-999' && (budgetAmount == '' || budgetAmount == 0)) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_budget_empty') : 'Please enter your estimate.');\r\n return false;\r\n };\r\n return true;\r\n case \"getAttachments\":\r\n if (!this.state.isJobForMe) {\r\n if (this.state.isMandatoryToUploadFiles && this.state.attachments.length == 0) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_attachments_empty') : 'Attachments are required.');\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n return true;\r\n }\r\n case \"getTrades\":\r\n if (isSelectedOnDemand) {\r\n if (selectedTradees.length == 0) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_trades_not_selected') : 'Please select one or more trades to progress.');\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n } else if (!inviteToProviders) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_trades_not_selected') : 'Please select one or more trades to progress.');\r\n return false;\r\n } else if ((inviteToProviders && !isSelectedOnDemand && tradeeCount == 0)) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_trades_not_selected') : 'Please select one or more trades to progress.');\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n case \"setResponse\":\r\n return this.setResponse(index);\r\n\r\n case \"selectJobRelatedGoogleImage\":\r\n return true;\r\n\r\n case \"getJobTypeTags\":\r\n return true;\r\n\r\n case \"getPropertyComponent\":\r\n return true;\r\n\r\n }\r\n }\r\n\r\n postJob = (workflow) => {\r\n const workflowId = workflow;\r\n let jobDetails = {};\r\n const { address, budget, latitude, location, longitude, placeId, propertyType, suburbId } = this.state.jobForMe;\r\n const { selectedService, selectedServiceType, formData, jobBudget, selectedTradees, isSelectedOnDemand, selectedQuoteLimit, budgetAmount, jobAssignTags, selectedComponent, selectedFeatureComponent } = this.state;\r\n if (this.state.isJobForMe == true) {\r\n\r\n jobDetails.propertyId = null;\r\n jobDetails.suburbId = suburbId;\r\n jobDetails.address = address;\r\n jobDetails.location = location;\r\n jobDetails.jobPropertyTypes = propertyType;\r\n if (this.state.jobForMe && this.state.jobForMe.propertyType && this.state.jobForMe.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n else if (this.state.jobForMe && this.state.jobForMe.propertyType && this.state.jobForMe.propertyType === \"Commercial\") {\r\n jobDetails.propertyTypeId = 1;\r\n } else {\r\n if (this.state.propertyType && this.state.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n } else {\r\n jobDetails.propertyTypeId = 1;\r\n }\r\n }\r\n jobDetails.budgetId = parseInt(jobBudget);\r\n if (jobBudget == '-999') {\r\n jobDetails.budgetAmount = parseFloat(budgetAmount);\r\n }\r\n if (isSelectedOnDemand) {\r\n jobDetails.targetedTradeeOption = 4;\r\n jobDetails.sendInvitationtoAll = false;\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n let tradees = [];\r\n selectedTradees.forEach(element => {\r\n tradees.push({\r\n isAssigned: true,\r\n userId: element.userId,\r\n name: element.name,\r\n email: element.email,\r\n firstName: element.name,\r\n lastName: element.name,\r\n });\r\n });\r\n jobDetails.tradees = tradees;\r\n } else {\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n jobDetails.targetedTradeeOption = 0;\r\n jobDetails.sendInvitationtoAll = true;\r\n jobDetails.tradees = [];\r\n }\r\n } else {\r\n if (this.state.formData.propertyId == 0 || this.state.formData.propertyId == undefined) {\r\n jobDetails.propertyId = null;\r\n jobDetails.suburbId = this.state.locationDetails.suburbId;\r\n jobDetails.address = this.state.locationDetails.address;\r\n jobDetails.jobPropertyTypes = this.refs.jobPropertyTypes.props.value;\r\n if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n } else if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Commercial\") {\r\n jobDetails.propertyTypeId = 1;\r\n }\r\n else {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n } else {\r\n jobDetails.propertyId = this.state.formData.propertyId;\r\n jobDetails.address = this.state.formData.address;\r\n jobDetails.location = this.state.formData.location;\r\n jobDetails.propertyName = this.state.formData.propertyName;\r\n jobDetails.suburbId = this.state.formData.suburbId;\r\n if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n else if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Commercial\") {\r\n jobDetails.propertyTypeId = 1;\r\n } else {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n jobDetails.jobPropertyTypes = this.state.formData.propertyType;\r\n }\r\n jobDetails.propertyKeyCollectType = parseInt(this.state.keyCollectType);\r\n\r\n if (isSelectedOnDemand) {\r\n jobDetails.targetedTradeeOption = 4;\r\n jobDetails.sendInvitationtoAll = false;\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n let tradees = [];\r\n selectedTradees.forEach(element => {\r\n tradees.push({\r\n isAssigned: true,\r\n userId: element.userId,\r\n name: element.name,\r\n email: element.email,\r\n firstName: element.name,\r\n lastName: element.name,\r\n });\r\n });\r\n jobDetails.tradees = tradees;\r\n } else {\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n jobDetails.targetedTradeeOption = 0;\r\n jobDetails.sendInvitationtoAll = true;\r\n jobDetails.tradees = [];\r\n }\r\n }\r\n jobDetails.id = this.state.jobId;\r\n jobDetails.secondaryJobType = this.state.selectedServiceType.parentJobType.id;\r\n jobDetails.secondaryJobTypeDisplay = this.state.selectedServiceType.parentJobType.title;\r\n jobDetails.primaryJobType = this.state.selectedService.parentJobType.id;\r\n jobDetails.primaryJobTypeDisplay = this.state.selectedService.parentJobType.title;\r\n jobDetails.jobPropertyLocks = this.state.propertyLocks.map((item, index) => {\r\n const jobLock = {};\r\n jobLock.jobId = null;\r\n jobLock.propertyLock = {};\r\n jobLock.propertyLock.id = item.id;\r\n jobLock.propertyLock.lockId = item.lockId;\r\n jobLock.propertyLock.propertyId = jobDetails.propertyId;\r\n return jobLock;\r\n });\r\n\r\n if (this.state.formData.childJobTypeId && this.state.formData.childJobTypeId.trim() != \"\") {\r\n jobDetails.jobType = this.state.formData.childJobTypeId;\r\n }\r\n else {\r\n jobDetails.jobType = this.state.selectedServiceType.parentJobType.id;\r\n }\r\n\r\n jobDetails.jobTypeDisplay = this.state.formData.childJobType;\r\n jobDetails.title = this.state.formData.jobDescriptionEng;\r\n jobDetails.description = this.state.formData.jobDescriptionEng;\r\n jobDetails.jobUrgencyId = parseInt(this.state.jobUrgency);\r\n\r\n jobDetails.dueDate = (!this.state.dueDate) ? null : this.state.dueDate;\r\n // jobDetails.JobUrgencyDisplay = this.refs.jobUrgency.props.value;\r\n jobDetails.jobValidityPeriod = 1;\r\n jobDetails.serviceConsumerId = localStorage.getItem('userId');\r\n\r\n jobDetails.workflowStatusId = workflow === 1 ? 1 : 2;\r\n jobDetails.attachments = this.state.attachments;\r\n if (workflowId == 2) {\r\n jobDetails.isActive = true;\r\n }\r\n if (selectedComponent != '') {\r\n jobDetails.JobPropertyComponentId = selectedComponent;\r\n }\r\n\r\n if (jobAssignTags != undefined && jobAssignTags.length > 0) {\r\n jobDetails.JobAssignTagIds = jobAssignTags;\r\n }\r\n\r\n if (selectedFeatureComponent != undefined && selectedFeatureComponent.length > 0) {\r\n jobDetails.JobPropertyFeatureComponentIds = selectedFeatureComponent;\r\n }\r\n\r\n jobDetails.issueAreaInProperty = (this.state.formData.issueAreaInPropertyEng) ? this.state.formData.issueAreaInPropertyEng : this.state.formData.issueAreaInProperty;\r\n\r\n if (this.state.maintenanceTroubleshootGuideId && this.state.maintenanceTroubleshootGuideId != '') {\r\n jobDetails.maintenanceTroubleshootGuideId = this.state.maintenanceTroubleshootGuideId;\r\n }\r\n if(this.state.isFromBot){\r\n jobDetails.channelId = 12;\r\n }else{\r\n jobDetails.channelId = 1;\r\n }\r\n this.setState({ isJobPosting: true })\r\n try {\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/job-post`, jobDetails, {\r\n 'headers': { 'ClientSecret': AppConfiguration.Setting().ClientSecret ,'ChannelId':jobDetails.channelId}\r\n })\r\n .then(dataJson => {\r\n this.setState({ isJobPosting: false })\r\n const message = workflowId === 1 ? 'drafted' : 'posted'\r\n if (dataJson == 'Request Unauthorized' || dataJson == 'Job creation failed') {\r\n toast.error(`Job is not ${message} successfully. Please try again.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n } else {\r\n toast.success(`Job is ${message} successfully.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.setState({ jobNumber: dataJson.jobNumber });\r\n this.setState({ currentStep: 12 });\r\n this.setState({\r\n attachments: [],\r\n value: '',\r\n isShowMoreServices: false,\r\n showDisclaimerDrawer: false,\r\n jobPostWorkflowStatus: 1\r\n });\r\n if (this.state.troubleShootingGuideDetails.troubleshootGuideId != '') {\r\n this.saveTroubleShootResult(false, dataJson.id);\r\n }\r\n }\r\n }, error => {\r\n console.log(error);\r\n this.setState({ isJobPosting: false });\r\n toast.error(`Fail to post the job. Please try again.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n })\r\n )\r\n\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n validateBeforeInviteTradee = () => {\r\n var v = true;\r\n if (this.state.jobForMe.address == '') { this.notifyError('Please enter your address.'); v = v && false; }\r\n if (this.state.selectedService && this.state.selectedService.parentJobType) {\r\n if (this.state.selectedServiceType && this.state.selectedServiceType.parentJobType && this.state.selectedServiceType.parentJobType.id != '') {\r\n if (this.state.selectedServiceType.childJobTypes.length > 0 && (!this.state.formData.childJobType || this.state.formData.childJobType === '')) {\r\n this.notifyError(`Please select ${this.state.selectedServiceType.parentJobType.description.replace('?', '')} that you need.`); v = v && false;\r\n }\r\n } else {\r\n this.notifyError('Please select a type of service.'); v = v && false;\r\n }\r\n } else {\r\n this.notifyError('Please select a service.'); v = v && false;\r\n }\r\n\r\n return v;\r\n }\r\n\r\n saveTroubleShootResult = (isResolved = false, jobId = \"\") => {\r\n let troubleShootResult = {};\r\n troubleShootResult.isResolved = isResolved;\r\n troubleShootResult.jobId = jobId;\r\n troubleShootResult.userId = this.state.userId;\r\n troubleShootResult.maintenanceTroubleshootGuideId = this.state.troubleShootingGuideDetails.troubleshootGuideId;\r\n troubleShootResult.description = this.state.formData.jobDescriptionEng;\r\n troubleShootResult.propertyId = this.state.propertyId;\r\n jobService.saveTroubleShootingResult(troubleShootResult).then(response => {\r\n if (response) {\r\n if (isResolved) {\r\n this.setState({ currentStep: (13) });\r\n }\r\n }\r\n });\r\n }\r\n\r\n continueJobPosting = (index) => {\r\n let jobTypes = this.props.jobTypes;\r\n this.state.selectedService = jobTypes.find(x => x.parentJobType.id == this.state.troubleShootingGuideDetails.primaryJobTypeId);\r\n this.state.primaryJobTypes = this.state.selectedService.childJobTypes;\r\n this.state.parentId = this.state.troubleShootingGuideDetails.primaryJobTypeId;\r\n this.state.isServiceTypeSelected = true;\r\n this.state.childJobTypeId = this.state.troubleShootingGuideDetails.secondaryJobTypeId;\r\n let selectedNode = _.find(jobTypes, f => f.parentJobType.id === this.state.troubleShootingGuideDetails.secondaryJobTypeId);\r\n if (selectedNode !== undefined) {\r\n this.setSecondaryJobType(selectedNode);\r\n }\r\n else {\r\n this.state.selectedServiceType.parentJobType = this.state.selectedService.childJobTypes.find(x => x.id == this.state.troubleShootingGuideDetails.secondaryJobTypeId);\r\n this.state.selectedServiceType.childJobTypes = [];\r\n }\r\n this.setState({\r\n currentStep: (index + 1),\r\n parentId: this.state.troubleShootingGuideDetails.primaryJobTypeId\r\n });\r\n }\r\n\r\n setSecondaryJobType = (selectedNode) => {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: ''\r\n };\r\n this.setState({\r\n secondaryJobTypes: selectedNode.childJobTypes,\r\n selectedServiceType: selectedNode,\r\n formData: formData2\r\n });\r\n }\r\n\r\n setTroubleShooteResponse = () => {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

{this.state.isFromBot ? t('pj_lbl_resolved_issue_response') : 'You have successfully resolved the issue'}

\r\n
\r\n
\r\n {(this.state.isFromBot) ? : Back to home}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n handleChatbotScroll = () => {\r\n if (this.props.isFromBot) {\r\n this.props.scorolToTop();\r\n }\r\n }\r\n\r\n t() {\r\n return false;\r\n }\r\n\r\n addParentJobTypeToFrequentlyUsedServices = (parentId) => {\r\n let { frequentlyUsedServices, availableServices } = this.state;\r\n let parentJob = _.find(frequentlyUsedServices, f => f.value === parentId);\r\n let selectedNode = _.find(availableServices, f => f.value === parentId);\r\n const { i18n } = this.props;\r\n if (!parentJob) {\r\n let services = frequentlyUsedServices;\r\n let parent = {\r\n label: selectedNode.label,\r\n value: selectedNode.value\r\n }\r\n if (this.state.isFromBot && i18n.language !== \"en\" && !i18n.language.toString().includes(\"en\")) {\r\n\r\n this.applyTranslation(([selectedNode.label]), \"en\", i18n.language).then((trans) => {\r\n if (trans.length > 0) {\r\n parent.label = trans[0];\r\n\r\n services.unshift(parent);\r\n this.setState({\r\n frequentlyUsedServices: services\r\n })\r\n }\r\n });\r\n } else {\r\n services.unshift(parent);\r\n this.setState({\r\n frequentlyUsedServices: services\r\n })\r\n }\r\n\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n return {\r\n jobTypes: state.Jobs.jobTypes,\r\n dateFormat: state.User.dateFormat,\r\n userRoles: state.User.userRoles,\r\n properties: state.Tenant.tenantProperties,\r\n isCurrentTenant: state.Tenant.isCurrentTenant,\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateProperties: properties => {\r\n dispatch({ type: \"SET_PROPERTIES\", properties: properties });\r\n },\r\n };\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withTranslation()(OwnerJobPostWizard));","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport { ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport ImageViewer from '../../../Common/ImageViewer/ImageViewer';\r\nimport { AXIOS } from \"../../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { Form } from 'react-bootstrap';\r\nimport jobService from '../../../../Services/JobService';\r\nimport { Guid } from 'guid-typescript';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { Search, Label } from 'semantic-ui-react'\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport * as _ from 'lodash';\r\nimport 'semantic-ui-css/semantic.min.css'\r\nimport './TenantManageJobPostWizard.scss';\r\nimport propertyService from '../../../../Services/PropertyService';\r\nimport AttachmentsDrawer from '../../../Drawers/AttachmentsDrawer/AttachmentsDrawer';\r\nimport { AppConfiguration } from 'read-appsettings-json';\r\nimport { trackPromise } from 'react-promise-tracker';\r\nimport { Paginator } from '../../Paginator/Paginator';\r\nimport Payment from '../../../Tenant/Settings/Payment/Payment';\r\nimport settingsService from \"../../../../Services/settingsService\";\r\nimport { Dropdown } from 'semantic-ui-react';\r\nimport '../../../Tenant/Settings/Settings.scss';\r\nimport ProviderMiniProfileDrawer from '../../../Drawers/JobPostDrawer/ProviderProfileDrawer/ProviderMiniProfileDrawer';\r\nimport Drawer from '../../Drawer/Drawer';\r\nimport moment from 'moment';\r\nimport Pagination from 'rc-pagination';\r\nimport \"rc-pagination/assets/index.css\";\r\n\r\nclass TenantManageJobPostWizard extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.title = React.createRef();\r\n this.jobDescription = React.createRef();\r\n this.budgetRef = React.createRef();\r\n this.issueAreaInProperty = React.createRef();\r\n this.contactNumber = React.createRef();\r\n this.contactPerson = React.createRef();\r\n this.placeToCome = React.createRef();\r\n let userId = localStorage.getItem(\"userId\");\r\n this.getCardDetailsByUserId(userId);\r\n this.checkCardAvailability = this.checkCardAvailability.bind(this);\r\n\r\n }\r\n notifyError = (msg) => {\r\n toast.error(msg, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n\r\n state = {\r\n userType: localStorage.getItem(\"userType\"),\r\n userId: localStorage.getItem(\"userId\"),\r\n stepFlow: [[0, \"checkCardDetailsAvailability\"], [1, \"selectProperty\"], [2, \"selectServiceType\"], [3, \"getMaintenaceIssue\"], [4, \"getContactDetails\"], [5, \"selectUgency\"], [6, \"selectBudget\"], [7, \"selectRecurringType\"], [8, \"getAttachments\"], [9, \"getTrades\"]],\r\n currentStep: 0,\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: '',\r\n propertyName: '',\r\n suburbId: this.props.formData ? this.props.formData.suburbId : '',\r\n propertyType: '',\r\n jobBudget: 0,\r\n jobDescription: '',\r\n issueAreaInProperty: '',\r\n jobTitle: '',\r\n placeToCome: '',\r\n contactPerson: this.props.userData ? this.props.userData.name : '',\r\n contactNumber: this.props.userData ? this.props.userData.phone : '',\r\n latitude: '',\r\n longitude: ''\r\n \r\n },\r\n selectedService: { childJobTypes: [] },\r\n selectedServiceType: {\r\n parentJobType: { id: '' }\r\n },\r\n jobDetails: { attachments: [] },\r\n attachments: [],\r\n jobId: '',\r\n dueDate: '',\r\n jobUrgency: '',\r\n propertyList: [],\r\n value: '',// job service type\r\n isLoading: false,\r\n filteredResults: [],\r\n filteredTradeesResults: [],\r\n allTrades: [],\r\n propertyId: '',\r\n isPropertiesLoading: false,\r\n parentJobTypes: [],\r\n primaryJobTypes: [],\r\n isShowMoreServices: false,\r\n locationDetails: {\r\n latitude: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n location: ''\r\n },\r\n jobBudget: \"\",\r\n selectedTradees: [],\r\n isSelectedOnDemand: false,\r\n isJobPosting: false,\r\n isSubServiceTypeSelected: false,\r\n parentId: '',\r\n childJobTypeId: '',\r\n budgetAmount: 0,\r\n isPropertySelected: false,\r\n title: '',\r\n primaryButtonStyle: (this.props.customStyle && this.props.customStyle.primaryButtonStyle) ? this.props.customStyle.primaryButtonStyle : {\r\n color: ''\r\n },\r\n secondaryButtonStyle: (this.props.customStyle && this.props.customStyle.secondaryButtonStyle) ? this.props.customStyle.secondaryButtonStyle : {\r\n color: ''\r\n },\r\n optionsStyle: (this.props.customStyle && this.props.customStyle.optionsStyle) ? this.props.customStyle.optionsStyle : {\r\n color: ''\r\n },\r\n tradeeCount: 0,\r\n previousStep: 0,\r\n propertyType: \"Residential\",\r\n organizationId: \"\",\r\n valueOfTradeSearch: '',\r\n isTradeLoading: false,\r\n total: 0,\r\n sizePerPage: 5,\r\n page: 1,\r\n tradeSearchtext:'',\r\n selectedProviderId: [],\r\n providerViewId: '',\r\n isShowProviderDrawer: false,\r\n displayTradesArray: [],\r\n recurringType: \"0\",\r\n fromDate: '',\r\n toDate: '',\r\n isCardAvailable: true,\r\n isCardLoading: true,\r\n minBudgetAmount: 0,\r\n maxBudgetAmount: 0,\r\n recurringCustomType: 0,\r\n tradeRequestType: '',\r\n quoteRequestLimit: 10,\r\n isHoldAmountFromTenant: false,\r\n holdAmountFromTenantPerJob: 0,\r\n selectedParent: {},\r\n secondaryJobTypes: [],\r\n subChildJobTypeId: ''\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({\r\n jobId: Guid.create().toString(),\r\n jobDetails: {\r\n id: this.state.jobId\r\n }\r\n });\r\n\r\n this.getAvailableServices();\r\n this.getAllAvailableJobTypes();\r\n this.GetTenantPropertiesByUserId();\r\n this.getUserSettings();\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.props.isCustomThemeEnable) {\r\n this.createToggleBtnDynamicStyle();\r\n this.createOkBtnDynamicStyle();\r\n //this.createActiveBtnDynamicStyle();\r\n this.attchmentBarStyle();\r\n }\r\n }\r\n\r\n //Styles\r\n createToggleBtnDynamicStyle() {\r\n const color = this.props.customStyle.optionsStyle.color;\r\n const border = this.props.customStyle.optionsStyle.border;\r\n let labelInsideToggleGroup = document.querySelectorAll('label.btn');\r\n\r\n for (var i = 0; i < labelInsideToggleGroup.length; i++) {\r\n labelInsideToggleGroup[i].style.color = color;\r\n labelInsideToggleGroup[i].style.border = border;\r\n labelInsideToggleGroup[i].style.background = '';\r\n }\r\n }\r\n\r\n createOkBtnDynamicStyle() {\r\n const color = this.props.customStyle.optionsStyle.color;\r\n let okIcons = document.querySelectorAll('span.ba-icn-ok');\r\n\r\n for (var i = 0; i < okIcons.length; i++) {\r\n okIcons[i].style.background = color;\r\n }\r\n }\r\n\r\n createActiveBtnDynamicStyle() {\r\n const color = this.props.customStyle.optionsStyle.activeBackground;\r\n let active = document.querySelectorAll('label.btn.active');\r\n for (var i = 0; i < active.length; i++) {\r\n active[i].style.background = color;\r\n }\r\n }\r\n\r\n attchmentBarStyle() {\r\n const color = this.props.customStyle.optionsStyle.color;\r\n const border = this.props.customStyle.optionsStyle.border;\r\n let label = document.querySelector('.rich-control');\r\n if (label) {\r\n label.querySelector('label').style.color = color;\r\n }\r\n let boader = document.querySelector('div.form-control.rich-control');\r\n if (boader) {\r\n boader.style.border = border;\r\n }\r\n }\r\n\r\n showCurrentStep = (index) => {\r\n let currentStep = this.state.stepFlow[index][1];\r\n switch (currentStep) {\r\n case \"checkCardDetailsAvailability\":\r\n return this.checkCardDetailsAvailabilityStep(index);\r\n case \"selectProperty\":\r\n return this.selectPropertyStep(index);\r\n case \"getMaintenaceIssue\":\r\n return this.getMaintenaceIssue(index);\r\n case \"selectServiceType\":\r\n return this.selectServiceType(index);\r\n case \"getContactDetails\":\r\n return this.getContactDetails(index);\r\n case \"selectUgency\":\r\n return this.selectUgency(index);\r\n case \"selectBudget\":\r\n return this.selectBudget(index);\r\n case \"selectRecurringType\":\r\n return this.selectRecurringType(index);\r\n case \"getAttachments\":\r\n return this.getAttachments(index);\r\n case \"getTrades\":\r\n return this.getTrades(index);\r\n default:\r\n return this.nextStep(index);\r\n }\r\n }\r\n\r\n nextStep = (index) => {\r\n var currentStep = index;\r\n if (this.validate(index)) {\r\n if (currentStep === 8) {\r\n this.getTradesList();\r\n }\r\n else if (currentStep === 9) {\r\n this.checkTradeRequestType();\r\n return true;\r\n }\r\n currentStep = (index + 1);\r\n }\r\n else {\r\n return false;\r\n }\r\n this.setState({ currentStep: currentStep, previousStep: index });\r\n }\r\n\r\n previousStep = (index) => {\r\n var currentStep = index;\r\n currentStep = (index - 1);\r\n\r\n this.setState({ currentStep: currentStep, previousStep: index });\r\n }\r\n\r\n //get data\r\n GetTenantPropertiesByUserId = () => {\r\n this.setState({ isPropertiesLoading: true,propertyList:[],property:'' });\r\n let properties;\r\n let propertyNames = [];\r\n propertyService.GetTenantPropertiesByUserId()\r\n .then((res) => {\r\n properties = res.properties;\r\n if (res.properties.length > 0) {\r\n properties.forEach(x => {\r\n propertyNames.push(x.address ? x.address : \" \");\r\n });\r\n\r\n this.setState({\r\n propertyList: properties,\r\n isPropertiesLoading: false,\r\n property: properties.length === 1 ? properties[0] : ''\r\n });\r\n if(properties.length === 1){\r\n this.getPropertyDetailsByPropertyId(properties[0].propertyId);\r\n } \r\n }\r\n else {\r\n this.setState({\r\n propertyList: [],\r\n propertyId: 0\r\n });\r\n }\r\n });\r\n }\r\n\r\n getAllAvailableJobTypes() {\r\n let jobTypes = this.props.jobTypes;\r\n let parents = _.map(jobTypes, m => m.parentJobType);\r\n const parentJobTypes = _.filter(parents, f => f.parentRef === null);\r\n this.setState({ parentJobTypes: parentJobTypes });\r\n }\r\n\r\n getPropertyDetailsByPropertyId = (propertyId) => {\r\n const selectedProperty = this.state.propertyList.filter(a => a.propertyId == propertyId);\r\n if (selectedProperty && selectedProperty.length > 0 && selectedProperty[0].propertyId != null) {\r\n\r\n let formData = this.state.formData;\r\n formData.address = selectedProperty[0].address;\r\n formData.location = selectedProperty[0].location;\r\n formData.propertyId = selectedProperty[0].propertyId;\r\n formData.propertyName = selectedProperty[0].propertyName;\r\n formData.suburbId = selectedProperty[0].suburbId;\r\n formData.propertyType = selectedProperty[0].propertyType;\r\n formData.latitude = selectedProperty[0].latitude;\r\n formData.longitude = selectedProperty[0].longitude;\r\n this.setState({\r\n propertyId: propertyId,\r\n //locationDetails: {},\r\n formData: formData,\r\n locationDetails: selectedProperty[0],\r\n });\r\n \r\n } else {\r\n this.setState({\r\n propertyId: null,\r\n locationDetails: {}\r\n });\r\n }\r\n }\r\n\r\n\r\n handlePropertyChange = (event) => {\r\n var property = event.currentTarget.querySelector(\"input\").value;\r\n this.setState({ property: property });\r\n this.getPropertyDetailsByPropertyId(property);\r\n }\r\n\r\n setLocationDetails = (event) => {\r\n this.setState({\r\n locationDetails: event,\r\n formData: {\r\n address: event.address\r\n }\r\n });\r\n }\r\n\r\n handleOnChangeJobDescription = () => {\r\n let formdata = this.state.formData;\r\n const typedDescription = this.jobDescription.current.value;\r\n formdata.jobDescription = typedDescription;\r\n this.setState({\r\n formdata: formdata\r\n });\r\n }\r\n\r\n handleOnChangeJobIssueArea = () => {\r\n let formdata = this.state.formData;\r\n const typedArea = this.issueAreaInProperty.current.value;\r\n formdata.issueAreaInProperty = typedArea;\r\n this.setState({ formdata: formdata });\r\n }\r\n\r\n handleOnChangeJobTitle = () => {\r\n let formdata = this.state.formData;\r\n const title = this.title.current.value;\r\n formdata.jobTitle = title;\r\n this.setState({\r\n formdata: formdata\r\n });\r\n }\r\n\r\n handleOnChangeContactNumber = () => {\r\n let formdata = this.state.formData;\r\n const number = this.contactNumber.current.value;\r\n formdata.contactNumber = number;\r\n this.setState({\r\n formdata: formdata\r\n });\r\n }\r\n\r\n handleOnChangeContactPerson = () => {\r\n let formdata = this.state.formData;\r\n const person = this.contactPerson.current.value;\r\n formdata.contactPerson = person;\r\n this.setState({\r\n formdata: formdata\r\n });\r\n }\r\n\r\n handleOnChangePlaceTocome = () => {\r\n let formdata = this.state.formData;\r\n const placeToCome = this.placeToCome.current.value;\r\n formdata.placeToCome = placeToCome;\r\n this.setState({\r\n formdata: formdata\r\n });\r\n }\r\n\r\n handleResultSelect = (e, { result }) => {\r\n this.setState({ value: result.label })\r\n this.getChildJobTypes(result.id);\r\n }\r\n\r\n handleSearchChange = (e, { value }) => {\r\n this.setState({ filteredResults: [], value });\r\n if (value.length > 2) {\r\n this.setState({ isLoading: true })\r\n setTimeout(() => {\r\n document.querySelector('.jobpost-wizard .auto-complete').classList.remove(\"hide-results\");\r\n this.setState({\r\n primaryJobTypes: [],\r\n isLoading: false,\r\n filteredResults: this.state.parentJobTypes.filter(suggestion => suggestion.label.toLowerCase().indexOf(this.state.value.toLowerCase()) > -1)\r\n })\r\n }, 300)\r\n } else if (value.length === 0) {//Reset selectd sub types\r\n let formData = this.state.formData;\r\n formData.childJobType = '';\r\n formData.childJobTypeId = '';\r\n this.setState({\r\n isSubServiceTypeSelected:false,\r\n isServiceTypeSelected: false,\r\n selectedService: '',\r\n childJobTypeId: '',\r\n selectedServiceType: {\r\n parentJobType: { id: '' },\r\n childJobTypes: []\r\n }\r\n });\r\n this.createTypeOfServicesButtons();\r\n }\r\n else {\r\n document.querySelector('.jobpost-wizard .auto-complete').classList.add(\"hide-results\");\r\n }\r\n }\r\n\r\n resultRenderer = (event) => {\r\n return \r\n }\r\n\r\n getChildJobTypes(parentId) {\r\n let jobTypes = this.props.jobTypes;\r\n let selectedNode = _.find(jobTypes, f => f.parentJobType.id === parentId);\r\n\r\n if (this.state.selectedServiceType && this.state.selectedServiceType.parentJobType && _.find(selectedNode.childJobTypes, f => f.id === this.state.selectedServiceType.parentJobType.id)) {\r\n this.setState({\r\n primaryJobTypes: selectedNode.childJobTypes,\r\n selectedService: selectedNode\r\n });\r\n this.setState({ childJobTypeId: selectedNode });\r\n } else {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: '',\r\n\r\n }\r\n this.setState({\r\n primaryJobTypes: selectedNode.childJobTypes,\r\n selectedService: selectedNode,\r\n secondaryJobTypes: [],\r\n selectedServiceType: {\r\n parentJobType: { id: '' }\r\n },\r\n formData: formData2\r\n });\r\n }\r\n }\r\n\r\n getSubChildJobTypes(parentId) {\r\n this.setState({ childJobTypeId: parentId });\r\n this.setState({ isSubServiceTypeSelected: true });\r\n let jobTypes = this.props.jobTypes;\r\n let selectedNode = _.find(jobTypes, f => f.parentJobType.id === parentId);\r\n\r\n if (selectedNode == undefined) {\r\n let selectedServiceType = {\r\n childJobTypes: [],\r\n parentJobType: _.find(this.state.primaryJobTypes, f => f.id === parentId)\r\n }\r\n let formData1 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: ''\r\n };\r\n this.setState({\r\n secondaryJobTypes: [],\r\n selectedServiceType: selectedServiceType,\r\n formData: formData1\r\n });\r\n\r\n } else {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: ''\r\n };\r\n this.setState({\r\n secondaryJobTypes: selectedNode.childJobTypes,\r\n selectedServiceType: selectedNode,\r\n formData: formData2\r\n });\r\n }\r\n\r\n }\r\n\r\n onChangeChildTypeOfServices = (input) => {\r\n this.setState({ subChildJobTypeId: input });\r\n const childJobType = this.state.selectedServiceType.childJobTypes.filter(a => a.id === input)[0];\r\n let formData = this.state.formData;\r\n formData.childJobTypeId = childJobType.id;\r\n formData.childJobType = childJobType.title;\r\n this.setState({ formData: formData });\r\n }\r\n\r\n handleDueDateChange = (date) => {\r\n this.setState({\r\n dueDate: date,\r\n });\r\n }\r\n\r\n getRecurringDate = (date, recurringType) => {\r\n var toDate = new Date(date);\r\n if (recurringType === \"1\") {\r\n toDate.setDate(toDate.getDate() + 1);\r\n }\r\n else if (recurringType === \"7\") {\r\n toDate.setDate(toDate.getDate() + 7);\r\n }\r\n else if (recurringType === \"14\") {\r\n toDate.setDate(toDate.getDate() + 14);\r\n }\r\n else if (recurringType === \"30\") {\r\n toDate.setMonth(toDate.getMonth() + 1);\r\n }\r\n else if (recurringType === \"90\") {\r\n toDate.setMonth(toDate.getMonth() + 3);\r\n }\r\n else if (recurringType === \"180\") {\r\n toDate.setMonth(toDate.getMonth() + 6);\r\n }\r\n else if (recurringType === \"365\") {\r\n toDate.setMonth(toDate.getMonth() + 12);\r\n }\r\n\r\n return toDate;\r\n }\r\n\r\n handleFromDateChange = (date) => {\r\n var toDate = this.getRecurringDate(date, this.state.recurringType);\r\n var fromDate = date;\r\n\r\n this.setState({\r\n fromDate: fromDate,\r\n toDate: toDate\r\n });\r\n }\r\n\r\n handleCustomRecurring = (event,data) => {\r\n var toDate = this.getCustomRecurringDate(this.state.fromDate, data.value);\r\n var fromDate = this.state.fromDate;\r\n\r\n this.setState({\r\n fromDate: fromDate,\r\n toDate: toDate,\r\n recurringCustomType: data.value\r\n });\r\n\r\n }\r\n\r\n getCustomRecurringDate = (date, numberOfWeek) => {\r\n var toDate = new Date(date);\r\n toDate.setDate(toDate.getDate() + (7 * numberOfWeek));\r\n return toDate;\r\n }\r\n\r\n handleToDateChange = (date) => {\r\n this.setState({\r\n toDate: date\r\n });\r\n }\r\n\r\n handleJobUrgencyOnChange = (value) => {\r\n if(value != -999){\r\n this.setState({ dueDate: '' });\r\n }\r\n this.setState({ jobUrgency: value });\r\n }\r\n\r\n getDueDate = () => {\r\n if (this.state.jobUrgency == -999) {\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n }\r\n\r\n onChangeJobBudget = (value) => {\r\n this.setState({ jobBudget: value });\r\n if (value !== \"7\") {\r\n this.setState({ minBudgetAmount: 0, maxBudgetAmount: 0 });\r\n }\r\n if (value !== \"-999\") {\r\n this.setState({ budgetAmount: 0 });\r\n }\r\n }\r\n\r\n toFixed(num, fixed) {\r\n var re = new RegExp(\"^-?\\\\d+(?:.\\\\d{0,\" + (fixed || -1) + \"})?\"); \r\n return num.toString().match(re)[0]; \r\n }\r\n\r\n onChangeAmount = (event) => {\r\n let amount = event.target.value;\r\n amount = amount ? this.toFixed(amount, 2) : amount;\r\n this.setState({ budgetAmount: amount });\r\n }\r\n\r\n onChangeMinAmount = (event) => {\r\n let amount = event.target.value;\r\n amount = amount ? this.toFixed(amount, 2) : amount;\r\n this.setState({ minBudgetAmount: amount });\r\n }\r\n\r\n onChangeMaxAmount = (event) => {\r\n let amount = event.target.value;\r\n amount = amount ? this.toFixed(amount, 2) : amount;\r\n this.setState({ maxBudgetAmount: amount });\r\n }\r\n\r\n handleJobRecurringTypeOnChange = (value) => {\r\n if (value === \"0\") {\r\n this.setState({ recurringType: value, fromDate: '', toDate: '' });\r\n }else if(value===\"999\"){\r\n var fromDate = new Date();\r\n var toDate = this.getRecurringDate(fromDate, \"7\");\r\n this.setState({ recurringType: value, fromDate: fromDate, toDate: toDate, recurringCustomType:1 });\r\n }\r\n else {\r\n var fromDate = new Date();\r\n var toDate = this.getRecurringDate(fromDate, value);\r\n this.setState({ recurringType: value, fromDate: fromDate, toDate: toDate });\r\n }\r\n }\r\n\r\n getCardDetailsByUserId = (userId) => {\r\n settingsService\r\n .getCardDetailsByUserId(userId)\r\n .then((res) => {\r\n if (res.length > 0) {\r\n this.setState({\r\n currentStep: 1,\r\n isCardAvailable: true\r\n\r\n });\r\n }\r\n else {\r\n this.setState({\r\n isCardAvailable: false\r\n });\r\n }\r\n });\r\n }\r\n\r\n checkCardAvailability = () => {\r\n this.setState({\r\n isCardLoading: false\r\n });\r\n }\r\n\r\n getUserSettings = () => {\r\n trackPromise(\r\n settingsService.getUserSettings()\r\n .then(response => {\r\n this.setState({\r\n quoteRequestLimit: response.quoteSettings.quoteLimit > 0 ? response.quoteSettings.quoteLimit:10,\r\n })\r\n })\r\n );\r\n }\r\n \r\n //Steps\r\n checkCardDetailsAvailabilityStep = (index) => {\r\n return (\r\n <>\r\n {!this.state.isCardAvailable ?\r\n
\r\n
\r\n
\r\n

Card Details

\r\n
\r\n
\r\n To proceed with the job posting, please enter a valid credit card.\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n {this.state.isCardLoading &&\r\n
\r\n }\r\n
\r\n
\r\n :\r\n
\r\n }\r\n \r\n );\r\n }\r\n\r\n selectPropertyStep = (index) => {\r\n const { propertyList, formData, property } = this.state;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

Which property do you wish to log a maintenance request for?

\r\n
Choose an option
\r\n
\r\n
\r\n {(this.state.isPropertiesLoading) ?
: ''}\r\n \r\n { this.handlePropertyChange(value) }}>\r\n {propertyList.map((a, index) => {\r\n return
{a.address}
\r\n })\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
By selecting this option, you are responsible to manage the job and setting any required payments\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
);\r\n }\r\n\r\n selectServiceType = (index) => {\r\n const { isLoading, value, filteredResults } = this.state\r\n let serviceTypes = this.createTypeOfServicesButtons();\r\n let serviceTypeChild = this.createTypeOfServicesChildButtons();\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n

Choose the service type you need.*

\r\n
Choose an option
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {serviceTypes}\r\n {serviceTypeChild} \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n createTypeOfServicesButtons = () => {\r\n const { t } = this.props;\r\n let isServiceTypeSelected = this.state.isServiceTypeSelected;\r\n if (this.state.selectedService.childJobTypes) {\r\n return (\r\n <>\r\n
\r\n {(isServiceTypeSelected) ?\r\n
\r\n

{this.state.isFromBot ? t('pj_lbl_select_sub_type') : 'Please select the type of subservice you require.'}*

\r\n

{this.state.isFromBot ? t('pj_lbl_choose_an_option') : 'choose an option'}

\r\n
\r\n\r\n : ''}\r\n\r\n \r\n { this.getSubChildJobTypes(event); }}>\r\n {this.state.selectedService.childJobTypes.map((jbType, index) => {\r\n return {jbType.label};\r\n })}\r\n \r\n \r\n
\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n }\r\n\r\n createTypeOfServicesChildButtons = (props) => {\r\n \r\n if (this.state.secondaryJobTypes.length > 0) {\r\n return (\r\n <>\r\n
\r\n

{this.state.selectedServiceType.parentJobType.description}*

\r\n \r\n \r\n {this.state.secondaryJobTypes.map((jbType, index) => { \r\n return {jbType.label};\r\n })}\r\n \r\n \r\n
\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n\r\n }\r\n\r\n getMaintenaceIssue = (index) => {\r\n return (\r\n
\r\n
\r\n
\r\n

{'Please describe your maintenance issue'}*

\r\n {(this.state.formData.address) ?\r\n
{'You are logging this maintenance issue for'} {this.state.formData.address}
: ''}\r\n
\r\n\r\n
\r\n \r\n this.handleOnChangeJobTitle()} >\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 getContactDetails = (index) => {\r\n return (\r\n
\r\n
\r\n
\r\n

{'Add location & contact details'}

\r\n
{'This will help trade to find the location when attending to fix the issue'}
\r\n
\r\n\r\n
\r\n \r\n this.handleOnChangeJobIssueArea()} >\r\n \r\n
\r\n
\r\n \r\n this.handleOnChangePlaceTocome()} >\r\n \r\n
\r\n
\r\n \r\n this.handleOnChangeContactPerson()} >\r\n \r\n
\r\n
\r\n \r\n this.handleOnChangeContactNumber()} >\r\n \r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
);\r\n }\r\n\r\n selectUgency = (index) => {\r\n const dueDate = this.getDueDate();\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n

{'When do you want this issue to be fixed?'}*

\r\n
{'choose an option'}
\r\n
\r\n
\r\n \r\n this.handleJobUrgencyOnChange(value)} defaultValue={this.state.jobUrgency}>\r\n {' Urgently'}\r\n {' Within a few days'}\r\n {' Within a week'}\r\n {' By this date'}\r\n \r\n \r\n
\r\n {dueDate}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n selectBudget = (index) => {\r\n const preventMinus = (e) => {\r\n if (e.charCode === 45 || e.charCode === 101) {\r\n e.preventDefault();\r\n }\r\n };\r\n return (\r\n
\r\n
\r\n
\r\n

Do you have an estimate in mind?*

\r\n
Choose an option
\r\n
\r\n
\r\n \r\n this.onChangeJobBudget(value)} defaultValue={this.state.jobBudget}>\r\n Under $500\r\n $500 - $1000\r\n $1000 - $2000\r\n $2000 - $5000\r\n $5000+\r\n Unsure\r\n Custom\r\n Estimate\r\n \r\n \r\n
\r\n {this.state.jobBudget == -999 ?\r\n
\r\n preventMinus(e)} onChange={e => this.onChangeAmount(e)}>\r\n \r\n
\r\n : (this.state.jobBudget == 7) &&\r\n
\r\n
\r\n \r\n preventMinus(e)} onChange={e => this.onChangeMinAmount(e)}>\r\n \r\n
\r\n
\r\n \r\n preventMinus(e)} onChange={e => this.onChangeMaxAmount(e)}>\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 selectRecurringType = (index) => {\r\n const customRecurringOptions = [\r\n { key: 1, text: '1 Week', value: 1 },\r\n { key: 2, text: '2 Weeks', value: 2 },\r\n { key: 3, text: '3 Weeks', value: 3 },\r\n { key: 4, text: '4 Weeks', value: 4 },\r\n { key: 5, text: '5 Weeks', value: 5 },\r\n { key: 6, text: '6 Weeks', value: 6 },\r\n { key: 7, text: '7 Weeks', value: 7 },\r\n { key: 8, text: '8 Weeks', value: 8 },\r\n { key: 9, text: '9 Weeks', value: 9 },\r\n { key: 10, text: '10 Weeks', value: 10 }\r\n ];\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n

{'Select the job recurring type'}*

\r\n
{'choose an option'}
\r\n
\r\n
\r\n \r\n this.handleJobRecurringTypeOnChange(value)} defaultValue={this.state.recurringType}>\r\n {' No recurrence'}\r\n {' Daily'}\r\n {' Weekly'}\r\n {' Fortnightly'}\r\n {' Monthly'}\r\n {' Quartely'}\r\n {' Semi annually'}\r\n {' Annually'}\r\n {' Custom'}\r\n \r\n \r\n
\r\n {this.state.recurringType === \"999\" &&\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 getAttachments = (index) => {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n

{'Attachments'}

\r\n
{'Attach images or videos that describe your issue properly.'}
\r\n
\r\n
\r\n
\r\n { this.setState({ attachments: event }) }}\r\n isJobPost={true}>\r\n \r\n {(this.state.attachments) ?\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 getTrades = (index) => {\r\n const { isTradeLoading, displayTradesArray } = this.state\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n

Assign Trade(s).

\r\n
Choose an option
\r\n
\r\n
\r\n \r\n this.handleTradeRequestChange(value)} defaultValue={this.state.tradeRequestType}>\r\n
I want a work order
\r\n
I want a quote
\r\n
\r\n
\r\n
\r\n {this.state.tradeRequestType == 1 ?
\r\n \r\n \r\n
: ''}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n {displayTradesArray.length == 0 &&
Trades are not available for the selected service type / sub type.
}\r\n {displayTradesArray.map((item, index) => {\r\n return
this.selectTrade(item, index)}>\r\n
this.providerProfileView(event,item.id)}>\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n ${item.calloutFee}\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 {displayTradesArray.length > 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 selectTrade = (item, index) => {\r\n let { selectedProviderId,tradeRequestType } = this.state;\r\n\r\n if(tradeRequestType===\"2\"){\r\n selectedProviderId=[];\r\n selectedProviderId.push(item.id);\r\n }else if(tradeRequestType===\"1\"){\r\n if (selectedProviderId.includes(item.id)) {\r\n selectedProviderId.pop(item.id)\r\n } else {\r\n selectedProviderId.push(item.id);\r\n }\r\n }\r\n \r\n\r\n this.setState({ selectedProviderId: selectedProviderId });\r\n }\r\n\r\n providerProfileView = (e,id) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.setState({ providerViewId: id, isShowProviderDrawer: true });\r\n }\r\n\r\n handleTradeRequestChange = (value) => {\r\n this.setState({ tradeRequestType: value,selectedProviderId:[] });\r\n }\r\n handleQuoteLimitChange = (event) => {\r\n this.setState({ quoteRequestLimit: event.target.value });\r\n }\r\n\r\n onChange = pagenumber => {\r\n this.setState({page:pagenumber}, function() {\r\n this.getTradesList();\r\n }); \r\n };\r\n\r\n updateJobList = (status, pagenumber) => {\r\n if(status){\r\n this.setState({page:pagenumber}, function() {\r\n this.getTradesList();\r\n }); \r\n }\r\n }\r\n\r\n onCloseProviderDrawer = () => {\r\n this.setState({ isShowProviderDrawer: false });\r\n }\r\n\r\n handleTradeSearchChange = (e) => {\r\n const { allTrades } = this.state;\r\n let value = e.target.value;\r\n this.setState({valueOfTradeSearch:value}, function() {\r\n this.getTradesList();\r\n });\r\n \r\n }\r\n\r\n validate = (index) => {\r\n const { tradeeCount, jobBudget, budgetAmount, selectedService,\r\n selectedServiceType, formData, minBudgetAmount, maxBudgetAmount, recurringType, selectedProviderId, tradeRequestType } = this.state\r\n let currentStep = this.state.stepFlow[index][1];\r\n switch (currentStep) {\r\n case \"checkCardDetailsAvailability\":\r\n return true;\r\n case \"selectProperty\":\r\n if (!this.state.property) {\r\n this.notifyError('Please select a property.');\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n case \"getMaintenaceIssue\":\r\n if ((this.state.formData.jobDescription ? this.state.formData.jobDescription.trim() == '' : true || this.state.formData.jobDescription == undefined) && (!this.jobDescription.current.value || this.jobDescription.current.value == '')) {\r\n this.notifyError('Please enter job description.');\r\n return false;\r\n }\r\n else if ((this.state.formData.jobTitle ? this.state.formData.jobTitle.trim() == '' : true || this.state.formData.jobTitle == undefined) && (!this.title.current.value || this.title.current.value == '')) {\r\n this.notifyError('Please enter job title.');\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n case \"selectServiceType\":\r\n if (selectedService && selectedServiceType.parentJobType) {\r\n if (selectedServiceType.parentJobType.id != '') {\r\n if (selectedServiceType.childJobTypes.length > 0 && (!formData.childJobType || formData.childJobType === '')) {\r\n var errorMessage = 'Please select sub type that you need.';\r\n this.notifyError(errorMessage);\r\n return false;\r\n }\r\n } else {\r\n this.notifyError('Please select a type of service.');\r\n return false;\r\n }\r\n } else if (!selectedService.parentJobType) {\r\n this.notifyError('Please select a service.');\r\n return false;\r\n }\r\n return true;\r\n case \"getContactDetails\"://Optional\r\n return true;\r\n case \"selectUgency\":\r\n if (this.state.jobUrgency == undefined || this.state.jobUrgency == '') {\r\n this.notifyError('Please select job urgency.');\r\n return false;\r\n }\r\n if (this.state.jobUrgency == -999 && this.state.dueDate == '') {\r\n this.notifyError('Please select a due date.');\r\n return false;\r\n }\r\n return true;\r\n case \"selectBudget\":\r\n if (jobBudget === '') {\r\n this.notifyError('Please select your estimate.');\r\n return false;\r\n }\r\n else if (jobBudget === \"-999\" && (budgetAmount == '' || budgetAmount == \"0\" || budgetAmount === 0 )) {\r\n this.notifyError('Please enter your estimate.');\r\n return false;\r\n }\r\n else if (jobBudget === \"7\" && (minBudgetAmount == '' || minBudgetAmount == \"0\" || minBudgetAmount === 0)) {\r\n this.notifyError('Please enter your minimum estimate amount.');\r\n return false;\r\n }\r\n else if (jobBudget === \"7\" && (maxBudgetAmount == '' || maxBudgetAmount == \"0\" || maxBudgetAmount === 0)) {\r\n this.notifyError('Please enter your maximum estimate amount.');\r\n return false;\r\n }\r\n else if (jobBudget === \"7\" && (maxBudgetAmount < minBudgetAmount)) {\r\n this.notifyError('Minimum estimate cannot exceed the maximum amount');\r\n return false;\r\n };\r\n return true;\r\n case \"selectRecurringType\":\r\n if (recurringType === '') {\r\n this.notifyError('Please select From date and To date.');\r\n return false;\r\n }\r\n else if (this.state.recurringType !== \"0\" && (this.state.fromDate === '' || this.state.toDate === '')) {\r\n this.notifyError('Please select From date and To date.');\r\n return false;\r\n }\r\n else if (this.state.fromDate > this.state.toDate) {\r\n this.notifyError('Please check From date and To date.');\r\n return false;\r\n }\r\n return true;\r\n case \"getAttachments\":\r\n return true;\r\n case \"getTrades\":\r\n if (selectedProviderId.length === 0) {\r\n this.notifyError('Please select trade to progress.');\r\n return false;\r\n }\r\n if (tradeRequestType == '') {\r\n this.notifyError('Please select work order or quote to progress.');\r\n return false;\r\n }\r\n return true;\r\n }\r\n }\r\n\r\n postJob = () => {\r\n\r\n let jobDetails = postModel();\r\n\r\n jobDetails.jobCategoryDisplay = this.state.value;\r\n jobDetails.longitude = this.state.formdata.longitude;\r\n jobDetails.latitude = this.state.formdata.latitude;\r\n\r\n jobDetails.attachments = this.state.attachments;\r\n jobDetails.isTradePostedJob = false;\r\n jobDetails.userId = localStorage.getItem(\"userIdDecripted\");\r\n jobDetails.isScheduled = false;\r\n jobDetails.propertyKeyCollectType = 0;\r\n jobDetails.description = this.state.formdata.jobDescription;\r\n jobDetails.title = this.state.formdata.jobTitle;\r\n jobDetails.workflowStatusId = 2;\r\n jobDetails.isPropertyRelatedJob = false;\r\n jobDetails.id = \"00000000-0000-0000-0000-000000000000\";\r\n jobDetails.address = this.state.formdata.address;\r\n jobDetails.awardedTradeeId = this.state.tradeRequestType == '2' ? this.state.selectedProviderId[0] : '';//TODO multiple trade\r\n\r\n jobDetails.endTime = 0;\r\n jobDetails.taskStatus = 0;\r\n jobDetails.whereJobLocated = this.state.formdata.issueAreaInProperty;\r\n jobDetails.whereToCome = this.state.formdata.placeToCome;\r\n jobDetails.contactPersonName = this.state.formdata.contactPerson;\r\n jobDetails.contactPersonNumber = this.state.formdata.contactNumber;\r\n jobDetails.countryId = this.props.userData ? this.props.userData.countryID : '';\r\n jobDetails.jobUrgencyId = parseInt(this.state.jobUrgency);\r\n if(parseInt(this.state.jobUrgency)==-999){\r\n jobDetails.dueDate = this.state.dueDate;\r\n }\r\n jobDetails.primaryJobType = this.state.selectedServiceType.parentJobType.id;\r\n jobDetails.jobCategoryId = \"00000000-0000-0000-0000-000000000000\";\r\n\r\n jobDetails.isHideTenantDetailsToOwner = false;\r\n jobDetails.isCloneFromJobPost = false;\r\n jobDetails.hasBidsForOwnerApproval = false;\r\n jobDetails.placeBidType = 1;\r\n jobDetails.isDeclined = false;\r\n jobDetails.suburbId = this.state.formdata.suburbId;\r\n\r\n jobDetails.budgetId = parseInt(this.state.jobBudget);\r\n\r\n jobDetails.quoteLimit = this.state.quoteRequestLimit ? this.state.quoteRequestLimit : 0;\r\n\r\n jobDetails.jobInformation.hasRecuringJobs = this.state.recurringType != 0 ? true : false;\r\n jobDetails.isOwnerAttending = false;\r\n jobDetails.secondaryJobType = this.state.selectedServiceType.parentJobType.id;\r\n jobDetails.secondaryJobTypeDisplay = this.state.selectedServiceType.parentJobType.title;\r\n jobDetails.primaryJobType = this.state.selectedService.parentJobType.id;\r\n jobDetails.primaryJobTypeDisplay = this.state.selectedService.parentJobType.title;\r\n\r\n jobDetails.serviceConsumerId = localStorage.getItem(\"userIdDecripted\");\r\n jobDetails.targetedTradeeOption = parseInt(this.state.tradeRequestType);\r\n\r\n jobDetails.consumerTypePropertyId = this.state.formdata.propertyId;\r\n //jobDetails.propertyId = null;\r\n jobDetails.budgetAmount = parseFloat(this.state.budgetAmount);\r\n jobDetails.payerId = localStorage.getItem(\"userIdDecripted\");\r\n jobDetails.secondJobTypeLevel = this.state.childJobTypeId;\r\n jobDetails.isRecurred = this.state.recurringType != 0 ? true : false;\r\n\r\n\r\n\r\n jobDetails.postedUserId = localStorage.getItem(\"userIdDecripted\");\r\n jobDetails.jobCountryId = this.props.userData.countryID;\r\n\r\n jobDetails.userType = 8;\r\n jobDetails.budgetMax = parseFloat(this.state.maxBudgetAmount);\r\n jobDetails.jobType = this.state.selectedServiceType.parentJobType.id;\r\n jobDetails.awardedAmount = this.state.jobBudget == -999?this.state.budgetAmount:0;\r\n\r\n jobDetails.isTenantPost = true;\r\n if(this.state.recurringType != 0){\r\n jobDetails.recurSettings = {\r\n recurTypeIdString: this.state.recurringType,\r\n recurCustomTypeId: parseInt(this.state.recurringCustomType),\r\n recurTypeId: parseInt(this.state.recurringType),\r\n startDate :this.state.fromDate ? this.state.fromDate :null,\r\n endDate : this.state.toDate ? this.state.toDate : null\r\n };\r\n }\r\n\r\n\r\n jobDetails.tradees = this.state.selectedProviderId.map(x => ({ id: x, userId: x,isAssigned : true }));\r\n\r\n this.setState({ isJobPosting: true })\r\n console.log(JSON.stringify(jobDetails));\r\n try {\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/createjob`, jobDetails, {\r\n 'headers': { 'ClientSecret': AppConfiguration.Setting().ClientSecret }\r\n })\r\n .then(dataJson => {\r\n this.setState({ isJobPosting: false })\r\n if(dataJson.status === 13){\r\n toast.error(dataJson.message, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n else{\r\n toast.success(`${dataJson.jobNumber} Job is posted successfully.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n }); \r\n this.discardDetails();\r\n }\r\n\r\n }, error => {\r\n console.log(error);\r\n this.setState({ isJobPosting: false });\r\n toast.error(`Fail to post the job. Please try again.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n })\r\n )\r\n\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n\r\n getTradesList =()=> {\r\n try {\r\n let { sizePerPage, page, valueOfTradeSearch } = this.state; \r\n this.setState({isTradeLoading : true});\r\n trackPromise(\r\n jobService.GetAllTrades(false, true, Guid.EMPTY.toString(), this.state.childJobTypeId, this.state.formData.propertyId, \r\n false, this.state.formData.suburbId,valueOfTradeSearch,sizePerPage,page)\r\n .then(res => {\r\n let data = res.tradesList;\r\n this.setState({\r\n filteredTradeesResults: data,\r\n allTrades: data,\r\n isTradeLoading: false,\r\n total: data.length > 0 ? res.pageTotal : 0,\r\n displayTradesArray: data\r\n }); \r\n })\r\n );\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n\r\n checkTradeRequestType() {\r\n let { tradeRequestType } = this.state;\r\n if (tradeRequestType == '2') {\r\n this.preAuthorizedAmount();\r\n } else {\r\n this.postJob();\r\n }\r\n }\r\n\r\n preAuthorizedAmount() {\r\n let { tradeRequestType, maxBudgetAmount, jobBudget, budgetAmount } = this.state;\r\n return jobService.GetPropertyDetailsWithHoldAmount()\r\n .then((res) => {\r\n if (res.properties.length > 0) {\r\n let data = res.properties.filter(x => x.propertyId == this.state.propertyId)[0];\r\n let amount = data.holdAmountFromTenantPerJob;\r\n if (jobBudget == '7') {\r\n amount = maxBudgetAmount;\r\n }\r\n if (jobBudget == '-999') {\r\n amount = budgetAmount;\r\n }\r\n\r\n this.setState({ isHoldAmountFromTenant: data.isEnableHoldAmountFromTenantJob, holdAmountFromTenantPerJob: amount })\r\n if (tradeRequestType == '2' && data.isEnableHoldAmountFromTenantJob) {\r\n this.setState({ showPreAuthorizedDrawer: true });\r\n }\r\n if(!data.isEnableHoldAmountFromTenantJob){\r\n this.postJob();\r\n }\r\n }\r\n\r\n })\r\n }\r\n\r\n createDrawer = () => {\r\n const header = this.createPreAuthorizedHeader();\r\n const body = this.createPreAuthorizedBody();\r\n const footer = this.createPreAuthorizedFooter();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n createPreAuthorizedHeader = () => {\r\n return (\r\n <>\r\n

\r\n Confirmation\r\n

\r\n
\r\n this.toggleConfirmationeDrawer(true)}\r\n >\r\n \r\n \r\n
\r\n\r\n \r\n );\r\n };\r\n\r\n toggleConfirmationeDrawer = isClose => {\r\n this.setState(state => ({\r\n showPreAuthorizedDrawer: !this.state.showPreAuthorizedDrawer\r\n }));\r\n };\r\n\r\n createPreAuthorizedBody = () => {\r\n let { holdAmountFromTenantPerJob } = this.state;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n A temporary hold of ${holdAmountFromTenantPerJob} will be deducted from your nominated credit card and it will be released once the job is marked as completed.\r\n
\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n createPreAuthorizedFooter = () => {\r\n return (\r\n <>\r\n \r\n\r\n \r\n );\r\n };\r\n\r\n confirmPreAuthorized = () => {\r\n this.postJob();\r\n\r\n }\r\n\r\n discardDetails = () => {\r\n this.props.backtoList();\r\n }\r\n\r\n render() {\r\n const currentStepIndex = this.state.currentStep;\r\n let step = this.showCurrentStep(currentStepIndex);\r\n let drawer = this.createDrawer();\r\n return (\r\n
\r\n
\r\n {step}\r\n
\r\n {(this.state.isShowProviderDrawer) ?\r\n \r\n : ''}\r\n\r\n {(this.state.showPreAuthorizedDrawer) ?\r\n
{drawer}
\r\n : ''}\r\n
);\r\n }\r\n\r\n getAvailableServices = () => {\r\n try {\r\n this.setState({ isLoading: true })\r\n AXIOS.GET(`tenant-api/available-job-types?userId=${localStorage.getItem('userId')}`)\r\n .then(dataJson => {\r\n this.setState({ isLoading: false })\r\n this.setState({ availableServicesDetails: dataJson });\r\n this.setState({ availableServices: dataJson });\r\n let formData = this.state.formData;\r\n formData.childJobTypeId = '';\r\n formData.childJobType = '';\r\n this.setState({ formData: formData });\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\nfunction postModel() {\r\n return {\r\n \"jobCategoryDisplay\": \"\",\r\n \"longitude\": 0,\r\n \"bidAmountMax\": 0,\r\n \"attachments\": [],\r\n \"distance\": 0,\r\n \"isTradePostedJob\": false,\r\n \"userId\": \"\",\r\n \"isScheduled\": false,\r\n \"propertyKeyCollectType\": 0,\r\n \"description\": \"Hehbe\",\r\n \"workflowStatusId\": 2,\r\n \"acceptedBid\": {\r\n \"isBookmarked\": false,\r\n \"invoice\": {},\r\n \"providerViewModel\": {\r\n \"isLicense\": false,\r\n \"isAssigned\": false,\r\n \"isInsurance\": false,\r\n \"profileCreated\": false\r\n },\r\n \"attachments\": []\r\n },\r\n \"isPropertyRelatedJob\": false,\r\n \"id\": \"00000000-0000-0000-0000-000000000000\",\r\n \"address\": \"\",\r\n \"awardedTradeeId\": \"\",\r\n \"contactPersonName\": \"\",\r\n \"endTime\": 0,\r\n \"serviceConsumer\": {\r\n \"pricingPlan\": {\r\n \"featuresList\": {},\r\n \"isMyPlan\": false\r\n },\r\n \"hasPickedAPlan\": false,\r\n \"userSetting\": {\r\n \"isInsuranceRequired\": false,\r\n \"isEnableSubTask\": false,\r\n \"isLicenceRequired\": false,\r\n \"isAbnRequired\": false\r\n }\r\n },\r\n \"taskStatus\": 0,\r\n \"whereJobLocated\": \"\",\r\n \"countryId\": \"\",\r\n \"jobUrgencyId\": 1,\r\n \"liteBidList\": [],\r\n \"primaryJobTypeDisplay\": \"\",\r\n \"primaryJobType\": \"\",\r\n \"jobCategoryId\": \"00000000-0000-0000-0000-000000000000\",\r\n \"taskStatuses\": 0,\r\n \"isHideTenantDetailsToOwner\": false,\r\n \"isCloneFromJobPost\": false,\r\n \"hasBidsForOwnerApproval\": false,\r\n \"contactPersonNumber\": \"\",\r\n \"initialPayment\": 0,\r\n \"hourlyRate\": 0,\r\n \"completedAttachments\": [],\r\n \"latitude\": 0,\r\n \"placeBidType\": 1,\r\n \"isDeclined\": false,\r\n \"suburbId\": \"\",\r\n \"jobValidityPeriodDisplay\": \"N/A\",\r\n \"startTime\": 0,\r\n \"bidStatus\": 0,\r\n \"suburbDisplay\": \"\",\r\n \"isPendingPayment\": false,\r\n \"secondaryJobTypeDisplay\": \"\",\r\n \"invoice\": {},\r\n \"budgetDisplay\": \"\",\r\n \"callOutFee\": 0,\r\n \"budgetId\": 0,\r\n \"jobValidityPeriod\": 0,\r\n \"quoteLimit\": 6,\r\n \"scheduledType\": 0,\r\n \"jobInformation\": {\r\n \"hasBidNotes\": false,\r\n \"hasInvoice\": false,\r\n \"requireReInvite\": false,\r\n \"requireApproveSchedule\": false,\r\n \"hasJobNotes\": false,\r\n \"hasRecuringJobs\": false,\r\n \"requireOwnerApproval\": false,\r\n \"requireSchedule\": false,\r\n \"hasVideoCalls\": false,\r\n \"hasGroupedJobs\": false\r\n },\r\n \"isOwnerAttending\": false,\r\n \"secondaryJobType\": \"\",\r\n \"bidCount\": 0,\r\n \"serviceConsumerId\": \"\",\r\n \"targetedTradeeOption\": 1,\r\n \"invoiceAmount\": 0,\r\n \"consumerTypePropertyId\": \"\",\r\n \"budgetAmount\": 0,\r\n \"payerId\": \"\",\r\n \"secondJobTypeLevel\": \"\",\r\n \"isRecurred\": false,\r\n \"bidAmount\": 0,\r\n \"tenantName\": \"\",\r\n \"IsOverrideOwner\": false,\r\n \"jobAsignees\": [],\r\n \"postedUserId\": \"\",\r\n \"jobVariations\": [],\r\n \"bidRevisedPriceAvailable\": false,\r\n \"whereToCome\": \"\",\r\n \"jobGroupSequence\": 0,\r\n \"isShowTenantOnQuote\": false,\r\n \"isJobCompletedByTenant\": false,\r\n \"jobUrgencyDisplay\": \"Urgently\",\r\n \"bidPlaced\": false,\r\n \"title\": \"\",\r\n \"bidRevisionRequested\": false,\r\n \"status\": 0,\r\n \"maintenanceType\": 0,\r\n \"awardedAmountMax\": 0,\r\n \"propertyTypeId\": 0,\r\n \"awardedAmount\": 0,\r\n \"awardedNotes\": \"\",\r\n \"jobCountryId\": \"\",\r\n \"isCloning\": false,\r\n \"jobPropertyLocks\": [],\r\n \"userType\": 8,\r\n \"budgetMax\": 0,\r\n \"jobType\": \"\",\r\n \"tradees\": [\r\n {\r\n \"lastName\": \"\",\r\n \"averageRating\": '',\r\n \"jobTypeId\": \"\",\r\n \"branchId\": \"\",\r\n \"status\": 0,\r\n \"profileCreated\": false,\r\n \"hourlyRate\": 0,\r\n \"calloutFee\": 0,\r\n \"name\": \"\",\r\n \"id\": \"\",\r\n \"email\": \"\",\r\n \"companyName\": \"\",\r\n \"firstName\": \"\",\r\n \"isAssigned\": true,\r\n \"profileImageUrl\": \"\",\r\n \"branchTradeeStatus\": 1,\r\n \"branchName\": \"\",\r\n \"isLicense\": false,\r\n \"jobType\": \"\",\r\n \"isInsurance\": false,\r\n \"userId\": \"\"\r\n }\r\n ],\r\n \"bidRevisedPrice\": 0,\r\n \"isDirectWorkorder\": false,\r\n \"placeBidTypeDisplay\": \"N/A\",\r\n \"isTenantPost\": true,\r\n \"recurSettings\": {}\r\n }\r\n\r\n \r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n return {\r\n jobTypes: state.Jobs.jobTypes,\r\n dateFormat: state.User.dateFormat,\r\n userRoles: state.User.userRoles,\r\n properties: state.Tenant.tenantProperties,\r\n isCurrentTenant: state.Tenant.isCurrentTenant,\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateProperties: properties => {\r\n dispatch({ type: \"SET_PROPERTIES\", properties: properties });\r\n },\r\n };\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TenantManageJobPostWizard);","import React from 'react';\r\nimport { Link } from 'react-router-dom'\r\nimport { UserType } from '../../../Constants/Enums';\r\nimport { Guid } from \"guid-typescript\";\r\nimport googleAnalyticsService from '../../../Services/GoogleAnalyticsService';\r\nimport OwnerJobPostWizard from '../../Common/JobPostWizard/OwnerJobPost/OwnerJobPostWizard';\r\nimport TenantManageJobPostWizard from '../../Common/JobPostWizard/TenantManage/TenantManageJobPostWizard';\r\nimport JobPostWizard from '../../Common/JobPostWizard/JobPostWizard';\r\nclass Home extends React.Component {\r\n\r\n state = {\r\n showJobPostDrawer: false,\r\n jobId: '',\r\n firstName: localStorage.getItem(\"firstName\")\r\n };\r\n\r\n render() {\r\n const { pathname, host } = this.props;\r\n const isTenant = localStorage.getItem(\"userType\") == UserType.Tenant ? true : false ;\r\n const userType = localStorage.getItem(\"userType\") == UserType.Owner ? \"/owner\" : \"/tenant\";\r\n const jllPageReq = localStorage.getItem(\"styleCode\") ? localStorage.getItem(\"styleCode\") : \"\";\r\n const isTenantManage = localStorage.getItem('isTenantManageJob');\r\n\r\n return (\r\n <>\r\n
\r\n {(!this.state.showJobPostDrawer) ?\r\n <>\r\n

Welcome back, {this.state.firstName}!

\r\n

Please see all the activities that require your attention.

\r\n
\r\n
\r\n \r\n Items for Review \r\n {/* 3 */}\r\n \r\n
\r\n
\r\n \r\n Maintenance Request\r\n \r\n
\r\n {!isTenantManage &&\r\n <>\r\n
\r\n \r\n Inspection\r\n \r\n
\r\n
\r\n \r\n Document\r\n {/* 3 */}\r\n \r\n
\r\n \r\n }\r\n\r\n
\r\n \r\n
\r\n\r\n {(userType == \"/owner\") ?\r\n
\r\n \r\n All Maintenance Request\r\n \r\n
\r\n : ''}\r\n
\r\n : \"\"}\r\n {(this.state.showJobPostDrawer) ?\r\n jllPageReq === \"JLL\" ?\r\n this.backToList(event)}\r\n isJobEdit={false}\r\n jobEditid=\"\"\r\n isFromBot={false}\r\n userData={this.props.userData}>\r\n :\r\n isTenant ? this.backToList(event)}\r\n isJobEdit={false}\r\n jobEditid=\"\"\r\n isFromBot={false}>\r\n :\r\n this.backToList(event)}\r\n isJobEdit={false}\r\n jobEditid=\"\"\r\n isFromBot={false}>\r\n : ''}\r\n
\r\n\r\n\r\n \r\n\r\n )\r\n\r\n }\r\n openPostJobDrawer = () => {\r\n this.setState({ showJobPostDrawer: true });\r\n this.setState({\r\n jobId: Guid.create().toString(),\r\n });\r\n googleAnalyticsService.sendEventStatsToGoogle(\"View\", \"Button click\", \"Post a Job\");\r\n\r\n };\r\n\r\n hideJobPost = () => {\r\n setTimeout(() => {\r\n this.setState({ showJobPostDrawer: false });\r\n }, 500);\r\n googleAnalyticsService.sendEventStatsToGoogle(\"Cancel\", \"Button click\", \"Post a Job\");\r\n };\r\n\r\n backToList = (status) => {\r\n this.setState({\r\n showJobPostDrawer: false,\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default Home;","import React, { Component, lazy, Suspense } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { BrowserRouter as Router, Route, Redirect, Switch } from \"react-router-dom\";\r\nimport Layout from \"./Components/Layout/Layout\";\r\n//import \"./Styles/JLL/style.scss\";\r\nimport TenantProfile from \"./Components/Tenant/TenantProfile/TenantProfile\";\r\nimport userService from \"./Services/UserService\";\r\nimport { UserType } from './Constants/Enums';\r\nimport { ToastContainer, toast } from 'react-toastify';\r\nimport jobService from \"./Services/JobService\";\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport ReactGA from 'react-ga';\r\nimport { createBrowserHistory } from 'history';\r\nimport propertyService from \"./Services/PropertyService\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport PouchDbService from \"./Services/PouchDbService\";\r\nimport { MasterDataType } from '../src/Constants/Enums';\r\nimport { AXIOS } from \"./Utilities/HttpRequest/Axios\";\r\nimport Intercom from 'react-intercom';\r\nimport Home from './Components/Tenant/Home/Home'\r\nimport Loader from \"react-loader-spinner\";\r\n\r\nconst MyJobs = lazy(() => import(\"./Components/Tenant/MyJobs/MyJobs\"));\r\nconst AllJobs = lazy(() => import(\"./Components/Tenant/AllJobs/AllJobs\"));\r\nconst PropertyAccessControls = lazy(() => import(\"./Components/Tenant/PropertyAccessControls/PropertyAccessControls\"));\r\nconst Settings = lazy(() => import(\"./Components/Tenant/Settings/Settings\"));\r\nconst JobsForReview = lazy(() => import(\"./Components/Tenant/JobsForReview/JobsForReview\"));\r\nconst DocumentList = lazy(() => import(\"./Components/Tenant/DocumentList/DocumentList\"));\r\nconst PropertyInspection = lazy(() =>import(\"./Components/Tenant/PropertyInspection/PropertyInspection\"));\r\n\r\n\r\nvar history = createBrowserHistory();\r\nReactGA.initialize('UA-103017323-2');\r\n\r\nclass App extends Component {\r\n static displayName = App.name; \r\n constructor(props) {\r\n super(props);\r\n \r\n this.state = {\r\n minimizeDrawers: [],\r\n loading : true\r\n }; \r\n }\r\n\r\n componentDidMount() { \r\n this.getUserDetails();\r\n this.getActiveMasterDataFileVersion();\r\n this.getOrgDetails(); \r\n }\r\n\r\n componentWillMount() {\r\n if(localStorage.getItem('styleCode') === \"JLL\" || localStorage.getItem('styleCode') === \"jll\") {\r\n import('./Styles/JLL/style.scss');\r\n } else {\r\n import('./Styles/style.scss');\r\n }\r\n }\r\n\r\n getActiveMasterDataFileVersion = () => {\r\n userService.GetActiveMasterDataFileVersion(MasterDataType.JobTypes)\r\n .then(response => {\r\n if(localStorage.getItem('jobTypesBlobFileName') == undefined || localStorage.getItem('jobTypesBlobFileName') == null) {\r\n this.readJsonFile(response);\r\n } else {\r\n if(localStorage.getItem('jobTypesBlobFileName') != response) {\r\n this.readJsonFile(response);\r\n }\r\n }\r\n });\r\n }\r\n\r\n readJsonFile(fileName) {\r\n let filePath = `${AppConfiguration.Setting().azureStorage.BlobStorageCdnEndPoint}${AppConfiguration.Setting().azureStorage.JobTypesContainerName}/${fileName}`;\r\n fetch(filePath)\r\n .then(response => response.json())\r\n .then(result => {\r\n this.addJobTypesToTheState(result);\r\n PouchDbService.RemoveTable(MasterDataType[MasterDataType.JobTypes]).then(() => {\r\n console.log('JobTypes table destroyed...');\r\n PouchDbService.InsertDocumentList(MasterDataType[MasterDataType.JobTypes], result).then(response => {\r\n console.log(`JobTypes inserted SUCCESSFULLY`);\r\n console.log(response);\r\n localStorage.setItem('jobTypesBlobFileName', fileName);\r\n });\r\n });\r\n \r\n \r\n })\r\n }\r\n\r\n readZipFile(fileName) {\r\n let filePath = `${AppConfiguration.Setting().azureStorage.BlobStorageCdnEndPoint}${AppConfiguration.Setting().azureStorage.JobTypesContainerName}/${fileName}`;\r\n var promise = new window.JSZip.external.Promise(function (resolve, reject) {\r\n window.JSZipUtils.getBinaryContent(filePath, function(err, data) {\r\n if (err) {\r\n reject(err);\r\n } else {\r\n resolve(data);\r\n }\r\n });\r\n });\r\n\r\n promise.then(window.JSZip.loadAsync) \r\n .then(function(zip) { \r\n return zip.file(Object.keys(zip.files)[0]).async(\"base64\");\r\n })\r\n .then((success) => { \r\n let obj = atob(success).replace('', '');\r\n let jsonObj = JSON.parse(obj);\r\n this.addJobTypesToTheState(jsonObj);\r\n PouchDbService.InsertDocumentList(MasterDataType[MasterDataType.JobTypes], jsonObj);\r\n }, (error) => { \r\n console.log(error);\r\n });\r\n}\r\n\r\n getPropertyByUserId(userId) {\r\n propertyService.GetPropertyByUserId(userId).then(res => {\r\n if (!res.isCurrentTenant) {\r\n this.props.updateIsTenantField(false);\r\n } else {\r\n this.props.updateIsTenantField(true);\r\n }\r\n });\r\n}\r\n\r\n render() {\r\n const userType =\r\n localStorage.getItem(\"userType\") == UserType.Owner ? \"owner\" : \"tenant\";\r\n const intercomApiKey = this.props.intercomApiKey;\r\n return (\r\n
\r\n {this.state.loading?\r\n
\r\n \r\n
:\r\n <>\r\n \r\n \r\n \r\n replace(\"/\" + userType + \"/home\")}\r\n render={({ location, history }) => (\r\n \r\n Loading...
}>\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 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 }\r\n \r\n \r\n );\r\n }\r\n\r\n minimizeJobDetailsDraw = data => {\r\n this.setState({\r\n minimizeDrawers: [...this.state.minimizeDrawers, data]\r\n });\r\n };\r\n\r\n maximizeJobDetailsDraw = jobNumber => {\r\n let filteredArray = this.state.minimizeDrawers.filter(\r\n item => item.jobNumber !== jobNumber\r\n );\r\n this.setState({ minimizeDrawers: filteredArray });\r\n };\r\n\r\n addJobTypesToTheState = (jobTypesList) => {\r\n let services = [];\r\n let allJobTypes = [];\r\n let jobTypes = [];\r\n if(jobTypesList.length) {\r\n jobTypes = jobTypesList.filter(element => element.CountryId == this.props.userDetails.countryId);\r\n } else {\r\n jobTypes = jobTypesList.rows.filter(element => element.doc.CountryId == this.props.userDetails.countryId);\r\n }\r\n\r\n jobTypes.forEach(element => {\r\n let subTypes = [];\r\n if(jobTypesList.length) {\r\n subTypes = jobTypes.filter(p => p.ParentJobTypeId == element.Id);\r\n allJobTypes.push({\r\n id: element.Id,\r\n title: element.Name,\r\n label: element.Name,\r\n description: element.Description,\r\n tooltip: element.Tooltip,\r\n jobCategory: element.JobGroupId,\r\n parentRef: element.ParentJobTypeId,\r\n countryId: element.CountryId,\r\n hasChildRef: subTypes.length > 0\r\n });\r\n } else {\r\n subTypes = jobTypes.filter(p => p.doc.ParentJobTypeId == element.doc.Id);\r\n allJobTypes.push({\r\n id: element.doc.Id,\r\n title: element.doc.Name,\r\n label: element.doc.Name,\r\n description: element.doc.Description,\r\n tooltip: element.doc.Tooltip,\r\n jobCategory: element.doc.JobGroupId,\r\n parentRef: element.doc.ParentJobTypeId,\r\n countryId: element.doc.CountryId,\r\n hasChildRef: subTypes.length > 0\r\n });\r\n }\r\n }); \r\n\r\n allJobTypes.forEach(element => {\r\n \r\n let subTypes = allJobTypes.filter(a => a.parentRef == element.id);\r\n\r\n if(element.hasChildRef) {\r\n services.push({\r\n parentJobType: element,\r\n childJobTypes: subTypes\r\n });\r\n }\r\n });\r\n this.props.addJobTypes(services);\r\n }\r\n\r\n getJobTypesByCountryId = () => {\r\n PouchDbService.GetAllDocument(MasterDataType[MasterDataType.JobTypes]).then(response => {\r\n console.log('JobTypes loaded...');\r\n if(response.rows.length > 0) {\r\n this.addJobTypesToTheState(response);\r\n }\r\n })\r\n }\r\n\r\n getUserDetails = () => {\r\n try {\r\n userService.getUserDetails().then(res => {\r\n let details = {};\r\n details.firstName = res.firstName;\r\n details.lastName = res.lastName;\r\n details.email = res.email;\r\n details.location = res.location;\r\n details.mobileNumber = res.mobileNumber;\r\n details.homePhoneNumber = res.homePhoneNumber;\r\n details.officePhoneNumber = res.officePhoneNumber;\r\n details.countryId = res.countryId;\r\n details.profileImageUrl = this.props.profileThumbnailsCdnEndpoint + res.profileImageUrl;\r\n details.profileImageId = res.profileImageUrl;\r\n details.userId = res.userId;\r\n details.userType = localStorage.getItem(\"userType\");\r\n details.userIdEncripted = localStorage.getItem(\"userId\");\r\n details.dateFormat = res.dateFormat;\r\n details.dateTimeFormat = res.dateTimeFormat + \":ss\";\r\n details.dateTimeFormatMin = res.dateTimeFormat;\r\n details.countryCode = res.countryCode;\r\n this.props.updateUserDetails(details);\r\n this.getPropertyByUserId(localStorage.getItem(\"userId\"));\r\n this.getJobTypesByCountryId();\r\n localStorage.setItem(\"DateFormat\", details.dateFormat);\r\n localStorage.setItem(\"DateTimeFormat\", details.dateTimeFormat);\r\n localStorage.setItem(\"dateTimeFormatMin\", details.dateTimeFormatMin);\r\n localStorage.setItem(\"countryCode\", details.countryCode);\r\n localStorage.setItem(\"firstName\",details.firstName);\r\n var d = new Date(res.createdDateTime).getTime() / 1000;\r\n let intercomSettings = {\r\n name: res.firstName + \" \" + res.lastName, // Full name\r\n email: res.email, // Email address\r\n user_id: res.userId,\r\n phone: res.mobileNumber,\r\n created_at: d, // Signup date as a Unix timestamp\r\n profileImage: res.profileImageUrl != null? this.props.profileThumbnailsCdnEndpoint + res.profileImageUrl: \"\",\r\n usertype: res.userRole,\r\n userType: res.userRole,\r\n countryID: res.countryId,\r\n alignment: 'left',\r\n horizontal_padding: 35,\r\n vertical_padding: 10\r\n };\r\n\r\n this.setState({ intercomSettings: intercomSettings });\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n getCommonOrganizationSettings = (orgId) => {\r\n this.setState({loading:true});\r\n userService.getCommonOrganizationSettings(orgId).then(response => {\r\n \r\n if(response && response.styleCode === 'JLL' || response.styleCode === 'jll') {\r\n let isTenantManageJob = (response.styleCode === 'JLL' || response.styleCode === 'jll') ? true : false;\r\n localStorage.setItem('styleCode','JLL');\r\n localStorage.setItem('isTenantManageJob',isTenantManageJob);\r\n import('./Styles/JLL/style.scss');\r\n setTimeout( () => {\r\n this.setState({loading:false});\r\n }, 2000);\r\n\r\n \r\n }else{\r\n localStorage.setItem('styleCode','');\r\n import('./Styles/style.scss');\r\n setTimeout( () => {\r\n this.setState({loading:false});\r\n }, 2000);\r\n }\r\n localStorage.setItem('spk',response.stripePublicKey);\r\n })\r\n }\r\n\r\n getOrgDetails = () => {\r\n userService.getUserRoles().then(response => {\r\n \r\n let selectedRole = (response.length == 1) ? response[0] : response.find(a => a.isSelected);\r\n if (selectedRole == undefined) {\r\n selectedRole = response[0]\r\n }\r\n localStorage.setItem('orgId', selectedRole.organizationId);\r\n this.getCommonOrganizationSettings(selectedRole.organizationId);\r\n });\r\n \r\n}\r\n\r\n}\r\n\r\n\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n let userDetails = state.User;\r\n\r\n return {\r\n userDetails: userDetails,\r\n profileThumbnailsCdnEndpoint: state.AppSettings.imageCdnEndpoint,\r\n jobTypes: state.Jobs.jobTypes,\r\n intercomApiKey: state.AppSettings.intercomApiKey\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateUserDetails: details => {\r\n dispatch({ type: \"SET_USER_DETAILS\", userDetails: details });\r\n },\r\n updateIsTenantField: isCurrentTenant => {\r\n dispatch({ type: \"CHECK_CURRENT_TENANT\", isCurrentTenant: isCurrentTenant });\r\n },\r\n addJobTypes: jobTypes => { dispatch({ type: 'SET_JOB_TYPES', jobTypes: jobTypes })}\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(App);\r\n","import React, { useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport StarRatingComponent from \"react-star-rating-component\";\r\n\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { ToastContainer, toast } from \"react-toastify\";\r\nimport { WorkflowStates, UserType } from \"../../../Constants/Enums\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport \"./ExternalFeedbackDrawer.scss\";\r\nimport { trackPromise } from \"react-promise-tracker\";\r\n\r\nclass ExternalFeedbackDrawer extends React.Component {\r\n state = {\r\n showFeedbackDrawer: false,\r\n overallRating: 0,\r\n isFeedbackProvided : false,\r\n };\r\n\r\n userFeedbackNote = '';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.feedback = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({isFeedbackProvided : false});\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n const feedbackButton = \"Add Feedback\";\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n {drawer}\r\n \r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n const header = this.createFeedbackHeader();\r\n const body = this.createFeedbackBody();\r\n const footer = this.createFeedbackFooter();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n createFeedbackHeader = () => {\r\n return (\r\n <>\r\n

Provide Feedback

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createFeedbackBody = () => {\r\n const isTenant =\r\n localStorage.getItem(\"userType\") == UserType.Tenant ;\r\n const jobData = this.props.jobDetails;\r\n\r\n let {\r\n overallRating,\r\n isFeedbackProvided,\r\n } = this.state;\r\n\r\n if (jobData.bidFeedBackList && jobData.bidFeedBackList.length > 0) {\r\n const userId = jobData.serviceConsumerId\r\n const userFeedback = jobData.bidFeedBackList.filter(\r\n feedback => feedback.userId === userId\r\n );\r\n if (userFeedback && userFeedback.length > 0) {\r\n const feedbackGivenByUser = userFeedback[0];\r\n isFeedbackProvided = true;\r\n this.userFeedbackNote = feedbackGivenByUser.feedback;\r\n if(feedbackGivenByUser.bidRatings.length > 0){\r\n overallRating = feedbackGivenByUser.bidRatings.filter(\r\n rating => rating.ratingsCriteriaId === 1\r\n )[0].rating;\r\n }\r\n \r\n }\r\n }\r\n\r\n\r\n return (\r\n
\r\n
{jobData.title}
\r\n
{jobData.description}
\r\n
\r\n {(!isTenant ) ?\r\n
\r\n
Estimate
\r\n
\r\n {jobData && jobData.acceptedBid && jobData.acceptedBid.amount && jobData.acceptedBid.amount > 0 ? `$ ${jobData.acceptedBid.amount}` : \"Not Supplied\"}\r\n
\r\n
\r\n : ''}\r\n
\r\n
Provider
\r\n
\r\n {jobData.acceptedBid ? `${jobData.acceptedBid.name}` : ``}\r\n
\r\n
\r\n
\r\n
Provider Note
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n

Overall Rating

\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {!isFeedbackProvided &&\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
}\r\n {isFeedbackProvided &&\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n {this.props.jobDetails.propertyManagerAgencyPlaceId != '' || this.props.jobDetails.providerAgencyPlaceId != '' ?\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 Mark as Completed\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n onClickAddReview = (placeId) => {\r\n let url = AppConfiguration.Setting().googleMapReviewUrl + \"?placeid=\" + placeId;\r\n window.open(url, \"_blank\")\r\n }\r\n\r\n\r\n onRatingStarClick(nextValue, prevValue, name) {\r\n switch (name) {\r\n case \"overallRating\":\r\n this.setState({ overallRating: nextValue });\r\n }\r\n }\r\n\r\n createFeedbackFooter = () => {\r\n const feedbackButton = \"Save\";\r\n const jobData = this.props.jobDetails;\r\n let {\r\n isFeedbackProvided,\r\n } = this.state;\r\n return (\r\n <>\r\n
\r\n \r\n\r\n {!isFeedbackProvided && }\r\n
\r\n \r\n );\r\n };\r\n\r\n onUpdateFeedback = () => {\r\n try {\r\n if (!this.state.overallRating) {\r\n toast.error(\"Please select feedback!\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n this.props.showJobDetailsDrawer(!this.props.open, true);\r\n let bidFeedback = {\r\n userId: localStorage.getItem(\"userId\"),\r\n jobId: this.props.jobDetails.id,\r\n feedback: this.feedback.current.value,\r\n bidRatings: [\r\n { rating: this.state.overallRating, ratingsCriteriaId: 1 },\r\n { rating: this.state.overallRating, ratingsCriteriaId: 2 },\r\n { rating: this.state.overallRating, ratingsCriteriaId: 3 },\r\n { rating: this.state.overallRating, ratingsCriteriaId: 4 }\r\n ],\r\n FeedBackUserType: UserType.Owner,\r\n FeedbackRatings: 0\r\n };\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/save-feedback`, bidFeedback).then(response => { \r\n if (response.success === true) {\r\n this.setState({\r\n isFeedbackProvided: true\r\n }, () => {\r\n this.createFeedbackFooter();\r\n });\r\n this.userFeedbackNote = this.feedback.current.value;\r\n toast.success(\"Feedback Updated.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n window.location.reload();\r\n } else {\r\n toast.error(\"Error occured. Please try again.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }));\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n toggleFeedbackDrawer = () => {\r\n this.setState(state => ({\r\n showFeedbackDrawer: !this.state.showFeedbackDrawer\r\n }));\r\n };\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n open: state.MyJobs.isOpen\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n showJobDetailsDrawer: (isShowDrawer, isRefresh) => {\r\n dispatch({\r\n type: \"SHOW_JOB_DETAILS_DRAWER\",\r\n isOpen: isShowDrawer,\r\n refreshMyJobs: isRefresh\r\n });\r\n }\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(ExternalFeedbackDrawer);\r\n","import React from \"react\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport JobNotes from \"../JobDetailsDrawer/JobNotes/JobNotes\";\r\nimport ImageViewer from \"../../Common/ImageViewer/ImageViewer\";\r\nimport './JobNotesDrawer.scss';\r\n\r\nclass JobNotesDrawer extends React.Component {\r\n\r\n\r\n render() {\r\n const header = this.createHeader();\r\n const body = this.createBody();\r\n const footer = this.createFooter();\r\n return (\r\n \r\n );\r\n }\r\n\r\n\r\n createHeader = () => {\r\n return (\r\n <>\r\n

Notes

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n\r\n createBody = () => {\r\n const jobNotes = this.props.jobNotes;\r\n return (<>\r\n
\r\n
\r\n {(jobNotes.length === 0 || jobNotes == null) ?

Notes not available

:\r\n jobNotes.map((note, index) => {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n

{note.createdUserName}

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

Posted on {note.createdOn}

\r\n

{note.createdUserType}

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

{note.type}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {note && note.attachments && note.attachments.length > 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
\r\n
\r\n\r\n );\r\n }\r\n\r\n createFooter = () => {\r\n return (\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\nexport default JobNotesDrawer;","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport ImageViewer from '../../Common/ImageViewer/ImageViewer';\r\nimport Moment from \"react-moment\";\r\nimport settingsService from \"../../../Services/settingsService\";\r\nimport jobService from \"../../../Services/JobService\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport userService from '../../../Services/UserService';\r\nimport ExternalFeedbackDrawer from \"../../Drawers/ExternalFeedbackDrawer/ExternalFeedbackDrawer\";\r\nimport './ExternalJobDetails.scss';\r\nimport JobNotes from '../../Drawers/JobDetailsDrawer/JobNotes/JobNotes';\r\nimport JobNotesDrawer from '../../Drawers/JobNotesDrawer/JobNotesDrawer';\r\nimport { WorkflowStates, JobsListTypes, UserType, PropertyInspectionStatus } from \"../../../Constants/Enums\";\r\nimport JSZip from 'jszip';\r\nimport FileSaver from 'file-saver';\r\n\r\nclass ExternalJobDetails extends React.Component {\r\n\r\n state = {\r\n showAverageCostWhenOwnerApproval: false,\r\n isOrganizationSettingsLoaded: false,\r\n averageCostModel: {\r\n jobAverageCost: 0.00,\r\n jobCount: 0,\r\n confidenceLevel: 1\r\n },\r\n isAverageCostModelLoaded: false,\r\n selectedRoleForFeedBack: 0,\r\n showJobNotes: false\r\n }\r\n\r\n componentDidMount() {\r\n this.getOrgDetails();\r\n\r\n }\r\n\r\n getOrgDetails = () => {\r\n userService.getUserRoles().then(response => {\r\n let selectedRole = (response.length == 1) ? response[0] : response.find(a => a.isSelected);\r\n if (selectedRole == undefined) {\r\n selectedRole = response[0]\r\n }\r\n localStorage.setItem('orgId', selectedRole.organizationId);\r\n this.getOrganizationSettings(localStorage.getItem('orgId'));\r\n this.setState({ selectedRoleForFeedBack: selectedRole.roleId });\r\n });\r\n }\r\n\r\n getOrganizationSettings(organizationId) {\r\n const jobId = window.jobId;\r\n settingsService.getOrganizationSettingsByOrgId(organizationId)\r\n .then((res) => {\r\n this.setState({\r\n showAverageCostWhenOwnerApproval: res.organizationSettingsModel.showAverageCostWhenOwnerApproval,\r\n isOrganizationSettingsLoaded: true,\r\n });\r\n if (res.organizationSettingsModel.showAverageCostWhenOwnerApproval) {\r\n this.getPredictiveAverageCost(jobId);\r\n }\r\n else {\r\n this.getOwnerApprovalStatus(window.jobId, localStorage.getItem('exernalUserId'));\r\n }\r\n })\r\n }\r\n\r\n //for getting average job cost\r\n getPredictiveAverageCost = (jobId) => {\r\n try {\r\n jobService.GetPredictiveJobAverageCost(jobId)\r\n .then(data => {\r\n this.setState({ averageCostModel: data });\r\n this.setState({ isAverageCostModelLoaded: true });\r\n this.getOwnerApprovalStatus(window.jobId, localStorage.getItem('exernalUserId'));\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n getOwnerApprovalStatus = (jobId, userId) => {\r\n this.setState({ isLoadingTimeline: true });\r\n if (jobId && userId) {\r\n jobService.GetOwnerApprovalStatus(jobId, userId).then(result => {\r\n\r\n this.setState({\r\n isLoadingTimeline: false,\r\n ownerApprovalStatus: result.status,\r\n urlExpired: result.isExpired\r\n });\r\n }, error => {\r\n console.log(error);\r\n });\r\n }\r\n }\r\n\r\n getPropertyKeyMessage(keyCollectionType, propertyType, t, customKeyCollectionValue) {\r\n\r\n if (propertyType === 1) {\r\n switch (parseInt(keyCollectionType)) {\r\n case 1:\r\n return {t('lbl_propkey_case1')};\r\n\r\n case 2:\r\n return {t('lbl_propkey_case2')};\r\n\r\n case 3:\r\n return {t('lbl_propkey_case3')};\r\n\r\n case 5:\r\n return {customKeyCollectionValue};\r\n default:\r\n break;\r\n }\r\n } else {\r\n switch (parseInt(keyCollectionType)) {\r\n case 1:\r\n return {t('lbl_propkey_case4')}\r\n\r\n case 2:\r\n return {t('lbl_propkey_case5')}\r\n\r\n case 3:\r\n return {t('lbl_propkey_case6')}\r\n case 5:\r\n return {customKeyCollectionValue};\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n\r\n budgetFormatter(budgetId, budgetAmount, t) {\r\n\r\n switch (budgetId) {\r\n case 0:\r\n\r\n return
{t('lbl_budgetrange_other')}
;\r\n case 1:\r\n\r\n return
{t('lbl_budgetrange_under')} $500
;\r\n case 2:\r\n\r\n return
{t('lbl_budgetrange_between')} $500 - $1000
;\r\n case 3:\r\n\r\n return
{t('lbl_budgetrange_between')} $1000 - $2000
;\r\n case 4:\r\n return
{t('lbl_budgetrange_between')} $2000 - $5000
\r\n case 5:\r\n\r\n return
{t('lbl_budgetrange_over')} $5000
;\r\n case 7:\r\n\r\n return
{t('lbl_budgetrange_estimate')}
;\r\n case -999:\r\n return
{budgetAmount == 0 ? {t('lbl_budgetrange_notsupplied')} : '$ ' + budgetAmount.toFixed(2)}
;\r\n }\r\n }\r\n getConfidenceLevelClass(confidenceLevel) {\r\n switch (confidenceLevel) {\r\n case 1:\r\n return \"confident-lbl confident-low\";\r\n case 2:\r\n return \"confident-lbl confident-medium\";\r\n case 3:\r\n return \"confident-lbl confident-high\";\r\n }\r\n }\r\n\r\n urgencyFormatter(urgencyType, t) {\r\n switch (urgencyType) {\r\n case '-1':\r\n case \"Emergency\":\r\n return
{t('lbl_urgenttype_case-1')}
;\r\n case '1':\r\n case \"Urgently\":\r\n return
{t('lbl_urgenttype_case1')}
;\r\n case '2':\r\n case \"Within a few days\":\r\n return
{t('lbl_urgenttype_case2')}
;\r\n case '3':\r\n case \"Within a week\":\r\n return
{t('lbl_urgenttype_case3')}
;\r\n case '-999':\r\n case \"By this date\":\r\n return
{t('lbl_urgenttype_case4')}
;\r\n default:\r\n return
{urgencyType === 0 ? \"\" : urgencyType}
;\r\n }\r\n }\r\n\r\n toggleJobNotesDrawer() {\r\n this.setState({ showJobNotes: !this.state.showJobNotes })\r\n }\r\n\r\n async downloadAllAttachments(){\r\n console.log(JSZip.version)\r\n const attachments = this.props.jobDetails.attachments;\r\n const links = [];\r\n const fileNames = [];\r\n for (const i in attachments){\r\n links.push(attachments[i].fileUrl)\r\n fileNames.push(attachments[i].fileName)\r\n }\r\n const zip = new JSZip();\r\n const zipFilename = this.props.jobDetails.jobNumber+'_Attachments'; \r\n links.forEach(function (url, i) {\r\n var filename = fileNames[i];\r\n let blob = fetch(url).then(r => r.blob());\r\n zip.file(filename, blob, { binary: true });\r\n });\r\n await zip.generateAsync({ type: 'blob' })\r\n .then(function (content) {\r\n FileSaver.saveAs(content, zipFilename);\r\n });\r\n \r\n }\r\n\r\n render() {\r\n\r\n const isTenant = localStorage.getItem(\"userType\") == UserType.Tenant ? true : false ;\r\n\r\n const { isJobDetailsLoading, jobDetails, customStyle } = this.props;\r\n const { t } = this.props;\r\n var jobCompleteAttachments = jobDetails !== null && jobDetails.hasOwnProperty(\"attachments\") && jobDetails.attachments != null ? jobDetails.attachments.filter(x => x.type == 5) : []; //JobCompleteProvider\r\n var jobAttachments = jobDetails !== null && jobDetails.hasOwnProperty(\"attachments\") && jobDetails.attachments != null ? jobDetails.attachments.filter(x => x.type != 5) : [];\r\n return (\r\n <>\r\n {(isJobDetailsLoading) ?\r\n

\r\n \r\n

\r\n :\r\n (jobDetails != null) ?\r\n <>\r\n
\r\n
\r\n #{jobDetails.jobNumber}\r\n {(jobDetails && jobDetails.isExternalConsumerJob) ? '' :\r\n
{this.urgencyFormatter(jobDetails.jobUrgencyDisplay, t)}
}\r\n {(jobDetails && jobDetails.isExternalConsumerJob) ? '' :\r\n
{(jobDetails.statusDisplay == 'Job Approval Pending') ? {t('lbl_job_completed')} : jobDetails.statusDisplay}
}\r\n
\r\n {t('lbl_updated')}:\r\n {jobDetails.lastUpdatedDateTime == '0001-01-01T00:00:00' ? jobDetails.postedOn : jobDetails.lastUpdatedDateTime}\r\n \r\n
\r\n
\r\n

{jobDetails.title}

\r\n

\r\n\r\n {(jobDetails && (jobDetails.workflowStatusId == 6) || jobDetails.isExternalConsumerJob) ?\r\n
Posted Date : \r\n {jobDetails.postedOn}\r\n
: ''}\r\n\r\n
\r\n {/* LEFT COL */}\r\n
\r\n
\r\n
\r\n
\r\n \r\n {(jobDetails && jobDetails.isExternalConsumerJob) ? t('lbl_location_placeholder') : t('lbl_property')}\r\n
\r\n
\r\n \r\n {(jobDetails && jobDetails.isExternalConsumerJob) ? '' : {`${jobDetails.propertyName}, `}}\r\n {jobDetails.address}\r\n \r\n
\r\n
\r\n {(jobDetails && jobDetails.isExternalConsumerJob) ? '' :\r\n
\r\n
\r\n \r\n {t('lbl_service')}\r\n
\r\n
\r\n {jobDetails.primaryJobTypeDisplay} - {jobDetails.secondaryJobTypeDisplay}\r\n
\r\n
\r\n }\r\n {(jobDetails && jobDetails.budgetId != null && (jobDetails.workflowStatusId == 6 || jobDetails.workflowStatusId == 9 || jobDetails.workflowStatusId == 11 || jobDetails.workflowStatusId == 7 || jobDetails.isExternalConsumerJob) && jobDetails.isUserPorpertyOwner) ?\r\n
\r\n
\r\n \r\n {t('lbl_budget')}\r\n
\r\n
\r\n {this.budgetFormatter(jobDetails.budgetId, jobDetails.budgetAmount, t)}\r\n
\r\n
\r\n : ''}\r\n {(jobDetails && jobDetails.scheduleEventId != null) ?\r\n
\r\n
\r\n \r\n Schedule\r\n
\r\n
\r\n
Schedule Start : {jobDetails.scheduleFromDate}
\r\n
Schedule End : {jobDetails.scheduleToDate}
\r\n
\r\n
\r\n : ''\r\n }\r\n {jobDetails.issueTags != undefined && jobDetails.issueTags != null && jobDetails.issueTags.length > 0 &&\r\n
\r\n
\r\n \r\n Selected Tag\r\n
\r\n
\r\n {jobDetails.issueTags.map(x => {x})}\r\n
\r\n
\r\n }\r\n
\r\n
\r\n {/* RIGHT COL */}\r\n
\r\n
\r\n\r\n\r\n {jobDetails.issueAreaInProperty && jobDetails.issueAreaInProperty != null && jobDetails.issueAreaInProperty.trim().length > 0 &&\r\n
\r\n
\r\n \r\n Location\r\n
\r\n
\r\n \r\n {jobDetails.issueAreaInProperty}\r\n \r\n
\r\n
\r\n }\r\n\r\n {(jobDetails && jobDetails.isExternalConsumerJob) ? '' :\r\n
\r\n
\r\n \r\n {t('lbl_key')}\r\n
\r\n
\r\n {this.getPropertyKeyMessage(jobDetails.propertyKeyCollectType, jobDetails.propertyTypeId, t, jobDetails.customKeyCollectionValue)}\r\n
\r\n
\r\n }\r\n {(jobDetails && jobDetails.isExternalConsumerJob) ? '' :\r\n
\r\n
\r\n \r\n {t('lbl_image_videos')}\r\n
\r\n
\r\n {(jobDetails.hasOwnProperty(\"attachments\")) ?\r\n
\r\n
\r\n \r\n
\r\n
: ''\r\n } \r\n
\r\n {jobDetails.attachments && jobDetails.attachments.length > 0 ? (\r\n
\r\n \r\n
\r\n ) : (\r\n ''\r\n )} \r\n\r\n
\r\n }\r\n {(!jobDetails.isExternalConsumerJob && (jobDetails.workflowStatusId == 7 || (jobDetails.workflowStatusId == 107 && jobDetails.isReadyForMonthlyPayment && jobDetails.isUserPorpertyOwner)) && !isTenant) &&\r\n <>\r\n {/*
\r\n
\r\n \r\n {\"Invoice\"} \r\n
\r\n
\r\n {(jobDetails.hasOwnProperty(\"invoiceAttachments\")) ?\r\n <>\r\n
\r\n \r\n
\r\n : ''\r\n }\r\n
\r\n
*/}\r\n {jobCompleteAttachments.length > 0 &&\r\n
\r\n
\r\n \r\n {\"Trade Attachments\"} \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n }\r\n \r\n }\r\n {jobDetails && localStorage.getItem(\"exernalUserId\") != \"\" ? (\r\n
\r\n
\r\n \r\n {t(\"lbl_notes\")}\r\n
\r\n
\r\n \r\n {(this.state.showJobNotes) ?\r\n \r\n \r\n :\r\n ''}\r\n
\r\n
\r\n ) : \"\"\r\n }\r\n
\r\n
\r\n
\r\n {(this.state.showAverageCostWhenOwnerApproval && this.state.isAverageCostModelLoaded && (jobDetails.workflowStatusId == 6 && (this.state.ownerApprovalStatus == 0 || this.state.ownerApprovalStatus == 6))) ?\r\n
\r\n
\r\n
\r\n

{t(\"hdr_jobCost\", { jobAverageCost: this.state.averageCostModel.jobAverageCost, jobCount: this.state.averageCostModel.jobCount })}

\r\n
\r\n
\r\n
\r\n :\r\n ''\r\n }\r\n
\r\n\r\n {(jobDetails && !jobDetails.isExternalConsumerJob && jobDetails.tradees && jobDetails.tradees.length) > 0 ?\r\n
\r\n

{t('lbl_trade_details')}

\r\n
\r\n
\r\n
{t('lbl_trade_name')} : {jobDetails.tradees[0].firstName} {jobDetails.tradees[0].lastName}
\r\n
{t('lbl_business_name')} : {jobDetails.tradees[0].businessName}
\r\n
\r\n
\r\n
{t('lbl_mobile_number')} : {jobDetails.tradees[0].mobileNumber}
\r\n
{t('lbl_email')} : {jobDetails.tradees[0].email}
\r\n
\r\n
\r\n
\r\n : ''\r\n }\r\n\r\n {((jobDetails.workflowStatusId == 7 || jobDetails.workflowStatusId == 107) && this.state.selectedRoleForFeedBack !== 7) ? : ''}\r\n\r\n {(jobDetails.isEnableTenantJobPostDisclaimer && jobDetails.hasOwnProperty(\"tenantJobPostDisclaimer\") && jobDetails.workflowStatusId != 6 && jobDetails.workflowStatusId != 9 && jobDetails.workflowStatusId != 11) ?\r\n
\r\n \r\n
\r\n

{t('lbl_disclaimer')}

\r\n
\r\n
\r\n {/* '{jobDetails.tenantJobPostDisclaimer}' */}\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\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n\r\n return {\r\n jobDetails: state.Jobs.jobDetails,\r\n isJobDetailsLoading: state.Jobs.isJobDetailsLoading,\r\n dateFormat: state.User.dateTimeFormatMin\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateUserDetails: details => {\r\n dispatch({ type: \"SET_USER_DETAILS\", userDetails: details });\r\n },\r\n updateIsTenantField: isCurrentTenant => {\r\n dispatch({ type: \"CHECK_CURRENT_TENANT\", isCurrentTenant: isCurrentTenant });\r\n },\r\n addJobTypes: jobTypes => { dispatch({ type: 'SET_JOB_TYPES', jobTypes: jobTypes }) }\r\n };\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withTranslation()(ExternalJobDetails));","import React from 'react';\r\n\r\nclass ExternalTimeline extends React.Component {\r\n render() {\r\n return
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n

Job Completed

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

By: pm Muzain

\r\n \r\n
\r\n
\r\n
\r\n
\r\n
24/07/2019 12:10:54
\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

Job Completed

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

By: pm Muzain

\r\n
\r\n
\r\n
\r\n
\r\n
24/07/2019 12:10:54
\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

Job Completed

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

By: pm Muzain

\r\n
\r\n
\r\n
\r\n
\r\n
24/07/2019 12:10:54
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n }\r\n}\r\n\r\nexport default ExternalTimeline;","import React from 'react';\r\nimport { BrowserRouter as Router, Route, Link, } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nclass MenuBar extends React.Component {\r\n\r\n render() {\r\n const { pathname } = this.props.location;\r\n const { path } = this.props.match;\r\n const { customStyle } = this.props;\r\n const { t } = this.props;\r\n let bidCount = this.props.jobDetails ? this.props.jobDetails.bidCount : 0 ;\r\n var userId = localStorage.getItem('userId');\r\n return (\r\n
    \r\n
  • -1 ? */'' /*: ''*/}`}>\r\n -1 ? 'active' : ''}`} style={{ color: (customStyle.brand) ? customStyle.brand : \"\", backgroundColor: (customStyle.brandBackground) ? customStyle.brandBackground : \"\" }}> {t('menu_overview')} \r\n
  • \r\n {bidCount != 0 &&
  • \r\n -1 ? 'active' : ''}`} style={{ color: (customStyle.brand) ? customStyle.brand : \"\", backgroundColor: (customStyle.brandBackground) ? customStyle.brandBackground : \"\" }}>Quotes\r\n
  • }\r\n
  • -1 ? '' : 'd-none'}`}>\r\n -1 ? 'active' : ''}`} style={{ color: (customStyle.brand) ? customStyle.brand : \"\", backgroundColor: (customStyle.brandBackground) ? customStyle.brandBackground : \"\" }}>{t('menu_editjob')}\r\n
  • \r\n
  • -1 ? '' : 'd-none'}`}>\r\n -1 ? 'active' : ''}`} style={{ color: (customStyle.brand) ? customStyle.brand : \"\", backgroundColor: (customStyle.brandBackground) ? customStyle.brandBackground : \"\" }}>Add Attachments\r\n
  • \r\n
  • -1 ? '' : 'd-none'}`}>\r\n -1 ? 'active' : ''}`} style={{ color: (customStyle.brand) ? customStyle.brand : \"\", backgroundColor: (customStyle.brandBackground) ? customStyle.brandBackground : \"\" }}>Approve\r\n
  • \r\n
  • -1 ? '' : 'd-none'}`}>\r\n -1 ? 'active' : ''}`} style={{ color: (customStyle.brand) ? customStyle.brand : \"\", backgroundColor: (customStyle.brandBackground) ? customStyle.brandBackground : \"\" }}>Reject\r\n
  • \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default withTranslation()(MenuBar);","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport { withRouter, Link } from 'react-router-dom';\r\nimport Viewer from \"react-viewer\";\r\n\r\n// Plugins\r\nimport { toast } from \"react-toastify\";\r\nimport { registerPlugin, FilePond } from \"react-filepond\";\r\nimport FilePondPluginImageExifOrientation from \"filepond-plugin-image-exif-orientation\";\r\nimport FilePondPluginImagePreview from \"filepond-plugin-image-preview\";\r\nimport \"filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css\";\r\nimport { withTranslation, Trans } from 'react-i18next';\r\n// Components\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\n\r\n// Styles\r\n\r\nregisterPlugin(FilePondPluginImageExifOrientation, FilePondPluginImagePreview);\r\n\r\nclass ExternalAddAttachments extends React.Component {\r\n\r\n state = {\r\n isUploading: false,\r\n showImageViewer: false,\r\n imageUrl: '',\r\n downloadImageUrl: '',\r\n attachments: [],\r\n showAttachmentsDrawer: false\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n let drawer = this.createDrawer(t);\r\n return
{drawer}
;\r\n }\r\n\r\n createDrawer = (t) => {\r\n let header = this.createHeader(t);\r\n let body = this.createBody(t);\r\n let footer = this.createFooter(t);\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \"upload-icon\"\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 createHeader = (t) => {\r\n return (\r\n <>\r\n

\r\n {/* {this.props.title} */}\r\n {t('hdr_attachment_drawer')}\r\n

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createBody = (t) => {\r\n const files = this.getUploadedImages();\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n \"upload-icon\"\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n (this.pond = ref)}\r\n name={\"filepond--browser\"}\r\n type={\"remote\"}\r\n files={this.state.attachments}\r\n allowMultiple={true}\r\n server={{\r\n process: (fieldName, file, metadata, load, error, progress, abort, transfer, options) => {\r\n // fieldName is the name of the input field\r\n // file is the actual file object to send\r\n if (file.name.includes('.msg') || file.name.includes('.eml') || file.type === 'message/rfc822' || file.name.includes('.mp3')) {\r\n toast.error('Please Select valid types of file.', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n abort();\r\n return;\r\n }\r\n\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n if (file.name.includes('.msg') || file.name.includes('.eml') || file.type === 'message/rfc822') {\r\n toast.error('Please Select valid types of file.', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n abort();\r\n return;\r\n }\r\n\r\n const request = new XMLHttpRequest();\r\n const attComponent = this;\r\n request.open(\"POST\", `/tenant-api/external-file-upload?id=${this.props.jobDetails.id}&persist=true&userId=${this.props.jobDetails.serviceConsumerId}`);\r\n {\r\n /* request.setRequestHeader(\"Content-Type\", \"multipart/form-data\"); */\r\n }\r\n\r\n // Should call the progress method to update the progress to 100% before calling load\r\n // Setting computable to false switches the loading indicator to infinite mode\r\n request.upload.onprogress = e => {\r\n progress(e.lengthComputable, e.loaded, e.total);\r\n };\r\n\r\n // Should call the load method when done and pass the returned server file id\r\n // this server file id is then used later on when reverting or restoring a file\r\n // so your server knows which file to return without exposing that info to the client\r\n request.onload = () => {\r\n if (request.status >= 200 && request.status < 300) {\r\n // the load method accepts either a string (id) or an object\r\n load(request.responseText);\r\n {/* attComponent.props.jobDetails.attachments.push(\r\n JSON.parse(request.response)\r\n ); */}\r\n\r\n {/* this.setState({ isUploading: false }); */ }\r\n let jobDetails = this.props.jobDetails;\r\n jobDetails.attachments.push(JSON.parse(request.response));\r\n this.props.setJobDetails(jobDetails);\r\n\r\n {/* setTimeout(() => {\r\n this.setState({\r\n downloadImageUrl: ' '\r\n })\r\n }, 1000); */}\r\n\r\n } else {\r\n // Can call the error method if something is wrong, should exit after\r\n error(\"oh no\");\r\n }\r\n };\r\n\r\n request.send(formData);\r\n\r\n // Should expose an abort method so the request can be cancelled\r\n return {\r\n abort: () => {\r\n // This function is entered if the user has tapped the cancel button\r\n request.abort();\r\n\r\n // Let FilePond know the request has been cancelled\r\n abort();\r\n }\r\n };\r\n },\r\n revert: (uniqueFileId, load, error) => {\r\n let attComponent = this;\r\n const request = new XMLHttpRequest();\r\n let fileObj = JSON.parse(uniqueFileId);\r\n request.open(\r\n \"GET\",\r\n `/tenant-api/delete-file?fileId=${fileObj.fileId}`\r\n );\r\n\r\n request.onload = function () {\r\n if (request.status >= 200 && request.status < 300) {\r\n // the load method accepts either a string (id) or an object\r\n load();\r\n let att = attComponent.props.jobDetails.attachments.filter(a => {\r\n return a.fileId != fileObj.fileId;\r\n });\r\n attComponent.props.jobDetails.attachments = att;\r\n } else {\r\n // Can call the error method if something is wrong, should exit after\r\n error(\"oh no\");\r\n }\r\n\r\n };\r\n\r\n request.send();\r\n\r\n return {\r\n abort: () => {\r\n // This function is entered if the user has tapped the cancel button\r\n request.abort();\r\n }\r\n };\r\n // Can call the error method if something is wrong, should exit after\r\n // Should call the load method when done, no parameters required\r\n }\r\n }}\r\n oninit={() => this.handleInit()}\r\n labelIdle={t('lbl_attachments_drawer_imagetypes')}\r\n >\r\n
\r\n {files}\r\n
\r\n );\r\n };\r\n\r\n getUploadedImages = () => {\r\n if (this.props.jobDetails.hasOwnProperty(\"attachments\")) {\r\n const uploadedFiles = this.props.jobDetails.attachments.map(file => {\r\n return
\"\"
;\r\n });\r\n\r\n }\r\n\r\n };\r\n\r\n createFooter = (t) => {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n {\" \"}\r\n {t('btn_cancel')}{\" \"}\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n onAttachToPost = () => {\r\n this.toggleAttachmentsDrawer();\r\n };\r\n\r\n handleInit = () => { };\r\n\r\n toggleAttachmentsDrawer = () => {\r\n this.setState({ attachments: [] });\r\n this.setState({\r\n showAttachmentsDrawer: !this.state.showAttachmentsDrawer\r\n });\r\n this.props.onSubmitAttachments(this.props.jobDetails.attachments);\r\n };\r\n\r\n rendersss() {\r\n const { jobDetails, isJobDetailsLoading } = this.props;\r\n const { isUploading, showImageViewer, imageUrl, downloadImageUrl } = this.state;\r\n return <>\r\n {(isJobDetailsLoading) ?\r\n

\r\n \r\n

\r\n :\r\n
\r\n {(jobDetails == null) ? '' :\r\n jobDetails.attachments.map(element => {\r\n var defaultFileSrc = \"/Images/attachment.png\";\r\n switch (element.extension) {\r\n case '.csv':\r\n defaultFileSrc = \"/Images/attached-file-csv.svg\";\r\n break;\r\n case '.pdf':\r\n defaultFileSrc = \"/Images/attached-file-pdf.svg\";\r\n break;\r\n case '.mov':\r\n case '.mp4':\r\n defaultFileSrc = \"/Images/attached-file-mov.svg\";\r\n break;\r\n case '.png':\r\n case '.jpg':\r\n case '.jpeg':\r\n defaultFileSrc = element.fileUrl;\r\n break;\r\n case '.tiff':\r\n defaultFileSrc = \"/Images/attached-file-tiff.svg\";;\r\n break;\r\n default:\r\n break;\r\n }\r\n return
\r\n
\r\n {\r\n this.setState({\r\n showImageViewer: true,\r\n imageUrl: event.target.src,\r\n downloadImageUrl: element.fileUrl\r\n })\r\n }}\r\n onError={(e) => {\r\n e.target.onerror = null;\r\n e.target.src = defaultFileSrc;\r\n }} />\r\n\r\n
\r\n
\r\n })\r\n }\r\n
\r\n
\r\n {(isUploading) ?\r\n

\r\n \r\n

: <>\r\n document.getElementById('upload-file').click()} >\r\n this.onFileSelected(event)} className=\"d-none\" />\r\n \r\n }\r\n
\r\n
\r\n {\r\n this.setState({ showImageViewer: false })\r\n }}\r\n images={[{ src: imageUrl, alt: \"\", downloadUrl: downloadImageUrl }]}\r\n />\r\n
\r\n }\r\n\r\n \r\n }\r\n\r\n onFileSelected = (event) => {\r\n const jobDetails = this.props.jobDetails;\r\n\r\n const formData = new FormData();\r\n formData.append(\"file\", event.target.files[0]);\r\n const request = new XMLHttpRequest();\r\n\r\n this.setState({ isUploading: true });\r\n\r\n request.open(\"POST\", `/tenant-api/external-file-upload?id=${jobDetails.id}&persist=true&userId=${jobDetails.serviceConsumerId}`);\r\n\r\n request.onload = () => {\r\n this.setState({ isUploading: false });\r\n if (request.status >= 200 && request.status < 300) {\r\n jobDetails.attachments.push(JSON.parse(request.response));\r\n this.props.setJobDetails(jobDetails);\r\n } else {\r\n\r\n }\r\n };\r\n request.send(formData);\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n return {\r\n jobDetails: state.Jobs.jobDetails,\r\n isJobDetailsLoading: state.Jobs.isJobDetailsLoading,\r\n jobTypes: state.Jobs.jobTypes,\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n setJobDetails: jobDetails => { dispatch({ type: 'SET_JOB_DETAILS', jobDetails: jobDetails }) },\r\n setJobDetailsLoadingStatus: status => { dispatch({ type: 'SET_JOB_DETAILS_LOADING_STATUS', status: status }) }\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withTranslation()(ExternalAddAttachments));","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport { ButtonToolbar, ToggleButtonGroup, ToggleButton, Form } from 'react-bootstrap';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { Label, Dropdown } from 'semantic-ui-react'\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport * as _ from 'lodash';\r\nimport 'semantic-ui-css/semantic.min.css';\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { AXIOS } from '../../../Utilities/HttpRequest/Axios';\r\nimport jobService from '../../../Services/JobService';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport propertyService from '../../../Services/PropertyService';\r\nimport ImageViewer from '../../Common/ImageViewer/ImageViewer';\r\nimport ExternalAddAttachments from '../AddAttachments/ExternalAddAttachments';\r\n\r\n\r\n// const history = useHistory();\r\nclass ExternalEditJob extends React.Component {\r\n\r\n notifyError = (msg) => toast.error(msg,{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n state = {\r\n propertySearchData: [],\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: '',\r\n propertyName: '',\r\n suburbId: '',\r\n propertyType: '',\r\n jobBudget: 0\r\n },\r\n availableServices: [],\r\n availableServicesDetails: [],\r\n selectedService: { childJobTypes: [] },\r\n selectedServiceType: {\r\n parentJobType: { id: '' }\r\n },\r\n selectedSubServiceType: {},\r\n jobDetails: { attachments: [] },\r\n attachments: [],\r\n jobId: '',\r\n dueDate: new Date(),\r\n formattedDueDate: '',\r\n jobUrgency: '',\r\n propertyList: [],\r\n value: '',\r\n isLoading: false,\r\n filteredResults: [],\r\n propertyId: '',\r\n isPropertiesLoading: false,\r\n parentJobTypes: [],\r\n primaryJobTypes: [],\r\n secondaryJobTypes: [],\r\n frequentlyUsedServices: [],\r\n isShowMoreServices: false,\r\n locationDetails: {\r\n latitude: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n location: ''\r\n },\r\n isMandatoryToUploadFiles: false,\r\n isJobForMe: 1,\r\n jobBudget: 0,\r\n jobForMe: {},\r\n selectedTradees: [],\r\n isSelectedOnDemand: false,\r\n selectedQuoteLimit: 0,\r\n inviteToProviders: false,\r\n isJobPosting: false,\r\n isRestrictKeyCollectionForResidentialProperties: false,\r\n isJobTypesLoaded: false,\r\n propertyAddress: '',\r\n dateFormat:\"dd/MM/yyyy\",\r\n isAttachmentsMandotary:false\r\n }\r\n\r\n componentDidMount() {\r\n this.GetTenantPropertiesByUserId();\r\n this.loadJobTypes();\r\n }\r\n\r\n componentWillReceiveProps() {\r\n this.loadJobTypes();\r\n }\r\n\r\n loadJobTypes = () => {\r\n if (this.props.jobDetails != null && !this.state.isJobTypesLoaded) {\r\n let selectedDate = this.props.jobDetails.dueDate.indexOf('0001') > -1 ? new Date() : new Date(this.props.jobDetails.dueDate);\r\n this.setState({ dueDate: selectedDate });\r\n jobService.GetSubJobTypes(this.props.jobDetails.primaryJobType).then(res => {\r\n let selectedNode = res;\r\n this.setState({ primaryJobTypes: selectedNode.childJobTypes, selectedService: selectedNode, selectedServiceType: { parentJobType: { id: '' } } });\r\n\r\n jobService.GetSubJobTypes(this.props.jobDetails.secondaryJobType).then(res => {\r\n this.setState({\r\n isJobTypesLoaded: true\r\n })\r\n let selectedNode = res;\r\n if (selectedNode == undefined) {\r\n let selectedServiceType = {\r\n childJobTypes: [],\r\n parentJobType: _.find(this.state.primaryJobTypes, f => f.id === this.props.jobDetails.secondaryJobType)\r\n }\r\n let formData1 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: ''\r\n };\r\n this.setState({\r\n secondaryJobTypes: [],\r\n selectedServiceType: selectedServiceType,\r\n formData: formData1\r\n });\r\n\r\n } else {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: ''\r\n };\r\n setTimeout(() => {\r\n this.setState({\r\n secondaryJobTypes: selectedNode.childJobTypes,\r\n selectedServiceType: selectedNode,\r\n formData: formData2\r\n });\r\n }, 500)\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.title = React.createRef();\r\n this.jobDescription = React.createRef();\r\n this.budgetRef = React.createRef();\r\n }\r\n\r\n onChangeJobType = () => {\r\n this.setState({\r\n isJobForMe: this.refs.jobType.props.value,\r\n jobForMe: {\r\n propertyType: '',\r\n address: '',\r\n latitude: '',\r\n location: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n budget: ''\r\n },\r\n });\r\n }\r\n\r\n handleResultSelect = (e, { result }) => {\r\n this.setState({ value: result.label })\r\n this.getChildJobTypes(result.id);\r\n }\r\n\r\n handleSearchChange = (e, { value }) => {\r\n this.setState({ filteredResults: [], value });\r\n if (value.length > 2) {\r\n this.setState({ isLoading: true })\r\n let jobTypes = this.props.jobTypes;\r\n let parents = _.map(jobTypes, m => m.parentJobType);\r\n const parentJobTypes = _.filter(parents, f => f.parentRef === null);\r\n this.setState({ parentJobTypes: parentJobTypes });\r\n setTimeout(() => {\r\n document.querySelector('.jobpost-main-details .auto-complete').classList.remove(\"hide-results\");\r\n this.setState({\r\n isLoading: false,\r\n filteredResults: parentJobTypes.filter(suggestion => suggestion.label.toLowerCase().indexOf(this.state.value.toLowerCase()) > -1)\r\n })\r\n }, 300)\r\n } else {\r\n document.querySelector('.jobpost-main-details .auto-complete').classList.add(\"hide-results\");\r\n }\r\n }\r\n\r\n getChildJobTypes(parentId) {\r\n jobService.GetSubJobTypes(parentId).then(res => {\r\n let selectedNode = res;\r\n this.setState({ primaryJobTypes: selectedNode.childJobTypes, selectedService: selectedNode, selectedServiceType: { parentJobType: { id: '' } } });\r\n });\r\n }\r\n\r\n GetFrequentlyUsedJobTypes = () => {\r\n try {\r\n jobService.GetFrequentlyUsedJobTypes()\r\n .then(data => {\r\n this.setState({ frequentlyUsedServices: data });\r\n })\r\n\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n onSelectFrequentlyUsedJobTypes = (event) => {\r\n try {\r\n this.getChildJobTypes(event);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n showHideMoreService = () => {\r\n this.setState({\r\n isShowMoreServices: !this.state.isShowMoreServices,\r\n selectedService: {}\r\n })\r\n }\r\n\r\n\r\n getAllAvailableJobTypes() {\r\n let jobTypes = this.props.jobTypes;\r\n let parents = _.map(jobTypes, m => m.parentJobType);\r\n const parentJobTypes = _.filter(parents, f => f.parentRef === null);\r\n this.setState({ parentJobTypes: parentJobTypes });\r\n }\r\n\r\n resultRenderer = (event) => {\r\n return \r\n }\r\n\r\n createTypeOfServicesButtons = (props) => {\r\n if (this.state.selectedService.childJobTypes && this.state.selectedService.childJobTypes.length > 0) {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n this.getSubChildJobTypes(event)}\r\n defaultValue={this.props.jobDetails.secondaryJobType}>\r\n {this.state.selectedService.childJobTypes.map((jbType, index) => {\r\n return {jbType.label};\r\n })}\r\n \r\n \r\n
\r\n \r\n )\r\n } else {\r\n if (this.props.jobDetails != null) {\r\n //this.onSelectFrequentlyUsedJobTypes(this.props.jobDetails.primaryJobType)\r\n }\r\n }\r\n }\r\n\r\n createTypeOfServicesChildButtons = (props) => {\r\n if (this.state.secondaryJobTypes.length > 0) {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n {this.state.secondaryJobTypes.map((jbType, index) => {\r\n return {jbType.label};\r\n })}\r\n \r\n \r\n
\r\n \r\n )\r\n } else {\r\n if (this.props.jobDetails != null) {\r\n //this.getSubChildJobTypes(this.props.jobDetails.secondaryJobType)\r\n }\r\n }\r\n\r\n }\r\n\r\n getDueDate = () => {\r\n if (this.props.jobDetails && this.props.jobDetails.jobUrgencyId == -999) {\r\n let selectedDate = this.props.jobDetails.dueDate.toString().indexOf('0001') > -1 ? new Date() : new Date(this.props.jobDetails.dueDate);\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n }\r\n\r\n handleDueDateChange = (date) => {\r\n let jobDetails = this.props.jobDetails;\r\n jobDetails.dueDate = date;\r\n this.setState({\r\n dueDate: date, // ISO String, ex: \"2016-11-19T12:00:00.000Z\"\r\n });\r\n }\r\n\r\n getSubChildJobTypes(parentId) {\r\n let jobTypes = this.props.jobTypes;\r\n jobService.GetSubJobTypes(parentId).then(res => {\r\n this.setState({\r\n isJobTypesLoaded: true\r\n })\r\n let selectedNode = res;\r\n if (selectedNode == undefined) {\r\n let selectedServiceType = {\r\n childJobTypes: [],\r\n parentJobType: _.find(this.state.primaryJobTypes, f => f.id === parentId)\r\n }\r\n let formData1 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: ''\r\n };\r\n this.setState({\r\n secondaryJobTypes: [],\r\n selectedServiceType: selectedServiceType,\r\n formData: formData1\r\n });\r\n\r\n } else {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: ''\r\n };\r\n setTimeout(() => {\r\n this.setState({\r\n secondaryJobTypes: selectedNode.childJobTypes,\r\n selectedServiceType: selectedNode,\r\n formData: formData2\r\n });\r\n }, 500)\r\n }\r\n });\r\n }\r\n\r\n handleJobUrgencyOnChange = (value) => {\r\n this.setState({ jobUrgency: value });\r\n let jobDetails = this.props.jobDetails;\r\n jobDetails.jobUrgencyId = value;\r\n this.props.setJobDetails(jobDetails);\r\n }\r\n\r\n validateExternalJobDetails = () => {\r\n const { selectedService, selectedServiceType, formData, jobBudget, selectedTradees, isSelectedOnDemand, inviteToProviders } = this.state;\r\n let v = true;\r\n if (this.title.current.value === '') { this.notifyError('Please enter a job title.'); v = v && false; }\r\n if (this.jobDescription.current.value === '') { this.notifyError('Please enter a job description.'); v = v && false; }\r\n if (document.querySelector('[name=\"serviceType\"]') != null && document.querySelector('[name=\"serviceType\"]:checked') == null) { this.notifyError('Please select a type of service.'); v = v && false; }\r\n if (document.querySelector('[name=\"serviceTypeOption\"]') != null && document.querySelector('[name=\"serviceTypeOption\"]:checked') == null) { this.notifyError(`Please select ${selectedServiceType.parentJobType.description.replace('?', '')} that you need.`); v = v && false; }\r\n if (document.querySelector('[name=\"jobUrgency\"]:checked') == null) { this.notifyError('Please select the job urgency.'); v = v && false; }\r\n // else { if(document.querySelector('[name=\"jobUrgency\"]:checked').value == '-999' && !(new Date(this.state.dueDate.toLocaleDateString()) > new Date(new Date().toLocaleDateString())) ) { } }\r\n return v;\r\n }\r\n\r\n onSubmitJobDetails = () => {\r\n if (this.validateExternalJobDetails()) {\r\n let jobDetails = this.props.jobDetails;\r\n jobDetails.title = this.title.current.value;\r\n jobDetails.description = this.jobDescription.current.value;\r\n jobDetails.secondaryJobType = document.querySelector('[name=\"serviceType\"]') == null ? jobDetails.secondaryJobType : document.querySelector('[name=\"serviceType\"]:checked').value;\r\n jobDetails.jobType = document.querySelector('[name=\"serviceTypeOption\"]') == null ? jobDetails.secondaryJobType : document.querySelector('[name=\"serviceTypeOption\"]:checked').value;\r\n jobDetails.jobUrgencyId = document.querySelector('[name=\"jobUrgency\"]:checked').value;\r\n jobDetails.propertyKeyCollectType = document.querySelector('input[name=propertyKey]:checked').value;\r\n\r\n if (this.state.propertyId != jobDetails.propertyId) {\r\n jobDetails.propertyId = this.state.propertyId;\r\n jobDetails.address = this.state.propertyList.find(x => x.propertyId == this.state.propertyId).address;\r\n }\r\n\r\n if(jobDetails.attachments.length==0 && jobDetails.isAttachmentMandatory ){\r\n\r\n toast.error(`You are required to attach an image related to the maintenance request.`,{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n\r\n this.setState({ isJobPosting: true })\r\n AXIOS.POST(`tenant-api/external-job-post`, jobDetails, { 'headers': { 'ClientSecret': AppConfiguration.Setting().ClientSecret } })\r\n .then(response => {\r\n this.setState({ isJobPosting: false })\r\n if (response == 'Request Unauthorized' || response == 'Job post failed') {\r\n toast.error(`Job is not successfully. Please refresh link and try again.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n } else {\r\n\r\n this.getJobDetailsByJobId();\r\n\r\n this.props.setJobDetails(jobDetails);\r\n toast.success(`Job updated Successfully.`,{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.history.push(`/external/overview${this.props.location.search}`);\r\n // let { history } = this.props;\r\n // history.push({ pathname: '/' });\r\n }\r\n }, error => {\r\n console.log(error);\r\n this.setState({ isJobPosting: false });\r\n toast.error(`Fail to post the job. Please try again.`,{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n })\r\n }\r\n }\r\n\r\n getJobDetailsByJobId = () => {\r\n const jobId = window.jobId;\r\n this.props.setJobDetailsLoadingStatus(true);\r\n this.setState({ isJobDetailsLoading: true })\r\n if (jobId) {\r\n try {\r\n jobService.GetJobDetailsForExternalUsers(jobId,'').then((details) => {\r\n this.setState({\r\n jobDetails: details,\r\n isJobDetailsLoading: false\r\n });\r\n this.props.setJobDetails(details);\r\n this.props.setJobDetailsLoadingStatus(false);\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n this.props.setJobDetailsLoadingStatus(false);\r\n }\r\n }\r\n };\r\n\r\n GetTenantPropertiesByUserId = () => {\r\n this.setState({isPropertiesLoading: true})\r\n propertyService.GetTenantPropertiesByUserId()\r\n .then((res) => {\r\n this.setState({isPropertiesLoading: false});\r\n let none = [{ propertyId: 0, propertyName: '--None--', suburbId: '', location: '', address: '', propertyType: 'Residential'}]\r\n //this.props.updateProperties(res.properties);\r\n if(res.properties.length > 0) {\r\n\r\n let properties = res.properties;\r\n\r\n this.setState({\r\n propertyList: properties,\r\n propertyId: properties[0].propertyId\r\n });\r\n //this.getPropertyDetailsByPropertyId(properties[0].propertyId);\r\n } else {\r\n this.setState({\r\n propertyList: none,\r\n propertyId: none[0].propertyId\r\n });\r\n }\r\n })\r\n }\r\n\r\n handlePropertyChange = (event, props) => {\r\n this.setState({\r\n propertyId : props.value\r\n });\r\n }\r\n\r\n render() {\r\n let serviceTypes = this.createTypeOfServicesButtons();\r\n let serviceTypeChild = this.createTypeOfServicesChildButtons();\r\n const dueDate = this.getDueDate();\r\n const { isLoading, value, propertyList, filteredResults, propertyId, isPropertiesLoading, isJobForMe, jobForMe, isJobPosting } = this.state;\r\n const { isJobDetailsLoading, jobDetails } = this.props;\r\n \r\n\r\n return <>\r\n {(isJobDetailsLoading) ?\r\n

\r\n \r\n

\r\n :\r\n (jobDetails == null) ? '' :\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n { return { key: index, text: a.address, value: a.propertyId }; })}\r\n placeholder='Choose a Property'\r\n onChange={this.handlePropertyChange}\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 {jobDetails.primaryJobTypeDisplay}\r\n \r\n \r\n
\r\n {serviceTypes}\r\n {serviceTypeChild}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n Within a day (Urgent)\r\n Within a few days\r\n Within a week\r\n Schedule a date\r\n \r\n \r\n
\r\n {dueDate}\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 \"upload-icon\"\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
*/}\r\n
\r\n
\r\n { this.setState( { attachments: event } ) }} > \r\n \r\n
\r\n {jobDetails.isAttachmentMandatory ?
*
: ''}\r\n
\r\n {(jobDetails.attachments.length > 0) ? \r\n : ''\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n {(jobDetails != null && (jobDetails.workflowStatusId == 1 || jobDetails.workflowStatusId == 5)) ?
\r\n \r\n
: ''}\r\n \r\n }\r\n\r\n \r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n return {\r\n jobDetails: state.Jobs.jobDetails,\r\n isJobDetailsLoading: state.Jobs.isJobDetailsLoading,\r\n jobTypes: state.Jobs.jobTypes,\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n setJobDetails: jobDetails => { dispatch({ type: 'SET_JOB_DETAILS', jobDetails: jobDetails }) },\r\n setJobDetailsLoadingStatus: status => { dispatch({ type: 'SET_JOB_DETAILS_LOADING_STATUS', status: status }) }\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ExternalEditJob);","import React, { useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport { Dropdown } from 'semantic-ui-react';\r\nimport { ButtonToolbar, ToggleButtonGroup, ToggleButton } from 'react-bootstrap';\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport { BrowserRouter as Router, Route, Link, } from 'react-router-dom'\r\nimport Loader from \"react-loader-spinner\";\r\nimport settingsService from \"../../../Services/settingsService\";\r\nimport jobService from \"../../../Services/JobService\";\r\n// Styles\r\n//import \"../OwnerApproval/JobApproveDrawer.scss\";\r\n\r\nclass ExternalJobApprove extends React.Component {\r\n notifyError = (msg) => toast.error(msg, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n state = {\r\n showJobApproveDrawer: false,\r\n jobApproveOption: '0',\r\n showQuoteLimitSelection: false,\r\n showSuggestedTrade: false,\r\n selectedQuoteLimit: 0,\r\n selectedTrade: '',\r\n quoteLimit: [\r\n { key: 1, text: '1', value: 1 },\r\n { key: 2, text: '2', value: 2 },\r\n { key: 3, text: '3', value: 3 },\r\n { key: 4, text: '4', value: 4 },\r\n { key: 5, text: '5', value: 5 },\r\n { key: 6, text: '6', value: 6 },\r\n { key: 7, text: '7', value: 7 },\r\n { key: 8, text: '8', value: 8 },\r\n { key: 9, text: '9', value: 9 },\r\n { key: 10, text: '10', value: 10 },\r\n { key: 11, text: 'Unlimited', value: 11 }],\r\n suggestedTradeList: [],\r\n jobDetails: {},\r\n history: {},\r\n isLoading: false,\r\n showAverageCostWhenOwnerApproval: false,\r\n isOrganizationSettingsLoaded: false,\r\n averageCostModel: {\r\n jobAverageCost: 0.00,\r\n jobCount: 0,\r\n confidenceLevel: 1\r\n },\r\n isAverageCostModelLoaded: false,\r\n disableApproveButton:false\r\n };\r\n constructor(props) {\r\n super(props);\r\n this.validateApproval = this.validateApproval.bind(this);\r\n this.JobApprove = this.JobApprove.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({ jobDetails: this.props.jobDetails, userId: this.props.userId });\r\n this.description = React.createRef();\r\n this.approvedAmount = React.createRef();\r\n this.isEmptySuggestedTradeList = false\r\n this.getOrganizationSettings(localStorage.getItem('orgId'));\r\n }\r\n\r\n getOrganizationSettings(organizationId) {\r\n const jobId = window.jobId;\r\n settingsService.getOrganizationSettingsByOrgId(organizationId)\r\n .then((res) => {\r\n this.setState({\r\n showAverageCostWhenOwnerApproval: res.organizationSettingsModel.showAverageCostWhenOwnerApproval,\r\n isOrganizationSettingsLoaded: true,\r\n });\r\n if (res.organizationSettingsModel.showAverageCostWhenOwnerApproval) {\r\n this.getPredictiveAverageCost(jobId);\r\n }\r\n })\r\n }\r\n\r\n //for getting average job cost\r\n getPredictiveAverageCost = (jobId) => {\r\n try {\r\n jobService.GetPredictiveJobAverageCost(jobId)\r\n .then(data => {\r\n this.setState({ averageCostModel: data });\r\n this.setState({ isAverageCostModelLoaded: true });\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n {this.createJobApproveBody()}\r\n \r\n );\r\n }\r\n createJobApproveBody = () => {\r\n let quoteLimitSelection = this.createQuoteLimitSelection();\r\n let suggestedTradeSelection = this.createSuggestedTradeSelection();\r\n\r\n return (\r\n
\r\n {/* {(this.props.jobDetails && this.props.jobDetails.isEnableOwnerApprovalPercentage == false) ?\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n Send out direct work order\r\n Please get some quotes\r\n Delegate to Property Manager\r\n \r\n \r\n
\r\n
\r\n
\r\n : ''\r\n } */}\r\n {quoteLimitSelection}\r\n {suggestedTradeSelection}\r\n {(this.state.showAverageCostWhenOwnerApproval && this.state.isAverageCostModelLoaded) ?\r\n
\r\n
\r\n
\r\n
The suggested average cost range for the job is +/-${this.state.averageCostModel.jobAverageCost}
\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 Mark as Completed\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n createQuoteLimitSelection = () => {\r\n if (this.state.showQuoteLimitSelection) {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n }\r\n\r\n createSuggestedTradeSelection = () => {\r\n let messageForEmptySuggestedTradeSelection = this.createMessageForEmptySuggestedTradeSelection();\r\n if (this.state.showSuggestedTrade) {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n {messageForEmptySuggestedTradeSelection}\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n }\r\n createMessageForEmptySuggestedTradeSelection = () => {\r\n if (this.isEmptySuggestedTradeList) {\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n )\r\n }\r\n else {\r\n return\r\n }\r\n }\r\n\r\n handleJobApproveOptionOnChange = (value) => {\r\n this.setState({ jobApproveOption: value });\r\n\r\n if (value === \"1\") {\r\n try {\r\n AXIOS.GET(\r\n `tenant-api/suggested-trades?jobId=${this.props.jobDetails.id}`\r\n ).then(response => {\r\n if (response) {\r\n if (response.length <= 0) {\r\n this.isEmptySuggestedTradeList = true;\r\n }\r\n this.setState({ suggestedTradeList: response.map((a, index) => { return { key: index, text: a.businessName, value: a.userId }; }) });\r\n this.setState({ showQuoteLimitSelection: false, showSuggestedTrade: true });\r\n } else {\r\n toast.error(\"Error occured. Please try again.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n else if (value === \"2\") {\r\n this.setState({ showQuoteLimitSelection: true, showSuggestedTrade: false });\r\n }\r\n else if (value === \"3\") {\r\n this.setState({ showQuoteLimitSelection: false, showSuggestedTrade: false });\r\n }\r\n }\r\n\r\n onQuoteLimitSelection = (value) => {\r\n\r\n }\r\n\r\n validateApproval = (value) => {\r\n let v = true;\r\n // if (this.state.jobApproveOption === '0' && this.props.jobDetails.isEnableOwnerApprovalPercentage == false) {\r\n // toast.error('Please select approval option.',{\r\n // position: toast.POSITION.BOTTOM_RIGHT\r\n // }); v = v && false;\r\n // }\r\n\r\n // if (this.state.jobApproveOption === '1' && this.state.selectedTrade === '') {\r\n // toast.error('Please select a trade.',{\r\n // position: toast.POSITION.BOTTOM_RIGHT\r\n // }); v = v && false;\r\n // }\r\n\r\n // if (this.state.jobApproveOption === '2' && this.state.selectedQuoteLimit === 0) {\r\n // toast.error('Please select a Quote Limit.',{\r\n // position: toast.POSITION.BOTTOM_RIGHT\r\n // }); v = v && false;\r\n // }\r\n\r\n if (this.description.current.value == '' || this.description.current.value == undefined || this.description.current.value == null) {\r\n toast.error(\"Please enter job approving note.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n }); v = v && false;\r\n }\r\n\r\n return v;\r\n }\r\n\r\n JobApprove = (value) => {\r\n try {\r\n\r\n if (this.validateApproval()) {\r\n this.setState({\r\n isLoading: true,\r\n disableApproveButton:true\r\n })\r\n let jobApprovalRequest = {};\r\n jobApprovalRequest.userId = localStorage.getItem(\"exernalUserId\");\r\n jobApprovalRequest.jobId = this.props.jobDetails.id;\r\n jobApprovalRequest.note = this.description.current.value;\r\n jobApprovalRequest.jobApproveOption = parseFloat(this.state.jobApproveOption);\r\n jobApprovalRequest.quoteLimit = this.state.selectedQuoteLimit;\r\n jobApprovalRequest.tradeId = this.state.selectedTrade;\r\n jobApprovalRequest.IsOwnerApproved = true;\r\n\r\n let variationText = \"\";\r\n if (this.props.jobDetails.isOwnerApprovalPendingForVariation &&\r\n this.props.jobDetails.currentVariation &&\r\n this.props.jobDetails.currentVariation.status == 201) {\r\n variationText = \"Variation \";\r\n }\r\n\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/job-approve-owner`, jobApprovalRequest)\r\n .then(response => {\r\n if (response && response.success) {\r\n toast.success(`Job ${variationText}Approved.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.onJobApproveOrReject();\r\n this.props.history.push(`/external/overview?code=${this.props.jobDetails.id}&userId=${jobApprovalRequest.userId}`);\r\n this.setState({\r\n isLoading: true\r\n })\r\n // window.location.reload();\r\n } else {\r\n this.props.history.push(`/external/overview?code=${this.props.jobDetails.id}&userId=${this.state.userId}`);\r\n toast.error('Job’s status has been changed. Please contact the property manager for more details', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }));\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n };\r\n\r\n handleQuoteLimitChange = (event, props) => {\r\n this.state.selectedQuoteLimit = props.value;\r\n this.state.selectedTrade = '';\r\n }\r\n\r\n handleTradeChange = (event, props) => {\r\n this.state.selectedTrade = props.value;\r\n this.state.selectedQuoteLimit = 0;\r\n }\r\n\r\n\r\n createJobApproveHeader = () => {\r\n return (\r\n <>\r\n

\r\n Approve Job\r\n

\r\n\r\n \r\n );\r\n };\r\n\r\n getConfidenceLevelClass(confidenceLevel) {\r\n switch (confidenceLevel) {\r\n case 1:\r\n return \"confident-lbl confident-low\";\r\n case 2:\r\n return \"confident-lbl confident-medium\";\r\n case 3:\r\n return \"confident-lbl confident-high\";\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\nexport default connect(\r\n)(ExternalJobApprove);\r\n","import React, { useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport { Dropdown } from 'semantic-ui-react';\r\nimport { ButtonToolbar, ToggleButtonGroup, ToggleButton } from 'react-bootstrap';\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport Loader from \"react-loader-spinner\";\r\n// Styles\r\n //import \"../OwnerApproval/JobApproveDrawer.scss\";\r\n\r\nclass ExternalJobReject extends React.Component {\r\n notifyError = (msg) => toast.error(msg,{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n state = {\r\n jobDetails:{},\r\n description:\"\",\r\n userId:\"\",\r\n isLoading: false,\r\n disableRejctButton:false\r\n };\r\n constructor(props) {\r\n super(props);\r\n\r\n this.JobReject = this.JobReject.bind(this);\r\n this.description = React.createRef();\r\n }\r\n\r\n\r\n componentDidMount() {\r\n this.setState({jobDetails:this.props.jobDetails,userId:this.props.userId});\r\n } \r\n\r\n render() {\r\n return (\r\n <>\r\n {this.createJobRejectBody()}\r\n \r\n );\r\n }\r\n \r\n createJobRejectBody = () => {\r\n return (\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 Mark as Completed\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n JobReject = () => {\r\n if (this.description.current.value == '' || this.description.current.value == undefined || this.description.current.value == null) {\r\n toast.error(\"Please enter job rejecting reason.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n\r\n this.setState({\r\n isLoading: true,\r\n disableRejctButton:true\r\n });\r\n\r\n if (this.state.userId == null || this.state.userId == 'undefind') {\r\n this.setState({ userId: localStorage.getItem(\"exernalUserId\") });\r\n }\r\n\r\n AXIOS.GET(`tenant-api/job-reject-owner?userId=${this.state.userId}&jobId=${this.props.jobDetails.id}¬e=${this.description.current.value}`).then(response => {\r\n if (response && response.success) {\r\n this.setState({\r\n isLoading: false\r\n });\r\n toast.success(\"Job Rejected.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.onJobApproveOrReject();\r\n this.props.history.push(`/external/overview?code=${this.props.jobDetails.id}&userId=${this.state.userId}`);\r\n window.location.reload();\r\n } else {\r\n this.setState({\r\n isLoading: false\r\n });\r\n this.props.history.push(`/external/overview?code=${this.props.jobDetails.id}&userId=${this.state.userId}`);\r\n toast.error('Job’s status has been changed. Please contact the property manager for more details', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n });\r\n };\r\n}\r\n\r\n\r\nexport default connect(\r\n)(ExternalJobReject);\r\n","import React, { useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport { Dropdown } from 'semantic-ui-react';\r\nimport { ButtonToolbar, ToggleButtonGroup, ToggleButton } from 'react-bootstrap';\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\n// Styles\r\n //import \"../OwnerApproval/JobApproveDrawer.scss\";\r\n\r\nclass ExternalOwnerAttend extends React.Component {\r\n notifyError = (msg) => toast.error(msg,{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n state = {\r\n jobDetails:{},\r\n description:\"\",\r\n userId:\"\",\r\n isLoading: false\r\n };\r\n constructor(props) {\r\n super(props);\r\n\r\n this.JobAttend = this.JobAttend.bind(this);\r\n this.description = React.createRef();\r\n }\r\n\r\n\r\n componentDidMount() {\r\n this.setState({jobDetails:this.props.jobDetails,userId:this.props.userId});\r\n } \r\n\r\n render() {\r\n return (\r\n <>\r\n {this.createJobAttendBody()}\r\n \r\n );\r\n }\r\n \r\n createJobAttendBody = () => {\r\n return (\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 JobAttend = () => {\r\n if (this.description.current.value == '' || this.description.current.value == undefined || this.description.current.value == null) {\r\n toast.error(\"Please enter job attend reason.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n\r\n if (this.state.userId == null || this.state.userId == 'undefind') {\r\n this.setState({ userId: localStorage.getItem(\"exernalUserId\") });\r\n }\r\n this.setState({\r\n isLoading: true\r\n });\r\n var callbackUrl = AppConfiguration.Setting().BAndAApiEndPoint;\r\n try {\r\n AXIOS.GET(`tenant-api/owner-attending-job?ownerId=${this.state.userId}&jobId=${this.props.jobDetails.id}&callbackUrl=${callbackUrl}¬e=${this.description.current.value}`).then(response => {\r\n if (response) {\r\n this.setState({\r\n isLoading: false\r\n });\r\n toast.success('Saved as Owner will attend to the job', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.onJobApproveOrReject();\r\n this.props.history.push(`/external/overview?code=${this.props.jobDetails.id}&userId=${this.state.userId}`);\r\n }\r\n else {\r\n \r\n this.setState({\r\n isLoading: false\r\n });\r\n this.props.history.push(`/external/overview?code=${this.props.jobDetails.id}&userId=${this.state.userId}`);\r\n toast.error('Job’s status has been changed. Please contact the property manager for more details', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n}\r\n\r\n\r\nexport default connect(\r\n)(ExternalOwnerAttend);\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport ImageViewer from '../../Common/ImageViewer/ImageViewer';\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { Form } from 'react-bootstrap';\r\nimport GoogleMapLocationsAutoComplete from '../GoogleMapLocationsAutoComplete/GoogleMapLocationsAutoComplete';\r\nimport settingsService from '../../../Services/settingsService';\r\nimport jobService from '../../../Services/JobService';\r\nimport { Guid } from 'guid-typescript';\r\nimport { Dropdown } from 'semantic-ui-react'\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport * as _ from 'lodash';\r\nimport 'semantic-ui-css/semantic.min.css'\r\nimport propertyService from '../../../Services/PropertyService';\r\nimport Disclaimer from '../../Drawers/JobPostDrawer/Disclaimer/Disclaimer';\r\nimport { AppConfiguration } from 'read-appsettings-json';\r\nimport { trackPromise } from 'react-promise-tracker';\r\nimport { Link } from 'react-router-dom';\r\nimport './JobEditWizard.scss'\r\nimport AttachmentsDrawer from '../../Drawers/AttachmentsDrawer/AttachmentsDrawer';\r\nimport TroubleshootGuidModal from '../../Drawers/TroubleshootGuidModal/TroubleshootGuidModal';\r\nimport translateService from '../../../Services/TranslateService';\r\nimport { withTranslation } from 'react-i18next';\r\nclass JobEditWizard extends React.Component {\r\n\r\n trgLng = window.lng;\r\n constructor(props) {\r\n super(props);\r\n this.title = React.createRef();\r\n this.jobDescription = React.createRef();\r\n this.budgetRef = React.createRef();\r\n this.issueAreaInProperty = React.createRef();\r\n this.isUrgentIssue = React.createRef();\r\n\r\n }\r\n\r\n notifyError = (msg) => {\r\n toast.error(msg, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n if (this.props.isFromBot) {\r\n this.props.showChatbotError(msg);\r\n }\r\n }\r\n\r\n state = {\r\n userType: localStorage.getItem(\"userType\"),\r\n userId: localStorage.getItem(\"userId\"),\r\n stepFlow: [\r\n [0, \"selectProperty\"],\r\n [1, \"getMaintenaceIssue\"],\r\n [2, \"getAttachments\"],\r\n [3, \"jobPostSummary\"],\r\n [4, \"selectSubmitOption\"],\r\n [5, \"setResponse\"],\r\n [6, \"GotoHomePage\"],\r\n [7, \"GetResolvedResponseByTroubleshootGuide\"],\r\n ],\r\n selectedServiceTypeName: \"\",\r\n\r\n isJobEdit: (this.props.isJobEdit) ? true : false,\r\n jobEditId: (this.props.jobEditId) ? this.props.jobEditId : \"\",\r\n currentStep: 0,\r\n isConsumerJobPost: false,\r\n propertySearchData: [],\r\n formData: {\r\n address: (this.props.jobDetail) ? this.props.jobDetail.address : '',\r\n location: (this.props.jobDetail) ? this.props.jobDetail.location : '',\r\n propertyId: (this.props.jobDetail) ? this.props.jobDetail.propertyId : '',\r\n propertyName: (this.props.jobDetail) ? this.props.jobDetail.propertyName : '',\r\n suburbId: (this.props.jobDetail) ? this.props.jobDetail.suburbId : '',\r\n propertyType: (this.props.jobDetail) ? this.props.jobDetail.propertyType : '',\r\n jobDescription: (this.props.jobDetail) ? this.props.jobDetail.description : '',\r\n title: (this.props.jobDetail) ? this.props.jobDetail.title : '',\r\n jobBudget: 0,\r\n troubleshootingGuideText: '',\r\n troubleshootingGuideId: '',\r\n issueAreaInProperty: (this.props.jobDetail) ? this.props.jobDetail.issueAreaInProperty : '',\r\n },\r\n availableServices: [],\r\n availableServicesDetails: [],\r\n selectedService: { childJobTypes: [] },\r\n selectedServiceType: {\r\n parentJobType: { id: '' }\r\n },\r\n selectedSubServiceType: {},\r\n jobDetails: { attachments: [] },\r\n attachments: [],\r\n jobId: '',\r\n dueDate: this.props.jobDetail ? this.props.jobDetail.dueDate : null,\r\n formattedDueDate: '',\r\n jobUrgencyList: [\r\n {\r\n value: this.props.t('editjob_lbl13'),\r\n jobUrgency: -1\r\n },\r\n {\r\n value: this.props.t('editjob_lbl11'),\r\n jobUrgency: 1\r\n },\r\n {\r\n value: this.props.t('editjob_lbl12'),\r\n jobUrgency: 2\r\n }\r\n ],\r\n jobUrgency: this.props.jobDetail ? this.props.jobDetail.jobUrgencyId : 2,\r\n propertyList: [],\r\n value: '',\r\n isLoading: false,\r\n filteredResults: [],\r\n propertyId: '',\r\n isPropertiesLoading: false,\r\n parentJobTypes: [],\r\n primaryJobTypes: [],\r\n secondaryJobTypes: [],\r\n frequentlyUsedServices: [],\r\n isShowMoreServices: false,\r\n locationDetails: {\r\n latitude: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n location: ''\r\n },\r\n isMandatoryToUploadFiles: false,\r\n isJobForMe: false,\r\n jobBudget: \"\",\r\n jobForMe: {},\r\n selectedTradees: [],\r\n isSelectedOnDemand: false,\r\n selectedQuoteLimit: 0,\r\n inviteToProviders: false,\r\n isJobPosting: false,\r\n isRestrictKeyCollectionForResidentialProperties: false,\r\n showDisclaimerDrawer: false,\r\n jobPostWorkflowStatus: 1,\r\n propertyLocks: [],\r\n isJobForMeText: '',\r\n isSubServiceTypeSelected: false,\r\n isShowAttchmentDrawer: false,\r\n parentId: '',\r\n childJobTypeId: '',\r\n subChildJobTypeId: '',\r\n jobNumber: '',\r\n isPropertyOwner: (localStorage.userType == 5) ? true : false,\r\n isShowInviteTradeDrawer: false,\r\n budgetAmount: 0,\r\n isPropertySelected: false,\r\n title: (this.props.jobDetail) ? this.props.jobDetail.title : '',\r\n isLoadingTroubleshootingGuide: false,\r\n troubleShootingGuideDetails: {\r\n troubleshootGuideId: '',\r\n troubleshootGuide: '',\r\n primaryJobTypeId: '',\r\n secondaryJobTypeId: ''\r\n },\r\n primaryButtonStyle: (this.props.customStyle && this.props.customStyle.primaryButtonStyle) ? this.props.customStyle.primaryButtonStyle : {\r\n color: ''\r\n },\r\n secondaryButtonStyle: (this.props.customStyle && this.props.customStyle.secondaryButtonStyle) ? this.props.customStyle.secondaryButtonStyle : {\r\n color: ''\r\n },\r\n optionsStyle: (this.props.customStyle && this.props.customStyle.optionsStyle) ? this.props.customStyle.optionsStyle : {\r\n color: ''\r\n },\r\n isFromBot: (this.props.isFromBot) ? true : false,\r\n isMaintatanceIssueProvided: false,\r\n isJobPostOrTroubleshootGuideSelected: false,\r\n isDraftJob: false,\r\n tradeeCount: 0,\r\n jobTypeTags: [],\r\n isLoadingJobTypeTags: false,\r\n jobAssignTags: [],\r\n selectedComponent: '',\r\n selectedGoogleImage: [],\r\n selectedFeatureComponent: [],\r\n previousStep: 0,\r\n chatbotSetting: this.props.chatbotSetting ? this.props.chatbotSetting : {\r\n hideQandABot: false,\r\n hideCheckRentalStatus: false,\r\n hideKeyCollectionOptions: false,\r\n hideTroubleshootGuide: false,\r\n enableDraftJobFeature: false\r\n },\r\n maintenanceTroubleshootGuideId: null,\r\n propertyType: \"Residential\",\r\n actionValue: 0,\r\n primaryJobTypeId: (this.props.jobDetail && this.props.jobDetail.primaryJobType) ? this.props.jobDetail.primaryJobType : '',\r\n secondaryJobTypeId: (this.props.jobDetail && this.props.jobDetail.secondaryJobType) ? this.props.jobDetail.secondaryJobType : '',\r\n primaryJobTypeName: (this.props.jobDetail && this.props.jobDetail.primaryJobTypeDisplay) ? this.props.jobDetail.primaryJobTypeDisplay : '',\r\n secondaryJobTypeName: (this.props.jobDetail && this.props.jobDetail.secondaryJobTypeDisplay) ? this.props.jobDetail.secondaryJobTypeDisplay : '',\r\n isShowTroubleshootGuid: false,\r\n initialJobDetails: (this.props.jobDetail) ? this.props.jobDetail : null,\r\n property: (this.props.jobDetail) ? this.props.jobDetail.propertyId : null,\r\n jobDescription: (this.props.jobDetail) ? this.props.jobDetail.description : null,\r\n jobDescriptionEng: (this.props.jobDetail) ? this.props.jobDetail.description : null,\r\n keyCollectType: (this.props.jobDetail) ? this.props.jobDetail.propertyKeyCollectType.toString() : '3',\r\n attachments: (this.props.jobDetail) ? this.props.jobDetail.attachments : [],\r\n channel: (this.props.jobDetail) ? this.props.jobDetail.channel : 0,\r\n isPostedViaOmniChannel: false,\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.isJobEdit && this.props.jobDetail) {\r\n this.setStateForEditJob();\r\n this.setState({\r\n isPostedViaOmniChannel: this.CheckJobsViaOmniChannel(this.props.jobDetail.channel)\r\n })\r\n }\r\n setTimeout(() => {\r\n this.GetTenantPropertiesByUserId(true);\r\n }, 1000);\r\n\r\n this.setState({\r\n jobId: Guid.create().toString(),\r\n jobDetails: {\r\n id: this.state.jobId\r\n }\r\n });\r\n }\r\n\r\n componentDidUpdate() {\r\n if (!this.state.initialJobDetails && this.props.jobDetail != null) {\r\n if (this.props.jobDetail && (this.props.jobDetail.workflowStatusId != 1 || localStorage.getItem('sendemailfortenattogetmoreinfo') != \"true\")) {\r\n window.location.href = 'external/overview?code=' + this.props.jobDetail.id;\r\n }\r\n this.setState({ initialJobDetails: this.props.jobDetail });\r\n // this.fillJobDetails();\r\n }\r\n\r\n }\r\n\r\n CheckJobsViaOmniChannel(channel) {\r\n return (channel == 4 || channel == 5 || channel == 6 || channel == 7 || channel == 8 || channel == 9 || channel == 11 || channel == 12)\r\n }\r\n\r\n fillJobDetails() {\r\n this.setState({\r\n formData: {\r\n address: (this.props.jobDetail) ? this.props.jobDetail.address : '',\r\n location: (this.props.jobDetail) ? this.props.jobDetail.location : '',\r\n propertyId: (this.props.jobDetail) ? this.props.jobDetail.propertyId : '',\r\n propertyName: (this.props.jobDetail) ? this.props.jobDetail.propertyName : '',\r\n suburbId: (this.props.jobDetail) ? this.props.jobDetail.suburbId : '',\r\n propertyType: (this.props.jobDetail) ? this.props.jobDetail.propertyType : '',\r\n jobDescription: (this.props.jobDetail) ? this.props.jobDetail.description : '',\r\n title: (this.props.jobDetail) ? this.props.jobDetail.title : '',\r\n jobBudget: 0,\r\n issueAreaInProperty: (this.props.jobDetail) ? this.props.jobDetail.issueAreaInProperty : '',\r\n },\r\n attachments: (this.props.jobDetail) ? this.props.jobDetail.attachments : [],\r\n jobUrgency: (this.props.jobDetail) ? this.props.jobDetail.jobUrgencyId : 2,\r\n parentId: (this.props.jobDetail) ? this.props.jobDetail.primaryJobType : '',\r\n isServiceTypeSelected: (this.props.jobDetail) ? true : false,\r\n childJobTypeId: (this.props.jobDetail) ? this.props.jobDetail.secondaryJobType : '',\r\n subChildJobTypeId: (this.props.jobDetail) ? this.props.jobDetail.secondaryJobType : '',\r\n jobNumber: (this.props.jobDetail) ? this.props.jobDetail.jobNumber : '',\r\n keyCollectType: (this.props.jobDetail) ? this.props.jobDetail.propertyKeyCollectType : '',\r\n primaryButtonStyle: (this.props.customStyle.primaryButtonStyle) ? this.props.customStyle.primaryButtonStyle : '',\r\n secondaryButtonStyle: (this.props.customStyle.secondaryButtonStyle) ? this.props.customStyle.secondaryButtonStyle : '',\r\n optionsStyle: (this.props.customStyle.optionsStyle) ? this.props.customStyle.optionsStyle : '',\r\n jobAssignTags: (this.props.jobDetail) ? this.props.jobDetail.jobAssignTagIds : [],\r\n selectedComponent: (this.props.jobDetail) ? this.props.jobDetail.jobPropertyComponentId : '',\r\n selectedFeatureComponent: (this.props.jobDetail) ? this.props.jobDetail.jobPropertyFeatureComponentIds : [],\r\n isEnableSuggestingImage: (this.props.jobDetail) ? this.props.jobDetail.isEnableSuggestingImage : false,\r\n isEnableIssueTag: (this.props.jobDetail) ? this.props.jobDetail.isEnableIssueTag : false,\r\n }, () => {\r\n this.setStateForEditJob();\r\n });\r\n\r\n\r\n }\r\n setStateForEditJob() {\r\n setTimeout(() => {\r\n this.GetTenantPropertiesByUserId();\r\n }, 1000);\r\n this.setState({\r\n jobId: Guid.create().toString(),\r\n jobDetails: {\r\n id: this.state.jobId\r\n }\r\n });\r\n\r\n if (localStorage.userType == 5) {\r\n this.setState({\r\n isJobForMe: 0\r\n })\r\n }\r\n\r\n };\r\n getOrganizationSettings(organizationId) {\r\n settingsService.getOrganizationSettingsByOrgId(organizationId)\r\n .then((res) => {\r\n this.setState({\r\n isMandatoryToUploadFiles: res.organizationSettingsModel.allowTenantsToImageAttachmentFeatureForTheJobposting,\r\n isRestrictKeyCollectionForResidentialProperties: res.organizationSettingsModel.isRestrictKeyCollectionForResidentialProperties,\r\n allowTenantsToSeeMatchingTrades: res.organizationSettingsModel.allowTenantsToSeeMatchingTrades,\r\n isEnableSuggestingImage: res.organizationSettingsModel.isEnableSuggestingImage,\r\n isEnableIssueTag: res.organizationSettingsModel.isEnableIssueTag,\r\n })\r\n\r\n })\r\n\r\n }\r\n\r\n GetTenantPropertiesByUserId = (isOnMount = false) => {\r\n let none = [{ propertyId: 0, propertyName: '--None--', suburbId: '', location: '', address: '', propertyType: 'Residential' }];\r\n\r\n this.setState({ isPropertiesLoading: true });\r\n let properties;\r\n let propertyNames = [];\r\n const { i18n } = this.props;\r\n\r\n propertyService.GetTenantPropertiesByUserId()\r\n .then((res) => {\r\n properties = res.properties;\r\n if (res.properties.length > 0) {\r\n let propertyId = isOnMount ? this.props.jobDetail.propertyId : properties[0].propertyId;\r\n properties.forEach(x => {\r\n propertyNames.push(x.address ? x.address : \" \");\r\n });\r\n this.applyTranslation(propertyNames, \"en\", this.trgLng).then((trans) => {\r\n if (trans.length > 0) {\r\n trans.forEach((x, i) => {\r\n properties[i].address = trans[i];\r\n });\r\n }\r\n\r\n this.setState({\r\n propertyList: properties,\r\n propertyId: propertyId,\r\n isCurrentTenant: properties[0].isCurrentTenant\r\n });\r\n if (localStorage.userType != 5) {\r\n this.getPropertyDetailsByPropertyId(propertyId);\r\n }\r\n this.setState({ isPropertiesLoading: false });\r\n });\r\n } else {\r\n this.setState({\r\n propertyList: [],\r\n propertyId: 0\r\n });\r\n this.onChangeJobType(1);\r\n }\r\n });\r\n }\r\n\r\n\r\n getPropertyDetailsByPropertyId = (propertyId) => {\r\n const selectedProperty = this.state.propertyList.filter(a => a.propertyId == propertyId);\r\n if (selectedProperty && selectedProperty.length > 0 && selectedProperty[0].propertyId != null) {\r\n this.setState({\r\n propertyId: propertyId,\r\n //locationDetails: {},\r\n formData: {\r\n address: selectedProperty[0].address,\r\n location: selectedProperty[0].location,\r\n propertyId: selectedProperty[0].propertyId,\r\n propertyName: selectedProperty[0].propertyName,\r\n suburbId: selectedProperty[0].suburbId,\r\n propertyType: selectedProperty[0].propertyType\r\n },\r\n locationDetails: selectedProperty[0],\r\n jobForMe: {\r\n propertyType: selectedProperty[0].propertyType,\r\n address: selectedProperty[0].address,\r\n latitude: selectedProperty[0].latitude,\r\n location: selectedProperty[0].location,\r\n longitude: selectedProperty[0].longitude,\r\n placeId: selectedProperty[0].placeId,\r\n suburbId: selectedProperty[0].suburbId,\r\n },\r\n });\r\n this.getOrganizationSettings(selectedProperty[0].orgnizationId);\r\n } else {\r\n this.setState({\r\n propertyId: null,\r\n locationDetails: {},\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: null,\r\n propertyName: '',\r\n suburbId: null,\r\n propertyType: ''\r\n }\r\n });\r\n }\r\n setTimeout(() => {\r\n if (this.state.isJobForMe == 1) {\r\n // document.getElementById('check1').checked = true;\r\n this.setState({ keyCollectType: 1 });\r\n }\r\n }, 500);\r\n }\r\n\r\n onChangeJobType = (value) => {\r\n if (value === 1 && localStorage.userType == 4) {\r\n this.setState({ isJobForMeText:
You (tenant) will be paying for this job and are responsible for all costs involved.

This job is not being sent to your property manager.
});\r\n } else {\r\n this.setState({ isJobForMeText: '' });\r\n }\r\n\r\n this.setState({\r\n isJobForMe: (value === 1) ? true : false,\r\n jobForMe: {\r\n propertyType: '',\r\n address: '',\r\n latitude: '',\r\n location: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n budget: ''\r\n },\r\n formData: {\r\n propertyId: \"\"\r\n }\r\n });\r\n }\r\n\r\n onChangePropertyTypeForMe = (event) => {\r\n let formdata = {};\r\n if (!event) {\r\n formdata.propertyType = \"Residential\";\r\n this.setState({ formdata: formdata, propertyType: \"Residential\" });\r\n }\r\n let jobforMe = this.state.jobForMe;\r\n jobforMe.propertyType = event;\r\n this.setState({ jobForMe: jobforMe, propertyType: event });\r\n\r\n formdata = this.state.formData;\r\n formdata.propertyType = event;\r\n this.setState({ formdata: formdata, propertyType: event });\r\n }\r\n\r\n onKeyCollectionChange = (event) => {\r\n this.setState({\r\n keyCollectType: event\r\n });\r\n }\r\n\r\n GetKeyCollectionTypeDescription = () => {\r\n const { t } = this.props;\r\n switch (this.state.keyCollectType) {\r\n\r\n case '1': return {t('editjob_key_collect_options2')}; break;\r\n case '2': return {t('editjob_key_collect_options3')}; break;\r\n case '3': return {t('editjob_key_collect_options4')}; break;\r\n default: return {t('editjob_lbl10')};\r\n }\r\n }\r\n\r\n handlePropertyChange = (props) => {\r\n this.setState({ property: props });\r\n this.getPropertyDetailsByPropertyId(props);\r\n }\r\n setLocationDetails = (event) => {\r\n this.setState({\r\n locationDetails: event,\r\n jobForMe: {\r\n propertyType: '',\r\n address: event.address,\r\n latitude: event.latitude,\r\n location: event.location,\r\n longitude: event.longitude,\r\n placeId: event.placeId,\r\n suburbId: event.suburbId,\r\n },\r\n formData: {\r\n address: event.address\r\n }\r\n });\r\n }\r\n\r\n\r\n handleOnChangeJobDescription = (value) => {\r\n\r\n\r\n const typedDescription = this.jobDescription.current.value;\r\n\r\n this.setState({\r\n jobDescription: typedDescription,\r\n jobDescriptionEng: typedDescription,\r\n isMaintatanceIssueProvided: true\r\n });\r\n\r\n }\r\n\r\n handleDueDateChange = (date) => {\r\n this.setState({\r\n dueDate: date,\r\n });\r\n }\r\n\r\n handleJobUrgencyOnChange = (event, props) => {\r\n this.setState({ jobUrgency: props.value });\r\n }\r\n\r\n GetJobUrgency = () => {\r\n const { t } = this.props;\r\n return this.state.jobUrgency == -1 ? {t('editjob_lbl13')} : this.state.jobUrgency == 1 ? {t('editjob_lbl11')} : {t('editjob_lbl12')};\r\n }\r\n\r\n closeDisclaimer = () => {\r\n this.setState({\r\n showDisclaimerDrawer: false,\r\n });\r\n }\r\n\r\n getTroubleShoutingGuide(index) {\r\n const { i18n } = this.props;\r\n this.setState({\r\n isLoadingTroubleshootingGuide: true\r\n });\r\n jobService.GetTroubleShootingGuide(this.state.formData.propertyId, this.state.jobDescriptionEng).then(res => {\r\n if (res.responseCode == 12 && res.troubleshootGuide != null) {\r\n this.setState({\r\n troubleShootingGuideDetails: res,\r\n maintenanceTroubleshootGuideId: res.troubleshootGuideId,\r\n isLoadingTroubleshootingGuide: false,\r\n isShowTroubleshootGuid: true\r\n\r\n });\r\n\r\n\r\n } else {\r\n this.setState({\r\n troubleShootingGuideDetails: res,\r\n isLoadingTroubleshootingGuide: false,\r\n currentStep: (index + 1),\r\n isShowTroubleshootGuid: false\r\n });\r\n\r\n }\r\n this.SetSelectedServiceType();\r\n })\r\n }\r\n\r\n render() {\r\n const currentStepIndex = this.state.currentStep;\r\n let step = this.showCurrentStep(currentStepIndex);\r\n\r\n return (\r\n
\r\n
\r\n {step}\r\n
\r\n {(this.state.showDisclaimerDrawer == true) ?\r\n this.postJob(event)}\r\n onCloseDisclaimer={() => this.closeDisclaimer()}\r\n isFromBot={this.state.isFromBot}\r\n > : ''\r\n }\r\n {(this.state.isShowTroubleshootGuid == true) ?\r\n
\r\n \r\n
: ''\r\n }\r\n\r\n );\r\n }\r\n\r\n closeTroubleshootGuid = (index) => {\r\n this.setState({\r\n isShowTroubleshootGuid: false\r\n });\r\n }\r\n\r\n showCurrentStep = (index) => {\r\n let currentStep = this.state.stepFlow[index][1];\r\n switch (currentStep) {\r\n case \"selectProperty\":\r\n return this.selectPropertyStep(index);\r\n case \"getMaintenaceIssue\":\r\n return this.getMaintenaceIssue(index);\r\n case \"selectKeyCollectionType\":\r\n if (this.state.chatbotSetting.hideKeyCollectionOptions && this.state.isFromBot) {\r\n this.setState({\r\n keyCollectType: this.state.chatbotSetting.defaultKeyCollectionOption,\r\n currentStep: index + 1\r\n }, () => {\r\n return this.nextStep(index);\r\n })\r\n }\r\n else {\r\n return this.selectKeyCollectionType(index);\r\n }\r\n case \"getAttachments\":\r\n return this.getAttachments(index);\r\n\r\n case \"selectSubmitOption\":\r\n return this.selectSubmitOption(index);\r\n case \"setResponse\":\r\n return this.setResponse(index);\r\n case \"setTroubleShooteResponse\":\r\n return this.setTroubleShooteResponse();\r\n case \"jobPostSummary\":\r\n return this.jobPostSummary(index);\r\n case \"GotoHomePage\":\r\n return this.GoToHomePage(index);\r\n case \"GetResolvedResponseByTroubleshootGuide\":\r\n return this.GetResolvedResponseByTroubleshootGuide(index);\r\n default:\r\n return this.nextStep(index);\r\n }\r\n }\r\n\r\n selectPropertyStep = (index) => {\r\n const { propertyList, propertyId, isJobForMe, jobForMe, formData, isPropertyOwner, isPostedViaOmniChannel } = this.state;\r\n const forMeText = this.state.isJobForMeText;\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

Job posting for

\r\n
\r\n \r\n { this.onChangeJobType(value) }}>\r\n {this.state.isCurrentTenant && localStorage.userType == 4 ?\r\n
Property Manager
: ''}\r\n {/* {
Job I will Pay For
} */}\r\n
\r\n
\r\n
\r\n
{forMeText}
\r\n
\r\n
\r\n\r\n {(!isJobForMe) ?\r\n
\r\n
\r\n

{t('editjob_lbl9')}

\r\n
\r\n\r\n
\r\n \r\n { this.handlePropertyChange(value) }}>\r\n {propertyList.map((a, index) => {\r\n return
{a.address}
\r\n })\r\n }\r\n
\r\n
\r\n
\r\n\r\n
: ''}\r\n \r\n\r\n \r\n {(isJobForMe || isPropertyOwner) && !isPostedViaOmniChannel ?\r\n
\r\n
\r\n

Property Type

\r\n

(Choose an option)*

\r\n
\r\n \r\n this.onChangePropertyTypeForMe(value)}>\r\n Residential\r\n Commercial\r\n \r\n \r\n
: ''}\r\n
\r\n
\r\n \r\n
\r\n\r\n
);\r\n }\r\n getMaintenaceIssue = (index) => {\r\n const { jobUrgency, jobUrgencyList } = this.state;\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n

{t('editjob_lbl1')}

\r\n

{t('editjob_lbl2')}

\r\n
\r\n\r\n
\r\n {t('editjob_lbl3')}\r\n \r\n\r\n
\r\n
\r\n \r\n { return { key: index, text: a.value, value: a.jobUrgency }; })}\r\n placeholder='Choose job Priority'\r\n onChange={this.handleJobUrgencyOnChange}\r\n />\r\n
\r\n {(this.jobUrgency == 1) ?\r\n
\r\n \r\n \r\n This considered as an urgent, your prpoperty manager will verify this before they create the job.\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 selectKeyCollectionType = (index) => {\r\n const { isJobForMe, isPropertyOwner } = this.state;\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n {(isJobForMe) ? '' :\r\n
\r\n
\r\n

{t('editjob_lbl6')}

\r\n
\r\n
\r\n\r\n {(this.state.isRestrictKeyCollectionForResidentialProperties && this.state.formData.propertyType == 'Residential') ?\r\n \r\n this.onKeyCollectionChange(value)} defaultValue={3}>\r\n {t('editjob_key_collect_options1')}\r\n \r\n \r\n :\r\n
\r\n \r\n this.onKeyCollectionChange(value)} defaultValue={this.state.keyCollectType}>\r\n {t('editjob_key_collect_options2')}\r\n {t('editjob_key_collect_options3')}\r\n {t('editjob_key_collect_options4')}\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 getAttachments = (index) => {\r\n const { isShowAttchmentDrawer, isJobForMe } = this.state;\r\n const { t } = this.props;\r\n const styleflex = {\r\n flexDirection: \"column !important\",\r\n }\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n

{t('editjob_lbl4')}

\r\n

{t('editjob_lbl5')}

\r\n
\r\n
\r\n
\r\n { this.setState({ attachments: event }) }}\r\n isJobPost={true}\r\n isFromBot={this.state.isFromBot}\r\n t={t}>\r\n \r\n {(this.state.attachments) ?\r\n : ''\r\n }\r\n
\r\n
\r\n
\r\n {this.selectKeyCollectionType(index)}\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 selectSubmitOption = (index) => {\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n

{t('editjob_lbl7')}

\r\n {/*

({this.state.isFromBot ? t('pj_lbl_choose_an_option') : 'choose an option'})

*/}\r\n
\r\n \r\n { this.onSubmitJob(value) }} value={this.state.actionValue}>\r\n {this.state.isFromBot ? t('pj_button_job_post') : 'Job Post'}\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
)\r\n }\r\n\r\n setResponse = (index) => {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {(this.state.isDraftJob) ?\r\n

{t('pj_lbl_job_draft_response')}

\r\n :
\r\n

{t('lbl_jobpost_success')}

\r\n

Reference Number : {this.state.jobNumber}

\r\n
\r\n }\r\n
\r\n
\r\n {(this.state.isFromBot) ? : window.location.reload()} className=\"btn light-blue-button\">Back to home}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n nextStep = (index) => {\r\n const { i18n } = this.props;\r\n var currentStep = index;\r\n if (this.validate(index)) {\r\n if (index == 1) {\r\n if (this.state.isJobForMe) {\r\n currentStep = (index + 2);\r\n }\r\n else {\r\n let formdata = this.state.formData;\r\n const typedDescription = this.jobDescription.current.value;\r\n if (typedDescription.length > 0) {\r\n this.getTroubleShoutingGuide(index);\r\n } else {\r\n currentStep = (index + 1);\r\n }\r\n }\r\n } else if (this.state.isJobForMe && index == 4) {\r\n currentStep = (index + 5);\r\n }\r\n\r\n else if (this.state.isJobForMe && index == 9) {\r\n currentStep = (index - 4);\r\n }\r\n else if (this.state.isJobForMe && index == 5) {\r\n currentStep = (index + 5);\r\n }\r\n else if (!this.state.isJobForMe && !this.state.allowTenantsToSeeMatchingTrades && index == 8) { // 7\r\n currentStep = (index + 3);\r\n }\r\n else if (!this.state.isJobForMe && this.state.allowTenantsToSeeMatchingTrades && index == 8) {\r\n currentStep = (index + 2);\r\n }\r\n else if (!this.state.isJobForMe && !this.state.allowTenantsToSeeMatchingTrades && index == 10) { //7\r\n currentStep = (index + 2);\r\n }\r\n else {\r\n currentStep = (index + 1);\r\n }\r\n\r\n\r\n } else {\r\n return false;\r\n }\r\n currentStep = this.permissionCheckNextStep(currentStep);\r\n this.setState({ currentStep: currentStep, previousStep: index });\r\n }\r\n\r\n previousStep = (index) => {\r\n var currentStep = index;\r\n if (this.state.isJobForMe && index == 9) { // 7\r\n currentStep = (index - 6);\r\n }\r\n else if (this.state.isJobForMe && index == 8) { //6\r\n currentStep = (index - 5);\r\n }\r\n else if (this.state.isJobForMe && index == 10) { //6\r\n currentStep = (index - 6);\r\n }\r\n else if (this.state.isJobForMe && index == 5) { //6\r\n currentStep = (index + 5);\r\n }\r\n else if (!this.state.isJobForMe && index == 9) { //7\r\n currentStep = (index - 2);\r\n }\r\n else if (!this.state.isJobForMe && this.state.allowTenantsToSeeMatchingTrades && index == 11) {\r\n currentStep = (index - 1);\r\n }\r\n else if (!this.state.isJobForMe && index == 11) { //7\r\n currentStep = (index - 3);\r\n }\r\n else if (!this.state.isJobForMe && this.state.allowTenantsToSeeMatchingTrades && index == 10) {\r\n currentStep = (index - 2);\r\n }\r\n else {\r\n currentStep = (index - 1);\r\n }\r\n\r\n currentStep = this.permissionCheckBackStep(currentStep);\r\n this.setState({ currentStep: currentStep, previousStep: index });\r\n }\r\n\r\n permissionCheckNextStep = (nextIndex) => {\r\n if (!this.state.isJobForMe && nextIndex == 6 && !this.state.isEnableSuggestingImage) {\r\n nextIndex = (nextIndex + 1);\r\n }\r\n if (!this.state.isJobForMe && nextIndex == 7 && !this.state.isEnableIssueTag) {\r\n nextIndex = (nextIndex + 1);\r\n }\r\n return nextIndex;\r\n }\r\n\r\n permissionCheckBackStep = (nextIndex) => {\r\n if (!this.state.isJobForMe && nextIndex == 6 && !this.state.isEnableSuggestingImage) {\r\n nextIndex = (nextIndex - 1);\r\n }\r\n if (!this.state.isJobForMe && nextIndex == 7 && !this.state.isEnableIssueTag) {\r\n nextIndex = (nextIndex - 1);\r\n }\r\n return nextIndex;\r\n }\r\n\r\n showAttachmentDrawer = () => {\r\n this.setState({ isShowAttchmentDrawer: true });\r\n }\r\n\r\n checkIfFilesMandatory = (index) => {\r\n const { t } = this.props;\r\n if (!this.state.isJobForMe) {\r\n if (this.state.isMandatoryToUploadFiles) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_attachments_empty') : 'Attachments are required.');\r\n return false;\r\n } else {\r\n this.nextStep(index);\r\n }\r\n } {\r\n this.nextStep(index);\r\n }\r\n }\r\n\r\n onSubmitJob = (workflow) => {\r\n const { t } = this.props;\r\n if (this.state.isJobForMe || workflow == 1) {\r\n if (workflow == 1) {\r\n this.setState({ isDraftJob: true });\r\n }\r\n this.postJob(workflow);\r\n } else {\r\n if (!this.state.isJobForMe && this.state.isMandatoryToUploadFiles && (this.state.attachments == [] || this.state.attachments.length == 0)) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_attachments_empty') : 'Attachments are required.');\r\n return false;\r\n } else {\r\n this.loadDisclaimer(workflow);\r\n }\r\n }\r\n\r\n }\r\n\r\n loadDisclaimer = (workflow) => {\r\n this.setState({\r\n isLoading: true\r\n });\r\n propertyService.GetDisclaimerByPropertyId(this.state.formData.propertyId).then(res => {\r\n this.setState({\r\n isLoading: false\r\n });\r\n if (res !== null && res !== '') {\r\n this.setState({\r\n showDisclaimerDrawer: true,\r\n disclamimerText: res,\r\n jobPostWorkflowStatus: workflow,\r\n actionValue: 0\r\n });\r\n } else {\r\n this.postJob(workflow);\r\n }\r\n });\r\n }\r\n\r\n validate = (index) => {\r\n const { isJobForMe } = this.state;\r\n let currentStep = this.state.stepFlow[index][1];\r\n const { t } = this.props;\r\n switch (currentStep) {\r\n case \"selectProperty\":\r\n if (isJobForMe && (this.state.jobForMe.suburbId == '' || this.state.jobForMe.suburbId == null)) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_invalid_address') : 'Please enter a valid address.');\r\n return false;\r\n }\r\n if (this.state.jobForMe.address == \"\" && isJobForMe) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_no_address') : 'Please enter the address.');\r\n return false;\r\n } else if (!isJobForMe && !this.state.property) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_no_property_selected') : 'Please select a property.');\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n case \"getMaintenaceIssue\":\r\n if ((this.state.formData.jobDescription == '' || this.state.formData.jobDescription == undefined) && (!this.jobDescription.current.value || this.jobDescription.current.value == '')) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_no_jd') : 'Please enter job description.');\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n\r\n case \"getAttachments\":\r\n if (!this.state.isJobForMe) {\r\n if (this.state.isMandatoryToUploadFiles && this.state.attachments.length == 0) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_attachments_empty') : 'Attachments are required.');\r\n return false;\r\n }\r\n else if (this.state.keyCollectType == undefined || this.state.keyCollectType == '') {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_key_coll_method_not_selected') : 'Please select property key collection method.');\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n } else {\r\n return true;\r\n }\r\n case \"setResponse\":\r\n return this.setResponse(index);\r\n\r\n default:\r\n return true;\r\n\r\n }\r\n }\r\n\r\n postJob = (workflow) => {\r\n const workflowId = workflow;\r\n let jobDetails = {};\r\n const { address, budget, latitude, location, longitude, placeId, propertyType, suburbId } = this.state.jobForMe;\r\n const { selectedService, selectedServiceType, formData, jobBudget, selectedTradees, isSelectedOnDemand, selectedQuoteLimit, budgetAmount, jobAssignTags, selectedComponent, selectedFeatureComponent } = this.state;\r\n if (this.state.isJobForMe == true) {\r\n\r\n jobDetails.propertyId = null;\r\n jobDetails.suburbId = suburbId;\r\n jobDetails.address = address;\r\n jobDetails.location = location;\r\n jobDetails.jobPropertyTypes = propertyType;\r\n if (this.state.jobForMe && this.state.jobForMe.propertyType && this.state.jobForMe.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n else if (this.state.jobForMe && this.state.jobForMe.propertyType && this.state.jobForMe.propertyType === \"Commercial\") {\r\n jobDetails.propertyTypeId = 1;\r\n } else {\r\n if (this.state.propertyType && this.state.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n } else {\r\n jobDetails.propertyTypeId = 1;\r\n }\r\n }\r\n jobDetails.budgetId = parseInt(jobBudget);\r\n if (jobBudget == '-999') {\r\n jobDetails.budgetAmount = parseFloat(budgetAmount);\r\n }\r\n if (isSelectedOnDemand) {\r\n jobDetails.targetedTradeeOption = 4;\r\n jobDetails.sendInvitationtoAll = false;\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n let tradees = [];\r\n selectedTradees.forEach(element => {\r\n tradees.push({\r\n isAssigned: true,\r\n userId: element.userId,\r\n name: element.name,\r\n email: element.email,\r\n firstName: element.name,\r\n lastName: element.name,\r\n });\r\n });\r\n jobDetails.tradees = tradees;\r\n } else {\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n jobDetails.targetedTradeeOption = 0;\r\n jobDetails.sendInvitationtoAll = true;\r\n jobDetails.tradees = [];\r\n }\r\n } else {\r\n if (this.state.formData.propertyId == 0 || this.state.formData.propertyId == undefined) {\r\n jobDetails.propertyId = null;\r\n jobDetails.suburbId = this.state.locationDetails.suburbId;\r\n jobDetails.address = this.state.locationDetails.address;\r\n jobDetails.jobPropertyTypes = this.refs.jobPropertyTypes.props.value;\r\n if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n } else if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Commercial\") {\r\n jobDetails.propertyTypeId = 1;\r\n }\r\n else {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n } else {\r\n jobDetails.propertyId = this.state.formData.propertyId;\r\n jobDetails.address = this.state.formData.address;\r\n jobDetails.location = this.state.formData.location;\r\n jobDetails.propertyName = this.state.formData.propertyName;\r\n jobDetails.suburbId = this.state.formData.suburbId;\r\n if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n else if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Commercial\") {\r\n jobDetails.propertyTypeId = 1;\r\n } else {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n jobDetails.jobPropertyTypes = this.state.formData.propertyType;\r\n }\r\n jobDetails.propertyKeyCollectType = parseInt(this.state.keyCollectType);\r\n\r\n if (isSelectedOnDemand) {\r\n jobDetails.targetedTradeeOption = 4;\r\n jobDetails.sendInvitationtoAll = false;\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n let tradees = [];\r\n selectedTradees.forEach(element => {\r\n tradees.push({\r\n isAssigned: true,\r\n userId: element.userId,\r\n name: element.name,\r\n email: element.email,\r\n firstName: element.name,\r\n lastName: element.name,\r\n });\r\n });\r\n jobDetails.tradees = tradees;\r\n } else {\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n jobDetails.targetedTradeeOption = 0;\r\n jobDetails.sendInvitationtoAll = true;\r\n jobDetails.tradees = [];\r\n }\r\n }\r\n jobDetails.id = this.props.jobDetail.id;\r\n jobDetails.secondaryJobType = this.state.secondaryJobTypeId && this.state.secondaryJobTypeId != undefined && this.state.secondaryJobTypeId != \"\" ? this.state.secondaryJobTypeId : this.props.jobDetail.secondaryJobType;\r\n jobDetails.secondaryJobTypeDisplay = this.state.secondaryJobTypeName;\r\n jobDetails.primaryJobType = this.state.primaryJobTypeId && this.state.primaryJobTypeId != undefined && this.state.primaryJobTypeId != \"\" ? this.state.primaryJobTypeId : this.props.jobDetail.primaryJobType;\r\n jobDetails.primaryJobTypeDisplay = this.state.primaryJobTypeName;\r\n jobDetails.jobPropertyLocks = this.state.propertyLocks.map((item, index) => {\r\n const jobLock = {};\r\n jobLock.jobId = null;\r\n jobLock.propertyLock = {};\r\n jobLock.propertyLock.id = item.id;\r\n jobLock.propertyLock.lockId = item.lockId;\r\n jobLock.propertyLock.propertyId = jobDetails.propertyId;\r\n return jobLock;\r\n });\r\n\r\n jobDetails.jobType = this.state.secondaryJobTypeId && this.state.secondaryJobTypeId != undefined && this.state.secondaryJobTypeId != \"\" ? this.state.secondaryJobTypeId : this.props.jobDetail.secondaryJobType;\r\n\r\n jobDetails.jobTypeDisplay = this.state.formData.childJobType;\r\n jobDetails.title = this.state.title ? this.state.title : this.props.jobDetail.title;\r\n jobDetails.description = this.state.jobDescription;\r\n jobDetails.jobUrgencyId = this.state.jobUrgency;\r\n\r\n if (this.state.jobUrgency == -1) {\r\n this.state.dueDate = new Date();\r\n }\r\n jobDetails.dueDate = (!this.state.dueDate) ? null : this.state.dueDate;\r\n jobDetails.JobUrgencyDisplay = this.state.jobUrgency == -1 ? \"Emergency\" : this.state.jobUrgency == 1 ? \"Urgent\" : \"not-Urgent\";\r\n jobDetails.jobValidityPeriod = 1;\r\n jobDetails.serviceConsumerId = localStorage.getItem('userId');\r\n\r\n jobDetails.workflowStatusId = workflow === 1 ? 1 : 2;\r\n jobDetails.attachments = this.state.attachments;\r\n if (workflowId == 2) {\r\n jobDetails.isActive = true;\r\n }\r\n if (selectedComponent != '') {\r\n jobDetails.JobPropertyComponentId = selectedComponent;\r\n }\r\n\r\n if (jobAssignTags != undefined && jobAssignTags.length > 0) {\r\n jobDetails.JobAssignTagIds = jobAssignTags;\r\n }\r\n\r\n if (selectedFeatureComponent != undefined && selectedFeatureComponent.length > 0) {\r\n jobDetails.JobPropertyFeatureComponentIds = selectedFeatureComponent;\r\n }\r\n\r\n jobDetails.issueAreaInProperty = (this.state.formData.issueAreaInPropertyEng) ? this.state.formData.issueAreaInPropertyEng : this.state.formData.issueAreaInProperty;\r\n\r\n if (this.state.maintenanceTroubleshootGuideId && this.state.maintenanceTroubleshootGuideId != '') {\r\n jobDetails.maintenanceTroubleshootGuideId = this.state.maintenanceTroubleshootGuideId;\r\n }\r\n\r\n\r\n // translate\r\n this.applyTranslation(\r\n [(jobDetails.description) ? jobDetails.description : \" \",\r\n (jobDetails.address) ? jobDetails.address : \" \",\r\n (jobDetails.jobTypeDisplay) ? jobDetails.jobTypeDisplay : \" \",\r\n (jobDetails.title) ? jobDetails.title : \" \",\r\n (jobDetails.secondaryJobTypeDisplay) ? jobDetails.secondaryJobTypeDisplay : \" \",\r\n (jobDetails.primaryJobTypeDisplay) ? jobDetails.primaryJobTypeDisplay : \" \",\r\n (jobDetails.issueAreaInProperty) ? jobDetails.issueAreaInProperty : \" \"\r\n\r\n ],\r\n this.trgLng,\r\n \"en\"\r\n ).then((trans) => {\r\n if (trans.length > 0) {\r\n jobDetails.description = trans[0];\r\n jobDetails.address = trans[1];\r\n jobDetails.jobTypeDisplay = trans[2];\r\n jobDetails.title = trans[5];\r\n jobDetails.secondaryJobTypeDisplay = trans[4];\r\n jobDetails.primaryJobTypeDisplay = trans[5];\r\n jobDetails.issueAreaInProperty = trans[6];\r\n }\r\n\r\n this.setState({ isJobPosting: true })\r\n try {\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/external-job-post`, jobDetails, {\r\n 'headers': { 'ClientSecret': AppConfiguration.Setting().ClientSecret }\r\n })\r\n .then(dataJson => {\r\n this.setState({ isJobPosting: false })\r\n const message = workflowId === 1 ? 'drafted' : 'posted'\r\n if (dataJson == 'Request Unauthorized' || dataJson == 'Job post failed') {\r\n toast.error(`Job is not ${message} successfully. Please refresh link and try again.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n } else {\r\n toast.success(`Job is ${message} successfully.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.setState({ jobNumber: dataJson.jobNumber });\r\n this.setState({ currentStep: 5 });\r\n this.setState({\r\n attachments: [],\r\n value: '',\r\n isShowMoreServices: false,\r\n showDisclaimerDrawer: false,\r\n jobPostWorkflowStatus: 1\r\n });\r\n if (this.state.troubleShootingGuideDetails.troubleshootGuideId != '') {\r\n this.saveTroubleShootResult(false, dataJson.id);\r\n }\r\n }\r\n }, error => {\r\n console.log(error);\r\n this.setState({ isJobPosting: false });\r\n const message = workflowId === 1 ? 'draf' : 'post';\r\n toast.error(`Fail to ${message} the job. Please try again.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n })\r\n )\r\n\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n });\r\n }\r\n\r\n applyTranslation(texts, sourceLng, targetLng) {\r\n const requestModel = {\r\n text: texts,\r\n targetCode: targetLng,\r\n sourceCode: sourceLng\r\n };\r\n\r\n return translateService.translate(requestModel);\r\n }\r\n\r\n saveTroubleShootResult = (isResolved = false, jobId = \"\") => {\r\n let troubleShootResult = {};\r\n troubleShootResult.isResolved = isResolved;\r\n troubleShootResult.jobId = this.props.isJobEdit && this.props.jobDetail.id ? this.props.jobDetail.id : jobId;\r\n troubleShootResult.userId = this.state.userId;\r\n troubleShootResult.maintenanceTroubleshootGuideId = this.state.troubleShootingGuideDetails.troubleshootGuideId;\r\n troubleShootResult.description = this.state.formData.jobDescriptionEng;\r\n troubleShootResult.propertyId = this.state.propertyId;\r\n jobService.saveTroubleShootingResult(troubleShootResult).then(response => {\r\n if (response) {\r\n if (isResolved) {\r\n this.setState({ currentStep: 7, isShowTroubleshootGuid: false });\r\n this.showCurrentStep(7);\r\n }\r\n }\r\n });\r\n }\r\n\r\n continueJobPosting = (index) => {\r\n let jobTypes = this.props.jobTypes;\r\n this.state.selectedService = jobTypes.find(x => x.parentJobType.id == this.state.troubleShootingGuideDetails.primaryJobTypeId);\r\n\r\n this.setState({\r\n currentStep: (index + 1),\r\n parentId: this.state.troubleShootingGuideDetails.primaryJobTypeId,\r\n childJobTypeId: this.state.troubleShootingGuideDetails.secondaryJobTypeId,\r\n isShowTroubleshootGuid: false\r\n });\r\n }\r\n\r\n GetResolvedResponseByTroubleshootGuide = () => {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

You have successfully resolved the issue

\r\n
\r\n
\r\n {(this.state.isFromBot) ? : this.beckToOverview()} to={'./overview?code=' + this.props.jobDetail.id} className=\"btn light-blue-button\">Back to home}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n t() {\r\n return false;\r\n }\r\n\r\n beckToOverview = () => {\r\n this.props.reloadPage();\r\n }\r\n\r\n SetSelectedServiceType = () => {\r\n let jobTypes = this.props.jobTypes;\r\n let primaryJobTypeId = this.state.troubleShootingGuideDetails.primaryJobTypeId != null ? this.state.troubleShootingGuideDetails.primaryJobTypeId : this.props.jobDetail.primaryJobType;\r\n let secondaryJobTypeId = this.state.troubleShootingGuideDetails.primaryJobTypeId != null ? this.state.troubleShootingGuideDetails.secondaryJobTypeId : this.props.jobDetail.secondaryJobType;\r\n let selectedService = jobTypes.find(x => x.parentJobType.id == primaryJobTypeId);\r\n this.setState({\r\n title: selectedService.parentJobType.title,\r\n primaryJobTypeId: selectedService.parentJobType.id,\r\n secondaryJobTypeId: secondaryJobTypeId,\r\n primaryJobTypeName: selectedService.parentJobType.title,\r\n secondaryJobTypeName: selectedService.childJobTypes.find(x => x.id == secondaryJobTypeId).title,\r\n });\r\n }\r\n\r\n jobPostSummary = (index) => {\r\n const { address, title, jobUrgency, description, keyCollectType, attachments } = this.state;\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n

{t('editjob_lbl8')}

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

Property

\r\n

{this.state.formData.address}

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

Service

\r\n

{this.state.primaryJobTypeName}

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

Job Title

\r\n

{this.state.title}

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

Urgency

\r\n

{this.GetJobUrgency()}

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

Description

\r\n

{this.state.jobDescription}

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

Key Collection

\r\n

{this.GetKeyCollectionTypeDescription()}

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

Attachments

\r\n {(this.state.attachments) ?\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 GoToHomePage = (index) => {\r\n let { history } = this.props;\r\n history.push(\"/home\");\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n return {\r\n jobTypes: state.Jobs.jobTypes,\r\n dateFormat: state.User.dateFormat,\r\n userRoles: state.User.userRoles,\r\n properties: state.Tenant.tenantProperties,\r\n jobDetail: state.Jobs.jobDetails\r\n };\r\n\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateProperties: properties => {\r\n dispatch({ type: \"SET_PROPERTIES\", properties: properties });\r\n }\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withTranslation()(JobEditWizard));","import React from \"react\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport { ButtonToolbar, ToggleButtonGroup, ToggleButton } from 'react-bootstrap';\r\nimport Loader from \"react-loader-spinner\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport './OwnerApproveRejectDrawer.scss';\r\n\r\nclass OwnerApproveRejectDrawer extends React.Component {\r\n\r\n state = {\r\n jobDetails: {},\r\n description: \"\",\r\n userId: \"\",\r\n isLoading: false\r\n };\r\n constructor(props) {\r\n super(props);\r\n\r\n this.JobAttend = this.JobAttend.bind(this);\r\n this.description = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({ jobDetails: this.props.jobDetails, userId: this.props.userId });\r\n }\r\n\r\n render() {\r\n const header = this.createHeader();\r\n const body = this.createBody();\r\n const footer = this.createFooter();\r\n return (\r\n \r\n );\r\n }\r\n\r\n\r\n createHeader = () => {\r\n return (\r\n <>\r\n

Attend Job

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n\r\n createBody = () => {\r\n return (<>\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 createFooter = () => {\r\n return (\r\n <>\r\n \r\n \r\n );\r\n };\r\n\r\n JobAttend = () => {\r\n if (this.description.current.value == '' || this.description.current.value == undefined || this.description.current.value == null) {\r\n toast.error(\"Please enter job attend reason.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n\r\n if (this.state.userId == null || this.state.userId == 'undefind') {\r\n this.setState({ userId: localStorage.getItem(\"exernalUserId\") });\r\n }\r\n this.setState({\r\n isLoading: true\r\n });\r\n var callbackUrl = AppConfiguration.Setting().BAndAApiEndPoint;\r\n try {\r\n AXIOS.GET(`tenant-api/owner-attending-job?ownerId=${this.state.userId}&jobId=${this.props.jobDetails.id}&callbackUrl=${callbackUrl}¬e=${this.description.current.value}`).then(response => {\r\n if (response) {\r\n this.setState({\r\n isLoading: false\r\n });\r\n toast.success('Saved as Owner will attend to the job', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.onJobApproveOrReject();\r\n //this.props.history.push(`/external/overview?code=${this.props.jobDetails.id}&userId=${this.state.userId}`);\r\n }\r\n else {\r\n\r\n this.setState({\r\n isLoading: false\r\n });\r\n //this.props.history.push(`/external/overview?code=${this.props.jobDetails.id}&userId=${this.state.userId}`);\r\n toast.error('Job�s status has been changed. Please contact the property manager for more details', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n\r\n}\r\n\r\n\r\nexport default OwnerApproveRejectDrawer;","import React, { useState } from \"react\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport { Dropdown } from 'semantic-ui-react';\r\nimport { ButtonToolbar, ToggleButtonGroup, ToggleButton } from 'react-bootstrap';\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport { BrowserRouter as Router, Route, Link, } from 'react-router-dom'\r\nimport Loader from \"react-loader-spinner\";\r\nimport settingsService from \"../../../Services/settingsService\";\r\nimport jobService from \"../../../Services/JobService\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport './OwnerApproveRejectDrawer.scss';\r\n\r\nclass OwnerApproveDrawer extends React.Component {\r\n\r\n state = {\r\n showJobApproveDrawer: false,\r\n jobApproveOption: '0',\r\n showQuoteLimitSelection: false,\r\n showSuggestedTrade: false,\r\n selectedQuoteLimit: 0,\r\n selectedTrade: '',\r\n quoteLimit: [\r\n { key: 1, text: '1', value: 1 },\r\n { key: 2, text: '2', value: 2 },\r\n { key: 3, text: '3', value: 3 },\r\n { key: 4, text: '4', value: 4 },\r\n { key: 5, text: '5', value: 5 },\r\n { key: 6, text: '6', value: 6 },\r\n { key: 7, text: '7', value: 7 },\r\n { key: 8, text: '8', value: 8 },\r\n { key: 9, text: '9', value: 9 },\r\n { key: 10, text: '10', value: 10 },\r\n { key: 11, text: 'Unlimited', value: 11 }],\r\n suggestedTradeList: [],\r\n jobDetails: {},\r\n history: {},\r\n isLoading: false,\r\n showAverageCostWhenOwnerApproval: false,\r\n isOrganizationSettingsLoaded: false,\r\n averageCostModel: {\r\n jobAverageCost: 0.00,\r\n jobCount: 0,\r\n confidenceLevel: 1\r\n },\r\n isAverageCostModelLoaded: false,\r\n disableApproveButton: false\r\n };\r\n constructor(props) {\r\n super(props);\r\n this.validateApproval = this.validateApproval.bind(this);\r\n this.JobApprove = this.JobApprove.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({ jobDetails: this.props.jobDetails, userId: this.props.userId });\r\n this.description = React.createRef();\r\n this.approvedAmount = React.createRef();\r\n this.isEmptySuggestedTradeList = false\r\n this.getOrganizationSettings(localStorage.getItem('orgId'));\r\n }\r\n\r\n getOrganizationSettings(organizationId) {\r\n const jobId = window.jobId;\r\n settingsService.getOrganizationSettingsByOrgId(organizationId)\r\n .then((res) => {\r\n this.setState({\r\n showAverageCostWhenOwnerApproval: res.organizationSettingsModel.showAverageCostWhenOwnerApproval,\r\n isOrganizationSettingsLoaded: true,\r\n });\r\n if (res.organizationSettingsModel.showAverageCostWhenOwnerApproval) {\r\n this.getPredictiveAverageCost(jobId);\r\n }\r\n })\r\n }\r\n\r\n //for getting average job cost\r\n getPredictiveAverageCost = (jobId) => {\r\n try {\r\n jobService.GetPredictiveJobAverageCost(jobId)\r\n .then(data => {\r\n this.setState({ averageCostModel: data });\r\n this.setState({ isAverageCostModelLoaded: true });\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n render() {\r\n const header = this.createHeader();\r\n const body = this.createBody();\r\n const footer = this.createFooter();\r\n return (\r\n \r\n );\r\n }\r\n\r\n\r\n createHeader = () => {\r\n return (\r\n <>\r\n

Approve Job

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n\r\n createBody = () => {\r\n let quoteLimitSelection = this.createQuoteLimitSelection();\r\n let suggestedTradeSelection = this.createSuggestedTradeSelection();\r\n return (<>\r\n
\r\n {quoteLimitSelection}\r\n {suggestedTradeSelection}\r\n {(this.state.showAverageCostWhenOwnerApproval && this.state.isAverageCostModelLoaded) ?\r\n
\r\n
\r\n
\r\n
The suggested average cost range for the job is +/-${this.state.averageCostModel.jobAverageCost}
\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 Mark as Completed\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n );\r\n }\r\n\r\n createFooter = () => {\r\n return (\r\n <>\r\n \r\n \r\n );\r\n };\r\n\r\n createQuoteLimitSelection = () => {\r\n if (this.state.showQuoteLimitSelection) {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n }\r\n\r\n createSuggestedTradeSelection = () => {\r\n let messageForEmptySuggestedTradeSelection = this.createMessageForEmptySuggestedTradeSelection();\r\n if (this.state.showSuggestedTrade) {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n {messageForEmptySuggestedTradeSelection}\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n }\r\n createMessageForEmptySuggestedTradeSelection = () => {\r\n if (this.isEmptySuggestedTradeList) {\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n )\r\n }\r\n else {\r\n return\r\n }\r\n }\r\n\r\n handleJobApproveOptionOnChange = (value) => {\r\n this.setState({ jobApproveOption: value });\r\n\r\n if (value === \"1\") {\r\n try {\r\n AXIOS.GET(\r\n `tenant-api/suggested-trades?jobId=${this.props.jobDetails.id}`\r\n ).then(response => {\r\n if (response) {\r\n if (response.length <= 0) {\r\n this.isEmptySuggestedTradeList = true;\r\n }\r\n this.setState({ suggestedTradeList: response.map((a, index) => { return { key: index, text: a.businessName, value: a.userId }; }) });\r\n this.setState({ showQuoteLimitSelection: false, showSuggestedTrade: true });\r\n } else {\r\n toast.error(\"Error occured. Please try again.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n else if (value === \"2\") {\r\n this.setState({ showQuoteLimitSelection: true, showSuggestedTrade: false });\r\n }\r\n else if (value === \"3\") {\r\n this.setState({ showQuoteLimitSelection: false, showSuggestedTrade: false });\r\n }\r\n }\r\n\r\n onQuoteLimitSelection = (value) => {\r\n\r\n }\r\n\r\n validateApproval = (value) => {\r\n let v = true;\r\n\r\n if (this.description.current.value == null || this.description.current.value.trim() === '') {\r\n toast.error(\"Please enter job approving note.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n }); v = v && false;\r\n }\r\n\r\n return v;\r\n }\r\n\r\n JobApprove = (value) => {\r\n try {\r\n\r\n if (this.validateApproval()) {\r\n this.setState({\r\n isLoading: true,\r\n disableApproveButton: true\r\n })\r\n let jobApprovalRequest = {};\r\n jobApprovalRequest.userId = localStorage.getItem(\"exernalUserId\");\r\n jobApprovalRequest.jobId = this.props.jobDetails.id;\r\n jobApprovalRequest.note = this.description.current.value;\r\n jobApprovalRequest.jobApproveOption = parseFloat(this.state.jobApproveOption);\r\n jobApprovalRequest.quoteLimit = this.state.selectedQuoteLimit;\r\n jobApprovalRequest.tradeId = this.state.selectedTrade;\r\n jobApprovalRequest.IsOwnerApproved = true;\r\n\r\n let variationText = \"\";\r\n if (this.props.jobDetails.isOwnerApprovalPendingForVariation &&\r\n this.props.jobDetails.currentVariation &&\r\n this.props.jobDetails.currentVariation.status == 201) {\r\n variationText = \"Variation \";\r\n }\r\n\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/job-approve-owner`, jobApprovalRequest)\r\n .then(response => {\r\n if (response && response.success) {\r\n toast.success(`Job ${variationText}Approved.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.onJobApproveOrReject();\r\n //this.props.history.push(`/external/overview?code=${this.props.jobDetails.id}&userId=${jobApprovalRequest.userId}`);\r\n this.setState({\r\n isLoading: true\r\n })\r\n // window.location.reload();\r\n } else {\r\n //this.props.history.push(`/external/overview?code=${this.props.jobDetails.id}&userId=${this.state.userId}`);\r\n toast.error('Job�s status has been changed. Please contact the property manager for more details', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }));\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n };\r\n\r\n handleQuoteLimitChange = (event, props) => {\r\n this.state.selectedQuoteLimit = props.value;\r\n this.state.selectedTrade = '';\r\n }\r\n\r\n handleTradeChange = (event, props) => {\r\n this.state.selectedTrade = props.value;\r\n this.state.selectedQuoteLimit = 0;\r\n }\r\n\r\n getConfidenceLevelClass(confidenceLevel) {\r\n switch (confidenceLevel) {\r\n case 1:\r\n return \"confident-lbl confident-low\";\r\n case 2:\r\n return \"confident-lbl confident-medium\";\r\n case 3:\r\n return \"confident-lbl confident-high\";\r\n }\r\n }\r\n\r\n\r\n}\r\n\r\n\r\nexport default OwnerApproveDrawer;","import React, { useState } from \"react\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport { Dropdown } from 'semantic-ui-react';\r\nimport { ButtonToolbar, ToggleButtonGroup, ToggleButton } from 'react-bootstrap';\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport './OwnerApproveRejectDrawer.scss';\r\n\r\nclass OwnerRejectDrawer extends React.Component {\r\n\r\n state = {\r\n jobDetails: {},\r\n description: \"\",\r\n userId: \"\",\r\n isLoading: false,\r\n disableRejctButton: false\r\n };\r\n constructor(props) {\r\n super(props);\r\n\r\n this.JobReject = this.JobReject.bind(this);\r\n this.description = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({ jobDetails: this.props.jobDetails, userId: this.props.userId });\r\n }\r\n\r\n render() {\r\n const header = this.createHeader();\r\n const body = this.createBody();\r\n const footer = this.createFooter();\r\n return (\r\n \r\n );\r\n }\r\n\r\n\r\n createHeader = () => {\r\n return (\r\n <>\r\n

Reject Job

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n\r\n createBody = () => {\r\n return (<>\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 Mark as Completed\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n );\r\n }\r\n\r\n createFooter = () => {\r\n return (\r\n <>\r\n \r\n \r\n );\r\n };\r\n\r\n JobReject = () => {\r\n if (this.description.current.value == '' || this.description.current.value == undefined || this.description.current.value == null) {\r\n toast.error(\"Please enter job rejecting reason.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n\r\n this.setState({\r\n isLoading: true,\r\n disableRejctButton: true\r\n });\r\n\r\n if (this.state.userId == null || this.state.userId == 'undefind') {\r\n this.setState({ userId: localStorage.getItem(\"exernalUserId\") });\r\n }\r\n\r\n AXIOS.GET(`tenant-api/job-reject-owner?userId=${this.state.userId}&jobId=${this.props.jobDetails.id}¬e=${this.description.current.value}`).then(response => {\r\n if (response && response.success) {\r\n this.setState({\r\n isLoading: false\r\n });\r\n toast.success(\"Job Rejected.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.onJobApproveOrReject();\r\n //this.props.history.push(`/external/overview?code=${this.props.jobDetails.id}&userId=${this.state.userId}`);\r\n window.location.reload();\r\n } else {\r\n this.setState({\r\n isLoading: false\r\n });\r\n //this.props.history.push(`/external/overview?code=${this.props.jobDetails.id}&userId=${this.state.userId}`);\r\n toast.error('Job�s status has been changed. Please contact the property manager for more details', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n });\r\n };\r\n\r\n\r\n}\r\n\r\n\r\nexport default OwnerRejectDrawer;","import React from 'react';\r\nimport { Route, Redirect, Link } from 'react-router-dom';\r\nimport { connect } from \"react-redux\";\r\nimport ExternalJobDetails from '../External/JobDetails/ExternalJobDetails';\r\nimport ExternalTimeline from '../External/Timeline/ExternalTimeline';\r\nimport MenuBar from '../External/MenuBar/MenuBar';\r\nimport './ExternalUserLayout.scss'\r\nimport jobService from '../../Services/JobService';\r\nimport ExternalEditJob from '../External/EditJob/ExternalEditJob';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport ExternalJobApprove from '../External/OwnerApproval/ExternalJobApprove';\r\nimport ExternalJobReject from '../External/OwnerReject/ExternalJobReject';\r\nimport ExternalOwnerAttend from '../External/OwnerAttend/ExternalOwnerAttend';\r\nimport JobNotes from '../External/JobNote/JobNotes';\r\nimport QuotesDetails from '../External/QuotesDetail/QuotesDetails';\r\nimport JobPostWizard from '../Common/JobPostWizard/JobPostWizard';\r\nimport JobEditWizard from '../Common/JobEditWizard/JobEditWizard';\r\nimport settingsService from '../../Services/settingsService';\r\nimport { AXIOS } from \"../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { trackPromise } from 'react-promise-tracker';\r\nimport Loader from \"react-loader-spinner\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport ScheduleJobDrawer from \"../Drawers/ScheduleJobDrawer/ScheduleJobDrawer\";\r\nimport OwnerApproveRejectDrawer from '../External/OwnerApproveRejectDrawer/OwnerApproveRejectDrawer';\r\nimport OwnerApproveDrawer from '../External/OwnerApproveRejectDrawer/OwnerApproveDrawer';\r\nimport OwnerRejectDrawer from '../External/OwnerApproveRejectDrawer/OwnerRejectDrawer';\r\nimport { bool } from 'prop-types';\r\nimport ToolTipLayout from './ToolTipLayout';\r\n\r\nconst MILLISECONDS_PER_DAY = 1000 * 60 * 60 * 24;\r\n\r\n\r\nclass ExternalUserLayout extends React.Component {\r\n\r\n state = {\r\n isLoadingTimeline: false,\r\n timelineData: [],\r\n inValidStatus: [8, 103, 110, 104, 105, 106, 109, 206],\r\n completedStatus: [7, 12, 107],\r\n userId: \"\",\r\n isJobPosting: false,\r\n isJobEditing: false,\r\n isJobApprovedOrRejected: false,\r\n showScheduleJob: false,\r\n showApproveRejectDrawer: false,\r\n showApproveDrawer: false,\r\n showRejectDrawer: false\r\n }\r\n\r\n componentDidMount() {\r\n // this.getJobTimelineByJobId();\r\n if (this.props && this.props.location.search.indexOf('userId') > -1) {\r\n //Owner variation approval\r\n const params = new URLSearchParams(this.props.location.search);\r\n let id = params.get('userId');\r\n console.log(id);\r\n localStorage.setItem(\"exernalUserId\", id);\r\n this.setState({ userId: id });\r\n this.getOwnerApprovalStatus(window.jobId, id);\r\n } else {\r\n localStorage.setItem(\"exernalUserId\", \"\");\r\n }\r\n }\r\n\r\n getJobTimelineByJobId = () => {\r\n const jobId = window.jobId;\r\n this.setState({ isLoadingTimeline: true });\r\n if (jobId) {\r\n jobService.GetJobRelatedTimelineForExternalUsers(jobId).then(result => {\r\n this.setState({\r\n isLoadingTimeline: false,\r\n timelineData: result\r\n });\r\n }, error => {\r\n console.log(error);\r\n })\r\n }\r\n }\r\n\r\n getOwnerApprovalStatus = (jobId, userId) => {\r\n this.setState({ isLoadingTimeline: true });\r\n if (jobId && userId) {\r\n jobService.GetOwnerApprovalStatus(jobId, userId).then(result => {\r\n\r\n this.setState({\r\n isLoadingTimeline: false,\r\n ownerApprovalStatus: result.status,\r\n urlExpired: result.isExpired\r\n });\r\n if (result.isExpired) {\r\n toast.error(`Url has been expired !`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }, error => {\r\n console.log(error);\r\n });\r\n }\r\n }\r\n\r\n dayDifference = (date1, date2) => {\r\n date1 = new Date(date1.toDateString());\r\n date2 = new Date(date2.toDateString());\r\n var timeDiff = Math.abs(date2.getTime() - date1.getTime());\r\n var diffDays = Math.ceil(timeDiff / MILLISECONDS_PER_DAY);\r\n return diffDays;\r\n }\r\n\r\n onSubmitJobDetails = () => {\r\n const { jobDetails } = this.props;\r\n\r\n if (jobDetails.attachments.length == 0 && jobDetails.isAttachmentMandatory) {\r\n\r\n toast.error(`You are required to attach an image related to the maintenance request.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n\r\n jobDetails.jobValidityPeriod = 1;\r\n jobDetails.serviceConsumerId = localStorage.getItem('userId');\r\n\r\n jobDetails.workflowStatusId = 2;\r\n jobDetails.isActive = true;\r\n\r\n this.setState({ isJobPosting: true })\r\n try {\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/external-job-post`, jobDetails, {\r\n 'headers': { 'ClientSecret': AppConfiguration.Setting().ClientSecret }\r\n })\r\n .then(dataJson => {\r\n this.setState({ isJobPosting: false })\r\n const message = 'posted'\r\n if (dataJson == 'Request Unauthorized' || dataJson == 'Job post failed') {\r\n toast.error(`Job is not ${message} successfully. Please refresh link and try again.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n } else {\r\n toast.success(`Job is ${message} successfully.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }, error => {\r\n console.log(error);\r\n this.setState({ isJobPosting: false });\r\n toast.error(`Failed to post the job. Please try again.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n })\r\n )\r\n\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n }\r\n reloadPage = ()=>\r\n {\r\n this.props.reloadPage();\r\n }\r\n\r\n toggleApproveRejectDrawer() {\r\n this.setState({ showApproveRejectDrawer: !this.state.showApproveRejectDrawer })\r\n }\r\n toggleApproveDrawer() {\r\n this.setState({ showApproveDrawer: !this.state.showApproveDrawer })\r\n }\r\n toggleRejectDrawer() {\r\n this.setState({ showRejectDrawer: !this.state.showRejectDrawer })\r\n }\r\n\r\n render() {\r\n const { match, jobDetails, isCurrentTenant, theme, isCustomThemeEnable } = this.props;\r\n const { t } = this.props;\r\n const style = {\r\n isCustomThemeEnable: isCustomThemeEnable,\r\n brand: theme.brandColor,\r\n brandBackground: theme.brandColor + \"33\",\r\n textColor: theme.textColor,\r\n primaryButtonStyle: {\r\n color: theme.primaryButtonTextColor,\r\n backgroundColor: theme.primaryButtonBackground,\r\n border: \"1px solid \" + theme.primaryButtonBackground\r\n },\r\n secondaryButtonStyle: {\r\n color: theme.primaryButtonBackground,\r\n backgroundColor: theme.primaryButtonBackground + \"33\",\r\n border: \"1px solid \" + theme.primaryButtonBackground\r\n },\r\n optionsStyle: {\r\n border: \"1px solid \" + theme.brandColor,\r\n color: theme.brandColor,\r\n activeBackground: theme.brandColor + \"33\"\r\n }\r\n }\r\n return (\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n {(jobDetails != null && this.state.inValidStatus.indexOf(jobDetails.workflowStatusId) > -1) ?\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Url has been expired or invalid!

\r\n
\r\n Go TO Login\r\n
\r\n
\r\n
\r\n
\r\n :\r\n (jobDetails != null && this.state.completedStatus.indexOf(jobDetails.workflowStatusId) > -1 && this.dayDifference(new Date(jobDetails.lastUpdatedDateTime), new Date()) > 5 || this.state.urlExpired) ?\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Url has been expired!

\r\n
\r\n Go TO Login\r\n
\r\n
\r\n
\r\n
\r\n :\r\n\r\n (jobDetails != null && !isCurrentTenant && jobDetails.isUserTenant && jobDetails.propertyId != null && jobDetails.workflowStatusId != 6) ?\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Only current tenants are allow to view or edit job details!

\r\n
\r\n Go TO Login\r\n
\r\n
\r\n
\r\n
\r\n :\r\n (jobDetails != null && !isCurrentTenant && jobDetails.isUserTenant && jobDetails.propertyId != null && jobDetails.workflowStatusId != 6) ?\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Only current tenants are allow to view or edit job details!

\r\n
\r\n Go TO Login\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 this.backToList(event)}\r\n isJobEdit={true} jobDetail={jobDetails}\r\n {...routerProps}\r\n reloadPage={()=>this.reloadPage()} />}\r\n />\r\n this.onJobApproveOrReject()}\r\n />}\r\n />\r\n this.onJobApproveOrReject()}\r\n />}\r\n />\r\n this.onJobApproveOrReject()}\r\n />}\r\n />\r\n }\r\n />\r\n this.reload()}\r\n />}\r\n />\r\n
: ''}\r\n {(jobDetails != null && (jobDetails.workflowStatusId == 4) && jobDetails.scheduleEventId != null) ?
\r\n {(jobDetails.scheduleEventStatus !== 2) ? <>\r\n \r\n \r\n : ''}\r\n \r\n {(this.state.showScheduleJob) ?\r\n this.toggleSheduleJobDrawer()}\r\n getJobDetails={(event) => { window.location.reload() }}\r\n CloseJobDetailsDrawer={(event) => window.location.reload()}>\r\n : ''\r\n }\r\n
: ''}\r\n \r\n
\r\n
\r\n }\r\n \r\n )\r\n }\r\n\r\n onAcceptSchedule = () => {\r\n let obj = {};\r\n\r\n obj.JobId = this.props.jobDetails.id;\r\n\r\n obj.id = this.props.jobDetails.scheduleEventId;\r\n obj.bidId = this.props.jobDetails.acceptedBidId;\r\n obj.type = 0;\r\n obj.status = 2;\r\n obj.userId = this.props.jobDetails.serviceConsumerId;\r\n try {\r\n AXIOS.POST(`tenant-api/save-external-schedule-job`, obj).then(response => {\r\n if (response) {\r\n toast.success('Job Schedule Accepted', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n window.location.reload();\r\n }\r\n else {\r\n toast.error('Job Schedule Acceptance Failed', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n }\r\n\r\n onRejectSchedule = () => {\r\n\r\n let obj = {};\r\n\r\n obj.JobId = this.props.jobDetails.id;\r\n\r\n obj.id = this.props.jobDetails.scheduleEventId;\r\n obj.bidId = this.props.jobDetails.acceptedBidId;\r\n obj.type = 0;\r\n obj.status = 3;\r\n obj.userId = this.props.jobDetails.serviceConsumerId;\r\n\r\n try {\r\n AXIOS.POST(`tenant-api/save-external-schedule-job`, obj).then(response => {\r\n if (response) {\r\n toast.success('Job Schedule Rejected', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n window.location.reload();\r\n }\r\n else {\r\n toast.error('Job Schedule Rejection Failed', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n toggleSheduleJobDrawer = () => {\r\n this.setState({\r\n showScheduleJob: !this.state.showScheduleJob\r\n });\r\n }\r\n\r\n onJobApproveOrReject = () => {\r\n this.setState({\r\n isJobApprovedOrRejected: true\r\n })\r\n }\r\n backToList = (status) => {\r\n this.setState({\r\n showJobPostDrawer: false,\r\n });\r\n }\r\n\r\n onOwnerAttend = () => {\r\n\r\n var callbackUrl = AppConfiguration.Setting().BAndAApiEndPoint;\r\n try {\r\n AXIOS.GET(`tenant-api/owner-attending-job?ownerId=${this.state.userId}&jobId=${window.jobId}&callbackUrl=${callbackUrl}¬e=${\"\"}`).then(response => {\r\n if (response) {\r\n toast.success('Saved as Owner will attend to the job', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.setState({\r\n isJobApprovedOrRejected: true\r\n });\r\n }\r\n else {\r\n toast.error('Failed to save', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n reload = () => {\r\n\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n let userDetails = state.User;\r\n\r\n return {\r\n userDetails: userDetails,\r\n profileThumbnailsCdnEndpoint: state.AppSettings.imageCdnEndpoint,\r\n jobDetails: state.Jobs.jobDetails,\r\n isCurrentTenant: state.Tenant.isCurrentTenant\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateUserDetails: details => { dispatch({ type: \"SET_USER_DETAILS\", userDetails: details }) },\r\n updateIsTenantField: isCurrentTenant => { dispatch({ type: \"CHECK_CURRENT_TENANT\", isCurrentTenant: isCurrentTenant }) },\r\n setJobDetails: jobDetails => { dispatch({ type: 'SET_JOB_DETAILS', jobDetails: jobDetails }) },\r\n setJobDetailsLoadingStatus: status => { dispatch({ type: 'SET_JOB_DETAILS_LOADING_STATUS', status: status }) },\r\n addJobTypes: jobTypes => { dispatch({ type: 'SET_JOB_TYPES', jobTypes: jobTypes }) }\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n\r\n)(withTranslation()(ExternalUserLayout));","import React from 'react';\r\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\r\nimport './ToolTipLayout.scss';\r\n\r\nclass ToolTipLayout extends React.Component {\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n state = {\r\n placement: \"top\",\r\n ToolTipMessage: \"Click here to peform this action\",\r\n styleType: \"tooltip-default\"\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({\r\n placement: this.props.placement ? this.props.placement : this.state.placement,\r\n ToolTipMessage: this.props.ToolTipMessage ? this.props.ToolTipMessage : this.state.ToolTipMessage,\r\n styleType: this.props.styleType ? this.props.styleType : this.state.styleType,\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n \r\n {this.state.ToolTipMessage}\r\n \r\n }\r\n >\r\n {this.props.children}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n\r\nexport default ToolTipLayout;","import React from 'react';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport { Link } from 'react-router-dom';\r\n\r\nexport default class ExternalDownloadPage extends React.Component {\r\n render() {\r\n return
\r\n \r\n \r\n \r\n\r\n

Simplified property\r\n maintenance + inspections\r\n today

\r\n

Post a maintenance request in less than 60 seconds + hold a remote inspection all from your smartphone.

\r\n

Get started for free today.

\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 React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { BrowserRouter as Router, Route, Redirect } from \"react-router-dom\";\r\n//import \"./Styles/style.scss\";\r\nimport { ToastContainer } from 'react-toastify';\r\nimport ExternalUserLayout from \"./Components/Layout/ExternalUserLayout\";\r\nimport { createBrowserHistory } from 'history';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport jobService from './Services/JobService';\r\nimport PouchDbService from './Services/PouchDbService';\r\nimport { MasterDataType, WorkflowStates } from '../src/Constants/Enums';\r\nimport userService from './Services/UserService';\r\nimport ExternalDownloadPage from './Components/External/DownloadPage/DownloadPage';\r\nimport settingsService from './Services/settingsService';\r\nimport translateService from './Services/TranslateService';\r\nvar history = createBrowserHistory();\r\n\r\nclass ExternalUserApp extends React.Component {\r\n\r\n state = {\r\n jobDetails: null,\r\n isJobDetailsLoading: false,\r\n isCustomThemeEnable: false,\r\n theme: {\r\n logoUrl: '',\r\n brandColor: '',\r\n textColor: '',\r\n primaryButtonBackground: '',\r\n primaryButtonTextColor: ''\r\n }\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n var userid = '';\r\n if (window.location.search.indexOf(\"userId\") > -1) {\r\n userid = window.location.search.split(\"userId=\")[1];\r\n }\r\n localStorage.setItem(\"userId\", userid);\r\n\r\n var isSendEmail = '';\r\n if (window.location.search.indexOf(\"sendEmailForTenatToGetMoreInfo\") > -1) {\r\n isSendEmail = window.location.search.split(\"sendEmailForTenatToGetMoreInfo=\")[1];\r\n\r\n localStorage.setItem(\"sendemailfortenattogetmoreinfo\", isSendEmail);\r\n }\r\n else {\r\n localStorage.setItem(\"sendemailfortenattogetmoreinfo\", isSendEmail)\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.getJobDetailsByJobId();\r\n }\r\n componentWillMount() {\r\n if (localStorage.getItem('styleCode') === \"JLL\" || localStorage.getItem('styleCode') === \"jll\") {\r\n import('./Styles/JLL/style.scss');\r\n } else {\r\n import('./Styles/style.scss');\r\n }\r\n }\r\n getActiveMasterDataFileVersion = () => {\r\n userService.GetActiveMasterDataFileVersion(MasterDataType.JobTypes)\r\n .then(response => {\r\n this.readJsonFile(response);\r\n });\r\n }\r\n\r\n readJsonFile(fileName) {\r\n let filePath = `${AppConfiguration.Setting().azureStorage.BlobStorageCdnEndPoint}${AppConfiguration.Setting().azureStorage.JobTypesContainerName}/${fileName}`;\r\n fetch(filePath)\r\n .then(response => response.json())\r\n .then(result => {\r\n this.addJobTypesToTheState(result);\r\n })\r\n }\r\n\r\n getJobDetailsByJobId = () => {\r\n const jobId = window.jobId;\r\n const trgLng = window.lng;\r\n const userId = localStorage.getItem(\"userId\");\r\n this.props.setJobDetailsLoadingStatus(true);\r\n this.setState({ isJobDetailsLoading: true })\r\n if (jobId) {\r\n try {\r\n let details;\r\n jobService.GetJobDetailsForExternalUsers(jobId, userId).then((result) => {\r\n details = result;\r\n return this.applyTranslation([(details.description) ? details.description : \" \",\r\n (details.title) ? details.title : \" \",\r\n (details.address) ? details.address : \" \",\r\n (details.primaryJobTypeDisplay) ? details.primaryJobTypeDisplay : \" \",\r\n (details.statusDisplay) ? details.statusDisplay : \" \",\r\n (details.secondaryJobTypeDisplay) ? details.secondaryJobTypeDisplay : \" \",\r\n (details.propertyName) ? details.propertyName : \" \",\r\n (details.issueAreaInProperty != null) ? details.issueAreaInProperty : \" \",\r\n (details.tradees != null && details.tradees.length > 0 && details.tradees[0].firstName) ? details.tradees[0].firstName : \" \",\r\n (details.tradees != null && details.tradees.length > 0 && details.tradees[0].lastName) ? details.tradees[0].lastName : \" \",\r\n (details.tradees != null && details.tradees.length > 0 && details.tradees[0].businessName) ? details.tradees[0].businessName : \" \",\r\n (details.tradees != null && details.tradees.length > 0 && details.tradees[0].mobileNumber) ? details.tradees[0].mobileNumber : \" \",\r\n (details.tradees != null && details.tradees.length > 0 && details.tradees[0].email) ? details.tradees[0].email : \" \",\r\n (details.customKeyCollectionValue) ? details.customKeyCollectionValue : \" \",\r\n (details.issueTags != null && details.issueTags.length > 0) ? details.issueTags.join(',') : \" \",\r\n\r\n ], \"en\", trgLng);\r\n }).then(async trans => {\r\n if (trans.length > 0) {\r\n details.description = trans[0];\r\n details.title = trans[1];\r\n details.address = trans[2];\r\n details.primaryJobTypeDisplay = trans[3];\r\n details.statusDisplay = trans[4];\r\n details.secondaryJobTypeDisplay = trans[5];\r\n details.propertyName = trans[6];\r\n details.issueAreaInProperty = trans[7];\r\n\r\n if (details.tradees != null && details.tradees.length > 0 && details.tradees[0].firstName) {\r\n details.tradees[0].firstName = trans[8];\r\n };\r\n if (details.tradees != null && details.tradees.length > 0 && details.tradees[0].lastName) {\r\n details.tradees[0].lastName = trans[9];\r\n };\r\n if (details.tradees != null && details.tradees.length > 0 && details.tradees[0].businessName) {\r\n details.tradees[0].businessName = trans[10];\r\n };\r\n if (details.tradees != null && details.tradees.length > 0 && details.tradees[0].mobileNumber) {\r\n details.tradees[0].mobileNumber = trans[11];\r\n };\r\n if (details.tradees != null && details.tradees.length > 0 && details.tradees[0].email) {\r\n details.tradees[0].email = trans[12];\r\n };\r\n details.customKeyCollectionValue = trans[13];\r\n if (details.issueTags != null && details.issueTags.length > 0) {\r\n let num = 14;\r\n for (let i = 0; i < details.issueTags.length; i++) {\r\n details.issueTags[i] = trans[num];\r\n num++;\r\n }\r\n }\r\n }\r\n\r\n const jobNotes = await this.getJobNotesByJobId(jobId, userId);\r\n details.jobNotes = jobNotes;\r\n\r\n this.setState({\r\n jobDetails: details,\r\n isJobDetailsLoading: false\r\n });\r\n \r\n this.props.updateIsTenantField(details.isCurrentTenant);\r\n this.getUserDetails(userId ? userId : details.serviceConsumerId);\r\n\r\n this.props.setJobDetails(details);\r\n this.props.setJobDetailsLoadingStatus(false);\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n this.props.setJobDetailsLoadingStatus(false);\r\n }\r\n }\r\n };\r\n\r\n getJobNotesByJobId = async (jobId, userId) => {\r\n if (!jobId || !userId)\r\n return;\r\n try {\r\n return await jobService.GetJobNotesByJobId(jobId, userId);\r\n } catch {\r\n throw new Error();\r\n }\r\n };\r\n\r\n applyTranslation(texts, sourceLng, targetLng) {\r\n const requestModel = {\r\n text: texts,\r\n targetCode: targetLng,\r\n sourceCode: sourceLng\r\n };\r\n return translateService.translate(requestModel);\r\n }\r\n\r\n getUserDetails = (userId) => {\r\n this.getOrgOmniThemeSettings(userId);\r\n try {\r\n userService.getExternalUserDetails(userId).then(res => {\r\n let details = {};\r\n details.firstName = res.firstName;\r\n details.lastName = res.lastName;\r\n details.email = res.email;\r\n details.location = res.location;\r\n details.mobileNumber = res.mobileNumber;\r\n details.homePhoneNumber = res.homePhoneNumber;\r\n details.officePhoneNumber = res.officePhoneNumber;\r\n details.countryId = res.countryId;\r\n details.profileImageUrl = this.props.profileThumbnailsCdnEndpoint + res.profileImageUrl;\r\n details.userId = res.userId;\r\n details.userType = res.userRole;\r\n details.userIdEncripted = res.encryptedUserId;\r\n details.dateFormat = res.dateFormat;\r\n details.dateTimeFormat = res.dateTimeFormat + \":ss\";\r\n details.dateTimeFormatMin = res.dateTimeFormat;\r\n this.props.updateUserDetails(details);\r\n this.getJobTypesByCountryId();\r\n localStorage.setItem(\"DateFormat\", details.dateFormat);\r\n localStorage.setItem(\"DateTimeFormat\", details.dateTimeFormat);\r\n localStorage.setItem(\"dateTimeFormatMin\", details.dateTimeFormatMin);\r\n localStorage.setItem(\"userId\", details.userIdEncripted);\r\n localStorage.setItem(\"userType\", details.userType);\r\n this.getActiveMasterDataFileVersion();\r\n\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n\r\n getJobTypesByCountryId = () => {\r\n PouchDbService.GetAllDocument(MasterDataType[MasterDataType.JobTypes]).then(response => {\r\n if (response.rows.length > 0) {\r\n this.addJobTypesToTheState(response);\r\n }\r\n })\r\n }\r\n getOrgOmniThemeSettings = (userId) => {\r\n if (userId) {\r\n\r\n settingsService.getOmniOrgThemeSettings(userId).then(result => {\r\n if (result.organizationThemeSettingsModel.isCustomThemeEnable) {\r\n let newTheme = {\r\n logoUrl: result.organizationThemeSettingsModel.logoUrl,\r\n brandColor: result.organizationThemeSettingsModel.brandColor,\r\n textColor: result.organizationThemeSettingsModel.textColor,\r\n primaryButtonBackground: result.organizationThemeSettingsModel.primaryButtonBackground,\r\n primaryButtonTextColor: result.organizationThemeSettingsModel.primaryButtonTextColor\r\n }\r\n\r\n this.setState({\r\n isCustomThemeEnable: result.organizationThemeSettingsModel.isCustomThemeEnable,\r\n theme: newTheme\r\n });\r\n } else {\r\n this.setState({\r\n isCustomThemeEnable: false,\r\n });\r\n }\r\n\r\n }, error => {\r\n console.log(error);\r\n })\r\n }\r\n }\r\n\r\n\r\n addJobTypesToTheState = (jobTypesList) => {\r\n let trgLng = window.lng.charAt(0).toUpperCase() + window.lng.slice(1);\r\n if (trgLng === 'Zh-tw') {\r\n trgLng = 'ZhTw';\r\n }\r\n let services = [];\r\n let allJobTypes = [];\r\n let jobTypes = [];\r\n if (jobTypesList.length) {\r\n jobTypes = jobTypesList.filter(element => element.CountryId == this.props.userDetails.countryId);\r\n } else {\r\n jobTypes = jobTypesList.rows.filter(element => element.doc.CountryId == this.props.userDetails.countryId);\r\n }\r\n\r\n jobTypes.forEach(element => {\r\n let subTypes = [];\r\n if (jobTypesList.length) {\r\n subTypes = jobTypes.filter(p => p.ParentJobTypeId == element.Id);\r\n allJobTypes.push({\r\n id: element.Id,\r\n title: (trgLng === 'En') ? element.Name : element[`Name${trgLng}`],\r\n label: (trgLng === 'En') ? element.Name : element[`Name${trgLng}`],\r\n description: element.Description,\r\n tooltip: element.Tooltip,\r\n jobCategory: element.JobGroupId,\r\n parentRef: element.ParentJobTypeId,\r\n countryId: element.CountryId,\r\n hasChildRef: subTypes.length > 0\r\n });\r\n } else {\r\n subTypes = jobTypes.filter(p => p.doc.ParentJobTypeId == element.doc.Id);\r\n allJobTypes.push({\r\n id: element.doc.Id,\r\n title: (trgLng === 'En') ? element.Name : element[`Name${trgLng}`],\r\n label: (trgLng === 'En') ? element.Name : element[`Name${trgLng}`],\r\n description: element.doc.Description,\r\n tooltip: element.doc.Tooltip,\r\n jobCategory: element.doc.JobGroupId,\r\n parentRef: element.doc.ParentJobTypeId,\r\n countryId: element.doc.CountryId,\r\n hasChildRef: subTypes.length > 0\r\n });\r\n }\r\n });\r\n\r\n allJobTypes.forEach(element => {\r\n\r\n let subTypes = allJobTypes.filter(a => a.parentRef == element.id);\r\n\r\n if (element.hasChildRef) {\r\n services.push({\r\n parentJobType: element,\r\n childJobTypes: subTypes\r\n });\r\n }\r\n });\r\n this.props.addJobTypes(services);\r\n }\r\n reloadPage = () => {\r\n this.getJobDetailsByJobId();\r\n }\r\n\r\n render() {\r\n var userId = localStorage.getItem(\"userId\");\r\n return (\r\n <>\r\n {/*(!this.state.isCustomThemeEnable) ?*/\r\n
\r\n \r\n \r\n this.reloadPage()} />}\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\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n let userDetails = state.User;\r\n\r\n return {\r\n userDetails: userDetails,\r\n profileThumbnailsCdnEndpoint: state.AppSettings.imageCdnEndpoint,\r\n jobTypes: state.Jobs.jobTypes,\r\n theme: state.theme,\r\n isCustomThemeEnable: state.isCustomThemeEnable\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateUserDetails: details => { dispatch({ type: \"SET_USER_DETAILS\", userDetails: details }) },\r\n updateIsTenantField: isCurrentTenant => { dispatch({ type: \"CHECK_CURRENT_TENANT\", isCurrentTenant: isCurrentTenant }) },\r\n setJobDetails: jobDetails => { dispatch({ type: 'SET_JOB_DETAILS', jobDetails: jobDetails }) },\r\n setJobDetailsLoadingStatus: status => { dispatch({ type: 'SET_JOB_DETAILS_LOADING_STATUS', status: status }) },\r\n addJobTypes: jobTypes => { dispatch({ type: 'SET_JOB_TYPES', jobTypes: jobTypes }) }\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(ExternalUserApp);","// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register () {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n } else {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW (swUrl) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a \"New content is\r\n // available; please refresh.\" message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker (swUrl) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type').indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister () {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","const initState = {\r\n tenantCount:0,\r\n isCurrentTenant: false,\r\n tenantProperties: []\r\n}\r\n\r\nconst TenantReducer = (state = initState, action) =>{\r\n\r\n switch (action.type) {\r\n case 'ADD_Tenant':\r\n return {\r\n ...state,\r\n tenantCount: action.tenantCount\r\n }\r\n case 'CHECK_CURRENT_TENANT':\r\n return{\r\n ...state,\r\n isCurrentTenant: action.isCurrentTenant\r\n }\r\n case 'SET_PROPERTIES':\r\n return{\r\n ...state,\r\n tenantProperties: action.properties\r\n }\r\n \r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport default TenantReducer;","const initState = {\r\n ownerCount: 0\r\n}\r\n\r\nconst OwnerReducer = (state = initState, action) =>{\r\n if(action.type === \"ADD_Owner\"){\r\n \r\n return{\r\n ...state,\r\n ownerCount: action.ownerCount\r\n }\r\n }\r\n return state;\r\n}\r\n\r\nexport default OwnerReducer;","import { AppConfiguration } from \"read-appsettings-json\";\r\n\r\nconst apiendpoint = AppConfiguration.Setting().apiendpoint;\r\nconst imageCdnEndpoint = AppConfiguration.Setting().azureStorage.ImageCdnEndpoint;\r\nconst imageThumbnailsCdnEndpoint = AppConfiguration.Setting().azureStorage.ImageThumbnailsCdnEndpoint;\r\nconst clientSecret = AppConfiguration.Setting().ClientSecret;\r\nconst profileThumbnailsCdnEndpoint = AppConfiguration.Setting().azureStorage.ProfileThumbnailsCdnEndpoint;\r\nconst videoCdnEndpoint = AppConfiguration.Setting().azureStorage.VideoCdnEndpoint;\r\nconst generalFilesCdnEndpoint = AppConfiguration.Setting().azureStorage.GeneralFilesCdnEndpoint;\r\nconst BAndAEndPoint = AppConfiguration.Setting().BAndAApiEndPoint;\r\nconst intercomApiKey = AppConfiguration.Setting().Intercom.ApiKey;\r\n\r\nconst initState = {\r\n apiEndPoint: apiendpoint,\r\n imageCdnEndpoint: imageCdnEndpoint,\r\n imageThumbnailsCdnEndpoint: imageThumbnailsCdnEndpoint,\r\n profileThumbnailsCdnEndpoint: profileThumbnailsCdnEndpoint,\r\n videoCdnEndpoint: videoCdnEndpoint,\r\n generalFilesCdnEndpoint: generalFilesCdnEndpoint,\r\n clientSecret: clientSecret,\r\n BAndAEndPoint: BAndAEndPoint,\r\n intercomApiKey: intercomApiKey\r\n};\r\n\r\nconst appSettingsReducers = (state = initState, action) => {\r\n switch (action.type) {\r\n case \"LOAD_APP_SETTINGS\":\r\n return {\r\n ...state,\r\n appSettings: action.appSettings\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\nexport default appSettingsReducers;\r\n","const initState = {\r\n isOpen: false,\r\n isRefreshGrid: false,\r\n conversations: [],\r\n jobTypes: [],\r\n jobDetails: null,\r\n isJobDetailsLoading: false\r\n}\r\n\r\n\r\nconst JobsReducer = (state = initState, action) => {\r\n switch (action.type) {\r\n case \"SHOW_JOB_DETAILS_DRAWER\":\r\n return {\r\n ...state,\r\n isOpen: action.isOpen,\r\n refreshMyJobs: action.refreshMyJobs\r\n }\r\n case \"Conversations\":\r\n return {\r\n ...state,\r\n conversations: action.chatList\r\n }\r\n case 'REFRESH_GRID':\r\n return {\r\n ...state,\r\n isRefreshGrid: action.isRefresh\r\n }\r\n case 'SET_JOB_TYPES':\r\n return {\r\n ...state,\r\n jobTypes: action.jobTypes\r\n }\r\n case 'SET_JOB_DETAILS':\r\n return {\r\n ...state,\r\n jobDetails: action.jobDetails\r\n }\r\n case 'SET_JOB_DETAILS_LOADING_STATUS':\r\n return {\r\n ...state,\r\n isJobDetailsLoading: action.status\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport default JobsReducer;","const initState = {\r\n conversationList: ''\r\n}\r\n\r\n\r\nconst ConversationReducer = (state = initState, action) => {\r\n if (action.type == 'SHOW_CONVERSATION') {\r\n return {\r\n ...state,\r\n conversationList: action.chatList\r\n }\r\n }\r\n return state;\r\n // switch(action.type) {\r\n // case 'SHOW_CONVERSATION': \r\n // console.log(action.chatList);\r\n // return {\r\n // ...state,\r\n // conversationList: action.chatList\r\n // }\r\n // break;\r\n // default:\r\n // return state;\r\n // }\r\n}\r\n\r\nexport default ConversationReducer;","const initState = {\r\n email: '',\r\n firstName: '',\r\n lastName: '',\r\n profileImageUrl: '',\r\n userType: '',\r\n userId: '',\r\n userIdEncripted: '',\r\n homePhoneNumber: '',\r\n location: '',\r\n mobileNumber: '',\r\n officePhoneNumber: '',\r\n countryId: '',\r\n dateFormat: '',\r\n dateTimeFormat: '',\r\n dateTimeFormatMin: '',\r\n userRoles: []\r\n}\r\n\r\nconst UserReducer = (state = initState, action) => {\r\n\r\n if (action.type === \"SET_USER_DETAILS\") {\r\n\r\n return {\r\n ...state,\r\n email: action.userDetails.email,\r\n firstName: action.userDetails.firstName,\r\n lastName: action.userDetails.lastName,\r\n profileImageUrl: action.userDetails.profileImageUrl,\r\n profileImageId: action.userDetails.profileImageId,\r\n userType: action.userDetails.userType,\r\n userId: action.userDetails.userId,\r\n userIdEncripted: action.userDetails.userIdEncripted,\r\n homePhoneNumber: action.userDetails.homePhoneNumber,\r\n location: action.userDetails.location,\r\n countryId: action.userDetails.countryId,\r\n mobileNumber: action.userDetails.mobileNumber,\r\n officePhoneNumber: action.userDetails.officePhoneNumber,\r\n dateFormat: action.userDetails.dateFormat,\r\n dateTimeFormat: action.userDetails.dateTimeFormat,\r\n dateTimeFormatMin: action.userDetails.dateTimeFormatMin,\r\n }\r\n }\r\n else if(action.type === \"SET_USER_ROLES\") {\r\n return {\r\n ...state,\r\n userRoles: action.roles\r\n }\r\n }\r\n return state;\r\n}\r\n\r\nexport default UserReducer;","import TenantReducer from './TenantReducer';\r\nimport OwnerReducer from './OwnerReducer';\r\nimport AppSettingsReducer from './AppSettingsReducer';\r\nimport JobsReducer from './JobsReducer';\r\nimport {combineReducers} from 'redux'\r\nimport ConversationReducer from './ConversationReducer';\r\nimport UserReducer from './UserReducer';\r\n\r\nconst RootReducer = combineReducers({\r\n Tenant : TenantReducer,\r\n Owner : OwnerReducer,\r\n MyJobs : JobsReducer,\r\n Jobs : JobsReducer,\r\n AppSettings: AppSettingsReducer,\r\n Conversation: ConversationReducer,\r\n User: UserReducer\r\n})\r\n\r\nexport default RootReducer","import { AppConfiguration } from \"read-appsettings-json\";\r\nimport Firebase from \"firebase\";\r\nconst appsettings = AppConfiguration.Setting();\r\n\r\nexport const firebaseConfig = {\r\n apiKey: appsettings.PushSettings.RealtimeApiKey,\r\n authDomain: appsettings.PushSettings.RealtimeAuthDomain,\r\n databaseURL: appsettings.PushSettings.RealtimeDatabaseURL,\r\n projectId: appsettings.PushSettings.RealtimeProjectId,\r\n storageBucket: appsettings.PushSettings.RealtimeStorageBucket,\r\n messagingSenderId: appsettings.PushSettings.RealtimeMessagingSenderId\r\n}\r\nexport const initFirebaseApp = () => {\r\n Firebase.initializeApp(firebaseConfig);\r\n}\r\n\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport { ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport ImageViewer from '../../../Common/ImageViewer/ImageViewer';\r\nimport { AXIOS } from \"../../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { Form } from 'react-bootstrap';\r\nimport settingsService from '../../../../Services/settingsService';\r\nimport jobService from '../../../../Services/JobService';\r\nimport { Guid } from 'guid-typescript';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { Search, Label, Button, Modal, Dropdown } from 'semantic-ui-react'\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport * as _ from 'lodash';\r\nimport 'semantic-ui-css/semantic.min.css'\r\nimport './BotJobPost_Wizard.scss';\r\nimport propertyService from '../../../../Services/PropertyService';\r\nimport FrequentlyUsedServices from '../../../Drawers/JobPostDrawer/FrequentlyUsedServices/FrequentlyUsedServices';\r\nimport AttachmentsDrawer from '../../../Drawers/AttachmentsDrawer/AttachmentsDrawer';\r\nimport Disclaimer from '../../../Drawers/JobPostDrawer/Disclaimer/Disclaimer';\r\nimport { AppConfiguration } from 'read-appsettings-json';\r\nimport { trackPromise } from 'react-promise-tracker';\r\nimport { Link } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\nimport translateService from '../../../../Services/TranslateService';\r\nimport { string } from 'prop-types';\r\nimport { any } from 'prop-types';\r\n\r\nclass BotJobPostWizard extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.title = React.createRef();\r\n this.jobDescription = React.createRef();\r\n this.budgetRef = React.createRef();\r\n this.issueAreaInProperty = React.createRef();\r\n }\r\n notifyError = (msg) => {\r\n toast.error(msg, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n if (this.props.isFromBot) {\r\n this.props.showChatbotError(msg);\r\n }\r\n }\r\n\r\n state = {\r\n userType: localStorage.getItem(\"userType\"),\r\n userId: localStorage.getItem(\"userId\"),\r\n stepFlow: [[0, \"selectProperty\"], [1, \"getMaintenaceIssue\"], [2, \"getMaintenaceTroubleShootGuide\"],[3, \"getAttachments\"], [4, \"selectPrePostSummary\"], [5, \"setResponse\"], [6, \"setTroubleShooteResponse\"]],\r\n isJobEdit: (this.props.isJobEdit) ? true : false,\r\n jobEditId: (this.props.jobEditId) ? this.props.jobEditId : \"\",\r\n currentStep: 0,\r\n isConsumerJobPost: false,\r\n propertySearchData: [],\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: '',\r\n propertyName: '',\r\n suburbId: '',\r\n propertyType: '',\r\n jobBudget: 0,\r\n jobDescription: '',\r\n jobDescriptionEng: '',\r\n issueAreaInProperty: '',\r\n issueAreaInPropertyEng: '',\r\n },\r\n availableServices: [],\r\n availableServicesDetails: [],\r\n selectedService: { childJobTypes: [] },\r\n selectedServiceType: {\r\n parentJobType: { id: '' }\r\n },\r\n selectedSubServiceType: {},\r\n jobDetails: { attachments: [] },\r\n attachments: [],\r\n jobId: '',\r\n dueDate: '',\r\n formattedDueDate: '',\r\n jobUrgencyList: [\r\n {\r\n value: this.props.t('editjob_lbl13'),\r\n jobUrgency: -1\r\n },\r\n {\r\n value: this.props.t('editjob_lbl11'),\r\n jobUrgency: 1\r\n },\r\n {\r\n value: this.props.t('editjob_lbl12'),\r\n jobUrgency: 2\r\n }\r\n ],\r\n jobUrgency: 2,\r\n jobUrgencyCheckbox: false,\r\n propertyList: [],\r\n value: '',\r\n isLoading: false,\r\n filteredResults: [],\r\n propertyId: '',\r\n isPropertiesLoading: false,\r\n parentJobTypes: [],\r\n primaryJobTypes: [],\r\n secondaryJobTypes: [],\r\n frequentlyUsedServices: [],\r\n isShowMoreServices: false,\r\n locationDetails: {\r\n latitude: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n location: ''\r\n },\r\n isMandatoryToUploadFiles: false,\r\n isJobForMe: false,\r\n jobBudget: \"\",\r\n jobForMe: {},\r\n selectedTradees: [],\r\n isSelectedOnDemand: false,\r\n selectedQuoteLimit: 0,\r\n inviteToProviders: false,\r\n isJobPosting: false,\r\n isRestrictKeyCollectionForResidentialProperties: false,\r\n showDisclaimerDrawer: false,\r\n showBackToHomeConfirmation: false,\r\n jobPostWorkflowStatus: 1,\r\n propertyLocks: [],\r\n isJobForMeText: '',\r\n isSubServiceTypeSelected: false,\r\n isShowAttchmentDrawer: false,\r\n parentId: '',\r\n childJobTypeId: '',\r\n subChildJobTypeId: '',\r\n jobNumber: '',\r\n jobOverViewUrl: '',\r\n isPropertyOwner: (localStorage.userType == 5) ? true : false,\r\n isShowInviteTradeDrawer: false,\r\n budgetAmount: 0,\r\n isPropertySelected: false,\r\n title: '',\r\n isLoadingTroubleshootingGuide: false,\r\n troubleShootingGuideDetails: {\r\n troubleshootGuideId: '',\r\n troubleshootGuide: '',\r\n aiPoweredTroubleshootGuide: [],\r\n primaryJobTypeId: '',\r\n secondaryJobTypeId: ''\r\n },\r\n isAIPoweredTroubleshootRequested: false,\r\n isAlternativeAITroubleshootGuideRequested: false,\r\n aiPoweredTroubleshootResultsEmpty: false,\r\n isSkipTroubleshootGuideLoading: false,\r\n primaryButtonStyle: (this.props.customStyle && this.props.customStyle.primaryButtonStyle) ? this.props.customStyle.primaryButtonStyle : {\r\n color: ''\r\n },\r\n secondaryButtonStyle: (this.props.customStyle && this.props.customStyle.secondaryButtonStyle) ? this.props.customStyle.secondaryButtonStyle : {\r\n color: ''\r\n },\r\n optionsStyle: (this.props.customStyle && this.props.customStyle.optionsStyle) ? this.props.customStyle.optionsStyle : {\r\n color: ''\r\n },\r\n urgencyLabelStyle: {\r\n \"display\": \"inline-block\"\r\n },\r\n urgencyCheckboxStyle: {\r\n \"height\": \"20px\",\r\n \"width\": \"60px\"\r\n },\r\n isFromBot: (this.props.isFromBot) ? true : false,\r\n isTrackIssue: (this.props.isTrackIssue) ? true : false,\r\n isMaintatanceIssueProvided: false,\r\n isJobPostOrTroubleshootGuideSelected: false,\r\n isDraftJob: false,\r\n tradeeCount: 0,\r\n jobTypeTags: [],\r\n isLoadingJobTypeTags: false,\r\n jobAssignTags: [],\r\n selectedComponent: '',\r\n selectedGoogleImage: [],\r\n selectedFeatureComponent: [],\r\n previousStep: 0,\r\n chatbotSetting: this.props.chatbotSetting ? this.props.chatbotSetting : {\r\n hideQandABot: false,\r\n hideCheckRentalStatus: false,\r\n hideKeyCollectionOptions: false,\r\n hideTroubleshootGuide: false,\r\n enableAIPoweredTroubleshootGuide: false,\r\n enableDraftJobFeature: false\r\n },\r\n maintenanceTroubleshootGuideId: null,\r\n propertyType: \"Residential\",\r\n actionValue: 0\r\n }\r\n\r\n componentDidMount() {\r\n var normalFlow = [[0, \"selectProperty\"], [1, \"getMaintenaceIssue\"], [2, \"getMaintenaceTroubleShootGuide\"], [3, \"selectServiceType\"], [4, \"selectUgency\"], [5, \"selectKeyCollectionType\"], [6, \"selectBudget\"], [7, \"getAttachments\"], [8, \"getTrades\"], [9, \"selectSubmitOption\"], [10, \"setResponse\"], [11, \"setTroubleShooteResponse\"]];\r\n setTimeout(() => {\r\n this.GetTenantPropertiesByUserId();\r\n }, 1000);\r\n this.getAvailableServices();\r\n this.GetFrequentlyUsedJobTypes();\r\n this.setState({\r\n jobId: Guid.create().toString(),\r\n jobDetails: {\r\n id: this.state.jobId\r\n }\r\n });\r\n this.getAllAvailableJobTypes();\r\n if (localStorage.userType == 5) {\r\n this.setState({\r\n isJobForMe: true\r\n })\r\n }\r\n if (this.state.chatbotSetting.hideKeyCollectionOptions) {\r\n this.setState({\r\n keyCollectType: this.state.chatbotSetting.defaultKeyCollectionOption\r\n });\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.props.isCustomThemeEnable) {\r\n this.createToggleBtnDynamicStyle();\r\n this.createOkBtnDynamicStyle();\r\n this.createActiveBtnDynamicStyle();\r\n this.attchmentBarStyle();\r\n }\r\n }\r\n\r\n applyTranslation(texts, sourceLng, targetLng) {\r\n const requestModel = {\r\n text: texts,\r\n targetCode: (targetLng == \"en-US\" || targetLng ==\"en-GB\") ? \"en\" : targetLng,\r\n sourceCode: sourceLng\r\n };\r\n\r\n return translateService.translate(requestModel);\r\n }\r\n\r\n createToggleBtnDynamicStyle() {\r\n const color = this.props.customStyle.optionsStyle.color;\r\n const border = this.props.customStyle.optionsStyle.border;\r\n let labelInsideToggleGroup = document.querySelectorAll('label.btn');\r\n\r\n for (var i = 0; i < labelInsideToggleGroup.length; i++) {\r\n labelInsideToggleGroup[i].style.color = color;\r\n labelInsideToggleGroup[i].style.border = border;\r\n labelInsideToggleGroup[i].style.background = '';\r\n }\r\n }\r\n createOkBtnDynamicStyle() {\r\n const color = this.props.customStyle.optionsStyle.color;\r\n let okIcons = document.querySelectorAll('span.ba-icn-ok');\r\n\r\n for (var i = 0; i < okIcons.length; i++) {\r\n okIcons[i].style.background = color;\r\n }\r\n }\r\n createActiveBtnDynamicStyle() {\r\n const color = this.props.customStyle.optionsStyle.activeBackground;\r\n let active = document.querySelectorAll('label.btn.active');\r\n for (var i = 0; i < active.length; i++) {\r\n active[i].style.background = color;\r\n }\r\n }\r\n attchmentBarStyle() {\r\n const color = this.props.customStyle.optionsStyle.color;\r\n const border = this.props.customStyle.optionsStyle.border;\r\n let label = document.querySelector('.rich-control');\r\n if (label) {\r\n label.querySelector('label').style.color = color;\r\n }\r\n let boader = document.querySelector('div.form-control.rich-control');\r\n if (boader) {\r\n boader.style.border = border;\r\n }\r\n }\r\n\r\n //get data\r\n\r\n getJobDetailsByJobId = jobId => {\r\n const userId = localStorage.getItem(\"userId\");\r\n this.setState({ isJobDetailsLoading: true })\r\n if (jobId) {\r\n try {\r\n AXIOS.GET(`tenant-api/job?jobId=${jobId}&userId=${userId}`).then(\r\n data => {\r\n //need to set jobdetails to state\r\n this.setState({});\r\n }\r\n )\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n };\r\n\r\n\r\n getOrganizationSettings(organizationId) {\r\n settingsService.getOrganizationSettingsByOrgId(organizationId)\r\n .then((res) => {\r\n this.setState({\r\n isMandatoryToUploadFiles: res.organizationSettingsModel.allowTenantsToImageAttachmentFeatureForTheJobposting,\r\n isRestrictKeyCollectionForResidentialProperties: res.organizationSettingsModel.isRestrictKeyCollectionForResidentialProperties,\r\n allowTenantsToSeeMatchingTrades: res.organizationSettingsModel.allowTenantsToSeeMatchingTrades,\r\n isEnableSuggestingImage: res.organizationSettingsModel.isEnableSuggestingImage,\r\n isEnableIssueTag: res.organizationSettingsModel.isEnableIssueTag,\r\n })\r\n\r\n })\r\n\r\n }\r\n\r\n GetTenantPropertiesByUserId = () => {\r\n let none = [{ propertyId: 0, propertyName: '--None--', suburbId: '', location: '', address: '', propertyType: 'Residential' }];\r\n\r\n this.setState({ isPropertiesLoading: true });\r\n let properties;\r\n let propertyNames = [];\r\n const { i18n } = this.props;\r\n\r\n propertyService.GetTenantPropertiesByUserId()\r\n .then((res) => {\r\n properties = res.properties;\r\n if (res.properties.length > 0) {\r\n\r\n properties.forEach(x => {\r\n propertyNames.push(x.address ? x.address : \" \");\r\n });\r\n if (this.state.isFromBot) {\r\n this.applyTranslation(([propertyNames]), \"en\", i18n.language).then((trans) => {\r\n if (trans.length > 0) {\r\n trans.forEach((x, i) => {\r\n properties[i].address = trans[i];\r\n });\r\n }\r\n\r\n this.setState({\r\n propertyList: properties,\r\n propertyId: properties[0].propertyId\r\n });\r\n this.getPropertyDetailsByPropertyId(properties[0].propertyId);\r\n this.setState({ isPropertiesLoading: false });\r\n });\r\n }\r\n else {\r\n this.setState({\r\n propertyList: properties,\r\n propertyId: properties[0].propertyId,\r\n isCurrentTenant:properties[0].isCurrentTenant\r\n });\r\n if (localStorage.userType != 5) {\r\n this.getPropertyDetailsByPropertyId(properties[0].propertyId);\r\n }\r\n this.setState({ isPropertiesLoading: false });\r\n }\r\n this.handlePropertyChange(properties[0].propertyId);\r\n } else {\r\n this.setState({\r\n propertyList: [],\r\n propertyId: 0\r\n });\r\n this.onChangeJobType(1);\r\n }\r\n });\r\n }\r\n\r\n getAvailableServices = () => {\r\n try {\r\n this.setState({ isLoading: true })\r\n AXIOS.GET(`tenant-api/available-job-types?userId=${localStorage.getItem('userId')}`)\r\n .then(dataJson => {\r\n this.setState({ isLoading: false })\r\n this.setState({ availableServicesDetails: dataJson });\r\n this.setState({ availableServices: dataJson });\r\n let formData = this.state.formData;\r\n formData.childJobTypeId = '';\r\n formData.childJobType = '';\r\n this.setState({ formData: formData });\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n GetFrequentlyUsedJobTypes = () => {\r\n try {\r\n let jobTypesLabels = [];\r\n let data;\r\n const { i18n } = this.props;\r\n if (this.state.isFromBot) {\r\n jobService.GetFrequentlyUsedJobTypes()\r\n .then(result => {\r\n data = result;\r\n jobTypesLabels = data.map(x => x.label);\r\n return this.applyTranslation((jobTypesLabels), \"en\", i18n.language);\r\n\r\n }).then((trans) => {\r\n if (trans.length > 0) {\r\n trans.forEach((x, i) => {\r\n data[i].label = trans[i];\r\n });\r\n }\r\n this.setState({ frequentlyUsedServices: data });\r\n })\r\n }\r\n else {\r\n jobService.GetFrequentlyUsedJobTypes()\r\n .then(data => {\r\n this.setState({ frequentlyUsedServices: data });\r\n })\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n getAllAvailableJobTypes() {\r\n let jobTypes = this.props.jobTypes;\r\n let parents = _.map(jobTypes, m => m.parentJobType);\r\n const parentJobTypes = _.filter(parents, f => f.parentRef === null);\r\n this.setState({ parentJobTypes: parentJobTypes });\r\n }\r\n\r\n getPropertyDetailsByPropertyId = (propertyId) => {\r\n const selectedProperty = this.state.propertyList.filter(a => a.propertyId == propertyId);\r\n if (selectedProperty && selectedProperty.length > 0 && selectedProperty[0].propertyId != null) {\r\n this.setState({\r\n propertyId: propertyId,\r\n //locationDetails: {},\r\n formData: {\r\n address: selectedProperty[0].address,\r\n location: selectedProperty[0].location,\r\n propertyId: selectedProperty[0].propertyId,\r\n propertyName: selectedProperty[0].propertyName,\r\n suburbId: selectedProperty[0].suburbId,\r\n propertyType: selectedProperty[0].propertyType\r\n },\r\n locationDetails: selectedProperty[0],\r\n jobForMe: {\r\n propertyType: selectedProperty[0].propertyType,\r\n address: selectedProperty[0].address,\r\n latitude: selectedProperty[0].latitude,\r\n location: selectedProperty[0].location,\r\n longitude: selectedProperty[0].longitude,\r\n placeId: selectedProperty[0].placeId,\r\n suburbId: selectedProperty[0].suburbId,\r\n },\r\n });\r\n this.getOrganizationSettings(selectedProperty[0].orgnizationId);\r\n } else {\r\n this.setState({\r\n propertyId: null,\r\n locationDetails: {},\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: null,\r\n propertyName: '',\r\n suburbId: null,\r\n propertyType: ''\r\n }\r\n });\r\n }\r\n setTimeout(() => {\r\n if (this.state.isJobForMe == 1) {\r\n this.setState({ keyCollectType: 1 });\r\n }\r\n }, 500);\r\n }\r\n\r\n onChangeJobType = (value) => {\r\n if (value === 1 && localStorage.userType == 4) {\r\n this.setState({ isJobForMeText:

You (tenant) will be paying for this job and are responsible

for all costs involved.

This job is not being sent to your property manager.

});\r\n } else {\r\n this.setState({ isJobForMeText: '' });\r\n }\r\n\r\n this.setState({\r\n isJobForMe: (value === 1) ? true : false,\r\n jobForMe: {\r\n propertyType: '',\r\n address: '',\r\n latitude: '',\r\n location: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n budget: ''\r\n },\r\n formData: {\r\n propertyId: \"\"\r\n }\r\n });\r\n }\r\n\r\n onKeyCollectionChange = (event) => {\r\n this.setState({\r\n keyCollectType: event\r\n });\r\n }\r\n\r\n handlePropertyChange = (props) => {\r\n this.setState({ property: props });\r\n this.getPropertyDetailsByPropertyId(props);\r\n }\r\n\r\n\r\n\r\n handleOnChangeJobDescription = (value) => {\r\n\r\n let jobforMe = this.state.jobForMe;\r\n jobforMe.jobDescription = this.jobDescription.current.value;\r\n this.setState({ jobForMe: jobforMe });\r\n\r\n\r\n let formdata = this.state.formData;\r\n const typedDescription = this.jobDescription.current.value;\r\n formdata.jobDescription = typedDescription;\r\n formdata.jobDescriptionEng = typedDescription;\r\n this.setState({\r\n formdata: formdata,\r\n isMaintatanceIssueProvided: true\r\n });\r\n\r\n }\r\n\r\n handleResultSelect = (e, { result }) => {\r\n this.setState({ value: result.label })\r\n this.getChildJobTypes(result.id);\r\n }\r\n handleSearchChange = (e, { value }) => {\r\n this.setState({ filteredResults: [], value });\r\n if (value.length > 2) {\r\n this.setState({ isLoading: true })\r\n setTimeout(() => {\r\n document.querySelector('.jobpost-wizard .auto-complete').classList.remove(\"hide-results\");\r\n this.setState({\r\n isLoading: false,\r\n filteredResults: this.state.parentJobTypes.filter(suggestion => suggestion.label.toLowerCase().indexOf(this.state.value.toLowerCase()) > -1)\r\n })\r\n }, 300)\r\n } else {\r\n document.querySelector('.jobpost-wizard .auto-complete').classList.add(\"hide-results\");\r\n }\r\n }\r\n\r\n resultRenderer = (event) => {\r\n return \r\n }\r\n\r\n\r\n\r\n\r\n\r\n onSelectFrequentlyUsedJobTypes = (event) => {\r\n try {\r\n this.setState({ parentId: event });\r\n this.setState({ isServiceTypeSelected: true });\r\n this.getChildJobTypes(event);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n showHideMoreService = () => {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: '',\r\n }\r\n this.setState({\r\n isShowMoreServices: !this.state.isShowMoreServices,\r\n selectedService: {},\r\n secondaryJobTypes: [],\r\n subChildJobTypeId: '',\r\n formData: formData2,\r\n isServiceTypeSelected: true\r\n })\r\n }\r\n\r\n getChildJobTypes(parentId) {\r\n let jobTypes = this.props.jobTypes;\r\n let selectedNode = _.find(jobTypes, f => f.parentJobType.id === parentId);\r\n\r\n if (this.state.selectedServiceType && this.state.selectedServiceType.parentJobType && _.find(selectedNode.childJobTypes, f => f.id === this.state.selectedServiceType.parentJobType.id)) {\r\n this.setState({\r\n primaryJobTypes: selectedNode.childJobTypes,\r\n selectedService: selectedNode\r\n });\r\n this.setState({ childJobTypeId: selectedNode });\r\n } else {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: '',\r\n\r\n }\r\n this.setState({\r\n primaryJobTypes: selectedNode.childJobTypes,\r\n selectedService: selectedNode,\r\n secondaryJobTypes: [],\r\n selectedServiceType: {\r\n parentJobType: { id: '' }\r\n },\r\n formData: formData2\r\n });\r\n }\r\n }\r\n\r\n getSubChildJobTypes(parentId) {\r\n\r\n this.setState({ childJobTypeId: parentId });\r\n this.setState({ isSubServiceTypeSelected: true });\r\n let jobTypes = this.props.jobTypes;\r\n let selectedNode = _.find(jobTypes, f => f.parentJobType.id === parentId);\r\n\r\n if (selectedNode == undefined) {\r\n let selectedServiceType = {\r\n childJobTypes: [],\r\n parentJobType: _.find(this.state.primaryJobTypes, f => f.id === parentId)\r\n }\r\n let formData1 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: ''\r\n };\r\n this.setState({\r\n secondaryJobTypes: [],\r\n selectedServiceType: selectedServiceType,\r\n formData: formData1\r\n });\r\n\r\n } else {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: ''\r\n };\r\n this.setState({\r\n secondaryJobTypes: selectedNode.childJobTypes,\r\n selectedServiceType: selectedNode,\r\n formData: formData2\r\n });\r\n }\r\n\r\n }\r\n\r\n createTypeOfServicesChildButtons = (props) => {\r\n if (this.state.secondaryJobTypes.length > 0) {\r\n return (\r\n <>\r\n
\r\n

{this.state.selectedServiceType.parentJobType.description}*

\r\n \r\n \r\n {this.state.secondaryJobTypes.map((jbType, index) => {\r\n return {jbType.label};\r\n })}\r\n \r\n \r\n
\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n\r\n }\r\n\r\n onChangeChildTypeOfServices = (input) => {\r\n this.setState({ subChildJobTypeId: input });\r\n const childJobType = this.state.selectedServiceType.childJobTypes.filter(a => a.id === input)[0];\r\n let formData = this.state.formData;\r\n formData.childJobTypeId = childJobType.id;\r\n formData.childJobType = childJobType.title;\r\n this.setState({ formData: formData });\r\n }\r\n\r\n createTypeOfServicesButtons = (props) => {\r\n const { t } = this.props;\r\n let isServiceTypeSelected = this.state.isServiceTypeSelected;\r\n if (this.state.selectedService.childJobTypes) {\r\n return (\r\n <>\r\n
\r\n {(isServiceTypeSelected) ?\r\n
\r\n

{this.state.isFromBot ? t('pj_lbl_select_sub_type') : 'Please select the type of subservice you require.'}*

\r\n

{this.state.isFromBot ? t('pj_lbl_choose_an_option') : 'choose an option'}

\r\n
\r\n\r\n : ''}\r\n\r\n \r\n { this.getSubChildJobTypes(event); }}>\r\n {this.state.selectedService.childJobTypes.map((jbType, index) => {\r\n return {jbType.label};\r\n })}\r\n \r\n \r\n
\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n }\r\n\r\n onChangeTypeOfServices = (event) => {\r\n\r\n try {\r\n this.setState({ isLoading: true })\r\n AXIOS.GET(`tenant-api/job-sub-types?parentRef=${event}`)\r\n .then(dataJson => {\r\n this.setState({ isLoading: false })\r\n this.setState({ selectedServiceType: dataJson });\r\n let formData = this.state.formData;\r\n formData.childJobTypeId = '';\r\n formData.childJobType = '';\r\n this.setState({ formData: formData });\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n handleJobUrgencyOnChange = (event, props) => {\r\n let isUrgent = (props.value == 1) ? true : false;\r\n this.setState({ jobUrgency: props.value, jobUrgencyCheckbox: isUrgent });\r\n }\r\n\r\n GetJobUrgency = () => {\r\n const { t } = this.props;\r\n return this.state.jobUrgency == -1 ? {t('editjob_lbl13')} : this.state.jobUrgency == 1 ? {t('editjob_lbl11')} : {t('editjob_lbl12')};\r\n }\r\n\r\n closeDisclaimer = () => {\r\n this.setState({\r\n showDisclaimerDrawer: false,\r\n });\r\n }\r\n\r\n getTroubleShoutingGuide(index) {\r\n if (this.state.chatbotSetting.enableAIPoweredTroubleshootGuide) {\r\n this.getAIPoweredTroubleShoutingGuide(index);\r\n } else {\r\n this.getDefaultTroubleShoutingGuide(index);\r\n }\r\n }\r\n\r\n getDefaultTroubleShoutingGuide(index) {\r\n const { i18n } = this.props;\r\n this.setState({\r\n isLoadingTroubleshootingGuide: true\r\n });\r\n jobService.GetTroubleShootingGuide(this.state.formData.propertyId, this.state.formData.jobDescriptionEng).then(res => {\r\n if (res.responseCode == 12 && res.troubleshootGuide != null) {\r\n if (i18n.language != \"en\" && !i18n.language.toString().includes(\"en\")) {\r\n this.applyTranslation(res.troubleshootGuide, \"en\", i18n.language).then((trans) => {\r\n res.troubleshootGuide = trans[0];\r\n this.setState({\r\n troubleShootingGuideDetails: res,\r\n maintenanceTroubleshootGuideId: res.troubleshootGuideId,\r\n isLoadingTroubleshootingGuide: false\r\n });\r\n });\r\n } else {\r\n this.setState({\r\n troubleShootingGuideDetails: res,\r\n maintenanceTroubleshootGuideId: res.troubleshootGuideId,\r\n isLoadingTroubleshootingGuide: false\r\n });\r\n }\r\n\r\n if (this.state.chatbotSetting.hideTroubleshootGuide) {\r\n this.continueJobPosting(index + 1);\r\n }\r\n\r\n } else {\r\n this.setState({\r\n troubleShootingGuideDetails: res,\r\n isLoadingTroubleshootingGuide: false\r\n });\r\n this.continueJobPosting(index + 1);\r\n }\r\n });\r\n }\r\n\r\n getAIPoweredTroubleShoutingGuide(index) {\r\n const { i18n } = this.props;\r\n this.setState({\r\n isLoadingTroubleshootingGuide: true\r\n });\r\n jobService.GetAIPoweredTroubleShootingGuide(this.state.formData.propertyId, this.state.formData.jobDescriptionEng).then(res => {\r\n if (res.success == true && res.contents != null) {\r\n if (i18n.language != \"en\" && !i18n.language.toString().includes(\"en\")) {\r\n this.applyTranslation(res.contents[0], \"en\", i18n.language).then((trans) => {\r\n res.contents[0] = trans[0];\r\n\r\n let troubleShootingGuideDetails = this.state.troubleShootingGuideDetails;\r\n troubleShootingGuideDetails.aiPoweredTroubleshootGuide = res.contents;\r\n troubleShootingGuideDetails.primaryJobTypeId = res.primaryJobTypeId;\r\n troubleShootingGuideDetails.secondaryJobTypeId = res.secondaryJobTypeId;\r\n\r\n this.setState({\r\n troubleShootingGuideDetails: troubleShootingGuideDetails,\r\n aiPoweredTroubleshootResultsEmpty: false,\r\n isLoadingTroubleshootingGuide: false\r\n });\r\n });\r\n } else {\r\n let troubleShootingGuideDetails = this.state.troubleShootingGuideDetails;\r\n troubleShootingGuideDetails.aiPoweredTroubleshootGuide = res.contents;\r\n troubleShootingGuideDetails.primaryJobTypeId = res.primaryJobTypeId;\r\n troubleShootingGuideDetails.secondaryJobTypeId = res.secondaryJobTypeId;\r\n\r\n this.setState({\r\n troubleShootingGuideDetails: troubleShootingGuideDetails,\r\n aiPoweredTroubleshootResultsEmpty: false,\r\n isLoadingTroubleshootingGuide: false\r\n });\r\n }\r\n } else {\r\n let troubleShootingGuideDetails = this.state.troubleShootingGuideDetails;\r\n troubleShootingGuideDetails.primaryJobTypeId = res.primaryJobTypeId;\r\n troubleShootingGuideDetails.secondaryJobTypeId = res.secondaryJobTypeId;\r\n\r\n this.setState({\r\n troubleShootingGuideDetails: troubleShootingGuideDetails,\r\n aiPoweredTroubleshootResultsEmpty: true,\r\n isLoadingTroubleshootingGuide: false\r\n });\r\n }\r\n });\r\n }\r\n\r\n directToAIPoweredTroubleShootGuide = () => {\r\n this.setState({\r\n isAIPoweredTroubleshootRequested: true\r\n });\r\n }\r\n\r\n showAlternativeTroubleshootResults = (index) => {\r\n this.setState({ isAlternativeAITroubleshootGuideRequested: true });\r\n this.getAIPoweredTroubleShoutingGuide(index);\r\n }\r\n\r\n\r\n render() {\r\n const currentStepIndex = this.state.currentStep;\r\n let step = this.showCurrentStep(currentStepIndex);\r\n let backToHomeModal = this.backToHomeModal();\r\n return (\r\n
\r\n
\r\n {step}\r\n
\r\n {(this.state.showBackToHomeConfirmation == true) ?\r\n
{backToHomeModal}
: ''\r\n }\r\n {(this.state.showDisclaimerDrawer == true) ?\r\n this.postJob(event)}\r\n onCloseDisclaimer={() => this.closeDisclaimer()}\r\n isFromBot={this.state.isFromBot}\r\n > : ''\r\n }\r\n );\r\n }\r\n\r\n showCurrentStep = (index) => { \r\n let currentStep = this.state.stepFlow[index][1];\r\n switch (currentStep) {\r\n case \"selectProperty\":\r\n return this.selectPropertyStep(index);\r\n case \"getMaintenaceIssue\": \r\n return this.getMaintenaceIssue(index);\r\n case \"getMaintenaceTroubleShootGuide\":\r\n if (this.state.chatbotSetting.enableAIPoweredTroubleshootGuide) {\r\n return this.getAIPoweredTroubleShootGuide(index);\r\n } else if (!this.state.chatbotSetting.hideTroubleshootGuide) {\r\n return this.getMaintenaceTroubleShootGuide(index);\r\n }\r\n case \"getAttachments\":\r\n return this.getAttachments(index);\r\n case \"selectPrePostSummary\":\r\n return this.selectPrePostSummary(index);\r\n case \"setResponse\":\r\n return this.setResponse(index);\r\n case \"setTroubleShooteResponse\":\r\n return this.setTroubleShooteResponse();\r\n case \"selectServiceType\":\r\n return this.selectServiceType(index);\r\n default:\r\n return this.nextStep(index);\r\n }\r\n }\r\n\r\n selectPropertyStep = (index) => {\r\n const { propertyList, propertyId, isJobForMe, jobForMe, formData, isPropertyOwner } = this.state;\r\n const forMeText = this.state.isJobForMeText;\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

{t('new_ui_pj_lbl_prop_select')}

\r\n
\r\n\r\n
\r\n {(this.state.isPropertiesLoading) ?
: ''}\r\n \r\n {(!this.state.isPropertiesLoading) ? \r\n 0 ) ? propertyList[0].propertyId : \"\"}\r\n onChange={(value) => { this.handlePropertyChange(value) }}>\r\n {propertyList.map((a, index) => {\r\n return {a.address}\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 getMaintenaceIssue = (index) => {\r\n const { jobUrgency, jobUrgencyList } = this.state;\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n

{t('new_ui_pj_hdr_job_describe')}

\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n { return { key: index, text: a.value, value: a.jobUrgency }; })}\r\n placeholder='Choose job Priority'\r\n onChange={this.handleJobUrgencyOnChange}\r\n />\r\n {(this.state.jobUrgency==1) ?

{t('new_ui_pj_lbl_urgent_notice')}

: ''}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
);\r\n }\r\n\r\n getMaintenaceTroubleShootGuide = (index) => {\r\n const { troubleShootingGuideDetails, isLoadingTroubleshootingGuide } = this.state;\r\n const { t } = this.props;\r\n\r\n return (\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n

{t('new_ui_pj_hdr_troubleshoot_steps')}

\r\n
\r\n {isLoadingTroubleshootingGuide ?
\r\n : (
\r\n \r\n

{t('new_ui_pj_lbl_troubleshoot_proceed')}

\r\n\r\n
\r\n
)}\r\n
\r\n
\r\n
\r\n {!isLoadingTroubleshootingGuide && (
\r\n
\r\n \r\n \r\n
\r\n
)}\r\n
);\r\n }\r\n\r\n getAIPoweredTroubleShootGuide = (index) => {\r\n const { troubleShootingGuideDetails, isLoadingTroubleshootingGuide, isAIPoweredTroubleshootRequested, isAlternativeAITroubleshootGuideRequested, aiPoweredTroubleshootResultsEmpty } = this.state;\r\n const { t } = this.props;\r\n\r\n return (\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n {!isAIPoweredTroubleshootRequested ?\r\n isLoadingTroubleshootingGuide ?
\r\n \r\n
:
\r\n
\r\n
{t('new_ui_pj_hdr_ai_troubleshoot_confirmation')}
\r\n
\r\n
\r\n \r\n \r\n
\r\n
:
\r\n

{t('new_ui_pj_hdr_troubleshoot_steps')}

\r\n
\r\n {isLoadingTroubleshootingGuide ?
\r\n : (aiPoweredTroubleshootResultsEmpty ?
\r\n
\r\n \r\n
{t('new_ui_pj_lbl_ai_troubleshoot_no_response')}
\r\n
\r\n
:
\r\n\r\n

{t('new_ui_pj_lbl_troubleshoot_proceed')}

\r\n\r\n {troubleShootingGuideDetails.aiPoweredTroubleshootGuide.map((a, index) => {\r\n return
\r\n
\r\n

{a.split('\\n').map(str =>

{str}

)}

\r\n
\r\n })\r\n }\r\n
)}\r\n
\r\n
}\r\n
\r\n {!isLoadingTroubleshootingGuide && isAIPoweredTroubleshootRequested && (
\r\n
\r\n {!isAlternativeAITroubleshootGuideRequested &&\r\n ()\r\n }\r\n \r\n \r\n
\r\n
)}\r\n
);\r\n }\r\n\r\n getAttachments = (index) => {\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {(this.state.attachments.length == 0) ?\r\n
\r\n

{t('new_ui_pj_lbl_attchmnts_notice')}

\r\n
: ''\r\n }\r\n
\r\n
\r\n { this.setState({ attachments: event }) }}\r\n isJobPost={true}\r\n isFromBot={true}\r\n t={t}>\r\n \r\n {(this.state.attachments) ?\r\n : ''\r\n }\r\n
\r\n
\r\n {(!this.state.chatbotSetting.hideKeyCollectionOptions) ?\r\n
\r\n \r\n {(this.state.isRestrictKeyCollectionForResidentialProperties && this.state.formData.propertyType == 'Residential') ?\r\n \r\n this.onKeyCollectionChange(value)} defaultValue={3}>\r\n {t('lbl_propkey_case6')}\r\n \r\n \r\n :\r\n
\r\n \r\n this.onKeyCollectionChange(value)} defaultValue={this.state.keyCollectType}>\r\n {t('lbl_keycollection_option1')}\r\n {t('lbl_keycollection_option2')}\r\n {t('lbl_keycollection_option3')}\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 selectPrePostSummary = (index) => {\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n

{t('new_ui_pj_hdr_job_summary')}

\r\n
\r\n\r\n
\r\n
\r\n
{t('new_ui_pj_lbl_summary_address')}
\r\n
{this.state.formData.address}
\r\n
\r\n
\r\n
{t('new_ui_pj_lbl_summary_description')}
\r\n
{this.state.formData.jobDescription}
\r\n
\r\n {(this.state.attachments) ?\r\n : ''\r\n }\r\n
\r\n
{t('editjob_priority')}
\r\n
{this.GetJobUrgency()}
\r\n
\r\n {(!this.state.chatbotSetting.hideKeyCollectionOptions) ?\r\n
\r\n
{t('new_ui_pj_lbl_summary_key_collection')}
\r\n {(this.state.isRestrictKeyCollectionForResidentialProperties && this.state.formData.propertyType == 'Residential' && this.state.keyCollectType == 3) ?\r\n \r\n
{t('lbl_propkey_case6')}
\r\n \r\n :\r\n
\r\n {(this.state.keyCollectType == 1) ?
{t('lbl_keycollection_option1')}
\r\n : (this.state.keyCollectType == 2) ?
{t('lbl_keycollection_option2')}
\r\n :
{t('lbl_keycollection_option3')}
\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 selectServiceType = (index) => {\r\n const { isLoading, value, propertyList, filteredResults, propertyId, isPropertiesLoading, isJobForMe, jobForMe } = this.state\r\n let serviceTypes = this.createTypeOfServicesButtons();\r\n let serviceTypeChild = this.createTypeOfServicesChildButtons();\r\n const { t } = this.props;\r\n if (this.state.parentId) {\r\n this.addParentJobTypeToFrequentlyUsedServices(this.state.parentId);\r\n }\r\n return (\r\n <>\r\n
\r\n
\r\n {(this.state.isShowMoreServices) ?\r\n
\r\n
\r\n

Type the service that you need.

\r\n

( eg. Electrician )

\r\n
\r\n
\r\n \r\n \r\n
\r\n
:\r\n \r\n \r\n\r\n }\r\n {serviceTypes}\r\n {serviceTypeChild}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n setResponse = (index) => {\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n {/* style={{ color: (this.props.customStyle.brand) ? this.props.customStyle.brand : '' }} */}\r\n \r\n
\r\n
\r\n

{t('new_ui_pj_hdr_job_response')}

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

{t('new_ui_pj_lbl_job_response_ref')} {this.state.jobNumber}

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

{t('new_ui_pj_lbl_job_response_notice')}

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

{t('new_ui_pj_lbl_job_response_nxt_step')}

\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
);\r\n }\r\n nextStep = (index) => {\r\n const { i18n } = this.props;\r\n var currentStep = index;\r\n if (this.validate(index)) {\r\n if (index == 1) {\r\n let formdata = this.state.formData;\r\n const typedDescription = this.jobDescription.current.value;\r\n if (typedDescription.length > 0) {\r\n if (i18n.language != 'en' && !i18n.language.toString().includes(\"en\")) {\r\n this.applyTranslation(typedDescription, i18n.language, 'en').then((trans) => {\r\n formdata.jobDescription = typedDescription;\r\n formdata.jobDescriptionEng = trans[0];\r\n this.setState({\r\n formdata: formdata,\r\n isMaintatanceIssueProvided: true\r\n });\r\n this.getTroubleShoutingGuide(index);\r\n });\r\n } else {\r\n this.getTroubleShoutingGuide(index);\r\n }\r\n }\r\n\r\n formdata.issueAreaInProperty = \"\";\r\n formdata.issueAreaInPropertyEng = \"\";\r\n this.setState({ formdata: formdata });\r\n\r\n if (!this.state.chatbotSetting.hideTroubleshootGuide || this.state.chatbotSetting.enableAIPoweredTroubleshootGuide) {\r\n currentStep = (index + 1);\r\n }\r\n }\r\n else {\r\n currentStep = (index + 1);\r\n\r\n }\r\n\r\n\r\n } else {\r\n return false;\r\n }\r\n \r\n this.setState({ currentStep: currentStep, previousStep: index });\r\n }\r\n\r\n previousStep = (index) => {\r\n var currentStep = index;\r\n if (index == 3) {\r\n currentStep = (index - 2);\r\n }\r\n else {\r\n currentStep = (index - 1);\r\n }\r\n\r\n if (index == 2 || index == 3) {\r\n this.setState({\r\n isAIPoweredTroubleshootRequested: false,\r\n isAlternativeAITroubleshootGuideRequested: false\r\n });\r\n }\r\n \r\n this.setState({ currentStep: currentStep, previousStep: index });\r\n }\r\n\r\n onSubmitJob = (workflow) => {\r\n const { t } = this.props; \r\n if (workflow == 1) {\r\n if (workflow == 1) {\r\n this.setState({ isDraftJob: true });\r\n }\r\n this.loadDisclaimer(workflow);\r\n } else {\r\n if (!this.state.isJobForMe && this.state.isMandatoryToUploadFiles && (this.state.attachments == [] || this.state.attachments.length == 0)) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_attachments_empty') : 'Attachments are required.');\r\n return false;\r\n } else {\r\n this.loadDisclaimer(workflow);\r\n }\r\n }\r\n }\r\n\r\n loadDisclaimer = (workflow) => {\r\n this.setState({\r\n isLoading: true\r\n });\r\n propertyService.GetDisclaimerByPropertyId(this.state.formData.propertyId).then(res => {\r\n this.setState({\r\n isLoading: false\r\n });\r\n if (res !== null && res !== '') {\r\n this.setState({\r\n showDisclaimerDrawer: true,\r\n disclamimerText: res,\r\n jobPostWorkflowStatus: workflow,\r\n actionValue :0\r\n });\r\n } else {\r\n this.postJob(workflow);\r\n }\r\n });\r\n }\r\n\r\n validate = (index) => {\r\n const { tradeeCount, jobBudget, budgetAmount, suburbId, isSelectedOnDemand,\r\n inviteToProviders, isJobForMe, selectedTradees, selectedService,\r\n selectedServiceType, formData } = this.state\r\n let currentStep = this.state.stepFlow[index][1];\r\n const { t } = this.props;\r\n switch (currentStep) {\r\n case \"selectProperty\":\r\n if (!this.state.property) {\r\n this.notifyError(t('pj_error_no_property_selected'));\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n case \"getMaintenaceIssue\":\r\n if ((this.state.formData.jobDescription == '' || this.state.formData.jobDescription == undefined) && (!this.jobDescription.current.value || this.jobDescription.current.value == '')) {\r\n this.notifyError(t('pj_error_no_jd'));\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n case \"getAttachments\":\r\n if (this.state.isMandatoryToUploadFiles && this.state.attachments.length == 0) {\r\n this.notifyError(t('pj_error_attachments_empty'));\r\n return false;\r\n } else if (this.state.keyCollectType == undefined || this.state.keyCollectType == '') {\r\n this.notifyError(t('pj_error_key_coll_method_not_selected'));\r\n return false;\r\n }else{\r\n return true;\r\n }\r\n case \"selectServiceType\":\r\n if (selectedService && selectedService.parentJobType) {\r\n if (selectedServiceType && selectedServiceType.parentJobType && selectedServiceType.parentJobType.id != '') {\r\n if (selectedServiceType.childJobTypes.length > 0 && (!formData.childJobType || formData.childJobType === '')) {\r\n var errorMessage = this.state.isFromBot ? t('pj_error_child_job_type_not_selected') : 'Please select -parentTypeDesc- that you need.';\r\n //errorMessage.replace('-parentType-', selectedServiceType.parentJobType.description.replace(' ? ', ''));\r\n this.notifyError(errorMessage);\r\n return false;\r\n }\r\n } else {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_parent_job_type_not_selected') : 'Please select a type of service.');\r\n return false;\r\n }\r\n } else if (!selectedService.parentJobType) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_service_not_selected') : 'Please select a service.');\r\n return false;\r\n }\r\n return true;\r\n case \"setResponse\":\r\n return this.setResponse(index);\r\n\r\n }\r\n }\r\n\r\n postJob = (workflow) => {\r\n const workflowId = workflow;\r\n let jobDetails = {};\r\n const { address, budget, latitude, location, longitude, placeId, propertyType, suburbId } = this.state.jobForMe;\r\n const { selectedService, selectedServiceType, formData, jobBudget, selectedTradees, isSelectedOnDemand, selectedQuoteLimit, budgetAmount, jobAssignTags, selectedComponent, selectedFeatureComponent } = this.state;\r\n if (this.state.isJobForMe == true) {\r\n\r\n jobDetails.propertyId = null;\r\n jobDetails.suburbId = suburbId;\r\n jobDetails.address = address;\r\n jobDetails.location = location;\r\n jobDetails.jobPropertyTypes = propertyType;\r\n if (this.state.jobForMe && this.state.jobForMe.propertyType && this.state.jobForMe.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n else if (this.state.jobForMe && this.state.jobForMe.propertyType && this.state.jobForMe.propertyType === \"Commercial\") {\r\n jobDetails.propertyTypeId = 1;\r\n } else {\r\n if (this.state.propertyType && this.state.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n } else {\r\n jobDetails.propertyTypeId = 1;\r\n }\r\n }\r\n jobDetails.budgetId = parseInt(jobBudget);\r\n if (jobBudget == '-999') {\r\n jobDetails.budgetAmount = parseFloat(budgetAmount);\r\n }\r\n if (isSelectedOnDemand) {\r\n jobDetails.targetedTradeeOption = 4;\r\n jobDetails.sendInvitationtoAll = false;\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n let tradees = [];\r\n selectedTradees.forEach(element => {\r\n tradees.push({\r\n isAssigned: true,\r\n userId: element.userId,\r\n name: element.name,\r\n email: element.email,\r\n firstName: element.name,\r\n lastName: element.name,\r\n });\r\n });\r\n jobDetails.tradees = tradees;\r\n } else {\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n jobDetails.targetedTradeeOption = 0;\r\n jobDetails.sendInvitationtoAll = true;\r\n jobDetails.tradees = [];\r\n }\r\n } else {\r\n if (this.state.formData.propertyId == 0 || this.state.formData.propertyId == undefined) {\r\n jobDetails.propertyId = null;\r\n jobDetails.suburbId = this.state.locationDetails.suburbId;\r\n jobDetails.address = this.state.locationDetails.address;\r\n jobDetails.jobPropertyTypes = this.refs.jobPropertyTypes.props.value;\r\n if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n } else if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Commercial\") {\r\n jobDetails.propertyTypeId = 1;\r\n }\r\n else {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n } else {\r\n jobDetails.propertyId = this.state.formData.propertyId;\r\n jobDetails.address = this.state.formData.address;\r\n jobDetails.location = this.state.formData.location;\r\n jobDetails.propertyName = this.state.formData.propertyName;\r\n jobDetails.suburbId = this.state.formData.suburbId;\r\n if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n else if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Commercial\") {\r\n jobDetails.propertyTypeId = 1;\r\n } else {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n jobDetails.jobPropertyTypes = this.state.formData.propertyType;\r\n }\r\n jobDetails.propertyKeyCollectType = parseInt(this.state.keyCollectType);\r\n\r\n if (isSelectedOnDemand) {\r\n jobDetails.targetedTradeeOption = 4;\r\n jobDetails.sendInvitationtoAll = false;\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n let tradees = [];\r\n selectedTradees.forEach(element => {\r\n tradees.push({\r\n isAssigned: true,\r\n userId: element.userId,\r\n name: element.name,\r\n email: element.email,\r\n firstName: element.name,\r\n lastName: element.name,\r\n });\r\n });\r\n jobDetails.tradees = tradees;\r\n } else {\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n jobDetails.targetedTradeeOption = 0;\r\n jobDetails.sendInvitationtoAll = true;\r\n jobDetails.tradees = [];\r\n }\r\n }\r\n jobDetails.id = this.state.jobId;\r\n jobDetails.secondaryJobType = this.state.selectedServiceType.parentJobType.id;\r\n jobDetails.secondaryJobTypeDisplay = this.state.selectedServiceType.parentJobType.title;\r\n jobDetails.primaryJobType = this.state.selectedService.parentJobType.id;\r\n jobDetails.primaryJobTypeDisplay = this.state.selectedService.parentJobType.title;\r\n jobDetails.jobPropertyLocks = this.state.propertyLocks.map((item, index) => {\r\n const jobLock = {};\r\n jobLock.jobId = null;\r\n jobLock.propertyLock = {};\r\n jobLock.propertyLock.id = item.id;\r\n jobLock.propertyLock.lockId = item.lockId;\r\n jobLock.propertyLock.propertyId = jobDetails.propertyId;\r\n return jobLock;\r\n });\r\n\r\n if (this.state.formData.childJobTypeId && this.state.formData.childJobTypeId.trim() != \"\") {\r\n jobDetails.jobType = this.state.formData.childJobTypeId;\r\n }\r\n else {\r\n jobDetails.jobType = this.state.selectedServiceType.parentJobType.id;\r\n }\r\n\r\n jobDetails.jobTypeDisplay = this.state.formData.childJobType;\r\n jobDetails.title = this.state.formData.jobDescriptionEng;\r\n jobDetails.description = this.state.formData.jobDescriptionEng;\r\n jobDetails.jobUrgencyId = this.state.jobUrgency;\r\n\r\n jobDetails.dueDate = (!this.state.dueDate) ? null : this.state.dueDate;\r\n // jobDetails.JobUrgencyDisplay = this.refs.jobUrgency.props.value;\r\n jobDetails.jobValidityPeriod = 1;\r\n jobDetails.serviceConsumerId = localStorage.getItem('userId');\r\n\r\n jobDetails.workflowStatusId = workflow === 1 ? 1 : 2;\r\n jobDetails.attachments = this.state.attachments;\r\n if (workflowId == 2) {\r\n jobDetails.isActive = true;\r\n }\r\n if (selectedComponent != '') {\r\n jobDetails.JobPropertyComponentId = selectedComponent;\r\n }\r\n\r\n if (jobAssignTags != undefined && jobAssignTags.length > 0) {\r\n jobDetails.JobAssignTagIds = jobAssignTags;\r\n }\r\n\r\n if (selectedFeatureComponent != undefined && selectedFeatureComponent.length > 0) {\r\n jobDetails.JobPropertyFeatureComponentIds = selectedFeatureComponent;\r\n }\r\n\r\n jobDetails.issueAreaInProperty = (this.state.formData.issueAreaInPropertyEng) ? this.state.formData.issueAreaInPropertyEng : this.state.formData.issueAreaInProperty;\r\n\r\n if (this.state.maintenanceTroubleshootGuideId && this.state.maintenanceTroubleshootGuideId != '') {\r\n jobDetails.maintenanceTroubleshootGuideId = this.state.maintenanceTroubleshootGuideId;\r\n }\r\n if(this.state.isFromBot){\r\n jobDetails.channelId = 12;\r\n jobDetails.includeJobOverViewUrl = true;\r\n }else{\r\n jobDetails.channelId = 1;\r\n }\r\n this.setState({ isJobPosting: true })\r\n try {\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/job-post`, jobDetails, {\r\n 'headers': { 'ClientSecret': AppConfiguration.Setting().ClientSecret ,'ChannelId':jobDetails.channelId}\r\n })\r\n .then(dataJson => {\r\n this.setState({ isJobPosting: false })\r\n const message = workflowId === 1 ? 'drafted' : 'posted'\r\n if (dataJson == 'Request Unauthorized' || dataJson == 'Job creation failed') {\r\n toast.error(`Job is not ${message} successfully. Please try again.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n } else {\r\n toast.success(`Job is ${message} successfully.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.setState({ jobNumber: dataJson.jobNumber });\r\n this.setState({ jobOverViewUrl: dataJson.jobOverViewUrl });\r\n this.setState({ currentStep: 5 });\r\n this.setState({\r\n attachments: [],\r\n value: '',\r\n isShowMoreServices: false,\r\n showDisclaimerDrawer: false,\r\n jobPostWorkflowStatus: 1\r\n });\r\n if (this.state.troubleShootingGuideDetails.troubleshootGuideId != '') {\r\n this.saveTroubleShootResult(false, dataJson.id);\r\n }\r\n }\r\n }, error => {\r\n console.log(error);\r\n this.setState({ isJobPosting: false });\r\n toast.error(`Fail to post the job. Please try again.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n })\r\n )\r\n\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n saveTroubleShootResult = (isResolved = false, jobId = \"\") => {\r\n let troubleShootResult = {};\r\n troubleShootResult.isResolved = isResolved;\r\n troubleShootResult.jobId = jobId;\r\n troubleShootResult.userId = this.state.userId;\r\n troubleShootResult.maintenanceTroubleshootGuideId = this.state.troubleShootingGuideDetails.troubleshootGuideId;\r\n troubleShootResult.description = this.state.formData.jobDescriptionEng;\r\n troubleShootResult.propertyId = this.state.propertyId;\r\n jobService.saveTroubleShootingResult(troubleShootResult).then(response => {\r\n if (response) {\r\n if (isResolved) {\r\n this.setState({ currentStep: (6) });\r\n }\r\n }\r\n });\r\n }\r\n\r\n showTroubleshootSuccessResult = () => { \r\n this.setState({ currentStep: (6) });\r\n }\r\n\r\n skipAIPoweredTroubleshootGuide = (index) => {\r\n if (this.state.isLoadingTroubleshootingGuide) {\r\n this.setState({ isSkipTroubleshootGuideLoading: true });\r\n setInterval(this.skipAIPoweredTroubleshootGuide(index), 1000);\r\n } else {\r\n this.setState({ isSkipTroubleshootGuideLoading: false });\r\n this.continueJobPosting(index);\r\n }\r\n }\r\n\r\n continueJobPosting = (index) => {\r\n let jobTypes = this.props.jobTypes;\r\n this.state.selectedService = jobTypes.find(x => x.parentJobType.id == this.state.troubleShootingGuideDetails.primaryJobTypeId);\r\n this.state.primaryJobTypes = this.state.selectedService.childJobTypes;\r\n this.state.parentId = this.state.troubleShootingGuideDetails.primaryJobTypeId;\r\n this.state.isServiceTypeSelected = true;\r\n this.state.childJobTypeId = this.state.troubleShootingGuideDetails.secondaryJobTypeId;\r\n let selectedNode = _.find(jobTypes, f => f.parentJobType.id === this.state.troubleShootingGuideDetails.secondaryJobTypeId);\r\n if (selectedNode !== undefined) {\r\n this.setSecondaryJobType(selectedNode);\r\n }\r\n else {\r\n this.state.selectedServiceType.parentJobType = this.state.selectedService.childJobTypes.find(x => x.id == this.state.troubleShootingGuideDetails.secondaryJobTypeId);\r\n this.state.selectedServiceType.childJobTypes = [];\r\n }\r\n this.setState({\r\n currentStep: (index + 1),\r\n parentId: this.state.troubleShootingGuideDetails.primaryJobTypeId\r\n });\r\n }\r\n\r\n setSecondaryJobType = (selectedNode) => {\r\n let formData2 = {\r\n ...this.state.formData, childJobType: '',\r\n childJobTypeId: ''\r\n };\r\n this.setState({\r\n secondaryJobTypes: selectedNode.childJobTypes,\r\n selectedServiceType: selectedNode,\r\n formData: formData2\r\n });\r\n }\r\n\r\n setTroubleShooteResponse = () => {\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n \r\n
\r\n {/* style={{ color: (this.props.customStyle.brand) ? this.props.customStyle.brand : '' }} */}\r\n \r\n
\r\n
\r\n

{t('new_ui_pj_hdr_troubleshoot_response')}

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

{t('new_ui_pj_lbl_troubleshoot_response')}

\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 //

{t('new_ui_pj_hdr_troubleshoot_response')}

\r\n //
\r\n //
\r\n //

{t('new_ui_pj_lbl_troubleshoot_response')}

\r\n //
\r\n //
\r\n // \r\n //
\r\n //
\r\n //
\r\n // \r\n \r\n } \r\n\r\n backToHomeConfirmationModal = () => {\r\n this.setState({\r\n showBackToHomeConfirmation: true\r\n });\r\n }\r\n\r\n backToHomeModal = () => {\r\n const { t } = this.props;\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
{t('new_ui_pj_lbl_return_home')}
\r\n
\r\n

{t('new_ui_pj_lbl_return_home_confirmation')}

\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 closeReturnHomeConfirmation = () => {\r\n this.setState({\r\n showBackToHomeConfirmation: false\r\n });\r\n }\r\n\r\n backToMainMenu = () => {\r\n this.setState({\r\n showBackToHomeConfirmation: false\r\n });\r\n this.props.backToMainMenu();\r\n }\r\n\r\n handleChatbotScroll = () => {\r\n this.props.scorolToTop();\r\n }\r\n\r\n t() {\r\n return false;\r\n }\r\n\r\n addParentJobTypeToFrequentlyUsedServices = (parentId) => {\r\n let { frequentlyUsedServices, availableServices } = this.state;\r\n let parentJob = _.find(frequentlyUsedServices, f => f.value === parentId);\r\n let selectedNode = _.find(availableServices, f => f.value === parentId);\r\n const { i18n } = this.props;\r\n if (!parentJob) {\r\n let services = frequentlyUsedServices;\r\n let parent = {\r\n label: selectedNode.label,\r\n value: selectedNode.value\r\n }\r\n if (this.state.isFromBot && i18n.language !== \"en\" && !i18n.language.toString().includes(\"en\")) {\r\n\r\n this.applyTranslation(([selectedNode.label]), \"en\", i18n.language).then((trans) => {\r\n if (trans.length > 0) {\r\n parent.label = trans[0];\r\n\r\n services.unshift(parent);\r\n this.setState({\r\n frequentlyUsedServices: services\r\n })\r\n }\r\n });\r\n } else {\r\n services.unshift(parent);\r\n this.setState({\r\n frequentlyUsedServices: services\r\n })\r\n }\r\n\r\n }\r\n }\r\n\r\n}\r\n\r\n\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n return {\r\n jobTypes: state.Jobs.jobTypes,\r\n dateFormat: state.User.dateFormat,\r\n userRoles: state.User.userRoles,\r\n properties: state.Tenant.tenantProperties,\r\n isCurrentTenant: state.Tenant.isCurrentTenant,\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateProperties: properties => {\r\n dispatch({ type: \"SET_PROPERTIES\", properties: properties });\r\n },\r\n };\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withTranslation()(BotJobPostWizard));","import React, { Component } from 'react';\r\nimport '../../../Layout/LogMaintenanceBotLayout.css';\r\nimport { connect } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport botService from '../../../../Services/BotService.js';\r\nimport * as _ from 'lodash';\r\nimport { Accordion, ButtonToolbar, Card, ToggleButton, ToggleButtonGroup } from 'react-bootstrap';\r\nimport { Loader } from 'semantic-ui-react';\r\nimport translateService from '../../../../Services/TranslateService';\r\nimport { Tab, Tabs } from \"react-bootstrap\";\r\nclass QandA_Wizard extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.refProblem = React.createRef();\r\n this.state = {\r\n isCustomThemeEnable: this.props.isCustomThemeEnable,\r\n theme: this.props.theme,\r\n style: this.props.style,\r\n tenantId: this.props.tenantId,\r\n stepFlow: [[0, \"QandAList\"], [1, \"ProblemBox\"], [2, \"FinalSend\"]],\r\n currentStep: 0,\r\n previousStep: 0,\r\n selectedQandAType: '',\r\n selectedQandATypeDisplay: '',\r\n selectedQandATypeNumber: 0,\r\n qandaList: [],\r\n pageSize: 5,\r\n pageNumber: 0,\r\n problem: '',\r\n problemEng: '',\r\n isNotificationSended:false,\r\n assignedPM:{name:'',email:'',contact:''},\r\n sendingNotification:false,\r\n }\r\n }\r\n\r\n\r\n componentDidMount() {\r\n this.LoadQandAForTenant();\r\n this.setTheme();\r\n if(this.props.fromQandAMessege){\r\n this.setState({currentStep :1}); \r\n }\r\n }\r\n\r\n\r\n componentDidUpdate() {\r\n if (this.props.isCustomThemeEnable) {\r\n this.createToggleBtnDynamicStyle();\r\n this.createOkBtnDynamicStyle();\r\n this.createActiveBtnDynamicStyle();\r\n }\r\n }\r\n\r\n\r\n applyTranslation(texts, sourceLng, targetLng) {\r\n const requestModel = {\r\n text: texts,\r\n targetCode: (targetLng == \"en-US\" || targetLng ==\"en-GB\") ? \"en\" : targetLng,\r\n sourceCode: sourceLng\r\n };\r\n \r\n return translateService.translate(requestModel);\r\n }\r\n\r\n\r\n createToggleBtnDynamicStyle() {\r\n const color = this.props.style.optionsStyle.color;\r\n const border = this.props.style.optionsStyle.border;\r\n let labelInsideToggleGroup = document.querySelectorAll('label.btn');\r\n\r\n for (var i = 0; i < labelInsideToggleGroup.length; i++) {\r\n labelInsideToggleGroup[i].style.color = color;\r\n labelInsideToggleGroup[i].style.border = border;\r\n labelInsideToggleGroup[i].style.background = '';\r\n }\r\n }\r\n\r\n\r\n createOkBtnDynamicStyle() {\r\n const color = this.props.style.optionsStyle.color;\r\n let okIcons = document.querySelectorAll('span.ba-icn-ok');\r\n\r\n for (var i = 0; i < okIcons.length; i++) {\r\n okIcons[i].style.background = color;\r\n }\r\n }\r\n\r\n\r\n createActiveBtnDynamicStyle() {\r\n const color = this.props.style.optionsStyle.activeBackground;\r\n let active = document.querySelectorAll('label.btn.active');\r\n for (var i = 0; i < active.length; i++) {\r\n active[i].style.background = color;\r\n }\r\n }\r\n\r\n\r\n LoadQandAForTenant = () => {\r\n var organizationId = this.props.organizationId;\r\n const { i18n } = this.props;\r\n botService.getQandAForTenant(organizationId.trim()).then(result => {\r\n if (result && result.qandAListModel.length > 0) {\r\n var questionList = [];\r\n var answerList = [];\r\n questionList = result.qandAListModel.map(function (value) { return value['question']; });\r\n answerList = result.qandAListModel.map(function (value) { return value['answer']; });\r\n\r\n this.applyTranslation(questionList, \"en\", i18n.language).then(trans => {\r\n if (trans.length > 0) {\r\n result.qandAListModel.map(function (value, index) { return value.question = trans[index] });\r\n }\r\n this.applyTranslation(answerList, \"en\", i18n.language).then(transAns => {\r\n if (transAns.length > 0) {\r\n result.qandAListModel.map(function (value, index) { return value.answer = transAns[index] });\r\n }\r\n this.setState({ qandaList: result.qandAListModel });\r\n });\r\n });\r\n this.handleQandATypeOnChange('General'); \r\n }\r\n }, error => {\r\n });\r\n }\r\n\r\n\r\n addBodyStyle = () => {\r\n var element = document.body;\r\n element.style.cssText = 'overflow:hidden !important;';\r\n element.style.cssText = 'padding-top:0 !important; overflow:hidden !important; background: transparent !important;';\r\n document.documentElement.style.cssText = \"background: transparent !important;\";\r\n }\r\n\r\n\r\n setTheme = () => {\r\n const { style, theme, isCustomThemeEnable } = this.props;\r\n this.setState({\r\n style: style,\r\n theme: theme,\r\n isCustomThemeEnable: isCustomThemeEnable\r\n });\r\n }\r\n\r\n\r\n render() {\r\n const { t, i18n, theme } = this.props;\r\n const currentStepIndex = this.state.currentStep;\r\n let step = this.showCurrentStep(currentStepIndex);\r\n return <>\r\n
\r\n {step}\r\n
\r\n \r\n }\r\n\r\n\r\n showCurrentStep = (index) => {\r\n let currentStep = this.state.stepFlow[index][1];\r\n switch (currentStep) {\r\n case \"QandAList\":\r\n return this.getQandAList(index);\r\n case \"ProblemBox\":\r\n if(localStorage.getItem(\"is_bna_bot_session\") == \"TRUE\" && (localStorage.getItem(\"userType\") == 4)){\r\n return this.addProblemBoxtWizard();\r\n }else{\r\n return this.props.authenticate();\r\n }\r\n \r\n case \"FinalSend\":\r\n return this.addFinalSend();\r\n }\r\n }\r\n\r\n\r\n getQandAList = () => {\r\n let qandaList = this.createQandAList();\r\n const { t } = this.props;\r\n let value = 1;\r\n\r\n return
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n

{t('new_ui_qna_lbl_header')}

\r\n \r\n
\r\n
\r\n
\r\n this.handleQandATypeOnChange(k)}>\r\n \r\n
\r\n {qandaList}\r\n
\r\n
\r\n \r\n
\r\n {qandaList}\r\n
\r\n
\r\n \r\n
\r\n {qandaList}\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 handleQandATypeOnChange = (value) => {\r\n const { t } = this.props;\r\n let type = 0;\r\n let translationTag = '';\r\n if (value == 'General') {\r\n translationTag = 'qna_lbl_opt_general';\r\n type = 3;\r\n } else if (value == 'Property') {\r\n translationTag = 'qna_lbl_opt_prop';\r\n type = 2;\r\n } else if (value == 'Maintainance') {\r\n translationTag = 'qna_lbl_opt_maintenance';\r\n type = 1;\r\n }\r\n this.setState({ selectedQandAType: value, selectedQandATypeNumber: type, selectedQandATypeDisplay: t(translationTag)});\r\n }\r\n\r\n\r\n createQandAList = () => {\r\n let { qandaList, pageNumber, pageSize, selectedQandATypeNumber,theme } = this.state;\r\n let filterdList = _.filter(qandaList, function (o) { return o.qandAType == selectedQandATypeNumber });\r\n let count = filterdList.length - ((pageNumber + 1) * pageSize);\r\n let list = this.pageWiseList(filterdList, pageNumber, pageSize);\r\n let problemEventKey = 999;\r\n const { t } = this.props;\r\n return <>\r\n {list.map((a, index) => {\r\n return \r\n \r\n {a.question}\r\n \r\n \r\n {a.answer}\r\n \r\n \r\n })\r\n }\r\n \r\n
\r\n {(count > 0) ? :\r\n ''\r\n //
\r\n //
this.showQuestionView()}>{t('new_ui_qna_lbl_did_find_answer_q')}
\r\n //
\r\n }\r\n
\r\n \r\n }\r\n\r\n\r\n addProblemBoxtWizard = () => {\r\n let { qandaList, pageNumber, pageSize, selectedQandATypeNumber,theme } = this.state;\r\n let filterdList = _.filter(qandaList, function (o) { return o.qandAType == selectedQandATypeNumber });\r\n let problemEventKey = 999;\r\n const { t } = this.props;\r\n\r\n return
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{t('new_ui_qna_lbl_type_prob')}

\r\n
\r\n {(!this.state.isNotificationSended)?\r\n <>\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {(this.state.sendingNotification) ?
: ''}\r\n :\r\n <>\r\n

{t('qna_lbl_pm_details')}

\r\n

{t('qna_lbl_assigned_pm_name')} - {this.state.assignedPM.name}

\r\n

{t('qna_lbl_assigned_pm_email')} - {this.state.assignedPM.email}

\r\n

{t('qna_lbl_assigned_pm_contact_no')} - {this.state.assignedPM.contact}

\r\n }\r\n
\r\n
\r\n }\r\n\r\n\r\n addFinalSend = () => {\r\n const { t } = this.props;\r\n return
\r\n
\r\n
\r\n
\r\n \r\n

Sent!

\r\n
\r\n

{t('new_ui_qna_lbl_type_prob_answer')}

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n\r\n\r\n showQuestionView = () => {\r\n this.setState({ currentStep: 1 });\r\n }\r\n \r\n\r\n more = () => {\r\n let number = this.state.pageNumber + 1;\r\n this.setState({ pageNumber: number });\r\n }\r\n\r\n\r\n backToQandAList = () => {\r\n this.setState({ currentStep: 0 });\r\n }\r\n\r\n pageWiseList = (filterdList, pageNumber, pageSize) => {\r\n let total = filterdList.length;\r\n if (total <= pageSize) {\r\n return filterdList;\r\n } else {\r\n let rest = total - (pageNumber * pageSize);\r\n if (rest > 0 && rest >= pageSize) {\r\n return _.take(_.drop(filterdList, (pageNumber * pageSize)), pageSize);\r\n } else if (rest > 0 && rest < pageSize) {\r\n return _.take(_.drop(filterdList, (pageNumber * pageSize)), rest);\r\n }\r\n }\r\n }\r\n\r\n\r\n handleOnChangeProblem = (value) => { \r\n const typedProblem = this.refProblem.current.value;\r\n this.setState({problem : typedProblem});\r\n\r\n }\r\n\r\n\r\n sendToPropertyManager = () => {\r\n this.setState({sendingNotification:true});\r\n var tenantId = this.props.tenantId;\r\n let { problem } = this.state;\r\n const { i18n } = this.props;\r\n \r\n if(i18n.language !== 'en'){\r\n this.applyTranslation([problem], i18n.language, 'en').then((trans) => {\r\n this.setState({ problemEng: trans[0],currentStep: 2});\r\n this.sendTenantPostNewQandANotification(tenantId,trans[0]);\r\n });\r\n }else{\r\n this.setState({ problemEng: problem,currentStep: 2});\r\n this.sendTenantPostNewQandANotification(tenantId,problem);\r\n }\r\n \r\n \r\n }\r\n\r\n\r\n sendTenantPostNewQandANotification=(tenantId,question)=>{\r\n botService.postNewQandA(tenantId,question).then(res => { \r\n setTimeout(() => {\r\n this.setState({isNotificationSended:true,sendingNotification:false});\r\n }, 1000);\r\n }, error => {\r\n });\r\n }\r\n}\r\n\r\nexport default connect()(QandA_Wizard);\r\n\r\n","import React, { Component } from 'react';\r\nimport '../../../Layout/LogMaintenanceBotLayout.css';\r\nimport { connect } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport botService from '../../../../Services/BotService.js';\r\nimport * as _ from 'lodash';\r\nimport { Accordion, ButtonToolbar, Card, ToggleButton, ToggleButtonGroup } from 'react-bootstrap';\r\nimport Loader from \"react-loader-spinner\";\r\nimport Axios from 'axios';\r\nimport moment from 'moment';\r\nclass RentalDetailsWizard extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.refProblem = React.createRef();\r\n this.state = {\r\n isCustomThemeEnable: this.props.isCustomThemeEnable,\r\n theme: this.props.theme,\r\n style: this.props.style,\r\n tenantId: this.props.tenantId,\r\n rentalDetails: {},\r\n arrearsDetails: {},\r\n currentPropertyName: this.props.propertyName,\r\n currentPropertyId: this.props.propertyId,\r\n leaseStartDate: '',\r\n leaseEndDate: '',\r\n leasePeriod: '',\r\n rentalAmount: 0,\r\n rentalDueDate: '',\r\n isRentalDetailFound: false,\r\n paidToDate: 0,\r\n arrearsAmount: 0,\r\n arrearsDays: 0,\r\n isArreasDetailFound: false,\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.LoadRentalDetails();\r\n this.LoadArrearsDetails();\r\n this.setTheme();\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.props.isCustomThemeEnable) {\r\n this.createToggleBtnDynamicStyle();\r\n this.createOkBtnDynamicStyle();\r\n this.createActiveBtnDynamicStyle();\r\n }\r\n }\r\n\r\n createToggleBtnDynamicStyle() {\r\n const color = this.props.style.optionsStyle.color;\r\n const border = this.props.style.optionsStyle.border;\r\n let labelInsideToggleGroup = document.querySelectorAll('label.btn');\r\n\r\n for (var i = 0; i < labelInsideToggleGroup.length; i++) {\r\n labelInsideToggleGroup[i].style.color = color;\r\n labelInsideToggleGroup[i].style.border = border;\r\n labelInsideToggleGroup[i].style.background = '';\r\n }\r\n }\r\n createOkBtnDynamicStyle() {\r\n const color = this.props.style.optionsStyle.color;\r\n let okIcons = document.querySelectorAll('span.ba-icn-ok');\r\n\r\n for (var i = 0; i < okIcons.length; i++) {\r\n okIcons[i].style.background = color;\r\n }\r\n }\r\n createActiveBtnDynamicStyle() {\r\n const color = this.props.style.optionsStyle.activeBackground;\r\n let active = document.querySelectorAll('label.btn.active');\r\n for (var i = 0; i < active.length; i++) {\r\n active[i].style.background = color;\r\n }\r\n }\r\n\r\n LoadRentalDetails = () => {\r\n const { rentalDetails, currentPropertyName } = this.state;\r\n var tenantId = this.props.tenantId;\r\n botService.getRentalDetails(tenantId).then(res => {\r\n if (res) {\r\n this.setState({ rentalDetails: res, });\r\n if (res && res.tenancyRentalDetailList && res.tenancyRentalDetailList.length > 0) {\r\n res.tenancyRentalDetailList.map((a, index) => {\r\n if (a.propertyName == currentPropertyName && a.status == 12) {\r\n this.setState({\r\n leaseStartDate: moment(a.leaseStartDate).format('DD/MM/YYYY'),\r\n leaseEndDate: moment(a.leaseEndDate).format('DD/MM/YYYY'),\r\n leasePeriod: a.leasePeriod,\r\n rentalAmount: a.rentalAmount,\r\n rentalDueDate: a.rentalDueDate,\r\n isRentalDetailFound: true\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }, error => {\r\n });\r\n }\r\n\r\n LoadArrearsDetails = () => {\r\n const { arrearsDetails, currentPropertyName } = this.state;\r\n var tenantId = this.props.tenantId;\r\n botService.getArrearsDetails(tenantId).then(res => {\r\n if (res) {\r\n this.setState({ arrearsDetails: res });\r\n if (res && res.tenancyArrearsDetailList && res.tenancyArrearsDetailList.length > 0) {\r\n res.tenancyArrearsDetailList.map((a, index) => {\r\n if (a.propertyName == currentPropertyName && a.status == 12) {\r\n a.arrears.map((b, index) => {\r\n this.setState({\r\n arrearsAmount: b.arrearsAmount ? b.arrearsAmount : 'N/A',\r\n arrearsDays: b.arrearsDays ? b.arrearsDays : 'N/A',\r\n paidToDate: b.paidToDate ? moment(b.paidToDate).format('DD/MM/YYYY') : 'N/A',\r\n isArreasDetailFound: true\r\n });\r\n\r\n });\r\n }\r\n });\r\n }\r\n }\r\n }, error => {\r\n });\r\n }\r\n\r\n addBodyStyle = () => {\r\n var element = document.body;\r\n element.style.cssText = 'overflow:hidden !important;';\r\n element.style.cssText = 'padding-top:0 !important; overflow:hidden !important; background: transparent !important;';\r\n document.documentElement.style.cssText = \"background: transparent !important;\";\r\n }\r\n\r\n setTheme = () => {\r\n const { style, theme, isCustomThemeEnable } = this.props;\r\n this.setState({\r\n style: style,\r\n theme: theme,\r\n isCustomThemeEnable: isCustomThemeEnable\r\n });\r\n }\r\n\r\n render() {\r\n let body = this.createBody();\r\n return <>\r\n
\r\n {body}\r\n
\r\n \r\n }\r\n\r\n createBody = () => {\r\n const { theme } = this.state;\r\n const { t } = this.props;\r\n let { rentalDetails, currentPropertyName, isRentalDetailFound, leasePeriod, leaseStartDate,\r\n leaseEndDate, rentalAmount, rentalDueDate, arrearsAmount, arrearsDays, paidToDate, isArreasDetailFound } = this.state;\r\n\r\n return
\r\n {(isRentalDetailFound) ?\r\n
\r\n
\r\n

{t('new_ui_lbl_rental_header')}{currentPropertyName}

\r\n
\r\n\r\n
\r\n {(isRentalDetailFound) ?\r\n
\r\n
\r\n
\r\n
\r\n

{t('rd_lbl_rental_lease_period')}

\r\n

{leasePeriod}

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

{t('new_ui_lbl_rental_lease_st_date')}

\r\n

{leaseStartDate}

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

{t('new_ui_lbl_rental_lease_end_date')}

\r\n

{leaseEndDate}

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

{t('new_ui_lbl_rental_amount')}

\r\n

{rentalAmount}

\r\n
\r\n
\r\n
\r\n \r\n :

No rental detail found.

\r\n }\r\n\r\n {(isArreasDetailFound) ?\r\n
\r\n
\r\n

{t('new_ui_lbl_arrears_amount')}

\r\n

${arrearsAmount}

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

{t('rd_lbl_arrears_days')}

\r\n

{arrearsDays}

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

{t('rd_lbl_arrears_paid_to_date')}

\r\n

{paidToDate}

\r\n
\r\n
\r\n : \r\n

{t('rd_lbl_no_arrears_found')}

\r\n }\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n :
No Data Found.
\r\n }\r\n
\r\n }\r\n}\r\n\r\n\r\nexport default connect()(RentalDetailsWizard);","import React, { Component } from 'react';\r\nimport '../../../Layout/LogMaintenanceBotLayout.css';\r\nimport { connect } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport botService from '../../../../Services/BotService.js';\r\nimport ImageViewer from \"../../../Common/ImageViewer/ImageViewer\";\r\nimport Moment from \"react-moment\";\r\nimport * as _ from 'lodash';\r\nimport { Accordion, ButtonToolbar, Card, ToggleButton, ToggleButtonGroup } from 'react-bootstrap';\r\nimport Loader from \"react-loader-spinner\";\r\nimport translateService from '../../../../Services/TranslateService';\r\nclass OwnerApprovals_Wizard extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.refActionReason = React.createRef();\r\n this.state = {\r\n isCustomThemeEnable: this.props.isCustomThemeEnable,\r\n theme: this.props.theme,\r\n style: this.props.style,\r\n ownerId: this.props.ownerId,\r\n pendingApprovalListVisible: true,\r\n jobListLoading: false,\r\n dateFormat: \"dd/MM/yyyy\",\r\n pendingApprovalJobList: [],\r\n totalJobCount: 0,\r\n pageSize: 100,\r\n pageNumber: 0,\r\n isJobApproval: false,\r\n isJobAcceptClick: false,\r\n isQuoteAcceptClick: false,\r\n isDeclineAllQuotesClick: false,\r\n selectedJobId: '',\r\n selectedJobNumber: '',\r\n selectedJobTitle: '',\r\n selectedBidId: '',\r\n actionReason: '',\r\n jobActionProcessing: false,\r\n isSuccessActionResult: false,\r\n isActionResultView: false\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.LoadPendingOwnerApprovalJobList();\r\n this.setTheme();\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.props.isCustomThemeEnable) {\r\n this.createToggleBtnDynamicStyle();\r\n this.createOkBtnDynamicStyle();\r\n this.createActiveBtnDynamicStyle();\r\n }\r\n }\r\n\r\n applyTranslation(texts, sourceLng, targetLng) {\r\n const requestModel = {\r\n text: texts,\r\n targetCode: targetLng,\r\n sourceCode: sourceLng\r\n };\r\n return translateService.translate(requestModel);\r\n }\r\n\r\n createToggleBtnDynamicStyle() {\r\n const color = this.props.style.optionsStyle.color;\r\n const border = this.props.style.optionsStyle.border;\r\n let labelInsideToggleGroup = document.querySelectorAll('label.btn');\r\n\r\n for (var i = 0; i < labelInsideToggleGroup.length; i++) {\r\n labelInsideToggleGroup[i].style.color = color;\r\n labelInsideToggleGroup[i].style.border = border;\r\n labelInsideToggleGroup[i].style.background = '';\r\n }\r\n }\r\n createOkBtnDynamicStyle() {\r\n const color = this.props.style.optionsStyle.color;\r\n let okIcons = document.querySelectorAll('span.ba-icn-ok');\r\n\r\n for (var i = 0; i < okIcons.length; i++) {\r\n okIcons[i].style.background = color;\r\n }\r\n }\r\n createActiveBtnDynamicStyle() {\r\n const color = this.props.style.optionsStyle.activeBackground;\r\n let active = document.querySelectorAll('label.btn.active');\r\n for (var i = 0; i < active.length; i++) {\r\n active[i].style.background = color;\r\n }\r\n }\r\n\r\n LoadPendingOwnerApprovalJobList = () => {\r\n this.setState({ jobListLoading: true });\r\n var ownerId = this.props.ownerId;\r\n const { i18n } = this.props;\r\n botService.getPendingOwnerApprovalList(ownerId.trim()).then(result => {\r\n if (result && result.jobsList.length > 0) {\r\n\r\n this.setState({\r\n pendingApprovalJobList: result.jobsList,\r\n totalJobCount: result.total,\r\n jobListLoading: false\r\n });\r\n\r\n }\r\n else {\r\n this.setState({\r\n pendingApprovalListVisible: false,\r\n jobListLoading: false\r\n });\r\n }\r\n this.props.scrollToWizardHeight();\r\n\r\n }, error => {\r\n });\r\n }\r\n\r\n addBodyStyle = () => {\r\n var element = document.body;\r\n element.style.cssText = 'overflow:hidden !important;';\r\n element.style.cssText = 'padding-top:0 !important; overflow:hidden !important; background: transparent !important;';\r\n document.documentElement.style.cssText = \"background: transparent !important;\";\r\n }\r\n setTheme = () => {\r\n const { style, theme, isCustomThemeEnable } = this.props;\r\n this.setState({\r\n style: style,\r\n theme: theme,\r\n isCustomThemeEnable: isCustomThemeEnable\r\n });\r\n }\r\n\r\n render() {\r\n let body = this.createBody();\r\n return <>\r\n
\r\n {body}\r\n
\r\n \r\n }\r\n createBody = () => {\r\n let { pendingApprovalListVisible, isJobApproval, isActionResultView, totalJobCount } = this.state;\r\n let jobList = this.createOwnerApprovalList();\r\n let jobActionView = this.createPendingApprovalActionView();\r\n let jobActionResultView = this.createActionResultView();\r\n const { t } = this.props;\r\n return
\r\n
\r\n
\r\n

{t('ownerapproval_lbl_header')}

\r\n {(pendingApprovalListVisible) ?\r\n
\r\n
\r\n
\r\n
{t('ownerapproval_lbl_jobs')}
\r\n

{t('ownerapproval_lbl_toapprove')}

\r\n
\r\n
\r\n
{totalJobCount}
\r\n
\r\n
\r\n {jobList}\r\n
:\r\n (isJobApproval) ?\r\n
\r\n

{t('ownerapproval_lbl_accept_reject_job')}

\r\n {jobActionView}\r\n
:\r\n (isActionResultView) ?\r\n
\r\n {jobActionResultView}\r\n
:\r\n
\r\n

{t('ownerapproval_lbl_no_jobs')}

\r\n
\r\n }\r\n\r\n
\r\n
\r\n
\r\n }\r\n\r\n createOwnerApprovalList = () => {\r\n let { pendingApprovalJobList, pageNumber, pageSize, theme } = this.state;\r\n let count = 0;\r\n let list = pendingApprovalJobList;\r\n const { t } = this.props;\r\n return <>\r\n
\r\n {(this.state.jobListLoading) ?
\r\n :
\r\n
\r\n {list.map((a, index) => {\r\n return \r\n \r\n
\r\n

{a.title} [#{a.jobNumber}]

\r\n
\r\n
\r\n {a.jobVariations.length > 0 ? t('ownerapproval_lbl_variation_approval') : (a.bids.bidsList.length > 0 ? t('ownerapproval_lbl_quote_approval') : t('ownerapproval_lbl_job_approval'))}\r\n
\r\n
\r\n
\r\n
{t('ownerapproval_lbl_posted_on')} {\" \"}\r\n \r\n {a.postedOn}\r\n \r\n
\r\n
\r\n {a.description}\r\n
\r\n
\r\n
\r\n
{a.address}
\r\n
\r\n
\r\n
\r\n
{a.primaryJobTypeDisplay} : {a.secondaryJobTypeDisplay} | {a.jobUrgencyDisplay}
\r\n
\r\n
\r\n
\r\n
{this.budgetFormatter(a.budgetId, a.budgetAmount, a.budgetMax)}
\r\n
\r\n {a.attachments.length > 0 ? (
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
) : ''\r\n }\r\n\r\n {(a.bids.bidsList.length > 0 && a.jobVariations.length == 0) ? (
\r\n {a.bids.bidsList.map((b, index) => {\r\n return
\r\n
\r\n
\r\n

{t('ownerapproval_lbl_quoted_by')} {\" \"}{b.name}

\r\n

${b.amount.toFixed(2)}

\r\n
\r\n
\r\n \r\n {(this.state.jobActionProcessing && this.state.selectedBidId == b.bidId) ?
: ''}\r\n
\r\n
\r\n
\r\n })\r\n }\r\n
) : ''\r\n }\r\n\r\n {a.jobVariations.length > 0 ? (
\r\n {a.jobVariations.map((v, index) => {\r\n return
\r\n
\r\n

{t('ownerapproval_lbl_variation_by')} {\" \"}{v.postedBy}

\r\n
\r\n ${v.amount.toFixed(2)}\r\n
\r\n
\r\n
{t('ownerapproval_lbl_on')} {\" \"}\r\n \r\n {v.createdDate}\r\n \r\n
\r\n
\r\n {v.description}\r\n
\r\n {v.jobVariationAttachments.length > 0 ? (
\r\n \r\n
) : ''\r\n }\r\n\r\n
\r\n })\r\n }\r\n
) : ''\r\n }\r\n\r\n {((a.bids.bidsList.length == 0 && a.jobVariations.length == 0) || a.jobVariations.length > 0) ? (\r\n
\r\n \r\n \r\n
\r\n ) : (a.bids.bidsList.length > 0 && a.jobVariations.length == 0) ? (\r\n
\r\n
\r\n \r\n {(this.state.jobActionProcessing && this.state.selectedJobId == a.id) ?
: ''}\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 createPendingApprovalActionView = () => {\r\n let { theme, isJobAcceptClick, selectedJobNumber } = this.state;\r\n const { t } = this.props;\r\n return <>\r\n
\r\n
\r\n \r\n \r\n
\r\n

{isJobAcceptClick ? t('ownerapproval_lbl_accept') : t('ownerapproval_lbl_reject')} {t('ownerapproval_lbl_job')} {t('ownerapproval_lbl_approval')} : #{selectedJobNumber}

\r\n
\r\n
\r\n \r\n \r\n
\r\n {isJobAcceptClick ? (
\r\n \r\n {(this.state.jobActionProcessing) ?
: ''}\r\n\r\n
) : (
\r\n \r\n {(this.state.jobActionProcessing) ?
: ''}\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 createActionResultView = () => {\r\n let { theme, isJobAcceptClick, isQuoteAcceptClick, isDeclineAllQuotesClick, isSuccessActionResult, selectedJobNumber, selectedJobTitle } = this.state;\r\n const { t } = this.props;\r\n return <>\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {isSuccessActionResult ? <>\r\n {isQuoteAcceptClick ? (
\r\n

{t('ownerapproval_lbl_success_accept_quote')}

\r\n
) : isDeclineAllQuotesClick ? (
\r\n

{t('ownerapproval_lbl_success_decline_quotes')}

\r\n
) : (
\r\n

{t('ownerapproval_lbl_you_have_successfully')} {isJobAcceptClick ? t('ownerapproval_lbl_approved') : t('ownerapproval_lbl_rejected')} {t('ownerapproval_lbl_the_job')}

\r\n
)\r\n }\r\n : <>\r\n {isQuoteAcceptClick ? (
\r\n

{t('ownerapproval_lbl_quote_accept_failed')}

\r\n
) : isDeclineAllQuotesClick ? (
\r\n

{t('ownerapproval_lbl_quotes_decline_failed')}

\r\n
) : (
\r\n

{t('ownerapproval_lbl_job')} {isJobAcceptClick ? t('ownerapproval_lbl_approval') : t('ownerapproval_lbl_rejection')} {t('ownerapproval_lbl_failed')}

\r\n
)\r\n }\r\n \r\n }\r\n
\r\n {selectedJobTitle} [#{selectedJobNumber}]\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n }\r\n\r\n backToPendingApprovalList = () => {\r\n if (this.state.isSuccessActionResult) {\r\n this.LoadPendingOwnerApprovalJobList();\r\n }\r\n this.setState({\r\n pendingApprovalListVisible: true,\r\n isJobApproval: false,\r\n isActionResultView: false,\r\n isJobAcceptClick: false,\r\n isDeclineAllQuotesClick: false,\r\n isQuoteAcceptClick: false,\r\n isSuccessActionResult: false,\r\n selectedJobId: '',\r\n selectedJobNumber: '',\r\n selectedJobTitle: '',\r\n selectedBidId: '',\r\n actionReason: '',\r\n pageNumber: 0\r\n });\r\n }\r\n\r\n more = () => {\r\n let number = this.state.pageNumber + 1;\r\n this.setState({ pageNumber: number });\r\n }\r\n\r\n pageWiseList = (filterdList, pageNumber, pageSize) => {\r\n let total = filterdList.length;\r\n if (total <= pageSize) {\r\n return filterdList;\r\n } else {\r\n let rest = total - (pageNumber * pageSize);\r\n if (rest > 0 && rest >= pageSize) {\r\n return _.take(_.drop(filterdList, (pageNumber * pageSize)), pageSize);\r\n } else if (rest > 0 && rest < pageSize) {\r\n return _.take(_.drop(filterdList, (pageNumber * pageSize)), rest);\r\n }\r\n }\r\n }\r\n\r\n budgetFormatter(budgetId, budgetAmount, budgetMax) {\r\n switch (budgetId) {\r\n case 0:\r\n return
Other
;\r\n case 1:\r\n return
Under $500
;\r\n case 2:\r\n return
Between $500 - $1000
;\r\n case 3:\r\n return
Between $1000 - $2000
;\r\n case 4:\r\n return
Between $2000 - $5000
;\r\n case 5:\r\n return
Over $5000
;\r\n case 7:\r\n return (\r\n
\r\n {\" \"}\r\n {\"$ \" + budgetAmount} - {\"$ \" + budgetMax}\r\n
\r\n );\r\n case -999:\r\n return (\r\n
\r\n {\" \"}\r\n {budgetAmount == 0\r\n ? \"Not supplied\"\r\n : \"$ \" + budgetAmount.toFixed(2)}\r\n
\r\n );\r\n }\r\n }\r\n\r\n onJobApproveRejectClick = (isApprove, job) => {\r\n this.setState({\r\n isJobApproval: true,\r\n pendingApprovalListVisible: false,\r\n isJobAcceptClick: isApprove,\r\n selectedJobId: job.id,\r\n selectedJobNumber: job.jobNumber,\r\n selectedJobTitle: job.title\r\n });\r\n }\r\n\r\n handleOnChangeActionReason = (event) => {\r\n this.setState({ actionReason: event.currentTarget.value });\r\n }\r\n\r\n clickJobApproveRejectAction = (isApprove) => {\r\n this.setState({ jobActionProcessing: true });\r\n var userId = this.props.ownerId;\r\n var jobId = this.state.selectedJobId;\r\n var note = this.state.actionReason;\r\n botService.ownerApproveRejectJob(userId, jobId, note, isApprove).then(res => {\r\n if (res) {\r\n this.setState({\r\n jobActionProcessing: false,\r\n isJobApproval: false,\r\n isSuccessActionResult: true,\r\n isActionResultView: true\r\n });\r\n }\r\n else {\r\n this.setState({\r\n jobActionProcessing: false,\r\n isJobApproval: false,\r\n isSuccessActionResult: false,\r\n isActionResultView: true\r\n });\r\n }\r\n }, error => {\r\n });\r\n }\r\n\r\n clickJobQuoteAccept = (job, bid) => {\r\n this.setState({ jobActionProcessing: true, isQuoteAcceptClick: true, selectedBidId: bid.bidId, selectedJobNumber: job.jobNumber, selectedJobTitle: job.title });\r\n var userId = this.props.ownerId;\r\n var jobId = job.id;\r\n var quoteId = bid.bidId;\r\n var note = '';\r\n botService.ownerAcceptJobQuote(quoteId, userId, jobId, note).then(res => {\r\n if (res) {\r\n this.setState({\r\n jobActionProcessing: false,\r\n pendingApprovalListVisible: false,\r\n isSuccessActionResult: true,\r\n isActionResultView: true\r\n });\r\n }\r\n else {\r\n this.setState({\r\n jobActionProcessing: false,\r\n pendingApprovalListVisible: false,\r\n isSuccessActionResult: false,\r\n isActionResultView: true\r\n });\r\n }\r\n }, error => {\r\n });\r\n }\r\n\r\n clickJobDeclineAllQuotes = (job) => {\r\n this.setState({ jobActionProcessing: true, isDeclineAllQuotesClick: true, selectedJobId: job.id, selectedJobNumber: job.jobNumber, selectedJobTitle: job.title });\r\n var userId = this.props.ownerId;\r\n var jobId = job.id;\r\n var note = '';\r\n botService.ownerDeclineAllJobQuotes(userId, jobId, note).then(res => {\r\n if (res) {\r\n this.setState({\r\n jobActionProcessing: false,\r\n pendingApprovalListVisible: false,\r\n isSuccessActionResult: true,\r\n isActionResultView: true\r\n });\r\n }\r\n else {\r\n this.setState({\r\n jobActionProcessing: false,\r\n pendingApprovalListVisible: false,\r\n isSuccessActionResult: false,\r\n isActionResultView: true\r\n });\r\n }\r\n }, error => {\r\n });\r\n }\r\n\r\n}\r\n\r\n\r\nexport default connect()(OwnerApprovals_Wizard);","import React, { Component } from 'react';\r\nimport botService from '../../../Services/BotService';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport { AXIOS } from '../../../Utilities/HttpRequest/Axios.js';\r\nimport Loader from \"react-loader-spinner\";\r\nimport { ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport '../../Layout/LogMaintenanceBotLayout.css';\r\nimport JobPostWizard from '../../Common/JobPostWizard/JobPostWizard';\r\nimport { connect } from 'react-redux';\r\nimport userService from '../../../Services/UserService';\r\nimport { ChatbotOptionType, MasterDataType, ChatbotLanguageOptionType } from '../../../Constants/Enums';\r\nimport PouchDbService from '../../../Services/PouchDbService';\r\nimport { toast } from 'react-toastify';\r\nimport { Form } from 'react-bootstrap';\r\nimport BotJobPostWizard from './JobPost/BotJobPost_Wizard';\r\nimport QandA_Wizard from './QandA/QandA_Wizard';\r\nimport RentalDetailsWizard from './RentalDetails/RentalDetailsWizard';\r\nimport OwnerApprovals_Wizard from './OwnerApprovals/OwnerApprovals_Wizard';\r\nimport { withTranslation } from 'react-i18next';\r\nimport propertyService from '../../../Services/PropertyService';\r\nimport translateService from '../../../Services/TranslateService';\r\nimport TrackIssueWizard from './TrackIssue/TrackIssueWizard'\r\nclass LogMaintenanceBot extends React.Component {\r\n\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n hasMultipleProperty: false,\r\n properties: [],\r\n userName: '',\r\n stepFlow: [[0, \"mainMenu\"], [1, \"mobileVerification\"], [2, \"confirmOTP\"], [3, \"propertySelect\"], [4, \"selectLogMaintenance\"], [5, \"selectTrackIssue\"], [6, \"selectRentalStatus\"], [7, \"selectQnA\"], [8, \"selectOwnerLogin\"]],\r\n currentStep: 0,\r\n previousStep: 0,\r\n mobileNumberInput: \"\",\r\n emailAddressInput: \"\",\r\n otpDigit1: \"\",\r\n otpDigit2: \"\",\r\n otpDigit3: \"\",\r\n otpDigit4: \"\",\r\n showInvalidMobileError: false,\r\n showInvalidEmailError: false,\r\n showNoAssociatedPropertyError: false,\r\n showCannotProcessError: false,\r\n showInvalidOTPError: false,\r\n isMobileAuthentication: false,\r\n showSwitchAuthentication: false,\r\n showTimer: true,\r\n time: {},\r\n seconds: 120,\r\n enableResendOTP: false,\r\n remainingOTPAttempts: 3,\r\n loading: false,\r\n isUserExist: true,\r\n chatbotKey: \"1234\",\r\n tenantDetail: [],\r\n isBotTyping: false,\r\n isBotStep: true,\r\n isUserStep: false,\r\n mobileNumber: \"\",\r\n emailAddress: \"\",\r\n chatBody: [],\r\n botSteps: this.getBotSteps(),\r\n currentBotStep: 0,\r\n userSteps: this.getUserSteps(),\r\n currentUserStep: 0,\r\n selectedProperty: {},\r\n footerValue: \"\",\r\n verificationCode: \"\",\r\n isCustomThemeEnable: this.props.isCustomThemeEnable,\r\n theme: this.props.theme,\r\n style: this.props.style,\r\n userDetails: {\r\n applicationUserCountryId: '',\r\n applicationUserId: '',\r\n encryptedUserId: ''\r\n },\r\n jobTypes: [],\r\n botErrorMsg: '',\r\n showError: false,\r\n isLogMaintenance: false,\r\n isCheckRental: false,\r\n isQandA: false,\r\n isOwnerLogin: false,\r\n isTrackIssue: false,\r\n optionSelected: false,\r\n country: this.props.country,\r\n currentLang: 'en',\r\n chatbotSetting: this.props.chatbotSetting ? this.props.chatbotSetting : {\r\n hideQandABot: false,\r\n hideCheckRentalStatus: false,\r\n hideKeyCollectionOptions: false,\r\n hideTroubleshootGuide: false,\r\n enableDraftJobFeature: false,\r\n linkedAgencies: []\r\n },\r\n propertyList: [],\r\n fromQandAMessege: false\r\n }\r\n\r\n this.timer = 0;\r\n this.startTimer = this.startTimer.bind(this);\r\n this.countDown = this.countDown.bind(this);\r\n }\r\n chatContainer = React.createRef();\r\n mainViewContainer = React.createRef();\r\n jobPostContainer = React.createRef();\r\n qAndAContainer = React.createRef();\r\n ownerLoginContainer = React.createRef();\r\n trackIssueContainer = React.createRef();\r\n mobileNumberField = React.createRef();\r\n otpDigit1Ref = React.createRef();\r\n otpDigit2Ref = React.createRef();\r\n otpDigit3Ref = React.createRef();\r\n otpDigit4Ref = React.createRef();\r\n\r\n notifyError = (msg) => {\r\n toast.error(msg, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n componentDidMount() {\r\n localStorage.setItem(\"is_bna_bot_session\", \"FALSE\");\r\n this.setTheme();\r\n //this.cretateMsg();\r\n this.addBodyStyle();\r\n // setTimeout(() => {\r\n // this.GetTenantPropertiesByUserId();\r\n // }, 1000);\r\n let timeLeftVar = this.secondsToTime(this.state.seconds);\r\n this.setState({ time: timeLeftVar });\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.state.isLogMaintenance) {\r\n this.scrollToJobPost();\r\n } else if (this.state.isQandA) {\r\n this.scrollToQandA();\r\n } else if (this.state.isOwnerLogin) {\r\n this.scrollToOwnerLogin();\r\n } else if (this.state.isTrackIssue) {\r\n this.scrollToTrackIssue();\r\n }\r\n }\r\n\r\n addBodyStyle = () => {\r\n var element = document.body;\r\n element.style.cssText = 'overflow:hidden !important;';\r\n element.style.cssText = 'padding-top:0 !important; overflow:hidden !important; background: transparent !important; padding-bottom:0 !important;';\r\n document.documentElement.style.cssText = \"background: transparent !important;\";\r\n\r\n }\r\n setTheme = () => {\r\n const { style, theme, isCustomThemeEnable } = this.props;\r\n this.setState({\r\n style: style,\r\n theme: theme,\r\n isCustomThemeEnable: isCustomThemeEnable\r\n });\r\n }\r\n\r\n scrollToMyRef = () => {\r\n let jobPostHeight = (this.jobPostContainer.current && this.jobPostContainer.current.clientHeight) ? this.jobPostContainer.current.clientHeight : 0;\r\n if (jobPostHeight == 0) {\r\n const scroll =\r\n this.mainViewContainer.current.scrollHeight -\r\n this.mainViewContainer.current.clientHeight;\r\n this.mainViewContainer.current.scrollTo(0, scroll);\r\n }\r\n };\r\n\r\n\r\n applyTranslation(texts, sourceLng, targetLng) {\r\n const requestModel = {\r\n text: texts,\r\n targetCode: (targetLng == \"en-US\" || targetLng == \"en-GB\") ? \"en\" : targetLng,\r\n sourceCode: sourceLng\r\n };\r\n\r\n return translateService.translate(requestModel);\r\n }\r\n GetTenantPropertiesByUserId = () => {\r\n let none = [{ propertyId: 0, propertyName: '--None--', suburbId: '', location: '', address: '', propertyType: 'Residential' }];\r\n\r\n this.setState({ isPropertiesLoading: true });\r\n let properties;\r\n let propertyNames = [];\r\n const { i18n } = this.props;\r\n\r\n propertyService.GetTenantPropertiesByUserId()\r\n .then((res) => {\r\n properties = res.properties;\r\n if (res.properties.length > 0) {\r\n\r\n properties.forEach(x => {\r\n propertyNames.push(x.address ? x.address : \" \");\r\n });\r\n\r\n this.applyTranslation(([propertyNames]), \"en\", i18n.language).then((trans) => {\r\n if (trans.length > 0) {\r\n trans.forEach((x, i) => {\r\n properties[i].address = trans[i];\r\n });\r\n }\r\n\r\n this.setState({\r\n propertyList: properties,\r\n propertyId: properties[0].propertyId\r\n });\r\n this.getPropertyDetailsByPropertyId(properties[0].propertyId);\r\n this.setState({ isPropertiesLoading: false });\r\n });\r\n\r\n\r\n } else {\r\n this.setState({\r\n propertyList: [],\r\n propertyId: 0\r\n });\r\n //this.onChangeJobType(1);\r\n }\r\n });\r\n }\r\n\r\n getPropertyDetailsByPropertyId = (propertyId) => {\r\n const selectedProperty = this.state.propertyList.filter(a => a.propertyId == propertyId);\r\n if (selectedProperty && selectedProperty.length > 0 && selectedProperty[0].propertyId != null) {\r\n this.setState({\r\n propertyId: propertyId,\r\n //locationDetails: {},\r\n formData: {\r\n address: selectedProperty[0].address,\r\n location: selectedProperty[0].location,\r\n propertyId: selectedProperty[0].propertyId,\r\n propertyName: selectedProperty[0].propertyName,\r\n suburbId: selectedProperty[0].suburbId,\r\n propertyType: selectedProperty[0].propertyType\r\n },\r\n locationDetails: selectedProperty[0],\r\n jobForMe: {\r\n propertyType: selectedProperty[0].propertyType,\r\n address: selectedProperty[0].address,\r\n latitude: selectedProperty[0].latitude,\r\n location: selectedProperty[0].location,\r\n longitude: selectedProperty[0].longitude,\r\n placeId: selectedProperty[0].placeId,\r\n suburbId: selectedProperty[0].suburbId,\r\n },\r\n });\r\n //this.getOrganizationSettings(selectedProperty[0].orgnizationId);\r\n } else {\r\n this.setState({\r\n propertyId: null,\r\n locationDetails: {},\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: null,\r\n propertyName: '',\r\n suburbId: null,\r\n propertyType: ''\r\n }\r\n });\r\n }\r\n setTimeout(() => {\r\n if (this.state.isJobForMe == 1) {\r\n this.setState({ keyCollectType: 1 });\r\n }\r\n }, 500);\r\n }\r\n\r\n secondsToTime(secs) {\r\n let hours = Math.floor(secs / (60 * 60));\r\n\r\n let divisor_for_minutes = secs % (60 * 60);\r\n let minutes = Math.floor(divisor_for_minutes / 60);\r\n\r\n let divisor_for_seconds = divisor_for_minutes % 60;\r\n let seconds = Math.ceil(divisor_for_seconds);\r\n\r\n let obj = {\r\n \"h\": hours,\r\n \"m\": minutes,\r\n \"s\": seconds\r\n };\r\n return obj;\r\n }\r\n\r\n countDown() {\r\n let seconds = this.state.seconds - 1;\r\n this.setState({\r\n time: this.secondsToTime(seconds),\r\n seconds: seconds,\r\n });\r\n\r\n if (seconds == 0) {\r\n clearInterval(this.timer);\r\n this.timeLimitReachAction();\r\n }\r\n }\r\n\r\n startTimer() {\r\n this.setState({\r\n seconds: 120\r\n });\r\n\r\n this.timer = 0;\r\n this.timer = setInterval(this.countDown, 1000);\r\n\r\n }\r\n\r\n stopTimer() {\r\n clearInterval(this.timer);\r\n }\r\n\r\n timeLimitReachAction() {\r\n let currentStep = this.state.currentStep;\r\n switch (currentStep) {\r\n case 1:\r\n this.setState({\r\n showSwitchAuthentication: true\r\n });\r\n break;\r\n case 2:\r\n this.setState({\r\n enableResendOTP: true\r\n });\r\n\r\n break;\r\n }\r\n }\r\n\r\n scrollToJobPost = () => {\r\n let jobPostHeight = (this.jobPostContainer.current && this.jobPostContainer.current.clientHeight) ? this.jobPostContainer.current.clientHeight : 0;\r\n if (jobPostHeight > 0) {\r\n let fullHeight = this.mainViewContainer.current.scrollHeight;\r\n let viewHeight = fullHeight - jobPostHeight;\r\n this.mainViewContainer.current.scrollTo(0, viewHeight);\r\n }\r\n }\r\n\r\n scrollToQandA = () => {\r\n let qAndA = (this.qAndAContainer.current && this.qAndAContainer.current.clientHeight) ? this.qAndAContainer.current.clientHeight : 0;\r\n if (qAndA > 0) {\r\n let fullHeight = this.mainViewContainer.current.scrollHeight;\r\n let viewHeight = fullHeight - qAndA;\r\n this.mainViewContainer.current.scrollTo(0, viewHeight);\r\n }\r\n }\r\n\r\n scrollToOwnerLogin = () => {\r\n let ownerLogin = (this.ownerLoginContainer.current && this.ownerLoginContainer.current.clientHeight) ? this.ownerLoginContainer.current.clientHeight : 0;\r\n if (ownerLogin > 0) {\r\n let fullHeight = this.mainViewContainer.current.scrollHeight;\r\n let viewHeight = fullHeight - ownerLogin;\r\n this.mainViewContainer.current.scrollTo(0, viewHeight);\r\n }\r\n }\r\n\r\n scrollToTrackIssue = () => {\r\n let trackIssue = (this.trackIssueContainer.current && this.trackIssueContainer.current.clientHeight) ? this.trackIssueContainer.current.clientHeight : 0;\r\n if (trackIssue > 0) {\r\n let fullHeight = this.mainViewContainer.current.scrollHeight;\r\n let viewHeight = fullHeight - trackIssue;\r\n this.mainViewContainer.current.scrollTo(0, viewHeight);\r\n }\r\n }\r\n\r\n\r\n render() {\r\n const { t, i18n, theme } = this.props;\r\n const currentStepIndex = this.state.currentStep;\r\n let step = this.showCurrentStep(currentStepIndex);\r\n return (\r\n
\r\n
\r\n
\r\n {step}\r\n
\r\n
\r\n {(this.state.showError) ?
{this.state.botErrorMsg}
: ''}\r\n
\r\n
);\r\n //let body = this.createBody();\r\n //let footer = this.createFotter();\r\n //return <>\r\n // {body}\r\n // {footer}\r\n //\r\n }\r\n\r\n showCurrentStep = (index) => {\r\n let currentStep = this.state.stepFlow[index][1];\r\n switch (currentStep) {\r\n case \"mainMenu\":\r\n return this.getMainMenu(index);\r\n case \"mobileVerification\":\r\n return this.getMobileAuthentication(index);\r\n case \"confirmOTP\":\r\n return this.getMobileOTPVerification(index);\r\n case \"propertySelect\":\r\n return this.selectPropertyStep(index);\r\n case \"selectLogMaintenance\":\r\n return this.addJobPostWizard();\r\n case \"selectTrackIssue\":\r\n return this.addTrackIssueWizard();\r\n case \"selectRentalStatus\":\r\n return this.addCheckRentalWizard();\r\n case \"selectQnA\":\r\n return this.addQandAWizard();\r\n case \"selectOwnerLogin\":\r\n return this.addOwnerApprovalWizard();\r\n }\r\n }\r\n\r\n getMainMenu = (index) => {\r\n const { chatBody } = this.state;\r\n const { style } = this.props;\r\n const { t } = this.props;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

{t('new_ui_hdr_welcome')}

\r\n

{t('new_ui_hdr_bna')}

\r\n

{t('new_ui_lbl_how_can_i_help')}

\r\n
\r\n
\r\n \r\n
);\r\n }\r\n\r\n onMenuOptionSelect = (option) => {\r\n const { chatBody } = this.state;\r\n const { t } = this.props;\r\n let fromQandAMessege =false;\r\n var currentStep = 0;\r\n var previousStep = 0;\r\n if (option == ChatbotOptionType.LogMaintenance) {\r\n this.setState({\r\n loading: false,\r\n isUserStep: true,\r\n isBotStep: false,\r\n isLogMaintenance: true,\r\n isMobileAuthentication: false,\r\n optionSelected: true\r\n });\r\n } else if (option == ChatbotOptionType.CheckRental) {\r\n this.setState({\r\n loading: false,\r\n isCheckRental: true,\r\n optionSelected: true\r\n });\r\n } else if (option == ChatbotOptionType.QandA) {\r\n this.setState({\r\n loading: false,\r\n isQandA: true,\r\n optionSelected: true\r\n });\r\n } else if (option == ChatbotOptionType.TrackIssue) {\r\n this.setState({\r\n loading: false,\r\n isTrackIssue: true,\r\n optionSelected: true\r\n });\r\n } else if (option == ChatbotOptionType.OwnerLogin) {\r\n this.setState({\r\n loading: false,\r\n isOwnerLogin: true,\r\n isMobileAuthentication: true,\r\n optionSelected: true\r\n });\r\n }\r\n\r\n if (localStorage.getItem(\"is_bna_bot_session\") == \"TRUE\" && localStorage.getItem(\"userType\") == 4) {\r\n if (option == ChatbotOptionType.LogMaintenance) {\r\n currentStep = 4;\r\n } else if (option == ChatbotOptionType.QandA) {\r\n currentStep = 7; \r\n } else if (option == ChatbotOptionType.CheckRental) {\r\n currentStep = 6;\r\n } else if (option == ChatbotOptionType.TrackIssue) {\r\n currentStep = 3;\r\n }\r\n else if (option == ChatbotOptionType.OwnerLogin) {\r\n currentStep = 1;\r\n }\r\n } else if (localStorage.getItem(\"is_bna_bot_session\") == \"TRUE\" && localStorage.getItem(\"userType\") == 5) {\r\n if (option == ChatbotOptionType.OwnerLogin) {\r\n currentStep = 8;\r\n }else if(option == ChatbotOptionType.QandA && localStorage.getItem(\"userType\") == 5){\r\n currentStep = 7;\r\n }else{\r\n currentStep = 1;\r\n }\r\n }\r\n else {\r\n if (option == ChatbotOptionType.QandA) {\r\n currentStep = 7; \r\n } else {\r\n currentStep = 1;\r\n if (this.state.isLogMaintenance || option == ChatbotOptionType.LogMaintenance) {\r\n this.startTimer();\r\n }\r\n }\r\n }\r\n\r\n\r\n this.props.menuOptionSelected(true);\r\n this.setState({ currentStep: currentStep, previousStep: previousStep,fromQandAMessege:fromQandAMessege });\r\n }\r\n\r\n getMobileAuthentication = (index) => {\r\n const { t } = this.props;\r\n var placeholder = t('new_ui_ph_enter_mobile_number').replace('-callingCode-', this.props.country.callingCode);\r\n \r\n return (\r\n
\r\n {(this.state.isMobileAuthentication) ?\r\n
\r\n
\r\n
\r\n
\r\n

{t('new_ui_hdr_mobile_verification')}

\r\n
{t('new_ui_lbl_mobile_verification')}
\r\n
\r\n\r\n
\r\n this.updateMobileNumber(evnt)} onKeyPress={(ev) => {\r\n if (ev.key === 'Enter') {\r\n this.validateMobileNumberAndOTP();\r\n ev.preventDefault();\r\n }\r\n }} >\r\n \r\n
\r\n {(this.state.showInvalidMobileError) ? \r\n
\r\n \r\n
{t('cb_step4_message')}
\r\n
\r\n : ''}\r\n {(this.state.showNoAssociatedPropertyError) ? \r\n
\r\n \r\n
{t('new_ui_lbl_no_property_message')} {this.state.mobileNumberInput}
\r\n
\r\n : ''}\r\n {(this.state.showCannotProcessError) ? \r\n
\r\n \r\n
{t('cb_step5_message')}
\r\n
\r\n : ''}\r\n
\r\n
\r\n
\r\n {(this.state.showSwitchAuthentication && this.state.isLogMaintenance) ? \r\n

{t('new_ui_lbl_trouble_mobile_auth')} this.enableEmailAuthentication()}>{t('new_ui_btn_switch_to_email_auth')}

\r\n : ''}\r\n \r\n
\r\n
\r\n :
\r\n
\r\n
\r\n
\r\n

{t('new_ui_hdr_mobile_verification')}

\r\n
{t('new_ui_lbl_email_verification')}
\r\n
\r\n\r\n
\r\n this.updateEmailAddress(evnt)} onKeyPress={(ev) => {\r\n if (ev.key === 'Enter') {\r\n this.validateMobileNumberAndOTP();\r\n ev.preventDefault();\r\n \r\n }\r\n }} >\r\n \r\n
\r\n {(this.state.showInvalidEmailError) ? \r\n
\r\n \r\n
{t('new_ui_error_invalid_email')}
\r\n
\r\n : ''}\r\n {(this.state.showNoAssociatedPropertyError) ? \r\n
\r\n \r\n
{t('new_ui_lbl_no_property_message')} {this.state.emailAddressInput}.
\r\n
{t('new_ui_error_no_property')}
\r\n
\r\n : ''}\r\n {(this.state.showCannotProcessError) ? \r\n
\r\n \r\n
{t('cb_step5_message')}
\r\n
\r\n : ''}\r\n
\r\n
\r\n
\r\n {(this.state.showSwitchAuthentication) ? \r\n

{t('new_ui_lbl_trouble_email_auth')} this.enableMobileAuthentication()}>{t('new_ui_btn_switch_to_mobile_auth')}

\r\n : ''}\r\n \r\n
\r\n
}\r\n
);\r\n }\r\n\r\n updateMobileNumber = (evt) => {\r\n this.setState({\r\n mobileNumberInput: evt.target.value\r\n });\r\n }\r\n\r\n updateEmailAddress = (evt) => {\r\n this.setState({\r\n emailAddressInput: evt.target.value\r\n });\r\n }\r\n\r\n enableMobileAuthentication = () => {\r\n\r\n this.setState({\r\n currentStep: 1,\r\n isMobileAuthentication: true,\r\n showSwitchAuthentication: false,\r\n enableResendOTP: false,\r\n remainingOTPAttempts: 3,\r\n showInvalidMobileError: false,\r\n showInvalidEmailError: false,\r\n showInvalidOTPError: false,\r\n showNoAssociatedPropertyError: false,\r\n showCannotProcessError:false,\r\n mobileNumberInput: \"\",\r\n emailAddressInput: \"\"\r\n });\r\n this.stopTimer();\r\n this.startTimer();\r\n }\r\n\r\n enableEmailAuthentication = () => {\r\n this.setState({\r\n currentStep: 1,\r\n isMobileAuthentication: false,\r\n showSwitchAuthentication: false,\r\n enableResendOTP: false,\r\n remainingOTPAttempts: 3,\r\n showInvalidMobileError: false,\r\n showInvalidEmailError: false,\r\n showInvalidOTPError: false,\r\n showNoAssociatedPropertyError: false,\r\n showCannotProcessError:false,\r\n mobileNumberInput: \"\",\r\n emailAddressInput: \"\"\r\n });\r\n this.stopTimer();\r\n this.startTimer();\r\n }\r\n\r\n getMobileOTPVerification = (index) => {\r\n const { t } = this.props;\r\n let { isMobileAuthentication, mobileNumber, emailAddress } = this.state;\r\n var resendPinHeader = t('new_ui_lbl_resend_pin_header').replace('-remainingAttempts-', this.state.remainingOTPAttempts);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{t('new_ui_hdr_mobile_verification')}

\r\n

{t('new_ui_lbl_enter_otp')} {(isMobileAuthentication) ? mobileNumber : emailAddress}

\r\n
\r\n\r\n
\r\n this.updateOTPCode(evnt, 1)} onKeyUp={(ev) => {\r\n this.otpInputKeypress(ev, 1);\r\n }} >\r\n \r\n this.updateOTPCode(evnt, 2)} onKeyUp={(ev) => {\r\n this.otpInputKeypress(ev, 2);\r\n }} >\r\n \r\n this.updateOTPCode(evnt, 3)} onKeyUp={(ev) => {\r\n this.otpInputKeypress(ev, 3);\r\n }} >\r\n \r\n this.updateOTPCode(evnt, 4)} onKeyUp={(ev) => {\r\n this.otpInputKeypress(ev, 4);\r\n }} >\r\n \r\n
\r\n {(this.state.showInvalidOTPError) ?
{resendPinHeader}
: ''}\r\n {(this.state.showTimer) ?
{this.state.time.m}:{this.state.time.s}
: ''}\r\n
\r\n
\r\n {(isMobileAuthentication) ?\r\n

{t('new_ui_lbl_resend_otp')} this.resendOTP()}>{t('new_ui_btn_resend_otp')}

\r\n :

{t('new_ui_lbl_resend_otp')} this.resendOTPViaEmail()}>{t('new_ui_btn_resend_otp_via_email')}

}\r\n \r\n {(isMobileAuthentication) ?\r\n (this.state.isLogMaintenance) ?

{t('new_ui_lbl_trouble_mobile_auth')} this.enableEmailAuthentication()}>{t('new_ui_btn_switch_to_email_auth')}

: ''\r\n :

{t('new_ui_lbl_trouble_email_auth')} this.enableMobileAuthentication()}>{t('new_ui_btn_switch_to_mobile_auth')}

}\r\n\r\n \r\n
\r\n
);\r\n }\r\n\r\n updateOTPCode = (evt, key) => {\r\n let { otpDigit1, otpDigit2, otpDigit3, otpDigit4 } = this.state;\r\n let value = evt.target.value.slice(0, 1);\r\n let secondValue = evt.target.value.length > 1 ? evt.target.value.slice(1, 2) : \"\";\r\n let thirdValue = evt.target.value.length > 2 ? evt.target.value.slice(2, 3) : \"\";\r\n let forthValue = evt.target.value.length > 3 ? evt.target.value.slice(3, 4) : \"\";\r\n\r\n switch (key) {\r\n case 1:\r\n this.setState({\r\n otpDigit1: value,\r\n otpDigit2: secondValue != \"\" ? secondValue : otpDigit2,\r\n otpDigit3: thirdValue != \"\" ? thirdValue : otpDigit3,\r\n otpDigit4: forthValue != \"\" ? forthValue : otpDigit4\r\n });\r\n break;\r\n case 2:\r\n this.setState({\r\n otpDigit2: value,\r\n otpDigit3: secondValue != \"\" ? secondValue : otpDigit3,\r\n otpDigit4: thirdValue != \"\" ? thirdValue : otpDigit4\r\n });\r\n break;\r\n case 3:\r\n this.setState({\r\n otpDigit3: value,\r\n otpDigit4: secondValue != \"\" ? secondValue : otpDigit4\r\n });\r\n break;\r\n case 4:\r\n this.setState({\r\n otpDigit4: value\r\n });\r\n break;\r\n }\r\n }\r\n\r\n otpInputKeypress = (event, key) => {\r\n let { otpDigit1, otpDigit2, otpDigit3, otpDigit4 } = this.state;\r\n switch (key) {\r\n case 1:\r\n if (event.key === 'Enter') {\r\n this.validateMobileNumberAndOTP();\r\n event.preventDefault();\r\n } else if (otpDigit1.length === 1) {\r\n this.otpDigit2Ref.current.focus();\r\n }\r\n break;\r\n case 2:\r\n if (event.key === 'Enter') {\r\n this.validateMobileNumberAndOTP();\r\n event.preventDefault();\r\n } else if (event.key === 'Backspace') {\r\n this.otpDigit1Ref.current.focus();\r\n } else if (otpDigit2.length === 1) {\r\n this.otpDigit3Ref.current.focus();\r\n }\r\n break;\r\n case 3:\r\n if (event.key === 'Enter') {\r\n this.validateMobileNumberAndOTP();\r\n event.preventDefault();\r\n } else if (event.key === 'Backspace') {\r\n this.otpDigit2Ref.current.focus();\r\n } else if (otpDigit3.length === 1) {\r\n this.otpDigit4Ref.current.focus();\r\n }\r\n break;\r\n case 4:\r\n if (event.key === 'Enter') {\r\n this.validateMobileNumberAndOTP();\r\n event.preventDefault();\r\n } else if (event.key === 'Backspace') {\r\n this.otpDigit3Ref.current.focus();\r\n }\r\n break;\r\n }\r\n }\r\n\r\n validateMobileNumberAndOTP = () => {\r\n let { currentStep, mobileNumberInput, emailAddressInput, isMobileAuthentication, verificationCode, otpDigit1, otpDigit2, otpDigit3, otpDigit4, isLogMaintenance, isQandA, isCheckRental, isOwnerLogin, isTrackIssue } = this.state;\r\n let stepChange = false;\r\n var nextStep = 0;\r\n this.setState({ showInvalidMobileError: false, showInvalidEmailError: false, showInvalidOTPError: false });\r\n switch (currentStep) {\r\n case 1:\r\n var regex = /^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/im;\r\n var regexEmail = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w\\w+)+$/;\r\n this.stopTimer();\r\n if (isMobileAuthentication) {\r\n if (regex.test(mobileNumberInput) && (mobileNumberInput.includes(this.props.country.callingCode) || mobileNumberInput.includes(\"+94\") || mobileNumberInput.startsWith(\"0\"))) {\r\n this.setState({ mobileNumber: mobileNumberInput });\r\n this.SendMobileOTP(mobileNumberInput);\r\n } else {\r\n stepChange = true;\r\n this.setState({ showInvalidMobileError: true, showSwitchAuthentication: true });\r\n }\r\n } else {\r\n if (regexEmail.test(emailAddressInput)) {\r\n this.setState({ emailAddress: emailAddressInput });\r\n this.SendOTPViaEmail(emailAddressInput);\r\n } else {\r\n stepChange = true;\r\n this.setState({ showInvalidEmailError: true, showSwitchAuthentication: true });\r\n }\r\n }\r\n \r\n break;\r\n case 2:\r\n let inputCode = otpDigit1 + otpDigit2 + otpDigit3 + otpDigit4;\r\n let fromQandAMessege = false;\r\n this.stopTimer();\r\n if (verificationCode == inputCode) {\r\n this.GetTenantPropertiesByUserId();\r\n localStorage.setItem(\"is_bna_bot_session\", \"TRUE\");\r\n if (isLogMaintenance) {\r\n nextStep = 4;\r\n } else if (isQandA) {\r\n nextStep = 7;\r\n fromQandAMessege =true;\r\n } else if (isCheckRental) {\r\n nextStep = 3;\r\n } else if (isTrackIssue) {\r\n nextStep = 3;\r\n } else if (isOwnerLogin) {\r\n nextStep = 8;\r\n }\r\n\r\n this.setState({ currentStep: nextStep,fromQandAMessege:fromQandAMessege });\r\n\r\n } else {\r\n let remainOTPAttempts = this.state.remainingOTPAttempts - 1;\r\n this.setState({\r\n showInvalidOTPError: true,\r\n remainingOTPAttempts: remainOTPAttempts\r\n });\r\n\r\n if (remainOTPAttempts > 0) {\r\n this.setState({\r\n enableResendOTP: true\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n\r\n }\r\n\r\n SendMobileOTP = (mobileNumber) => {\r\n\r\n this.setState({ loading: true, showNoAssociatedPropertyError: false, showCannotProcessError: false });\r\n\r\n if (this.state.isOwnerLogin) {\r\n botService.CheckOwnerExist(mobileNumber).then(res => {\r\n if (res.propertyOwners==null ||res.propertyOwners.length == 0) {\r\n\r\n this.setState({\r\n showNoAssociatedPropertyError: true,\r\n loading: false\r\n });\r\n }\r\n else {\r\n\r\n var user = {};\r\n if (this.props.organizationId) {\r\n var orgwiseUser = res.propertyOwners.filter(m => m.organizationId == this.props.organizationId)[0];\r\n if (orgwiseUser) {\r\n user = {\r\n applicationUserCountryId: orgwiseUser.applicationUserCountryId,\r\n applicationUserId: orgwiseUser.applicationUserId,\r\n encryptedUserId: orgwiseUser.encryptedUserId\r\n }\r\n } else {\r\n user = {\r\n applicationUserCountryId: res.propertyOwners[0].applicationUserCountryId,\r\n applicationUserId: res.propertyOwners[0].applicationUserId,\r\n encryptedUserId: res.propertyOwners[0].encryptedUserId\r\n }\r\n }\r\n } else {\r\n user = {\r\n applicationUserCountryId: res.propertyOwners[0].applicationUserCountryId,\r\n applicationUserId: res.propertyOwners[0].applicationUserId,\r\n encryptedUserId: res.propertyOwners[0].encryptedUserId\r\n }\r\n }\r\n\r\n this.setState({ userDetails: user });\r\n localStorage.setItem(\"userType\", 5);\r\n localStorage.setItem(\"userId\", user.encryptedUserId);\r\n this.getActiveMasterDataFileVersion();\r\n botService.SendVerificationCodeForOwner(mobileNumber).then(res => {\r\n if (res.code) {\r\n this.stopTimer();\r\n this.startTimer();\r\n this.setState({\r\n verificationCode: res.code,\r\n currentStep: 2,\r\n remainingOTPAttempts: 3,\r\n loading: false\r\n });\r\n this.otpDigit1Ref.current.focus();\r\n } else {\r\n this.setState({\r\n showCannotProcessError: true,\r\n loading: false\r\n });\r\n }\r\n });\r\n }\r\n }, error => {\r\n\r\n });\r\n }\r\n else {\r\n botService.CheckUserExist(mobileNumber).then(res => {\r\n if (res.propertyTenants==null ||res.propertyTenants.length == 0) {\r\n\r\n this.setState({\r\n showNoAssociatedPropertyError: true,\r\n showSwitchAuthentication: true,\r\n loading: false\r\n });\r\n }\r\n else {\r\n\r\n var user = {};\r\n if (this.props.organizationId) {\r\n var orgwiseUser = res.propertyTenants.filter(m => m.organizationId == this.props.organizationId)[0];\r\n if (orgwiseUser) {\r\n user = {\r\n applicationUserCountryId: orgwiseUser.applicationUserCountryId,\r\n applicationUserId: orgwiseUser.applicationUserId,\r\n encryptedUserId: orgwiseUser.encryptedUserId\r\n }\r\n } else {\r\n user = {\r\n applicationUserCountryId: res.propertyTenants[0].applicationUserCountryId,\r\n applicationUserId: res.propertyTenants[0].applicationUserId,\r\n encryptedUserId: res.propertyTenants[0].encryptedUserId\r\n }\r\n }\r\n } else {\r\n user = {\r\n applicationUserCountryId: res.propertyTenants[0].applicationUserCountryId,\r\n applicationUserId: res.propertyTenants[0].applicationUserId,\r\n encryptedUserId: res.propertyTenants[0].encryptedUserId\r\n }\r\n }\r\n\r\n this.setState({ userDetails: user });\r\n localStorage.setItem(\"userType\", 4);\r\n localStorage.setItem(\"userId\", user.encryptedUserId);\r\n this.getActiveMasterDataFileVersion();\r\n botService.SendVerificationCode(mobileNumber).then(res => {\r\n if (res.code) {\r\n this.stopTimer();\r\n this.startTimer();\r\n this.setState({\r\n verificationCode: res.code,\r\n currentStep: 2,\r\n remainingOTPAttempts: 3,\r\n loading: false\r\n });\r\n this.otpDigit1Ref.current.focus();\r\n } else {\r\n this.setState({\r\n showCannotProcessError: true,\r\n showSwitchAuthentication: true,\r\n loading: false\r\n });\r\n }\r\n });\r\n }\r\n }, error => {\r\n\r\n });\r\n }\r\n\r\n }\r\n\r\n resendOTP = () => {\r\n let { mobileNumber } = this.state;\r\n this.setState({\r\n showInvalidOTPError: false,\r\n showCannotProcessError: false\r\n });\r\n\r\n if (this.state.isOwnerLogin) {\r\n botService.SendVerificationCodeForOwner(mobileNumber).then(res => {\r\n if (res.code) {\r\n this.stopTimer();\r\n this.startTimer();\r\n this.setState({\r\n verificationCode: res.code,\r\n enableResendOTP: false,\r\n loading: false\r\n });\r\n } else {\r\n this.setState({\r\n showCannotProcessError: true,\r\n loading: false\r\n });\r\n this.addBotMsg(4);\r\n }\r\n });\r\n } else {\r\n botService.SendVerificationCode(mobileNumber).then(res => {\r\n if (res.code) {\r\n this.stopTimer();\r\n this.startTimer();\r\n this.setState({\r\n verificationCode: res.code,\r\n enableResendOTP: false,\r\n loading: false\r\n });\r\n } else {\r\n this.setState({\r\n showCannotProcessError: true,\r\n loading: false\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n SendOTPViaEmail = (emailAddress) => {\r\n this.setState({ loading: true, showNoAssociatedPropertyError: false, showCannotProcessError: false });\r\n\r\n botService.CheckUserExistByEmail(emailAddress).then(res => {\r\n if (res.propertyTenants==null || res.propertyTenants.length == 0) {\r\n\r\n this.setState({\r\n showNoAssociatedPropertyError: true,\r\n showSwitchAuthentication: true,\r\n loading: false\r\n });\r\n }\r\n else {\r\n\r\n var user = {};\r\n if (this.props.organizationId) {\r\n var orgwiseUser = res.propertyTenants.filter(m => m.organizationId == this.props.organizationId)[0];\r\n if (orgwiseUser) {\r\n user = {\r\n applicationUserCountryId: orgwiseUser.applicationUserCountryId,\r\n applicationUserId: orgwiseUser.applicationUserId,\r\n encryptedUserId: orgwiseUser.encryptedUserId\r\n }\r\n } else {\r\n user = {\r\n applicationUserCountryId: res.propertyTenants[0].applicationUserCountryId,\r\n applicationUserId: res.propertyTenants[0].applicationUserId,\r\n encryptedUserId: res.propertyTenants[0].encryptedUserId\r\n }\r\n }\r\n } else {\r\n user = {\r\n applicationUserCountryId: res.propertyTenants[0].applicationUserCountryId,\r\n applicationUserId: res.propertyTenants[0].applicationUserId,\r\n encryptedUserId: res.propertyTenants[0].encryptedUserId\r\n }\r\n }\r\n\r\n this.setState({ userDetails: user });\r\n localStorage.setItem(\"userType\", 4);\r\n localStorage.setItem(\"userId\", user.encryptedUserId);\r\n this.getActiveMasterDataFileVersion();\r\n botService.SendVerificationCodeViaEmail(emailAddress).then(res => {\r\n if (res.code) {\r\n this.stopTimer();\r\n this.startTimer();\r\n this.setState({\r\n verificationCode: res.code,\r\n currentStep: 2,\r\n remainingOTPAttempts: 3,\r\n loading: false\r\n });\r\n this.otpDigit1Ref.current.focus();\r\n } else {\r\n this.setState({\r\n showCannotProcessError: true,\r\n showSwitchAuthentication: true,\r\n loading: false\r\n });\r\n }\r\n });\r\n }\r\n }, error => {\r\n\r\n });\r\n\r\n }\r\n\r\n resendOTPViaEmail = () => {\r\n let { emailAddress } = this.state;\r\n this.setState({\r\n showInvalidOTPError: false,\r\n showCannotProcessError: false\r\n });\r\n\r\n botService.SendVerificationCodeViaEmail(emailAddress).then(res => {\r\n if (res.code) {\r\n this.stopTimer();\r\n this.startTimer();\r\n this.setState({\r\n verificationCode: res.code,\r\n enableResendOTP: false,\r\n loading: false\r\n });\r\n } else {\r\n this.setState({\r\n showCannotProcessError: true,\r\n loading: false\r\n });\r\n }\r\n });\r\n }\r\n\r\n goBackStep = (step) => {\r\n this.resetValidations();\r\n this.setState({\r\n currentStep: step\r\n });\r\n }\r\n\r\n resetValidations = () => {\r\n this.setState({\r\n mobileNumberInput: \"\",\r\n emailAddressInput: \"\",\r\n verificationCode: \"\",\r\n otpDigit1: \"\",\r\n otpDigit2: \"\",\r\n otpDigit3: \"\",\r\n otpDigit4: \"\",\r\n loading: false,\r\n showInvalidMobileError: false,\r\n showInvalidEmailError: false,\r\n showNoAssociatedPropertyError: false,\r\n showCannotProcessError: false,\r\n showInvalidOTPError: false,\r\n showSwitchAuthentication: false,\r\n enableResendOTP: false,\r\n remainingOTPAttempts: 3\r\n });\r\n }\r\n\r\n directToMainMenu = () => {\r\n this.resetValidations();\r\n this.setState({\r\n currentStep: 0,\r\n isLogMaintenance: false,\r\n isCheckRental: false,\r\n isQandA: false,\r\n isTrackIssue: false,\r\n isOwnerLogin: false,\r\n });\r\n this.props.menuOptionSelected(false);\r\n }\r\n\r\n createBody = () => {\r\n const { chatBody } = this.state;\r\n const { theme } = this.props;\r\n return
\r\n
\r\n {chatBody}\r\n
\r\n \r\n
\r\n {(this.state.showError) ?
{this.state.botErrorMsg}
: ''}\r\n
\r\n
\r\n }\r\n\r\n createFotter = () => {\r\n return
this.updateUserInput(evnt)}\r\n onKeyPress={(ev) => {\r\n if (ev.key === 'Enter') {\r\n this.submitUserInput();\r\n ev.preventDefault();\r\n }\r\n }} />\r\n {this.state.isUserStep &&\r\n \r\n }\r\n
\r\n }\r\n\r\n cretateMsg = () => {\r\n const { isBotStep, currentBotStep } = this.state;\r\n if (isBotStep) {\r\n this.addBotMsg(currentBotStep);\r\n }\r\n }\r\n\r\n addBotMsg = (currentBotStep) => {\r\n const { chatBody } = this.state;\r\n const { theme, style } = this.props;\r\n let botmsg = this.state.botSteps[currentBotStep];\r\n let message = botmsg.message;\r\n if (currentBotStep == 2) {\r\n message = botmsg.message.replace('-mobileNumber-', this.state.mobileNumber);\r\n }\r\n if (currentBotStep == 0) {\r\n message = botmsg.message.replace('-agency-', this.props.theme.header);\r\n }\r\n if (currentBotStep == 1 || currentBotStep == 3) {\r\n message = botmsg.message.replace('-callingCode-', this.props.country.callingCode);\r\n }\r\n\r\n let msg =
\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}
\r\n
\r\n chatBody.push(msg);\r\n this.setState({ chatBody: chatBody, isBotStep: false, isUserStep: true, loading: false }, () => this.scrollToMyRef());\r\n\r\n if (currentBotStep == 0) {\r\n this.addChatbotOptionButtons();\r\n }\r\n if (currentBotStep === 2) {\r\n this.addResendVerificationButton();\r\n }\r\n\r\n }\r\n addUserMsg = (input) => {\r\n const { chatBody, footerValue } = this.state;\r\n let msg =
\r\n
\r\n \"avatar\"\r\n
\r\n
{input}
\r\n
\r\n chatBody.push(msg);\r\n this.setState({ chatBody: chatBody, isBotStep: true }, () => this.scrollToMyRef());\r\n this.validateUserInput();\r\n }\r\n\r\n updateUserInput = (evt) => {\r\n this.setState({\r\n footerValue: evt.target.value\r\n });\r\n\r\n }\r\n submitUserInput = () => {\r\n this.addUserMsg(this.state.footerValue);\r\n this.setState({\r\n isBotStep: true\r\n });\r\n }\r\n\r\n validateUserInput = () => {\r\n let { currentUserStep, footerValue, verificationCode, isLogMaintenance, isQandA, isCheckRental, isOwnerLogin, isTrackIssue } = this.state;\r\n let nextUserStep = 0, nextBotStep = 0;\r\n let stepChange = false;\r\n switch (currentUserStep) {\r\n case 0:\r\n var regex = /^[\\+]?[(]?[0-9]{3}[)]?[-\\s\\.]?[0-9]{3}[-\\s\\.]?[0-9]{4,6}$/im;\r\n var regexEmail = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w\\w+)+$/;\r\n if (regex.test(footerValue) && (footerValue.includes(this.props.country.callingCode) || footerValue.includes(\"+94\") || footerValue.startsWith(\"0\"))) {\r\n this.setState({ mobileNumber: footerValue });\r\n this.SendMobileVerificationCode(footerValue);\r\n } else {\r\n stepChange = true;\r\n nextBotStep = 3;\r\n nextUserStep = currentUserStep;\r\n }\r\n break;\r\n case 1:\r\n if (verificationCode == footerValue) {\r\n localStorage.setItem(\"is_bna_bot_session\", \"TRUE\");\r\n if (isLogMaintenance) {\r\n this.addJobPostWizard();\r\n } else if (isQandA) {\r\n this.addQandAWizard();\r\n } else if (isCheckRental) {\r\n this.addCheckRentalWizard();\r\n } else if (isTrackIssue) {\r\n this.addTrackIssueWizard();\r\n } else if (isOwnerLogin) {\r\n this.addOwnerApprovalWizard();\r\n }\r\n } else {\r\n this.addResendButtonForInvalidCode();\r\n }\r\n break;\r\n }\r\n\r\n if (stepChange) {\r\n this.setState({\r\n footerValue: \"\",\r\n currentBotStep: nextBotStep,\r\n currentUserStep: nextUserStep\r\n });\r\n this.addBotMsg(nextBotStep);\r\n }\r\n\r\n }\r\n\r\n SendMobileVerificationCode = (mobileNumber) => {\r\n this.setState({ loading: true });\r\n\r\n if (this.state.isOwnerLogin) {\r\n botService.CheckOwnerExist(mobileNumber).then(res => {\r\n if (res.propertyOwners.length == 0) {\r\n\r\n this.setState({\r\n footerValue: \"\",\r\n currentBotStep: 5,\r\n currentUserStep: 0,\r\n isBotStep: true,\r\n loading: false\r\n });\r\n this.addBotMsg(5);\r\n }\r\n else {\r\n\r\n var user = {};\r\n if (this.props.organizationId) {\r\n var orgwiseUser = res.propertyOwners.filter(m => m.organizationId == this.props.organizationId)[0];\r\n if (orgwiseUser) {\r\n user = {\r\n applicationUserCountryId: orgwiseUser.applicationUserCountryId,\r\n applicationUserId: orgwiseUser.applicationUserId,\r\n encryptedUserId: orgwiseUser.encryptedUserId\r\n }\r\n } else {\r\n user = {\r\n applicationUserCountryId: res.propertyOwners[0].applicationUserCountryId,\r\n applicationUserId: res.propertyOwners[0].applicationUserId,\r\n encryptedUserId: res.propertyOwners[0].encryptedUserId\r\n }\r\n }\r\n } else {\r\n user = {\r\n applicationUserCountryId: res.propertyOwners[0].applicationUserCountryId,\r\n applicationUserId: res.propertyOwners[0].applicationUserId,\r\n encryptedUserId: res.propertyOwners[0].encryptedUserId\r\n }\r\n }\r\n\r\n this.setState({ userDetails: user });\r\n localStorage.setItem(\"userType\", 5);\r\n localStorage.setItem(\"userId\", user.encryptedUserId);\r\n this.getActiveMasterDataFileVersion();\r\n botService.SendVerificationCodeForOwner(mobileNumber).then(res => {\r\n if (res.code) {\r\n this.setState({\r\n footerValue: \"\",\r\n verificationCode: res.code,\r\n currentBotStep: 2,\r\n currentUserStep: 1,\r\n isBotStep: true,\r\n loading: false\r\n });\r\n this.addBotMsg(2);\r\n } else {\r\n this.setState({\r\n footerValue: \"\",\r\n currentBotStep: 4,\r\n currentUserStep: 0,\r\n isBotStep: true,\r\n loading: false\r\n });\r\n this.addBotMsg(4);\r\n }\r\n });\r\n }\r\n }, error => {\r\n\r\n });\r\n }\r\n else {\r\n botService.CheckUserExist(mobileNumber).then(res => {\r\n if (res.propertyTenants.length == 0) {\r\n\r\n this.setState({\r\n footerValue: \"\",\r\n currentBotStep: 5,\r\n currentUserStep: 0,\r\n isBotStep: true,\r\n loading: false\r\n });\r\n this.addBotMsg(5);\r\n }\r\n else {\r\n\r\n var user = {};\r\n if (this.props.organizationId) {\r\n var orgwiseUser = res.propertyTenants.filter(m => m.organizationId == this.props.organizationId)[0];\r\n if (orgwiseUser) {\r\n user = {\r\n applicationUserCountryId: orgwiseUser.applicationUserCountryId,\r\n applicationUserId: orgwiseUser.applicationUserId,\r\n encryptedUserId: orgwiseUser.encryptedUserId\r\n }\r\n } else {\r\n user = {\r\n applicationUserCountryId: res.propertyTenants[0].applicationUserCountryId,\r\n applicationUserId: res.propertyTenants[0].applicationUserId,\r\n encryptedUserId: res.propertyTenants[0].encryptedUserId\r\n }\r\n }\r\n } else {\r\n user = {\r\n applicationUserCountryId: res.propertyTenants[0].applicationUserCountryId,\r\n applicationUserId: res.propertyTenants[0].applicationUserId,\r\n encryptedUserId: res.propertyTenants[0].encryptedUserId\r\n }\r\n }\r\n\r\n this.setState({ userDetails: user });\r\n localStorage.setItem(\"userType\", 4);\r\n localStorage.setItem(\"userId\", user.encryptedUserId);\r\n this.getActiveMasterDataFileVersion();\r\n botService.SendVerificationCode(mobileNumber).then(res => {\r\n if (res.code) {\r\n this.setState({\r\n footerValue: \"\",\r\n verificationCode: res.code,\r\n currentBotStep: 2,\r\n currentUserStep: 1,\r\n isBotStep: true,\r\n loading: false\r\n });\r\n this.addBotMsg(2);\r\n } else {\r\n this.setState({\r\n footerValue: \"\",\r\n currentBotStep: 4,\r\n currentUserStep: 0,\r\n isBotStep: true,\r\n loading: false\r\n });\r\n this.addBotMsg(4);\r\n }\r\n });\r\n }\r\n }, error => {\r\n\r\n });\r\n }\r\n\r\n }\r\n getBotSteps() {\r\n\r\n const { t } = this.props;\r\n\r\n var chatSteps = [\r\n {\r\n id: '0',\r\n message: t('cb_step1_message')\r\n },\r\n {\r\n id: '1',\r\n message: t('cb_step2_message')\r\n },\r\n {\r\n id: '2',\r\n message: t('cb_step3_message')\r\n },\r\n {\r\n id: '3',\r\n message: t('cb_step4_message')\r\n },\r\n {\r\n id: '4',\r\n message: t('cb_step5_message')\r\n },\r\n {\r\n id: '5',\r\n message: t('cb_step6_message')\r\n }];\r\n return chatSteps;\r\n }\r\n\r\n getUserSteps() {\r\n var chatSteps = [\r\n {\r\n id: '0',\r\n step: 'getMobileNumber'\r\n },\r\n {\r\n id: '1',\r\n message: 'getVerificationCode'\r\n }];\r\n return chatSteps;\r\n }\r\n\r\n addJobPostWizard = () => {\r\n const { chatBody, style, jobTypes, theme } = this.state;\r\n return (\r\n
\r\n {(jobTypes.length > 1) ? this.backToList(event)}\r\n isJobEdit={false}\r\n jobEditid=\"\"\r\n customStyle={style}\r\n isFromBot={true}\r\n isTrackIssue={false}\r\n isCurrentTenant={true}\r\n isCustomThemeEnable={this.state.isCustomThemeEnable}\r\n resetChat={() => this.resetChat()}\r\n scorolToTop={() => this.scrollToJobPost()}\r\n backToMainMenu={() => this.directToMainMenu()}\r\n showChatbotError={(msg) => this.showError(msg)}\r\n chatbotSetting={this.state.chatbotSetting}>\r\n \r\n :\r\n
}\r\n\r\n
);\r\n }\r\n\r\n backToList = (event) => {\r\n\r\n }\r\n\r\n showError = (msg) => {\r\n this.setState({ showError: true, botErrorMsg: msg });\r\n\r\n setTimeout(\r\n () => this.setState({ showError: false, botErrorMsg: \"\" }),\r\n 3000\r\n );\r\n }\r\n\r\n\r\n addResendButtonForInvalidCode = () => {\r\n const { chatBody } = this.state;\r\n const { theme, style, t } = this.props;\r\n\r\n var resendBtn =
\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
{t('cb_lbl_resend_pin_header')}
\r\n
\r\n \r\n
\r\n\r\n chatBody.push(resendBtn);\r\n this.setState({ isUserStep: false, footerValue: \"\" }, () => this.scrollToMyRef());\r\n }\r\n\r\n resendPin = () => {\r\n\r\n let { mobileNumber } = this.state;\r\n if (this.state.isOwnerLogin) {\r\n botService.SendVerificationCodeForOwner(mobileNumber).then(res => {\r\n if (res.code) {\r\n this.setState({\r\n footerValue: \"\",\r\n verificationCode: res.code,\r\n currentBotStep: 2,\r\n currentUserStep: 1,\r\n isBotStep: true,\r\n loading: false\r\n });\r\n this.addBotMsg(2);\r\n } else {\r\n this.setState({\r\n footerValue: \"\",\r\n currentBotStep: 4,\r\n currentUserStep: 0,\r\n isBotStep: true,\r\n loading: false\r\n });\r\n this.addBotMsg(4);\r\n }\r\n });\r\n } else {\r\n botService.SendVerificationCode(mobileNumber).then(res => {\r\n if (res.code) {\r\n this.setState({\r\n footerValue: \"\",\r\n verificationCode: res.code,\r\n currentBotStep: 2,\r\n currentUserStep: 1,\r\n isBotStep: true,\r\n loading: false\r\n });\r\n this.addBotMsg(2);\r\n } else {\r\n this.setState({\r\n footerValue: \"\",\r\n currentBotStep: 4,\r\n currentUserStep: 0,\r\n isBotStep: true,\r\n loading: false\r\n });\r\n this.addBotMsg(4);\r\n }\r\n });\r\n }\r\n }\r\n resetChat = () => {\r\n let chathistory = document.getElementById('chatbot-body');\r\n chathistory.innerHTML = \"\";\r\n this.setState({\r\n isBotStep: true,\r\n isUserStep: false,\r\n mobileNumber: \"\",\r\n chatBody: [],\r\n currentBotStep: 0,\r\n currentUserStep: 0,\r\n footerValue: \"\",\r\n isLogMaintenance: false,\r\n isCheckRental: false,\r\n isQandA: false,\r\n isOwnerLogin: false,\r\n isTrackIssue: false,\r\n optionSelected: false\r\n });\r\n\r\n this.addBotMsg(0);\r\n }\r\n\r\n backToMainMenu = () => {\r\n this.resetChat();\r\n }\r\n\r\n getActiveMasterDataFileVersion = () => {\r\n userService.GetActiveMasterDataFileVersion(MasterDataType.JobTypes)\r\n .then(response => {\r\n this.readJsonFile(response);\r\n });\r\n }\r\n\r\n readJsonFile(fileName) {\r\n let filePath = `${AppConfiguration.Setting().azureStorage.BlobStorageCdnEndPoint}${AppConfiguration.Setting().azureStorage.JobTypesContainerName}/${fileName}`;\r\n fetch(filePath)\r\n .then(response => response.json())\r\n .then(result => {\r\n this.addJobTypesToTheState(result);\r\n })\r\n }\r\n\r\n addChatbotOptionButtons = () => {\r\n const { chatBody } = this.state;\r\n const { style } = this.props;\r\n const { t } = this.props;\r\n var optionBtn = \r\n\r\n chatBody.push(optionBtn);\r\n this.setState({ loading: false, isUserStep: false, footerValue: \"\" }, () => this.scrollToMyRef());\r\n }\r\n\r\n onOptionSelect = (option) => {\r\n const { chatBody } = this.state;\r\n const { t } = this.props;\r\n let userSelect = \"\";\r\n if (option == ChatbotOptionType.LogMaintenance) {\r\n userSelect = t('cb_button_m_request');\r\n this.setState({\r\n footerValue: \"\",\r\n currentBotStep: 1,\r\n currentUserStep: 0,\r\n isBotStep: false,\r\n loading: false,\r\n isUserStep: true,\r\n isLogMaintenance: true,\r\n optionSelected: true\r\n });\r\n } else if (option == ChatbotOptionType.CheckRental) {\r\n userSelect = t('cb_button_check_rental');\r\n this.setState({\r\n footerValue: \"\",\r\n currentBotStep: 1,\r\n currentUserStep: 0,\r\n isBotStep: false,\r\n loading: false,\r\n isUserStep: true,\r\n isCheckRental: true,\r\n optionSelected: true\r\n });\r\n } else if (option == ChatbotOptionType.QandA) {\r\n userSelect = t('cb_button_qanda');\r\n this.setState({\r\n footerValue: \"\",\r\n isBotStep: false,\r\n isUserStep: true,\r\n loading: false,\r\n isQandA: true,\r\n optionSelected: true\r\n });\r\n } else if (option == ChatbotOptionType.TrackIssue) {\r\n userSelect = t('new_ui_cb_button_track_issue');\r\n this.setState({\r\n footerValue: \"\",\r\n isBotStep: false,\r\n isUserStep: true,\r\n loading: false,\r\n isTrackIssue: true,\r\n optionSelected: true\r\n });\r\n } else if (option == ChatbotOptionType.OwnerLogin) {\r\n userSelect = t('cb_button_owner_login');\r\n this.setState({\r\n footerValue: \"\",\r\n isBotStep: false,\r\n isUserStep: true,\r\n loading: false,\r\n isOwnerLogin: true,\r\n optionSelected: true\r\n });\r\n }\r\n let chatoptions = document.getElementById('chatbot-option-btn');\r\n\r\n let msg =
\r\n
\r\n \"avatar\"\r\n
\r\n
{userSelect}
\r\n
\r\n chatoptions.innerHTML = \"\";\r\n chatBody.push(msg);\r\n\r\n if (localStorage.getItem(\"is_bna_bot_session\") == \"TRUE\") {\r\n if (option == ChatbotOptionType.LogMaintenance) {\r\n this.addJobPostWizard();\r\n } else if (option == ChatbotOptionType.QandA) {\r\n this.addQandAWizard();\r\n } else if (option == ChatbotOptionType.CheckRental) {\r\n this.addCheckRentalWizard();\r\n } else if (option == ChatbotOptionType.TrackIssue) {\r\n this.addTrackIssueWizard();\r\n } else if (option == ChatbotOptionType.OwnerLogin) {\r\n this.addOwnerApprovalWizard();\r\n }\r\n } else {\r\n if (option == ChatbotOptionType.QandA) {\r\n this.addQandAWizard();\r\n } else {\r\n this.addBotMsg(1);\r\n }\r\n }\r\n }\r\n\r\n addQandAWizard = () => {\r\n const { chatBody, style, theme, isCustomThemeEnable, userDetails,fromQandAMessege } = this.state;\r\n const { organizationId } = this.props;\r\n if(fromQandAMessege){\r\n this.setState({fromQandAMessege: false})\r\n }\r\n return (\r\n
\r\n this.directToMainMenu()}\r\n t={this.props.t}\r\n i18n={this.props.i18n}\r\n authenticate = {() => this.rederectToAuthenticate()}\r\n fromQandAMessege ={fromQandAMessege}>\r\n \r\n
);\r\n\r\n }\r\n\r\n rederectToAuthenticate(){\r\n this.setState({\r\n currentStep: 1,\r\n });\r\n }\r\n\r\n addCheckRentalWizard = () => {\r\n const { chatBody, style, theme, isCustomThemeEnable, userDetails } = this.state;\r\n return (\r\n
\r\n this.directToMainMenu()}\r\n t={this.props.t}\r\n i18n={this.props.i18n}\r\n propertyName={this.state.formData.propertyName}\r\n propertyId={this.state.propertyId}>\r\n \r\n
);\r\n\r\n }\r\n\r\n addTrackIssueWizard = () => {\r\n const { chatBody, style, theme, isCustomThemeEnable, userDetails,propertyId } = this.state;\r\n return (\r\n
\r\n this.backToList(event)}\r\n tenantId={userDetails.applicationUserId}\r\n theme={theme}\r\n style={style}\r\n isCustomThemeEnable={isCustomThemeEnable}\r\n backToMainMenu={() => this.directToMainMenu()}\r\n t={this.props.t}\r\n i18n={this.props.i18n}\r\n propertyId={propertyId}\r\n showChatbotError={(msg) => this.showError(msg)}>\r\n \r\n\r\n {/* } */}\r\n\r\n
);\r\n\r\n }\r\n\r\n addOwnerApprovalWizard = () => {\r\n const { chatBody, style, theme, isCustomThemeEnable, userDetails } = this.state;\r\n const { organizationId } = this.props;\r\n return (\r\n
\r\n this.directToMainMenu()}\r\n scrollToWizardHeight={() => this.scrollToOwnerLogin()}\r\n t={this.props.t}\r\n i18n={this.props.i18n}>\r\n \r\n
);\r\n\r\n }\r\n\r\n\r\n\r\n selectPropertyStep = (index) => {\r\n const { propertyList, propertyId, isJobForMe, jobForMe, formData, isPropertyOwner } = this.state;\r\n const forMeText = this.state.isJobForMeText;\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

{t('new_ui_pj_lbl_prop_select')}

\r\n
\r\n\r\n
\r\n {(this.state.isPropertiesLoading) ?
: ''}\r\n {(!this.state.isPropertiesLoading) ?\r\n 0 ) ? propertyList[0].propertyId : \"\"}\r\n onChange={(value) => { this.handlePropertyChange(value) }}>\r\n {propertyList.map((a, index) => {\r\n return {a.address}\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 nextStep = () => {\r\n let { isLogMaintenance, isQandA, isCheckRental, isOwnerLogin, isTrackIssue } = this.state;\r\n let nextStep = 0;\r\n if (this.ValidateCurrentStep()) {\r\n if (isLogMaintenance) {\r\n nextStep = 4;\r\n } else if (isQandA) {\r\n nextStep = 7;\r\n } else if (isCheckRental) {\r\n nextStep = 6;\r\n } else if (isTrackIssue) {\r\n nextStep = 5;\r\n } else if (isOwnerLogin) {\r\n nextStep = 8;\r\n }\r\n\r\n this.setState({\r\n currentStep: nextStep,\r\n });\r\n }\r\n }\r\n\r\n ValidateCurrentStep = () => {\r\n let {isCheckRental, isTrackIssue} = this.state;\r\n const { t } = this.props;\r\n\r\n if (isCheckRental || isTrackIssue) {\r\n if (this.state.propertyId == null || this.state.propertyId == undefined) {\r\n this.showError(t('new_ui_lbl_selectProperty_error_msg'));\r\n return false;\r\n } \r\n return true;\r\n }\r\n return true;\r\n }\r\n\r\n handlePropertyChange = (props) => {\r\n this.setState({ property: props });\r\n this.getPropertyDetailsByPropertyId(props);\r\n }\r\n\r\n getJobTypesByCountryId = () => {\r\n PouchDbService.GetAllDocument(MasterDataType[MasterDataType.JobTypes]).then(response => {\r\n if (response.rows.length > 0) {\r\n this.addJobTypesToTheState(response);\r\n }\r\n })\r\n }\r\n\r\n addJobTypesToTheState = (jobTypesList) => {\r\n const { i18n } = this.props;\r\n const trgLng = i18n.language.charAt(0).toUpperCase() + i18n.language.slice(1);\r\n let services = [];\r\n let allJobTypes = [];\r\n let jobTypes = [];\r\n if (jobTypesList.length) {\r\n jobTypes = jobTypesList.filter(element => element.CountryId == this.state.userDetails.applicationUserCountryId);\r\n } else {\r\n jobTypes = jobTypesList.rows.filter(element => element.doc.CountryId == this.state.userDetails.applicationUserCountryId);\r\n }\r\n\r\n jobTypes.forEach(element => {\r\n let subTypes = [];\r\n if (jobTypesList.length) {\r\n subTypes = jobTypes.filter(p => p.ParentJobTypeId == element.Id);\r\n allJobTypes.push({\r\n id: element.Id,\r\n title: (trgLng === 'En') ? element.Name : element[`Name${trgLng}`],\r\n label: (trgLng === 'En') ? element.Name : element[`Name${trgLng}`],\r\n description: element.Description,\r\n tooltip: element.Tooltip,\r\n jobCategory: element.JobGroupId,\r\n parentRef: element.ParentJobTypeId,\r\n countryId: element.CountryId,\r\n hasChildRef: subTypes.length > 0\r\n });\r\n } else {\r\n subTypes = jobTypes.filter(p => p.doc.ParentJobTypeId == element.doc.Id);\r\n allJobTypes.push({\r\n id: element.doc.Id,\r\n title: (trgLng === 'En') ? element.Name : element[`Name${trgLng}`],\r\n label: (trgLng === 'En') ? element.Name : element[`Name${trgLng}`],\r\n description: element.doc.Description,\r\n tooltip: element.doc.Tooltip,\r\n jobCategory: element.doc.JobGroupId,\r\n parentRef: element.doc.ParentJobTypeId,\r\n countryId: element.doc.CountryId,\r\n hasChildRef: subTypes.length > 0\r\n });\r\n }\r\n });\r\n\r\n allJobTypes.forEach(element => {\r\n\r\n let subTypes = allJobTypes.filter(a => a.parentRef == element.id);\r\n\r\n if (element.hasChildRef) {\r\n services.push({\r\n parentJobType: element,\r\n childJobTypes: subTypes\r\n });\r\n }\r\n });\r\n this.setState({ jobTypes: services });\r\n this.props.addJobTypes(services);\r\n }\r\n\r\n addResendVerificationButton = () => {\r\n const { chatBody } = this.state;\r\n const { theme, style, t } = this.props;\r\n\r\n var resendBtn =
\r\n \r\n
\r\n\r\n chatBody.push(resendBtn);\r\n this.setState({ isUserStep: true, footerValue: \"\" }, () => this.scrollToMyRef());\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n try {\r\n return {\r\n jobTypes: state.Jobs.jobTypes,\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n addJobTypes: jobTypes => { dispatch({ type: 'SET_JOB_TYPES', jobTypes: jobTypes }) }\r\n };\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withTranslation()(LogMaintenanceBot));","import React, { Component } from 'react';\r\nimport botService from '../../Services/BotService';\r\nimport LogMaintenanceBot from '../External/LogMaintenanceBot/LogMaintenanceBot';\r\nimport { Dropdown } from 'semantic-ui-react'\r\nimport './LogMaintenanceBotLayout.css';\r\nimport { withTranslation } from 'react-i18next';\r\nimport { any } from 'prop-types';\r\nimport \"./Layout.scss\";\r\nimport \"../../Styles/style.scss\";\r\nclass LogMaintenanceBotLayout extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n isCustomThemeEnable:'',\r\n theme:{\r\n header:'',\r\n primaryColor:''\r\n },\r\n isMenuOptionSelected: false,\r\n style:{\r\n brand:'',\r\n brandBackground:'',\r\n headerBackground:{backgroundColor:''},\r\n primaryButtonStyle:{\r\n backgroundColor:'',\r\n border: ''\r\n },\r\n secondaryButtonStyle:{\r\n backgroundColor:'',\r\n border: ''\r\n },\r\n optionsStyle:{\r\n border: '',\r\n color: '',\r\n activeBackground:''\r\n }\r\n },\r\n countrySetting:{\r\n callingCode:'',\r\n countryCode:''\r\n },\r\n languageList:[{\r\n index:1,\r\n text:\"English\",\r\n value:\"en\"\r\n },\r\n {\r\n index:2,\r\n text:\"Hindi हिन्दी\",\r\n value:\"hi\"\r\n },\r\n {\r\n index:3,\r\n text:\"Chinese (Cantonese) 粤语\",\r\n value:\"zh\"\r\n },\r\n {\r\n index:4,\r\n text:\"Arabic عربى\",\r\n value:\"ar\"\r\n },\r\n {\r\n index:5,\r\n text:\"Greek ελληνικά\",\r\n value:\"el\"\r\n },\r\n {\r\n index:6,\r\n text:\"Spanish español\",\r\n value:\"es\"\r\n },\r\n {\r\n index:7,\r\n text:\"Italian italiano\",\r\n value:\"it\"\r\n },\r\n {\r\n index:8,\r\n text:\"Punjabi ਪੰਜਾਬੀ\",\r\n value:\"pa\"\r\n },\r\n {\r\n index:9,\r\n text:\"Tagalog\",\r\n value:\"tl\"\r\n },\r\n {\r\n index:10,\r\n text:\"Vietnamese Tiếng Việt\",\r\n value:\"vi\"\r\n },\r\n {\r\n index:11,\r\n text:\"Chinese (Mandarin) 官话\",\r\n value:\"zh-tw\"\r\n }\r\n ],\r\n lang:\"en\",\r\n chatbotSetting:{\r\n hideQandABot : false,\r\n hideCheckRentalStatus : false,\r\n hideKeyCollectionOptions : false,\r\n hideTroubleshootGuide : false,\r\n enableAIPoweredTroubleshootGuide : false,\r\n enableDraftJobFeature :false,\r\n linkedAgencies : []\r\n }\r\n }\r\n \r\n }\r\n\r\n componentDidMount(){\r\n this.getChatbotSettings();\r\n this.addBodyStyle();\r\n }\r\n render() {\r\n const { theme, isCustomThemeEnable,isMenuOptionSelected,style,countrySetting,languageList,chatbotSetting} = this.state;\r\n let { orgId } = this.props;\r\n let { isLanguageInitialized } = this.props;\r\n return
\r\n {/*
*/}\r\n
\r\n
\r\n \"Client\r\n
\r\n {/*

{theme.header}

*/}\r\n
\r\n {(isCustomThemeEnable!='')?\r\n this.setLanguageSelection(option)}\r\n >:\"\"}\r\n
\r\n {(!isLanguageInitialized && !isMenuOptionSelected) ?
\r\n \r\n
\r\n : ''\r\n }\r\n
\r\n
\r\n }\r\n\r\n getChatbotSettings=()=>{\r\n let {orgId}=this.props;\r\n if(orgId){\r\n botService.getChatbotSettings(orgId).then(result => {\r\n if(result.chatbotSettingsModel){\r\n let newTheme ={\r\n header:(result.chatbotSettingsModel.chatbotHeader!=null)?result.chatbotSettingsModel.chatbotHeader:'',\r\n primaryColor : (result.chatbotSettingsModel.chatbotPrimaryColor!=null)?result.chatbotSettingsModel.chatbotPrimaryColor:'', \r\n }\r\n let style={}\r\n if(result.chatbotSettingsModel.chatbotPrimaryColor){\r\n style ={\r\n brand:newTheme.primaryColor,\r\n brandBackground:newTheme.primaryColor+\"33\",\r\n headerBackground:{backgroundColor:newTheme.primaryColor},\r\n primaryButtonStyle:{\r\n backgroundColor:newTheme.primaryColor,\r\n border: \"1px solid \"+newTheme.primaryColor\r\n },\r\n secondaryButtonStyle:{\r\n color:newTheme.primaryColor,\r\n backgroundColor:newTheme.primaryColor+\"33\",\r\n border: \"1px solid \"+newTheme.primaryColor\r\n },\r\n optionsStyle:{\r\n border: \"1px solid \"+newTheme.primaryColor,\r\n color: newTheme.primaryColor,\r\n activeBackground:newTheme.primaryColor+\"33\"\r\n },\r\n isCustomThemeEnable: (result.chatbotSettingsModel.chatbotPrimaryColor!=null || result.chatbotSettingsModel.chatbotPrimaryColor!='')?true:false\r\n } \r\n }\r\n \r\n var setting = {\r\n countryCode:result.chatbotSettingsModel.countryCode,\r\n callingCode:result.chatbotSettingsModel.callingCode,\r\n };\r\n\r\n var chatbotSetting = {\r\n hideQandABot:result.chatbotSettingsModel.hideQandABot,\r\n hideCheckRentalStatus:result.chatbotSettingsModel.hideCheckRentalStatus,\r\n hideKeyCollectionOptions:result.chatbotSettingsModel.hideKeyCollectionOptions,\r\n hideTroubleshootGuide:result.chatbotSettingsModel.hideTroubleshootGuide,\r\n enableAIPoweredTroubleshootGuide:result.chatbotSettingsModel.enableAIPoweredTroubleshootGuide,\r\n enableDraftJobFeature:result.chatbotSettingsModel.enableDraftJobFeature,\r\n defaultKeyCollectionOption:result.chatbotSettingsModel.defaultKeyCollectionOption,\r\n linkedAgencies: (result.chatbotSettingsModel.linkedAgencies != undefined && result.chatbotSettingsModel.linkedAgencies != null) ? result.chatbotSettingsModel.linkedAgencies:[],\r\n };\r\n\r\n this.setState({\r\n isCustomThemeEnable: (result.chatbotSettingsModel.chatbotPrimaryColor!=null || result.chatbotSettingsModel.chatbotPrimaryColor!='')?true:false,\r\n theme : newTheme,\r\n style:style,\r\n countrySetting:setting,\r\n chatbotSetting:chatbotSetting\r\n });\r\n\r\n }else{\r\n this.setState({\r\n isCustomThemeEnable: false,\r\n });\r\n }\r\n }, error => {\r\n console.log(error);\r\n })\r\n }\r\n }\r\n\r\n setLanguageSelection = (option) => {\r\n this.setState({ isMenuOptionSelected: option });\r\n }\r\n\r\n\r\n addBodyStyle=()=>{\r\n var element = document.body;\r\n element.style.cssText = 'overflow:hidden !important;';\r\n element.style.cssText = 'padding-top:0 !important; overflow:hidden !important; background: transparent !important;';\r\n document.documentElement.style.cssText = \"background: transparent !important;\";\r\n }\r\n\r\n handleLanguageChange= (event, props)=>{\r\n const {t,i18n,i18next}=this.props;\r\n i18n.changeLanguage(props.value);\r\n this.setState({lang:props.value});\r\n this.props.passLanguageChange(props.value);\r\n }\r\n\r\n}\r\n\r\nexport default withTranslation()(LogMaintenanceBotLayout);","import React, { Suspense } from 'react';\r\nimport { connect } from \"react-redux\";\r\n//import \"./Styles/style.scss\";\r\nimport LogMaintenanceBotLayout from \"./Components/Layout/LogMaintenanceBotLayout\";\r\nimport botService from './Services/BotService';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\n\r\nclass LogMaintenanceBotApp extends React.Component {\r\n\r\n state = {\r\n themeColor: this.props.themeColor,\r\n theme: {\r\n header: '',\r\n primaryColor: this.props.themeColor\r\n },\r\n headerBackground: { backgroundColor: this.props.themeColor },\r\n orgId: this.props.orgId,\r\n hasMultipleProperty:false,\r\n properties:[],\r\n userName:'' ,\r\n lang: (this.props.i18n.language == \"en-US\" || this.props.i18n.language == \"en-GB\" || this.props.i18n.language == undefined || this.props.i18n.language == null) ? \"en\" : this.props.i18n.language,\r\n isLanguageInitialized: false,\r\n linkedAgencies: [],\r\n isMultipleAgenciesExist: false,\r\n isPrefferedAgencySelected: false\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.getChatbotSettings();\r\n }\r\n componentDidMount() {\r\n \r\n }\r\n shouldComponentUpdate (nextProps, nextState){\r\n return true;\r\n }\r\n render() {\r\n const { t } = this.props;\r\n var y = this.state;\r\n return (\r\n
\r\n Loading...
}>\r\n {this.state.isMultipleAgenciesExist && !this.state.isPrefferedAgencySelected ? \r\n
\r\n
\r\n
\r\n

{this.state.theme.header}

\r\n
\r\n

Please Select your Agency

\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n : this.passLanguageChange(lang)}\r\n lang={this.state.lang}\r\n isLanguageInitialized={this.state.isLanguageInitialized} />\r\n }\r\n \r\n
\r\n )\r\n }\r\n\r\n passLanguageChange=(lang)=>{\r\n this.setState({\r\n lang: lang,\r\n isLanguageInitialized: true\r\n });\r\n\r\n }\r\n\r\n getChatbotSettings = () => {\r\n let { orgId } = this.state;\r\n if (orgId) {\r\n botService.getChatbotSettings(orgId).then(result => {\r\n if (result.chatbotSettingsModel) {\r\n let newTheme = {\r\n header: (result.chatbotSettingsModel.chatbotHeader != null) ? result.chatbotSettingsModel.chatbotHeader : '',\r\n primaryColor: (result.chatbotSettingsModel.chatbotPrimaryColor != null) ? result.chatbotSettingsModel.chatbotPrimaryColor : '',\r\n }\r\n\r\n var prefferedAgencies = (result.chatbotSettingsModel.linkedAgencies != undefined && result.chatbotSettingsModel.linkedAgencies != null) ? result.chatbotSettingsModel.linkedAgencies : [];\r\n if (prefferedAgencies != null && prefferedAgencies.length > 0) {\r\n this.setState({\r\n isMultipleAgenciesExist: true,\r\n isPrefferedAgencySelected: false,\r\n linkedAgencies: prefferedAgencies,\r\n theme: newTheme,\r\n headerBackground: { backgroundColor: newTheme.primaryColor }\r\n });\r\n }\r\n\r\n }\r\n }, error => {\r\n console.log(error);\r\n })\r\n }\r\n }\r\n\r\n prefferedAgencySelect = (organizationId,chatbotPrimaryColor) => {\r\n this.setState({\r\n orgId: organizationId,\r\n isPrefferedAgencySelected: true,\r\n themeColor:chatbotPrimaryColor\r\n });\r\n }\r\n\r\n}\r\n\r\nexport default connect()(withTranslation()(LogMaintenanceBotApp));","import i18n from 'i18next';\r\nimport { initReactI18next } from 'react-i18next';\r\n\r\nimport Backend from 'i18next-http-backend';\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\n// don't want to use this?\r\n// have a look at the Quick start guide \r\n// for passing in lng and translations on init\r\n\r\ni18n\r\n // load translation using http -> see /public/locales (i.e. https://github.com/i18next/react-i18next/tree/master/example/react/public/locales)\r\n // learn more: https://github.com/i18next/i18next-http-backend\r\n .use(Backend)\r\n // detect user language\r\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\r\n .use(LanguageDetector)\r\n // pass the i18n instance to react-i18next.\r\n .use(initReactI18next)\r\n // init i18next\r\n // for all options read: https://www.i18next.com/overview/configuration-options\r\n .init({\r\n lng: 'en',\r\n fallbackLng: 'en',\r\n debug: true,\r\n\r\n interpolation: {\r\n escapeValue: false, // not needed for react as it escapes by default\r\n }\r\n });\r\n\r\n\r\nexport default i18n;","import { AXIOS } from '../Utilities/HttpRequest/Axios';\r\n\r\nexport const getTroubleShootGuideById = (id) => {\r\n return AXIOS.GET(`tenant-api/troubleShootGuide-by-id?troubleShootGuideId=${id}`);\r\n}\r\nexport const getAttachmentsByJobId = (id) => {\r\n return AXIOS.GET(`tenant-api/attachments-by-jobId?jobId=${id}`);\r\n}\r\nexport const getAssetById = (id) => {\r\n return AXIOS.GET(`tenant-api/asset-by-id?assetId=${id}`);\r\n} \r\n\r\nexport const updateAssetDetails = (model) => {\r\n return AXIOS.PUT(`tenant-api/asset-by-id`, model);\r\n}\r\n\r\nexport const submitInvitationAssetList = (model) => {\r\n return AXIOS.POST(`tenant-api/assets-by-invitation`, model);\r\n}\r\n\r\nexport const getPropertyAssetReviewInfo = (assetId, userId, invitationId) => {\r\n if (assetId) {\r\n return AXIOS.GET(`tenant-api/asset-review-info?assetId=${assetId}&userId=${userId}&dateTime=${new Date().toUTCString()}`);\r\n } else if (invitationId) {\r\n return AXIOS.GET(`tenant-api/asset-review-info?userId=${userId}&invitationId=${invitationId}&dateTime=${new Date().toUTCString()}`);\r\n }\r\n \r\n}\r\n\r\nconst externalService = {\r\n getTroubleShootGuideById,\r\n getAttachmentsByJobId,\r\n getAssetById,\r\n updateAssetDetails,\r\n submitInvitationAssetList,\r\n getPropertyAssetReviewInfo\r\n}\r\n\r\nexport default externalService;","import React from 'react';\r\nimport Loader from \"react-loader-spinner\";\r\nimport { Button, ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport ImageViewer from '../../Common/ImageViewer/ImageViewer';\r\nimport externalService from '../../../Services/ExternalService';\r\nimport { connect } from 'react-redux';\r\n\r\nclass TroubleShootGuidePage extends React.Component {\r\n\r\n state = {\r\n troubleShootGuideId: this.props.troubleShootGuideId,\r\n troubleShootGuide: \"Not Available.\",\r\n isLoading: false,\r\n attachments: []\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n componentDidMount() {\r\n const { troubleShootGuideId } = this.props;\r\n this.getTroubleShootGuide(troubleShootGuideId);\r\n }\r\n\r\n getTroubleShootGuide = (troubleShootGuideId) => {\r\n this.setState({ isLoading: true });\r\n externalService.getTroubleShootGuideById(troubleShootGuideId).then(res => {\r\n if (res.responseCode === 12) {\r\n let textArray = [];\r\n let imageArray = [];\r\n var rgx = /(https?:\\/\\/[^\\s]+(?:png|jpe?g|gif))/g;\r\n var sections = res.troubleshootGuide.split(rgx);\r\n\r\n if (sections.length == 1) {\r\n textArray.push(sections[0])\r\n } else if (sections.length > 1) {\r\n for (var i = 0; i < sections.length; i++) {\r\n if ((/\\.(gif|jpg|jpeg|tiff|png)$/i).test(sections[i])) {\r\n\r\n let url = sections[i];\r\n var extentionIndex = url.lastIndexOf('.');\r\n var nameIndex = url.lastIndexOf('/');\r\n var extention = url.substr(extentionIndex);\r\n var fileId = url.substr(nameIndex).split('.')[0]\r\n\r\n var image = {\r\n extension: extention,\r\n fileId: fileId,\r\n fileName: extention+fileId,\r\n fileType: 1,\r\n fileUrl: url\r\n }\r\n imageArray.push(image);\r\n }\r\n else {\r\n if (sections[i] != \"\" && sections[i] != null && sections[i]) {\r\n textArray.push(sections[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.setState({\r\n troubleShootGuide: textArray.join('').replace(/]*>/g,\"\"),\r\n attachments: imageArray,\r\n isLoading: false\r\n });\r\n }\r\n });\r\n }\r\n render() {\r\n\r\n const { isLoading, troubleShootGuide, attachments } = this.state;\r\n return (\r\n
\r\n
\r\n

Troubleshooting guidelines

\r\n
\r\n {isLoading ?

\r\n \r\n

:\r\n
\r\n
'\r\n
\r\n
\r\n {attachments && attachments.length>0?\r\n
\r\n
Attachment(s)
\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\nexport default connect()(TroubleShootGuidePage);","import React, { useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport Loader from \"react-loader-spinner\";\r\n\r\n\r\nclass ExternalInvoiceOwnerFeedBack extends React.Component {\r\n\r\n state = {\r\n agencyLogoUrl:'',\r\n invoiceId:'',\r\n commentCode: '',\r\n userId:'',\r\n isLoading: false\r\n };\r\n constructor(props) {\r\n super(props);\r\n this.setState({ invoiceId:this.props.invoiceId, commentCode: this.props.commentCode, isLoading: true });\r\n }\r\n\r\n\r\n componentDidMount() {\r\n this.getOrgnizationUrl();\r\n this.updateOwnerComment();\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <>\r\n {this.createExternalInvoiceOwnerFeedBackBody()}\r\n \r\n );\r\n }\r\n\r\n createExternalInvoiceOwnerFeedBackBody = () => {\r\n const { isLoading } = this.state;\r\n return (\r\n
\r\n
\r\n {!this.state.loading?\r\n \r\n { this.state.agencyLogoUrl ?\r\n \"AgencyLogo\":\r\n Invoice Automate\r\n }\r\n
Invoice Processor
\r\n : }\r\n
\r\n
\r\n
\r\n Owner Comment\r\n
\r\n
\r\n { this.state.isLoading ?\r\n : ''\r\n }\r\n

\r\n You have marked the option \"{this.commentString(this.props.commentCode)}\" successfully for the invoice.\r\n

\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n updateOwnerComment = () => {\r\n try {\r\n AXIOS.POST(\r\n `tenant-api/invoice-process?invoiceId=${this.props.invoiceId}&userId=${this.props.userId}&commentCode=${this.props.commentCode}`\r\n ).then(data => {\r\n if(data)\r\n this.setState({isLoading : false});\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n commentString = (commentCode) => {\r\n switch (commentCode) {\r\n case \"1\":\r\n return \"I have made the payment to the trust account\";\r\n case \"2\":\r\n return \"I have made the payment directly\";\r\n case \"3\":\r\n return \"Please wait until funds are received prior to paying this bill\";\r\n default:\r\n return \"none\";\r\n }\r\n}\r\n\r\ngetOrgnizationUrl = () => {\r\n this.setState({isLoading : true});\r\n try {\r\n AXIOS.GET(\r\n `tenant-api/invoice-process/logoUrl?invoiceId=${this.props.invoiceId}`\r\n ).then(res => {\r\n if(res)\r\n this.setState({agencyLogoUrl : res.url, isLoading : false});\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n};\r\n\r\nexport default connect(\r\n)(ExternalInvoiceOwnerFeedBack);\r\n","import React from 'react';\r\nimport Loader from \"react-loader-spinner\";\r\nimport { Button, ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport ImageViewer from '../../Common/ImageViewer/ImageViewer';\r\nimport externalService from '../../../Services/ExternalService';\r\nimport { connect } from 'react-redux';\r\n\r\nclass CompletedJobAttachmentsPage extends React.Component {\r\n\r\n state = {\r\n jobId: this.props.jobId,\r\n isLoading: false,\r\n attachments: []\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n componentDidMount() {\r\n const { jobId } = this.props;\r\n this.getAttachments(jobId);\r\n }\r\n\r\n getAttachments = (jobId) => {\r\n this.setState({ isLoading: true });\r\n externalService.getAttachmentsByJobId(jobId).then(res => {\r\n \r\n let imageArray = [];\r\n \r\n for (var i = 0; i < res.length; i++) {\r\n \r\n let image = res[i];\r\n imageArray.push(image);\r\n \r\n }\r\n\r\n this.setState({\r\n attachments: imageArray,\r\n isLoading: false\r\n });\r\n \r\n });\r\n }\r\n render() {\r\n\r\n const { isLoading, attachments } = this.state;\r\n return (\r\n
\r\n
\r\n

Attachments

\r\n
\r\n {isLoading ?

\r\n \r\n

:\r\n
\r\n
\r\n \r\n {attachments && attachments.length>0?\r\n
\r\n
Job Attachment(s)
\r\n
\r\n \r\n
\r\n
:
\r\n Attachment(s) Not Found\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\nexport default connect()( CompletedJobAttachmentsPage );","import React from 'react';\r\nimport Loader from \"react-loader-spinner\";\r\nimport { Button, ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport { Navbar } from \"react-bootstrap\";\r\nimport ImageViewer from '../../Common/ImageViewer/ImageViewer';\r\nimport externalService from '../../../Services/ExternalService';\r\nimport { connect } from 'react-redux';\r\nimport './ViewJobAttachments.scss';\r\n\r\nclass ViewJobAttachments extends React.Component {\r\n\r\n state = {\r\n jobId: this.props.jobId,\r\n isLoading: false,\r\n attachments: []\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n componentDidMount() {\r\n const { jobId } = this.props;\r\n this.getAttachments(jobId);\r\n }\r\n\r\n getAttachments = (jobId) => {\r\n this.setState({ isLoading: true });\r\n externalService.getAttachmentsByJobId(jobId).then(res => {\r\n \r\n let imageArray = [];\r\n \r\n for (var i = 0; i < res.length; i++) {\r\n \r\n let image = res[i];\r\n imageArray.push(image);\r\n \r\n }\r\n\r\n this.setState({\r\n attachments: imageArray,\r\n isLoading: false\r\n });\r\n \r\n });\r\n }\r\n render() {\r\n\r\n const { isLoading, attachments } = this.state;\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \"Bricks \r\n
\r\n
\r\n

Attachments

\r\n
\r\n
\r\n
\r\n {isLoading ?

\r\n \r\n

:\r\n \r\n
\r\n \r\n
\r\n \r\n {attachments && attachments.length>0?\r\n
\r\n
Job Attachment(s)
\r\n
\r\n \r\n
\r\n
:
\r\n
Attachment(s) Not Found
\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\nexport default connect()( ViewJobAttachments );","import React from \"react\";\r\nimport { Navbar } from \"react-bootstrap\";\r\nimport ImageViewer from \"../../Common/ImageViewer/ImageViewer\";\r\nimport externalService from \"../../../Services/ExternalService\";\r\nimport { connect } from \"react-redux\";\r\nimport * as _ from 'lodash';\r\nimport \"./Assets.scss\";\r\n\r\nclass AssetCommanView extends React.Component {\r\n\r\n state = {\r\n currentStep: this.props.currentStep,\r\n assetDetails: this.props.asset,\r\n assetList: this.props.assetList,\r\n invitationId: this.props.invitationId\r\n };\r\n\r\n componentDidMount() {\r\n const { currentStep } = this.props;\r\n }\r\n\r\n handleClick = (page) => {\r\n this.setState({ currentStep: page });\r\n this.props.sendDataToParent(page);\r\n if (page === 5) {\r\n this.updateAssetDetals();\r\n }\r\n if (page === 8) {\r\n this.saveAssetList();\r\n }\r\n };\r\n\r\n updateAssetDetals = () => {\r\n try {\r\n externalService.updateAssetDetails(this.state.assetDetails).then((res) => {\r\n if (res) this.props.sendDataToParent(6);\r\n });\r\n } catch (error) {\r\n this.setState({\r\n currentStep: 10\r\n });\r\n }\r\n };\r\n\r\n saveAssetList = () => {\r\n var updatedArray = _.filter(this.state.assetList, f => f.isUpdated == true);\r\n let model = {\r\n invitationId: this.state.invitationId,\r\n assetList: updatedArray\r\n }\r\n\r\n try {\r\n externalService.submitInvitationAssetList(model).then(res => {\r\n if (res) this.props.sendDataToParent(6);\r\n });\r\n } catch (error) {\r\n this.setState({\r\n currentStep: 10\r\n });\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n {this.state.currentStep === 1 && (\r\n
\r\n
\r\n
\r\n Hi {this.props.assetsReviewInfo.recipientTeantName}\r\n
\r\n

Welcome to your

\r\n

Asset Upload Portal

\r\n
\r\n
\r\n
\r\n
\r\n Here, you can conveniently upload photos of assets
\r\n for your current property\r\n
\r\n

\r\n {this.props.assetsReviewInfo.propertyAddress}\r\n

\r\n
Let's get started!
\r\n
\r\n Regards{\" \"}\r\n {this.props.assetsReviewInfo.requestedPropertyMangerName}{\" \"}\r\n {this.props.assetsReviewInfo.requestedPropertyMangerEmail}\r\n
\r\n
\r\n
\r\n
\r\n
Tenant detail
\r\n
\r\n \r\n

\r\n {this.props.assetsReviewInfo.recipientTeantName}\r\n

\r\n

{this.props.assetsReviewInfo.recipientEmail}

\r\n
\r\n
\r\n
\r\n
\r\n this.handleClick(2)}\r\n >\r\n Get Started\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {this.state.currentStep === 2 && (\r\n
\r\n

\r\n Tips on uploading clear and quality photos of assets.\r\n

\r\n

\r\n 1Your\r\n first photo should be a standard front-facing photo of the asset\r\n you’re uploading. (Ex: Refrigerators, Television, Microwaves….)\r\n

\r\n
\r\n \r\n
\r\n {this.props.invitationId ?

\r\n 2Your\r\n second photo should be of the compliance plate of the asset you’re\r\n uploading.\r\n

:<>}\r\n {this.props.invitationId ?
\r\n \r\n
:<>}\r\n
\r\n
\r\n this.handleClick(1)}\r\n >\r\n GO BACK\r\n {\" \"}\r\n this.handleClick(3)}\r\n >\r\n NEXT\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {this.state.currentStep === 4 && (\r\n
\r\n
\r\n

Your Asset Uploading process
is almost complete

\r\n
\r\n \r\n
\r\n
Please make sure you have included all the
relevant assets of your property.
\r\n
\r\n
\r\n
\r\n this.handleClick(3)}\r\n >\r\n GO BACK\r\n {\" \"}\r\n this.handleClick(5)}\r\n >\r\n SEND\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {this.state.currentStep === 6 && (\r\n
\r\n
\r\n

Your Asset Uploading process
is completed.

\r\n
\r\n \r\n
\r\n
The report has been sent to the Bricks And Agent
successfully
\r\n
\r\n
\r\n )}\r\n {this.state.currentStep === 7 && (\r\n
\r\n
\r\n

Your Asset Uploading process
is almost complete

\r\n
\r\n \r\n
\r\n
Please make sure you have included all the
relevant assets of your property.
\r\n
\r\n
\r\n
\r\n this.handleClick(3)}\r\n >\r\n GO BACK\r\n {\" \"}\r\n this.handleClick(8)}\r\n >\r\n SEND\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {this.state.currentStep === 10 && (\r\n
\r\n
\r\n

404

\r\n
\r\n \r\n
\r\n
Something went wrong!
\r\n
\r\n
\r\n )}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default connect()(AssetCommanView);\r\n","import React from \"react\";\r\nimport { Form, Container, Row, Accordion, Card, Button, Modal } from \"react-bootstrap\";\r\nimport DatePicker from \"react-datepicker\";\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { Trans } from \"react-i18next\";\r\nimport { FilePond } from \"react-filepond\";\r\nimport { toast } from \"react-toastify\";\r\nimport ImageViewer from \"../../Common/ImageViewer/ImageViewer\";\r\nimport { Label } from \"semantic-ui-react\";\r\nimport AttachmentsDrawer from \"../../Drawers/AttachmentsDrawer/AttachmentsDrawer\";\r\nimport \"./Assets.scss\";\r\nimport TextareaAutosize from 'react-textarea-autosize';\r\n\r\nclass AssetForm extends React.Component {\r\n state = {\r\n assetName: this.props.assets.assetName || \"\",\r\n brand: this.props.assets.brand || \"\",\r\n model: this.props.assets.model || \"\",\r\n barcode: this.props.assets.barcode || \"\",\r\n dateOfPurchase: this.props.assets.dateOfPurchase || new Date(),\r\n note: this.props.assets.note || \"\",\r\n currentStep: this.props.currentStep || 1,\r\n attachments: this.props.assets.attachments,\r\n frontFacingAttachments: this.props.assets.frontFacingAttachments,\r\n compliancePlateAttachments: this.props.assets.compliancePlateAttachments,\r\n invitationId: this.props.invitationId || null,\r\n assetIndex: this.props.assetIndex || 0,\r\n assetUniqId: this.props.assetUniqId || \"\",\r\n isValidationError: false,\r\n validationErrorMessage: \"\", \r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.assetName = React.createRef();\r\n this.brand = React.createRef();\r\n this.model = React.createRef();\r\n this.barcode = React.createRef();\r\n this.note = React.createRef();\r\n }\r\n\r\n\r\n handleChange = (e) => {\r\n this.setState({ [e.target.name]: e.target.value });\r\n };\r\n\r\n handleDateChange = (date) => {\r\n this.setState({ dateOfPurchase: date });\r\n };\r\n\r\n handleFileChange = (e) => {\r\n this.setState({ attachment: e.target.files[0] });\r\n };\r\n\r\n handleSubmit = () => {\r\n //this.setState({ currentStep: 4 });\r\n this.props.goToLastStep(this.state , 4);\r\n };\r\n \r\n addToList = () => {\r\n if (this.state.assetName == '' || this.state.assetName == null) {\r\n this.setState({\r\n isValidationError: true,\r\n validationErrorMessage: \"Please add the Asset name\"\r\n });\r\n } else if (this.state.frontFacingAttachments.length == 0 && this.state.compliancePlateAttachments.length == 0) {\r\n this.setState({\r\n isValidationError: true,\r\n validationErrorMessage: \"Please add at least one photo of an asset.\"\r\n });\r\n } else {\r\n this.setState({\r\n isValidationError: false\r\n });\r\n this.props.addToList(this.state);\r\n }\r\n\r\n };\r\n\r\n \r\n render() {\r\n return (\r\n \r\n \r\n
\r\n {this.state.invitationId == null ?\r\n

\r\n Asset Details\r\n

\r\n : ''}\r\n
\r\n
\r\n Asset Name\r\n this.setState({ assetName: e.target.value })}\r\n >\r\n
\r\n
\r\n Manufacturer\r\n this.setState({ brand: e.target.value })}\r\n >\r\n
\r\n
\r\n Model\r\n this.setState({ model: e.target.value })}\r\n >\r\n
\r\n
\r\n Barcode\r\n this.setState({ barcode: e.target.value })}\r\n >\r\n
\r\n
\r\n Date of Purchase\r\n \r\n \r\n
\r\n
\r\n Note\r\n this.setState({ note: e.target.value })}\r\n />\r\n
\r\n {this.state.invitationId == null ?\r\n
\r\n \r\n
\r\n
\r\n {\r\n this.setState({ attachments: event });\r\n }}\r\n isJobPost={false}\r\n isFromBot={false}\r\n isFromAsset={true}\r\n className=\"shadow-sm bg-white rounded\"\r\n >\r\n {this.props.assets.attachments ? (\r\n {\r\n this.removeFromList(fileid, 0);\r\n }}\r\n attachments={this.state.attachments}\r\n isFromBot={false}\r\n isFromTenantManageJobPost={false}\r\n isFromAsset={true}\r\n >\r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n
\r\n
\r\n :
\r\n
\r\n Front Facing Photo\r\n
\r\n
\r\n {this.state.frontFacingAttachments.length < 1 ?\r\n {\r\n this.setState({ frontFacingAttachments: event });\r\n }}\r\n isJobPost={false}\r\n isFromBot={false}\r\n isFromAsset={true}\r\n className=\"shadow-sm bg-white rounded\"\r\n > : \"\"}\r\n {this.props.assets.frontFacingAttachments ? (\r\n {\r\n this.removeFromList(fileid, 1);\r\n }}\r\n attachments={this.state.frontFacingAttachments}\r\n isFromBot={false}\r\n isFromTenantManageJobPost={false}\r\n isFromAsset={true}\r\n >\r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n Compliance Plate Photo\r\n
\r\n
\r\n {this.state.compliancePlateAttachments.length < 1 ?\r\n {\r\n this.setState({ compliancePlateAttachments: event });\r\n }}\r\n isJobPost={false}\r\n isFromBot={false}\r\n isFromAsset={true}\r\n className=\"shadow-sm bg-white rounded\"\r\n > : \"\"}\r\n {this.props.assets.compliancePlateAttachments ? (\r\n {\r\n this.removeFromList(fileid, 2);\r\n }}\r\n attachments={this.state.compliancePlateAttachments}\r\n isFromBot={false}\r\n isFromTenantManageJobPost={false}\r\n isFromAsset={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 {this.state.isValidationError ?\r\n \r\n : ''\r\n }\r\n
\r\n
\r\n {this.state.invitationId == null ?\r\n this.handleSubmit()}\r\n >\r\n I'M DONE\r\n \r\n : this.addToList()}>\r\n ADD\r\n \r\n }\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n removeFromList(fileId, type) {\r\n if (type == 0) {\r\n var attachments = this.state.attachments.filter(function (el) {\r\n return el.fileId !== fileId;\r\n });\r\n this.setState({\r\n attachments: attachments,\r\n });\r\n } else if (type == 1) {\r\n var ffAttachments = this.state.frontFacingAttachments.filter(function (el) {\r\n return el.fileId !== fileId;\r\n });\r\n this.setState({\r\n frontFacingAttachments: ffAttachments,\r\n });\r\n } else if (type == 2) {\r\n var cpAttachments = this.state.compliancePlateAttachments.filter(function (el) {\r\n return el.fileId !== fileId;\r\n });\r\n this.setState({\r\n compliancePlateAttachments: cpAttachments,\r\n });\r\n }\r\n \r\n }\r\n}\r\n\r\nexport default AssetForm;\r\n","import React from 'react';\r\nimport {\r\n Form, Container, Row, Button, Accordion, Card,\r\n Col\r\n} from 'react-bootstrap';\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport { toast } from \"react-toastify\";\r\nimport ImageViewer from '../../Common/ImageViewer/ImageViewer';\r\nimport * as _ from 'lodash';\r\nimport { Label } from 'semantic-ui-react';\r\nimport AssetForm from './AssetForm';\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\nclass PropertyAssets extends React.Component {\r\n state = {\r\n invitationId: this.props.invitationId, \r\n assetList: this.props.assetList,\r\n assetUniqId:\"\",\r\n assetCount: 0,\r\n assetComponentCount: 1,\r\n addComponentDisabled: false,\r\n asset: {\r\n id: uuidv4(),\r\n assetName: '',\r\n brand: '',\r\n model: '',\r\n barcode: '',\r\n dateOfPurchase: new Date(),\r\n note: '',\r\n attachments: [],\r\n frontFacingAttachments: [],\r\n compliancePlateAttachments: [],\r\n openRemoveConfirmation: false,\r\n isUpdated: false,\r\n isOpen: true,\r\n isNew:true\r\n }, \r\n \r\n isValidationError: false,\r\n validationErrorMessage: \"\", \r\n currentStep: this.props.currentStep\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n componentDidMount() {\r\n if (this.state.assetList.length == 0) {\r\n this.setState({\r\n assetList: [...this.state.assetList, {\r\n id: uuidv4(),\r\n assetName: '',\r\n brand: '',\r\n model: '',\r\n barcode: '',\r\n dateOfPurchase: new Date(),\r\n note: '',\r\n attachments: [],\r\n frontFacingAttachments: [],\r\n compliancePlateAttachments: [],\r\n openRemoveConfirmation: false,\r\n isUpdated: false,\r\n isOpen: true,\r\n isNew: true\r\n }]\r\n });\r\n }\r\n }\r\n\r\n handleChange = (e) => {\r\n this.setState({ [e.target.name]: e.target.value });\r\n }\r\n\r\n handleDateChange = (date) => {\r\n this.setState({ dateOfPurchase: date });\r\n }\r\n\r\n handleFileChange = (e) => {\r\n this.setState({ attachment: e.target.files[0] });\r\n }\r\n\r\n handleClick = (page) => {\r\n this.props.sendDataToParent(page);\r\n };\r\n\r\n addAssetComponent = (count) => {\r\n if (this.state.assetComponentCount >= 49) {\r\n this.setState({ addComponentDisabled: true });\r\n }\r\n\r\n this.setState({ assetComponentCount: count + 1 });\r\n var asset = {\r\n id: uuidv4(),\r\n assetName: '',\r\n brand: '',\r\n model: '',\r\n barcode: '',\r\n dateOfPurchase: new Date(),\r\n note: '',\r\n attachments: [],\r\n frontFacingAttachments: [],\r\n compliancePlateAttachments: [],\r\n openRemoveConfirmation: false,\r\n isUpdated: false,\r\n isOpen: true,\r\n isNew:true,\r\n };\r\n this.state.assetList.push(asset);\r\n \r\n }\r\n\r\n deleteAssetComponent = (count) => {\r\n if (this.state.assetComponentCount >= 49) {\r\n this.setState({ addComponentDisabled: true });\r\n }\r\n\r\n this.setState({ assetComponentCount: count + 1 });\r\n var asset = {\r\n id: uuidv4(),\r\n assetName: '',\r\n brand: '',\r\n model: '',\r\n barcode: '',\r\n dateOfPurchase: new Date(),\r\n note: '',\r\n attachments: [],\r\n frontFacingAttachments: [],\r\n compliancePlateAttachments: [],\r\n openRemoveConfirmation: false,\r\n isUpdated: false,\r\n isOpen: true\r\n };\r\n this.state.assetList.push(asset);\r\n\r\n }\r\n\r\n addToList = (_state) => {\r\n \r\n const updatedAssetList = this.state.assetList.map(item => {\r\n if (item.id === _state.assetUniqId) { \r\n return {\r\n ...item,\r\n assetName: _state.assetName,\r\n brand: _state.brand,\r\n model: _state.model,\r\n barcode: _state.barcode,\r\n dateOfPurchase: _state.dateOfPurchase,\r\n note: _state.note,\r\n attachments: [..._state.frontFacingAttachments, ..._state.compliancePlateAttachments],\r\n frontFacingAttachments: _state.frontFacingAttachments,\r\n compliancePlateAttachments: _state.compliancePlateAttachments,\r\n isUpdated: true,\r\n isNew: false,\r\n };\r\n }\r\n return item;\r\n });\r\n\r\n this.setState({\r\n assetList: updatedAssetList,\r\n assetCount: this.state.assetCount + 1\r\n });\r\n }\r\n\r\n editAsset = (asset, index) => {\r\n var array = [...this.state.assetList];\r\n array[index] = {\r\n ...array[index],\r\n isUpdated: false,\r\n }\r\n\r\n this.setState({\r\n assetList: array,\r\n assetCount: this.state.assetCount - 1\r\n });\r\n }\r\n\r\n removeAssetConfirmation = (index) => {\r\n var array = [...this.state.assetList];\r\n array[index] = {\r\n ...array[index],\r\n openRemoveConfirmation: true,\r\n }\r\n\r\n this.setState({\r\n assetList: array\r\n });\r\n }\r\n\r\n removeAsset = (index) => {\r\n var array = [...this.state.assetList];\r\n\r\n array.splice(index, 1);\r\n this.setState({\r\n assetList: array,\r\n assetCount: this.state.assetCount - 1,\r\n assetComponentCount: this.state.assetComponentCount - 1,\r\n addComponentDisabled: false\r\n });\r\n }\r\n\r\n removeAssetRow = (index) => {\r\n var array = [...this.state.assetList];\r\n\r\n const updatedAssetList = this.state.assetList.filter(item => item.id !== index);\r\n array.splice(index, 1);\r\n this.setState({\r\n assetList: updatedAssetList,\r\n assetComponentCount: this.state.assetComponentCount - 1,\r\n addComponentDisabled: false\r\n });\r\n }\r\n cancelAssetRemove = (index) => {\r\n var array = [...this.state.assetList];\r\n array[index] = {\r\n ...array[index],\r\n openRemoveConfirmation: false,\r\n }\r\n\r\n this.setState({\r\n assetList: array\r\n });\r\n }\r\n\r\n removeFromList(fileId, index) {\r\n var attachments = this.state.assetList[index].attachments.filter(function (el) {\r\n return el.fileId !== fileId;\r\n });\r\n\r\n }\r\n\r\n handleSubmit = () => {\r\n var updatedArray = _.filter(this.state.assetList, f => f.isUpdated == true);\r\n \r\n if (updatedArray.length > 0) {\r\n this.setState({ assetList: updatedArray, isValidationError: false });\r\n this.props.goToLastStep(this.state, 7);\r\n } else {\r\n this.setState({\r\n isValidationError: true,\r\n validationErrorMessage: \"Add atleast one asset to continue\"\r\n });\r\n }\r\n } \r\n\r\n toggleAccordion = (index, itemIsOpen) => {\r\n //this.setState({ isOpen: !this.state.isOpen });\r\n\r\n var array = [...this.state.assetList];\r\n array[index] = {\r\n ...array[index],\r\n isOpen: !itemIsOpen,\r\n }\r\n\r\n this.setState({\r\n assetList: array,\r\n });\r\n };\r\n \r\n\r\n render() {\r\n return (\r\n <>\r\n
\r\n \r\n
{this.state.assetCount}/50 Assets
\r\n
0 ? '' : 'min-height-40'}`}>\r\n \r\n
\r\n {(this.state.assetList && this.state.assetList.length > 0) &&\r\n this.state.assetList.map((item, index) => (\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
Asset {index + 1}
\r\n
\r\n
\r\n {item.isUpdated &&
}\r\n
\r\n this.toggleAccordion(index, item.isOpen)}\r\n aria-expanded={item.isOpen ? 'true' : 'false'} \r\n className={item.isOpen ? \"rotate\" : \"\"}\r\n as={Button} \r\n variant=\"link\" \r\n style={{ padding: 0, border: 'none', background: 'none' }}\r\n >\r\n \"Arrow\" \r\n \r\n
\r\n {item.isNew && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n \r\n {!item.isUpdated ?\r\n \r\n :\r\n \r\n
\r\n
Asset Name
\r\n
{item.assetName}
\r\n
\r\n
\r\n
Brand
\r\n
{item.brand}
\r\n
\r\n
\r\n
Model
\r\n
{item.model}
\r\n
\r\n
\r\n
Barcode
\r\n
{item.barcode}
\r\n
\r\n
\r\n
Date of Purchase
\r\n
{item.dateOfPurchase.toString()}
\r\n
\r\n
\r\n
Note
\r\n
{item.note}
\r\n
\r\n
Attachments
\r\n
\r\n {item.attachments ? (\r\n {\r\n this.removeFromList(fileid, index);\r\n }}\r\n attachments={item.attachments}\r\n isFromBot={false}\r\n isFromTenantManageJobPost={false}\r\n isFromAsset_ff_cp={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 \r\n
\r\n
\r\n \r\n {item.openRemoveConfirmation &&\r\n
\r\n

Are you sure you want to delete the asset \"{item.assetName}\"?

\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\nexport default PropertyAssets;\r\n","import React from 'react';\r\nimport Loader from \"react-loader-spinner\";\r\nimport { Button, ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport { Navbar } from \"react-bootstrap\";\r\nimport ImageViewer from '../../Common/ImageViewer/ImageViewer';\r\nimport externalService from '../../../Services/ExternalService';\r\nimport { connect } from 'react-redux';\r\nimport AssetCommanView from './AssetCommanView';\r\nimport AssetForm from './AssetForm';\r\nimport './Assets.scss';\r\nimport PropertyAssets from './PropertyAssets';\r\n\r\nclass ExternalAssets extends React.Component {\r\n\r\n state = {\r\n assetId: this.props.assetId,\r\n invitationId: this.props.invitationId,\r\n isLoading: false,\r\n assets:{\r\n id: this.props.assetId,\r\n assetName: '',\r\n brand: '',\r\n model: '',\r\n barcode: '',\r\n dateOfPurchase: '',\r\n note: '',\r\n attachments: [],\r\n frontFacingAttachments: [],\r\n compliancePlateAttachments: []\r\n },\r\n assetsReviewInfo:{\r\n propertyAddress :'',\r\n recipientEmail :'',\r\n recipientTeantName :'',\r\n relatedOrganizationLogo :'',\r\n requestedPropertyMangerId :'',\r\n relatedOrganizationId : '',\r\n requestedPropertyMangerEmail :'',\r\n requestedPropertyMangerName :'',\r\n isLinkExpired : false,\r\n submittedUserId:''\r\n },\r\n assetList: [],\r\n currentStep: 1\r\n }\r\n\r\n componentDidMount() {\r\n const { assetId, invitationId, encriptedUserId } = this.props;\r\n this.getAssetsReviewInfo(assetId,encriptedUserId,invitationId);\r\n }\r\n\r\n\r\n getAssetsReviewInfo = (assetId,encriptedUserId,invitationId) => {\r\n this.setState({ isLoading: true });\r\n try {\r\n externalService.getPropertyAssetReviewInfo(assetId, encriptedUserId, invitationId).then(res => {\r\n this.setState({\r\n assetsReviewInfo: res,\r\n isLoading: false\r\n });\r\n\r\n if (!res.IsLinkExpired && assetId != null && assetId != undefined && assetId != '') {\r\n this.getAssets(assetId);\r\n }\r\n });\r\n } catch (error) {\r\n this.setState({\r\n currentStep: 10\r\n });\r\n }\r\n }\r\n\r\n \r\n getAssets = (assetId) => {\r\n this.setState({ isLoading: true });\r\n try {\r\n externalService.getAssetById(assetId).then(res => {\r\n this.setState({\r\n assets: res,\r\n isLoading: false\r\n });\r\n });\r\n } catch (error) {\r\n this.setState({\r\n currentStep: 10\r\n });\r\n }\r\n \r\n }\r\n\r\n goToNextStep = (step) => {\r\n console.log(\"Received data from child:\", step);\r\n this.setState({ currentStep: step })\r\n }\r\n\r\n goToLastStep = (_state,step) => {\r\n console.log(\"Received data from Last child:\", _state);\r\n this.setState({ currentStep: step });\r\n this.setState({ assets:{\r\n id: this.state.assetId,\r\n assetName: _state.assetName,\r\n brand: _state.brand,\r\n model: _state.model,\r\n barcode: _state.barcode,\r\n dateOfPurchase: _state.dateOfPurchase,\r\n note: _state.note,\r\n attachments: _state.attachments,\r\n userId: this.props.encriptedUserId\r\n } \r\n })\r\n }\r\n\r\n submitAssetList = (_state, step) => {\r\n this.setState({\r\n currentStep: step,\r\n assetList: _state.assetList,\r\n invitationId: _state.invitationId\r\n })\r\n\r\n }\r\n\r\n render() {\r\n \r\n const { isLoading, assets, assetsReviewInfo } = this.state;\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \"Bricks\r\n
\r\n
\r\n
\r\n {assetsReviewInfo.isLinkExpired && \r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Url has been expired!

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n }\r\n {(!assetsReviewInfo.isLinkExpired && this.state.currentStep == 1 || this.state.currentStep == 2 || this.state.currentStep == 4 || this.state.currentStep == 6 || this.state.currentStep == 7 || this.state.currentStep == 10) &&\r\n
\r\n \r\n
\r\n } \r\n \r\n {(!assetsReviewInfo.isLinkExpired && this.state.assetId != null && this.state.assetId != undefined && this.state.assetId != '' && this.state.currentStep == 3) &&\r\n \r\n }\r\n\r\n {(!assetsReviewInfo.isLinkExpired && this.state.invitationId != null && this.state.invitationId != undefined && this.state.invitationId != '' && this.state.currentStep == 3) &&\r\n \r\n }\r\n
\r\n )\r\n }\r\n\r\n\r\n\r\n}\r\n\r\nexport default connect()( ExternalAssets );","import React from 'react';\r\nimport Loader from \"react-loader-spinner\";\r\nimport { Button, ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport ImageViewer from '../../Common/ImageViewer/ImageViewer';\r\nimport externalService from '../../../Services/ExternalService';\r\nimport { connect } from 'react-redux';\r\nimport { registerPlugin, FilePond } from \"react-filepond\";\r\nimport FilePondPluginImageExifOrientation from \"filepond-plugin-image-exif-orientation\";\r\nimport FilePondPluginImagePreview from \"filepond-plugin-image-preview\";\r\nimport \"filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css\";\r\nimport 'filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css';\r\nimport { withTranslation, Trans } from 'react-i18next';\r\nimport { Navbar } from \"react-bootstrap\";\r\nimport AttachmentsDrawer from '../../Drawers/AttachmentsDrawer/AttachmentsDrawer';\r\nimport utilityService from '../../../Services/UtilityService';\r\nimport jobService from '../../../Services/JobService';\r\nimport propertyService from '../../../Services/PropertyService';\r\nimport Disclaimer from '../../Drawers/JobPostDrawer/Disclaimer/Disclaimer';\r\nimport { set } from 'react-ga';\r\nimport './AddJobAttachments.scss';\r\n\r\n\r\n\r\n\r\n\r\nregisterPlugin(FilePondPluginImageExifOrientation, FilePondPluginImagePreview);\r\nclass AddJobAttachments extends React.Component {\r\n\r\n state = {\r\n \r\n isLoading: false,\r\n attachments: [],\r\n showChatHelper: false,\r\n navExpanded: false,\r\n showSuccessMsg:false,\r\n jobTitle:\"\",\r\n jobState: 0,\r\n isLoading:false,\r\n jobDisclaimer:null,\r\n enableJobPostDisclaimer:false,\r\n isDrawerOpen :false,\r\n isEnableSave:false,\r\n postedOn:\"\",\r\n jobNumber:\"\",\r\n jobId:\"\",\r\n serviceConsumerId:\"\",\r\n\r\n }\r\n \r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n componentDidMount(){\r\n const { jobId} = this.props;\r\n //this.getJobDetails(jobId)\r\n document.addEventListener('load', () => {\r\n // Create Stripe instance once Stripe.js loads\r\n \r\n });\r\n \r\n this.getJobDetails(jobId)\r\n \r\n \r\n }\r\n \r\n \r\n componentDidUpdate() {\r\n const { jobId} = this.props;\r\n }\r\n \r\n getJobDetails = (jobId) =>{\r\n\r\n jobService.GetJobDetailsForExternalUsers(jobId,\"\").then((response) => {\r\n if(response)\r\n {\r\n \r\n this.setState({\r\n jobTitle:response.title,\r\n jobState:response.workflowStatusId,\r\n isLoading:true,\r\n enableJobPostDisclaimer:response.isEnableTenantJobPostDisclaimer,\r\n jobDisclaimer:response.tenantJobPostDisclaimer,\r\n serviceConsumerId:response.encryptedServiceConsumerId,\r\n postedOn:response.postedOn,\r\n jobNumber:response.jobNumber,\r\n\r\n })\r\n\r\n }\r\n else{\r\n \r\n }\r\n })\r\n\r\n \r\n \r\n }\r\n\r\n \r\n \r\n render() {\r\n let uplorder = this.getAttachments();\r\n let loding = this.state.isLoading\r\n \r\n const { isLoading, attachments } = this.state;\r\n return (
\r\n { this.state.isLoading ? (
\r\n
\r\n
\r\n \r\n \"Bricks \r\n \r\n
\r\n \r\n
\r\n

\r\n

\r\n

\r\n

\r\n

\r\n {\r\n this.state.jobState != 1 ?(
\r\n \"expired-icon\"\r\n

Sorry, the link is expired. Please contact the PM.

\r\n
) :(
\r\n \r\n {!this.state.showSuccessMsg ? (\r\n
\r\n
\r\n

This job drafted via SMS {this.timeAgo(this.state.postedOn)}

\r\n
{this.state.jobTitle}
\r\n
\r\n \r\n
\r\n{uplorder}\r\n
\r\n ):\r\n (\r\n
\r\n \"success-icon\"\r\n

Successfully logged your maintenance issue!

\r\n
Reference Number: {this.state.jobNumber}
\r\n

This maintenance request was posted to the agency {this.timeAgo(this.state.postedOn)}.

You will receive an email/SMS with a link to track your maintenance issue.

\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 getAttachments = () => {\r\n const { isShowAttchmentDrawer, isJobForMe } = this.state;\r\n const { t } = this.props;\r\n const styleflex = {\r\n flexDirection: \"column !important\",\r\n }\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Upload Photos & Videos {!this.state.isEnableSave && (required)}

\r\n {this.state.isEnableSave ?

It is optional but uploading images or videos helps understand the issue better.

:

You can attach photos or videos related to the job here.

}\r\n
\r\n
\r\n
\r\n { if(event.length >0)this.setState({ attachments: event ,isEnableSave:true})}}\r\n isJobPost={true}\r\n \r\n isExternal={true}\r\n t={t}>\r\n \r\n {(this.state.attachments) ?\r\n : ''\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n {this.state.isDrawerOpen && ( this.save()}\r\n onCloseDisclaimer = {() => this.closeDisclaimer()}\r\n isFromBot={false}\r\n >\r\n\r\n )} \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n checkSettings = () =>{\r\n if(this.state.enableJobPostDisclaimer == true)\r\n {\r\n this.setState({\r\n isDrawerOpen :true\r\n });\r\n }\r\n else{\r\n this.save();\r\n }\r\n }\r\n\r\ncloseDisclaimer = () => {\r\n this.setState({ \r\n isDrawerOpen: false,\r\n });\r\n}\r\n\r\n save = () =>{\r\n \r\n \r\n try {\r\n // const model = {\r\n // userId: this.props.serviceConsumerId,\r\n // jobId: this.props.jobId,\r\n // attachments: this.state.attachments\r\n // }\r\n \r\n utilityService.saveAttachments(this.state.attachments).then(response => {\r\n\r\n if (response) {\r\n this.setState({ showSuccessMsg:true }) \r\n } else {\r\n // toast.warn('', {\r\n // position: toast.POSITION.BOTTOM_RIGHT\r\n // });\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n \r\n }\r\n timeAgo(value) {\r\n const { t } = this.props;\r\n if (!value) return;\r\n let d = new Date(value);\r\n let now = new Date();\r\n let seconds = Math.round(Math.abs((now.getTime() - d.getTime()) / 1000));\r\n\r\n let minutes = Math.round(Math.abs(seconds / 60));\r\n let hours = Math.round(Math.abs(minutes / 60));\r\n let days = Math.round(Math.abs(hours / 24));\r\n let months = Math.round(Math.abs(days / 30.416));\r\n let years = Math.round(Math.abs(days / 365));\r\n if (Number.isNaN(seconds)) {\r\n return '';\r\n } else if (seconds <= 45) {\r\n return t('new_ui_lbl_fewSeconds');\r\n } else if (seconds <= 90) {\r\n return t('new_ui_lbl_minute');\r\n } else if (minutes <= 45) {\r\n return minutes + t('new_ui_lbl_minutes');\r\n } else if (minutes <= 90) {\r\n return t('new_ui_lbl_hour');\r\n } else if (hours <= 22) {\r\n return hours + t('new_ui_lbl_hours');\r\n } else if (hours <= 36) {\r\n return t('new_ui_lbl_day');\r\n } else if (days <= 25) {\r\n return days + t('new_ui_lbl_days');\r\n } else if (days <= 45) {\r\n return t('new_ui_lbl_month');\r\n } else if (days <= 345) {\r\n return months + t('new_ui_lbl_months');\r\n } else if (days <= 545) {\r\n return t('new_ui_lbl_year');\r\n } else {\r\n // (days > 545)\r\n return years + t('new_ui_lbl_years');\r\n }\r\n }\r\n \r\n}\r\n\r\n\r\n\r\n\r\n\r\nexport default connect()(withTranslation() (AddJobAttachments));","import \"bootstrap/dist/css/bootstrap.css\";\r\nimport React, { Suspense } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport App from \"./App\";\r\nimport ExternalUserApp from \"./ExternalUserApp\";\r\nimport registerServiceWorker from \"./registerServiceWorker\";\r\nimport { createStore } from \"redux\";\r\nimport RootReducer from \"./ReduxStore/Reducers/RootReducer\";\r\nimport { Provider } from \"react-redux\";\r\nimport { UserType } from \"./Constants/Enums\";\r\nimport { initFirebaseApp } from \"./Configuration/LoadFirebaseConfig\";\r\nimport utilityService from \"./Services/UtilityService\";\r\nimport chatService from \"./Services/ChatService\";\r\nimport LogMaintenanceBotApp from \"./LogMaintenanceBotApp\";\r\nimport './i18n';\r\nimport Loader from \"react-loader-spinner\";\r\nimport TroubleShootGuidePage from \"./Components/External/TroubleShootGuidePage/TroubleShootGuidePage\";\r\nimport ExternalInvoiceOwnerFeedBack from \"./Components/External/InvoiceProcessor/ExternalInvoiceOwnerFeedBack\";\r\nimport CompletedJobAttachmentsPage from \"./Components/External/CompletedJobAttachmentsPage/CompletedJobAttachmentsPage\";\r\nimport ViewJobAttachments from \"./Components/External/ViewJobAttachments/ViewJobAttachments\";\r\nimport ExternalAssets from \"./Components/External/Assets/ExternalAssets\";\r\n\r\nimport AddJobAttachments from \"./Components/External/AddJobAttachments/AddJobAttachments\"\r\n\r\nconst rootElement = document.getElementById(\"root\");\r\ninitFirebaseApp();\r\nconst store = createStore(RootReducer);\r\nlet urlParams = new URLSearchParams(window.location.search);\r\nconst appSettings = store.getState().AppSettings;\r\n\r\n\r\n// localStorage.setItem(\"userId\", 'zbAkvU7-B1CRjLI1p7BQzqjtioo1a8FdtTwZteYIW2JKYUlD5Hs8S_N3b3MR0xbtko5ObcGEEerg_b-yods6NQ');\r\n// localStorage.setItem(\"userType\", 4);\r\n\r\n// localStorage.setItem(\"userId\", 'jvT-UY9TO0A4UVsu2ACCMMLEm3nRGbLsZ3Si_RzxUl7f-FGrURmEurHB9IN5pIJbbmsTHGUD8uJOGPyUP721Og');\r\n// localStorage.setItem(\"userType\", 4);\r\n\r\nif (window.location.search.indexOf('code=') > -1) {\r\n const jobId = urlParams.get('code')\r\n let langCode = urlParams.get('lng')\r\n if (!langCode)\r\n langCode = 'en';\r\n else {\r\n langCode = langCode.substring(0, 5);\r\n }\r\n window.jobId = jobId;\r\n window.lng = langCode;\r\n if (urlParams.get(\"jobId\") == null) {\r\n if (jobId === undefined || jobId === '' || jobId === 'null' || jobId === null) {\r\n window.location.href = appSettings.BAndAEndPoint + 'Account/UserLogin';\r\n } else {\r\n ReactDOM.render(\r\n \r\n }>\r\n \r\n \r\n ,\r\n rootElement\r\n );\r\n }\r\n } else {\r\n ReactDOM.render(\r\n \r\n }>\r\n \r\n \r\n ,\r\n rootElement\r\n );\r\n }\r\n} else if (window.location.search.indexOf('maintenancebot=') > -1) {\r\n var color = urlParams.get(\"themeColor\");\r\n var orgId = urlParams.get(\"orgId\");\r\n var language = urlParams.get(\"lng\");\r\n ReactDOM.render(\r\n \r\n }>\r\n \r\n \r\n ,\r\n rootElement\r\n );\r\n} else if (window.location.search.indexOf('troubleshootguide') > -1) {\r\n var id = urlParams.get(\"troubleshootguideId\");\r\n ReactDOM.render(\r\n \r\n }>\r\n \r\n \r\n ,\r\n rootElement\r\n );}else if (window.location.search.indexOf('attachmentsOfCompletedMR') > -1) {\r\n var id = urlParams.get(\"attachmentsOfCompletedMRId\");\r\n ReactDOM.render(\r\n \r\n }>\r\n \r\n \r\n ,\r\n rootElement\r\n );\r\n } else if (window.location.search.indexOf('draftedJobId') > -1 && window.location.pathname.indexOf('add-job-attachments')) {\r\n \r\n var id = urlParams.get(\"draftedJobId\");\r\n ReactDOM.render(\r\n \r\n }>\r\n \r\n \r\n ,\r\n rootElement\r\n );\r\n}\r\n\r\nelse if (window.location.search.indexOf('invoiceprocessor') == true) {\r\n const externalInvoiceId = urlParams.get('invoiceId');\r\n const applicationUserId = urlParams.get('userId');\r\n const code = urlParams.get('commentCode');\r\n window.history.pushState('', null, 'invoiceprocessor');\r\n ReactDOM.render(\r\n \r\n }>\r\n \r\n \r\n ,\r\n rootElement\r\n );\r\n \r\n}\r\nelse if (window.location.search.indexOf('jobId') > -1 && window.location.pathname.indexOf(\"view-job-attachments\") > -1) {\r\n const jobId = urlParams.get('jobId');\r\n ReactDOM.render(\r\n \r\n }>\r\n \r\n \r\n ,\r\n rootElement\r\n );\r\n \r\n}\r\nelse if (window.location.search.indexOf('asset') > -1 || window.location.search.indexOf('invitation') > -1) {\r\n const assetId = urlParams.get('assetId');\r\n const invitationId = urlParams.get('invitationId');\r\n const userId = urlParams.get('userId');\r\n\r\n ReactDOM.render(\r\n \r\n }>\r\n \r\n \r\n ,\r\n rootElement\r\n );\r\n}\r\nelse {\r\n const userId = localStorage.getItem('userId');\r\n if (urlParams.get('id') == null) {\r\n if (userId === undefined || userId === '' || userId === 'null' || userId === null || (localStorage.getItem(\"exernalUserId\") != null && localStorage.getItem(\"exernalUserId\") != \"\")) {\r\n window.location.href = appSettings.BAndAEndPoint + 'Account/UserLogin';\r\n } else {\r\n localStorage.setItem(\"userId\", userId);\r\n localStorage.setItem(\"userType\", localStorage.getItem(\"userType\"));\r\n localStorage.setItem(\"exernalUserId\", \"\");\r\n\r\n }\r\n } else {\r\n localStorage.setItem(\"userId\", urlParams.get(\"id\"));\r\n localStorage.setItem(\r\n \"userType\",\r\n urlParams.get(\"isTenant\") === \"True\" ? UserType.Tenant : UserType.Owner\r\n );\r\n localStorage.setItem(\"exernalUserId\", \"\");\r\n }\r\n\r\n const isSuper = urlParams.get('isSuperAdminAsOtherUser');\r\n if (urlParams.get('isSuperAdminAsOtherUser') !== null && urlParams.get('isSuperAdminAsOtherUser') === \"true\") {\r\n localStorage.setItem(\"isSuperAdminAsOtherUser\", urlParams.get(\"isSuperAdminAsOtherUser\"));\r\n if (urlParams.get('adminId') !== null) {\r\n localStorage.setItem(\"ImpersonatingUserId\", urlParams.get(\"adminId\"));\r\n }\r\n }\r\n\r\n utilityService.getDescriptedUserId().then(res => {\r\n localStorage.setItem(\"userIdDecripted\", res);\r\n chatService.updateUserActiveStatus(res, true);\r\n });\r\n\r\n window.onbeforeunload = function () {\r\n chatService.updateUserActiveStatus(localStorage.getItem(\"userIdDecripted\"), false);\r\n };\r\n\r\n\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n rootElement\r\n );\r\n}\r\n\r\nregisterServiceWorker();\r\n","import React, { Component } from \"react\";\r\nimport _ from \"lodash\";\r\nimport { Search, Grid, Header } from \"semantic-ui-react\";\r\nimport jobService from \"../../../Services/JobService\";\r\n\r\nvar source = document.createElement(\"div\");\r\n// var service = new window.google.maps.places.AutocompleteService();\r\n// var geocoder = new window.google.maps.Geocoder();\r\n\r\nexport default class GoogleMapLocationsAutoComplete extends Component {\r\n\r\n state = {\r\n isLoading: false,\r\n latitude: 0,\r\n longitude: 0,\r\n placeId: '',\r\n value: '',\r\n results: []\r\n }\r\n\r\n componentWillMount() {\r\n this.resetComponent();\r\n }\r\n\r\n resetComponent = () => {\r\n if(this.props.formData){\r\n this.setState({ isLoading: false, results: [], value: this.props.formData.address });\r\n }else if(this.props.location){\r\n this.setState({ isLoading: false, results: [], value: this.props.location });\r\n } \r\n }\r\n\r\n handleResultSelect = (e, response) => {\r\n this.setState({ value: response.result.description });\r\n new window.google.maps.Geocoder().geocode({ 'address': response.result.description }, (results, status) => {\r\n var place = results[0];\r\n this.setState({ \r\n latitude: results[0].geometry.location.lat(),\r\n longitude: results[0].geometry.location.lng(),\r\n placeId: results[0].place_id\r\n });\r\n\r\n var suburbName = place.address_components.find(function (element) {\r\n return element.types[0] == 'locality';\r\n });\r\n\r\n var postalCode = place.address_components.find(function (element) {\r\n return element.types[0] == 'postal_code';\r\n });\r\n\r\n if (suburbName && postalCode) {\r\n jobService.GetSuburb(suburbName.long_name, postalCode.long_name).then(response => {\r\n this.props.setLocationDetails({\r\n latitude: this.state.latitude,\r\n longitude: this.state.longitude,\r\n placeId: this.state.placeId,\r\n suburbId: (response == null) ? null : response.id,\r\n location: (response == null) ? null : response.label,\r\n address: this.state.value\r\n });\r\n });\r\n } else {\r\n this.props.setLocationDetails({\r\n latitude: this.state.latitude,\r\n longitude: this.state.longitude,\r\n placeId: this.state.placeId,\r\n suburbId: null,\r\n location: null,\r\n address: this.state.value\r\n });\r\n }\r\n \r\n });\r\n \r\n //service.\r\n // this.props.location = response.result;\r\n }\r\n\r\n handleSearchChange = (e, { value }) => {\r\n var vm = this;\r\n this.setState({ isLoading: true, value: value });\r\n var countryArray = \"au\";\r\n\r\n var countryCode = localStorage.getItem(\"countryCode\");\r\n\r\n if(countryCode != \"null\" && countryCode != \"AUS\"){\r\n countryArray = \"nz\";\r\n } \r\n\r\n var request = { input: value, types: ['geocode'], componentRestrictions: { country: [countryArray] } }; \r\n \r\n if (!value.length > 0) {\r\n vm.setState({ isLoading: false, results: [] });\r\n return;\r\n }\r\n // if (this.state.isLoading) {\r\n // return;\r\n // }\r\n new window.google.maps.places.AutocompleteService().getPlacePredictions(request, function (results, status) {\r\n if (status === window.google.maps.places.PlacesServiceStatus.OK) {\r\n vm.setState({ isLoading: false, results: results });\r\n }\r\n });\r\n };\r\n\r\n geolocate = () => {\r\n if (navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(function (position) {\r\n var geolocation = {\r\n lat: position.coords.latitude,\r\n lng: position.coords.longitude\r\n };\r\n var circle = new window.google.maps.Circle({\r\n center: geolocation,\r\n radius: position.coords.accuracy\r\n });\r\n window.google.maps.LatLngBounds(circle.getBounds())\r\n // autocomplete.setBounds(circle.getBounds());\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n const { isLoading, value, results } = this.state;\r\n\r\n return (\r\n \r\n )\r\n }\r\n\r\n}\r\n","import ReactGA from 'react-ga';\r\n\r\n\r\n/**\r\n * Event - Add custom tracking event.\r\n * @param {string} category \r\n * @param {string} action \r\n * @param {string} label \r\n */\r\nexport const sendEventStatsToGoogle = (category, action, label) => {\r\n ReactGA.event({\r\n category: category,\r\n action: action,\r\n label: label\r\n });\r\n\r\n\r\n}\r\n\r\n/**\r\n * Page view - custom tracking event.\r\n * @param {string} path \r\n * @param {object} trackername \r\n * @param {string} title \r\n */\r\nexport const sendPageStatsViaStringToGoogle = (path, trackername, title) => {\r\n // ReactGA.pageview({\r\n // path: \"path\",\r\n // title: title\r\n // })\r\n ReactGA.ga('set', 'page', path)\r\n ReactGA.ga('send', 'pageview');\r\n\r\n}\r\n\r\n\r\nconst googleAnalyticsService = {\r\n sendEventStatsToGoogle,\r\n sendPageStatsViaStringToGoogle\r\n}\r\n\r\nexport default googleAnalyticsService;\r\n","import React from 'react';\r\nimport { ButtonToolbar, ToggleButtonGroup, ToggleButton, Form, Button } from 'react-bootstrap';\r\nimport './FrequentlyUsedServices.scss';\r\n\r\n\r\nfunction FrequentlyUsedServices(props) {\r\n const parentId = props.selectedService;\r\n const t = props.translationInstance;\r\n\r\n return (\r\n \r\n
\r\n {t != undefined ?
\r\n

{t('hdr_choose_servicetype')}.*

\r\n

({t('lbl_chooseoption')})

\r\n
\r\n :
\r\n

Choose the service type you need.*

\r\n

(Choose an option)

\r\n
\r\n }\r\n \r\n \r\n {props.services.map((jbType, index) => {\r\n return {jbType.label};\r\n })}\r\n {t != undefined ? {t('lbl_jobtype_other')}\r\n : Other\r\n }\r\n \r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default FrequentlyUsedServices;","import React from \"react\";\r\n\r\n// Plugins\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\n\r\n// Styles\r\nimport \"./JobLocksDrawer.scss\";\r\n\r\nclass JobLocksDrawer extends React.Component {\r\n state = {\r\n showJobLocksDrawer: false\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n return
{drawer}
;\r\n }\r\n\r\n createDrawer = () => {\r\n const propertyLocks = this.renderPropertyLocks();\r\n const { t, isFromBot } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n \"Lock-icon\"\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n {\r\n (this.state.showJobLocksDrawer) ?\r\n
{propertyLocks}
\r\n :
{isFromBot ? t('jld_info_no_results') : 'No Results Found'}
\r\n }\r\n \r\n );\r\n };\r\n\r\n renderPropertyLocks = () => {\r\n if (this.state.propertyLocks == null) {\r\n return
;\r\n }\r\n\r\n if (this.props.isSelectable) {\r\n const listItems = this.state.propertyLocks.map((lock, index) => {\r\n return
\r\n \r\n
;\r\n });\r\n\r\n return listItems;\r\n } else {\r\n const listItems = this.state.propertyLocks.map((lock, index) => {\r\n return
\r\n {lock.lockName}\r\n
;\r\n });\r\n\r\n return listItems;\r\n }\r\n }\r\n\r\n onKeySelectionChange = (event) => {\r\n const changedList = this.state.propertyLocks.map((lock, index) => {\r\n if (event.currentTarget.value == lock.id) {\r\n lock.isAssigned = event.currentTarget.checked;\r\n }\r\n\r\n return lock;\r\n });\r\n\r\n this.setState({ propertyLocks: changedList });\r\n this.props.onPropertyKeySelected(changedList.filter(a => a.isAssigned));\r\n }\r\n\r\n handleInit = () => { };\r\n\r\n toggleJobLocksDrawer = () => {\r\n this.setState({\r\n showJobLocksDrawer: !this.state.showJobLocksDrawer\r\n });\r\n\r\n try {\r\n if (this.props.propertyId) {\r\n this.setState({ isLoading: true })\r\n AXIOS.GET(`tenant-api/access/property/locks?propertyId=${this.props.propertyId}&userId=${localStorage.getItem('userId')}`)\r\n .then(dataJson => {\r\n this.setState({ isLoading: false })\r\n this.setState({ propertyLocks: dataJson.propertyLocks });\r\n });\r\n } else if (this.props.jobId) {\r\n this.setState({ isLoading: true })\r\n AXIOS.GET(`tenant-api/access/job/locks?jobId=${this.props.jobId}&userId=${localStorage.getItem('userId')}`)\r\n .then(dataJson => {\r\n const assignedLocks = dataJson.propertyLocks.filter(a => a.isAssigned);\r\n this.setState({ isLoading: false })\r\n this.setState({ propertyLocks: assignedLocks });\r\n });\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n}\r\n\r\nexport default JobLocksDrawer;\r\n","export var UserType;\r\n(function(UserType) {\r\n UserType[(UserType[\"None\"] = 0)] = \"None\";\r\n UserType[(UserType[\"Provider\"] = 1)] = \"Provider\";\r\n UserType[(UserType[\"Consumer\"] = 2)] = \"Consumer\";\r\n UserType[(UserType[\"PropertyManager\"] = 3)] = \"PropertyManager\";\r\n UserType[(UserType[\"Tenant\"] = 4)] = \"Tenant\";\r\n UserType[(UserType[\"Owner\"] = 5)] = \"Owner\";\r\n})(UserType || (UserType = {}));\r\n\r\nexport var JobsListTypes;\r\n(function(JobsListTypes) {\r\n JobsListTypes[(JobsListTypes[\"None\"] = 0)] = \"None\";\r\n JobsListTypes[(JobsListTypes[\"MatchingJobs\"] = 1)] = \"MatchingJobs\";\r\n JobsListTypes[(JobsListTypes[\"AvailableJobs\"] = 2)] = \"AvailableJobs\";\r\n JobsListTypes[(JobsListTypes[\"AwardedJobs\"] = 3)] = \"AwardedJobs\";\r\n JobsListTypes[(JobsListTypes[\"UnscheduledJobs\"] = 4)] = \"UnscheduledJobs\";\r\n JobsListTypes[(JobsListTypes[\"InProgressJobs\"] = 5)] = \"InProgressJobs\";\r\n JobsListTypes[(JobsListTypes[\"AssignedJobs\"] = 6)] = \"AssignedJobs\";\r\n JobsListTypes[(JobsListTypes[\"PendingReviewJobs\"] = 7)] = \"PendingReviewJobs\";\r\n JobsListTypes[(JobsListTypes[\"CompletedJobs\"] = 8)] = \"CompletedJobs\";\r\n JobsListTypes[(JobsListTypes[\"ArchivedJobs\"] = 9)] = \"ArchivedJobs\";\r\n JobsListTypes[(JobsListTypes[\"QuotedJobs\"] = 10)] = \"QuotedJobs\";\r\n JobsListTypes[(JobsListTypes[\"PendingApprovalJobs\"] = 11)] =\r\n \"PendingApprovalJobs\";\r\n JobsListTypes[(JobsListTypes[\"PendingOwnerApprovalJobs\"] = 12)] =\r\n \"PendingOwnerApprovalJobs\";\r\n JobsListTypes[(JobsListTypes[\"OwnerApprovedJobs\"] = 13)] =\r\n \"OwnerApprovedJobs\";\r\n JobsListTypes[(JobsListTypes[\"PostedJobs\"] = 14)] = \"PostedJobs\";\r\n JobsListTypes[(JobsListTypes[\"OverdueJobs\"] = 16)] = \"OverdueJobs\";\r\n JobsListTypes[(JobsListTypes[\"QuoteRejectedJobs\"] = 17)] =\r\n \"QuoteRejectedJobs\";\r\n JobsListTypes[(JobsListTypes[\"RecurringJobs\"] = 18)] = \"RecurringJobs\";\r\n JobsListTypes[(JobsListTypes[\"ScheduledJobs\"] = 19)] = \"ScheduledJobs\";\r\n JobsListTypes[(JobsListTypes[\"DraftedJobs\"] = 20)] = \"DraftedJobs\";\r\n JobsListTypes[(JobsListTypes[\"InactiveJobs\"] = 21)] = \"InactiveJobs\";\r\n JobsListTypes[(JobsListTypes[\"RejectedJobs\"] = 22)] = \"RejectedJobs\";\r\n JobsListTypes[(JobsListTypes[\"UpcomingJobs\"] = 23)] = \"UpcomingJobs\";\r\n JobsListTypes[(JobsListTypes[\"RevisionRequestedJobs\"] = 24)] =\r\n \"RevisionRequestedJobs\";\r\n JobsListTypes[(JobsListTypes[\"PendingScheduleApproval\"] = 26)] =\r\n \"PendingScheduleApproval\";\r\n JobsListTypes[(JobsListTypes[\"TodaysJobs\"] = 27)] = \"TodaysJobs\";\r\n JobsListTypes[(JobsListTypes[\"QuoteLimitMetJobs\"] = 28)] =\r\n \"QuoteLimitMetJobs\";\r\n JobsListTypes[(JobsListTypes[\"OwnerRejectedJobs\"] = 30)] =\r\n \"OwnerRejectedJobs\";\r\n JobsListTypes[(JobsListTypes[\"PropertyInspectionJobs\"] = 31)] =\r\n \"PropertyInspectionJobs\";\r\n JobsListTypes[(JobsListTypes[\"PostedJobForThirdParty\"] = 32)] =\r\n \"PostedJobForThirdParty\";\r\n JobsListTypes[(JobsListTypes[\"CeasedJobs\"] = 33)] = \"CeasedJobs\";\r\n JobsListTypes[(JobsListTypes[\"FinanceAcceptedQuotes\"] = 34)] =\r\n \"FinanceAcceptedQuotes\";\r\n JobsListTypes[(JobsListTypes[\"FinanceUnpaidInvoices\"] = 35)] =\r\n \"FinanceUnpaidInvoices\";\r\n JobsListTypes[(JobsListTypes[\"FinancePaidInvoices\"] = 36)] =\r\n \"FinancePaidInvoices\";\r\n JobsListTypes[(JobsListTypes[\"VariationAvailableJobs\"] = 37)] =\r\n \"VariationAvailableJobs\";\r\n JobsListTypes[(JobsListTypes[\"PendingJobs\"] = 38)] = \"PendingJobs\";\r\n JobsListTypes[(JobsListTypes[\"PendingInvoiceJobs\"] = 39)] =\r\n \"PendingInvoiceJobs\";\r\n JobsListTypes[(JobsListTypes[\"PendingPaymentJobs\"] = 40)] =\r\n \"PendingPaymentJobs\";\r\n JobsListTypes[(JobsListTypes[\"InternalPendingReviewJobs\"] = 41)] =\r\n \"InternalPendingReviewJobs\";\r\n})(JobsListTypes || (JobsListTypes = {}));\r\n\r\nexport var WorkflowStates;\r\n(function(WorkflowStates) {\r\n WorkflowStates[(WorkflowStates[\"JobDrafted\"] = 1)] = \"JobDrafted\";\r\n WorkflowStates[(WorkflowStates[\"JobPosted\"] = 2)] = \"JobPosted\";\r\n WorkflowStates[(WorkflowStates[\"JobQuotesAvailable\"] = 3)] =\r\n \"JobQuotesAvailable\";\r\n WorkflowStates[(WorkflowStates[\"JobQuoteAccepted\"] = 4)] = \"JobQuoteAccepted\";\r\n WorkflowStates[(WorkflowStates[\"JobAwaitingForApproval\"] = 5)] =\r\n \"JobAwaitingForApproval\";\r\n WorkflowStates[(WorkflowStates[\"JobAwaitingOwnerApproval\"] = 6)] =\r\n \"JobAwaitingOwnerApproval\";\r\n WorkflowStates[(WorkflowStates[\"JobCompleted\"] = 7)] = \"JobCompleted\";\r\n WorkflowStates[(WorkflowStates[\"JobArchived\"] = 8)] = \"JobArchived\";\r\n WorkflowStates[(WorkflowStates[\"JobApprovedByOwner\"] = 9)] =\r\n \"JobApprovedByOwner\";\r\n WorkflowStates[(WorkflowStates[\"JobApprovedByPM\"] = 10)] = \"JobApprovedByPM\";\r\n WorkflowStates[(WorkflowStates[\"JobRejectedByOwner\"] = 11)] =\r\n \"JobRejectedByOwner\";\r\n WorkflowStates[(WorkflowStates[\"BidCreated\"] = 101)] = \"BidCreated\";\r\n WorkflowStates[(WorkflowStates[\"BidAccepted\"] = 102)] = \"BidAccepted\";\r\n WorkflowStates[(WorkflowStates[\"BidRejected\"] = 103)] = \"BidRejected\";\r\n WorkflowStates[(WorkflowStates[\"JobCancelled\"] = 104)] = \"JobCancelled\";\r\n WorkflowStates[(WorkflowStates[\"BidJobCancelled\"] = 105)] = \"BidJobCancelled\";\r\n WorkflowStates[(WorkflowStates[\"JobRejected\"] = 106)] = \"JobRejected\";\r\n WorkflowStates[(WorkflowStates[\"JobPendingReview\"] = 107)] =\r\n \"JobPendingReview\";\r\n WorkflowStates[(WorkflowStates[\"JobPendingInvoice\"] = 111)] =\r\n \"JobPendingInvoice\";\r\n WorkflowStates[(WorkflowStates[\"VariationCreated\"] = 201)] =\r\n \"VariationCreated\";\r\n WorkflowStates[(WorkflowStates[\"VariationApproved\"] = 202)] =\r\n \"VariationApproved\";\r\n WorkflowStates[(WorkflowStates[\"VariationRejected\"] = 203)] =\r\n \"VariationRejected\";\r\n WorkflowStates[(WorkflowStates[\"JobAwardPendingApproval\"] = 204)] =\r\n \"JobAwardPendingApproval\";\r\n WorkflowStates[(WorkflowStates[\"JobPostedForThirdParty\"] = 205)] =\r\n \"JobPostedForThirdParty\";\r\n WorkflowStates[(WorkflowStates[\"JobCeased\"] = 109)] = \"JobCeased\";\r\n WorkflowStates[(WorkflowStates[\"BidDeclined\"] = 110)] = \"BidDeclined\";\r\n})(WorkflowStates || (WorkflowStates = {}));\r\n\r\nexport var PropertyInspectionStatus;\r\n(function (PropertyInspectionStatus) {\r\n PropertyInspectionStatus[(PropertyInspectionStatus[\"None\"] = 0)] = \"None\";\r\n PropertyInspectionStatus[(PropertyInspectionStatus[\"PendingApproval\"] = 1)] = \"PendingApproval\";\r\n PropertyInspectionStatus[(PropertyInspectionStatus[\"Approved\"] = 2)] = \"Approved\";\r\n PropertyInspectionStatus[(PropertyInspectionStatus[\"Rejected\"] = 3)] = \"Rejected\";\r\n PropertyInspectionStatus[(PropertyInspectionStatus[\"Completed\"] = 4)] = \"Completed\";\r\n PropertyInspectionStatus[(PropertyInspectionStatus[\"Drafted\"] = 5)] = \"Drafted\";\r\n PropertyInspectionStatus[(PropertyInspectionStatus[\"NewDateProposed\"] = 6)] = \"NewDateProposed\";\r\n})(PropertyInspectionStatus || (PropertyInspectionStatus = {}));\r\n\r\nexport var MasterDataType;\r\n(function (MasterDataType) {\r\n MasterDataType[MasterDataType[\"JobTypes\"] = 0] = \"JobTypes\";\r\n})(MasterDataType || (MasterDataType = {}));\r\n\r\nexport var ChatbotOptionType;\r\n(function(ChatbotOptionType) {\r\n ChatbotOptionType[(ChatbotOptionType[\"LogMaintenance\"] = 0)] = \"LogMaintenance\";\r\n ChatbotOptionType[(ChatbotOptionType[\"CheckRental\"] = 1)] = \"CheckRental\";\r\n ChatbotOptionType[(ChatbotOptionType[\"QandA\"] = 2)] = \"QandA\";\r\n ChatbotOptionType[(ChatbotOptionType[\"OwnerLogin\"] = 3)] = \"OwnerLogin\";\r\n ChatbotOptionType[(ChatbotOptionType[\"TrackIssue\"] = 4)] = \"TrackIssue\";\r\n})(ChatbotOptionType || (ChatbotOptionType = {}));\r\n\r\nexport var ChatbotLanguageOptionType;\r\n(function (ChatbotOptionType) {\r\n ChatbotLanguageOptionType[(ChatbotLanguageOptionType[\"English\"] = 0)] = \"English\";\r\n ChatbotLanguageOptionType[(ChatbotLanguageOptionType[\"Hindi\"] = 1)] = \"English\";\r\n ChatbotLanguageOptionType[(ChatbotLanguageOptionType[\"Chinese\"] = 2)] = \"English\";\r\n})(ChatbotLanguageOptionType || (ChatbotLanguageOptionType = {}));","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport ImageViewer from '../../Common/ImageViewer/ImageViewer';\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { Form } from 'react-bootstrap';\r\nimport GoogleMapLocationsAutoComplete from '../GoogleMapLocationsAutoComplete/GoogleMapLocationsAutoComplete';\r\nimport settingsService from '../../../Services/settingsService';\r\nimport jobService from '../../../Services/JobService';\r\nimport { Guid } from 'guid-typescript';\r\nimport DatePicker from \"react-datepicker\";\r\nimport { Search, Label, Dropdown } from 'semantic-ui-react'\r\nimport \"react-datepicker/dist/react-datepicker.css\";\r\nimport * as _ from 'lodash';\r\nimport 'semantic-ui-css/semantic.min.css'\r\nimport './JobPostWizard.scss';\r\nimport propertyService from '../../../Services/PropertyService';\r\nimport FrequentlyUsedServices from '../../Drawers/JobPostDrawer/FrequentlyUsedServices/FrequentlyUsedServices';\r\nimport AttachmentsDrawer from '../../Drawers/AttachmentsDrawer/AttachmentsDrawer';\r\nimport Disclaimer from '../../Drawers/JobPostDrawer/Disclaimer/Disclaimer';\r\nimport { AppConfiguration } from 'read-appsettings-json';\r\nimport { trackPromise } from 'react-promise-tracker';\r\nimport { Link } from 'react-router-dom';\r\nimport JobIssueTag from '../JobIssueTag/JobIssueTag';\r\nimport PropertyComponent from '../PropertyComponent/PropertyComponent';\r\nimport { withTranslation } from 'react-i18next';\r\nimport translateService from '../../../Services/TranslateService';\r\nimport TroubleshootGuidModal from \"../../Drawers/TroubleshootGuidModal/TroubleshootGuidModal\";\r\nclass JobPostWizard extends React.Component {\r\n\r\n \r\n constructor(props) {\r\n super(props);\r\n this.title = React.createRef();\r\n this.jobDescription = React.createRef();\r\n this.budgetRef = React.createRef();\r\n this.issueAreaInProperty = React.createRef();\r\n this.isUrgentIssue = React.createRef();\r\n\r\n }\r\n\r\n notifyError = (msg) => {\r\n toast.error(msg, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n if (this.props.isFromBot) {\r\n this.props.showChatbotError(msg);\r\n }\r\n }\r\n\r\n state = {\r\n userType: localStorage.getItem(\"userType\"),\r\n userId: localStorage.getItem(\"userId\"),\r\n stepFlow: [\r\n [0, \"selectProperty\"],\r\n [1, \"getMaintenaceIssue\"], \r\n [2, \"getAttachments\"],\r\n [3, \"jobPostSummary\"],\r\n [4, \"selectSubmitOption\"],\r\n [5, \"setResponse\"],\r\n [6, \"GotoHomePage\"],\r\n [7, \"GetResolvedResponseByTroubleshootGuide\"],\r\n ],\r\n selectedServiceTypeName: \"\",\r\n\r\n isJobEdit: (this.props.isJobEdit) ? true : false,\r\n jobEditId: (this.props.jobEditId) ? this.props.jobEditId : \"\",\r\n currentStep: 0,\r\n isConsumerJobPost: false,\r\n propertySearchData: [],\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: '',\r\n propertyName: '',\r\n suburbId: '',\r\n propertyType: '',\r\n jobBudget: 0,\r\n jobDescription: '',\r\n jobDescriptionEng: '',\r\n issueAreaInProperty: '',\r\n issueAreaInPropertyEng: '',\r\n },\r\n availableServices: [],\r\n availableServicesDetails: [],\r\n selectedService: { childJobTypes: [] },\r\n selectedServiceType: {\r\n parentJobType: { id: '' }\r\n },\r\n selectedSubServiceType: {},\r\n jobDetails: { attachments: [] },\r\n attachments: [],\r\n jobId: '',\r\n dueDate: '',\r\n formattedDueDate: '',\r\n jobUrgencyList: [\r\n {\r\n value: \"Emergency\",\r\n jobUrgency: -1\r\n },\r\n {\r\n value: \"Urgent\",\r\n jobUrgency: 1\r\n },\r\n {\r\n value: \"Non-Urgent\",\r\n jobUrgency: 2\r\n }\r\n ],\r\n jobUrgency: 2,\r\n propertyList: [],\r\n value: '',\r\n isLoading: false,\r\n filteredResults: [],\r\n propertyId: '',\r\n isPropertiesLoading: false,\r\n parentJobTypes: [],\r\n primaryJobTypes: [],\r\n secondaryJobTypes: [],\r\n frequentlyUsedServices: [],\r\n isShowMoreServices: false,\r\n locationDetails: {\r\n latitude: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n location: ''\r\n },\r\n isMandatoryToUploadFiles: false,\r\n isJobForMe: false,\r\n jobBudget: \"\",\r\n jobForMe: {},\r\n selectedTradees: [],\r\n isSelectedOnDemand: false,\r\n selectedQuoteLimit: 0,\r\n inviteToProviders: false,\r\n isJobPosting: false,\r\n isRestrictKeyCollectionForResidentialProperties: false,\r\n showDisclaimerDrawer: false,\r\n jobPostWorkflowStatus: 1,\r\n propertyLocks: [],\r\n isJobForMeText: '',\r\n isSubServiceTypeSelected: false,\r\n isShowAttchmentDrawer: false,\r\n parentId: '',\r\n childJobTypeId: '',\r\n subChildJobTypeId: '',\r\n jobNumber: '',\r\n isPropertyOwner: (localStorage.userType == 5) ? true : false,\r\n isShowInviteTradeDrawer: false,\r\n budgetAmount: 0,\r\n isPropertySelected: false,\r\n title: '',\r\n isLoadingTroubleshootingGuide: false,\r\n troubleShootingGuideDetails: {\r\n troubleshootGuideId: '',\r\n troubleshootGuide: '',\r\n primaryJobTypeId: '',\r\n secondaryJobTypeId: ''\r\n },\r\n primaryButtonStyle: (this.props.customStyle && this.props.customStyle.primaryButtonStyle) ? this.props.customStyle.primaryButtonStyle : {\r\n color: ''\r\n },\r\n secondaryButtonStyle: (this.props.customStyle && this.props.customStyle.secondaryButtonStyle) ? this.props.customStyle.secondaryButtonStyle : {\r\n color: ''\r\n },\r\n optionsStyle: (this.props.customStyle && this.props.customStyle.optionsStyle) ? this.props.customStyle.optionsStyle : {\r\n color: ''\r\n },\r\n isFromBot: (this.props.isFromBot) ? true : false,\r\n isMaintatanceIssueProvided: false,\r\n isJobPostOrTroubleshootGuideSelected: false,\r\n isDraftJob: false,\r\n tradeeCount: 0,\r\n jobTypeTags: [],\r\n isLoadingJobTypeTags: false,\r\n jobAssignTags: [],\r\n selectedComponent: '',\r\n selectedGoogleImage: [],\r\n selectedFeatureComponent: [],\r\n previousStep: 0,\r\n chatbotSetting: this.props.chatbotSetting ? this.props.chatbotSetting : {\r\n hideQandABot: false,\r\n hideCheckRentalStatus: false,\r\n hideKeyCollectionOptions: false,\r\n hideTroubleshootGuide: false,\r\n enableDraftJobFeature: false\r\n },\r\n maintenanceTroubleshootGuideId: null,\r\n propertyType: \"Residential\",\r\n actionValue: 0,\r\n primaryJobTypeId: '',\r\n secondaryJobTypeId: '',\r\n primaryJobTypeName: '',\r\n secondaryJobTypeName: '',\r\n isShowTroubleshootGuid: false,\r\n \r\n }\r\n\r\n componentDidMount() {\r\n setTimeout(() => {\r\n this.GetTenantPropertiesByUserId();\r\n }, 1000);\r\n\r\n this.setState({\r\n jobId: Guid.create().toString(),\r\n jobDetails: {\r\n id: this.state.jobId\r\n }\r\n });\r\n\r\n }\r\n\r\n componentDidUpdate() {\r\n\r\n }\r\n\r\n getOrganizationSettings(organizationId) {\r\n settingsService.getOrganizationSettingsByOrgId(organizationId)\r\n .then((res) => {\r\n this.setState({\r\n isMandatoryToUploadFiles: res.organizationSettingsModel.allowTenantsToImageAttachmentFeatureForTheJobposting,\r\n isRestrictKeyCollectionForResidentialProperties: res.organizationSettingsModel.isRestrictKeyCollectionForResidentialProperties,\r\n allowTenantsToSeeMatchingTrades: res.organizationSettingsModel.allowTenantsToSeeMatchingTrades,\r\n isEnableSuggestingImage: res.organizationSettingsModel.isEnableSuggestingImage,\r\n isEnableIssueTag: res.organizationSettingsModel.isEnableIssueTag,\r\n })\r\n\r\n })\r\n\r\n }\r\n\r\n GetTenantPropertiesByUserId = () => {\r\n let none = [{ propertyId: 0, propertyName: '--None--', suburbId: '', location: '', address: '', propertyType: 'Residential' }];\r\n\r\n this.setState({ isPropertiesLoading: true });\r\n let properties;\r\n let propertyNames = [];\r\n const { i18n } = this.props;\r\n\r\n propertyService.GetTenantPropertiesByUserId()\r\n .then((res) => {\r\n properties = res.properties;\r\n if (res.properties.length > 0) {\r\n\r\n properties.forEach(x => {\r\n propertyNames.push(x.address ? x.address : \" \");\r\n });\r\n \r\n this.setState({\r\n propertyList: properties,\r\n propertyId: properties[0].propertyId,\r\n isCurrentTenant: properties[0].isCurrentTenant\r\n });\r\n if (localStorage.userType != 5) {\r\n this.getPropertyDetailsByPropertyId(properties[0].propertyId);\r\n }\r\n this.setState({ isPropertiesLoading: false });\r\n this.handlePropertyChange(properties[0].propertyId);\r\n } else {\r\n this.setState({\r\n propertyList: [],\r\n propertyId: 0\r\n });\r\n this.onChangeJobType(1);\r\n }\r\n });\r\n }\r\n\r\n\r\n getPropertyDetailsByPropertyId = (propertyId) => {\r\n const selectedProperty = this.state.propertyList.filter(a => a.propertyId == propertyId);\r\n if (selectedProperty && selectedProperty.length > 0 && selectedProperty[0].propertyId != null) {\r\n this.setState({\r\n propertyId: propertyId,\r\n //locationDetails: {},\r\n formData: {\r\n address: selectedProperty[0].address,\r\n location: selectedProperty[0].location,\r\n propertyId: selectedProperty[0].propertyId,\r\n propertyName: selectedProperty[0].propertyName,\r\n suburbId: selectedProperty[0].suburbId,\r\n propertyType: selectedProperty[0].propertyType\r\n },\r\n locationDetails: selectedProperty[0],\r\n jobForMe: {\r\n propertyType: selectedProperty[0].propertyType,\r\n address: selectedProperty[0].address,\r\n latitude: selectedProperty[0].latitude,\r\n location: selectedProperty[0].location,\r\n longitude: selectedProperty[0].longitude,\r\n placeId: selectedProperty[0].placeId,\r\n suburbId: selectedProperty[0].suburbId,\r\n },\r\n });\r\n this.getOrganizationSettings(selectedProperty[0].orgnizationId);\r\n } else {\r\n this.setState({\r\n propertyId: null,\r\n locationDetails: {},\r\n formData: {\r\n address: '',\r\n location: '',\r\n propertyId: null,\r\n propertyName: '',\r\n suburbId: null,\r\n propertyType: ''\r\n }\r\n });\r\n }\r\n setTimeout(() => {\r\n if (this.state.isJobForMe == 1) {\r\n // document.getElementById('check1').checked = true;\r\n this.setState({ keyCollectType: 1 });\r\n }\r\n }, 500);\r\n }\r\n\r\n onChangeJobType = (value) => {\r\n if (value === 1 && localStorage.userType == 4) {\r\n this.setState({ isJobForMeText:
You (tenant) will be paying for this job and are responsible for all costs involved.

This job is not being sent to your property manager.
});\r\n } else {\r\n this.setState({ isJobForMeText: '' });\r\n }\r\n\r\n this.setState({\r\n isJobForMe: (value === 1) ? true : false,\r\n jobForMe: {\r\n propertyType: '',\r\n address: '',\r\n latitude: '',\r\n location: '',\r\n longitude: '',\r\n placeId: '',\r\n suburbId: '',\r\n budget: ''\r\n },\r\n formData: {\r\n propertyId: \"\"\r\n }\r\n });\r\n }\r\n\r\n onChangePropertyTypeForMe = (event) => {\r\n let formdata = {};\r\n if (!event) {\r\n formdata.propertyType = \"Residential\";\r\n this.setState({ formdata: formdata, propertyType: \"Residential\" });\r\n }\r\n let jobforMe = this.state.jobForMe;\r\n jobforMe.propertyType = event;\r\n this.setState({ jobForMe: jobforMe, propertyType: event });\r\n\r\n formdata = this.state.formData;\r\n formdata.propertyType = event;\r\n this.setState({ formdata: formdata, propertyType: event });\r\n }\r\n\r\n onKeyCollectionChange = (event) => {\r\n this.setState({\r\n keyCollectType: event\r\n });\r\n }\r\n\r\n GetKeyCollectionTypeDescription = () => {\r\n switch (this.state.keyCollectType) {\r\n case '1': return \"Collect keys from office to enter the property\"; break;\r\n case '2': return \"Collect from office, inform tenant on date & time\"; break;\r\n case '3': return \"Contact tenant to arrange access & time\"; break;\r\n default: return \"Key collection Option not mentioned\";\r\n }\r\n }\r\n\r\n handlePropertyChange = (props) => {\r\n this.setState({ property: props });\r\n this.getPropertyDetailsByPropertyId(props);\r\n }\r\n setLocationDetails = (event) => {\r\n this.setState({\r\n locationDetails: event,\r\n jobForMe: {\r\n propertyType: '',\r\n address: event.address,\r\n latitude: event.latitude,\r\n location: event.location,\r\n longitude: event.longitude,\r\n placeId: event.placeId,\r\n suburbId: event.suburbId,\r\n },\r\n formData: {\r\n address: event.address\r\n }\r\n });\r\n }\r\n\r\n\r\n handleOnChangeJobDescription = (value) => {\r\n\r\n let formdata = this.state.formData;\r\n const typedDescription = this.jobDescription.current.value;\r\n formdata.jobDescription = typedDescription;\r\n formdata.jobDescriptionEng = typedDescription;\r\n this.setState({\r\n formdata: formdata,\r\n isMaintatanceIssueProvided: true\r\n });\r\n\r\n }\r\n\r\n handleDueDateChange = (date) => {\r\n this.setState({\r\n dueDate: date,\r\n });\r\n }\r\n\r\n handleJobUrgencyOnChange = (event, props) => {\r\n this.setState({ jobUrgency: props.value });\r\n }\r\n\r\n GetJobUrgency = () => {\r\n return this.state.jobUrgency == -1 ? \"Emergency\" : this.state.jobUrgency == 1 ? \"Urgent\" : \"not-Urgent\";\r\n }\r\n\r\n closeDisclaimer = () => {\r\n this.setState({\r\n showDisclaimerDrawer: false,\r\n });\r\n }\r\n\r\n getTroubleShoutingGuide(index) {\r\n const { i18n } = this.props;\r\n this.setState({\r\n isLoadingTroubleshootingGuide: true\r\n });\r\n jobService.GetTroubleShootingGuide(this.state.formData.propertyId, this.state.formData.jobDescriptionEng).then(res => {\r\n if (res.responseCode == 12 && res.troubleshootGuide != null) { \r\n this.setState({\r\n troubleShootingGuideDetails: res,\r\n maintenanceTroubleshootGuideId: res.troubleshootGuideId,\r\n isLoadingTroubleshootingGuide: false,\r\n isShowTroubleshootGuid: true \r\n \r\n });\r\n \r\n \r\n } else {\r\n this.setState({\r\n troubleShootingGuideDetails: res,\r\n isLoadingTroubleshootingGuide: false,\r\n currentStep: (index + 1),\r\n isShowTroubleshootGuid: false \r\n });\r\n \r\n }\r\n this.SetSelectedServiceType();\r\n })\r\n }\r\n\r\n render() {\r\n const currentStepIndex = this.state.currentStep;\r\n let step = this.showCurrentStep(currentStepIndex);\r\n \r\n return (\r\n
\r\n
\r\n {step}\r\n
\r\n {(this.state.showDisclaimerDrawer == true) ?\r\n this.postJob(event)}\r\n onCloseDisclaimer={() => this.closeDisclaimer()}\r\n isFromBot={this.state.isFromBot}\r\n > : ''\r\n }\r\n {(this.state.isShowTroubleshootGuid == true) ?\r\n
\r\n \r\n
:''\r\n }\r\n \r\n );\r\n }\r\n\r\n closeTroubleshootGuid= (index) =>{\r\n this.setState({\r\n isShowTroubleshootGuid: false \r\n });\r\n }\r\n\r\n showCurrentStep = (index) => {\r\n let currentStep = this.state.stepFlow[index][1];\r\n switch (currentStep) {\r\n case \"selectProperty\":\r\n return this.selectPropertyStep(index);\r\n case \"getMaintenaceIssue\":\r\n return this.getMaintenaceIssue(index);\r\n case \"selectKeyCollectionType\":\r\n if (this.state.chatbotSetting.hideKeyCollectionOptions && this.state.isFromBot) {\r\n this.setState({\r\n keyCollectType: this.state.chatbotSetting.defaultKeyCollectionOption,\r\n currentStep: index + 1\r\n }, () => {\r\n return this.nextStep(index);\r\n })\r\n }\r\n else {\r\n return this.selectKeyCollectionType(index);\r\n }\r\n case \"getAttachments\":\r\n return this.getAttachments(index);\r\n\r\n case \"selectSubmitOption\":\r\n return this.selectSubmitOption(index);\r\n case \"setResponse\":\r\n return this.setResponse(index);\r\n case \"setTroubleShooteResponse\":\r\n return this.setTroubleShooteResponse();\r\n case \"jobPostSummary\":\r\n return this.jobPostSummary(index);\r\n case \"GotoHomePage\":\r\n return this.GoToHomePage(index);\r\n case \"GetResolvedResponseByTroubleshootGuide\":\r\n return this.GetResolvedResponseByTroubleshootGuide(index);\r\n default:\r\n return this.nextStep(index);\r\n }\r\n }\r\n\r\n selectPropertyStep = (index) => {\r\n const { propertyList, propertyId, isJobForMe, jobForMe, formData, isPropertyOwner } = this.state;\r\n const forMeText = this.state.isJobForMeText;\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

Job posting for

\r\n
\r\n \r\n { this.onChangeJobType(value) }}>\r\n {this.state.isCurrentTenant && localStorage.userType == 4 ?\r\n
Property Manager
: ''}\r\n {/* {
Job I will Pay For
} */}\r\n
\r\n
\r\n
\r\n
{forMeText}
\r\n
\r\n
\r\n\r\n {(!isJobForMe && propertyList && propertyList.length > 0) ?\r\n
\r\n
\r\n

{this.state.isFromBot ? t('pj_lbl_prop_selection_q') : 'Please Select One of Your Properties'}

\r\n
\r\n\r\n
\r\n \r\n { this.handlePropertyChange(value) }}>\r\n {propertyList.map((a, index) => {\r\n return
{a.address}
\r\n })\r\n }\r\n
\r\n
\r\n
\r\n\r\n
: ''}\r\n \r\n\r\n \r\n {(isJobForMe || isPropertyOwner) ?\r\n
\r\n
\r\n

Property Type

\r\n

(Choose an option)*

\r\n
\r\n \r\n this.onChangePropertyTypeForMe(value)}>\r\n Residential\r\n Commercial\r\n \r\n \r\n
: ''}\r\n
\r\n
\r\n \r\n
\r\n\r\n
);\r\n }\r\n getMaintenaceIssue = (index) => {\r\n const { jobUrgency, jobUrgencyList } = this.state;\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n

What is the issue ?

\r\n

Describe your issue with more details

\r\n
\r\n\r\n
\r\n Job Description\r\n \r\n\r\n
\r\n
\r\n \r\n { return { key: index, text: a.value, value: a.jobUrgency }; })}\r\n placeholder='Choose job Priority'\r\n onChange={this.handleJobUrgencyOnChange}\r\n />\r\n
\r\n {(this.jobUrgency == 1) ?\r\n
\r\n \r\n \r\n This considered as an urgent, your prpoperty manager will verify this before they create the job.\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 selectKeyCollectionType = (index) => {\r\n const { isJobForMe, isPropertyOwner } = this.state;\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n {(isJobForMe) ? '' :\r\n
\r\n
\r\n

Key collection option for trade

\r\n
\r\n
\r\n\r\n {(this.state.isRestrictKeyCollectionForResidentialProperties && this.state.formData.propertyType == 'Residential') ?\r\n \r\n this.onKeyCollectionChange(value)} defaultValue={3}>\r\n Don\\'t take the key, I want to be home so let’s arrange a time\r\n \r\n \r\n :\r\n
\r\n \r\n this.onKeyCollectionChange(value)} defaultValue={this.state.keyCollectType}>\r\n Collect keys from office to enter the property\r\n Collect from office, inform tenant on date & time\r\n Contact tenant to arrange access & time\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 getAttachments = (index) => {\r\n const { isShowAttchmentDrawer, isJobForMe } = this.state;\r\n const { t } = this.props;\r\n const styleflex = {\r\n flexDirection: \"column !important\",\r\n }\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n

Upload Photos & Videos

\r\n

Please attach photos & videos that describe your issue

\r\n
\r\n
\r\n
\r\n { this.setState({ attachments: event }) }}\r\n isJobPost={true}\r\n isFromBot={this.state.isFromBot}\r\n t={t}>\r\n \r\n {(this.state.attachments) ?\r\n : ''\r\n }\r\n
\r\n
\r\n
\r\n {this.selectKeyCollectionType(index)}\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 selectSubmitOption = (index) => {\r\n const { t } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n

{this.state.isFromBot ? t('pj_lbl_select_submit_options') : 'Please select submit option.'}

\r\n {/*

({this.state.isFromBot ? t('pj_lbl_choose_an_option') : 'choose an option'})

*/}\r\n
\r\n \r\n { this.onSubmitJob(value) }} value={this.state.actionValue}>\r\n {this.state.isFromBot ? t('pj_button_job_post') : 'Job Post'}\r\n {this.state.isFromBot ? !this.state.chatbotSetting.enableDraftJobFeature &&\r\n {t('pj_button_job_draft')}\r\n :\r\n {this.state.isFromBot ? t('pj_button_job_draft') : 'Job Draft'}\r\n }\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
)\r\n }\r\n\r\n setResponse = (index) => {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {(this.state.isDraftJob) ?\r\n

{t('pj_lbl_job_draft_response')}

\r\n :
\r\n

{t('lbl_jobpost_success')}

\r\n

Reference Number : {this.state.jobNumber}

\r\n
\r\n }\r\n
\r\n
\r\n {(this.state.isFromBot) ? : Back to home}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n nextStep = (index) => {\r\n const { i18n } = this.props;\r\n var currentStep = index;\r\n if (this.validate(index)) {\r\n if (index == 1) {\r\n if (this.state.isJobForMe) {\r\n currentStep = (index + 2);\r\n }\r\n else {\r\n\r\n let formdata = this.state.formData;\r\n const typedDescription = this.jobDescription.current.value;\r\n if (typedDescription.length > 0) { \r\n this.getTroubleShoutingGuide(index); \r\n } \r\n }\r\n } else if (this.state.isJobForMe && index == 4) {\r\n currentStep = (index + 5);\r\n }\r\n\r\n else if (this.state.isJobForMe && index == 9) {\r\n currentStep = (index - 4);\r\n }\r\n else if (this.state.isJobForMe && index == 5) {\r\n currentStep = (index + 5);\r\n }\r\n else if (!this.state.isJobForMe && !this.state.allowTenantsToSeeMatchingTrades && index == 8) { // 7\r\n currentStep = (index + 3);\r\n }\r\n else if (!this.state.isJobForMe && this.state.allowTenantsToSeeMatchingTrades && index == 8) {\r\n currentStep = (index + 2);\r\n }\r\n else if (!this.state.isJobForMe && !this.state.allowTenantsToSeeMatchingTrades && index == 10) { //7\r\n currentStep = (index + 2);\r\n }\r\n else {\r\n currentStep = (index + 1);\r\n }\r\n\r\n\r\n } else {\r\n return false;\r\n } \r\n currentStep = this.permissionCheckNextStep(currentStep);\r\n this.setState({ currentStep: currentStep, previousStep: index });\r\n }\r\n\r\n previousStep = (index) => {\r\n var currentStep = index;\r\n if (this.state.isJobForMe && index == 9) { // 7\r\n currentStep = (index - 6);\r\n }\r\n else if (this.state.isJobForMe && index == 8) { //6\r\n currentStep = (index - 5);\r\n }\r\n else if (this.state.isJobForMe && index == 10) { //6\r\n currentStep = (index - 6);\r\n }\r\n else if (this.state.isJobForMe && index == 5) { //6\r\n currentStep = (index + 5);\r\n }\r\n else if (!this.state.isJobForMe && index == 9) { //7\r\n currentStep = (index - 2);\r\n }\r\n else if (!this.state.isJobForMe && this.state.allowTenantsToSeeMatchingTrades && index == 11) {\r\n currentStep = (index - 1);\r\n }\r\n else if (!this.state.isJobForMe && index == 11) { //7\r\n currentStep = (index - 3);\r\n }\r\n else if (!this.state.isJobForMe && this.state.allowTenantsToSeeMatchingTrades && index == 10) {\r\n currentStep = (index - 2);\r\n }\r\n else {\r\n currentStep = (index - 1);\r\n }\r\n \r\n currentStep = this.permissionCheckBackStep(currentStep);\r\n this.setState({ currentStep: currentStep, previousStep: index });\r\n }\r\n\r\n permissionCheckNextStep = (nextIndex) => {\r\n if (!this.state.isJobForMe && nextIndex == 6 && !this.state.isEnableSuggestingImage) {\r\n nextIndex = (nextIndex + 1);\r\n }\r\n if (!this.state.isJobForMe && nextIndex == 7 && !this.state.isEnableIssueTag) {\r\n nextIndex = (nextIndex + 1);\r\n }\r\n return nextIndex;\r\n }\r\n\r\n permissionCheckBackStep = (nextIndex) => {\r\n if (!this.state.isJobForMe && nextIndex == 6 && !this.state.isEnableSuggestingImage) {\r\n nextIndex = (nextIndex - 1);\r\n }\r\n if (!this.state.isJobForMe && nextIndex == 7 && !this.state.isEnableIssueTag) {\r\n nextIndex = (nextIndex - 1);\r\n }\r\n return nextIndex;\r\n }\r\n\r\n showAttachmentDrawer = () => {\r\n this.setState({ isShowAttchmentDrawer: true });\r\n }\r\n\r\n checkIfFilesMandatory = (index) => {\r\n const { t } = this.props;\r\n if (!this.state.isJobForMe) {\r\n if (this.state.isMandatoryToUploadFiles) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_attachments_empty') : 'Attachments are required.');\r\n return false;\r\n } else {\r\n this.nextStep(index);\r\n }\r\n } {\r\n this.nextStep(index);\r\n }\r\n }\r\n\r\n onSubmitJob = (workflow) => {\r\n const { t } = this.props;\r\n if (this.state.isJobForMe || workflow == 1) {\r\n if (workflow == 1) {\r\n this.setState({ isDraftJob: true });\r\n }\r\n this.postJob(workflow);\r\n } else {\r\n if (!this.state.isJobForMe && this.state.isMandatoryToUploadFiles && (this.state.attachments == [] || this.state.attachments.length == 0)) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_attachments_empty') : 'Attachments are required.');\r\n return false;\r\n } else {\r\n this.loadDisclaimer(workflow);\r\n }\r\n }\r\n \r\n }\r\n\r\n loadDisclaimer = (workflow) => {\r\n this.setState({\r\n isLoading: true\r\n });\r\n propertyService.GetDisclaimerByPropertyId(this.state.formData.propertyId).then(res => {\r\n this.setState({\r\n isLoading: false\r\n });\r\n if (res !== null && res !== '') {\r\n this.setState({\r\n showDisclaimerDrawer: true,\r\n disclamimerText: res,\r\n jobPostWorkflowStatus: workflow,\r\n actionValue: 0\r\n });\r\n } else {\r\n this.postJob(workflow);\r\n }\r\n });\r\n }\r\n\r\n validate = (index) => {\r\n const { tradeeCount, jobBudget, budgetAmount, suburbId, isSelectedOnDemand,\r\n inviteToProviders, isJobForMe, selectedTradees, selectedService,\r\n selectedServiceType, formData } = this.state\r\n let currentStep = this.state.stepFlow[index][1];\r\n const { t } = this.props;\r\n\r\n switch (currentStep) {\r\n case \"selectProperty\":\r\n if (isJobForMe && (this.state.jobForMe.suburbId == '' || this.state.jobForMe.suburbId == null)) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_invalid_address') : 'Please enter a valid address.');\r\n return false;\r\n }\r\n if (this.state.jobForMe.address == \"\" && isJobForMe) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_no_address') : 'Please enter the address.');\r\n return false;\r\n } else if (!isJobForMe && !this.state.property) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_no_property_selected') : 'Please select a property.');\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n case \"getMaintenaceIssue\":\r\n if ((this.state.formData.jobDescription == '' || this.state.formData.jobDescription == undefined) && (!this.jobDescription.current.value || this.jobDescription.current.value == '')) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_no_jd') : 'Please enter job description.');\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n\r\n case \"getAttachments\":\r\n if (!this.state.isJobForMe) {\r\n if (this.state.isMandatoryToUploadFiles && this.state.attachments.length == 0) {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_attachments_empty') : 'Attachments are required.');\r\n return false;\r\n } \r\n else if (this.state.keyCollectType == undefined || this.state.keyCollectType == '') {\r\n this.notifyError(this.state.isFromBot ? t('pj_error_key_coll_method_not_selected') : 'Please select property key collection method.');\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n } else {\r\n return true;\r\n }\r\n case \"setResponse\":\r\n return this.setResponse(index);\r\n\r\n default:\r\n return true;\r\n\r\n }\r\n }\r\n\r\n postJob = (workflow) => {\r\n const workflowId = workflow;\r\n let jobDetails = {};\r\n const { address, budget, latitude, location, longitude, placeId, propertyType, suburbId } = this.state.jobForMe;\r\n const { selectedService, selectedServiceType, formData, jobBudget, selectedTradees, isSelectedOnDemand, selectedQuoteLimit, budgetAmount, jobAssignTags, selectedComponent, selectedFeatureComponent } = this.state;\r\n if (this.state.isJobForMe == true) {\r\n\r\n jobDetails.propertyId = null;\r\n jobDetails.suburbId = suburbId;\r\n jobDetails.address = address;\r\n jobDetails.location = location;\r\n jobDetails.jobPropertyTypes = propertyType;\r\n if (this.state.jobForMe && this.state.jobForMe.propertyType && this.state.jobForMe.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n else if (this.state.jobForMe && this.state.jobForMe.propertyType && this.state.jobForMe.propertyType === \"Commercial\") {\r\n jobDetails.propertyTypeId = 1;\r\n } else {\r\n if (this.state.propertyType && this.state.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n } else {\r\n jobDetails.propertyTypeId = 1;\r\n }\r\n }\r\n jobDetails.budgetId = parseInt(jobBudget);\r\n if (jobBudget == '-999') {\r\n jobDetails.budgetAmount = parseFloat(budgetAmount);\r\n }\r\n if (isSelectedOnDemand) {\r\n jobDetails.targetedTradeeOption = 4;\r\n jobDetails.sendInvitationtoAll = false;\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n let tradees = [];\r\n selectedTradees.forEach(element => {\r\n tradees.push({\r\n isAssigned: true,\r\n userId: element.userId,\r\n name: element.name,\r\n email: element.email,\r\n firstName: element.name,\r\n lastName: element.name,\r\n });\r\n });\r\n jobDetails.tradees = tradees;\r\n } else {\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n jobDetails.targetedTradeeOption = 0;\r\n jobDetails.sendInvitationtoAll = true;\r\n jobDetails.tradees = [];\r\n }\r\n } else {\r\n if (this.state.formData.propertyId == 0 || this.state.formData.propertyId == undefined) {\r\n jobDetails.propertyId = null;\r\n jobDetails.suburbId = this.state.locationDetails.suburbId;\r\n jobDetails.address = this.state.locationDetails.address;\r\n jobDetails.jobPropertyTypes = this.refs.jobPropertyTypes.props.value;\r\n if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n } else if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Commercial\") {\r\n jobDetails.propertyTypeId = 1;\r\n }\r\n else {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n } else {\r\n jobDetails.propertyId = this.state.formData.propertyId;\r\n jobDetails.address = this.state.formData.address;\r\n jobDetails.location = this.state.formData.location;\r\n jobDetails.propertyName = this.state.formData.propertyName;\r\n jobDetails.suburbId = this.state.formData.suburbId;\r\n if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Residential\") {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n else if (this.state.formData && this.state.formData.propertyType && this.state.formData.propertyType === \"Commercial\") {\r\n jobDetails.propertyTypeId = 1;\r\n } else {\r\n jobDetails.propertyTypeId = 0;\r\n }\r\n jobDetails.jobPropertyTypes = this.state.formData.propertyType;\r\n }\r\n jobDetails.propertyKeyCollectType = parseInt(this.state.keyCollectType);\r\n\r\n if (isSelectedOnDemand) {\r\n jobDetails.targetedTradeeOption = 4;\r\n jobDetails.sendInvitationtoAll = false;\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n let tradees = [];\r\n selectedTradees.forEach(element => {\r\n tradees.push({\r\n isAssigned: true,\r\n userId: element.userId,\r\n name: element.name,\r\n email: element.email,\r\n firstName: element.name,\r\n lastName: element.name,\r\n });\r\n });\r\n jobDetails.tradees = tradees;\r\n } else {\r\n jobDetails.quoteLimit = parseInt(selectedQuoteLimit);\r\n jobDetails.targetedTradeeOption = 0;\r\n jobDetails.sendInvitationtoAll = true;\r\n jobDetails.tradees = [];\r\n }\r\n }\r\n jobDetails.id = this.state.jobId;\r\n jobDetails.secondaryJobType = this.state.secondaryJobTypeId;\r\n jobDetails.secondaryJobTypeDisplay = this.state.secondaryJobTypeName;\r\n jobDetails.primaryJobType = this.state.primaryJobTypeId;\r\n jobDetails.primaryJobTypeDisplay = this.state.primaryJobTypeName;\r\n jobDetails.jobPropertyLocks = this.state.propertyLocks.map((item, index) => {\r\n const jobLock = {};\r\n jobLock.jobId = null;\r\n jobLock.propertyLock = {};\r\n jobLock.propertyLock.id = item.id;\r\n jobLock.propertyLock.lockId = item.lockId;\r\n jobLock.propertyLock.propertyId = jobDetails.propertyId;\r\n return jobLock;\r\n });\r\n\r\n jobDetails.jobType = this.state.secondaryJobTypeId;\r\n\r\n jobDetails.jobTypeDisplay = this.state.formData.childJobType;\r\n jobDetails.title = this.state.formData.jobDescriptionEng;\r\n jobDetails.description = this.state.formData.jobDescriptionEng;\r\n jobDetails.jobUrgencyId = this.state.jobUrgency;\r\n\r\n jobDetails.dueDate = (!this.state.dueDate) ? null : this.state.dueDate;\r\n jobDetails.JobUrgencyDisplay = this.state.jobUrgency == -1 ? \"Emergency\" : this.state.jobUrgency == 1 ? \"Urgent\" : \"not-Urgent\";\r\n jobDetails.jobValidityPeriod = 1;\r\n jobDetails.serviceConsumerId = localStorage.getItem('userId');\r\n\r\n jobDetails.workflowStatusId = workflow === 1 ? 1 : 2;\r\n jobDetails.attachments = this.state.attachments;\r\n if (workflowId == 2) {\r\n jobDetails.isActive = true;\r\n }\r\n if (selectedComponent != '') {\r\n jobDetails.JobPropertyComponentId = selectedComponent;\r\n }\r\n\r\n if (jobAssignTags != undefined && jobAssignTags.length > 0) {\r\n jobDetails.JobAssignTagIds = jobAssignTags;\r\n }\r\n\r\n if (selectedFeatureComponent != undefined && selectedFeatureComponent.length > 0) {\r\n jobDetails.JobPropertyFeatureComponentIds = selectedFeatureComponent;\r\n }\r\n\r\n jobDetails.issueAreaInProperty = (this.state.formData.issueAreaInPropertyEng) ? this.state.formData.issueAreaInPropertyEng : this.state.formData.issueAreaInProperty;\r\n\r\n if (this.state.maintenanceTroubleshootGuideId && this.state.maintenanceTroubleshootGuideId != '') {\r\n jobDetails.maintenanceTroubleshootGuideId = this.state.maintenanceTroubleshootGuideId;\r\n }\r\n if (this.state.isFromBot) {\r\n jobDetails.channelId = 12;\r\n } else {\r\n jobDetails.channelId = 1;\r\n }\r\n this.setState({ isJobPosting: true })\r\n try {\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/job-post`, jobDetails, {\r\n 'headers': { 'ClientSecret': AppConfiguration.Setting().ClientSecret, 'ChannelId': jobDetails.channelId }\r\n })\r\n .then(dataJson => {\r\n this.setState({ isJobPosting: false })\r\n const message = workflowId === 1 ? 'drafted' : 'posted'\r\n if (dataJson == 'Request Unauthorized' || dataJson == 'Job creation failed') {\r\n toast.error(`Job is not ${message} successfully. Please try again.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n } else {\r\n toast.success(`Job is ${message} successfully.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.setState({ jobNumber: dataJson.jobNumber });\r\n this.setState({ currentStep: 5 });\r\n this.setState({\r\n attachments: [],\r\n value: '',\r\n isShowMoreServices: false,\r\n showDisclaimerDrawer: false,\r\n jobPostWorkflowStatus: 1\r\n });\r\n if (this.state.troubleShootingGuideDetails.troubleshootGuideId != '') {\r\n this.saveTroubleShootResult(false, dataJson.id);\r\n }\r\n }\r\n }, error => {\r\n console.log(error);\r\n this.setState({ isJobPosting: false });\r\n const message = workflowId === 1 ? 'draf' : 'post';\r\n toast.error(`Fail to ${message} the job. Please try again.`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n })\r\n )\r\n\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n saveTroubleShootResult = (isResolved = false, jobId = \"\") => {\r\n let troubleShootResult = {};\r\n troubleShootResult.isResolved = isResolved;\r\n troubleShootResult.jobId = jobId;\r\n troubleShootResult.userId = this.state.userId;\r\n troubleShootResult.maintenanceTroubleshootGuideId = this.state.troubleShootingGuideDetails.troubleshootGuideId;\r\n troubleShootResult.description = this.state.formData.jobDescriptionEng;\r\n troubleShootResult.propertyId = this.state.propertyId;\r\n jobService.saveTroubleShootingResult(troubleShootResult).then(response => {\r\n if (response) {\r\n if (isResolved) {\r\n this.setState({ currentStep: 7,isShowTroubleshootGuid:false });\r\n this.showCurrentStep(7);\r\n }\r\n }\r\n });\r\n }\r\n\r\n continueJobPosting = (index) => {\r\n let jobTypes = this.props.jobTypes;\r\n this.state.selectedService = jobTypes.find(x => x.parentJobType.id == this.state.troubleShootingGuideDetails.primaryJobTypeId);\r\n\r\n this.setState({\r\n currentStep: (index + 1),\r\n parentId: this.state.troubleShootingGuideDetails.primaryJobTypeId,\r\n childJobTypeId: this.state.troubleShootingGuideDetails.secondaryJobTypeId,\r\n isShowTroubleshootGuid:false\r\n });\r\n }\r\n\r\n GetResolvedResponseByTroubleshootGuide = () => {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n

You have successfully resolved the issue

\r\n
\r\n
\r\n {(this.state.isFromBot) ? : Back to home}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n t() {\r\n return false;\r\n }\r\n\r\n\r\n SetSelectedServiceType = () => {\r\n let jobTypes = this.props.jobTypes;\r\n\r\n let selectedService = jobTypes.find(x => x.parentJobType.id == this.state.troubleShootingGuideDetails.primaryJobTypeId);\r\n this.setState({\r\n title: selectedService.parentJobType.title,\r\n primaryJobTypeId: selectedService.parentJobType.id,\r\n secondaryJobTypeId: this.state.troubleShootingGuideDetails.secondaryJobTypeId,\r\n primaryJobTypeName: selectedService.parentJobType.title,\r\n secondaryJobTypeName: selectedService.childJobTypes.find(x => x.id == this.state.troubleShootingGuideDetails.secondaryJobTypeId).title,\r\n });\r\n }\r\n\r\n jobPostSummary = (index) => {\r\n const { address, title, jobUrgency, description, keyCollectType, attachments } = this.state;\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n

Please check all the information below is correct

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

Property

\r\n

{this.state.formData.address}

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

Service

\r\n

{this.state.secondaryJobTypeName}

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

Job Title

\r\n

{this.state.primaryJobTypeName}

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

Urgency

\r\n

{this.GetJobUrgency()}

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

Description

\r\n

{this.state.formData.jobDescriptionEng}

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

Key Collection

\r\n

{this.GetKeyCollectionTypeDescription()}

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

Attachments

\r\n {(this.state.attachments) ?\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 GoToHomePage = (index) => {\r\n let { history } = this.props;\r\n history.push(\"/home\");\r\n }\r\n}\r\n\r\n\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n return {\r\n jobTypes: state.Jobs.jobTypes,\r\n dateFormat: state.User.dateFormat,\r\n userRoles: state.User.userRoles,\r\n properties: state.Tenant.tenantProperties,\r\n isCurrentTenant: state.Tenant.isCurrentTenant,\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n updateProperties: properties => {\r\n dispatch({ type: \"SET_PROPERTIES\", properties: properties });\r\n },\r\n };\r\n};\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withTranslation()(JobPostWizard));","import React from \"react\";\r\nimport ImageViewer from \"../../../Common/ImageViewer/ImageViewer\";\r\n\r\nclass JobNotes extends React.Component {\r\n render() {\r\n const jobNotes = this.props.jobNotes;\r\n return (\r\n
\r\n
\r\n {(jobNotes.length === 0 || jobNotes == null) ? \"Notes not available\" : \r\n (jobNotes.map((note, index) => {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n
\r\n \"\"\r\n
\r\n
\r\n

{note.createdUserName}

\r\n

{note.createdUserType}

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {(note.attachments && note.attachments.length > 0) ? (\r\n
\r\n
\r\n
Attachment(s)
\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\nexport default JobNotes;\r\n","import { AXIOS } from '../Utilities/HttpRequest/Axios';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\n\r\nconst saveScheduleJob = (scheduleData) => {\r\n return AXIOS.POST(`tenant-api/save-schedule-job?userId=${localStorage.getItem('userId')}`, scheduleData);\r\n}\r\n\r\nconst saveExternalScheduleJob = (scheduleData) => {\r\n return AXIOS.POST(`tenant-api/save-external-schedule-job`, scheduleData);\r\n}\r\n\r\nconst scheduleService = {\r\n saveScheduleJob,\r\n saveExternalScheduleJob\r\n}\r\n\r\nexport default scheduleService;","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport Datetime from \"react-datetime\";\r\nimport Drawer from '../../Common/Drawer/Drawer';\r\nimport scheduleService from '../../../Services/ScheduleService';\r\nimport { toast } from 'react-toastify';\r\n\r\nclass ScheduleJobDrawer extends React.Component {\r\n\r\n state = {\r\n showScheduleJob: false,\r\n events: [],\r\n fromDate: '',\r\n fromTime: '',\r\n toDate: '',\r\n toTime: '',\r\n title: '',\r\n description: ''\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({\r\n title: this.props.jobDetails.title,\r\n description: this.props.jobDetails.description\r\n })\r\n };\r\n\r\n render() {\r\n const header = this.createHeader();\r\n const body = this.createBody();\r\n const footer = this.createFooter();\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n handleChange = (event, name) => {\r\n if (this.state.hasOwnProperty(name)) {\r\n this.setState({ [name]: event });\r\n }\r\n }\r\n\r\n createBody = () => {\r\n var yesterday = Datetime.moment().subtract(1, 'day');\r\n var validDate = function (current) {\r\n return current.isAfter(yesterday);\r\n };\r\n return (\r\n
\r\n
\r\n
\r\n {(this.props.jobDetails.scheduleEventId === null) ?\r\n
\r\n \r\n this.setState({ title: event.target.value })} id=\"title\" placeholder=\"Title\" class=\"form-control\" />\r\n
\r\n : ''\r\n }\r\n {(this.props.jobDetails.scheduleEventId === null) ?\r\n
\r\n \r\n this.setState({ description: event.target.value })} id=\"Description\" placeholder=\"Description\" class=\"form-control\" />\r\n
\r\n : ''\r\n }\r\n
\r\n
\r\n
\r\n
\r\n { this.handleChange(event, 'fromDate') }} />\r\n
\r\n
\r\n { this.handleChange(event, 'fromTime') }} />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n { this.handleChange(event, 'toDate') }} />\r\n
\r\n
\r\n { this.handleChange(event, 'toTime') }} />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n\r\n validateUI = () => {\r\n let v = true;\r\n if (this.props.jobDetails.scheduleEventId === null && document.getElementById('title').value == '') { v = v && false; toast.error('Please enter title.', { position: toast.POSITION.BOTTOM_RIGHT }) };\r\n if (this.state.fromDate == '') { v = v && false; toast.error('Please select start date.', { position: toast.POSITION.BOTTOM_RIGHT }) };\r\n if (this.state.fromTime == '') { v = v && false; toast.error('Please select start time.', { position: toast.POSITION.BOTTOM_RIGHT }) };\r\n if (this.state.toDate == '') { v = v && false; toast.error('Please select end date.', { position: toast.POSITION.BOTTOM_RIGHT }) };\r\n if (this.state.toTime == '') { v = v && false; toast.error('Please select end time.', { position: toast.POSITION.BOTTOM_RIGHT }) };\r\n if (v && new Date(new Date(this.state.fromDate).toDateString() + ' ' + this.state.fromTime.format('hh:mm A')) < new Date()) {\r\n v = v && false; toast.error('start Date & Time should greater than current date & time', { position: toast.POSITION.BOTTOM_RIGHT });\r\n }\r\n if (v && new Date(new Date(this.state.fromDate).toDateString() + ' ' + this.state.fromTime.format('hh:mm A')) > new Date(new Date(this.state.toDate).toDateString() + ' ' + this.state.toTime.format('hh:mm A'))) {\r\n v = v && false; toast.error('End Date & Time should greater than start date & time', { position: toast.POSITION.BOTTOM_RIGHT });\r\n }\r\n\r\n return v;\r\n }\r\n\r\n onScheduleAJob = () => {\r\n if (this.validateUI()) {\r\n let obj = {};\r\n\r\n obj.JobId = this.props.jobDetails.id;\r\n if (this.props.jobDetails.scheduleEventId === null) {\r\n obj.description = document.getElementById('Description').value;\r\n obj.title = document.getElementById('title').value;\r\n obj.status = 1;\r\n } else {\r\n obj.id = this.props.jobDetails.scheduleEventId;\r\n obj.status = 4;\r\n }\r\n obj.type = 0;\r\n obj.bidId = this.props.isExternal ? this.props.jobDetails.acceptedBidId : this.props.jobDetails.acceptedBid.bidId;\r\n obj.userId = localStorage.getItem('userIdDecripted');\r\n obj.fromDate = new Date(this.state.fromDate).toDateString();\r\n obj.fromTime = this.state.fromTime.format('hh:mm A');\r\n obj.toDate = new Date(this.state.toDate).toDateString();\r\n obj.toTime = this.state.toTime.format('hh:mm A');\r\n\r\n //if (this.props.isExternal) {\r\n scheduleService.saveExternalScheduleJob(obj).then(response => {\r\n if (response) {\r\n toast.success('Job Scheduled', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.toggleSheduleJobDrawer();\r\n this.props.getJobDetails(this.props.jobDetails.id);\r\n }\r\n });\r\n //} else {\r\n // scheduleService.saveExternalScheduleJob(obj).then(response => {\r\n // if (response) {\r\n // toast.success('Job Scheduled', {\r\n // position: toast.POSITION.BOTTOM_RIGHT\r\n // });\r\n // this.props.toggleSheduleJobDrawer();\r\n // this.props.getJobDetails(this.props.jobDetails.id);\r\n // }\r\n // });\r\n //}\r\n\r\n }\r\n\r\n }\r\n\r\n //onSelectDate = (infor) => {\r\n // if (window.confirm('do you want to add an event?')) {\r\n // this.setState({\r\n // events: this.state.events.concat({\r\n // start: infor.start.getTime(),\r\n // end: infor.end.getTime(),\r\n // title: infor.startStr,\r\n // allDay: infor.allDay\r\n // })\r\n // });\r\n // }\r\n //}\r\n\r\n createHeader = () => {\r\n return (\r\n <>\r\n

{(this.props.jobDetails.scheduleEventId == null) ? 'Schedule Job' : 'Re-Schedule Job'}

\r\n
\r\n this.props.toggleSheduleJobDrawer()}>\r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createFooter = () => {\r\n return (\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\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n isRefresh: state.MyJobs.isRefreshGrid,\r\n userType: state.User.userType,\r\n dateFormat: state.User.dateFormat\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n refreshGrid: isRefresh => {\r\n dispatch({ type: \"REFRESH_GRID\", isRefresh: isRefresh });\r\n }\r\n };\r\n};\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(ScheduleJobDrawer);","import { AXIOS } from '../Utilities/HttpRequest/Axios';\r\n\r\n\r\nconst GetFrequentlyUsedJobTypes = () => {\r\n return AXIOS.GET(`tenant-api/get-grequently-used-job-types?userId=${localStorage.getItem('userId')}`);\r\n}\r\n\r\nconst GetSubJobTypes = (jobRef) => {\r\n return AXIOS.GET(`tenant-api/job-sub-types?parentRef=${jobRef}`);\r\n}\r\n\r\nconst GetSuburb = (suburbName, postCode) => {\r\n return AXIOS.GET(`tenant-api/get-suburb?suburbName=${suburbName}&postCode=${postCode}&userId=${localStorage.getItem('userIdDecripted')}`);\r\n}\r\n\r\nconst CancelJob = (jobId) => {\r\n return AXIOS.GET(`tenant-api/cancel-job?jobId=${jobId}&userId=${localStorage.getItem('userIdDecripted')}`);\r\n}\r\n\r\nconst GetMarketplace = (suburbId, secondaryJobTypeId) => {\r\n return AXIOS.GET(`tenant-api/marketplace?userId=${localStorage.getItem('userIdDecripted')}&suburbId=${suburbId}&secondaryJobType=${secondaryJobTypeId}`);\r\n}\r\n\r\nconst GetJobTradeeCount = (jobTypeId, suburbId) => {\r\n return AXIOS.GET(`tenant-api/getJobTradeeCount?jobTypeId=${jobTypeId}&suburbId=${suburbId}`);\r\n}\r\n\r\nconst GetJobDetailsForExternalUsers = (jobId,userId) => {\r\n return AXIOS.GET(`tenant-api/get-job-details-for-external-users?jobId=${jobId}&userId=${userId}`);\r\n}\r\n\r\nconst GetJobRelatedTimelineForExternalUsers = (jobId) => {\r\n return AXIOS.GET(`tenant-api/get-timeline-for-external-users?jobId=${jobId}&filterType=1`);\r\n}\r\nconst GetOwnerApprovalStatus = (jobId,userId) => {\r\n return AXIOS.GET(`tenant-api/owner-approval-status?jobId=${jobId}&userId=${userId}`);\r\n}\r\nconst OwnerAttendingToTheJob = (jobId, userId, callbackUrl) => {\r\n return AXIOS.GET(`tenant-api/OwnerAttendingToTheJob?jobId=${jobId}&ownerId=${userId}&callbackUrl=${callbackUrl}`);\r\n}\r\nconst GetTroubleShootingGuide = (propertyId,jobDescription) => {\r\n return AXIOS.GET(`tenant-api/troubleshooting-guide?propertyId=${propertyId}&jobDescription=${jobDescription}`);\r\n}\r\nexport const GetPredictiveJobAverageCost = (jobId) => {\r\n return AXIOS.GET(`tenant-api/job/predictiveAverageCost?jobId=${jobId}&userId=${localStorage.getItem('userId')}`);\r\n}\r\nconst saveTroubleShootingResult = (troubleShootingResultData) => {\r\n return AXIOS.POST(`tenant-api/resolved-by-tenant`, troubleShootingResultData);\r\n}\r\nconst GetAIPoweredTroubleShootingGuide = (propertyId,jobDescription) => {\r\n return AXIOS.GET(`tenant-api/openAI-troubleshooting-guide?propertyId=${propertyId}&jobDescription=${jobDescription}`);\r\n}\r\nconst GetJobTypeTags = (jobTypeId) => {\r\n return AXIOS.GET(`tenant-api/issue-tags-forjob-type?jobTypeId=${jobTypeId}`);\r\n}\r\nconst GetPropertyComponent = (propertyId) => {\r\n return AXIOS.GET(`tenant-api/pam/property-component?propertyId=${propertyId}`);\r\n}\r\nconst CreatePropertyComponent = (propertyId) => {\r\n return AXIOS.GET(`tenant-api/pam/create-property-component?propertyId=${propertyId}`);\r\n}\r\nconst GetGoogleImages = (issue,count,url) => {\r\n if(url && url!==\"\"){\r\n return AXIOS.GET(`tenant-api/get-related-images-by-url?issue=${issue}&url=${url}&count=${count}`);\r\n }else{\r\n return AXIOS.GET(`tenant-api/get-image-suggetions?issue=${issue}&count=${count}`);\r\n }\r\n \r\n}\r\nconst GetAllJobTypes = (countryId, organizationId) => {\r\n return AXIOS.GET(`tenant-api/jobtypesByOrganization?countryId=${countryId}&organizationId=${organizationId}`);\r\n}\r\nconst GetAllChildJobTypes = (parentJobTypeId, organizationId) => {\r\n return AXIOS.GET(`tenant-api/childJobTypesByOrganization?parentJobTypeId=${parentJobTypeId}&organizationId=${organizationId}`);\r\n}\r\nconst GetAllTrades = (isIncludePendingInvitationTrades, isTenantManagedJob,jobId,jobTypeId,propertyId,removeSuburbFilter,suburbId,tradeSearchtext,pageSize,pageIndex) => {\r\n return AXIOS.GET(`tenant-api/jobTradees?userId=${localStorage.getItem('userId')}\r\n &isIncludePendingInvitationTrades=${isIncludePendingInvitationTrades}&isTenantManagedJob=${isTenantManagedJob}\r\n &jobId=${jobId}&jobTypeId=${jobTypeId}&propertyId=${propertyId}&removeSuburbFilter=${removeSuburbFilter}&suburbId=${suburbId}&tradeSearchtext=${tradeSearchtext}&pageSize=${pageSize}&pageIndex=${pageIndex}`);\r\n}\r\nconst GetPropertyDetailsWithHoldAmount = () => {\r\n return AXIOS.GET(`tenant-api/properties?propertyUserId=${localStorage.getItem('userId')}`);\r\n}\r\nconst GetVariationHistory = (jobId) => {\r\n return AXIOS.GET(`tenant-api/job-variation-history?jobId=${jobId}`);\r\n}\r\nconst GetRecurringJobList = (jobId) => {\r\n return AXIOS.GET(`tenant-api/get-recurring-joblist?parentJobId=${jobId}`);\r\n}\r\nconst GetJobNotesByJobId = (jobId, userId) =>{\r\n return AXIOS.GET(`tenant-api/job-notes?jobId=${jobId}&userId=${userId}`);\r\n}\r\nconst jobService = {\r\n OwnerAttendingToTheJob,\r\n GetJobRelatedTimelineForExternalUsers,\r\n GetJobTradeeCount,\r\n GetMarketplace,\r\n GetSuburb,\r\n GetFrequentlyUsedJobTypes,\r\n GetSubJobTypes,\r\n GetAllJobTypes,\r\n CancelJob,\r\n GetJobDetailsForExternalUsers,\r\n GetOwnerApprovalStatus,\r\n GetTroubleShootingGuide,\r\n saveTroubleShootingResult,\r\n GetPredictiveJobAverageCost,\r\n GetAIPoweredTroubleShootingGuide,\r\n GetJobTypeTags,\r\n GetPropertyComponent,\r\n CreatePropertyComponent,\r\n GetGoogleImages,\r\n GetAllChildJobTypes,\r\n GetAllTrades,\r\n GetPropertyDetailsWithHoldAmount,\r\n GetVariationHistory,\r\n GetRecurringJobList,\r\n GetJobNotesByJobId\r\n}\r\n\r\nexport default jobService;","import React from \"react\";\r\nimport Drawer from \"../../../Common/Drawer/Drawer\";\r\nimport StarRatingComponent from \"react-star-rating-component\";\r\nimport userService from \"../../../../Services/UserService\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport moment from 'moment';\r\nimport { Tab, Tabs } from \"react-bootstrap\";\r\n\r\nexport default class ProviderMiniProfileDrawer extends React.Component {\r\n state = {\r\n showProfileDrawer: false,\r\n profileDetails: {},\r\n isPmView: false,\r\n isSpView: false,\r\n isUserView: false,\r\n isDataLoaded: false,\r\n profileImageUrl: \"/images/default-profile.png\",\r\n isSelectedTradee: false,\r\n page: 1,\r\n total: 0,\r\n feedbackList: [],\r\n filteredFeedback: [],\r\n filterUserType: 0,\r\n isShowAreas: false,\r\n isLoadingFeedback: false,\r\n consumerTypePropertyId: ''\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.userId != null) {\r\n this.setState({ showProfileDrawer: true, isSelectedTradee: this.props.isSelected })\r\n this.getProfile(this.props.userId);\r\n }\r\n }\r\n\r\n render() {\r\n\r\n let drawer = this.createDrawer();\r\n return
{drawer}
;\r\n\r\n }\r\n\r\n toggleProfileDrawer = isClose => {\r\n this.setState(state => ({\r\n showProfileDrawer: !this.state.showProfileDrawer\r\n }));\r\n\r\n if (isClose) {\r\n this.props.onCloseProviderDrawer();\r\n }\r\n\r\n };\r\n\r\n filterByUserType = (event) => {\r\n if (document.getElementById('filterUserType') != null) {\r\n let val = document.getElementById('filterUserType').value;\r\n let result = (val == 0) ? this.state.feedbackList : this.state.feedbackList.filter(a => a.feedBackUserType == val);\r\n let pageCount = document.getElementById('filterPageSize').value;\r\n result = (pageCount == -999) ? result : result.slice(0, pageCount);\r\n this.setState({\r\n filteredFeedback: result\r\n })\r\n }\r\n }\r\n\r\n userTypeFormatter(cell) {\r\n switch (cell) {\r\n case 3:\r\n return Property Manager;\r\n case 4:\r\n return Tenant;\r\n case 2:\r\n return Consumer;\r\n }\r\n }\r\n\r\n dateFormatter(cell) {\r\n return {new Date(cell).toLocaleDateString()};\r\n }\r\n\r\n getFeedbackTable() {\r\n\r\n return (\r\n \r\n \r\n \r\n {this.state.filteredFeedback.map((element, index) => {\r\n return (\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 {this.userTypeFormatter(element.feedBackUserType)}\r\n
\r\n
{element.user}
\r\n
\r\n \r\n
\r\n
\r\n
{element.avarageRating}
\r\n
\r\n
\r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n const header = this.createProfileHeader();\r\n const body = this.createProfileBody();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n\r\n createProfileHeader = () => {\r\n return (\r\n <>\r\n

\r\n Profile View\r\n \r\n

\r\n
\r\n this.toggleProfileDrawer(true)}\r\n >\r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createProfileBody = () => {\r\n\r\n const { providerProfile } = this.state.profileDetails;\r\n if (this.state.isDataLoaded) {\r\n return (\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 {providerProfile.displayName}\r\n
\r\n
\r\n {providerProfile.email}\r\n
\r\n
\r\n {(providerProfile.mobileNumber) ? providerProfile.mobileNumber : \"\"}\r\n {(providerProfile.officePhone) ? \" / \" + providerProfile.officePhone : \"\"}\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n

Services

\r\n
\r\n
\r\n {this.state.profileDetails.providerProfile.primaryServices.map((service, index) => {\r\n return \r\n })}\r\n
\r\n
\r\n

Areas Covered

\r\n
\r\n
\r\n {this.state.profileDetails.providerProfile.preferredStates.map(element => {\r\n return \r\n })}\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n Hourly rate\r\n
${providerProfile.hourlyRate}
\r\n
\r\n
\r\n
\r\n
\r\n Callout fee\r\n
${providerProfile.calloutFee}
\r\n
\r\n
\r\n
\r\n
\r\n Jobs completed\r\n
{providerProfile.completedJobsCount}
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n {(providerProfile.hasABNBadge) ?\r\n
\r\n
\r\n
\r\n ABN\r\n
\r\n Registered\r\n
\r\n
: ''}\r\n {(providerProfile.hasCm3CertifiedBadge) ?\r\n
\r\n
\r\n
\r\n CM3\r\n
\r\n Certified\r\n
\r\n
: ''}\r\n
\r\n\r\n
\r\n
\r\n ABN\r\n {(providerProfile.abn) ? providerProfile.abn : \"N/A\"} \r\n
\r\n
\r\n Phone Number\r\n {(providerProfile.mobileNumber) ? providerProfile.mobileNumber : \"\"}\r\n {(providerProfile.officePhone) ? \" / \" + providerProfile.officePhone : \"\"} \r\n
\r\n
\r\n Business Name\r\n {(providerProfile.businessName) ? providerProfile.businessName : \"N/A\"} \r\n
\r\n
\r\n\r\n
\r\n

Licensed Trades

\r\n {this.getLicensedTrades()}\r\n\r\n

Insurance

\r\n {this.getInsurance()}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
Feedback Received ({this.state.feedbackList.length})
\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 {(this.state.isLoadingFeedback) ?\r\n
\r\n : this.getFeedbackTable()}\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 getSPDetails = () => {\r\n const { providerProfile } = this.state.profileDetails;\r\n\r\n if (this.state.isSpView) {\r\n return (\r\n <>\r\n
\r\n
\r\n {(providerProfile.tradeeLeaveCalendars && providerProfile.tradeeLeaveCalendars.length > 0) ?\r\n
\r\n {providerProfile.tradeeLeaveCalendars.map((service, index) => {\r\n return

\r\n })}\r\n
\r\n : ''}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n SP Name : \r\n {providerProfile.displayName}\r\n
\r\n
\r\n ABN : \r\n {providerProfile.abn}\r\n
\r\n
\r\n Business Name : \r\n {providerProfile.businessName}\r\n
\r\n
\r\n Email : \r\n {providerProfile.email}\r\n
\r\n
\r\n Mobile No : \r\n {providerProfile.mobileNumber}\r\n
\r\n {(providerProfile.officePhone != null) ?\r\n
\r\n Office No : \r\n {providerProfile.officePhone}\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 Rating : \r\n {providerProfile.overallRating}\r\n
\r\n
\r\n Country in Operation : \r\n {providerProfile.workingCountry}\r\n
\r\n
\r\n

Skills :

\r\n
\r\n
\r\n {this.state.profileDetails.providerProfile.primaryServices.map((service, index) => {\r\n return \r\n })}\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
${providerProfile.hourlyRate}
\r\n
\r\n Per hour\r\n rate\r\n
\r\n
\r\n
\r\n
{providerProfile.completedJobsCount}
\r\n
\r\n Completed\r\n Jobs\r\n
\r\n
\r\n
\r\n
${providerProfile.calloutFee}
\r\n
\r\n Callout\r\n Fee\r\n
\r\n
\r\n
\r\n
\r\n {(providerProfile.hasABNBadge) ?\r\n
\r\n
\r\n
\r\n ABN\r\n
\r\n Registered\r\n
\r\n
: ''}\r\n {(providerProfile.hasCm3CertifiedBadge) ?\r\n
\r\n
\r\n
\r\n CM3\r\n
\r\n Certified\r\n
\r\n
: ''}\r\n
\r\n
\r\n
\r\n
\r\n

Feedback Received ({this.state.feedbackList.length})

\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 {(this.state.isLoadingFeedback) ?\r\n
\r\n : this.getFeedbackTable()}\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n };\r\n\r\n getLicensedTrades = () => {\r\n const { providerProfile } = this.state.profileDetails;\r\n return (\r\n
\r\n \r\n \r\n {providerProfile.providerLicenses.map((element, index) => {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n })}\r\n \r\n \r\n
{element.mainJobTypeName}{element.licenceNumber}
\r\n
\r\n )\r\n }\r\n\r\n getInsurance = () => {\r\n const { providerProfile } = this.state.profileDetails;\r\n return (\r\n
\r\n
\r\n
\r\n

Applicable to All job Types

\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
Public Liability$ {providerProfile.publicLiabilityDisplay}
Professional indemnity$ {providerProfile.professionalIndemnityDisplay}
\r\n
\r\n )\r\n }\r\n\r\n getSPAllSkillsSummary = () => {\r\n const skills = this.state.profileDetails.providerProfile.primaryServices.map(\r\n (service, index) => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n );\r\n return skills;\r\n };\r\n\r\n getProfile = userId => {\r\n try {\r\n let filters = {\r\n userId: userId,\r\n includeAttachments: false,\r\n includeBidRatings: false,\r\n includeNearbySuburbs: true,\r\n includeTradeeAttachments: false,\r\n isDetailedView: false,\r\n includeBadges: true,\r\n isTimeline: false,\r\n inCludePrefferedJobTypes: true,\r\n numberOfSuburbsNeeded: 10,\r\n ischat: false,\r\n consumerTypePropertyId: this.props.consumerTypePropertyId\r\n };\r\n let isLoadedSpProfile = false;\r\n let isLoadedSpFeedback = false;\r\n this.setState({\r\n isLoadingFeedback: true,\r\n isLoadingData: true\r\n });\r\n userService.getProviderProfile(btoa(JSON.stringify(filters))).then(dataJson => {\r\n isLoadedSpProfile = true;\r\n this.setState({\r\n profileDetails: dataJson,\r\n isDataLoaded: true,\r\n isLoadingData: false\r\n });\r\n\r\n if (dataJson.providerProfile.userId !== null) {\r\n this.setState({\r\n isPmView: false,\r\n isSpView: true,\r\n isUserView: false\r\n });\r\n if (\r\n dataJson.providerProfile.profileImageUrl != null &&\r\n dataJson.providerProfile.profileImageUrl.trim() != \"\"\r\n ) {\r\n this.setState({\r\n profileImageUrl: dataJson.providerProfile.profileImageUrl\r\n });\r\n }\r\n } else if (dataJson.propertyManagerProfile.userId !== null) {\r\n this.setState({\r\n isPmView: true,\r\n isSpView: false,\r\n isUserView: false\r\n });\r\n\r\n if (\r\n dataJson.propertyManagerProfile.profileImageUrl !== null ||\r\n dataJson.propertyManagerProfile.profileImageUrl.trim() != \"\"\r\n ) {\r\n this.setState({\r\n profileImageUrl: dataJson.propertyManagerProfile.profileImageUrl\r\n });\r\n }\r\n } else if (dataJson.userProfile.userId !== null) {\r\n this.setState({\r\n isPmView: false,\r\n isSpView: false,\r\n isUserView: true\r\n });\r\n if (\r\n dataJson.userProfile.profileImageUrl !== null ||\r\n dataJson.userProfile.profileImageUrl.trim() != \"\"\r\n ) {\r\n this.setState({\r\n profileImageUrl: dataJson.userProfile.profileImageUrl\r\n });\r\n }\r\n } else {\r\n this.setState({\r\n isDataLoaded: false\r\n });\r\n }\r\n\r\n userService.GetProviderBidFeedbacks(this.props.userId).then(res => {\r\n isLoadedSpFeedback = true\r\n this.setState({\r\n feedbackList: res,\r\n isLoadingFeedback: false,\r\n total: res.length\r\n });\r\n if (res.length > 0) {\r\n this.filterByUserType('1')\r\n }\r\n\r\n })\r\n })\r\n\r\n\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { Button, Modal } from 'semantic-ui-react'\r\n\r\nclass TroubleshootGuidModal extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n return
\r\n \r\n this.props.closeModal(this.props.index)}>\r\n \r\n
\r\n
\r\n
\r\n

Please check the steps below to see if they help you to solve your issue

\r\n

You can proceed to submit your job after tying the below steps

\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\nexport default TroubleshootGuidModal;","import React, { Component } from \"react\";\r\nimport \"./drawer.scss\";\r\n\r\nclass Drawer extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n\r\n return
{drawer}
;\r\n }\r\n\r\n createDrawer = () => {\r\n let drawerClassName = \"ba-drawer drawer-\" + this.props.size;\r\n let headerIcons = (this.props.drawerIcons) ? this.props.drawerIcons : ''\r\n return (\r\n \r\n
\r\n
\r\n {headerIcons}\r\n
{this.props.header}
\r\n
{this.props.body}
\r\n
{this.props.footer}
\r\n
\r\n
\r\n \r\n );\r\n };\r\n}\r\n\r\nexport default Drawer;\r\n","\r\nimport React, { Component } from 'react';\r\nimport BootstrapTableNext from 'react-bootstrap-table-next';\r\nimport 'react-bootstrap-table-next/dist/react-bootstrap-table2.min.css';\r\nimport filterFactory, { textFilter, Comparator } from 'react-bootstrap-table2-filter';\r\nimport overlayFactory from 'react-bootstrap-table2-overlay';\r\n\r\nimport paginationFactory from 'react-bootstrap-table2-paginator';\r\nimport PropTypes from 'prop-types';\r\nimport LoadingOverlay from 'react-loading-overlay';\r\nimport ToolkitProvider, { Search } from 'react-bootstrap-table2-toolkit';\r\nconst { SearchBar } = Search;\r\nclass BootstrapTable extends Component {\r\n\r\n pagination = {\r\n page: this.props.page,\r\n sizePerPage: this.props.sizePerPage,\r\n totalSize: this.props.totalSize\r\n }\r\n\r\n render() {\r\n return (\r\n\r\n\r\n \r\n \r\n {\r\n props => (\r\n \r\n }\r\n \r\n defaultSorted={this.props.defaultSorted}\r\n pagination={paginationFactory({ ...this.getPagination() })}\r\n onTableChange={this.handleTableChange}\r\n loading={this.props.loading}\r\n hover={true}\r\n //overlay={ overlayFactory({ spinner: true, styles: { overlay: (base) => ({...base, background: 'rgba(255, 0, 0, 0.5)'}) } }) }\r\n overlay={overlayFactory({ spinner: true, background: 'rgba(192,192,192,0.3)' })}\r\n rowEvents={this.props.rowEvents}\r\n rowStyle={ { cursor: 'pointer' } }\r\n />\r\n \r\n )\r\n }\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n componentDidMount() {\r\n }\r\n\r\n CaptionElement = () => {\r\n if(this.props.caption){\r\n return (\r\n \r\n {this.props.caption}\r\n \r\n )\r\n }\r\n return <>\r\n }\r\n\r\n getPagination() {\r\n return {\r\n page: this.props.page,\r\n sizePerPage: this.props.sizePerPage,\r\n totalSize: this.props.totalSize,\r\n filter:this.props.filter\r\n }\r\n }\r\n\r\n handleTableChange = (type, { page, sizePerPage, filters, sortField, sortOrder, cellEdit }) => {\r\n //this.setState({ loading: true });\r\n //console.log('this.state.loading: ', this.state.loading);\r\n this.props.onTableChange(type, { page, sizePerPage, filters, sortField, sortOrder, cellEdit });\r\n //this.setState({ loading: false });\r\n //console.log('this.state.loading: ', this.state.loading);\r\n }\r\n\r\n getOverlay = () => (\r\n \r\n

Some content or children or something.

\r\n
\r\n );\r\n}\r\n\r\n/// Set property types\r\nBootstrapTable.propTypes = {\r\n data: PropTypes.array.isRequired,\r\n page: PropTypes.number.isRequired,\r\n totalSize: PropTypes.number.isRequired,\r\n sizePerPage: PropTypes.number.isRequired,\r\n \r\n //onTableChange: PropTypes.func.isRequired\r\n};\r\n\r\n\r\n\r\n// const NoDataIndication = () => (\r\n//
\r\n//
\r\n//
\r\n//
\r\n//
\r\n//
\r\n//
\r\n// );\r\n\r\nexport default BootstrapTable;\r\n","import * as React from 'react';\r\nimport FileViewer from \"react-file-viewer\";\r\nimport PDFViewer from 'pdf-viewer-reactjs'\r\nimport { Modal } from \"react-bootstrap\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nconst FilesViewer = (props) => {\r\n const fileType = props.fileType;\r\n const filePath = props.filePath;\r\n const isInspectionAttachmentWithComments = props.isCommentsAvailable;\r\n const attachmentComment = props.attachmentComment;\r\n const origin = AppConfiguration.Setting().apiendpoint;\r\n if (fileType === 'pdf') {\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n } else if (isInspectionAttachmentWithComments) {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n

Comments :

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n )\r\n } else {\r\n return (\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\nexport default FilesViewer;","import * as React from \"react\";\r\nimport Viewer from \"react-viewer\";\r\nimport FileViewer from \"./FilesViewer\";\r\nconst ImageViewer = (props) => {\r\n const [visible, setVisible] = React.useState(false);\r\n const [imgUrl, setImgUrl] = React.useState(\"\");\r\n const [downloadImgUrl, setDownloadImgUrl] = React.useState(\"\");\r\n const [fileType, setFileType] = React.useState(\"\");\r\n const [filePath, setFilePath] = React.useState(\"\");\r\n const [modalShow, setModalShow] = React.useState(false);\r\n const [isCommentsAvailable, setCommentsAvailable] = React.useState(false);\r\n const [attachmentComment, setAttachmentComment] = React.useState(\"\");\r\n return ( \r\n <>\r\n {props.attachments && props.attachments.length > 0 ? (\r\n
\r\n {(props.isExternal) ? '' : props.isEsignature ? (\r\n
\r\n e-Signature\r\n
\r\n ) : props.isInvoice ? (\r\n // AN-61716 : d-none applied according to the ticket\r\n
\r\n Invoice Attachments\r\n
\r\n ) : props.isAfter ? (\r\n
\r\n Result Attachments\r\n
\r\n ) : props.isFromAsset ? (\r\n
\r\n
\r\n ) : props.isFromAsset_ff_cp ? (\r\n
\r\n Front Facing Photo and Compliance Plate Photo\r\n
\r\n ): props.isVariation ? <> \r\n
\r\n Variation Attachments\r\n
\r\n : props.isInspectionReport? '' : (\r\n
\r\n {props.isFromBot ? 'Job attachments' : props.isFromTenantManageJobPost ? 'Job attachments': props.attachments[0].type == 3 ? 'Job attachments':'Quote attachments'}\r\n
\r\n )}\r\n\r\n {props.attachments.map((uploadedFile) => {\r\n var defaultFileSrc = \"/Images/attachment.png\";\r\n\r\n if (uploadedFile.extension === \".csv\") {\r\n defaultFileSrc = \"/Images/attached-file-csv.svg\";\r\n } else if (uploadedFile.extension === \".pdf\") {\r\n defaultFileSrc = \"/Images/attached-file-pdf.svg\";\r\n } else if (uploadedFile.extension === \".mov\") {\r\n defaultFileSrc = \"/Images/attached-file-mov.svg\";\r\n } else if (uploadedFile.extension === \".mp4\") {\r\n defaultFileSrc = \"/Images/attached-file-mp4.svg\";\r\n } else if (uploadedFile.extension === \".tiff\") {\r\n defaultFileSrc = \"/Images/attached-file-tiff.svg\";\r\n } else if (uploadedFile.extension === \".msg\") {\r\n defaultFileSrc = \"/Images/attached-file-msg.svg\";\r\n } else if (uploadedFile.extension === \".eml\") {\r\n defaultFileSrc = \"/Images/attached-file-eml.svg\";\r\n } else{\r\n defaultFileSrc = \"/Images/attachment.png\";\r\n }\r\n \r\n return (\r\n \r\n
\r\n {props.isFromAsset && \r\n
{ props.RemoveFromList(uploadedFile.fileId)}}>
}\r\n
\r\n
\r\n
\r\n {\r\n e.target.onerror = null;\r\n e.target.src = defaultFileSrc;\r\n }}\r\n onClick={(e) => {\r\n if(uploadedFile.fileType==1 && !uploadedFile.isCommentsAvailable && uploadedFile.extension != '.tiff'){\r\n setDownloadImgUrl(uploadedFile.fileUrl);\r\n setImgUrl(e.target.src);\r\n setVisible(true);\r\n } else {\r\n \r\n if (uploadedFile.isCommentsAvailable) {\r\n setFileType(uploadedFile.extension.split('.')[1]);\r\n setFilePath(uploadedFile.fileUrl);\r\n setCommentsAvailable(true);\r\n setAttachmentComment(uploadedFile.attachmentComments);\r\n setModalShow(true);\r\n }\r\n else {\r\n setCommentsAvailable(false);\r\n setAttachmentComment(\"\");\r\n window.open(uploadedFile.fileUrl);\r\n }\r\n }\r\n }}\r\n />\r\n
\r\n
\r\n {uploadedFile.isCommentsAvailable ?
\r\n : ''}\r\n
\r\n
\r\n
\r\n {props.isInspectionReport?
{uploadedFile.lastModified}
\r\n :''}\r\n
\r\n
\r\n
\r\n );\r\n })}\r\n\r\n {\r\n setVisible(false);\r\n }}\r\n images={[{ src: imgUrl, alt: \"\", downloadUrl: downloadImgUrl }]}\r\n />\r\n setModalShow(false)} \r\n fileType = {fileType}\r\n filePath={filePath}\r\n isCommentsAvailable={isCommentsAvailable}\r\n attachmentComment={attachmentComment}\r\n />\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n \r\n );\r\n};\r\n\r\n\r\nexport default ImageViewer;\r\n","import React, { useState } from \"react\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from \"react-toastify\";\r\n\r\nclass RejectDrawer extends React.Component {\r\n state = {\r\n showJobRejectDrawer: false,\r\n disableJobRejectButton:false\r\n };\r\n constructor(props) {\r\n super(props);\r\n this.description = React.createRef();\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n\r\n return (\r\n <>\r\n \r\n {drawer}\r\n \r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n const header = this.createJobRejectHeader();\r\n const body = this.createJobRejectBody();\r\n const footer = this.createJobRejectFooter();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n createJobRejectHeader = () => {\r\n return (\r\n <>\r\n

Reject Job

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createJobRejectBody = () => {\r\n return (\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 Mark as Completed\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n createJobRejectFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n onClickJobReject = () => {\r\n if(this.description.current.value == '' || this.description.current.value == undefined || this.description.current.value == null) {\r\n toast.error(\"Please enter job rejecting reason.\",{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n this.toggleJobRejectButton();\r\n if (localStorage.getItem('userType') != '5' && this.props.jobDetails.workflowStatusId == 107) {\r\n AXIOS.GET(\r\n `tenant-api/job-review-reject?userId=${localStorage.getItem(\r\n \"userId\"\r\n )}&jobId=${this.props.jobDetails.id}¬e=${\r\n this.description.current.value\r\n }`\r\n ).then(response => {\r\n if (response) {\r\n toast.success(\"Job Review Rejected.\",{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.toggleJobRejectDrawer();\r\n this.props.toggleDrawer(true);\r\n } else {\r\n toast.error(\"Error occured. Please try again.\",{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n this.toggleJobRejectButton();\r\n });\r\n }\r\n else {\r\n AXIOS.GET(\r\n `tenant-api/job-reject-owner?userId=${localStorage.getItem(\r\n \"userId\"\r\n )}&jobId=${this.props.jobDetails.id}¬e=${\r\n this.description.current.value\r\n }`\r\n ).then(response => {\r\n if (response) {\r\n toast.success(\"Job Rejected.\",{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.toggleJobRejectDrawer();\r\n // this.props.getJobDetails(this.props.jobDetails.id);\r\n this.props.toggleDrawer(true);\r\n //this.props.refreshGrid(true);\r\n } else {\r\n toast.error(\"Error occured. Please try again.\",{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n this.toggleJobRejectButton();\r\n });\r\n }\r\n \r\n };\r\n\r\n toggleJobRejectDrawer = () => {\r\n this.setState(state => ({\r\n showJobRejectDrawer: !this.state.showJobRejectDrawer\r\n }));\r\n };\r\n\r\n toggleJobRejectButton = () => {\r\n this.setState(state => ({\r\n disableJobRejectButton: !this.state.disableJobRejectButton\r\n }));\r\n };\r\n\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n isRefresh: state.MyJobs.isRefreshGrid\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n refreshGrid: isRefresh => {\r\n dispatch({ type: \"REFRESH_GRID\", isRefresh: isRefresh });\r\n }\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(RejectDrawer);\r\n","import { Button, ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport jobService from '../../../Services/JobService';\r\nimport React from 'react';\r\nimport translateService from '../../../Services/TranslateService';\r\nimport './JobIssueTag.scss';\r\n\r\nclass JobIssueTag extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isLoadingJobTypeTags: false,\r\n jobTypeTags: [],\r\n jobAssignTags: [],\r\n isJobTypeTagsNotFound: false\r\n\r\n };\r\n this.state.jobAssignTags = this.props.data != undefined ? this.props.data.jobAssignTags:[];\r\n };\r\n\r\n\r\n\r\n componentWillMount() {\r\n this.getJobTypeTagsData();\r\n }\r\n\r\n render() {\r\n const { jobTypeTags, isLoadingJobTypeTags, isJobTypeTagsNotFound } = this.state;\r\n const { t } = this.props.data;\r\n return (\r\n <>\r\n {!isJobTypeTagsNotFound ?
\r\n
\r\n {!isLoadingJobTypeTags &&
\r\n

{t != undefined ? t('lbl_header_of_tags') : \"Choose tags that best describe your issue.\"}

\r\n

({t != undefined ? t('lbl_chooseoption') : \"choose an option\"})

\r\n
}\r\n {!isLoadingJobTypeTags &&
\r\n \r\n\r\n this.handleJobTypeTagOnChange(value)}\r\n >\r\n {jobTypeTags.map((a, index) => {\r\n return {a.issueTagName}\r\n })\r\n }\r\n \r\n\r\n \r\n
}\r\n {isLoadingJobTypeTags && }\r\n {isJobTypeTagsNotFound &&

{t != undefined ? t('lbl_tags_not_found') : \"Tags not found for selected job type\"}

}\r\n
\r\n {!isLoadingJobTypeTags &&
\r\n \r\n \r\n
\r\n }\r\n
\r\n :''}\r\n );\r\n }\r\n\r\n getJobTypeTagsData() {\r\n this.setState({\r\n isLoadingJobTypeTags: true\r\n });\r\n const { t, isFromBot, i18n } = this.props.data;\r\n let trgLng = window.lng == undefined ? 'en' : window.lng;\r\n if (isFromBot) {\r\n trgLng = (i18n.language == \"en-US\" || i18n.language == \"en-GB\") ? \"en\" : i18n.language;\r\n }\r\n jobService.GetJobTypeTags(this.props.data.childJobTypeId).then(result => { \r\n var tagList =[];\r\n \r\n if (result.length > 0) {\r\n tagList = result.map(function(value) { return value['issueTagName']; });\r\n \r\n this.applyTranslation(tagList, \"en\", trgLng).then(trans => {\r\n if(trans.length > 0){\r\n result.map(function(value,index) { return value.issueTagName = trans[index]}); \r\n }\r\n if(result.length >0){\r\n this.setState({\r\n jobTypeTags: result,\r\n isLoadingJobTypeTags: false,\r\n isJobTypeTagsNotFound: false\r\n });\r\n } \r\n });\r\n }else {\r\n if(this.props.data.previousIndex > this.props.data.index ){\r\n this.props.data.previousStep(this.props.data.index);\r\n }else{\r\n this.props.data.nextStep({ data: this.state.jobAssignTags, index: this.props.data.index, t: t});\r\n } \r\n \r\n }\r\n });\r\n }\r\n\r\n handleJobTypeTagOnChange = (value) => {\r\n this.setState({ jobAssignTags: value });\r\n }\r\n\r\n applyTranslation(texts, sourceLng, targetLng) {\r\n const requestModel = {\r\n text: texts,\r\n targetCode: targetLng,\r\n sourceCode: sourceLng\r\n };\r\n return translateService.translate(requestModel);\r\n }\r\n}\r\n\r\nexport default JobIssueTag;","import { Button, ButtonToolbar, ToggleButton, ToggleButtonGroup } from \"react-bootstrap\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport jobService from '../../../Services/JobService';\r\nimport React from 'react';\r\nimport { toast } from 'react-toastify';\r\nimport translateService from '../../../Services/TranslateService';\r\nimport './PropertyComponent.scss';\r\n\r\nclass PropertyComponent extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isLoadingPropertyComponent: false,\r\n propertyComponents: [],\r\n selectedComponent: '',\r\n isPropertyComponentNotFound: false,\r\n selectedComponentName: '',\r\n isComponentSelected: false,\r\n componentFeatures: [],\r\n selectedFeatureComponent: []\r\n\r\n };\r\n };\r\n\r\n\r\n\r\n componentWillMount() {\r\n this.getPropertyComponentData();\r\n }\r\n\r\n render() {\r\n const {\r\n propertyComponents,\r\n isComponentSelected,\r\n isLoadingPropertyComponent,\r\n isPropertyComponentNotFound,\r\n selectedComponentName,\r\n componentFeatures,\r\n selectedFeatureComponent\r\n } = this.state;\r\n const { t } = this.props.data;\r\n return (\r\n <>\r\n
\r\n
\r\n {!isLoadingPropertyComponent &&
\r\n

{t != undefined ? t('lbl_property_componet') : \"Choose components for your issue.\"}

\r\n

({t != undefined ? t('lbl_chooseoption') : \"choose an option\"})

\r\n
}\r\n {!isLoadingPropertyComponent &&
\r\n \r\n\r\n this.handlePropertyComponentOnChange(value)}\r\n >\r\n {propertyComponents.map((a, index) => {\r\n return {a.componentName}\r\n })\r\n }\r\n \r\n\r\n \r\n
}\r\n {isComponentSelected &&
\r\n

Features for the {selectedComponentName}

\r\n\r\n \r\n this.handlePropertyFeatureComponentOnChange(value)} >\r\n {componentFeatures.map((a, index) => {\r\n return {a.name}\r\n })\r\n }\r\n \r\n \r\n\r\n
}\r\n {isLoadingPropertyComponent && }\r\n {isPropertyComponentNotFound &&
}\r\n
\r\n {!isLoadingPropertyComponent &&
\r\n \r\n \r\n
\r\n }\r\n
\r\n );\r\n }\r\n\r\n getPropertyComponentData() {\r\n const trgLng = window.lng == undefined ? 'en': window.lng;\r\n this.setState({\r\n isLoadingPropertyComponent: true\r\n });\r\n let result;\r\n jobService.GetPropertyComponent(this.props.data.propertyId).then((res) => {\r\n var list =[] ;\r\n result = res;\r\n if (res.length > 0) {\r\n list = res.map(function(value) { return value['componentName']; }); \r\n }\r\n return this.applyTranslation(list, \"en\", trgLng);\r\n }).then(trans => {\r\n if(trans.length > 0){\r\n result.map(function(value,index) { return value.componentName = trans[index]});\r\n }\r\n if(result.length > 0){\r\n this.setState({\r\n propertyComponents: result,\r\n isLoadingPropertyComponent: false,\r\n isPropertyComponentNotFound: false\r\n });\r\n }\r\n else {\r\n this.setState({\r\n isLoadingPropertyComponent: false,\r\n isPropertyComponentNotFound: true\r\n });\r\n }\r\n this.updateSelected();\r\n\r\n });\r\n } \r\n\r\n \r\n\r\n\r\n handlePropertyComponentOnChange = (value) => {\r\n const { propertyComponents } = this.state;\r\n const trgLng = window.lng == undefined ? 'en': window.lng;\r\n var name = propertyComponents.find(x => x.id == value).componentName;\r\n const features = propertyComponents.find(x => x.id == value).componentFeatures;\r\n var featureList =[];\r\n \r\n if (features.length > 0) {\r\n featureList = features.map(function(value) { return value['name']; }); \r\n featureList.push(name);\r\n }\r\n this.applyTranslation(featureList, \"en\", trgLng).then(trans => {\r\n if(trans.length > 0){\r\n features.map(function(value,index) { return value.name = trans[index]});\r\n name = trans[trans.length-1];\r\n }\r\n if(features.length >0){\r\n this.setState({\r\n selectedComponent: value,\r\n selectedComponentName: name,\r\n isComponentSelected: true,\r\n componentFeatures: features,\r\n selectedFeatureComponent: []\r\n });\r\n }\r\n })\r\n\r\n }\r\n\r\n handlePropertyFeatureComponentOnChange = (value) => {\r\n const { componentFeatures, selectedFeatureComponent } = this.state;\r\n //const features = propertyComponents.find(x=>x.id == value).componentFeatures;\r\n this.setState({\r\n selectedFeatureComponent: value\r\n });\r\n\r\n }\r\n\r\n updateSelected() {\r\n if (this.props.data.selectedComponent != '' && this.props.data.selectedComponent != null) {\r\n const trgLng = window.lng == undefined ? 'en': window.lng;\r\n const { propertyComponents } = this.state;\r\n var name = propertyComponents.find(x => x.id == this.props.data.selectedComponent).componentName;\r\n const features = propertyComponents.find(x => x.id == this.props.data.selectedComponent).componentFeatures;\r\n \r\n var featureList =[];\r\n \r\n if (features.length > 0) {\r\n featureList = features.map(function(value) { return value['name']; }); \r\n featureList.push(name);\r\n }\r\n this.applyTranslation(featureList, \"en\", trgLng).then(trans => {\r\n if(trans.length > 0){\r\n features.map(function(value,index) { return value.name = trans[index]});\r\n name = trans[trans.length-1];\r\n }\r\n if(features.length >0){\r\n this.setState({\r\n selectedComponentName: name,\r\n isComponentSelected: true,\r\n componentFeatures: features,\r\n selectedFeatureComponent: this.props.data.selectedFeatureComponent,\r\n selectedComponent : this.props.data.selectedComponent\r\n }); \r\n }\r\n })\r\n\r\n }\r\n }\r\n\r\n generateComponent = () => {\r\n const { propertyComponents } = this.state;\r\n if (propertyComponents.length == 0) {\r\n var result;\r\n const trgLng = window.lng == undefined ? 'en': window.lng;\r\n jobService.CreatePropertyComponent(this.props.data.propertyId).then(res => { \r\n var list =[] ;\r\n result = res;\r\n if (res.length > 0) {\r\n list = res.map(function(value) { return value['componentName']; }); \r\n }\r\n return this.applyTranslation(list, \"en\", trgLng);\r\n }).then(trans => {\r\n if(trans.length > 0){\r\n result.map(function(value,index) { return value.componentName = trans[index]});\r\n }\r\n if(result.length > 0){\r\n this.setState({\r\n propertyComponents: result,\r\n isLoadingPropertyComponent: false,\r\n isPropertyComponentNotFound: false\r\n });\r\n }\r\n })\r\n\r\n\r\n }\r\n \r\n }\r\n \r\n\r\n next = (t) => {\r\n if (this.state.selectedComponent != '' && this.state.selectedFeatureComponent.length == 0) {\r\n toast.error((t != undefined ? t('lbl_feature_component_validation') : \"Please select feature component\"), {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return false;\r\n }\r\n this.props.data.nextStep({ selectedComponent: this.state.selectedComponent, index: this.props.data.index, selectedFeatureComponent: this.state.selectedFeatureComponent,t:t });\r\n }\r\n\r\n applyTranslation(texts, sourceLng, targetLng){\r\n const requestModel = {\r\n text: texts,\r\n targetCode: targetLng,\r\n sourceCode : sourceLng\r\n };\r\n return translateService.translate(requestModel);\r\n }\r\n}\r\n\r\nexport default PropertyComponent;","import * as React from 'react';\r\nimport Viewer from 'react-viewer';\r\n\r\nconst SignatureViewer = (props) => {\r\n const [visible, setVisible] = React.useState(false);\r\n const [imgUrl, setImgUrl] = React.useState('');\r\n const [downloadImgUrl, setDownloadImgUrl] = React.useState('');\r\n\r\n\r\n return (\r\n <>\r\n
\r\n { e.target.onerror = null; e.target.src = \"/Images/attachment.png\" }}\r\n onClick={(e) => { setDownloadImgUrl(props.attachments.fileUrl); setImgUrl(e.target.src); setVisible(true); }} />\r\n\r\n { setVisible(false); }}\r\n images={[{ src: imgUrl, alt: '', downloadUrl: downloadImgUrl }]}\r\n />\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default SignatureViewer;","import React from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { connect } from 'react-redux';\r\nimport Moment from \"react-moment\";\r\nimport { Modal, Button, Tabs, Tab, Badge, Form } from \"react-bootstrap\";\r\nimport moment from 'moment';\r\n\r\nimport ImageViewer from \"../../../Common/ImageViewer/ImageViewer\";\r\nimport SignatureViewer from \"../../../Common/ImageViewer/SignatureViewer\";\r\nimport AttachmentsDrawer from \"../../../Drawers/AttachmentsDrawer/AttachmentsDrawer\";\r\nimport JobLocksDrawer from '../../../Drawers/JobLocksDrawer/JobLocksDrawer';\r\nimport jobService from \"../../../../Services/JobService\";\r\n\r\nclass JobDetail extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n state = {\r\n averageCostModel: {\r\n jobAverageCost: 0.00,\r\n jobCount: 0,\r\n confidenceLevel: 1\r\n },\r\n isAverageCostModelLoaded: false,\r\n isTenantManageJob:this.props.isTenantManageJob?true:false\r\n }\r\n\r\n urgencyFormatter(urgencyType) {\r\n switch (urgencyType) {\r\n case -1:\r\n case \"Emergency\":\r\n return
Emergency
;\r\n case 1:\r\n case \"Urgently\":\r\n return
Urgently
;\r\n case 2:\r\n case \"Within a few days\":\r\n return
Within a few days
;\r\n case 3:\r\n case \"Within a week\":\r\n return
Within a week
;\r\n case 999:\r\n case \"By this date\":\r\n return
By this date
;\r\n default:\r\n return
{urgencyType === 0 ? \"\" : urgencyType}
;\r\n }\r\n }\r\n\r\n propertyTypeName(propertyType) {\r\n switch (propertyType) {\r\n case 0:\r\n return \"Residential\";\r\n case 1:\r\n return \"Commercial\";\r\n case 2:\r\n return \"Unknown\";\r\n case 3:\r\n return \"Strata\";\r\n }\r\n }\r\n\r\n budgetFormatter(budgetId, budgetAmount, budgetMax) {\r\n \r\n switch (budgetId) {\r\n case 0:\r\n \r\n return
Other
;\r\n case 1:\r\n \r\n return
Under $500
;\r\n case 2:\r\n \r\n return
Between $500 - $1000
;\r\n case 3:\r\n \r\n return
Between $1000 - $2000
;\r\n case 4:\r\n return
Between $2000 - $5000
\r\n case 5:\r\n \r\n return
Over $5000
;\r\n case 7:\r\n return
{'$ ' + budgetAmount} - {'$ ' + budgetMax}
;\r\n case -999:\r\n return
{budgetAmount == 0 ? 'Not supplied' : '$ ' + budgetAmount}
;\r\n case 6:\r\n return
Under ${budgetAmount}
;\r\n }\r\n }\r\n\r\n //for getting average job cost\r\n getPredictiveAverageCost = (jobId) => {\r\n try {\r\n jobService.GetPredictiveJobAverageCost(jobId)\r\n .then(data => {\r\n this.setState({ averageCostModel: data });\r\n this.setState({ isAverageCostModelLoaded: true });\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.showAverageCostWhenOwnerApproval) {\r\n this.getPredictiveAverageCost(this.props.jobDetails.id);\r\n }\r\n }\r\n \r\n render() {\r\n let isTenant = localStorage.getItem(\"userType\") == 4 ? true : false;\r\n const jobData = this.props.jobDetails;\r\n return (\r\n
\r\n
\r\n {this.urgencyFormatter(jobData.jobUrgencyDisplay)}\r\n \r\n \r\n
\r\n
{jobData.title}
\r\n
\r\n
\r\n
\r\n {jobData.primaryJobTypeDisplay}: \r\n {jobData.secondaryJobTypeDisplay} \r\n {(jobData.jobTypeDisplay !== jobData.primaryJobTypeDisplay && jobData.jobTypeDisplay !== jobData.secondaryJobTypeDisplay)? : {jobData.jobTypeDisplay} : ''}\r\n
\r\n\r\n
\r\n {(this.props.showAverageCostWhenOwnerApproval && this.state.isAverageCostModelLoaded) ?\r\n
\r\n
The suggested average cost range for the job is +/-${this.state.averageCostModel.jobAverageCost}
\r\n
\r\n :\r\n ''\r\n }\r\n
\r\n
\r\n
Status
\r\n
\r\n {(jobData.statusDisplay == 'Job Approval Pending' && this.props.isMyJobs) ? 'Job Completed' : jobData.statusDisplay}\r\n
\r\n
\r\n
\r\n
Estimate
\r\n {this.budgetFormatter(jobData.budgetId, jobData.budgetAmount, jobData.budgetMax)}\r\n
\r\n
\r\n
Property
\r\n
{jobData.propertyName}
\r\n
\r\n
\r\n
Property Type
\r\n
{this.propertyTypeName(jobData.propertyTypeId)}
\r\n
\r\n
\r\n
Suburb
\r\n
{jobData.suburbDisplay}
\r\n
\r\n
\r\n
Address
\r\n
{jobData.address}
\r\n
\r\n
\r\n
Quote Limit
\r\n
{jobData.quoteLimit}
\r\n
\r\n {(jobData.scheduleEventId != null)? \r\n
\r\n
Scheduled date
\r\n
{moment(jobData.scheduleFromDate).format(this.props.dateFormat.toUpperCase()+' HH:mm')} to {moment(jobData.scheduleToDate).format(this.props.dateFormat.toUpperCase()+' HH:mm')}
\r\n
: ''\r\n }\r\n {this.getPMNotes(jobData.ownerApprovalComment)}\r\n
\r\n
Note
\r\n
\r\n {this.getPropertyKeyMessage(\r\n jobData.propertyKeyCollectType,\r\n jobData.propertyTypeId\r\n )}\r\n
\r\n
\r\n {(jobData.serviceConsumer && jobData.serviceConsumer != null && !jobData.isHideTenantDetailsToOwner)? \r\n <>\r\n
\r\n
Tenant name
\r\n
{jobData.serviceConsumer.businessName}
\r\n
\r\n {isTenant ? <>\r\n
\r\n
Tenant email address
\r\n
{jobData.serviceConsumer.email}
\r\n
\r\n {jobData.serviceConsumer.mobile == '' ? '' : <>\r\n
\r\n
Tenant mobile number
\r\n
{jobData.serviceConsumer.mobile}
\r\n
\r\n }\r\n : ''}\r\n \r\n : ''\r\n }\r\n
\r\n {\r\n (jobData.propertyKeyCollectType != null\r\n && (jobData.propertyKeyCollectType == 1 || jobData.propertyKeyCollectType == 2)) ?\r\n \r\n : ''\r\n }\r\n {(jobData.statusDisplay == 'Job Completed' || (jobData.statusDisplay == 'Job Approval Pending' && this.props.isMyJobs) || this.state.isTenantManageJob) ? '' :\r\n {\r\n this.props.getJobDetails(jobData.id);\r\n }}\r\n >\r\n }\r\n\r\n {(jobData.hasOwnProperty(\"attachments\") && jobData.attachments) ?\r\n <>\r\n !a.isAfter && a.type == 27)} isAfter={false} isInvoice={true}>\r\n a.isAfter && a.type == 27)} isAfter={true} isInvoice={true}>\r\n : ''\r\n }\r\n\r\n {(jobData.hasOwnProperty(\"attachments\") && jobData.attachments) ?\r\n <>\r\n !a.isAfter && a.type != 27)} isAfter={false}>\r\n a.isAfter && a.type != 27)} isAfter={true}>\r\n : ''\r\n }\r\n {this.getSignatureAttachments(jobData.signatureAttachments)}\r\n
\r\n )\r\n }\r\n\r\n getSignatureAttachments = (signatureAttachments) => {\r\n\r\n if (signatureAttachments != null) {\r\n \r\n return (\r\n
\r\n
\r\n Job Completed\r\n
\r\n
\r\n \r\n
{this.props.jobDetails.jobCompleteSigneeName }
\r\n
On \r\n {signatureAttachments.lastUpdatedDateTime}\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 getPropertyKeyMessage(keyCollectionType, propertyType) {\r\n if (propertyType === 1) {\r\n switch (keyCollectionType) {\r\n case 1:\r\n return \"Please collect keys from the office to enter the property\";\r\n\r\n case 2:\r\n return \"Please collect the keys from the office but let the tenant know what time you will be on site\";\r\n\r\n case 3:\r\n return \"Please book a time with the tenant to meet at the property\";\r\n\r\n default:\r\n break;\r\n }\r\n } else {\r\n switch (keyCollectionType) {\r\n case 1:\r\n return \"Please collect keys from the office to enter the property\";\r\n\r\n case 2:\r\n return \"Collect the key from the office, inform the tenant on date & time\";\r\n\r\n case 3:\r\n return \"Contact tenant to arrange access and time\";\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n\r\n getPMNotes = (ownerComment) => {\r\n\r\n if (ownerComment != null && ownerComment.trim() != \"\") {\r\n return (\r\n
\r\n
PM note
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n\r\n getConfidenceLevelClass(confidenceLevel) {\r\n switch (confidenceLevel) {\r\n case 1:\r\n return \"confident-lbl confident-low\";\r\n case 2:\r\n return \"confident-lbl confident-medium\";\r\n case 3:\r\n return \"confident-lbl confident-high\";\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n try {\r\n return {\r\n dateFormat: state.User.dateFormat\r\n };\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\nexport default connect(mapStateToProps)(withRouter(JobDetail));","import * as React from \"react\";\r\nimport StarRatingComponent from \"react-star-rating-component\";\r\n\r\n\r\n\r\nconst FeedbackViewer = (props) => {\r\n\r\n\r\n return (\r\n <>\r\n {(props.bidFeedbackList && props.bidFeedbackList.bidFeedbackProviderViewModel && props.bidFeedbackList.bidFeedbackProviderViewModel.length > 0) ?
\r\n
\r\n
\r\n
Overall Rating
\r\n
\r\n
\r\n {props.bidFeedbackList.bidFeedbackProviderViewModel.map((feedBackUser, index) => {\r\n return <>\r\n
\r\n {(feedBackUser.feedBackUserType == 3 && props.showFeedbackOverView) ?
\r\n Property Manger\r\n
: ''}\r\n {(feedBackUser.feedBackUserType == 4 && props.showFeedbackOverView) ?
\r\n Tenant\r\n
: ''}\r\n {(feedBackUser.feedBackUserType == 2 && props.showFeedbackOverView) ?
\r\n Consumer\r\n
: ''}\r\n\r\n
\r\n {(props.showFeedbackOverView) ?
\r\n
\r\n
{feedBackUser.user}
\r\n
{feedBackUser.feedback}
\r\n
\r\n
: ''}\r\n
\r\n
\r\n \r\n {props.bidFeedbackList.bidRatings.map((bidRating, index) => {\r\n return <>\r\n \r\n {(bidRating.ratedUser == feedBackUser.userId) ? : ''}\r\n {(bidRating.ratedUser == feedBackUser.userId) ? : ''}\r\n \r\n \r\n })}\r\n
\r\n {bidRating.ratingsCriteria}\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 {(props.bidFeedbackList && props.bidFeedbackList.bidFeedbackProviderViewModel && props.bidFeedbackList.bidFeedbackProviderViewModel.length == 0) ?
\r\n No feedback to show\r\n
: ''}\r\n\r\n\r\n \r\n )\r\n};\r\n\r\nexport default FeedbackViewer;","import React from \"react\";\r\nimport moment from 'moment';\r\nimport Drawer from \"../../../Common/Drawer/Drawer\";\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport { AXIOS } from \"../../../../Utilities/HttpRequest/Axios\";\r\nimport \"./Quotes.scss\";\r\nimport \"react-bootstrap-table/dist/react-bootstrap-table-all.min.css\";\r\nimport \"react-bootstrap-table-next/dist/react-bootstrap-table2.min.css\";\r\nimport \"filepond/dist/filepond.min.css\";\r\nimport \"filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css\";\r\nimport Moment from \"react-moment\";\r\nimport ImageViewer from '../../../Common/ImageViewer/ImageViewer';\r\nimport StarRatingComponent from \"react-star-rating-component\";\r\nimport FeedbackViewer from \"../../../Common/FeedbackViewer/FeedbackViewer\";\r\nimport userService from \"../../../../Services/UserService\";\r\nimport bidService from \"../../../../Services/BidService\";\r\nimport { toast } from 'react-toastify';\r\n\r\nclass Quotes extends React.Component {\r\n state = {\r\n showProfileDrawer: false,\r\n profileDetails: {},\r\n isPmView: false,\r\n isSpView: false,\r\n isUserView: false,\r\n isDataLoaded: false,\r\n profileImageUrl: \"/images/default-profile.png\",\r\n skillsLoad: false,\r\n isShowNearbySuburbs: false,\r\n showLicensesTradee: false,\r\n jobTypeArray: [],\r\n showInsurancesTradee: false,\r\n itemSelected: 0,\r\n feedBackUserTypeCount: 0,\r\n feedbackResult: [],\r\n dateFormat: \"dd/MM/yyyy\",\r\n ActivateIndex: [],\r\n ExpandedIndex:[],\r\n isShowMore: false,\r\n show: 5,\r\n bidFeedbackList:[]\r\n };\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() { \r\n const quotesList = this.getQuotesList();\r\n return
\r\n {(this.props.jobDetails.workflowStatusId == 6) ?
Note: Please select the best quote for the job, if not decline all to request better quotes.
: ''}\r\n {quotesList}\r\n
;\r\n }\r\n\r\n increaseShow() {\r\n if (this.state.show < this.state.profileDetails.providerProfile.feedbacks.length) {\r\n this.setState({\r\n show: this.state.show + 5\r\n });\r\n }\r\n else {\r\n this.setState({\r\n show:5\r\n });\r\n }\r\n \r\n }\r\n\r\n getSPNotes = notes => {\r\n if (notes != null && notes.trim() != \"\") {\r\n return
Note: {notes}
;\r\n }\r\n };\r\n\r\n getProfile = userId => {\r\n try {\r\n let filters = {\r\n userId: userId,\r\n includeAttachments: true,\r\n includeBidRatings: true,\r\n includeNearbySuburbs: true,\r\n includeTradeeAttachments: true,\r\n isDetailedView: true,\r\n includeBadges: true,\r\n isTimeline: true,\r\n inCludePrefferedJobTypes: true,\r\n numberOfSuburbsNeeded: 10,\r\n ischat: false\r\n };\r\n trackPromise(\r\n AXIOS.GET(\r\n `tenant-api/profile?filters=${btoa(JSON.stringify(filters))}`\r\n ).then(dataJson => {\r\n this.setState({\r\n profileDetails: dataJson,\r\n isDataLoaded: true\r\n });\r\n\r\n if (dataJson.providerProfile.userId !== null) {\r\n this.setState({\r\n isPmView: false,\r\n isSpView: true,\r\n isUserView: false\r\n });\r\n if (dataJson.providerProfile.profileImageUrl != null &&\r\n dataJson.providerProfile.profileImageUrl.trim() != \"\"\r\n ) {\r\n this.setState({\r\n profileImageUrl: dataJson.providerProfile.profileImageUrl\r\n });\r\n }\r\n if (dataJson.providerProfile.feedbacks != null\r\n && dataJson.providerProfile.feedbacks.length > 0) {\r\n this.setState({\r\n feedbackResult: dataJson.providerProfile.feedbacks\r\n });\r\n }\r\n if (dataJson.providerProfile.providerLicenses != null\r\n && dataJson.providerProfile.providerLicenses.length > 0) {\r\n this.convertLicensedTrades(dataJson.providerProfile.providerLicenses);\r\n }\r\n\r\n } else if (dataJson.propertyManagerProfile.userId !== null) {\r\n this.setState({\r\n isPmView: true,\r\n isSpView: false,\r\n isUserView: false\r\n });\r\n\r\n if (\r\n dataJson.propertyManagerProfile.profileImageUrl !== null ||\r\n dataJson.propertyManagerProfile.profileImageUrl.trim() != \"\"\r\n ) {\r\n this.setState({\r\n profileImageUrl: dataJson.propertyManagerProfile.profileImageUrl\r\n });\r\n }\r\n } else if (dataJson.userProfile.userId !== null) {\r\n this.setState({\r\n isPmView: false,\r\n isSpView: false,\r\n isUserView: true\r\n });\r\n if (\r\n dataJson.userProfile.profileImageUrl !== null ||\r\n dataJson.userProfile.profileImageUrl.trim() != \"\"\r\n ) {\r\n this.setState({\r\n profileImageUrl: dataJson.userProfile.profileImageUrl\r\n });\r\n }\r\n\r\n\r\n } else {\r\n this.setState({\r\n isDataLoaded: false\r\n });\r\n }\r\n })\r\n );\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n getFeedbackData = (bidId) => {\r\n try {\r\n \r\n trackPromise(\r\n userService.getFeedbackListByBidId(bidId)\r\n .then(data => {\r\n this.setState({\r\n bidFeedbackList: data\r\n });\r\n })\r\n );\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n convertLicensedTrades(data) {\r\n if (!data)\r\n return;\r\n this.setState({\r\n jobTypeArray: new Array()\r\n });\r\n\r\n for (var j = 0; j < data.length; j++) {\r\n for (var i = 0; i < data[j].selectedMainJobTypes.length; i++) {\r\n var jobType = data[j].selectedMainJobTypes[i];\r\n var index = this.state.jobTypeArray.findIndex((item) => item.selectedJobTypeId === jobType.selectedJobTypeId);\r\n if ((index) < 0) {\r\n jobType.licenceNumber = data[j].licenceNumber;\r\n\r\n this.setState(prevState => ({\r\n jobTypeArray: [...prevState.jobTypeArray, jobType]\r\n }))\r\n\r\n\r\n }\r\n else {\r\n var currentJobType = this.state.jobTypeArray.splice(index, 1);\r\n var licenseNos = currentJobType[0].licenceNumber + \", \" + data[j].licenceNumber;\r\n jobType.licenceNumber = licenseNos;\r\n this.setState(prevState => ({\r\n jobTypeArray: [...prevState.jobTypeArray, jobType]\r\n }))\r\n }\r\n }\r\n }\r\n }\r\n\r\n toggleProfileDrawer = userId => {\r\n if (!this.state.showProfileDrawer && userId != null) {\r\n this.getProfile(userId);\r\n }\r\n this.setState(state => ({\r\n showProfileDrawer: !this.state.showProfileDrawer\r\n }));\r\n };\r\n\r\n createDrawer = () => {\r\n const header = this.createProfileHeader();\r\n const body = this.createProfileBody();\r\n const footer = this.createProfileFooter();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n createProfileHeader = () => {\r\n return (\r\n <>\r\n

Profile

\r\n
\r\n this.toggleProfileDrawer(null)}\r\n >\r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createProfileBody = () => {\r\n if (this.state.isDataLoaded) {\r\n return (\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 this.state.profileDetails.providerProfile\r\n .displayName\r\n }{\" \"}\r\n \r\n
\r\n
\r\n {\" \"}\r\n {this.state.profileDetails.providerProfile.email}\r\n
\r\n
\r\n {\" \"}\r\n {this.state.profileDetails.providerProfile.mobileNumber}\r\n
\r\n
\r\n
\r\n {this.getSPDetails()}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {(this.state.profileDetails) ?
\r\n Country in Operation:\r\n {this.state.profileDetails.providerProfile.workingCountry}\r\n
: ''}\r\n\r\n {(this.state.profileDetails) ?
\r\n

Area Covered

\r\n
\r\n
\r\n {this.state.profileDetails.providerProfile.preferredStates.map((val, index) => {\r\n return <>\r\n \r\n })}\r\n\r\n
\r\n\r\n {(this.state.isShowNearbySuburbs) ?
\r\n
\r\n {this.state.profileDetails.profileDetails.nearbySuburbs.map((val, index) => {\r\n return <> {val.label}\r\n \r\n })}\r\n\r\n
\r\n
: ''}\r\n {(this.state.profileDetails.nearbySuburbs && this.state.profileDetails.nearbySuburbs.length > 0) ? : ''}\r\n
\r\n
: ''}\r\n\r\n {(this.state.profileDetails) ?
\r\n {(this.state.profileDetails.providerProfile.providerLicenses && this.state.profileDetails.providerProfile.providerLicenses.length > 0) ?\r\n

this.showLicenses()}>Licensed Trades\r\n {(this.state.showLicensesTradee) ? : }\r\n

: ''}\r\n {(this.state.showLicensesTradee) ?
\r\n \r\n {this.state.jobTypeArray.map((value, index) => {\r\n return <>\r\n \r\n \r\n \r\n \r\n \r\n })}\r\n
{value.selectedJobType}{value.licenceNumber}
\r\n
: ''}\r\n\r\n {(this.state.profileDetails.providerProfile.providerInsurances && this.state.profileDetails.providerProfile.providerInsurances.length > 0) ?\r\n

this.showInsurances()}> Insurance\r\n {(this.state.showInsurancesTradee) ? : }\r\n \r\n

: ''}\r\n {(this.state.showInsurancesTradee) ?
\r\n {this.state.profileDetails.providerProfile.providerInsurances.map((value, index) => {\r\n return <>\r\n
\r\n {(value.insuranceExpiredStatus == 3) ?
\r\n
\r\n {(value.isApplicableToAllTradeType) ?
\r\n

Applicable to All job Types

\r\n
: ''}\r\n {(!value.isApplicableToAllTradeType) ?
\r\n {value.selectedMainJobTypes.map((val, index) => {\r\n return <>\r\n
\r\n

{val.selectedJobType}

\r\n
\r\n \r\n })}\r\n
: ''}\r\n\r\n
\r\n
\r\n
\r\n
Public Liability
\r\n

$ {value.publicLiabilityDisplay}

\r\n
\r\n
\r\n
\r\n
Professional indemnity
\r\n

${value.professionalIndemnityDisplay}

\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 {(this.state.profileDetails.providerProfile && this.state.profileDetails.providerProfile.feedbacks) ?
\r\n
\r\n

Feedback Received ({this.state.profileDetails.providerProfile.feedbacks.length})

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n {this.state.feedbackResult.slice(0, this.state.show).map((value, index) => {\r\n return <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {(this.state.ActivateIndex.includes(index)) ?\r\n \r\n \r\n : ''}\r\n \r\n \r\n })}\r\n
\r\n
\r\n {moment(value.dateTime).format(this.state.dateFormat.toUpperCase())}\r\n
\r\n
\r\n
\r\n {(value.feedBackUserType == 3) ? (Property Manager) : ''}\r\n {(value.feedBackUserType == 4) ? (Tenant) : ''}\r\n {(value.feedBackUserType == 2) ? (Consumer) : ''}\r\n
\r\n
\r\n
{value.user}
\r\n
\r\n \r\n \r\n
{(Math.round(value.avarageRating * 100) / 100).toFixed(1)}
\r\n
\r\n this.toogleItems(index)}\r\n id=\"bt\">\r\n \r\n \r\n \r\n \r\n\r\n
\r\n {(this.state.ActivateIndex.includes(index) || value.feedback.length <= 60) ?
\r\n {value.feedback}\r\n
: ''}\r\n {(!this.state.ActivateIndex.includes(index) && value.feedback.length > 60) ?
\r\n {(!this.state.ExpandedIndex.includes(index)) ?
\r\n {value.feedback}\r\n \r\n
: ''}\r\n {(this.state.ExpandedIndex.includes(index))?
\r\n \r\n \r\n
: ''}\r\n
: ''}\r\n {(this.state.ActivateIndex.includes(index))?
\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 getSPDetails = () => {\r\n if (this.state.isSpView) {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.getSPBusinessName()}\r\n \r\n \r\n \r\n \r\n\r\n \r\n
ABN \r\n {\" \"}\r\n : {this.state.profileDetails.providerProfile.abn}\r\n
Office No \r\n {\" \"}\r\n :{\" \"}\r\n {\r\n this.state.profileDetails.providerProfile\r\n .officePhone\r\n }\r\n
\r\n
\r\n
\r\n
\r\n

Skills

\r\n {this.getSPSkillsSummary()}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n
\r\n
\r\n
\r\n {(Math.round(this.state.profileDetails.providerProfile.overallRating * 100) / 100).toFixed(1)}
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {(this.state.profileDetails.providerProfile.hourlyRate) ?
\r\n
\r\n {this.state.profileDetails.providerProfile.hourlyRate}\r\n
\r\n
\r\n Per hour\r\n rate\r\n
\r\n
: ''}\r\n
\r\n
\r\n {this.state.profileDetails.providerProfile.completedJobCount}\r\n
\r\n
\r\n Completed\r\n jobs\r\n
\r\n
\r\n
\r\n
\r\n {this.state.profileDetails.providerProfile.calloutFee}\r\n
\r\n
\r\n Callout\r\n fee\r\n
\r\n
\r\n
\r\n
\r\n {(this.state.profileDetails.providerProfile.hasLicenseBadge) ?\r\n
\r\n
\r\n
Licence
\r\n
: ''}\r\n {(this.state.profileDetails.providerProfile.hasInsuranceBadge) ?\r\n
\r\n
\r\n
Insurance
\r\n
: ''}\r\n {(this.state.profileDetails.providerProfile.hasABNBadge) ?\r\n
\r\n
\r\n
ABN
Registered
\r\n
: ''}\r\n {(this.state.profileDetails.providerProfile.hasJobFiftyPlusBadge) ?\r\n
\r\n
\r\n
You are
Top rated
\r\n
: ''}\r\n {(this.state.profileDetails.providerProfile.hasCompletedMoreThanFiftyJobs) ?\r\n
\r\n
\r\n
Job 50+
Completed
\r\n
: ''}\r\n {(this.state.profileDetails.providerProfile.hasCm3CertifiedBadge) ?\r\n
\r\n
\r\n
CM3
Certified
\r\n
: ''}\r\n
\r\n
\r\n \r\n );\r\n }\r\n };\r\n\r\n toogleExpandItems = (index) => {\r\n if (this.state.ExpandedIndex.includes(index)) {\r\n this.setState(state => ({\r\n ExpandedIndex: this.state.ExpandedIndex.filter(item => item !== index),\r\n \r\n }));\r\n }\r\n else {\r\n this.setState(prevState => ({\r\n ExpandedIndex: [...prevState.ExpandedIndex, index]\r\n \r\n }));\r\n \r\n }\r\n }\r\n\r\n toogleItems = (index) => {\r\n this.getFeedbackData(this.state.feedbackResult[index].bidId);\r\n if (this.state.ActivateIndex.includes(index)) {\r\n this.setState(state => ({\r\n ActivateIndex: this.state.ActivateIndex.filter(item => item !== index),\r\n isShowMore: true\r\n }));\r\n \r\n }\r\n else {\r\n\r\n this.setState(prevState => ({\r\n ActivateIndex: [...prevState.ActivateIndex, index],\r\n isShowMore: false\r\n }));\r\n\r\n }\r\n }\r\n\r\n onOptionsSelected = (event) => {\r\n var resultArrey = new Array();\r\n if (this.state.profileDetails.providerProfile.feedbacks != null) {\r\n for (var j = 0; j < this.state.profileDetails.providerProfile.feedbacks.length; j++) {\r\n if (this.state.profileDetails.providerProfile.feedbacks[j].feedBackUserType == event || event == 0) {\r\n\r\n resultArrey.push(this.state.profileDetails.providerProfile.feedbacks[j]);\r\n }\r\n }\r\n this.setState(state => ({\r\n feedBackUserTypeCount: resultArrey.length,\r\n feedbackResult: resultArrey\r\n }));\r\n\r\n }\r\n }\r\n getSPBusinessName = () => {\r\n if (this.state.profileDetails.providerProfile.businessName.trim() != \"\") {\r\n return (\r\n <>\r\n \r\n Business Name \r\n \r\n {\" \"}\r\n : {this.state.profileDetails.providerProfile.businessName}\r\n \r\n \r\n \r\n );\r\n }\r\n };\r\n\r\n getSPAllSkillsSummary = () => {\r\n const skills = this.state.profileDetails.providerProfile.primaryServices.map(\r\n (service, index) => {\r\n return (\r\n <>\r\n \r\n \r\n );\r\n }\r\n );\r\n return skills;\r\n };\r\n\r\n getSPSkillsSummary = () => {\r\n if (this.state.profileDetails.providerProfile.primaryServices !== null) {\r\n return (\r\n <>\r\n
{this.getSPAllSkillsSummary()}
\r\n \r\n );\r\n }\r\n else {\r\n return (\r\n <>\r\n {(this.state.profileDetails.providerProfile.preferredJobTypesGrouped !== null) ?
\r\n
\r\n {this.state.profileDetails.providerProfile.preferredJobTypesGrouped.map((value, index) => {\r\n return <>\r\n
\r\n \r\n {(this.state.skillsLoad) ?\r\n
\r\n {value.map((val, index) => {\r\n return <>\r\n \r\n })}\r\n\r\n
: ''}\r\n
\r\n \r\n })}\r\n
\r\n this.toogleItemsInSkills()} id=\"bt\" >\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 toogleItemsInSkills() {\r\n this.setState(state => ({\r\n skillsLoad: !this.state.skillsLoad\r\n }));\r\n\r\n }\r\n\r\n showNearbySuburbs() {\r\n this.setState(state => ({\r\n isShowNearbySuburbs: !this.state.isShowNearbySuburbs\r\n }));\r\n\r\n }\r\n\r\n showLicenses() {\r\n this.setState(state => ({\r\n showLicensesTradee: !this.state.showLicensesTradee\r\n }));\r\n }\r\n\r\n showInsurances() {\r\n this.setState(state => ({\r\n showInsurancesTradee: !this.state.showInsurancesTradee\r\n }));\r\n }\r\n\r\n createProfileFooter = () => {\r\n return (\r\n <>\r\n
\r\n this.toggleProfileDrawer(null)}\r\n >\r\n {\" \"}\r\n Cancel{\" \"}\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n getQuotesList = () => {\r\n const quotes = this.props.bids.map((bid, index) => {\r\n let drawer = this.createDrawer();\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n this.toggleProfileDrawer(bid.providerId)}\r\n src={bid.providerProfile.profileImageUrl}\r\n alt=\"bid.providerProfile.email\"\r\n className=\"profile-pic\"\r\n onError={e => {\r\n e.target.onerror = null;\r\n e.target.src = \"/Images/default-profile.png\";\r\n }}\r\n />\r\n
\r\n
\r\n

{bid.name}

\r\n

email: {bid.email}

\r\n

tel: {bid.phone}

\r\n
\r\n
\r\n
\r\n {this.getQuoteAmount(bid)}\r\n
\r\n
\r\n\r\n
\r\n
\r\n {this.getSPNotes(bid.notes)}\r\n
{bid.feedback}
\r\n
\r\n {(bid.availabilityStart && bid.availabilityEnd) ?\r\n
\r\n
Schedule
\r\n
{bid.availabilityStart} to {bid.availabilityEnd}
\r\n
\r\n : ''}\r\n {(bid.estimatedTimeDisplay) ?\r\n
\r\n
Estimated Time
\r\n
{bid.estimatedTimeDisplay}
\r\n
\r\n : ''}\r\n
\r\n
\r\n \r\n
\r\n {(bid.hasOwnProperty(\"attachments\")) ?\r\n : ''\r\n }\r\n {/* {this.getInvoiceAttachments(bid)} */}\r\n
\r\n
\r\n {/* {(!this.isApprovedOrDeclined()) ? <>\r\n
\r\n \r\n
\r\n : ''} */}\r\n \r\n
\r\n {drawer}\r\n \r\n );\r\n });\r\n return quotes;\r\n };\r\n\r\n isApprovedOrDeclined = () => {\r\n return this.props.bids.filter(a => a.quoteApprovalStatusId == 1 || a.quoteApprovalStatusId == 2).length > 0\r\n }\r\n\r\n onClickApproveBid = (bid) => {\r\n bidService.approveBidByOwner(this.props.jobDetails.id, bid.bidId, \"\").then(res => {\r\n toast.success('Bid accepted by owner', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.onApproveBid(bid);\r\n })\r\n }\r\n\r\n getInvoiceAttachments = (bid) => {\r\n if(bid.job != null && bid.job.attachments != null) {\r\n let invoiceAttachments = bid.job.attachments.filter(a => a.type == 6 && a.userId == bid.providerId)\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n getQuoteAmount(bid) {\r\n if (bid.placeBidType) {\r\n if (bid.placeBidType === 1 || bid.placeBidType === 3) {\r\n return (\r\n
\r\n
Quoted Amount
\r\n
${bid.amount.toFixed(2)}
\r\n
\r\n );\r\n } else if (bid.placeBidType === 2) {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
${bid.amount}
${bid.amountMax}
\r\n
\r\n
\r\n );\r\n } else if (bid.placeBidType === 4) {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
${bid.callOutFee.toFixed(2)}
${bid.hourlyRate.toFixed(2)}
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Quotes;\r\n","import React, { Component } from \"react\";\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport { connect } from \"react-redux\";\r\nimport \"react-bootstrap-table/dist/react-bootstrap-table-all.min.css\";\r\nimport { Modal, Button, Tabs, Tab, Badge, Form } from \"react-bootstrap\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport Loader from \"react-loader-spinner\";\r\n\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport \"./jobdetailsdrawer.scss\";\r\nimport JobDetail from \"./JobDetail/JobDetail\";\r\nimport FeedbackDrawer from \"../../Drawers/FeedbackDrawer/FeedbackDrawer\";\r\nimport JobApproveDrawer from \"../../Drawers/JobApproveDrawer/JobApproveDrawer\";\r\nimport RejectDrawer from \"../../Drawers/JobRejectDrawer/JobRejectDrawer\";\r\nimport { UserType, WorkflowStates, JobsListTypes } from \"../../../Constants/Enums\";\r\nimport bidService from \"../../../Services/BidService\";\r\nimport Quotes from \"../../Drawers/JobDetailsDrawer/Quotes/Quotes\";\r\nimport JobNotes from \"./JobNotes/JobNotes\";\r\nimport ScheduleJobDrawer from \"../ScheduleJobDrawer/ScheduleJobDrawer\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport JobCancelDrawer from \"../JobCancelDrawer/JobCancelDrawer\";\r\nimport JobVariationDrawer from \"../JobVariationDrawer/JobVariationDrawer\";\r\nimport EventScheduleDrawer from \"../EventScheduleDrawer/EventScheduleDrawer\";\r\nimport settingsService from \"../../../Services/settingsService\";\r\n\r\nclass JobDetailsDrawer extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n state = {\r\n jobDetails: {\r\n workflowStatusId: 0 \r\n },\r\n jobNotes: [],\r\n attachments: [],\r\n quotes: [],\r\n jobVariation: {},\r\n showScheduleJob: false,\r\n isJobDetailsLoading: false,\r\n isJobQuotesLoading: false,\r\n isJobNotesLoading: false,\r\n isPostingData: false,\r\n isJobQuotesOwnerApprovalPending: false,\r\n showAverageCostWhenOwnerApproval: false,\r\n isOrganizationSettingsLoaded: false,\r\n isTenantManageJob:this.props.isTenantManageJob?true:false\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n return
{drawer}
;\r\n }\r\n\r\n componentDidMount() {\r\n this.getJobDetailsByJobId(this.props.jobId);\r\n this.getQoutesByJobId(this.props.jobId);\r\n this.getJobNotesByJobId(this.props.jobId);\r\n this.getOrganizationSettings(localStorage.getItem('orgId'));\r\n }\r\n\r\n getOrganizationSettings(organizationId) {\r\n settingsService.getOrganizationSettingsByOrgId(organizationId)\r\n .then((res) => {\r\n this.setState({\r\n showAverageCostWhenOwnerApproval: res.organizationSettingsModel.showAverageCostWhenOwnerApproval,\r\n isOrganizationSettingsLoaded: true\r\n })\r\n })\r\n }\r\n\r\n createDrawer = () => {\r\n if (this.props.drawerOpen) {\r\n let header = this.createHeader();\r\n let body = this.createBody();\r\n let footer = this.state.isTenantManageJob?<>:this.createFooter();\r\n return (\r\n \r\n );\r\n }\r\n };\r\n\r\n createHeader = () => {\r\n const { isJobDetailsLoading, isJobNotesLoading, isJobQuotesLoading } = this.state;\r\n return (\r\n <>\r\n

\r\n Job Details \r\n {(isJobDetailsLoading || isJobNotesLoading || isJobQuotesLoading) ? : ''}\r\n

\r\n
\r\n {/* */}\r\n {/* */}\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n\r\n createBody = () => {\r\n const { jobDetails, jobNotes, isJobDetailsLoading, isJobQuotesLoading, isJobNotesLoading, isJobQuotesOwnerApprovalPending } = this.state;\r\n return ( \r\n <>\r\n
\r\n {(!isJobDetailsLoading && this.state.isOrganizationSettingsLoaded) ?\r\n \r\n \r\n { this.getJobDetailsByJobId(event) }}\r\n showAverageCostWhenOwnerApproval={this.state.showAverageCostWhenOwnerApproval}\r\n isTenantManageJob={this.state.isTenantManageJob}>\r\n \r\n \r\n {(this.state.quotes && this.state.quotes.length > 0 && (localStorage.getItem('userType') == '5' || (jobDetails && jobDetails.propertyId == null))) ?\r\n \r\n
\r\n
\r\n this.onApproveBid(event)}>\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 createFooter = () => {\r\n const buttons = this.GetButtonsByUserType();\r\n const feedbackButton = this.getFeedbackButton();\r\n const wordId = this.props.workFlowId\r\n const { isJobDetailsLoading, isJobQuotesLoading, isJobNotesLoading } = this.state;\r\n\r\n return (\r\n <>\r\n
\r\n {(this.state.jobDetails.acceptedBid != null && this.state.jobDetails.acceptedBid.isSharedSchedule && this.state.jobDetails.workflowStatusId === 4) ? \r\n : ''} \r\n {buttons}\r\n {feedbackButton}\r\n {(this.state.jobDetails.workflowStatusId === 4 && this.state.jobDetails.scheduleEventId != null && this.state.jobDetails.scheduleEventStatus !== 2 && this.state.jobDetails.scheduleEventStatus !== 4 && this.state.jobDetails.scheduleEventStatus !== 1) ?\r\n : ''}\r\n {(this.state.jobDetails.workflowStatusId === 4 && this.state.jobDetails.scheduleEventId != null && this.state.jobDetails.scheduleEventStatus !== 2 && this.state.jobDetails.scheduleEventStatus !== 4 && this.state.jobDetails.scheduleEventStatus !== 1) ?\r\n : ''}\r\n \r\n {(this.state.jobDetails.workflowStatusId === 4 && this.state.jobDetails.scheduleEventId != null && this.state.jobDetails.acceptedBid != null && !this.state.jobDetails.acceptedBid.isSharedSchedule) ?\r\n \r\n \r\n {(this.state.showScheduleJob) ?\r\n this.toggleSheduleJobDrawer()}\r\n getJobDetails={(event) => { this.getJobDetailsByJobId(event) }}\r\n CloseJobDetailsDrawer={(event) => this.props.toggleDrawer(event)}>\r\n : ''\r\n }\r\n : ''\r\n }\r\n {(wordId == 1) ?\r\n : ''\r\n } \r\n \r\n {(this.state.jobDetails.isOwnerApprovalPendingForVariation &&\r\n this.state.jobDetails.jobVariations &&\r\n this.state.jobDetails.jobVariations.length > 0 &&\r\n this.state.jobDetails.jobVariations[0].serviceStatus == 0 ) ?\r\n this.props.toggleDrawer(event)}\r\n jobDetails={this.state.jobDetails}\r\n getJobDetails={(event) => this.getJobDetailsByJobId(event)}>\r\n : ''\r\n }\r\n \r\n {(this.state.jobDetails.workflowStatusId == 107 && localStorage.getItem('userType') != '5' && this.state.jobDetails.isTenantPendingReviewRejected == 0) ?\r\n this.props.toggleDrawer(event)}\r\n jobDetails={this.state.jobDetails}\r\n getJobDetails={(event) => this.getJobDetailsByJobId(event)}>\r\n : ''\r\n }\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n onDeclineAllQuotes = () => {\r\n bidService.declineAllBidsByOwner(this.state.jobDetails.id, \"\").then(res => {\r\n toast.success('All bids decline by owner', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.getQoutesByJobId(this.state.jobDetails.id);\r\n this.getJobDetailsByJobId(this.state.jobDetails.id)\r\n });\r\n }\r\n\r\n onApproveBid = () => {\r\n this.getQoutesByJobId(this.state.jobDetails.id);\r\n this.getJobDetailsByJobId(this.state.jobDetails.id)\r\n }\r\n\r\n toggleSheduleJobDrawer = () => {\r\n this.setState({\r\n showScheduleJob: !this.state.showScheduleJob\r\n });\r\n }\r\n\r\n onSubmitJob = () => {\r\n const draftedJob = this.state.jobDetails;\r\n draftedJob.workflowStatusId = 2\r\n draftedJob.serviceConsumerId = localStorage.getItem('userId');\r\n draftedJob.isUpdatingJobStaus = true;\r\n draftedJob.tradees = draftedJob.tradees == null ? [] : draftedJob.tradees;\r\n this.setState({ isPostingData: true });\r\n try {\r\n trackPromise(\r\n\r\n AXIOS.POST(`tenant-api/job-post`, draftedJob, {\r\n 'headers': { 'ClientSecret': AppConfiguration.Setting().ClientSecret }\r\n })\r\n .then(dataJson => {\r\n this.setState({ isPostingData: false });\r\n if (dataJson == 'Request Unauthorized' || dataJson == 'Job creation failed') {\r\n toast.error('Fail to post the job. Please try again.',{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n } else {\r\n toast.success('Job is posted successfully.',{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.toggleDrawer(true);\r\n let { history } = this.props;\r\n history.push({ pathname: '/' });\r\n }\r\n })\r\n\r\n )\r\n\r\n } catch (error) {\r\n\r\n }\r\n }\r\n\r\n getJobDetailsByJobId = jobId => {\r\n const userId = localStorage.getItem(\"userId\");\r\n this.setState({isJobDetailsLoading: true})\r\n if (jobId) {\r\n try {\r\n AXIOS.GET(`tenant-api/job?jobId=${jobId}&userId=${userId}`).then(\r\n data => {\r\n this.setState({\r\n isJobDetailsLoading: false,\r\n jobDetails: data, \r\n isJobQuotesOwnerApprovalPending: data.isJobQuotesOwnerApprovalPending,\r\n attachments: (!data.attachments) ? [] : data.attachments.map(a => {\r\n return {\r\n source:\r\n \"https://ancillary-dev-images-compressed.azureedge.net/\" +\r\n a.fileId +\r\n a.extension,\r\n options: {\r\n type: \"local\"\r\n }\r\n };\r\n })\r\n });\r\n }\r\n )\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n };\r\n\r\n //Api call to get Job-notes\r\n getJobNotesByJobId = jobId => {\r\n const userId = localStorage.getItem(\"userId\");\r\n this.setState({isJobNotesLoading: true})\r\n if (jobId) {\r\n try {\r\n AXIOS.GET(\r\n `tenant-api/job-notes?jobId=${jobId}&userId=${userId}`\r\n ).then(data => {\r\n this.setState({\r\n jobNotes: data,\r\n isJobNotesLoading: false\r\n });\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n };\r\n\r\n //get Qoutes/Bids Details\r\n getQoutesByJobId = jobId => {\r\n const userId = localStorage.getItem(\"userId\");\r\n this.setState({isJobQuotesLoading: true})\r\n if (jobId) {\r\n try {\r\n bidService.getQoutesByJobId(jobId, userId)\r\n .then(data => {\r\n this.setState({\r\n quotes: data.bidsList,\r\n isJobQuotesLoading: false\r\n });\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n };\r\n\r\n getFeedbackButton = () => {\r\n if (\r\n localStorage.getItem('userType') == '4' && \r\n this.state.jobDetails.acceptedBid != null &&\r\n (this.state.jobDetails.workflowStatusId ===\r\n WorkflowStates.JobPendingReview ||\r\n this.state.jobDetails.workflowStatusId ===\r\n WorkflowStates.JobCompleted ||\r\n this.state.jobDetails.workflowStatusId == 107) &&\r\n this.state.jobDetails.thirdPartyTradeeEmail == null &&\r\n this.state.jobDetails.isTenantPendingReviewRejected == 0 &&\r\n (this.state.jobDetails.propertyId == null ||\r\n this.state.jobDetails.workflowStatusId == 107\r\n && this.state.jobDetails.propertyId != null)\r\n ) {\r\n return (\r\n \r\n );\r\n }\r\n };\r\n\r\n GetButtonsByUserType = () => {\r\n if (localStorage.getItem('userType') == '5') {\r\n if (\r\n this.state.jobDetails.workflowStatusId ==\r\n WorkflowStates.JobAwaitingOwnerApproval && !(this.state.quotes && this.state.quotes.length > 0 && this.state.isOrganizationSettingsLoaded && !this.state.isJobDetailsLoading)\r\n ) {\r\n return (\r\n <>\r\n this.props.toggleDrawer(event)}\r\n jobDetails={this.state.jobDetails}\r\n getJobDetails={(event) => this.getJobDetailsByJobId(event)}\r\n showAverageCostWhenOwnerApproval={this.state.showAverageCostWhenOwnerApproval}\r\n >\r\n this.props.toggleDrawer(event)}\r\n jobDetails={this.state.jobDetails}\r\n getJobDetails={(event) => this.getJobDetailsByJobId(event)}\r\n >\r\n \r\n );\r\n } else {\r\n let isReplyed = this.state.quotes.filter(a => a.quoteApprovalStatusId == 1 || a.quoteApprovalStatusId == 2).length > 0\r\n if(isReplyed){\r\n return '';\r\n } \r\n }\r\n }\r\n };\r\n\r\n onAcceptSchedule = () => {\r\n \r\n let obj = {};\r\n\r\n obj.JobId = this.state.jobDetails.id;\r\n \r\n obj.id = this.state.jobDetails.scheduleEventId;\r\n \r\n obj.type = 0;\r\n obj.status = 2;\r\n obj.bidId = this.state.jobDetails.acceptedBid.bidId;\r\n obj.userId = localStorage.getItem('userIdDecripted');\r\n \r\n \r\n try {\r\n AXIOS.POST(`tenant-api/save-schedule-job?userId=${localStorage.getItem('userId')}`, obj).then(response => {\r\n if (response) {\r\n toast.success('Job Schedule Accepted', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.getJobDetailsByJobId(this.state.jobDetails.id);\r\n }\r\n else {\r\n toast.error('Job Schedule Acceptance Failed', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n \r\n\r\n };\r\n\r\n onRejectSchedule = () => {\r\n\r\n let obj = {};\r\n\r\n obj.JobId = this.state.jobDetails.id;\r\n\r\n obj.id = this.state.jobDetails.scheduleEventId;\r\n\r\n obj.type = 0;\r\n obj.status = 3;\r\n obj.bidId = this.state.jobDetails.acceptedBid.bidId;\r\n obj.userId = localStorage.getItem('userIdDecripted');\r\n \r\n\r\n try {\r\n AXIOS.POST(`tenant-api/save-schedule-job?userId=${localStorage.getItem('userId')}`, obj).then(response => {\r\n if (response) {\r\n toast.success('Job Schedule Rejected', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.getJobDetailsByJobId(this.state.jobDetails.id);\r\n }\r\n else {\r\n toast.error('Job Schedule Rejection Failed', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n\r\n\r\n };\r\n\r\n}\r\n\r\nexport default JobDetailsDrawer;\r\n","import React, { useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport StarRatingComponent from \"react-star-rating-component\";\r\n\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { ToastContainer, toast } from \"react-toastify\";\r\nimport { WorkflowStates, UserType } from \"../../../Constants/Enums\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\nimport \"./FeedbackDrawer.scss\";\r\nimport { trackPromise } from \"react-promise-tracker\";\r\n\r\nclass FeedbackDrawer extends React.Component {\r\n state = {\r\n showFeedbackDrawer: false,\r\n attendanceRating: 0,\r\n communicationRating: 0,\r\n cleanlinessRating: 0,\r\n qualityRating: 0\r\n };\r\n\r\n isFeedbackProvided = false;\r\n userFeedbackNote = '';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.feedback = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n this.isFeedbackProvided = false;\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n const feedbackButton = \"Feedback\";\r\n return (\r\n <>\r\n \r\n {drawer}\r\n \r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n const header = this.createFeedbackHeader();\r\n const body = this.createFeedbackBody();\r\n const footer = this.createFeedbackFooter();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n createFeedbackHeader = () => {\r\n return (\r\n <>\r\n

Provide Feedback

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createFeedbackBody = () => {\r\n const isTenant =\r\n localStorage.getItem(\"userType\") == UserType.Tenant ;\r\n const jobData = this.props.jobDetails;\r\n\r\n let {\r\n attendanceRating,\r\n communicationRating,\r\n cleanlinessRating,\r\n qualityRating\r\n } = this.state;\r\n\r\n if (jobData.bidFeedBackList && jobData.bidFeedBackList.length > 0) {\r\n const userFeedback = jobData.bidFeedBackList.filter(\r\n feedback => feedback.userId === localStorage.getItem(\"userIdDecripted\")\r\n );\r\n if (userFeedback && userFeedback.length > 0) {\r\n const feedbackGivenByUser = userFeedback[0];\r\n\r\n this.isFeedbackProvided = true;\r\n this.userFeedbackNote = feedbackGivenByUser.feedback;\r\n attendanceRating = feedbackGivenByUser.bidRatings.filter(\r\n rating => rating.ratingsCriteriaId === 1\r\n )[0].rating;\r\n\r\n communicationRating = feedbackGivenByUser.bidRatings.filter(\r\n rating => rating.ratingsCriteriaId === 2\r\n )[0].rating;\r\n\r\n cleanlinessRating = feedbackGivenByUser.bidRatings.filter(\r\n rating => rating.ratingsCriteriaId === 3\r\n )[0].rating;\r\n\r\n qualityRating = feedbackGivenByUser.bidRatings.filter(\r\n rating => rating.ratingsCriteriaId === 4\r\n )[0].rating;\r\n }\r\n }\r\n\r\n\r\n return (\r\n
\r\n
{jobData.title}
\r\n
{jobData.description}
\r\n
\r\n {(!isTenant ) ?\r\n
\r\n
Estimate
\r\n
\r\n {jobData && jobData.acceptedBid && jobData.acceptedBid.amount && jobData.acceptedBid.amount > 0 ? `$ ${jobData.acceptedBid.amount}` : \"Not Supplied\"}\r\n
\r\n
\r\n : ''}\r\n
\r\n
Provider
\r\n
\r\n {jobData.acceptedBid ? `${jobData.acceptedBid.name}` : ``}\r\n
\r\n
\r\n
\r\n
Provider Note
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n

Overall Rating

\r\n
\r\n\r\n
\r\n
Attendance time
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Communications
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Cleanliness
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
Quality of Workmanship
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {!this.isFeedbackProvided &&\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
}\r\n {this.isFeedbackProvided &&\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n {this.props.jobDetails.propertyManagerAgencyPlaceId != '' || this.props.jobDetails.providerAgencyPlaceId != '' ?\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 Mark as Completed\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n onClickAddReview = (placeId) => {\r\n let url = AppConfiguration.Setting().googleMapReviewUrl + \"?placeid=\" + placeId;\r\n window.open(url, \"_blank\")\r\n }\r\n\r\n\r\n onRatingStarClick(nextValue, prevValue, name) {\r\n switch (name) {\r\n case \"attendanceRating\":\r\n this.setState({ attendanceRating: nextValue });\r\n break;\r\n case \"communicationRating\":\r\n this.setState({ communicationRating: nextValue });\r\n break;\r\n case \"cleanlinessRating\":\r\n this.setState({ cleanlinessRating: nextValue });\r\n break;\r\n case \"qualityRating\":\r\n this.setState({ qualityRating: nextValue });\r\n break;\r\n }\r\n }\r\n\r\n createFeedbackFooter = () => {\r\n const feedbackButton = \"ADD FEEDBACK\";\r\n return (\r\n <>\r\n
\r\n \r\n\r\n {!this.isFeedbackProvided && }\r\n
\r\n \r\n );\r\n };\r\n\r\n onUpdateFeedback = () => {\r\n try {\r\n if (!this.state.attendanceRating || !this.state.communicationRating || !this.state.cleanlinessRating || !this.state.qualityRating) {\r\n toast.error(\"Great if you could rate all options!\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n this.props.showJobDetailsDrawer(!this.props.open, true);\r\n let bidFeedback = {\r\n userId: localStorage.getItem(\"userId\"),\r\n jobId: this.props.jobDetails.id,\r\n feedback: this.feedback.current.value,\r\n bidRatings: [\r\n { rating: this.state.attendanceRating, ratingsCriteriaId: 1 },\r\n { rating: this.state.communicationRating, ratingsCriteriaId: 2 },\r\n { rating: this.state.cleanlinessRating, ratingsCriteriaId: 3 },\r\n { rating: this.state.qualityRating, ratingsCriteriaId: 4 }\r\n ],\r\n FeedBackUserType: UserType.Owner,\r\n FeedbackRatings: 0\r\n };\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/save-feedback`, bidFeedback).then(response => {\r\n if (response.success === true) {\r\n this.isFeedbackProvided = true;\r\n this.userFeedbackNote = this.feedback.current.value;\r\n toast.success(\"Feedback Updated.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.getJobDetails(this.props.jobDetails.id);\r\n this.toggleFeedbackDrawer();\r\n } else {\r\n toast.error(\"Error occured. Please try again.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }));\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n toggleFeedbackDrawer = () => {\r\n this.setState(state => ({\r\n showFeedbackDrawer: !this.state.showFeedbackDrawer\r\n }));\r\n };\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n open: state.MyJobs.isOpen\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n showJobDetailsDrawer: (isShowDrawer, isRefresh) => {\r\n dispatch({\r\n type: \"SHOW_JOB_DETAILS_DRAWER\",\r\n isOpen: isShowDrawer,\r\n refreshMyJobs: isRefresh\r\n });\r\n }\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(FeedbackDrawer);\r\n","import React, { useState } from \"react\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport { Dropdown } from 'semantic-ui-react';\r\nimport { ButtonToolbar, ToggleButtonGroup, ToggleButton } from 'react-bootstrap';\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport jobService from \"../../../Services/JobService\";\r\n\r\n// Styles\r\nimport \"./JobApproveDrawer.scss\";\r\n\r\nclass JobApproveDrawer extends React.Component {\r\n notifyError = (msg) => toast.error(msg, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n state = {\r\n showJobApproveDrawer: false,\r\n jobApproveOption: '0',\r\n showQuoteLimitSelection: false,\r\n showSuggestedTrade: false,\r\n selectedQuoteLimit: 0,\r\n selectedTrade: '',\r\n quoteLimit: [\r\n { key: 1, text: '1', value: 1 },\r\n { key: 2, text: '2', value: 2 },\r\n { key: 3, text: '3', value: 3 },\r\n { key: 4, text: '4', value: 4 },\r\n { key: 5, text: '5', value: 5 },\r\n { key: 6, text: '6', value: 6 },\r\n { key: 7, text: '7', value: 7 },\r\n { key: 8, text: '8', value: 8 },\r\n { key: 9, text: '9', value: 9 },\r\n { key: 10, text: '10', value: 10 },\r\n { key: 11, text: 'Unlimited', value: 11 }],\r\n suggestedTradeList: [],\r\n averageCostModel: {\r\n jobAverageCost: 0.00,\r\n jobCount: 0,\r\n confidenceLevel: 1\r\n },\r\n isAverageCostModelLoaded: false\r\n };\r\n constructor(props) {\r\n super(props);\r\n this.description = React.createRef();\r\n }\r\n //for getting average job cost\r\n getPredictiveAverageCost = (jobId) => {\r\n try {\r\n jobService.GetPredictiveJobAverageCost(jobId)\r\n .then(data => {\r\n this.setState({ averageCostModel: data });\r\n this.setState({ isAverageCostModelLoaded: true });\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.description = React.createRef();\r\n this.approvedAmount = React.createRef();\r\n this.isEmptySuggestedTradeList = false;\r\n if (this.props.showAverageCostWhenOwnerApproval) {\r\n this.getPredictiveAverageCost(this.props.jobDetails.id);\r\n }\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n\r\n return (\r\n <>\r\n \r\n {drawer}\r\n \r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n const header = this.createJobApproveHeader();\r\n const body = this.createJobApproveBody();\r\n const footer = this.createJobApproveFooter();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n createJobApproveHeader = () => {\r\n return (\r\n <>\r\n

\r\n Approve Job\r\n

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createJobApproveBody = () => {\r\n let quoteLimitSelection = this.createQuoteLimitSelection();\r\n let suggestedTradeSelection = this.createSuggestedTradeSelection();\r\n\r\n return (\r\n
\r\n {(this.props.showAverageCostWhenOwnerApproval && this.state.isAverageCostModelLoaded) ?\r\n
\r\n
\r\n
The suggested average cost range for the job is +/-${this.state.averageCostModel.jobAverageCost}
\r\n
\r\n
\r\n :\r\n ''\r\n }\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n Please get some quotes\r\n Delegate to Property Manager\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {quoteLimitSelection}\r\n {suggestedTradeSelection}\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 Mark as Completed\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n createQuoteLimitSelection = () => {\r\n if (this.state.showQuoteLimitSelection) {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n }\r\n\r\n createMessageForEmptySuggestedTradeSelection = () => {\r\n if (this.isEmptySuggestedTradeList) {\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n )\r\n }\r\n else {\r\n return\r\n }\r\n }\r\n\r\n createSuggestedTradeSelection = () => {\r\n let messageForEmptySuggestedTradeSelection = this.createMessageForEmptySuggestedTradeSelection();\r\n if (this.state.showSuggestedTrade) {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n {messageForEmptySuggestedTradeSelection}\r\n \r\n )\r\n } else {\r\n return\r\n }\r\n }\r\n\r\n handleQuoteLimitChange = (event, props) => {\r\n this.state.selectedQuoteLimit = props.value;\r\n this.state.selectedTrade = '';\r\n }\r\n\r\n handleTradeChange = (event, props) => {\r\n this.state.selectedTrade = props.value;\r\n this.state.selectedQuoteLimit = 0;\r\n }\r\n\r\n createJobApproveFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n {\" \"}\r\n Cancel{\" \"}\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n validateApproval = () => {\r\n let v = true;\r\n if (this.state.jobApproveOption === '0' && this.props.jobDetails.isEnableOwnerApprovalPercentage == false) {\r\n toast.error('Please select approval option.', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n }); v = v && false;\r\n }\r\n\r\n if (this.state.jobApproveOption === '1' && this.state.selectedTrade === '') {\r\n toast.error('Please select a trade.', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n }); v = v && false;\r\n }\r\n\r\n if (this.state.jobApproveOption === '2' && this.state.selectedQuoteLimit === 0) {\r\n toast.error('Please select a Quote Limit.', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n }); v = v && false;\r\n }\r\n\r\n if (this.description.current.value == null || this.description.current.value.trim() === '') {\r\n toast.error(\"Please enter job approving note.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n }); v = v && false;\r\n }\r\n\r\n return v;\r\n }\r\n\r\n onClickJobApprove = () => {\r\n try {\r\n\r\n if (this.validateApproval()) {\r\n let jobApprovalRequest = {};\r\n jobApprovalRequest.userId = localStorage.getItem(\"userId\");\r\n jobApprovalRequest.jobId = this.props.jobDetails.id;\r\n jobApprovalRequest.note = this.description.current.value;\r\n jobApprovalRequest.jobApproveOption = parseFloat(this.state.jobApproveOption);\r\n jobApprovalRequest.quoteLimit = this.state.selectedQuoteLimit;\r\n jobApprovalRequest.tradeId = this.state.selectedTrade;\r\n jobApprovalRequest.IsOwnerApproved = true;\r\n\r\n\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/job-approve-owner`, jobApprovalRequest)\r\n .then(response => {\r\n if (response) {\r\n toast.success(\"Job Approved.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.toggleJobApproveDrawer();\r\n this.props.toggleDrawer(true);\r\n } else {\r\n toast.error(\"Error occured. Please try again.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }));\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n };\r\n\r\n toggleJobApproveDrawer = () => {\r\n this.setState(state => ({\r\n showJobApproveDrawer: !this.state.showJobApproveDrawer\r\n }));\r\n };\r\n\r\n handleJobApproveOptionOnChange = (value) => {\r\n this.setState({ jobApproveOption: value });\r\n\r\n if (value === \"1\") {\r\n try {\r\n AXIOS.GET(\r\n `tenant-api/suggested-trades?jobId=${this.props.jobDetails.id}`\r\n ).then(response => {\r\n if (response) {\r\n if (response.length <= 0) {\r\n this.isEmptySuggestedTradeList = true;\r\n }\r\n this.setState({ suggestedTradeList: response.map((a, index) => { return { key: index, text: a.businessName, value: a.userId }; }) });\r\n this.setState({ showQuoteLimitSelection: false, showSuggestedTrade: true });\r\n } else {\r\n toast.error(\"Error occured. Please try again.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n else if (value === \"2\") {\r\n this.setState({ showQuoteLimitSelection: true, showSuggestedTrade: false });\r\n }\r\n else if (value === \"3\") {\r\n this.setState({ showQuoteLimitSelection: false, showSuggestedTrade: false });\r\n }\r\n }\r\n\r\n onQuoteLimitSelection = (value) => {\r\n\r\n }\r\n\r\n getConfidenceLevelClass(confidenceLevel) {\r\n switch (confidenceLevel) {\r\n case 1:\r\n return \"confident-lbl confident-low\";\r\n case 2:\r\n return \"confident-lbl confident-medium\";\r\n case 3:\r\n return \"confident-lbl confident-high\";\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n isRefresh: state.MyJobs.isRefreshGrid\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n refreshGrid: isRefresh => {\r\n dispatch({ type: \"REFRESH_GRID\", isRefresh: isRefresh });\r\n }\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(JobApproveDrawer);\r\n","import { AXIOS } from '../Utilities/HttpRequest/Axios.js';\r\nimport * as _ from 'lodash';\r\nimport { AppConfiguration } from 'read-appsettings-json';\r\nconst pamApi = AppConfiguration.Setting().PamApiEndPoint;\r\nconst SendVerificationCode = (mobileNumber) => {\r\n return AXIOS.GET(`tenant-api/get-messenger-phone-number-verification-code?mobileNumber=%2B${mobileNumber}`);\r\n}\r\n\r\nconst SendVerificationCodeViaEmail = (email) => {\r\n return AXIOS.GET(`tenant-api/get-email-verification-code?userEmail=${email}`);\r\n}\r\n\r\nconst SendVerificationCodeForOwner = (mobileNumber) => {\r\n return AXIOS.GET(`tenant-api/get-messenger-phone-number-verification-code-owner?mobileNumber=%2B${mobileNumber}`);\r\n}\r\n\r\nconst CheckUserExist = (mobileNumber)=>{\r\n return AXIOS.GET(`tenant-api/search-tenancy?userMobile=${mobileNumber}`);\r\n}\r\n\r\nconst CheckUserExistByEmail = (email) => {\r\n return AXIOS.GET(`tenant-api/search-tenancy?userEmail=${email}`);\r\n}\r\n\r\nconst CheckOwnerExist = (mobileNumber) => {\r\n return AXIOS.GET(`tenant-api/search-owners?userMobile=${mobileNumber}`);\r\n}\r\n\r\nconst getChatbotSettings = (orgid)=>{\r\n return AXIOS.GET(`tenant-api/chatbot-settings?orgId=${orgid}`);\r\n}\r\n\r\nconst getQandAForTenant = (organizationId)=>{\r\n return AXIOS.GET(`tenant-api/q-and-a-by-organization?organizationId=${organizationId}`);\r\n}\r\n\r\nconst getPendingOwnerApprovalList = (userId) => {\r\n return AXIOS.GET(`tenant-api/chatbot/jobs?userId=${userId}`);\r\n}\r\n\r\nconst ownerApproveRejectJob = (userId, jobId, note, isApprove) => {\r\n return AXIOS.GET(`tenant-api/chat-bot/job-action-owner?userId=${userId}&jobId=${jobId}¬e=${note}&isApproved=${isApprove}`);\r\n}\r\n\r\nconst ownerAcceptJobQuote = (bidId, userId, jobId, note) => {\r\n return AXIOS.GET(`tenant-api/bid/approve-bid?bidId=${bidId}&userId=${userId}&jobId=${jobId}¬e=${note}`);\r\n}\r\n\r\nconst ownerDeclineAllJobQuotes = (userId, jobId, note) => {\r\n return AXIOS.GET(`tenant-api/bid/decline-all-quotes-by-owner?userId=${userId}&jobId=${jobId}¬e=${note}`);\r\n}\r\n\r\nconst getAssignedPm = (tenantId)=>{\r\n return AXIOS.GET(`tenant-api/pam/assigned-pm?tenantId=${tenantId}`);\r\n}\r\n\r\nconst postNewQandA = (tenantId,question)=>{\r\n return AXIOS.GET(`tenant-api/pam/tenant-post-new-qanda?tenantId=${tenantId}&question=${question}`);\r\n}\r\n\r\nconst getRentalDetails = (tenantId)=>{\r\n return AXIOS.GET(`tenant-api/pam/tenant-get-rental-details?tenantId=${tenantId}`);\r\n}\r\nconst getArrearsDetails = (tenantId)=>{\r\n return AXIOS.GET(`tenant-api/pam/tenant-get-arrears-details?tenantId=${tenantId}`);\r\n}\r\nconst getScheduleJobs = (filters)=>{\r\n return AXIOS.GET(`tenant-api/tenant-jobs?filters=${filters}`);\r\n}\r\nconst botService = {\r\n SendVerificationCode,\r\n SendVerificationCodeViaEmail,\r\n SendVerificationCodeForOwner,\r\n CheckUserExist,\r\n CheckUserExistByEmail,\r\n CheckOwnerExist,\r\n getChatbotSettings,\r\n getQandAForTenant,\r\n getPendingOwnerApprovalList,\r\n ownerApproveRejectJob,\r\n ownerAcceptJobQuote,\r\n ownerDeclineAllJobQuotes,\r\n getAssignedPm,\r\n postNewQandA,\r\n getRentalDetails,\r\n getArrearsDetails,\r\n getScheduleJobs\r\n}\r\n\r\nexport default botService;","import { AXIOS } from '../Utilities/HttpRequest/Axios';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\n\r\nexport const getUserSettings = () => {\r\n return AXIOS.GET(`tenant-api/user-settings?userId=${localStorage.getItem('userIdDecripted')}`);\r\n}\r\nexport const revokeDevice = (channelType) => {\r\n return AXIOS.GET(`tenant-api/settings/revoke-device?userId=${localStorage.getItem('userIdDecripted')}&channelType=${channelType}`);\r\n}\r\nexport const activateDevice = (channelType) => {\r\n return AXIOS.GET(`tenant-api/settings/activate-device?userId=${localStorage.getItem('userIdDecripted')}&channelType=${channelType}`);\r\n}\r\nexport const updateTwoFactorAuthentication = (model) => {\r\n return AXIOS.POST(`tenant-api/settings/update-two-factor-authentication`, model);\r\n}\r\nexport const updateCommunicationPreferences = (model) => {\r\n return AXIOS.POST(`tenant-api/settings/update-communication-preferences`, model);\r\n}\r\nexport const updateQuoteSettings = (model) => {\r\n return AXIOS.POST(`tenant-api/settings/update-quote-settings`, model);\r\n}\r\nexport const generateMobileValidationToken = (model) => {\r\n return AXIOS.POST(`tenant-api/settings/generate-phone-number-validation-token`, model);\r\n}\r\nexport const confirmMobileValidationToken = (model) => {\r\n return AXIOS.POST(`tenant-api/settings/confirm-phone-number-validation-token`, model);\r\n}\r\nexport const getOrganizationSettings = () => {\r\n return AXIOS.GET(`tenant-api/Organization-settings?userId=${localStorage.getItem('userIdDecripted')}`);\r\n}\r\n\r\nexport const getGeneralSettings = (userId) => {\r\n return AXIOS.GET(`tenant-api/General-settings?userId=${userId}`);\r\n}\r\n\r\nexport const getOrganizationSettingsByOrgId = (organizationId) => {\r\n return AXIOS.GET(`tenant-api/Organization-settings-for-property?organizationId=${organizationId}`);\r\n}\r\n\r\nexport const getOmniOrgThemeSettings = (userId) => {\r\n return AXIOS.GET(`tenant-api/Organization-omni-theme-settings?userId=${userId}`);\r\n}\r\n\r\nexport const getCardDetailsByUserId = (userId) => {\r\n return AXIOS.GET(`tenant-api/tenant-card-details?userId=${userId}`);\r\n}\r\n\r\nexport const addCardDetails = (model) => {\r\n return AXIOS.POST(`tenant-api/add-card-details`, model);\r\n}\r\nexport const deleteCardDetails = (model) => {\r\n return AXIOS.DELETE(`tenant-api/delete-card-details`, model);\r\n}\r\nexport const setDefaultCardDetails = (model) => {\r\n return AXIOS.PUT(`tenant-api/default-card-details`, model);\r\n}\r\nconst settingsService = {\r\n getUserSettings,\r\n revokeDevice,\r\n activateDevice,\r\n updateTwoFactorAuthentication,\r\n updateCommunicationPreferences,\r\n updateQuoteSettings,\r\n generateMobileValidationToken,\r\n confirmMobileValidationToken,\r\n getOrganizationSettings,\r\n getGeneralSettings,\r\n getOrganizationSettingsByOrgId,\r\n getOmniOrgThemeSettings,\r\n getCardDetailsByUserId,\r\n addCardDetails,\r\n deleteCardDetails,\r\n setDefaultCardDetails,\r\n \r\n}\r\n\r\nexport default settingsService;","import React, { useState } from \"react\";\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport ImageViewer from '../../Common/ImageViewer/ImageViewer';\r\n\r\n\r\nclass JobVariationDrawer extends React.Component {\r\n state = {\r\n showJobVariationDrawer: false\r\n };\r\n\r\n variationAmout = '';\r\n\r\n constructor(props) {\r\n super(props);\r\n this.description = React.createRef();\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n\r\n return (\r\n <>\r\n \r\n {drawer}\r\n \r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n const header = this.createJobVariationHeader();\r\n const body = this.createJobVariationBody();\r\n const footer = this.createJobVariationFooter();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n createJobVariationHeader = () => {\r\n return (\r\n <>\r\n

Job Variation

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createJobVariationBody = () => {\r\n if (this.props.jobDetails.jobVariations && this.props.jobDetails.jobVariations.length > 0) {\r\n this.variationAmout = this.props.jobDetails.jobVariations[0].amount;\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
Variation Amount{\" \"}
\r\n \r\n
\r\n
\r\n
\r\n
\r\n {(this.props.jobDetails.jobVariations && this.props.jobDetails.jobVariations.length > 0 && this.props.jobDetails.jobVariations[0].jobVariationAttachments) ?\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 createJobVariationFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n onClickJobVariationApprove = () => {\r\n if (this.description.current.value == '' || this.description.current.value == undefined || this.description.current.value == null) {\r\n toast.error(\"Please enter job approving note.\", { position: toast.POSITION.BOTTOM_RIGHT });\r\n }\r\n else {\r\n let jobVariationApproveRequest = {};\r\n jobVariationApproveRequest.userId = localStorage.getItem(\"userId\");\r\n jobVariationApproveRequest.jobId = this.props.jobDetails.id;\r\n jobVariationApproveRequest.note = this.description.current.value;\r\n\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/job-variation-approve-owner`, jobVariationApproveRequest).\r\n then(response => {\r\n if (response) {\r\n toast.success(\"Job Variation Approved.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.toggleJobVariationDrawer();\r\n this.props.toggleDrawer(true);\r\n } else {\r\n toast.error(\"Error occured. Please try again.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }));\r\n }\r\n };\r\n\r\n onClickJobVariationReject = () => {\r\n if (this.description.current.value == '' || this.description.current.value == undefined || this.description.current.value == null) {\r\n toast.error(\"Please enter job rejection note.\", { position: toast.POSITION.BOTTOM_RIGHT });\r\n }\r\n else {\r\n let jobVariationRejectRequest = {};\r\n jobVariationRejectRequest.userId = localStorage.getItem(\"userId\");\r\n jobVariationRejectRequest.jobId = this.props.jobDetails.id;\r\n jobVariationRejectRequest.note = this.description.current.value;\r\n\r\n trackPromise(\r\n AXIOS.POST(`tenant-api/job-variation-reject-owner`, jobVariationRejectRequest).\r\n then(response => {\r\n if (response) {\r\n toast.success(\"Job Variation Rejected.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.toggleJobVariationDrawer();\r\n this.props.toggleDrawer(true);\r\n } else {\r\n toast.error(\"Error occured. Please try again.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }));\r\n }\r\n };\r\n\r\n toggleJobVariationDrawer = () => {\r\n this.setState(state => ({\r\n showJobVariationDrawer: !this.state.showJobVariationDrawer\r\n }));\r\n };\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n isRefresh: state.MyJobs.isRefreshGrid\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n refreshGrid: isRefresh => {\r\n dispatch({ type: \"REFRESH_GRID\", isRefresh: isRefresh });\r\n }\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(JobVariationDrawer);\r\n","import { AXIOS } from '../Utilities/HttpRequest/Axios';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\n\r\nexport const getUserDetails = () => {\r\n return AXIOS.GET(`tenant-api/tenant-profile?userId=${localStorage.getItem('userId')}`);\r\n}\r\n\r\nexport const getExternalUserDetails = (userId) => {\r\n return AXIOS.GET(`tenant-api/external-tenant-profile?userId=${userId}`);\r\n}\r\n\r\nexport const saveTenantProfile = (formValues) => {\r\n return AXIOS.POST(\r\n `tenant-api/save-profile`, formValues, {\r\n 'headers': { 'ClientSecret': AppConfiguration.Setting().ClientSecret }\r\n });\r\n}\r\n\r\nexport const getChatUsersList = () => {\r\n return AXIOS.GET(`chat/global?userId=${localStorage.getItem('userId')}&pageNumber=1&pageSize=100`);\r\n}\r\n\r\nexport const getUserRoles = () => {\r\n return AXIOS.GET(`tenant-api/get-user-roles?userId=${localStorage.getItem('userId')}`);\r\n}\r\n\r\nexport const getProviderProfile = (filter) => {\r\n return AXIOS.GET(`tenant-api/profile?filters=${filter}`);\r\n}\r\n\r\nexport const GetProviderBidFeedbacks = (providerId) => {\r\n return AXIOS.GET(`tenant-api/get-provider-bid-feedback?userId=${providerId}&feedbackCount=0`);\r\n}\r\n\r\nconst getFeedbackListByBidId = (bidId) => {\r\n return AXIOS.GET(`tenant-api/bid/feedbackRatingList?bidId=${bidId}`);\r\n}\r\n\r\nconst GetActiveMasterDataFileVersion = (fileType) => {\r\n return AXIOS.GET(`tenant-api/get-active-masterdata-file-version?fileType=${fileType}`);\r\n}\r\n\r\nexport const getCommonOrganizationSettings = (orgId) => {\r\n return AXIOS.GET(`tenant-api/GetCommonOrganizationSettings?orgId=${orgId}`);\r\n}\r\n\r\nconst userService = {\r\n GetActiveMasterDataFileVersion,\r\n GetProviderBidFeedbacks,\r\n getProviderProfile,\r\n getUserDetails,\r\n getExternalUserDetails,\r\n saveTenantProfile,\r\n getChatUsersList,\r\n getUserRoles,\r\n getFeedbackListByBidId,\r\n getCommonOrganizationSettings\r\n\r\n}\r\n\r\nexport default userService;","import { AXIOS } from '../Utilities/HttpRequest/Axios';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\n\r\nconst GetPropertyByUserId = () => {\r\n return AXIOS.GET(`tenant-api/property/tenant-property?userId=${localStorage.getItem('userId')}`);\r\n}\r\n\r\nconst GetTenantPropertiesByUserId = () => {\r\n return AXIOS.GET(`tenant-api/property/tenant-properties?userId=${localStorage.getItem('userId')}&isTenant=${(localStorage.getItem(\"userType\") == 4)}`);\r\n}\r\n\r\nconst GetAssignedPropertyManagersForProperty = (propertyId) => {\r\n return AXIOS.GET(`tenant-api/property-managers-for-property?userId=${localStorage.getItem('userIdDecripted')}&propertyId=${propertyId}`);\r\n}\r\n\r\nconst GetDisclaimerByPropertyId = (propertyId) => {\r\n return AXIOS.GET(`tenant-api/property/job-post-disclaimer-by-propertyId?propertyId=${propertyId}`);\r\n}\r\n\r\n\r\nconst propertyService = {\r\n GetPropertyByUserId,\r\n GetTenantPropertiesByUserId,\r\n GetAssignedPropertyManagersForProperty,\r\n GetDisclaimerByPropertyId\r\n}\r\n\r\nexport default propertyService;","import React, { useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport ImageViewer from \"../../Common/ImageViewer/ImageViewer\";\r\n\r\n// Styles\r\n//import \"../OwnerApproval/JobApproveDrawer.scss\";\r\n\r\nclass JobNotes extends React.Component {\r\n\r\n state = {\r\n jobDetails: {},\r\n jobNotes: [],\r\n userId: \"\"\r\n };\r\n constructor(props) {\r\n super(props);\r\n\r\n this.getJobNotesByJobId = this.getJobNotesByJobId.bind(this);\r\n }\r\n\r\n\r\n componentDidMount() {\r\n this.setState({ jobDetails: this.props.jobDetails, userId: this.props.userId });\r\n this.getJobNotesByJobId();\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <>\r\n {this.createJobNotesBody()}\r\n \r\n );\r\n }\r\n\r\n createJobNotesBody = () => {\r\n const jobNotes = this.state.jobNotes;\r\n return (\r\n
\r\n
\r\n {(jobNotes.length !== 0 &&\r\n jobNotes.map((note, index) => {\r\n return (\r\n \r\n
\r\n
\r\n
\r\n
\r\n

{note.createdUserName}

\r\n

Posted on {note.createdOn}

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

{note.createdUserType}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n { note && note.attachments && note.attachments.length > 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 })) ||\r\n (jobNotes.length === 0 &&

Notes not available

)}\r\n
\r\n
\r\n );\r\n };\r\n\r\n getJobNotesByJobId = () => {\r\n\r\n const userId = (this.props.userId && this.props.userId != null) ? this.props.userId : localStorage.getItem(\"exernalUserId\");\r\n const jobId = this.props.jobDetails.id;\r\n\r\n if (jobId) {\r\n try {\r\n AXIOS.GET(\r\n `tenant-api/job-notes?jobId=${jobId}&userId=${userId}`\r\n ).then(data => {\r\n this.setState({\r\n jobNotes: data\r\n });\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n };\r\n}\r\nconst SeparateLine = ({ color }) => (\r\n \r\n);\r\n\r\nexport default connect(\r\n)(JobNotes);\r\n","\r\nimport React from \"react\";\r\nimport Drawer from \"../../../Components/Common/Drawer/Drawer\";\r\n\r\nexport default class ConfirmationDrawer extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.note = React.createRef();\r\n }\r\n state = {\r\n showDrawer: false,\r\n approve:'Yes',\r\n reject:'No'\r\n };\r\n\r\n componentDidMount() {\r\n const approve = this.props.approveButtonName ? this.props.approveButtonName : this.state.approve;\r\n const reject = this.props.rejectButtonName ? this.props.rejectButtonName : this.state.reject;\r\n this.setState({ showDrawer: this.props.showDrawer,approve:approve, reject:reject});\r\n }\r\n\r\n render() {\r\n\r\n let drawer = this.createDrawer();\r\n return
{drawer}
;\r\n\r\n }\r\n\r\n toggleDrawer = isClose => {\r\n this.setState(state => ({\r\n showDrawer: !this.state.showDrawer\r\n }));\r\n if (isClose) {\r\n this.props.onClose(false);\r\n }\r\n\r\n };\r\n\r\n createDrawer = () => {\r\n const header = this.createProfileHeader();\r\n const body = this.createProfileBody();\r\n const footer = this.createFooter();\r\n return (\r\n \r\n );\r\n };\r\n\r\n\r\n createProfileHeader = () => {\r\n return (\r\n <>\r\n

\r\n Confirmation\r\n

\r\n
\r\n this.toggleDrawer(true)}\r\n >\r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createProfileBody = () => {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n {this.props.message}\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n );\r\n };\r\n\r\n\r\n createFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n
\r\n \r\n )\r\n }\r\n\r\n\r\n onAccept = () => {\r\n this.setState(state => ({\r\n showDrawer: false\r\n }));\r\n this.props.onClose(false);\r\n this.props.onConfirm(true);\r\n }\r\n\r\n onReject = () => {\r\n this.setState(state => ({\r\n showDrawer: false\r\n }));\r\n this.props.onClose(false);\r\n this.props.onConfirm(false);\r\n }\r\n\r\n }\r\n\r\n\r\n","import React from \"react\";\r\nimport Drawer from \"../../../Components/Common/Drawer/Drawer\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport { toast } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport bidService from \"../../../Services/BidService\";\r\nimport ConfirmationDrawer from \"../../Drawers/ConfirmationDrawer/ConfirmationDrawer\";\r\n\r\nvar model = {\r\n \"bidAcceptedOrRejectedUserId\": '',\r\n \"userId\": '',\r\n \"note\": '',\r\n \"bidId\": '',\r\n}\r\n\r\nexport default class QuoteAcceptRejectDrawer extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.note = React.createRef();\r\n }\r\n state = {\r\n showDrawer: false,\r\n quoteNote: '',\r\n isLoading:false,\r\n showConfirmationDrawer:false,\r\n message:''\r\n };\r\n\r\n componentDidMount() {\r\n this.setState({ showDrawer: this.props.showDrawer });\r\n //isAcceptQuote, bid\r\n }\r\n\r\n render() {\r\n\r\n let drawer = this.createDrawer();\r\n return
{drawer}
;\r\n\r\n }\r\n\r\n toggleDrawer = isClose => {\r\n this.setState(state => ({\r\n showDrawer: !this.state.showDrawer\r\n }));\r\n\r\n if (isClose) {\r\n this.props.onCloseDrawer(false);\r\n }\r\n\r\n };\r\n\r\n createDrawer = () => {\r\n const header = this.createProfileHeader();\r\n const body = this.createProfileBody();\r\n const footer = this.createFooter();\r\n return (\r\n <>\r\n \r\n {this.state.showConfirmationDrawer?\r\n this.onConfirmation(status)}\r\n onClose={()=>this.onCloseConfirmationDrawer()}>:\"\"}\r\n \r\n );\r\n };\r\n\r\n showConfirmationDrawer=()=>{\r\n var amount = this.props.amount?this.props.amount.toFixed(2):0.00;\r\n var msg = \"A temporary fund of $\"+amount+\" will be held from your nominated credit card and it will be released once the job is marked as completed.\";\r\n this.setState({showConfirmationDrawer:true,\r\n message:msg});\r\n }\r\n\r\n onConfirmation=(status)=>{\r\n if(status){\r\n this.setState({showConfirmationDrawer:false});\r\n this.onAccept();\r\n }\r\n }\r\n\r\n onCloseConfirmationDrawer =()=>{\r\n this.setState({showConfirmationDrawer:false});\r\n }\r\n createProfileHeader = () => {\r\n return (\r\n <>\r\n

\r\n Quote\r\n {(this.state.isLoading) ? : ''}\r\n

\r\n
\r\n this.toggleDrawer(true)}\r\n >\r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createProfileBody = () => {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n
\r\n Quote amount : ${this.props.amount?this.props.amount.toFixed(2):0.00}\r\n
\r\n
\r\n Note \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 createFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n {this.props.isAcceptQuote ? :\r\n }\r\n\r\n
\r\n \r\n )\r\n }\r\n\r\n handleOnChangeNote = () => {\r\n const note = this.note.current.value;\r\n this.setState({\r\n quoteNote: note\r\n });\r\n }\r\n\r\n onAccept = () => {\r\n\r\n\r\n\r\n this.setState({\r\n isLoading:true\r\n })\r\n\r\n model.bidId = this.props.bidId;\r\n model.bidAcceptedOrRejectedUserId = localStorage.getItem(\"userId\");\r\n model.userId = localStorage.getItem(\"userId\");\r\n model.note = this.state.quoteNote;\r\n\r\n bidService.acceptTenantMangeQuote(model).then(\r\n (res) => {\r\n if(res.status==13){\r\n toast.error(res.message, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.setState(state => ({\r\n isLoading:false\r\n }));\r\n\r\n }else{\r\n toast.success(\"Quote accepted successfully\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n \r\n this.setState(state => ({\r\n isLoading:false,\r\n showDrawer: false\r\n }));\r\n this.props.onCloseDrawer(true);\r\n }\r\n\r\n }, error => {\r\n this.setState(state => ({\r\n isLoading:false\r\n }));\r\n toast.error(\"Quote accept unsuccessful\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n )\r\n }\r\n\r\n onReject = () => {\r\n \r\n model.bidId = this.props.bidId;\r\n model.bidAcceptedOrRejectedUserId = localStorage.getItem(\"userId\");\r\n model.userId = localStorage.getItem(\"userId\");\r\n model.note = this.state.quoteNote;\r\n if (!model.note || model.note == \"\") {\r\n toast.error(\"Reject note required\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n } else {\r\n this.setState({\r\n isLoading:true\r\n })\r\n bidService.rejectTenantMangeQuote(model).then(\r\n (res) => {\r\n toast.success(\"Quote rejected successfully\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.setState(state => ({\r\n isLoading:false,\r\n showDrawer: false\r\n }));\r\n this.props.onCloseDrawer(true);\r\n }, error => {\r\n this.setState(state => ({\r\n isLoading:false\r\n }));\r\n toast.error(\"Quote reject unsuccessful\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n )\r\n }\r\n\r\n }\r\n\r\n}\r\n","import React, { useState } from \"react\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport bidService from \"../../../Services/BidService\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\n\r\nclass DeclineQuotesDrawer extends React.Component {\r\n state = {\r\n showDeclineAllQuotesDrawer: false,\r\n disableDeclineButton:false\r\n };\r\n constructor(props) {\r\n super(props);\r\n this.description = React.createRef();\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n\r\n return (\r\n
\r\n
\r\n

If you want more information or have any questions, please reply to the email that you received which will go directly to your property manager.

\r\n
\r\n
\r\n \r\n
\r\n {drawer}\r\n
\r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n const header = this.createDeclineAllQuotesHeader();\r\n const body = this.createDeclineAllQuotesBody();\r\n const footer = this.createDeclineAllQuotesFooter();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n createDeclineAllQuotesHeader = () => {\r\n return (\r\n <>\r\n

Decline Quotes

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createDeclineAllQuotesBody = () => {\r\n return (\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 createDeclineAllQuotesFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n onDeclineAllQuotes = () => {\r\n if (this.description.current.value == '' || this.description.current.value == undefined || this.description.current.value == null) {\r\n toast.error(\"Please enter quotes decline reason.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n this.setState({disableDeclineButton:true})\r\n \r\n bidService.declineAllBidsByOwner(this.props.jobDetails.id, this.description.current.value).then(res => {\r\n if(res){\r\n toast.success('All bids decline by owner', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.toggleDeclineAllQuotesDrawer();\r\n this.props.toggleDrawer(true);\r\n }\r\n else{\r\n debugger;\r\n toast.error('Job status has been changed. Please contact the property manager for more details', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.setState({disableDeclineButton:false})\r\n }\r\n });\r\n }\r\n\r\n toggleDeclineAllQuotesDrawer = () => {\r\n this.setState(state => ({\r\n showDeclineAllQuotesDrawer: !this.state.showDeclineAllQuotesDrawer\r\n }));\r\n };\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n isRefresh: state.MyJobs.isRefreshGrid\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n refreshGrid: isRefresh => {\r\n dispatch({ type: \"REFRESH_GRID\", isRefresh: isRefresh });\r\n }\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(DeclineQuotesDrawer);\r\n","import React, { useState } from \"react\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport bidService from \"../../../Services/BidService\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\n\r\nclass QuoteAcceptDrawer extends React.Component {\r\n state = {\r\n showAcceptQuoteDrawer: false,\r\n disableAcceptButton:false\r\n };\r\n constructor(props) {\r\n super(props);\r\n this.description = React.createRef();\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n\r\n return (\r\n <>\r\n \r\n {drawer}\r\n \r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n const header = this.createAcceptQuoteHeader();\r\n const body = this.createAcceptQuoteBody();\r\n const footer = this.createAcceptQuoteFooter();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n createAcceptQuoteHeader = () => {\r\n return (\r\n <>\r\n

Accept Quote

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createAcceptQuoteBody = () => {\r\n return (\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 createAcceptQuoteFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n onClickApproveBid = () => {\r\n if (this.description.current.value == '' || this.description.current.value == undefined || this.description.current.value == null) {\r\n toast.error(\"Please enter quote accept reason.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n this.setState({disableAcceptButton:true})\r\n\r\n bidService.approveBidByOwner(this.props.jobDetails.id, this.props.bidDetails.bidId, this.description.current.value).then(res => {\r\n if(res){\r\n toast.success('Bid accepted by owner', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.toggleAcceptQuoteDrawer();\r\n this.props.toggleDrawer(true);\r\n }\r\n else{\r\n debugger;\r\n toast.error('Job status has been changed. Please contact the property manager for more details', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.setState({disableAcceptButton:false})\r\n } \r\n })\r\n };\r\n\r\n toggleAcceptQuoteDrawer = () => {\r\n this.setState(state => ({\r\n showAcceptQuoteDrawer: !this.state.showAcceptQuoteDrawer\r\n }));\r\n };\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n isRefresh: state.MyJobs.isRefreshGrid\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n refreshGrid: isRefresh => {\r\n dispatch({ type: \"REFRESH_GRID\", isRefresh: isRefresh });\r\n }\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(QuoteAcceptDrawer);\r\n","import React, { useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport bidService from \"../../../Services/BidService\";\r\nimport Moment from \"react-moment\";\r\nimport ImageViewer from \"../../Common/ImageViewer/ImageViewer\";\r\nimport { toast } from 'react-toastify';\r\nimport \"./quotesDetail.scss\";\r\nimport StarRatingComponent from \"react-star-rating-component\";\r\nimport ProviderMiniProfileDrawer from '../../Drawers/JobPostDrawer/ProviderProfileDrawer/ProviderMiniProfileDrawer';\r\nimport QuoteAcceptRejectDrawer from \"./QuoteAcceptRejectDrawer\";\r\nimport DeclineQuotesDrawer from \"../../Drawers/DeclineAllQuotesDrawer/DeclineAllQuotesDrawer\";\r\nimport QuoteAcceptDrawer from \"../../Drawers/QuoteAcceptDrawer/QuoteAcceptDrawer\";\r\nimport Loader from \"react-loader-spinner\";\r\n// Styles\r\n//import \"../OwnerApproval/JobApproveDrawer.scss\";\r\n\r\nclass QuotesDetails extends React.Component {\r\n\r\n state = {\r\n jobDetails: {},\r\n quotes: [],\r\n userId: \"\",\r\n isTenantManageJob:false,\r\n isShowProviderDrawer:false,\r\n providerViewId:'',\r\n showAcceptRejectDrawer:false,\r\n isAcceptQuote:false,\r\n selectedbidId:'',\r\n selectedbidAmount:0,\r\n isLoading:false,\r\n propertyId:'',\r\n ownerApprovalCount:0\r\n };\r\n constructor(props) {\r\n super(props);\r\n\r\n this.getQuoteAmount = this.getQuoteAmount.bind(this);\r\n this.getQoutesByJobId = this.getQoutesByJobId.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({ jobDetails: this.props.jobDetails,\r\n userId: this.props.userId,\r\n isTenantManageJob : (this.props.jobDetails && this.props.jobDetails.isTenantManageJob)?true:false});\r\n this.getQoutesByJobId();\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <>\r\n {(this.state.isLoading) ? : ''}\r\n {this.createJobQuoteBody()}\r\n {(this.state.isShowProviderDrawer) ?\r\n \r\n : ''}\r\n {(this.state.showAcceptRejectDrawer) ?\r\n this.onCloseDrawer(event)}>\r\n : ''}\r\n \r\n );\r\n }\r\n\r\n createJobQuoteBody = () => {\r\n const { jobDetails } = this.props;\r\n return (\r\n (!this.state.isTenantManageJob)?\r\n
\r\n Quote Limit : {(jobDetails && jobDetails.quoteLimit != null) ? jobDetails.quoteLimit : \"0\"}\r\n {(this.props.jobDetails.workflowStatusId == 6) ?
Note: Please select the best quote for the job, if not decline all to request better quotes.
: ''}\r\n {this.getQuotesList()}\r\n {(!this.state.quotes || this.state.quotes == null) ? Quotes not available : \"\"}\r\n {\r\n this.bidDeclineButton()\r\n }\r\n
\r\n :\r\n
\r\n {this.getQuotesListForTenantManageJobs()} \r\n
\r\n );\r\n };\r\n\r\n bidDeclineButton=()=>{ \r\n let isReplyed = this.state.quotes.filter(a => a.quoteApprovalStatusId === 1 || a.quoteApprovalStatusId === 2).length > 0\r\n if (isReplyed || this.state.quotes.filter(a => a.jobStatus === 107 || a.jobStatus === 7).length > 0 || (this.props.jobDetails.workflowStatusId != 6 && this.state.ownerApprovalCount != 0)){\r\n return '';\r\n } else if(this.state.quotes.length > 0 && this.props.jobDetails.propertyId !== null && !this.state.jobDetails.isOwnerApprovalPendingForVariation) {\r\n return <>\r\n this.onCloseDrawer(event)}\r\n jobDetails={this.props.jobDetails}\r\n >\r\n \r\n }else{\r\n return '';\r\n }\r\n }\r\n\r\n onDeclineAllQuotes = () => {\r\n bidService.declineAllBidsByOwner(this.props.jobDetails.id, \"\").then(res => {\r\n toast.success('All bids decline by owner', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.reload();\r\n });\r\n }\r\n\r\n getQuotesList = () => {\r\n const quotes = this.state.quotes.map((bid, index) => {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n
\r\n

{bid.name}

\r\n

email: {bid.email}

\r\n

tel: {bid.phone}

\r\n
\r\n
\r\n
\r\n {this.getQuoteAmount(bid)}\r\n
\r\n
\r\n\r\n
\r\n
\r\n {this.getSPNotes(bid.notes)}\r\n
\r\n
\r\n
\r\n {(bid.availabilityStart && bid.availabilityEnd) ?\r\n
\r\n
Schedule
\r\n
{bid.availabilityStart} to {bid.availabilityEnd}
\r\n
\r\n : ''}\r\n
\r\n
\r\n {(bid.estimatedTimeDisplay) ?\r\n
\r\n
Estimated Time
\r\n
{bid.estimatedTimeDisplay}
\r\n
\r\n : ''}\r\n
\r\n
\r\n {(!this.isApprovedOrDeclined() && this.props.jobDetails.propertyId != null \r\n && this.props.jobDetails.workflowStatusId!==107 && this.props.jobDetails.workflowStatusId!==7 \r\n && !this.state.jobDetails.isOwnerApprovalPendingForVariation && (this.props.jobDetails.workflowStatusId == 6 || this.state.ownerApprovalCount == 0)) ? <>\r\n
\r\n this.onCloseDrawer(event)}\r\n jobDetails={this.props.jobDetails}\r\n bidDetails={bid}\r\n >\r\n
\r\n : ''}\r\n
\r\n\r\n
\r\n {(bid.hasOwnProperty(\"attachments\")) ?\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 return quotes;\r\n };\r\n\r\n\r\n getQuotesListForTenantManageJobs =()=>{\r\n const quotes = this.state.quotes.filter(m=>m.status!==103).map((bid, index) => {\r\n return (\r\n <>\r\n
\r\n
\r\n
this.providerProfileView(bid.providerProfile.userId)} style={{ padding: '10px' }}>\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 {(bid.amount && bid.amount > 0) ?\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n :\"\"}\r\n {(bid.callOutFee>0 ||bid.hourlyRate>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 \r\n
\r\n\r\n\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {(bid.hasOwnProperty(\"attachments\")) ?\r\n : ''\r\n }\r\n
\r\n
\r\n \r\n\r\n {bid.status === 101?
\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 return quotes;\r\n }\r\n\r\n approveQuote =(id,amount)=>{\r\n this.setState({showAcceptRejectDrawer:true,selectedbidId:id,selectedbidAmount:amount,isAcceptQuote:true});\r\n }\r\n\r\n rejectQuote =(id,amount) =>{\r\n this.setState({showAcceptRejectDrawer:true,selectedbidId:id,selectedbidAmount:amount,isAcceptQuote:false});\r\n }\r\n\r\n\r\n timeConvert=(n)=> {\r\n if(n){\r\n var num = n;\r\n var hours = (num / 60);\r\n var rhours = Math.floor(hours);\r\n var minutes = (hours - rhours) * 60;\r\n var rminutes = Math.round(minutes);\r\n return rhours + \" h \" + rminutes + \" m\";\r\n }else{\r\n return \"N/A\";\r\n }\r\n }\r\n\r\n getQuoteAmount(bid) {\r\n if (bid.placeBidType) {\r\n if (bid.placeBidType === 1 || bid.placeBidType === 3) {\r\n return (\r\n
\r\n
Quoted Amount
\r\n
${(bid.priceRevised > 0) ? bid.priceRevised.toFixed(2) : bid.amount.toFixed(2)}
\r\n
\r\n );\r\n } else if (bid.placeBidType === 2) {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
${bid.amount.toFixed(2)}
${bid.amountMax.toFixed(2)}
\r\n
\r\n
\r\n );\r\n } else if (bid.placeBidType === 4) {\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
${bid.callOutFee.toFixed(2)}
${bid.hourlyRate.toFixed(2)}
\r\n
\r\n
\r\n );\r\n }\r\n }\r\n }\r\n\r\n getQoutesByJobId = () => {\r\n const { userId, jobDetails } = this.props;\r\n var id = (userId != null) ? userId : localStorage.getItem(\"exernalUserId\");\r\n if (jobDetails) {\r\n try {\r\n this.setState({isLoading:true});\r\n bidService.getQoutesByJobId(jobDetails.id, id)\r\n .then(data => {\r\n this.setState({\r\n quotes: data.bidsList,\r\n propertyId:data.propertyId,\r\n isLoading:false,\r\n ownerApprovalCount : data.ownerApprovalCount\r\n });\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n };\r\n\r\n\r\n getSPNotes = notes => {\r\n if (notes != null && notes.trim() != \"\") {\r\n return
Note: {notes}
;\r\n }\r\n };\r\n\r\n getInvoiceAttachments = (bid) => {\r\n if (bid.job != null && bid.job.attachments != null) {\r\n let invoiceAttachments = bid.job.attachments.filter(a => a.type == 6 && a.userId == bid.providerId)\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n }\r\n\r\n isApprovedOrDeclined = () => {\r\n return this.state.quotes.filter(a => a.quoteApprovalStatusId == 1 || a.quoteApprovalStatusId == 2).length > 0\r\n };\r\n\r\n onClickApproveBid = (bid) => {\r\n \r\n bidService.approveBidByOwner(this.props.jobDetails.id, bid.bidId, \"\").then(res => {\r\n toast.success('Bid accepted by owner', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.props.reload();\r\n })\r\n };\r\n\r\n\r\n providerProfileView =(id)=> {\r\n this.setState({providerViewId: id,isShowProviderDrawer:true});\r\n }\r\n onCloseProviderDrawer = ()=>{\r\n this.setState({isShowProviderDrawer: false});\r\n }\r\n\r\n \r\n\r\n onCloseDrawer = (event)=>{\r\n \r\n if(event){\r\n this.getQoutesByJobId();\r\n this.props.reload();\r\n }\r\n this.setState({showAcceptRejectDrawer: false});\r\n }\r\n}\r\n\r\n\r\n\r\nexport default connect(\r\n)(QuotesDetails);\r\n","export const WEEKDAYS = [\r\n { fullName: \"Sunday\", shortName: \"sun\", initial: \"S\" },\r\n { fullName: \"Monday\", shortName: \"mon\", initial: \"M\" },\r\n { fullName: \"Tuesday\", shortName: \"tue\", initial: \"T\" },\r\n { fullName: \"Wednesday\", shortName: \"wed\", initial: \"W\" },\r\n { fullName: \"Thursday\", shortName: \"thu\", initial: \"T\" },\r\n { fullName: \"Friday\", shortName: \"fri\", initial: \"F\" },\r\n { fullName: \"Saturday\", shortName: \"sat\", initial: \"S\" },\r\n];\r\n\r\nexport const MONTHS = [\r\n {fullName: 'January', shortName: 'Jan', key: 0 },\r\n {fullName: 'February', shortName: 'Feb', key: 1 },\r\n {fullName: 'March', shortName: 'Mar', key: 2 },\r\n {fullName: 'April', shortName: 'Apr', key: 3 },\r\n {fullName: 'May', shortName: 'May', key: 4 },\r\n {fullName: 'June', shortName: 'Jun', key: 5 },\r\n {fullName: 'July', shortName: 'Jul', key: 6 },\r\n {fullName: 'August', shortName: 'Aug', key: 7 },\r\n {fullName: 'September', shortName: 'Sep', key: 8 },\r\n {fullName: 'October', shortName: 'Oct', key: 9 },\r\n {fullName: 'November', shortName: 'Nov', key: 10 },\r\n {fullName: 'December', shortName: 'Dec', key: 11 }\r\n];\r\n\r\n// export const TIME_SLOTS = [\r\n// { start: \"0000\", end: \"0200\" },\r\n// { start: \"0200\", end: \"0400\" },\r\n// { start: \"0400\", end: \"0600\" },\r\n// { start: \"0600\", end: \"0800\" },\r\n// { start: \"0800\", end: \"1000\" },\r\n// { start: \"1000\", end: \"1200\" },\r\n// { start: \"1200\", end: \"1400\" },\r\n// { start: \"1400\", end: \"1600\" },\r\n// { start: \"1600\", end: \"1800\" },\r\n// { start: \"1800\", end: \"2000\" },\r\n// { start: \"2000\", end: \"2200\" },\r\n// { start: \"2200\", end: \"2400\" }\r\n// ];\r\n\r\nconst WORK_DAY = [\r\n { start: \"0800\", end: \"1000\" },\r\n { start: \"1000\", end: \"1200\" },\r\n { start: \"1200\", end: \"1400\" },\r\n { start: \"1400\", end: \"1600\" },\r\n { start: \"1600\", end: \"1800\" }\r\n];\r\n\r\nfunction getWorkDaySlots(day) {\r\n return WORK_DAY.map(slot => ({ ...slot, day }));\r\n}\r\n\r\nexport const WORK_WEEK = [\"mon\", \"tue\", \"wed\", \"thu\", \"fri\"].map(getWorkDaySlots).flat();\r\n\r\nexport const TIME_SLOTS = [\r\n { displayText: '12 AM', time: 24 , hours: 0, minutes: 0},\r\n { displayText: '', time: 2430, hours: 0, minutes: 30 },\r\n { displayText: '1 AM', time: 10 , hours: 1, minutes: 0},\r\n { displayText: '', time: 130, hours: 1, minutes: 30 },\r\n { displayText: '2 AM', time: 20 , hours: 2, minutes: 0},\r\n { displayText: '', time: 230, hours: 2, minutes: 30 },\r\n { displayText: '3 AM', time: 30 , hours: 3, minutes: 0},\r\n { displayText: '', time: 330, hours: 3, minutes: 30 },\r\n { displayText: '4 AM', time: 40 , hours: 4, minutes: 0},\r\n { displayText: '', time: 430, hours: 4, minutes: 30 },\r\n { displayText: '5 AM', time: 50 , hours: 5, minutes: 0},\r\n { displayText: '', time: 530, hours: 5, minutes: 30 },\r\n { displayText: '6 AM', time: 60 , hours: 6, minutes: 0},\r\n { displayText: '', time: 630, hours: 6, minutes: 30 },\r\n { displayText: '7 AM', time: 70 , hours: 7, minutes: 0},\r\n { displayText: '', time: 730, hours: 7, minutes: 30 },\r\n { displayText: '8 AM', time: 80 , hours: 8, minutes: 0},\r\n { displayText: '', time: 830, hours: 8, minutes: 30 },\r\n { displayText: '9 AM', time: 90, hours: 9, minutes: 0 },\r\n { displayText: '', time: 930, hours: 9, minutes: 30 },\r\n { displayText: '10 AM', time: 100, hours: 10, minutes: 0 },\r\n { displayText: '', time: 1030, hours: 10, minutes: 30 },\r\n { displayText: '11 AM', time: 110, hours: 11, minutes: 0 },\r\n { displayText: '', time: 1130, hours: 11, minutes: 30 },\r\n { displayText: '12 AM', time: 120, hours: 12, minutes: 0 },\r\n { displayText: '', time: 1230, hours: 12, minutes: 30 },\r\n { displayText: '1 PM', time: 1300, hours: 13, minutes: 0 },\r\n { displayText: '', time: 1330, hours: 13, minutes: 30 },\r\n { displayText: '2 PM', time: 140, hours: 14, minutes: 0 },\r\n { displayText: '', time: 1430, hours: 14, minutes: 30 },\r\n { displayText: '3 PM', time: 150, hours: 15, minutes: 0 },\r\n { displayText: '', time: 1530, hours: 15, minutes: 30 },\r\n { displayText: '4 PM', time: 160, hours: 16, minutes: 0 },\r\n { displayText: '', time: 1630, hours: 16, minutes: 30 },\r\n { displayText: '5 PM', time: 170, hours: 17, minutes: 0 },\r\n { displayText: '', time: 1730, hours: 17, minutes: 30 },\r\n { displayText: '6 PM', time: 180, hours: 18, minutes: 0 },\r\n { displayText: '', time: 1830, hours: 18, minutes: 30 },\r\n { displayText: '7 PM', time: 190, hours: 19, minutes: 0 },\r\n { displayText: '', time: 1930, hours: 19, minutes: 30 },\r\n { displayText: '8 PM', time: 200, hours: 20, minutes: 0 },\r\n { displayText: '', time: 2030, hours: 20, minutes: 30 },\r\n { displayText: '9 PM', time: 210, hours: 21, minutes: 0 },\r\n { displayText: '', time: 2130, hours: 21, minutes: 30 },\r\n { displayText: '10 PM', time: 220, hours: 22, minutes: 0 },\r\n { displayText: '', time: 2230, hours: 22, minutes: 30 },\r\n { displayText: '11 PM', time: 2300, hours: 23, minutes: 0 },\r\n { displayText: '', time: 2330, hours: 23, minutes: 30 }\r\n]","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { WEEKDAYS, TIME_SLOTS, MONTHS } from \"./Time\";\r\nimport moment from 'moment';\r\nimport { DatetimePickerTrigger, DatetimePicker, DatetimeRangePickerTrigger } from 'rc-datetime-picker';\r\nimport TimePicker from 'rc-time-picker';\r\nimport { toast } from 'react-toastify';\r\nimport 'rc-time-picker/assets/index.css';\r\nimport './EventScheduler.scss'\r\n\r\nclass EventScheduler extends React.Component {\r\n\r\n state = {\r\n workDays: [],\r\n suggestedTimeSlots: [],\r\n bidDetails: {},\r\n totalJobTimeHoursPortion: 0,\r\n totalJobTimeMinutesPortion: 0,\r\n estimatedJobTimeHoursPortion: 0,\r\n estimatedJobTimeMinutesPortion: 0,\r\n travelTimeHoursPortion: 0,\r\n travelTimeMinutesPortion: 0\r\n };\r\n\r\n componentDidMount() {\r\n this.fillTimeSlots();\r\n this.convertJobTimesToHoursAndMinutes();\r\n this.props.onRef(this);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.onRef(undefined);\r\n }\r\n\r\n\r\n fillTimeSlots = () => {\r\n this.onPrepareGrid(this.props.fromDate, this.props.toDate);\r\n setTimeout(() => {\r\n this.fillAvailableTimeSlots();\r\n this.fillWorkingTimeSlots();\r\n this.fillSuggestedTimeSlots();\r\n this.fillNotAvailableTimeSlots();\r\n }, 500);\r\n }\r\n\r\n onPrepareGrid(fromDate, toDate) {\r\n let days = [];\r\n let endDate = new Date(toDate);\r\n let newToDate = new Date(endDate.setDate(endDate.getDate() + 1))\r\n let count = this.daysCountBetween(fromDate, newToDate)\r\n for (let index = 0; index < count; index++) {\r\n let fromDateObj = fromDate;\r\n let tomorrow = new Date(fromDateObj);\r\n tomorrow.setDate(tomorrow.getDate() + index);\r\n let dateObj = new Date(tomorrow);\r\n days.push({\r\n localDateString: dateObj.toLocaleDateString(),\r\n date: dateObj,\r\n day: WEEKDAYS[dateObj.getDay()].fullName,\r\n availableSlots: [],\r\n sugesstedSlots: [],\r\n notAvilableSlots: [],\r\n workingSlots: []\r\n })\r\n }\r\n this.setState({\r\n workDays: days\r\n });\r\n }\r\n\r\n fillAvailableTimeSlots = (workDays) => {\r\n this.props.availableTimeSlots.forEach(element => {\r\n let daysCount = this.daysCountBetween(element.from, element.to)\r\n if (daysCount == 0) {\r\n let dateObj = this.state.workDays.find(a => a.localDateString == element.from.toLocaleDateString())\r\n let fromHoursCount = element.from.getHours();\r\n let fromMinsCount = element.from.getMinutes();\r\n let toHoursCount = (element.to.getHours() == 0) ? 24 : element.to.getHours();\r\n let toMinsCount = element.to.getMinutes();\r\n let hours = [];\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n hours.push((index).toString() + 30);\r\n }\r\n } else {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n } else {\r\n hours.push((index).toString() + 30);\r\n }\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (mins == 30) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30')\r\n }\r\n }\r\n dateObj.availableSlots = dateObj.availableSlots.concat(hours);\r\n } else {\r\n for (let i = 0; i <= daysCount; i++) {\r\n let from = new Date(element.from);\r\n let tomorrow = from;\r\n tomorrow.setDate(tomorrow.getDate() + i);\r\n let fromObj = new Date(tomorrow);\r\n let fromHoursCount = element.from.getHours();\r\n let fromMinsCount = element.from.getMinutes();\r\n let toHoursCount = (element.to.getHours() == 0) ? 24 : element.to.getHours();\r\n let toMinsCount = element.to.getMinutes();\r\n let dateObj = this.state.workDays.find(a => a.localDateString == fromObj.toLocaleDateString());\r\n let hours = []\r\n if (daysCount == i) {\r\n fromHoursCount = 8;\r\n } else if (i > 0 && i != daysCount) {\r\n fromHoursCount = 8;\r\n toHoursCount = 17;\r\n } else {\r\n toHoursCount = 17;\r\n }\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n hours.push((index).toString() + 30);\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n }\r\n } else {\r\n //if(mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n //} else {\r\n // if(index == 23 || index == 13) {\r\n // hours.push((index).toString() + '00');\r\n // } else {\r\n // hours.push((index).toString() + 0);\r\n // }\r\n // hours.push((index).toString() + 30);\r\n //}\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (mins == 30 || toHoursCount == 17) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30')\r\n }\r\n }\r\n dateObj.availableSlots = dateObj.availableSlots.concat(hours);\r\n }\r\n }\r\n })\r\n }\r\n\r\n updateAvailableTimeSlots = () => {\r\n let workDays = this.state.workDays;\r\n if (this.props.availableTimeSlots.length > 0) {\r\n this.props.availableTimeSlots.forEach(element => {\r\n let startTime = element.from;\r\n let endTime = element.to;\r\n let daysCount = this.daysCountBetween(startTime, endTime)\r\n var arrayIndex = workDays.findIndex(a => a.localDateString == startTime.toLocaleDateString())\r\n if (daysCount == 0 && arrayIndex >= 0) {\r\n let dateObj = workDays[arrayIndex];\r\n let fromHoursCount = element.from.getHours();\r\n let fromMinsCount = element.from.getMinutes();\r\n let toHoursCount = (element.to.getHours() == 0) ? 24 : element.to.getHours();\r\n let toMinsCount = element.to.getMinutes();\r\n let hours = []\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n let hoursIndex = index == 0 ? 24 : index;\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n hours.push((hoursIndex).toString() + 30);\r\n }\r\n } else {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((hoursIndex).toString() + 30);\r\n } else {\r\n hours.push((hoursIndex).toString() + 30);\r\n }\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(hoursIndex.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (mins == 30) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(hoursIndex.toString() + '30')\r\n }\r\n }\r\n dateObj.availableSlots = dateObj.availableSlots.concat(hours);\r\n workDays[arrayIndex] = dateObj;\r\n this.setState({ workDays: workDays });\r\n } else if(arrayIndex >= 0) {\r\n for (let i = 0; i <= daysCount; i++) {\r\n let from = new Date(element.from);\r\n let tomorrow = from;\r\n tomorrow.setDate(tomorrow.getDate() + i);\r\n let fromObj = new Date(tomorrow);\r\n let fromHoursCount = element.from.getHours();\r\n let fromMinsCount = element.from.getMinutes();\r\n let toHoursCount = (element.to.getHours() == 0) ? 24 : element.to.getHours();\r\n let toMinsCount = element.to.getMinutes();\r\n let arrayIndex = this.state.workDays.findIndex(a => a.localDateString == fromObj.toLocaleDateString())\r\n let dateObj = this.state.workDays[arrayIndex];\r\n let hours = []\r\n if (daysCount == i) {\r\n fromHoursCount = 8;\r\n } else if (i > 0 && i != daysCount) {\r\n fromHoursCount = 8;\r\n toHoursCount = 17;\r\n } else {\r\n toHoursCount = 17;\r\n }\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n hours.push((index).toString() + 30);\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n }\r\n } else {\r\n //if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n //} else {\r\n // if (index == 23 || index == 13) {\r\n // hours.push((index).toString() + '00');\r\n // } else {\r\n // hours.push((index).toString() + 0);\r\n // }\r\n // hours.push((index).toString() + 30);\r\n //}\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (mins == 30 || toHoursCount == 17) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30')\r\n }\r\n }\r\n dateObj.availableSlots = dateObj.availableSlots.concat(hours);\r\n workDays[arrayIndex] = dateObj;\r\n this.setState({ workDays: workDays });\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n fillWorkingTimeSlots = (workDays) => {\r\n this.props.workingSlots.forEach(element => {\r\n if (!element || !element.fromDateTime) {\r\n return;\r\n }\r\n let daysCount = 0;\r\n if (daysCount == 0) {\r\n let startTime = element.from;\r\n let endTime = element.to;\r\n let dateObj = this.state.workDays.find(a => a.localDateString == startTime.toLocaleDateString())\r\n let fromHoursCount = startTime.getHours();\r\n let fromMinsCount = startTime.getMinutes();\r\n let toHoursCount = (endTime.getHours() == 0) ? 24 : endTime.getHours();\r\n let toMinsCount = endTime.getMinutes();\r\n let hours = []\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n hours.push((index).toString() + 30);\r\n }\r\n } else {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n } else {\r\n hours.push((index).toString() + 30);\r\n }\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (mins == 30) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30')\r\n }\r\n }\r\n dateObj.workingSlots = dateObj.workingSlots.concat(hours);\r\n\r\n }\r\n });\r\n\r\n\r\n }\r\n\r\n updateWorkingTimeSlots = () => {\r\n let workDays = this.state.workDays;\r\n this.props.workingSlots.forEach(element => {\r\n\r\n if (!element || !element.fromDateTime) {\r\n return;\r\n }\r\n let startTime = element.from;\r\n let endTime = element.to;\r\n let daysCount = 0;\r\n let arrayIndex = workDays.findIndex(a => a.localDateString == startTime.toLocaleDateString());\r\n if (daysCount == 0 && arrayIndex >= 0) { \r\n\r\n let dateObj = workDays[arrayIndex];\r\n let fromHoursCount = startTime.getHours();\r\n let fromMinsCount = startTime.getMinutes();\r\n let toHoursCount = (endTime.getHours() == 0) ? 24 : endTime.getHours();\r\n let toMinsCount = endTime.getMinutes();\r\n let hours = [];\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n let hoursIndex = index == 0 ? 24 : index;\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n hours.push((hoursIndex).toString() + 30);\r\n }\r\n } else {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((hoursIndex).toString() + 30);\r\n } else {\r\n hours.push((hoursIndex).toString() + 30);\r\n }\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(hoursIndex.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (mins == 30) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(hoursIndex.toString() + '30')\r\n }\r\n }\r\n\r\n dateObj.workingSlots = (dateObj && dateObj.workingSlots) ? dateObj.workingSlots.concat(hours): [];\r\n\r\n workDays[arrayIndex] = dateObj;\r\n this.setState({ workDays: workDays });\r\n }\r\n\r\n });\r\n\r\n }\r\n\r\n fillSuggestedTimeSlots = (workDays) => {\r\n let slots = this.props.suggestedTimeSlots;\r\n slots.forEach(element => {\r\n let daysCount = this.daysCountBetween(element.from, element.to)\r\n if (daysCount == 0) {\r\n let dateObj = this.state.workDays.find(a => a.localDateString == element.from.toLocaleDateString())\r\n let fromHoursCount = element.from.getHours();\r\n let fromMinsCount = element.from.getMinutes();\r\n let toHoursCount = (element.to.getHours() == 0) ? 24 : element.to.getHours();\r\n let toMinsCount = element.to.getMinutes();\r\n let hours = []\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n hours.push((index).toString() + 30);\r\n }\r\n } else {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n } else {\r\n hours.push((index).toString() + 30);\r\n }\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (mins == 30) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30')\r\n }\r\n }\r\n dateObj.sugesstedSlots = dateObj.sugesstedSlots.concat(hours);\r\n } else {\r\n for (let i = 0; i <= daysCount; i++) {\r\n let from = new Date(element.from);\r\n let tomorrow = from;\r\n tomorrow.setDate(tomorrow.getDate() + i);\r\n let fromObj = new Date(tomorrow);\r\n let fromHoursCount = element.from.getHours();\r\n let fromMinsCount = element.from.getMinutes();\r\n let toHoursCount = (element.to.getHours() == 0) ? 24 : element.to.getHours();\r\n let toMinsCount = element.to.getMinutes();\r\n let dateObj = this.state.workDays.find(a => a.localDateString == fromObj.toLocaleDateString());\r\n let hours = []\r\n if (daysCount == i) {\r\n fromHoursCount = 8;\r\n } else {\r\n toHoursCount = 17;\r\n }\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n }\r\n } else {\r\n if (fromHoursCount == 8) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n if (!(toMinsCount < 30) || toHoursCount == 17) {\r\n hours.push((index).toString() + 30);\r\n }\r\n if (fromHoursCount + 1 == toHoursCount) {\r\n hours.push((index).toString() + 30);\r\n }\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30')\r\n }\r\n }\r\n dateObj.sugesstedSlots = dateObj.sugesstedSlots.concat(hours);\r\n }\r\n }\r\n })\r\n }\r\n\r\n updateSuggestedTimeSlots = () => {\r\n let workDays = this.state.workDays;\r\n if (this.props.suggestedTimeSlots.length > 0) {\r\n let suggesSlots = this.props.suggestedTimeSlots;\r\n suggesSlots.forEach(element => {\r\n if (!element.isDeletedEvent) {\r\n let daysCount = this.daysCountBetween(element.from, element.to)\r\n if (daysCount == 0) {\r\n let arrayIndex = workDays.findIndex(a => a.localDateString == element.from.toLocaleDateString())\r\n let dateObj = workDays[arrayIndex];\r\n let fromHoursCount = element.from.getHours();\r\n let fromMinsCount = element.from.getMinutes();\r\n let toHoursCount = (element.to.getHours() == 0) ? 24 : element.to.getHours();\r\n let toMinsCount = element.to.getMinutes();\r\n let hours = []\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n hours.push((index).toString() + 30);\r\n }\r\n } else {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n } else {\r\n hours.push((index).toString() + 30);\r\n }\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (mins == 30) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30')\r\n }\r\n }\r\n dateObj.sugesstedSlots = dateObj.sugesstedSlots.concat(hours);\r\n workDays[arrayIndex] = dateObj;\r\n this.setState({ workDays: workDays });\r\n } else {\r\n for (let i = 0; i <= daysCount; i++) {\r\n let from = new Date(element.from);\r\n let tomorrow = from;\r\n tomorrow.setDate(tomorrow.getDate() + i);\r\n let fromObj = new Date(tomorrow);\r\n let fromHoursCount = element.from.getHours();\r\n let fromMinsCount = element.from.getMinutes();\r\n let toHoursCount = (element.to.getHours() == 0) ? 24 : element.to.getHours();\r\n let toMinsCount = element.to.getMinutes();\r\n let arrayIndex = this.state.workDays.findIndex(a => a.localDateString == fromObj.toLocaleDateString())\r\n let dateObj = this.state.workDays[arrayIndex];\r\n let hours = []\r\n if (daysCount == i) {\r\n fromHoursCount = 8;\r\n } else {\r\n toHoursCount = 17;\r\n }\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n }\r\n } else {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n } else {\r\n if (fromHoursCount == 8) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n if (!(toMinsCount < 30) || toHoursCount == 17) {\r\n hours.push((index).toString() + 30);\r\n }\r\n if (fromHoursCount + 1 == toHoursCount) {\r\n hours.push((index).toString() + 30);\r\n }\r\n }\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30')\r\n }\r\n }\r\n dateObj.sugesstedSlots = dateObj.sugesstedSlots.concat(hours);\r\n workDays[arrayIndex] = dateObj;\r\n this.setState({ workDays: workDays });\r\n }\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n fillNotAvailableTimeSlots = (workDays) => {\r\n this.props.notAvailableTimeSlots.forEach(element => {\r\n let daysCount = this.daysCountBetween(element.from, element.to)\r\n if (daysCount == 0) {\r\n let dateObj = this.state.workDays.find(a => a.localDateString == element.from.toLocaleDateString())\r\n let fromHoursCount = element.from.getHours();\r\n let fromMinsCount = element.from.getMinutes();\r\n let toHoursCount = (element.to.getHours() == 0) ? 24 : element.to.getHours();\r\n let toMinsCount = element.to.getMinutes();\r\n let hours = []\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n hours.push((index).toString() + 30);\r\n }\r\n } else {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n } else {\r\n hours.push((index).toString() + 30);\r\n }\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (mins == 30) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30')\r\n }\r\n }\r\n dateObj.notAvilableSlots = dateObj.notAvilableSlots.concat(hours);\r\n } else {\r\n for (let i = 0; i <= daysCount; i++) {\r\n let from = new Date(element.from);\r\n let tomorrow = from;\r\n tomorrow.setDate(tomorrow.getDate() + i);\r\n let fromObj = new Date(tomorrow);\r\n let fromHoursCount = element.from.getHours();\r\n let fromMinsCount = element.from.getMinutes();\r\n let toHoursCount = (element.to.getHours() == 0) ? 24 : element.to.getHours();\r\n let toMinsCount = element.to.getMinutes();\r\n let dateObj = this.state.workDays.find(a => a.localDateString == fromObj.toLocaleDateString());\r\n let hours = []\r\n if (daysCount == i) {\r\n fromHoursCount = 8;\r\n } else if (i > 0 && i != daysCount) {\r\n fromHoursCount = 8;\r\n toHoursCount = 17;\r\n } else {\r\n toHoursCount = 17;\r\n }\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n hours.push((index).toString() + 30);\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (mins == 30 || toHoursCount == 17) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30')\r\n }\r\n }\r\n dateObj.notAvilableSlots = dateObj.notAvilableSlots.concat(hours);\r\n }\r\n }\r\n })\r\n }\r\n\r\n updateNotAvailableTimeSlots = () => {\r\n let workDays = this.state.workDays;\r\n if (this.props.notAvailableTimeSlots.length > 0) {\r\n this.props.notAvailableTimeSlots.forEach(element => {\r\n let daysCount = this.daysCountBetween(element.from, element.to)\r\n if (daysCount == 0) {\r\n let arrayIndex = workDays.findIndex(a => a.localDateString == element.from.toLocaleDateString())\r\n let dateObj = workDays[arrayIndex];\r\n let fromHoursCount = element.from.getHours();\r\n let fromMinsCount = element.from.getMinutes();\r\n let toHoursCount = (element.to.getHours() == 0) ? 24 : element.to.getHours();\r\n let toMinsCount = element.to.getMinutes();\r\n let hours = []\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n hours.push((index).toString() + 30);\r\n }\r\n } else {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n } else {\r\n hours.push((index).toString() + 30);\r\n }\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (mins == 30) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30')\r\n }\r\n }\r\n if (dateObj !== undefined) {\r\n dateObj.notAvilableSlots = dateObj.notAvilableSlots.concat(hours);\r\n workDays[arrayIndex] = dateObj;\r\n this.setState({ workDays: workDays });\r\n }\r\n } else {\r\n for (let i = 0; i <= daysCount; i++) {\r\n let from = new Date(element.from);\r\n let tomorrow = from;\r\n tomorrow.setDate(tomorrow.getDate() + i);\r\n let fromObj = new Date(tomorrow);\r\n let fromHoursCount = element.from.getHours();\r\n let fromMinsCount = element.from.getMinutes();\r\n let toHoursCount = (element.to.getHours() == 0) ? 24 : element.to.getHours();\r\n let toMinsCount = element.to.getMinutes();\r\n let arrayIndex = this.state.workDays.findIndex(a => a.localDateString == fromObj.toLocaleDateString())\r\n let dateObj = this.state.workDays[arrayIndex];\r\n let hours = []\r\n if (daysCount == i) {\r\n fromHoursCount = 8;\r\n } else if (i > 0 && i != daysCount) {\r\n fromHoursCount = 8;\r\n toHoursCount = 17;\r\n } else {\r\n toHoursCount = 17;\r\n }\r\n for (let index = fromHoursCount; index <= toHoursCount; index++) {\r\n if (index == fromHoursCount) {\r\n let mins = (Math.round(fromMinsCount / 30) * 30) % 60;\r\n if (fromMinsCount > 30) {\r\n if (mins == 30) {\r\n hours.push((index).toString() + 30);\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push((index).toString() + 30);\r\n }\r\n } else if (index == toHoursCount) {\r\n let mins = (Math.round(toMinsCount / 30) * 30) % 60;\r\n if (toMinsCount > 30) {\r\n if (mins == 0) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30');\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n } else {\r\n if (mins == 30 || toHoursCount == 17) {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n }\r\n }\r\n } else {\r\n if (index == 23 || index == 13) {\r\n hours.push((index).toString() + '00');\r\n } else {\r\n hours.push((index).toString() + 0);\r\n }\r\n hours.push(index.toString() + '30')\r\n }\r\n }\r\n if (dateObj !== undefined) {\r\n dateObj.notAvilableSlots = dateObj.notAvilableSlots.concat(hours);\r\n workDays[arrayIndex] = dateObj;\r\n this.setState({ workDays: workDays });\r\n }\r\n\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n onCLickAddNewSuggestedTimeSlots = () => {\r\n let slots = this.props.suggestedTimeSlots;\r\n slots.push({ isUpdated: false, isSingle: false, from: new Date(), to: new Date() });\r\n this.props.updateState('suggestedTimeSlots', slots);\r\n }\r\n\r\n daysCountBetween = (date1, date2) => {\r\n let a = date1;\r\n let b = date2;\r\n const ONE_DAY = 1000 * 60 * 60 * 24;\r\n const differenceMs = Math.abs(a - b);\r\n return Math.round(differenceMs / ONE_DAY);\r\n }\r\n\r\n roundToThrityMins = (date) => {\r\n var now = date;\r\n var mins = now.getMinutes();\r\n var quarterHours = Math.round(mins / 30);\r\n if (quarterHours == 2) {\r\n now.setHours(now.getHours() + 1);\r\n }\r\n var rounded = (quarterHours * 30) % 60;\r\n now.setMinutes(rounded);\r\n return now;\r\n }\r\n\r\n onClickUpdateTimeSlot = (index) => {\r\n let slots = this.props.suggestedTimeSlots;\r\n let fromDate = (this.props.fromDate < slots[index].from) ? this.props.fromDate : slots[index].from\r\n let toDate = (this.props.toDate > slots[index].to) ? this.props.toDate : slots[index].to\r\n slots[index].isUpdated = true;\r\n //this.props.updateState('fromDate', fromDate);\r\n // this.props.updateState('toDate', toDate);\r\n\r\n let isValid = true;\r\n\r\n if (slots[index].from >= slots[index].to) {\r\n isValid = false;\r\n toast.error('End date should be greater than Start date.', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n\r\n let rounded = {\r\n start: this.roundToThrityMins(new Date(slots[index].from)),\r\n end: this.roundToThrityMins(new Date(slots[index].to)),\r\n }\r\n let minsBetween = this.getMinutesBetweenDates(rounded.start, rounded.end);\r\n if (minsBetween < this.props.scheduledDuration) {\r\n isValid = false;\r\n toast.error('The suggested time slot(s) is not enough to complete the task', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n return;\r\n }\r\n\r\n let timeSlotKey = '';\r\n let time = new Date(rounded.start);\r\n let minuteSlots = minsBetween / 30;\r\n let newDate = new Date(rounded.start);\r\n \r\n let minutesToAdd = 0\r\n for (let index = 0; index < minuteSlots; index++) {\r\n minutesToAdd = index == 0 ? 0 : 30;\r\n time = new Date(new Date(time).setMinutes(new Date(time).getMinutes() + minutesToAdd));\r\n timeSlotKey = time.getHours().toString() + time.getMinutes().toString();\r\n if (timeSlotKey == '1730') {\r\n var d = newDate;\r\n d = new Date(d.setDate(d.getDate() + 1));\r\n time = new Date(new Date(d.setHours(8)).setMinutes(0));\r\n timeSlotKey = time.getHours().toString() + time.getMinutes().toString();\r\n }\r\n let element = document.querySelector(`[time-slot='${time.toLocaleDateString() + '-' + timeSlotKey}']`);\r\n\r\n if (element == null || element == undefined) {\r\n isValid = isValid && false;\r\n } else {\r\n isValid = isValid && true;\r\n }\r\n }\r\n\r\n if (isValid) {\r\n this.props.updateState('suggestedTimeSlots', slots);\r\n\r\n this.onPrepareGrid(fromDate, toDate);\r\n\r\n setTimeout(() => {\r\n this.updateNotAvailableTimeSlots();\r\n this.updateAvailableTimeSlots();\r\n this.updateSuggestedTimeSlots();\r\n this.updateWorkingTimeSlots();\r\n }, 500);\r\n } else {\r\n toast.error('Please select a valid time slot.', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }\r\n\r\n onClickDeleteTimeSlot = (index) => {\r\n this.props.suggestedTimeSlots.forEach((element, i) => {\r\n if (i === index) {\r\n element.isDeletedEvent = true;\r\n }\r\n });\r\n let suggestedTimeSlots = this.props.suggestedTimeSlots.filter((element, i) => i != index); // AN-24965\r\n\r\n this.onPrepareGrid(this.props.fromDate, this.props.toDate);\r\n setTimeout(() => {\r\n this.updateNotAvailableTimeSlots();\r\n this.updateAvailableTimeSlots();\r\n this.updateSuggestedTimeSlots();\r\n this.updateWorkingTimeSlots();\r\n }, 500);\r\n }\r\n\r\n disableFromDates = (currentDate, selectedDate, index) => {\r\n var d = new Date();\r\n d.setDate(d.getDate() - 1);\r\n return true; //currentDate > new Date(d);\r\n }\r\n\r\n disableToDates = (currentDate, selectedDate, index) => {\r\n let slot = this.props.suggestedTimeSlots[index];\r\n var d = slot.from\r\n d.setDate(d.getDate() - 1);\r\n return currentDate > new Date(d);\r\n }\r\n\r\n onClickAvailableSlot = (workDay, slot) => {\r\n let startDate = new Date(workDay.localDateString);\r\n startDate = new Date(startDate.setHours(slot.hours));\r\n startDate = new Date(startDate.setMinutes(slot.minutes));\r\n let startTime = new Date(startDate);\r\n let endTime = new Date(new Date(startDate).setMinutes(new Date(startDate).getMinutes() + this.props.scheduledDuration));\r\n if (endTime > new Date(new Date(new Date(startDate).setHours(17)).setMinutes(0))) {\r\n let minutesDiff = this.getMinutesBetweenDates(new Date(new Date(new Date(startDate).setHours(17)).setMinutes(0)), endTime) - 31;\r\n var d = new Date(workDay.localDateString);\r\n d = new Date(d.setDate(d.getDate() + 1));\r\n endTime = new Date(new Date(d.setHours(8)).setMinutes(minutesDiff));\r\n }\r\n let suggestedTimeSlots = [];\r\n let timeSlotKey = slot.hours.toString() + slot.minutes.toString();\r\n let time = workDay.date;\r\n time = new Date(new Date(workDay.date.setHours(slot.hours)).setMinutes(slot.minutes))\r\n let minuteSlots = this.props.scheduledDuration / 30;\r\n let newDate = workDay;\r\n let isValid = true;\r\n let minutesToAdd = 0\r\n for (let index = 0; index < minuteSlots; index++) {\r\n minutesToAdd = index == 0 ? 0 : 30;\r\n time = new Date(new Date(time).setMinutes(new Date(time).getMinutes() + minutesToAdd));\r\n timeSlotKey = time.getHours().toString() + time.getMinutes().toString();\r\n if (timeSlotKey == '1730') {\r\n var d = newDate.date;\r\n d = new Date(d.setDate(d.getDate() + 1));\r\n time = new Date(new Date(d.setHours(8)).setMinutes(0));\r\n timeSlotKey = time.getHours().toString() + time.getMinutes().toString();\r\n }\r\n let element = document.querySelector(`[time-slot='${time.toLocaleDateString() + '-' + timeSlotKey}']`);\r\n\r\n if (element == null || element == undefined) {\r\n isValid = isValid && false;\r\n } else {\r\n isValid = isValid && true;\r\n }\r\n }\r\n\r\n if (isValid) {\r\n suggestedTimeSlots.push({\r\n from: startTime,\r\n to: endTime,\r\n isUpdated: true,\r\n isSingle: true\r\n });\r\n\r\n this.props.updateState('suggestedTimeSlots', suggestedTimeSlots);\r\n\r\n this.onPrepareGrid(this.props.fromDate, this.props.toDate);\r\n setTimeout(() => {\r\n this.updateNotAvailableTimeSlots();\r\n this.updateAvailableTimeSlots();\r\n this.updateSuggestedTimeSlots();\r\n this.updateWorkingTimeSlots();\r\n }, 500);\r\n } else {\r\n toast.error('Please select a valid time slot.', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }\r\n\r\n getMinutesBetweenDates = (startDate, endDate) => {\r\n var diff = endDate.getTime() - startDate.getTime();\r\n return (diff / 60000);\r\n }\r\n\r\n renderTimeSlots = (workDay) => {\r\n {\r\n TIME_SLOTS.map((slot, index) => {\r\n return (\r\n \r\n {(workDay.sugesstedSlots.indexOf(slot.time.toString()) > -1) ?\r\n
this.onClickAvailableSlot(workDay, slot)} time-slot={workDay.localDateString + '-' + slot.time}>\r\n
\r\n {(workDay.workingSlots.indexOf(slot.time.toString()) > -1) ?\r\n
\r\n :
}\r\n
:\r\n (workDay.availableSlots.indexOf(slot.time.toString()) > -1) ?\r\n
this.onClickAvailableSlot(workDay, slot)} time-slot={workDay.localDateString + '-' + slot.time}>\r\n
\r\n {(workDay.workingSlots.indexOf(slot.time.toString()) > -1) ?\r\n
\r\n :
}\r\n
:\r\n (workDay.notAvilableSlots.indexOf(slot.time.toString()) > -1) ?\r\n
\r\n
\r\n {(workDay.workingSlots.indexOf(slot.time.toString()) > -1) ?\r\n
\r\n :
}\r\n
:\r\n (workDay.workingSlots.indexOf(slot.time.toString()) > -1) ?\r\n
\r\n
\r\n
:\r\n (slot.time == 80) ?\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 onChangeStartTime = (date, index) => {\r\n let slots = this.props.suggestedTimeSlots;\r\n let element = slots[index];\r\n let startDate = new Date(element.from);\r\n let startTime = new Date(date);\r\n element.from = new Date(new Date(startDate.setHours(startTime.getHours())).setMinutes(startTime.getMinutes()));\r\n element.isUpdated = false;\r\n element.isSingle = false;\r\n slots[index] = element;\r\n this.props.updateState('suggestedTimeSlots', slots);\r\n }\r\n\r\n onChangeStartDate = (date, index) => {\r\n let slots = this.props.suggestedTimeSlots;\r\n let element = slots[index];\r\n element.from = new Date(date);\r\n element.isUpdated = false;\r\n element.isSingle = false;\r\n slots[index] = element;\r\n this.props.updateState('suggestedTimeSlots', slots);\r\n };\r\n\r\n onChangeEndTime = (date, index) => {\r\n let slots = this.props.suggestedTimeSlots;\r\n let element = slots[index];\r\n let endDate = new Date(element.to);\r\n let endTime = new Date(date);\r\n element.to = new Date(new Date(endDate.setHours(endTime.getHours())).setMinutes(endTime.getMinutes()));\r\n element.isUpdated = false;\r\n element.isSingle = false;\r\n slots[index] = element;\r\n this.props.updateState('suggestedTimeSlots', slots);\r\n }\r\n\r\n onChangeEndDate = (date, index) => {\r\n let slots = this.props.suggestedTimeSlots;\r\n let element = slots[index];\r\n element.to = new Date(date);\r\n element.isUpdated = false;\r\n element.isSingle = false;\r\n slots[index] = element;\r\n this.props.updateState('suggestedTimeSlots', slots);\r\n }\r\n\r\n convertJobTimesToHoursAndMinutes() {\r\n var totalJobTimeInMinutes = this.props.bidDetails.estimatedHours;\r\n if (this.props.travelTimeDuration > 0) {\r\n totalJobTimeInMinutes = parseInt(this.props.bidDetails.estimatedHours + this.props.travelTimeDuration);\r\n }\r\n const totalJobTimeHoursPortion = Math.floor(totalJobTimeInMinutes / 60);\r\n const totalJobTimeMinutesPortion = totalJobTimeInMinutes % 60;\r\n\r\n const estimatedJobTimeHoursPortion = Math.floor(this.props.bidDetails.estimatedHours / 60);\r\n const estimatedJobTimeMinutesPortion = this.props.bidDetails.estimatedHours % 60;\r\n\r\n this.setState({\r\n totalJobTimeHoursPortion: totalJobTimeHoursPortion,\r\n totalJobTimeMinutesPortion: totalJobTimeMinutesPortion,\r\n estimatedJobTimeHoursPortion: estimatedJobTimeHoursPortion,\r\n estimatedJobTimeMinutesPortion: estimatedJobTimeMinutesPortion\r\n });\r\n\r\n if (this.props.travelTimeDuration > 0) {\r\n const travelTimeHoursPortion = Math.floor(this.props.travelTimeDuration / 60);\r\n const travelTimeMinutesPortion = this.props.travelTimeDuration % 60;\r\n this.setState({\r\n travelTimeHoursPortion: travelTimeHoursPortion,\r\n travelTimeMinutesPortion: travelTimeMinutesPortion\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n const { workDays } = this.state;\r\n const { fromDate, toDate } = this.props;\r\n const shortcuts = {\r\n 'Today': moment()\r\n };\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

*Avg job time ({this.state.totalJobTimeHoursPortion} hrs {this.state.totalJobTimeMinutesPortion} min) =\r\n job estimation ({this.state.estimatedJobTimeHoursPortion} hrs {this.state.estimatedJobTimeMinutesPortion} min) +\r\n travel time ({this.state.travelTimeHoursPortion} hrs {this.state.travelTimeMinutesPortion} min)

\r\n
\r\n
\r\n Add {\" \"}\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 {this.props.suggestedTimeSlots.map((element, index) => {\r\n if (!element.isDeletedEvent) {\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {(element.isSingle) ?\r\n :\r\n <>\r\n this.onChangeStartDate(event, index)}>\r\n \r\n \r\n this.onChangeStartTime(event, index)}\r\n inputReadOnly\r\n use12Hours\r\n popupClassName={'time-picker-popup'}>\r\n \r\n \r\n \r\n \r\n \r\n }\r\n
\r\n
\r\n
\r\n
\r\n End\r\n {(element.isSingle) ?\r\n :\r\n <>\r\n this.onChangeEndDate(event, index)}>\r\n \r\n \r\n this.onChangeEndTime(event, index)}\r\n inputReadOnly\r\n use12Hours\r\n popupClassName={'time-picker-popup'}>\r\n \r\n \r\n \r\n \r\n \r\n }\r\n
\r\n {(element.isSingle && !element.scheduledByPm) ? '' : }\r\n {(element.scheduledByPm) ? '' : }\r\n
\r\n
\r\n )\r\n }\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {MONTHS[fromDate.getMonth()].shortName + ' ' + fromDate.getDate() + ' - ' + MONTHS[toDate.getMonth()].shortName + ' ' + toDate.getDate() + ', ' + toDate.getFullYear()}\r\n
\r\n {workDays.map((day, index) => {\r\n return (\r\n
\r\n
\r\n {day.date.toDateString()}\r\n
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n
\r\n
\r\n {TIME_SLOTS.map((slot, index) => {\r\n return (\r\n
\r\n
{slot.displayText}
\r\n
\r\n )\r\n })}\r\n
\r\n
\r\n {workDays.map((workDay, index) => {\r\n return (\r\n
\r\n
\r\n {/*{this.renderTimeSlots(workDay)}*/}\r\n {TIME_SLOTS.map((slot, index2) => {\r\n return (\r\n \r\n {(workDay.sugesstedSlots.indexOf(slot.time.toString()) > -1) ?\r\n
this.onClickAvailableSlot(workDay, slot)} time-slot={workDay.localDateString + '-' + slot.time}>\r\n
\r\n {(workDay.workingSlots.indexOf(slot.time.toString()) > -1) ?\r\n\r\n
\r\n :
}\r\n
:\r\n (workDay.availableSlots.indexOf(slot.time.toString()) > -1) ?\r\n
this.onClickAvailableSlot(workDay, slot)} time-slot={workDay.localDateString + '-' + slot.time}>\r\n
\r\n {(workDay.workingSlots.indexOf(slot.time.toString()) > -1) ?\r\n\r\n
\r\n :
}\r\n
:\r\n (workDay.notAvilableSlots.indexOf(slot.time.toString()) > -1) ?\r\n
\r\n
\r\n {(workDay.workingSlots.indexOf(slot.time.toString()) > -1) ?\r\n\r\n
\r\n :
}\r\n
:\r\n (workDay.workingSlots.indexOf(slot.time.toString()) > -1) ?\r\n
\r\n
\r\n
:\r\n (slot.time == 80) ?\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\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n dateFormat: state.User.dateFormat\r\n };\r\n};\r\nexport default connect(mapStateToProps)(EventScheduler);\r\n","import React, { Component } from 'react'\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport './EventScheduleDrawer.scss';\r\nimport EventScheduler from '../../Common/EventScheduler/EventScheduler';\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport moment from 'moment';\r\nimport Loader from \"react-loader-spinner\";\r\nimport { toast } from 'react-toastify';\r\n\r\nexport default class EventScheduleDrawer extends Component {\r\n state = {\r\n showDrawer: false,\r\n availableTimeSlots: [],\r\n notAvailableTimeSlots: [],\r\n suggestedTimeSlots: [],\r\n tempAvailableArray: [],\r\n tempblockedArray: [],\r\n tempsuggestArray: [],\r\n fromDate: new Date(),\r\n toDate: new Date(new Date().getTime() + (5 * 24 * 60 * 60 * 1000)),\r\n scheduledDuration: 0,\r\n jobDetails: {},\r\n isPostingData: false,\r\n isDetailsLoading: false,\r\n isUpdating: false,\r\n travelTimeDuration: 0,\r\n workingSlots: [],\r\n tempWorkingSlots: []\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n\r\n onUpdateSchedule = (event) => {\r\n let schedules = {}\r\n const suggestedTaskScheduleListViewModel = [];\r\n if (this.state.suggestedTimeSlots.length > 0) {\r\n this.setState({ isUpdating: true });\r\n this.state.suggestedTimeSlots.forEach(event => {\r\n var mobileTaskScheduleModel = this.convertToScheduleEvent(event);\r\n suggestedTaskScheduleListViewModel.push(mobileTaskScheduleModel);\r\n\r\n });\r\n }\r\n this.setState({ isPostingData: true });\r\n\r\n if (suggestedTaskScheduleListViewModel.length > 0) {\r\n\r\n schedules.taskSchedules = suggestedTaskScheduleListViewModel;\r\n\r\n AXIOS.POST(`schedule/tenantSuggestSchedules`, schedules).then(response => {\r\n if (response === 12) {\r\n toast.success(\"Schedule updated sucess.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n else {\r\n toast.error('Schedule updated failed.', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n this.setState({ showDrawer: false, isUpdating: false });\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n convertToScheduleEvent(event) {\r\n var userId = localStorage.getItem('userIdDecripted');\r\n let mobileTaskScheduleModel = {};\r\n const from = new Date(event.from);\r\n from.setTime(from.getTime() + from.getTimezoneOffset() * 60 * 1000);\r\n const to = new Date(event.to);\r\n to.setTime(to.getTime() + to.getTimezoneOffset() * 60 * 1000);\r\n mobileTaskScheduleModel.status = 1;\r\n if (event.eventId !== undefined) {\r\n mobileTaskScheduleModel.eventId = event.eventId;\r\n mobileTaskScheduleModel.status = 2;\r\n }\r\n mobileTaskScheduleModel.fromDateTime = moment(new Date(from).toUTCString()).format('DD/MM/YYYY HH:mm:ss');\r\n mobileTaskScheduleModel.toDateTime = moment(new Date(to).toUTCString()).format('DD/MM/YYYY HH:mm:ss');\r\n mobileTaskScheduleModel.bidId = this.props.jobDetails.acceptedBid.bidId;\r\n mobileTaskScheduleModel.jobId = this.props.jobDetails.id;\r\n mobileTaskScheduleModel.userId = userId;\r\n mobileTaskScheduleModel.jobScheduledPMId = event.userId === undefined ? userId : event.userId;\r\n mobileTaskScheduleModel.lastUpdatedUserId = userId;\r\n mobileTaskScheduleModel.isJobScheduleFromPM = false;\r\n mobileTaskScheduleModel.isDeletedEvent = event.isDeletedEvent === undefined ? false : event.isDeletedEvent;\r\n mobileTaskScheduleModel.assigneeId = this.props.jobDetails.acceptedBid.providerId;\r\n mobileTaskScheduleModel.travelTime = this.props.jobDetails.acceptedBid.travelTime === undefined ? 0 : this.props.jobDetails.acceptedBid.travelTime;\r\n\r\n return mobileTaskScheduleModel;\r\n }\r\n\r\n\r\n\r\n updateState = (name, event) => {\r\n this.setState({\r\n [name]: event\r\n })\r\n }\r\n\r\n toggleJobCancelDrawer = () => {\r\n document.body.style.cssText = 'overflow : auto !important';\r\n const isShowDrawer = !this.state.showDrawer;\r\n this.setState(state => ({\r\n showDrawer: isShowDrawer\r\n }));\r\n if (isShowDrawer) {\r\n document.body.style.cssText = 'overflow : hidden !important';\r\n if (this.props.jobDetails != null && this.props.jobDetails.acceptedBid != null) {\r\n var totalJobTime = this.props.jobDetails.acceptedBid.estimatedHours;\r\n const availableStart = new Date(this.props.jobDetails.acceptedBid.availabilityStart);\r\n availableStart.setTime(availableStart.getTime() - availableStart.getTimezoneOffset() * 60 * 1000);\r\n const availableEnd = new Date(this.props.jobDetails.acceptedBid.availabilityEnd);\r\n availableEnd.setTime(availableEnd.getTime() - availableEnd.getTimezoneOffset() * 60 * 1000);\r\n this.setState({ isDetailsLoading: true, scheduledDuration: totalJobTime, fromDate: availableStart, toDate: availableEnd });\r\n this.setState({ availableTimeSlots: [], notAvailableTimeSlots: [], suggestedTimeSlots: [], tempAvailableArray: [], tempblockedArray: [], tempsuggestArray: [], tempWorkingSlots: [], workingSlots: [] });\r\n this.setSchedulerByDates(this.props.jobDetails.acceptedBid.availabilityStart, this.props.jobDetails.acceptedBid.availabilityEnd);\r\n }\r\n\r\n }\r\n };\r\n\r\n\r\n setSchedulerByDates(startDate, endDate) {\r\n let start = new Date(startDate);\r\n start.setTime(start.getTime() - start.getTimezoneOffset() * 60 * 1000);\r\n let end = new Date(endDate);\r\n end.setDate(end.getDate() + 1);\r\n const endTime = end.setTime(end.getTime() - end.getTimezoneOffset() * 60 * 1000);\r\n let startTime = Number(start);\r\n while (endTime >= startTime) {\r\n var startDates = moment(start.toLocaleString()).format('YYYY-MM-DD HH:mm:ss');\r\n\r\n this.getJobSchedulerDetail(startDates);\r\n startTime = start.setDate(start.getDate() + 1);\r\n }\r\n }\r\n\r\n getJobSchedulerDetail = async (startDate) => {\r\n if (!startDate) return false;\r\n\r\n try {\r\n await AXIOS.GET(`schedule/tenantShedulesByDate?providerId=${this.props.jobDetails.acceptedBid.providerId}&selectedDate=${startDate}&bidId=${this.props.jobDetails.acceptedBid.bidId}`).then(\r\n data => {\r\n if (data !== \"\") {\r\n this.setAvailableTimeSlot(data);\r\n }\r\n return true;\r\n }\r\n )\r\n } catch (error) {\r\n console.log(error);\r\n return false;\r\n }\r\n };\r\n\r\n setAvailableTimeSlot(data) {\r\n var userId = localStorage.getItem('userIdDecripted');\r\n if (data.availableEvents.length > 0) {\r\n\r\n data.availableEvents.forEach((element) => {\r\n let availableScheduleArray = {};\r\n availableScheduleArray.from = this.getConvertedDateTime(element.fromDateTime);\r\n availableScheduleArray.to = this.getConvertedDateTime(element.toDateTime);\r\n this.state.tempAvailableArray.push(availableScheduleArray);\r\n });\r\n this.setState({ availableTimeSlots: this.state.tempAvailableArray });\r\n }\r\n\r\n if (data.events.length > 0) {\r\n\r\n data.events.forEach((element) => {\r\n let eventScheduleArray = {};\r\n eventScheduleArray.from = this.getConvertedDateTime(element.fromDateTime);\r\n eventScheduleArray.to = this.getConvertedDateTime(element.toDateTime);\r\n this.state.tempblockedArray.push(eventScheduleArray);\r\n });\r\n this.setState({ notAvailableTimeSlots: this.state.tempblockedArray });\r\n\r\n }\r\n if (data.suggestedEventsForDate.length > 0) {\r\n\r\n data.suggestedEventsForDate.forEach((element) => {\r\n if (!element.isDeletedEvent) {\r\n let suggestScheduleArray = {};\r\n if (userId !== element.suggestedUserId) {\r\n suggestScheduleArray.scheduledByPm = true;\r\n }\r\n suggestScheduleArray.eventId = element.eventId;\r\n suggestScheduleArray.userId = element.suggestedUserId;\r\n suggestScheduleArray.isSingle = '';\r\n suggestScheduleArray.isDeletedEvent = false;\r\n suggestScheduleArray.from = this.getConvertedDateTime(element.fromDateTime);\r\n suggestScheduleArray.to = this.getConvertedDateTime(element.toDateTime);\r\n this.state.tempsuggestArray.push(suggestScheduleArray);\r\n }\r\n });\r\n this.setState({ suggestedTimeSlots: this.state.tempsuggestArray });\r\n }\r\n if (data.travelTime > 0) {\r\n var totalJobTime = parseInt(this.props.jobDetails.acceptedBid.estimatedHours + data.travelTime);\r\n this.setState({ scheduledDuration: totalJobTime, travelTimeDuration: data.travelTime });\r\n }\r\n this.scheduler.onPrepareGrid(this.state.fromDate, this.state.toDate);\r\n\r\n if (data.workingHours) {\r\n data.workingHours.from = this.getConvertedDateTime(data.workingHours.fromDateTime);\r\n data.workingHours.to = this.getConvertedDateTime(data.workingHours.toDateTime);\r\n this.state.tempWorkingSlots.push(data.workingHours);\r\n this.setState({ workingSlots: this.state.tempWorkingSlots });\r\n }\r\n\r\n setTimeout(() => {\r\n this.scheduler.updateNotAvailableTimeSlots();\r\n this.scheduler.updateAvailableTimeSlots();\r\n this.scheduler.updateSuggestedTimeSlots();\r\n this.scheduler.convertJobTimesToHoursAndMinutes();\r\n this.scheduler.updateWorkingTimeSlots();\r\n this.setState({ isDetailsLoading: false });\r\n }, 500);\r\n\r\n }\r\n\r\n getConvertedDateTime(value) {\r\n if (!value) {\r\n return;\r\n }\r\n let allData = value.split(' ');\r\n let date = allData[0].split('/');\r\n let newDate = date[1] + '/' + date[0] + '/' + date[2] + ' ' + allData[1];\r\n return new Date(newDate);\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n\r\n return (\r\n <>\r\n \r\n {drawer}\r\n \r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n const header = this.createHeader();\r\n const body = this.createBody();\r\n const footer = this.createFooter();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n createHeader = () => {\r\n const { isDetailsLoading } = this.state;\r\n return (\r\n <>\r\n

Event Scheduler

\r\n {(isDetailsLoading) ? : ''}\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createBody = () => {\r\n return (\r\n
\r\n (this.scheduler = ref)}\r\n availableTimeSlots={this.state.availableTimeSlots}\r\n notAvailableTimeSlots={this.state.notAvailableTimeSlots}\r\n suggestedTimeSlots={this.state.suggestedTimeSlots}\r\n workingSlots={this.state.workingSlots}\r\n fromDate={this.state.fromDate}\r\n toDate={this.state.toDate}\r\n scheduledDuration={this.state.scheduledDuration}\r\n bidDetails={this.props.jobDetails.acceptedBid}\r\n travelTimeDuration={this.state.travelTimeDuration}\r\n updateState={(name, event) => this.updateState(name, event)} />\r\n
\r\n );\r\n };\r\n\r\n createFooter = () => {\r\n const { isUpdating } = this.state;\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n\r\n}\r\n","import React from 'react';\r\nimport {CardElement,injectStripe} from 'react-stripe-elements';\r\nimport settingsService from '../../../../Services/settingsService';\r\nimport { toast } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport Loader from \"react-loader-spinner\";\r\nclass CardSection extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this._element = React.createRef();\r\n }\r\n\r\n state={\r\n error:'',\r\n card:'',\r\n elements:'',\r\n loading:false\r\n }\r\n\r\n render() {\r\n \r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n handleChangeFor = (error) => { \r\n if(error.error){\r\n this.setState({error:error.error.message});\r\n }else{\r\n this.setState({error:''})\r\n }\r\n }\r\n\r\n handleSubmit = (ev) => {\r\n ev.preventDefault();\r\n this.props.stripe.createToken().then((token) => {\r\n if(token && token.token){\r\n this.addCardDetails(token.token.id);\r\n }\r\n });\r\n };\r\n\r\n addCardDetails=(token)=>{\r\n var model={\r\n 'userId':localStorage.getItem('userId'),\r\n 'cardToken':token\r\n }\r\n this.setState({loading:true});\r\n settingsService.addCardDetails(model)\r\n .then((res) => {\r\n this._element.clear();\r\n this.setState({loading:false});\r\n if(res.status===18){\r\n toast.success(\"Card added Successful.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT,\r\n });\r\n if (this.props.isFromTenantManageJob) {\r\n this.props.nextStep(0);\r\n }\r\n }else{\r\n toast.error(res.message, {\r\n position: toast.POSITION.BOTTOM_RIGHT,\r\n });\r\n }\r\n this.props.refresh();\r\n });\r\n }\r\n}\r\n\r\nexport default injectStripe(CardSection);","import React from \"react\";\r\nimport Loader from \"react-loader-spinner\";\r\nimport { Badge } from \"react-bootstrap\";\r\nimport Moment from \"react-moment\";\r\nimport { toast } from \"react-toastify\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport settingsService from \"../../../../Services/settingsService\";\r\nimport { StripeProvider, Elements, ReactStrpeElements } from 'react-stripe-elements';\r\nimport CardSection from \"./CardSection\"\r\nclass Payment extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n state = {\r\n cardDetails: [],\r\n stripe: null,\r\n loading: false\r\n };\r\n\r\n componentDidMount() {\r\n this.getCardDetailsByUserId(this.props.userId);\r\n if (window.Stripe) {\r\n this.setState({ stripe: window.Stripe(localStorage.getItem('spk')) });\r\n\r\n } else {\r\n document.querySelector('#stripe-js').addEventListener('load', () => {\r\n // Create Stripe instance once Stripe.js loads\r\n this.setState({ stripe: window.Stripe(localStorage.getItem('spk')) });\r\n });\r\n }\r\n }\r\n\r\n refresh = () => {\r\n this.getCardDetailsByUserId(this.props.userId);\r\n }\r\n getCardDetailsByUserId(userId) {\r\n settingsService\r\n .getCardDetailsByUserId(userId)\r\n .then((res) => {\r\n this.setState({\r\n cardDetails: res\r\n });\r\n if (this.props.isFromTenantManageJob) {\r\n this.props.checkCardAvailability();\r\n }\r\n });\r\n }\r\n\r\n\r\n render() {\r\n let { cardDetails } = this.state;\r\n let cardDetailsView = this.loadCardDetails(cardDetails);\r\n return (<>\r\n {cardDetailsView}\r\n \r\n )\r\n }\r\n\r\n addCardDetails = () => {\r\n return (\r\n \r\n \r\n this.refresh()} isFromTenantManageJob={this.props.isFromTenantManageJob}\r\n nextStep={this.props.nextStep} />\r\n \r\n \r\n );\r\n }\r\n\r\n loadCardDetails = (cardDetails) => {\r\n\r\n let defaultCard = (cardDetails) ? cardDetails.filter(m => m.isDefault === true) : null;\r\n let otherCards = (cardDetails) ? cardDetails.filter(m => m.isDefault === false) : null;\r\n return (\r\n
\r\n
\r\n

Add new card

\r\n
\r\n
\r\n {this.addCardDetails()}\r\n
\r\n
\r\n {(defaultCard.length !== 0 || otherCards.length !== 0) ?

Card Details

: \"\"}\r\n
\r\n
\r\n \r\n
\r\n
\r\n {(defaultCard && defaultCard !== null) ?\r\n defaultCard.map((item) => (\r\n
\r\n
\r\n
\r\n
{item.brand}
\r\n
\r\n
\r\n Card number\r\n {item.cardMask}\r\n
\r\n
\r\n Exp.\r\n {item.exp_month}/{item.exp_year}\r\n
\r\n
\r\n
\r\n
\r\n
)) : \"\"}\r\n {(otherCards && otherCards !== null) ?\r\n\r\n otherCards.map((item) => (\r\n
\r\n
\r\n
\r\n
{item.brand}
\r\n
\r\n
\r\n Card number\r\n {item.cardMask}\r\n
\r\n
\r\n Exp.\r\n {item.exp_month} / {item.exp_year}\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 remove = (id) => {\r\n var model = {\r\n 'userId': localStorage.getItem('userId'),\r\n 'cardToken': id\r\n }\r\n this.setState({ loading: true });\r\n settingsService.deleteCardDetails(model)\r\n .then((res) => {\r\n this.setState({ loading: false });\r\n if (res.status === 18) {\r\n toast.success(\"Card Removed Successful.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT,\r\n });\r\n } else {\r\n toast.error('Card Removed Unsuccessful.', {\r\n position: toast.POSITION.BOTTOM_RIGHT,\r\n });\r\n }\r\n this.refresh();\r\n });\r\n }\r\n\r\n setDefault = (id) => {\r\n var model = {\r\n 'userId': localStorage.getItem('userId'),\r\n 'cardToken': id\r\n }\r\n this.setState({ loading: true });\r\n settingsService.setDefaultCardDetails(model)\r\n .then((res) => {\r\n this.setState({ loading: false });\r\n if (res.status === 18) {\r\n toast.success(\"Set Default Card Successful.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT,\r\n });\r\n } else {\r\n toast.error(\"Set Default Card Unsuccessful.\", {\r\n position: toast.POSITION.BOTTOM_RIGHT,\r\n });\r\n }\r\n this.refresh();\r\n });\r\n\r\n }\r\n\r\n}\r\n\r\n\r\nexport default Payment;\r\n","import React, { Component } from 'react';\r\nimport '../../../Layout/LogMaintenanceBotLayout.css';\r\nimport { connect } from 'react-redux';\r\nimport { toast } from 'react-toastify';\r\nimport botService from '../../../../Services/BotService.js';\r\nimport * as _ from 'lodash';\r\nimport { Accordion, ButtonToolbar, Card, ToggleButton, ToggleButtonGroup } from 'react-bootstrap';\r\nimport Loader from \"react-loader-spinner\";\r\nimport Axios from 'axios';\r\nimport moment from 'moment';\r\nimport translateService from '../../../../Services/TranslateService';\r\nclass TrackIssueWizard extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.refProblem = React.createRef();\r\n this.state = {\r\n isCustomThemeEnable: this.props.isCustomThemeEnable,\r\n theme: this.props.theme,\r\n style: this.props.style,\r\n tenantId: this.props.tenantId,\r\n rentalDetails: {},\r\n arrearsDetails: {},\r\n scheduleJobs: [],\r\n isJobsLoading: false,\r\n isDetailsView: false,\r\n currentJob: {},\r\n jobsNotFount: false,\r\n currentStepIndex: 0,\r\n stepFlow: [[0, \"scheduledJobs\"], [1, \"detailView\"], [2, \"NoJobFound\"]],\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.LoadScheduleJobs();\r\n this.setTheme();\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.props.isCustomThemeEnable) {\r\n this.createToggleBtnDynamicStyle();\r\n this.createOkBtnDynamicStyle();\r\n this.createActiveBtnDynamicStyle();\r\n }\r\n }\r\n\r\n createToggleBtnDynamicStyle() {\r\n const color = this.props.style.optionsStyle.color;\r\n const border = this.props.style.optionsStyle.border;\r\n let labelInsideToggleGroup = document.querySelectorAll('label.btn');\r\n\r\n for (var i = 0; i < labelInsideToggleGroup.length; i++) {\r\n labelInsideToggleGroup[i].style.color = color;\r\n labelInsideToggleGroup[i].style.border = border;\r\n labelInsideToggleGroup[i].style.background = '';\r\n }\r\n }\r\n createOkBtnDynamicStyle() {\r\n const color = this.props.style.optionsStyle.color;\r\n let okIcons = document.querySelectorAll('span.ba-icn-ok');\r\n\r\n for (var i = 0; i < okIcons.length; i++) {\r\n okIcons[i].style.background = color;\r\n }\r\n }\r\n createActiveBtnDynamicStyle() {\r\n const color = this.props.style.optionsStyle.activeBackground;\r\n let active = document.querySelectorAll('label.btn.active');\r\n for (var i = 0; i < active.length; i++) {\r\n active[i].style.background = color;\r\n }\r\n }\r\n\r\n LoadScheduleJobs = () => {\r\n var propertyId = this.props.propertyId;\r\n var langCode = this.props.i18n.language;\r\n let userId = localStorage.getItem('userId');\r\n let filters = {\r\n PropertyId: propertyId,\r\n UserId: userId,\r\n pageNumber: 1,\r\n PageSize: 50,\r\n OnlyScheduledJobs: true,\r\n LangCode: langCode\r\n };\r\n this.setState({ isJobsLoading: true });\r\n const base64param = Buffer.from(JSON.stringify(filters)).toString('base64');\r\n botService.getScheduleJobs(base64param).then(res => {\r\n\r\n if (res && res.jobsList.length > 0) {\r\n\r\n if (langCode !== 'en') {\r\n let titleList = res.jobsList.map(x => x.title ? x.title : \" \");\r\n this.applyTranslation((titleList), \"en\", langCode).then((trans) => {\r\n if (trans.length > 0) {\r\n trans.forEach((element, index) => {\r\n res.jobsList[index].title = element;\r\n });\r\n this.setState({ scheduleJobs: res.jobsList, isJobsLoading: false });\r\n }\r\n });\r\n } else {\r\n this.setState({ scheduleJobs: res.jobsList, isJobsLoading: false });\r\n }\r\n\r\n\r\n\r\n\r\n }\r\n else {\r\n this.setState({ scheduleJobs: [], isJobsLoading: false, jobsNotFount: true });\r\n }\r\n }, error => {\r\n });\r\n }\r\n\r\n applyTranslation(texts, sourceLng, targetLng) {\r\n const requestModel = {\r\n text: texts,\r\n targetCode: targetLng,\r\n sourceCode: sourceLng\r\n };\r\n\r\n return translateService.translate(requestModel);\r\n }\r\n\r\n addBodyStyle = () => {\r\n var element = document.body;\r\n element.style.cssText = 'overflow:hidden !important;';\r\n element.style.cssText = 'padding-top:0 !important; overflow:hidden !important; background: transparent !important;';\r\n document.documentElement.style.cssText = \"background: transparent !important;\";\r\n\r\n }\r\n setTheme = () => {\r\n const { style, theme, isCustomThemeEnable } = this.props;\r\n this.setState({\r\n style: style,\r\n theme: theme,\r\n isCustomThemeEnable: isCustomThemeEnable\r\n });\r\n }\r\n previousStep = (index) => {\r\n this.setState({ isDetailsView: false, currentJob: {} })\r\n }\r\n scheduleJobs = () => {\r\n let { scheduleJobs, currentJob } = this.state;\r\n let nextStepIndex = (scheduleJobs.length > 0) ? 1 : 2;\r\n const { t } = this.props;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n\r\n
\r\n

{t('new_ui_pj_lbl_job_select')}

\r\n
\r\n\r\n
\r\n {(this.state.isJobsLoading) ?
:\r\n \r\n { this.handleJobChange(value) }}>\r\n {scheduleJobs.map((a, index) => {\r\n return \r\n
\r\n
#{a.jobNumber} | {this.timeAgo(a.postedOn)}
\r\n
\r\n \r\n
\r\n
\r\n
{a.title}
\r\n\r\n
\r\n
\r\n \r\n
\r\n

{a.statusDisplay}

\r\n

Updated: {this.timeAgo(a.lastUpdatedDateTime)}

\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 {(!this.state.isJobsLoading) ?\r\n
\r\n \r\n
\r\n : ''}\r\n\r\n
);\r\n }\r\n\r\n handleJobChange = (job) => {\r\n var langCode = this.props.i18n.language;\r\n let description = job.description != null ? job.description : \"\";\r\n this.applyTranslation(([description]), \"en\", langCode).then((trans) => {\r\n if (trans.length > 0) {\r\n job.description = trans[0];\r\n }\r\n });\r\n this.setState({ isDetailsView: true, currentJob: job })\r\n }\r\n\r\n timeAgo(value) {\r\n const { t } = this.props;\r\n if (!value) return;\r\n let d = new Date(value);\r\n let now = new Date();\r\n let seconds = Math.round(Math.abs((now.getTime() - d.getTime()) / 1000));\r\n\r\n let minutes = Math.round(Math.abs(seconds / 60));\r\n let hours = Math.round(Math.abs(minutes / 60));\r\n let days = Math.round(Math.abs(hours / 24));\r\n let months = Math.round(Math.abs(days / 30.416));\r\n let years = Math.round(Math.abs(days / 365));\r\n if (Number.isNaN(seconds)) {\r\n return '';\r\n } else if (seconds <= 45) {\r\n return t('new_ui_lbl_fewSeconds');\r\n } else if (seconds <= 90) {\r\n return t('new_ui_lbl_minute');\r\n } else if (minutes <= 45) {\r\n return minutes + t('new_ui_lbl_minutes');\r\n } else if (minutes <= 90) {\r\n return t('new_ui_lbl_hour');\r\n } else if (hours <= 22) {\r\n return hours + t('new_ui_lbl_hours');\r\n } else if (hours <= 36) {\r\n return t('new_ui_lbl_day');\r\n } else if (days <= 25) {\r\n return days + t('new_ui_lbl_days');\r\n } else if (days <= 45) {\r\n return t('new_ui_lbl_month');\r\n } else if (days <= 345) {\r\n return months + t('new_ui_lbl_months');\r\n } else if (days <= 545) {\r\n return t('new_ui_lbl_year');\r\n } else {\r\n // (days > 545)\r\n return years + t('new_ui_lbl_years');\r\n }\r\n }\r\n\r\n render() {\r\n let step = this.showCurrentStep(this.state.currentStepIndex);\r\n return <>\r\n
\r\n {step}\r\n
\r\n \r\n }\r\n\r\n nextStep = (index) => {\r\n if (this.validateCurrentStep(index - 1)) {\r\n this.setState({ currentStepIndex: index });\r\n }\r\n }\r\n\r\n validateCurrentStep = (index) => {\r\n const { t } = this.props;\r\n let currentStep = this.state.stepFlow[index][1];\r\n switch (currentStep) {\r\n case \"scheduledJobs\":\r\n if (Object.keys(this.state.currentJob).length === 0) {\r\n this.props.showChatbotError(t('new_ui_lbl_selectScheduledJob_error_msg'));\r\n return false;\r\n }\r\n else\r\n return true;\r\n case \"detailView\":\r\n return true;\r\n case \"NoJobFound\":\r\n return true;\r\n }\r\n }\r\n\r\n showCurrentStep = (index) => {\r\n let currentStep = this.state.stepFlow[index][1];\r\n switch (currentStep) {\r\n case \"scheduledJobs\":\r\n return this.scheduleJobs();\r\n case \"detailView\":\r\n return this.jobDetails();\r\n case \"NoJobFound\":\r\n return this.JobsNotFound();\r\n }\r\n }\r\n\r\n jobDetails = () => {\r\n const { t } = this.props;\r\n const { currentJob } = this.state;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

{t('new_ui_pj_lbl_job_details_header')} #{currentJob.jobNumber}

\r\n
\r\n
\r\n\r\n
{currentJob.description}
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

{t('new_ui_pj_lbl_job_issue_posted')}

\r\n

{currentJob.postedOnUTCDisplay}

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

{t('new_ui_pj_lbl_job_trade_assigned')}

\r\n

{currentJob.acceptedServiceProviderName}({currentJob.primaryJobTypeDisplay})

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

{t('new_ui_pj_lbl_job_issue_completed')}

\r\n

{currentJob.dueDateUTCDisplay}

\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 JobsNotFound = () => {\r\n const { t } = this.props;\r\n const { currentJob } = this.state;\r\n return (\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n {t('new_ui_pj_lbl_job_not_found')}\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\nexport default connect()(TrackIssueWizard);","import React, { Component } from 'react';\r\nimport { connect } from \"react-redux\";\r\n\r\nexport class Paginator extends Component {\r\n\r\n state = {\r\n page: 1,\r\n sizePerPage: 10,\r\n loading: true,\r\n total: 0\r\n };\r\n\r\n constructor(props){\r\n super(props)\r\n }\r\n\r\n\r\n render(){\r\n const { itemCount,listSize,curenntPage} = this.props;\r\n let total = parseInt(itemCount);\r\n let pageSize = parseInt(listSize);\r\n let pageNumber = parseInt(curenntPage);\r\n let pageCount = Math.ceil((total/pageSize));\r\n let pageArray = this.getPageArray(pageCount,pageNumber,5);\r\n if(total==0 || pageSize>=total){\r\n return '';\r\n }\r\n if(pageCount>5 && pageNumber>=5){\r\n pageArray.pop();\r\n }\r\n return
    \r\n {(pageNumber >2)?
  • \r\n \r\n
  • :''}\r\n {(pageNumber >1)?
  • \r\n \r\n
  • :''}\r\n {pageArray.map((val, index) => (\r\n
  • \r\n \r\n
  • \r\n ))}\r\n {(total > pageSize && (pageCount-pageNumber)>0)?
  • \r\n \r\n
  • :''}\r\n {(total > pageSize && (pageCount-pageNumber)>1)?
  • \r\n \r\n
  • :''}\r\n
\r\n }\r\n\r\n getPageArray=(count,pageNumber,size)=>{\r\n\r\n if(count<=5 && count>0){\r\n return Array.from({length: count}, (_, i) => i + 1);\r\n }else if(count>0 && pageNumber>3 && (count-pageNumber)>2){\r\n return Array.from({length: size}, (_, i) => (pageNumber-3)+i);\r\n }else if(count>0 && (count-pageNumber)<=2){\r\n return Array.from({length: size}, (_, i) => (count-3)+i);\r\n }else if(count>0){\r\n return Array.from({length: size}, (_, i) => i+1);\r\n }else{\r\n return [];\r\n }\r\n }\r\n\r\n pageNavigetor=(pageNumber)=>{\r\n this.setState({page:pageNumber}, function() {\r\n this.updateList();\r\n }); \r\n }\r\n\r\n updateList=()=>{\r\n this.props.updateJobList(true,this.state.page);\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n pageNumber : this.state.page\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(Paginator);","import React, { useState } from \"react\";\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\nimport { connect } from \"react-redux\";\r\nimport { AXIOS } from \"../../../Utilities/HttpRequest/Axios\";\r\nimport { toast } from \"react-toastify\";\r\nimport jobService from \"../../../Services/JobService\";\r\nimport { trackPromise } from \"react-promise-tracker\";\r\nimport { UserType } from \"../../../Constants/Enums\";\r\n\r\nclass JobCancelDrawer extends React.Component {\r\n state = {\r\n showJobCancelDrawer: false\r\n };\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n\r\n return (\r\n <>\r\n \r\n {drawer}\r\n \r\n );\r\n }\r\n\r\n createDrawer = () => {\r\n const header = this.createJobCancelHeader();\r\n const body = this.createJobCancelBody();\r\n const footer = this.createJobCancelFooter();\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n createJobCancelHeader = () => {\r\n return (\r\n <>\r\n

Cancel Job

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createJobCancelBody = () => {\r\n return (\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 Mark as Completed\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n };\r\n\r\n createJobCancelFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n onClickJobCancel = () => {\r\n trackPromise(\r\n jobService.CancelJob(this.props.jobDetails.id).then(response => {\r\n if(response) {\r\n toast.success(\"Job has been cancelled.\",{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n this.toggleJobCancelDrawer();\r\n this.props.toggleDrawer(true);\r\n } else {\r\n toast.error(\"Error occured. Please try again.\",{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n }).catch(error => {\r\n toast.error(\"Error occured. Please try again.\",{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n })\r\n )\r\n };\r\n\r\n toggleJobCancelDrawer = () => {\r\n if (this.isAwarded() || (this.props.jobDetails.tradees.length > 0 && !this.isDraftedJob())) {\r\n\r\n const tradeOption = this.props.jobDetails.targetedTradeeOption === 2\r\n ? \"awarded\"\r\n : \"sent for quotes\";\r\n\r\n const message = localStorage.getItem(\"userType\") == UserType.Tenant\r\n ? \"please contact your property manager to cancel the job.\"\r\n : \"hence it cannot be canceled.\";\r\n\r\n toast.info(`The job has been ${tradeOption}, ${message}`, {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n }\r\n else {\r\n this.setState(state => ({\r\n showJobCancelDrawer: !this.state.showJobCancelDrawer\r\n }));\r\n }\r\n };\r\n\r\n isAwarded() {\r\n return this.props.jobDetails.workflowStatusId == 4;\r\n }\r\n\r\n isDraftedJob() {\r\n return this.props.jobDetails.workflowStatusId == 1;\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n isRefresh: state.MyJobs.isRefreshGrid\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n refreshGrid: isRefresh => {\r\n dispatch({ type: \"REFRESH_GRID\", isRefresh: isRefresh });\r\n }\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(JobCancelDrawer);\r\n","import axios from \"axios\";\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\n\r\nconst apiendpoint = AppConfiguration.Setting().Translate_API;\r\nconst allowDynamicTranslate = AppConfiguration.Setting().AllowDynamicTranslate;\r\n\r\nconst translate = (requestModel) => {\r\n delete axios.defaults.headers.get[\"ClientSecret\"];\r\n delete axios.defaults.headers.post[\"ClientSecret\"];\r\n\r\n const promise = new Promise((resolve, reject) => {\r\n if (requestModel.targetCode != requestModel.sourceCode && allowDynamicTranslate) {\r\n return axios.post(apiendpoint, requestModel, null).then((res) => {\r\n resolve(res.data);\r\n });\r\n } else resolve([]);\r\n });\r\n return promise;\r\n};\r\n\r\nconst translateService = {\r\n translate,\r\n};\r\n\r\nexport default translateService;\r\n","import React, { useState } from \"react\";\r\n\r\n// Plugins\r\nimport { toast } from \"react-toastify\";\r\nimport { registerPlugin, FilePond } from \"react-filepond\";\r\nimport FilePondPluginImageExifOrientation from \"filepond-plugin-image-exif-orientation\";\r\nimport FilePondPluginImagePreview from \"filepond-plugin-image-preview\";\r\nimport \"filepond-plugin-image-preview/dist/filepond-plugin-image-preview.css\";\r\nimport { withTranslation, Trans } from 'react-i18next';\r\n\r\n// Components\r\nimport Drawer from \"../../Common/Drawer/Drawer\";\r\n\r\n// Styles\r\nimport \"./AttachmentsDrawer.scss\";\r\n\r\nregisterPlugin(FilePondPluginImageExifOrientation, FilePondPluginImagePreview);\r\nclass AttachmentsDrawer extends React.Component {\r\n state = {\r\n attachments: [],\r\n showAttachmentsDrawer: false,\r\n isFromBot:this.props.isFromBot?true:false,\r\n isFromAsset:this.props.isFromAsset?true:false,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n return <>{drawer};\r\n }\r\n\r\n createDrawer = () => {\r\n let header = this.createHeader();\r\n let body = this.createBody();\r\n let footer = this.createFooter();\r\n const { t , isFromBot , isFromVariation} = this.props;\r\n return (\r\n <>\r\n {(this.props.isJobPosted) ? : <>\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n {isFromVariation ?\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 createHeader = () => {\r\n const { t, isFromBot } = this.props;\r\n return (\r\n <>\r\n

\r\n {/* {this.props.title} */}\r\n {isFromBot ? t('hdr_attachment_drawer') : 'Add Attachments'}\r\n

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createBody = () => {\r\n const files = this.getUploadedImages();\r\n const { t, isFromBot, isFromAsset} = this.props;\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n \"upload-icon\"\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n (this.pond = ref)}\r\n name={\"filepond--browser\"}\r\n type={\"remote\"}\r\n files={this.state.attachments}\r\n allowMultiple={true}\r\n server={{\r\n process: (\r\n fieldName,\r\n file,\r\n metadata,\r\n load,\r\n error,\r\n progress,\r\n abort,\r\n transfer,\r\n options\r\n ) => {\r\n\r\n if (file.name.includes('.msg') || file.name.includes('.eml') || file.type === 'message/rfc822' || file.name.includes('.mp3')) {\r\n toast.error('Please Select valid types of file.', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n abort();\r\n return;\r\n }\r\n\r\n if (isFromAsset && (file.name.includes('.mp4') || file.name.includes('.mov') || file.name.includes('.csv') || file.name.includes('.mp3'))) {\r\n toast.error('Please Select valid types of file.', {\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n abort();\r\n return;\r\n }\r\n const formData = new FormData();\r\n formData.append(\"file\", file);\r\n const request = new XMLHttpRequest();\r\n const attComponent = this;\r\n if(this.props.isFromVariation){\r\n request.open(\r\n \"POST\",\r\n `/tenant-api/file-upload?id=${\r\n this.props.jobDetails.id\r\n }&persist=false&userId=${localStorage.getItem(\"userId\")}`\r\n );\r\n }\r\n else if(this.props.isExternal){\r\n request.open(\r\n \"POST\",\r\n `/tenant-api/file-upload?id=${\r\n this.props.jobDetails.id\r\n }&persist=${!this.props\r\n .isJobPost}&attachmentType=${this.props.isJobPost ? 3 : 0}&userId=${this.props.jobDetails.serviceConsumerId}`);\r\n }\r\n else if(this.props.isFromAsset){\r\n request.open(\r\n \"POST\",\r\n `/tenant-api/file-upload?id=${\r\n this.props.assetId\r\n }&persist=${false}&attachmentType=0&userId=${this.props.assetSubmittedUserId}`);\r\n }\r\n else{\r\n request.open(\r\n \"POST\",\r\n `/tenant-api/file-upload?id=${\r\n this.props.jobDetails.id\r\n }&persist=${!this.props\r\n .isJobPost}&attachmentType=${this.props.isJobPost ? 3 : 0}&userId=${localStorage.getItem(\"userId\")}`\r\n );\r\n }\r\n\r\n\r\n // Should call the progress method to update the progress to 100% before calling load\r\n // Setting computable to false switches the loading indicator to infinite mode\r\n request.upload.onprogress = e => {\r\n progress(e.lengthComputable, e.loaded, e.total);\r\n };\r\n\r\n // Should call the load method when done and pass the returned server file id\r\n // this server file id is then used later on when reverting or restoring a file\r\n // so your server knows which file to return without exposing that info to the client\r\n request.onload = function () {\r\n if (request.status >= 200 && request.status < 300) { \r\n let result = JSON.parse(request.responseText);\r\n if (result && result.status==10){\r\n toast.error(result.message,{\r\n position: toast.POSITION.BOTTOM_RIGHT\r\n });\r\n error();\r\n abort();\r\n return;\r\n }\r\n // the load method accepts either a string (id) or an object\r\n load(request.responseText);\r\n attComponent.state.attachments.push(\r\n JSON.parse(request.response)\r\n );\r\n } else {\r\n // Can call the error method if something is wrong, should exit after\r\n error(\"oh no\");\r\n }\r\n };\r\n\r\n request.send(formData);\r\n\r\n // Should expose an abort method so the request can be cancelled\r\n return {\r\n abort: () => {\r\n // This function is entered if the user has tapped the cancel button\r\n request.abort();\r\n\r\n // Let FilePond know the request has been cancelled\r\n abort();\r\n }\r\n };\r\n },\r\n revert: (uniqueFileId, load, error) => {\r\n let attComponent = this;\r\n const request = new XMLHttpRequest();\r\n let fileObj = JSON.parse(uniqueFileId);\r\n request.open(\r\n \"GET\",\r\n `/tenant-api/delete-file?fileId=${fileObj.fileId}`\r\n );\r\n\r\n request.onload = function () {\r\n if (request.status >= 200 && request.status < 300) {\r\n // the load method accepts either a string (id) or an object\r\n load();\r\n let att = attComponent.state.attachments.filter(a => {\r\n return a.fileId != fileObj.fileId;\r\n });\r\n attComponent.state.attachments = att;\r\n } else {\r\n // Can call the error method if something is wrong, should exit after\r\n error(\"oh no\");\r\n }\r\n };\r\n\r\n request.send();\r\n\r\n return {\r\n abort: () => {\r\n // This function is entered if the user has tapped the cancel button\r\n request.abort();\r\n }\r\n };\r\n // Can call the error method if something is wrong, should exit after\r\n //{/* error(\"oh my goodness\"); */ }\r\n // Should call the load method when done, no parameters required\r\n }\r\n }}\r\n oninitfile={() => this.handleInit()}\r\n labelIdle={isFromBot ? t('hdr_lbl_drop_attchmnt_here') + \" (.jpg, .jpeg, .png, .gif, .mp4, .csv, .pdf, .mov, .tiff)\" : (isFromAsset)?'Drop attachment(s) here to upload or browse (.jpg, .jpeg, .png, .pdf)': 'Drop attachment(s) here to upload or browse' + \" (.jpg, .jpeg, .png, .gif, .mp4, .csv, .pdf, .mov, .tiff)\"}\r\n >\r\n
\r\n {files}\r\n
\r\n );\r\n };\r\n\r\n getUploadedImages = () => { \r\n if (!this.state.isFromAsset && this.props.jobDetails.hasOwnProperty(\"attachments\")) {\r\n const uploadedFiles = this.state.attachments.map(file => {\r\n return
\r\n \"\"\r\n
;\r\n });\r\n }\r\n };\r\n\r\n createFooter = () => {\r\n const { t, isFromBot } = this.props;\r\n return (\r\n <>\r\n
\r\n \r\n \r\n {\" \"}\r\n {isFromBot ? t('btn_cancel') : 'Cancel'}{\" \"}\r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n onAttachToPost = () => { \r\n \r\n if(this.props.isFromAsset){\r\n this.setAsstJobAttachments();\r\n return;\r\n }\r\n\r\n this.state.attachments.forEach(element => {\r\n this.props.jobDetails.attachments.push(element);\r\n });\r\n this.props.onSubmitAttachments( this.props.jobDetails.attachments);\r\n this.toggleAttachmentsDrawer();\r\n\r\n };\r\n\r\n setAsstJobAttachments=()=>{\r\n this.state.attachments.forEach(element => {\r\n this.props.assetAttachments.push(element);\r\n });\r\n this.props.onSubmitAttachments( this.props.assetAttachments );\r\n this.toggleAttachmentsDrawer();\r\n }\r\n \r\n handleInit = (file) => {\r\n };\r\n\r\n toggleAttachmentsDrawer = () => {\r\n this.setState({ attachments: [] });\r\n this.setState({\r\n showAttachmentsDrawer: !this.state.showAttachmentsDrawer\r\n });\r\n };\r\n}\r\n\r\nexport default withTranslation()(AttachmentsDrawer);\r\n","import { AXIOS } from '../Utilities/HttpRequest/Axios';\r\nimport { AppConfiguration } from \"read-appsettings-json\";\r\n\r\nconst getQoutesByJobId = (jobId, userId) => {\r\n return AXIOS.GET(`tenant-api/bids?jobId=${jobId}&userId=${userId}`);\r\n}\r\n\r\nconst approveBidByOwner = (jobId, bidId, note) => {\r\n return AXIOS.GET(`tenant-api/bid/approve-bid?jobId=${jobId}&userId=${localStorage.getItem('userIdDecripted')}&bidId=${bidId}&userIdEncrypted=${localStorage.getItem('exernalUserId')}¬e=${note}`);\r\n}\r\n\r\nconst declineAllBidsByOwner = (jobId, note) => {\r\n return AXIOS.GET(`tenant-api/bid/decline-all-quotes-by-owner?jobId=${jobId}&userId=${localStorage.getItem('userIdDecripted')}&userIdEncrypted=${localStorage.getItem('exernalUserId')}¬e=${note}`);\r\n}\r\n\r\nconst acceptTenantMangeQuote = (model) => {\r\n return AXIOS.POST(`tenant-api/consumer-type/accept-quote`,model);\r\n}\r\n\r\nconst rejectTenantMangeQuote = (model) => {\r\n return AXIOS.POST(`tenant-api/consumer-type/reject-quote`,model);\r\n}\r\n\r\nconst bidService = {\r\n getQoutesByJobId,\r\n approveBidByOwner,\r\n declineAllBidsByOwner,\r\n acceptTenantMangeQuote,\r\n rejectTenantMangeQuote\r\n}\r\n\r\nexport default bidService;","import React, { useState } from 'react';\r\nimport Drawer from \"../../../Common/Drawer/Drawer\"\r\n\r\nclass Disclaimer extends React.Component {\r\n state = {\r\n isFromBot:this.props.isFromBot?true:false,\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n let drawer = this.createDrawer();\r\n return
{drawer}
;\r\n }\r\n\r\n createDrawer = () => {\r\n let header = this.createHeader();\r\n let body = this.createBody();\r\n let footer = this.createFooter();\r\n return (\r\n <>\r\n \r\n \r\n );\r\n };\r\n\r\n createHeader = () => {\r\n return (\r\n <>\r\n

\r\n Disclaimer\r\n

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n );\r\n };\r\n\r\n createBody = () => {\r\n if(this.props.showDrawer) {\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n )\r\n } else {\r\n return;\r\n }\r\n };\r\n\r\n createFooter = () => {\r\n return (\r\n <>\r\n
\r\n \r\n \r\n
\r\n \r\n )\r\n }\r\n\r\n onAgree = () => {\r\n this.props.onAgreedForDisclaimer(this.props.jobPostWorkflowStatus);\r\n this.closeDrawer();\r\n }\r\n\r\n closeDrawer = () => {\r\n this.props.onCloseDisclaimer();\r\n }\r\n \r\n}\r\n\r\ndocument.body.classList.add('disclaimer');\r\nexport default Disclaimer;"],"sourceRoot":""}