{"version":3,"sources":["todos/actionTypes.js","todos/todoReducers.js","sectioncards/actionTypes.js","sectioncards/sectionCardReducer.js","api/apiClient.js","logging/logService.js","configuration/appConfiguration.js","configuration/getAppUrl.js","session/sessionToken.js","shared/rateLimiter.js","shared/spinner/materialSpinner.jsx","shared/spinner/materialSpinnerPanel.jsx","shared/error/errorBoundry.js","shared/error/ErrorCard.jsx","shared/formatters/formatPhoneNumber.js","shared/foundation/reinitEqualizer.js","shared/geocoding/actionTypes.js","shared/geocoding/actions.js","shared/geocoding/geocodeReducer.js","session/keepAlive.js","logging/logActions.js","chat/popup/header.jsx","demographics/phoneNumber.js","chat/signin/signInComponent.jsx","chat/error/errorComponent.jsx","chat/topics/topicMenu.jsx","chat/popup/loading.jsx","chat/agentwait/contactUsMessage.jsx","chat/agentwait/noAgentsAvailable.jsx","chat/agentwait/pleaseWait.jsx","chat/agentwait/queueStatus.jsx","chat/agentwait/agentWaitScreenComponent.jsx","chat/chatmessage/chatMessageType.js","chat/chatmessage/messageHeader.jsx","chat/chatmessage/chatMessage.jsx","chat/chatmessage/infoMessage.jsx","services/clientServicesActionTypes.js","services/clientServicesActions.js","services/clientServicesReducer.js","services/serviceTypeSettingsArray.js","services/loadServiceSettings.js","chat/chatServiceSettings.js","chat/store/actionTypes.js","chat/store/actions.js","chat/store/menuActions.js","chat/store/chatReducer.js","chat/store/agentStatusActions.js","chat/view/chatViewComponent.jsx","chat/store/messageActions.js","chat/services/messages/apiVersion.js","chat/services/messages/messageTypes.js","chat/services/messages/pingMessage.js","chat/services/pingService.js","chat/services/messages/chatMessage.js","chat/services/messages/closeRequest.js","chat/services/messages/intrinsics.js","chat/services/messages/loginMessage.js","chat/services/messages/notificationTypes.js","chat/services/messages/queueStatusRequestMessage.js","chat/services/messages/userIsTypingMessage.js","chat/services/avayaChatService.js","chat/chatComponent.jsx","chat/services/messages/getHoldMessages.js","chat/chatUser.js","chat/popup/chatPopUp.jsx","members/actionTypes.js","members/memberReducer.js","members/attestations/actionTypes.js","members/attestations/actions.js","members/attestations/memberAttestationReducer.js","members/attestations/attestationTypes.js","organizations/actionTypes.js","organizations/organizationReducer.js","clients/actionTypes.js","clients/clientReducer.js","analytics/actionTypes.js","analytics/analyticsReducer.js","faxes/history/actionTypes.js","faxes/history/faxHistoryReducer.js","faxes/history/faxHistoryCard.js","faxes/history/actions.js","faxes/recipients/actionTypes.js","faxes/recipients/faxRecipientsReducer.js","faxes/recipients/actions.js","faxes/recipients/confirmationModal.js","faxes/recipients/faxRecipientsCard.js","faxes/recipients/faxRecipientSelector.js","images/trashIcon.png","images/editIcon.png","faxes/recipients/faxRecipientModal.js","shared/validation/index.js","faxes/biometricsreport/getBiometricsMeasurementsList.js","faxes/biometricsreport/biometricsSelectionCard.js","faxes/biometricsreport/actionTypes.js","faxes/biometricsreport/actions.js","faxes/biometricsreport/authorizationModal.js","faxes/biometricsreport/sendFaxView.js","faxes/biometricsreport/biometricsFaxView.js","biometrics/actionTypes.js","biometrics/actions.js","biometrics/biometricsReducer.js","faxes/biometricsreport/loadBiometricsFaxView.js","faxes/biometricsreport/biometricsReportReducer.js","healthnavigator/store/actionTypes.js","healthnavigator/store/healthNavigatorReducer.js","healthnavigator/store/episodeActions.js","healthnavigator/store/providerActions.js","healthnavigator/store/resetResultAction.js","healthnavigator/store/groupProcedureProviders.js","healthnavigator/store/selectedNetworkAction.js","healthnavigator/searchType.js","healthnavigator/search/networksModal.jsx","healthnavigator/search/episodeTypeahead.jsx","healthnavigator/search/providerTypeahead.jsx","healthnavigator/search/search.jsx","healthnavigator/search/hero.jsx","healthnavigator/results/profile.jsx","healthnavigator/results/upswingCard.jsx","healthnavigator/results/helper.js","healthnavigator/updateSelectedProvider.js","healthnavigator/results/spineprogram/spineContact.jsx","healthnavigator/results/spineprogram/spineProvider.jsx","healthnavigator/results/spineprogram/spineProviders.jsx","healthnavigator/store/spineProviderActions.js","healthnavigator/results/spineprogram/spineProgramCard.jsx","healthnavigator/store/spineIncentiveActions.js","healthnavigator/results/procedures.jsx","healthnavigator/results/procedureTable.jsx","healthnavigator/results/incentive.jsx","healthnavigator/results/providerLists.jsx","healthnavigator/results/fullDetails.jsx","healthnavigator/results/filterResults.jsx","healthnavigator/results/procedureResults.jsx","healthnavigator/results/providerResults.jsx","healthnavigator/results/facilityResults.jsx","healthnavigator/legend.jsx","healthnavigator/results/results.jsx","healthnavigator/healthNavigatorView.jsx","healthnavigator/loadHealthNavigator.js","healthnavigator/store/networkActions.js","organizationConfigurations/actionTypes.js","organizationConfigurations/actions.js","organizationConfigurations/organizationConfigurationsReducer.js","contentExclusions/actionTypes.js","contentExclusions/actions.js","contentExclusions/contentExclusionsReducer.js","incentives/mypoints/loadingSelector.js","antiforgery/antiForgeryToken.js","incentives/mypoints/tooltip.jsx","incentives/mypoints/section.jsx","incentives/programs/actionTypes.js","incentives/programs/actions.js","incentives/programs/incentiveProgramsReducer.js","incentives/programs/getCurrentProgram.js","incentives/mypoints/loadSectionData.js","incentives/mypoints/pointsCompleted.jsx","incentives/mypoints/images/trackerIconNew.png","incentives/mypoints/images/workshopIconNew.png","incentives/mypoints/images/customChalGeneric.png","incentives/mypoints/images/pointsCompletedBkg.jpg","incentives/mypoints/earnPoints.jsx","incentives/memberScoreDetails/actionTypes.js","incentives/memberScoreDetails/memberScoreDetailsReducer.js","incentives/memberScoreDetails/actions.js","incentives/mypoints/pointsEarned.jsx","incentives/mypoints/loadPointsEarned.js","incentives/mypoints/programSummary.jsx","incentives/mypoints/header.jsx","incentives/mypoints/myPoints.jsx","incentives/mypoints/loadHeaderDetails.js","incentives/mypoints/images/wellnessLogo.png","incentives/mypoints/prototype/incentiveWidgetTest.jsx","incentives/mypoints/prototype/levelCardTest.jsx","incentives/mypoints/prototype/programInfoCardTest.jsx","incentives/mypoints/prototype/headerTest.jsx","incentives/mypoints/prototype/modalTemplate.jsx","incentives/mypoints/prototype/combinedTab.jsx","incentives/mypoints/prototype/programSummaryTest.jsx","incentives/mypoints/prototype/myPointsUtView.jsx","incentives/widget/actionTypes.js","incentives/widget/actions.js","incentives/mypoints/prototype/loadMyPointsUt.js","incentives/rules/actionTypes.js","incentives/rules/actions.js","incentives/rules/incentiveRulesReducer.js","incentives/memberScores/actionTypes.js","incentives/memberScores/memberScoresReducer.js","incentives/memberScores/actions.js","incentives/buttonLinks/actionTypes.js","incentives/buttonLinks/buttonLinksReducer.js","incentives/buttonLinks/actions.js","incentives/documentLinks/actionTypes.js","incentives/documentLinks/documentLinksReducer.js","incentives/documentLinks/actions.js","incentives/linkedRules/actionTypes.js","incentives/linkedRules/linkedRulesReducer.js","incentives/linkedRules/actions.js","incentives/sections/actionTypes.js","incentives/sections/sectionsReducer.js","incentives/sections/actions.js","incentives/tierDetails/actionTypes.js","incentives/tierDetails/tierDetailsReducer.js","incentives/tierDetails/actions.js","incentives/memberTierDetails/actionTypes.js","incentives/memberTierDetails/memberTierDetailsReducer.js","incentives/memberTierDetails/actions.js","incentives/mypoints/loadMyPointsComponent.js","incentives/mypoints/actions.js","incentives/widget/programStatusType.js","incentives/widget/programDetails.js","incentives/widget/incentivesReducer.js","store/rootReducer.js","store/configureStore.js","registerServiceWorker.js","sectioncards/sectionCard.js","sectioncards/cardLoadingPlaceholder.js","sectioncards/sectionErrorCard.js","sectioncards/section.js","sectioncards/selectors.js","sectioncards/sectionConfig.js","sectioncards/actions.js","sectioncards/loadSectionCardComponents.js","debugApp.jsx","todos/actions.js","todos/selectors.js","incentives/widget/pointsMeter.js","todos/todoTypes.js","todos/timeTradeTodoItem.js","todos/scheduleWellnessCoachTodoItem.js","todos/routeRedirectMap.js","todos/todoItem.js","todos/todoRenderFactory.js","todos/requiredToDoList.js","incentives/widget/statusPane.js","rewards/rewardsProgramSummary.jsx","incentives/widget/summaryPanel.js","todos/todoLoadingAnimation.jsx","todos/todoList.js","todos/todoDropDown.jsx","chat/mount/chatMount.jsx","chat/mount/loadingSelector.js","chat/mount/errorSelector.js","chat/mount/wellnessQueueSelector.js","chat/buttons/menuChatButton.jsx","chat/buttons/wellnessChatButton.jsx","chat/loadChatComponent.js","members/actions.js","organizations/actions.js","clients/actions.js","analytics/actions.js","quicklinks/links.js","quicklinks/quickLinksItem.jsx","quicklinks/quickLinksItems.jsx","quicklinks/quickLinksView.jsx","coronavirusselfchecker/selfCheckerQuestionnaire.jsx","coronavirusselfchecker/selfCheckerCertificate.jsx","coronavirusselfchecker/checkerStatusTypes.js","coronavirusselfchecker/history/noAttestationHistory.jsx","coronavirusselfchecker/attestationBody.js","coronavirusselfchecker/history/selfCheckerHistory.jsx","coronavirusselfchecker/questionnaire.js","coronavirusselfchecker/selfCheckerHelpModal.jsx","coronavirusselfchecker/selfCheckerTemperatureModal.jsx","coronavirusselfchecker/attestationForm.jsx","coronavirusselfchecker/coronavirusSelfCheckerView.jsx","coronavirusselfchecker/loadCoronavirusSelfChecker.js","prescriptionDiscountCard/discountCard.js","prescriptionDiscountCard/rxCardContent.js","index.js","todos/loadTodosComponent.js","incentives/widget/loadIncentiveSummaryComponent.js","quicklinks/loadQuickLinksComponent.js","prescriptionDiscountCard/loadPrescriptionDiscountCard.js"],"names":["LOAD_TODOS_SUCCESS","LOAD_TODOS_FAILED","initialState","todos","loading","error","LOAD_SECTION_CARDS_SUCCESS","LOAD_SECTION_CARDS_FAILED","cards","eapWorklifeRootUrl","eapBrandingName","eapSectionCardDescription","ApiClient","apiRootUrl","sessionToken","this","endpoint","url","axios","create","headers","createSecureHeaders","get","data","post","put","delete","patch","Authorization","postLogEntry","browser","applicationName","logLevel","className","functionName","message","client","logEntry","LogLevel","ServerName","serverName","length","replace","split","parseServerName","BrowerVersion","ApplicationName","Class","Function","ErrorMessage","LogService","navigator","browserType","uaparser","UAParser","getResult","name","version","appName","rootImagePath","window","siteRootUrl","AppConfiguration","imageSubUrl","path","console","warn","isNativeApp","biometricsRootUrl","getAppUrl","getAppTarget","currentTarget","toLowerCase","getSessionToken","updateSessionToken","token","RateLimiter","wait","isCalled","fn","setTimeout","MaterialSpinner","props","show","width","height","viewBox","xmlns","fill","strokeWidth","strokeLinecap","cx","cy","r","Component","defaultProps","MaterialSpinnerPanel","ErrorBoundry","state","hasError","info","errorMessage","children","ErrorCard","formatPhoneNumber","phoneNumber","substr","reinitEqualizer","Foundation","reInit","LOAD_GEOCODE_ADDRESS_SUCCESS","LOAD_GEOCODE_ADDRESS_FAILED","loadGeocodeAddress","latitude","longitude","logError","getApiRootUrl","dispatch","Promise","resolve","a","apiResult","address","loadGeocodeAddressSuccess","loadGeocodeAddressFailed","type","types","keepAliveLimiter","keepAlive","limit","pingUrl","getSiteRootUrl","then","result","resetTimeoutWarningTimer","resetTimeoutTimer","componentPath","getAppName","errorString","toString","Header","imageUrl","getImagePath","errorUrl","src","alt","title","connectivityError","onClick","e","closeButtonClicked","PhoneNumber","phoneNumberString","areaCode","prefix","lineNumber","cleanPhone","trim","map","x","isNaN","parseInt","filter","join","SignInForm","submitLogin","event","preventDefault","stopPropagation","validateForm","phone","user","firstName","lastName","company","area","number","email","setUser","firstNameError","lastNameError","phoneError","emailError","firstNameValid","validateFirstName","lastNameValid","validateLastName","phoneValid","validatePhone","emailValid","validateEmail","setState","RegExp","test","noValidate","validated","onSubmit","description","small","required","onChange","target","value","id","showFieldError","placeholder","maxlength","onKeyPress","which","variant","ErrorComponent","TopicMenu","topics","getTopic","topic","queue","trackEvent","topicSelected","text","ReactGa","category","action","queueType","LoadingComponent","style","display","alignItems","justifyContent","ContactUsMessage","contactUrl","href","NoAgentsAvailable","contactPhoneNumber","PleaseWait","userDisplayName","QueueStatus","estimatedWaitTime","AgentWaitScreenComponent","imagePath","useSelector","chat","agentsAvailable","inChatTimeWindow","ChatMessageType","agentMessageType","userMessageType","infoMessageType","MessageHeader","time","fontWeight","bubbleClassMap","infoClassMap","ChatMessage","InfoMessage","LOAD_CLIENT_SERVICES_SUCCESS","LOAD_CLIENT_SERVICES_FAILED","loadClientServicesSuccess","clientServices","loadClientServicesFailed","list","ServiceTypeSettingsArray","settingsArray","lookupCode","i","loadServiceSettings","hacClientServiceCode","apiClient","SessionToken","ChatServiceSettings","chatUrl","restUrl","callbackUrl","pingIntervalMs","queueStatusIntervalMs","valid","LOAD_CHAT_SUCCESS","LOAD_CHAT_FAILED","SHOW_MENU_CHAT","SHOW_WELLNESS_CHAT","HIDE_CHAT","LOAD_HOLD_MESSAGES","APPEND_MESSAGE","RESET_CHAT_SESSION","UPDATE_AGENT_IS_TYPING","UPDATE_PARTICIPANTS","UPDATE_AGENTS_AVAILABLE","UPDATE_ESTIMATED_WAIT_TIME","getChatResult","results","serviceSettingsArray","serviceSettings","getSettingValue","queues","loadTopics","Result","ChatTopicId","Queue","displayOrder","DisplayOrder","Text","QueueType","sort","b","loadQueues","Name","Description","loadChatSuccess","loadChatFailed","hideChat","visible","agentTyping","chatInProgress","showWaiting","chatVisible","messages","participants","updateAgentsAvailable","ChatViewComponent","scrollToBottom","messagesEnd","current","scrollIntoView","behavior","getAgentTypeingAnimation","handleSubmit","currentMessage","sendMessage","appendUserMessage","handleChatInputChange","userIsTyping","currentDateString","moment","Date","format","React","createRef","waiting","ref","maxLength","disabled","canSendChat","inline","connect","index","messageText","ApiVersion","MessageTypes","request","newChatAcknowledgement","acknowledgement","notification","PingMessage","apiVersion","body","method","stopPingService","pingInterval","clearInterval","sendPing","socket","closed","next","CloseRequest","Intrinsics","userName","skillset","memberId","organizationId","topicText","country","customFields","push","LoginMessage","guid","authenticationKey","requestTranscript","intrinsics","NotificationMessageType","requestChat","callBack","newParticipant","isTyping","newMessage","closeConversation","participantLeave","newPushPageMessage","queueStatus","ping","QueueStatusRequestMessage","UserIsTypingMessage","AvayaChatService","chatServiceUrl","_socketMessageHandler","_errorMessageHandler","_notificationMessageHandler","errorObservable","pingIntervalId","openObservable","closeObservable","messageObservable","socketObservable","_createSocket","Subject","webSocket","openObserver","closeObserver","subscribe","msg","_logServerMessage","socketMessageObservable","err","intervalMs","setInterval","skillSet","_sendMessage","_disconnect","complete","observerRole","ChatComponent","loginUser","observables","avayaChatService","messageEvent","closeEvent","errorEvent","login","stopQueueStatusInterval","setConnectivityError","notificationType","agentIsTyping","participantLeft","queueStatusUpdate","updateEstimatedWaitTime","loadHoldMessages","webOnHoldGroups","holdMessages","delay","holdGroup","group","groupName","sequence","getHoldMessages","webOnHoldComfortGroups","stopIdleComfortMessages","updateParticipants","role","appendInfoMessage","displayName","endChatFlag","participant","getParticipant","agentId","startIdleComfortMessages","intervalSeconds","holdMessageDelay","comfortIntervalId","iterateHoldMessage","appendAgentMessage","comfortSequence","timestamp","updateAgentIsTyping","clearAnimationTimer","animationStopTimerId","stopAgentTypingAnimation","clearTimeout","sendChatMessage","isTypingMessageRateLimiter","sendUserIsTyping","sendQueueStatusRequest","eventEmitter","quitChat","cleanupConnections","resetChatSession","emit","startQeueStatusInterval","queueStatusIntervalId","agentCheckIntervalId","initializeConnections","startAgentCheckInterval","stopAgentCheckInterval","validate","filteredList","checkIfAgentsAvailable","agentsAreAvailableCallback","holdMessageResult","agentName","available","queueName","agentsAvailableCallback","availableAgentsInQueue","ChatUser","member","getUserName","primaryEmail","primaryPhone","ChatPopUp","handleBeforeUnload","returnValue","selectedTopic","chatUser","addEventListener","removeEventListener","requiresLogin","organization","userForm","content","getUser","getQueue","bind","setUserFromLoginScreen","LOAD_MEMBER_SUCCESS","LOAD_MEMBER_FAILED","REQUEST_ADD_ATTESTATION","ADD_ATTESTATION_SUCCESS","ADD_ATTESTATION_FAILED","REQUEST_LOAD_ATTESTATIONS","LOAD_ATTESTATIONS_SUCCESS","LOAD_ATTESTATIONS_FAILED","addAttestation","attestationText","temperatureFahrenheit","attestationType","requestAddAttestation","attestationAddSuccess","attestationAddFailed","attestation","requestLoadAttestations","attestationsLoadSuccess","attestations","attestationsLoadFailed","byType","adding","addError","CoronaVirusSelfCheckerType","LOAD_ORGANIZATION_SUCCESS","LOAD_ORGANIZATION_FAILED","LOAD_CLIENT_SUCCESS","LOAD_CLIENT_FAILED","LOAD_ANALYTICS_SUCCESS","LOAD_ANALYTICS_FAILED","trackingParams","LOAD_FAX_HISTORY_SUCCESS","LOAD_FAX_HISTORY_FAILED","pending","FaxHistoryCard","faxHistory","EmptyHistory","color","Colors","PRIMARY","FaxHistoryTable","fax","memberFaxId","HistoryRow","memberSignOffDate","fullName","documentTitle","faxStatus","showProgress","status","loadFaxHistory","convertResult","loadFaxHistorySuccess","faxesPending","loadFaxHistoryFailed","faxHistoryIntervalId","startHistoryRefresh","refreshTimeout","faxes","externalFaxId","MemberFaxId","MemberId","memberDocumentId","MemberDocumentId","ExternalFaxId","FirstName","LastName","faxNumber","FaxNumber","lastStatusDate","LastStatusDate","FaxStatus","MemberSignOffDate","DocumentTitle","LOAD_FAX_RECIPIENTS_SUCCESS","LOAD_FAX_RECIPIENTS_FAILED","ADD_FAX_RECIPIENT_FAILED","ADD_FAX_RECIPIENT_SUCCESS","REQUEST_ADD_FAX_RECIPIENT","REQUEST_REMOVE_FAX_RECIPIENT","REMOVE_FAX_RECIPIENT_SUCCESS","REMOVE_FAX_RECIPIENT_FAILED","UPDATE_FAX_RECIPIENT_FAILED","UPDATE_FAX_RECIPIENT_SUCCESS","REQUEST_UPDATE_FAX_RECIPIENT","SET_RECIPIENT_CONFLICT_STATUS","RESET_RECIPIENT_CONFLICT_STATUS","newRecipient","addSuccess","addFailure","conflictRecipient","updateRecipient","updating","updateSuccess","updateFailure","removeRecipient","removing","removeSuccess","removeFailure","loadFaxRecipientsSuccess","faxRecipients","convertRecipientList","convertRecipient","memberFaxRecipientId","MemberFaxRecipientId","dateCreated","loadFaxRecipientsFailed","setConflictStatus","addFaxRecipientSuccess","addFaxRecipientFailure","updateFaxRecipientSuccess","recipientId","updateFaxRecipientFailure","removeFaxRecipientSuccess","removeFaxRecipientFailure","ConfirmationModal","useDispatch","overlayClassName","shouldCloseOnOverlayClick","ariaHideApp","isOpen","confirmationModalOpen","onRequestClose","setConfirmationModalOpen","recipient","FaxRecipientsCard","useState","addModalOpen","setAddModalOpen","editExisting","setEditExisting","selectedRecipient","setSelectedRecipient","modalTitle","setModalTitle","setRecipientId","FaxRecipientsTable","recipients","orderedRecipients","RecipientsRow","EmptyRecipients","FaxRecipientModal","onAfterOpen","ValidatedRecipientForm","schema","yup","max","matches","withFormik","enableReinitialize","isInitialValid","mapPropsToValues","validationSchema","values","active","response","isValid","handleChange","handleBlur","onBlur","addBmi","tips","bmi","addBloodGlucoseFasting","bloodGlucoseFasting","addBloodGlucoseRandom","bloodGlucoseRandom","addBodyFatPercentage","bodyFatPercentage","addBloodPressure","diastolic","systolic","addHdl","hdl","addHba1c","hba1c","addHeight","addLdl","ldl","addCotinine","nicotineMetaboliteSerumResult","addPsa","psa","addTsh","tsh","addTotalCholesterol","totalCholesterol","addWaist","waist","addWeight","weight","addSarsCov2NaaDiagnostic","sarsCov2NaaDiagnostic","addSarsCov2Antibody","sarsCov2Antibody","BiometricsSelectionCard","biometrics","setMeasurementDates","measurementDates","EmptyMeasurements","BiometricsTable","BiometricsRow","MeasurementStr","measurementsTooltipText","getBiometricsMeasurementsList","idStr","rowChecked","checked","handleSelectionChange","dateKey","measurementDate","substring","measurementSource","isChecked","newDates","Map","set","SEND_BIOMETRICS_REPORT","SEND_BIOMETRICS_REPORT_SUCCESS","SEND_BIOMETRICS_REPORT_FAILED","requestSendReport","sendReportSuccess","sendReportFailed","AuthorizationModal","authorizationModalOpen","setAuthorizationModalOpen","defaultValue","signedOff","selectedDates","Array","from","MeasurementDates","MemberSignedOff","SendFaxView","sending","biometricsReport","sendFailed","sendSucceeded","cantSend","size","WARNING","SUCCESS","sendPanel","historyPanel","BiometricsFaxView","selectedView","setSeletedView","LOAD_BIOMETRICS_SUCCESS","LOAD_BIOMETRICS_FAILED","loadBiometricsSuccess","ItemID","MeasurementDate","MeasurementDateKey","BloodGlucoseFasting","BloodGlucoseRandom","BodyFatPercentage","Diastolic","HDL","HbA1c","Height","Ldl","labReportOfRecord","LabReportOfRecord","labReportOfRecordId","LabReportOfRecordId","memberBiometricDataIdMostRecent","MemberBiometricDataIDMostRecent","NicotineMetaboliteSerumResult","PSA","Systolic","TSH","TotalCholesterol","Waist","Weight","Source","SARSCoV2NAADiagnostic","SARSCoV2Antibody","loadBiometricsFailed","loadBiometricsFaxView","store","biometricsFaxComponent","document","getElementById","ReactDOM","render","loadBiometrics","loadFaxRecipients","REQUEST_PROVIDER_SEARCH","PROVIDER_SEARCH_SUCCESS","PROVIDER_SEARCH_FAILED","LOAD_EPISODES_SUCCESS","LOAD_EPISODES_FAILED","REQUEST_PROVIDER_LOOKUP","REQUEST_PROVIDER_LOOKUP_SUCCESS","REQUEST_PROVIDER_LOOKUP_FAILED","PROVIDER_RESET_SUCCESS","LOAD_NETWORKS_SUCCESS","LOAD_NETWORKS_FAILED","PROVIDER_NETWORK_SUCCESS","GET_SPINE_PROVIDERS_START","GET_SPINE_PROVIDERS_SUCCESS","GET_SPINE_PROVIDERS_FAILED","GET_SPINE_INCENTIVES_START","GET_SPINE_INCENTIVES_SUCCESS","GET_SPINE_INCENTIVES_FAILED","RESET_SPINE_INCENTIVES","RESET_SPINE_PROVIDERS","searching","searchResults","loadingEpisodes","loadEpisodesError","episodes","loadingNetworks","loadNetworksError","networks","matchingProviders","findingProviders","findingProvidersError","providerLookupType","providerNetwork","loadingSpineProviders","loadSpineProvidersSuccess","loadSpineProvidersError","spineSearchResults","providers","loadingSpineIncentives","loadSpineIncentivesError","spineIncentives","loadEpisodesSuccess","addEpisodeNameToSearchTerms","forEach","episode","searchTerms","getProviderById","tin","npi","networkId","lat","lon","requestProviderSearch","providerSearchSuccess","providerSearchFailed","providerLookup","lookupType","filterText","requestProviderLookup","providerLookupSuccess","providerLookupFailed","lookupResults","providerReset","searchType","providerResetSuccess","groupProcedureProviders","standAloneProviders","facilityMap","provider","key","facilityName","addressLine1","addressLine2","addressLine3","city","zip","facilityKey","has","groupedProviders","mapFacilityProvider","keys","facilityProviders","facility","credentialSuffix","groupProvidersAtFacility","allProviders","p1","p2","distanceMiles","providerSelectedNetwork","networkID","providerSelectedNetworkSuccess","SearchType","Procedure","Doctor","Facility","ByUniqueId","NetworksModal","selectedNetwork","setShow","closeHandler","providerLink","setProviderLink","healthNavigator","networkSpinner","Spinner","as","animation","selectedNetworkName","network","convertNetworkId","Number","Modal","backdrop","onHide","closeButton","Title","Body","htmlFor","Footer","EpisodeTypeahead","handleFocus","isLoading","setIsLoading","options","setOptions","selected","setSelected","labelKey","inputProps","useCache","minLength","onSearch","inputValue","k","includes","sortOptions","_","orderBy","filterBy","option","clear","searchText","episodeId","onClear","ProviderTypeahead","placeHolder","handleProviderFocus","onInputChange","input","providerTin","providerNpi","searchRadiusList","userZipCode","nullable","zipCode","ValidatedSearchForm","initialErrors","searchRadius","radius","providerSearchType","providerSearch","geocode","setSearchType","userLatitude","setUserLatitude","setSelectedNetwork","userLongitude","setUserLongitude","didFocus","setDidFocus","onGeolocateSuccess","coordinates","coords","setFieldValue","onGeolocateError","searchButtonStyle","backgroundColor","zipCodeLabelVisibility","searchTextLabelVisibility","useEffect","geolocation","getCurrentPosition","Col","Form","Row","Group","controlId","Label","Control","paddingTop","paddingBottom","visibility","stateAbbreviation","undefined","OverlayTrigger","placement","overlay","Popover","currentLocation","Button","Hero","Container","Profile","distanceAway","providerAddress","providerFacilityName","providerName","providerServiceType","providerLatitude","providerLongitude","googleMapsUrl","md","fontSize","verticalAlign","marginRight","UpswingCard","showUpswingCard","find","showOrthopedicTeleProvider","sortResults","sortOrder","hasOwnProperty","sortA","toUpperCase","sortB","compareSort","searchReferenceNumber","str","searchId","updateSelectedProvider","searchResultId","providerId","selectedProviderId","SpineContact","patientCode","travelIncentive","uniqueKeyId","isMobile","clients","SpineProvider","spineProgramProviderId","distance","toFixed","Card","SpineProviders","open","setOpen","spineProviders","showProvidersText","sortedSpineProviders","localeCompare","mappedSpineProviders","Collapse","in","spineResults","actions","SpineProgramCard","showSpineProgramCard","showSpineProgram","baseUrl","spineIncentiveResults","incentiveBody","incentive","incentiveAmount","Procedures","ProcedureTable","procedureName","incentiveRating","procedureDisplay","Incentive","ProviderLists","Table","bordered","responsive","providerList","FullDetails","providerFullDetails","innerWidth","setMobile","updateSreenSize","firstIncentiveRating","firstProcedureName","firstIncentiveAmount","proceduresCount","position","bottom","acceptingPatients","providerListCount","resultType","providerSpecialties","providerGenderDisplay","languageDisplay","FilterResults","providerResultCount","paddingLeft","rel","ProcedureResults","groupedProcedureProviders","getProcedureResults","locationType","primarySpecialty","sortProvidersByLastName","sortIncentivesByName","procedureIncentives","label","isAcceptingPatients","firstIncentiveTableIcon","incentiveLevel","procedure","procedureIndex","incentiveTableIcon","handleShow","credentialSuffixCheck","nameSeparator","incentiveTooltipMessage","incentiveIconTooltip","margin","ProviderResults","providerData","FacilityResults","Legend","Results","searchtype","latLonFromClient","ResultList","HealthNavigatorView","marginTop","loadHealthNavigator","healthNavigatorComponent","loadEpisodes","loadNetworks","LOAD_ORGANIZATION_CONFIGURATIONS_SUCCESS","LOAD_ORGANIZATION_CONFIGURATIONS_FAILED","loadOrganizationConfigurationsSuccess","organizationConfigurations","loadOrganizationConfigurationsFailed","LOAD_CONTENTEXCLUSIONS_SUCCESS","LOAD_CONTENTEXCLUSIONS_FAILED","loadContentExclusionsSuccess","contentExclusions","loadContentExclusionsFailed","loadingSelector","incentivePrograms","incentiveRules","incentiveButtonLinks","incentiveLinkedRules","sections","memberIncentiveScores","getAntiForgeryToken","$","tokenField","first","val","ToolTip","Tooltip","tooltipContent","tooltipTriggerContent","Section","SetUrl","sectionBlock","rules","item","postUrl","tobaccoAffidavitUrl","sectionButton","buttonName","buttonUrl","form","dueDate","pointValue","maxPoints","incentiveruleId","submit","buttonType","dialogClassName","location","reload","allow","LOAD_INCENTIVEPROGRAMS_SUCCESS","LOAD_INCENTIVEPROGRAMS_FAILED","loadIncentivePrograms","loadIncentiveProgramsSuccess","loadIncentiveProgramsFailed","getCurrentProgram","programList","ipoid","program","incentiveProgramOrganizationId","defaultProgram","OP_OR","OP_GRPREQD","OP_GRPMAX","buttonLinkIncentiveCodes","hookLinkedRulesForSections","sectionsList","defaultSection","linkedRules","buttonLinksMap","scoresMap","linkedRule","groupedRules","rule","incentiveRuleLinkId","getDetailsForLinkedRule","operatorLookupCode","sectionId","every","maxMet","getIncentiveRule","buttonLink","buttonDetails","buttonFound","dueDateFound","requiredFound","groupScore","incentiveScore","incentiveRuleId","points","incentiveCode","ruleOverrideEndDate","groupMaxPoints","incentiveRuleLinkName","priority","incentiveRuleLinkDesc","sortSectionsList","Object","entries","ruleCompare","rule1","rule2","trackYourProgressUrl","participateInWorkshopUrl","challengeYourselfUrl","PointsCompleted","noProgramAvailable","ListGroup","Item","EarnPoints","URLSearchParams","search","activeProgram","incentiveProgramId","incentiveRuleDetails","incentiveProgramOrgId","sectionsByProgamId","byProgramId","buttonLinks","byIpoid","section","sectionName","reduce","score","rollupPoints","link","incentiveButtonLink","noSectionsList","concat","rulesCount","loadSectionData","LOAD_MEMBERSCOREDETAILS_SUCCESS","LOAD_MEMBERSCOREDETAILS_FAILED","byRuleId","loadMemberScoreDetailsSuccess","ruleId","memberScoreDetails","PointsEarned","currentPage","setCurrentPage","filterDate","setFilterDate","setRuleId","scoreRollups","buttonLinkLookUpCodes","viewDetailsLookUpCodes","scoreDetails","outcome","hideIncentiveRule","valueText","ruleName","lastActivityDate","eventDate","count","incentiveTypeLookupCode","showViewDetails","incentiveRule","loadPointsEarned","Alert","pastDays","utc","tz","subtract","memScoreDetails","isAfter","pagination","getPagination","paginationData","getPaginationData","Accordion","xs","loadMemberScoreDetails","eventKey","incentiveRuleName","headerDetails","pointsEarned","pageSize","pageCount","Math","ceil","pages","range","Pagination","page","initialPage","reverse","slice","ContextAwareToggle","callback","currentEventKey","useContext","AccordionContext","handleClick","useAccordionToggle","isCurrentEventKey","ProgramSummary","programSummary","incentiveSummaryOverride","linkData","documentLinks","docLinkGenerator","eachLink","pop","urlOverlayText","linksExist","html","allowedAttributes","allowedTags","mypointsUrl","otherPrograms","visiblePrograms","levelArray","numberOfLevels","wellnessLogoNew","imageURL","LevelInfo","tierGraphic","eachLevel","currentLevel","allLevelsComplete","highestTierAchievedMessage","pointsToNextLevel","totalAchievedTiers","currentTierMessage","tierName","startDate","endDate","Dropdown","Toggle","Menu","incentiveProgramDisplayName","stroke","strokeDasharray","strokeDashoffset","CardGroup","MyPoints","tierDetails","memberTierDetails","getVisiblePrograms","tiersByProgramId","memberTiersByIpoid","precedenceOrder","highestTierAchieved","memberTier","achieved","currentTier","tier","incentiveTierId","achievedMsg","pointsForGoalMin","earnedPoints","notAchievedMsg","loadHeaderDetails","showEarnPoints","isSameOrBefore","scroingEndDate","documentLinksByIpoid","getErrorMessage","Tabs","defaultActiveKey","transition","Tab","isSameOrAfter","visibleStartDate","visibleEndDate","IncentiveWidgetTest","pointsEarnedTest","LevelCardTest","currLevel","ProgramInfoCardTest","programDates","setScenario","whichScenario","programDropdownText","HeaderTest","currentScenario","WellnessLogo","ptsToNextLevel","ModalDialogTest","handleClose","AdditionalClass","ButtonLabel","TestLinkDestination","CombinedTabTest","colHeaderOne","colHeaderTwo","colHeaderThree","colHeaderFour","Badge","ProgramSummaryTest","MyPointsUtView","LOAD_INCENTIVE_PROGRAM_STATUS_SUCCESS","LOAD_INCENTIVE_PROGRAM_STATUS_FAILED","loadIncentiveProgramStatus","details","LOAD_PROGRAMRULES_SUCCESS","LOAD_PROGRAMRULES_FAILED","loadProgramRules","programId","requestLoadProgramRules","loadProgramRulesSuccess","loadProgramRulesFailed","LOAD_MEMBERSCORES_SUCCESS","LOAD_MEMBERSCORES_FAILED","loadMemberScoresSuccess","memberScores","loadMemberScores","LOAD_BUTTONLINKS_SUCCESS","LOAD_BUTTONLINKS_FAILED","loadButtonLinksSuccess","loadButtonLinks","LOAD_DOCUMENTLINKS_SUCCESS","LOAD_DOCUMENTLINKS_FAILED","loadDocumentLinksSuccess","loadDocumentLinks","LOAD_LINKEDRULES_SUCCESS","LOAD_LINKEDRULES_FAILED","loadLinkedRulesSuccess","loadLinkedRules","LOAD_SECTIONS_SUCCESS","LOAD_SECTIONS_FAILED","loadSectionsSuccess","loadSections","LOAD_TIERDETAILS_SUCCESS","LOAD_TIERDETAILS_FAILED","loadTierDetailsSuccess","loadTierDetails","LOAD_MEMBERTIERDETAILS_SUCCESS","LOAD_MEMBERTIERDETAILS_FAILED","loadMemberTierDetailsSuccess","loadMemberTierDetails","loadMyPointsComponent","myPointsElement","promises","all","loadCurrentProgram","ProgramStatusType","freeze","NotStarted","InProgress","Complete","TierRequirementsIncomplete","ProgramDetails","pointsToNextTier","tierPoints","isRewardProgram","rewardBalance","rewardLevel","canBrowseRewards","canRedeemRewards","rewardsUrl","apiStatusResult","CurrentTier","EarnedPoints","PointsToNextTier","Status","TierPoints","IsRewardProgram","RewardBalance","RewardLevel","CanBrowseRewards","CanRedeemRewards","RewardsUrl","IncentiveProgramOrganizationId","rootReducer","combineReducers","incentives","sectionCards","menuChatVisible","wellnessChatVisible","members","organizations","analytics","memberAttestations","canAttest","composeEnhancers","composeWithDevTools","middleware","thunk","isLocalhost","Boolean","hostname","match","registerValidSW","swUrl","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","log","catch","SectionCard","cardRef","addCardRef","getCardImage","card","CardImageType","getViewLink","Url","IsModalWindow","ButtonText","IsNewWindow","cardImageType","CardLoadingPlaceholderComponent","SectionErrorCardComponent","eapWorklifeRootUrlType","sectionType","top","getTopCardsForSectionType","config","cardRefs","sectionUrl","browseButtonText","getSectionBackgroundClasses","backgroundClass","byRow","nodes","property","getBrowseButton","getLoading","getCards","isExternalSiteUrl","getTarget","getBrowseUrl","SectionCardID","healthConfig","financeConfig","wellbeingConfig","worklifeConfig","loadSectionCardsSuccess","loadSectionCardComponents","healthCardElement","financeCardElement","wellbeingCardElement","worklifeCardElement","siteCards","SectionCards","EapWorklifeRootUrl","EapBrandingName","EapSectionCardDescription","cardMap","SectionCode","loadSectionCards","coronavirusSelfCheckerTestHarness","maxWidth","padding","todoTestHarness","biometricsFaxesTestHarness","incentiveTestHarness","sectionCardsTestHarness","quickLinksTestHarness","myPointsTestHarness","myPointsUserTestHarness","chatTestHarness","healthNavigatorTestHarness","prescriptionDiscountCardTestHarness","loadTodos","ToDoList","getTopRequiredTodos","topCount","topTodos","topTodosFound","todo","Required","PointsMeter","getTierPercentageSegments","tiers","segments","totalTierPoints","previousTierPoints","getTierPointsMax","isOneTierProgram","totalPoints","fractionCompleted","getFractionCompleted","currentPoints","circumference","getCircumference","fillLineOffset","getFillLine","levelDashArray","getStrokeArray","segmentMargin","getRingText","PI","percentageComplete","dashArray","segment","getJustStarted","getInProgress","getTierRequirementsIncomplete","getComplete","statusText","subtitle","TodoTypes","TimeTradeTodoItem","anchorRef","Href","launchTimeTradeWorkflow","getLinkText","LinkText","Points","tt","launchWorkflow","utcDateTime","timeZoneOffset","getTimezoneOffset","timeZone","momentTimeZone","guess","timeZoneAbbr","zone","abbr","localDate","local","localTime","ShortInfo","getLocalAppointmentDateTime","ScheduleWellnessCoachTodoItem","redirectMap","TD_Commitment","TD_Competition","TD_HealthEducationSession_Contact","TD_HealthScreening","TD_FluShot","TD_HRA","TD_OnlineProgram","TD_Tobacco","TD_Tracker","TD_CompetitionTracker","TD_Workshop","TD_BiometricsFax","TodoItem","redirectRoute","todoType","getRedirectRoute","ToDoType","getTodoForm","getTodoLink","getPlainTodo","ToDoGuid","todoRenderFactory","RequiredToDoList","getTodoList","getTodos","StatusPane","getTierRequirementsIncompleteMessage","getCompleteMessage","getNotStartedMessage","getInProgressMessage","oneTierProgram","hasRequiredTodos","RewardsProgramSummary","getPointsDetailLink","buttonText","SummaryPanel","getError","getRewardsView","getMeterView","getMyPointsLink","getPointsButtonText","TodoLoadingAnimation","y","enableBackground","attributeName","dur","repeatCount","begin","TodoList","moreTodosAvailable","moreTodosAvailableSelector","topTodosSelector","getShowAllButton","TodoDropDown","useRef","setTarget","pointerEvents","Overlay","container","containerPadding","Content","ChatMount","chatState","errorSelector","wellnessQueue","filteredQueues","warning","wellnessQueueSelector","EventEmitter","addListener","MenuChatButton","handleShowChatClick","WellnessChatButton","loadChatMount","mountElement","topicsPromise","queuesPromise","settingsPromise","chatResult","loadChat","loadMainMenuChat","buttonElement","loadWellnessCoachChat","getMemberFromResult","AddressLine1","AddressLine2","alternatePhone","AlternatePhone","birthDate","BirthDate","City","countryCode","CountryCode","demoAccount","DemoAccount","gender","Gender","Id","middleName","MiddleName","Prefix","PrimaryEmail","PrimaryPhone","State","StateAbbreviation","suffix","Suffux","vipMember","VIPMember","ZipCode","loadMemberSuccess","loadMemberFailed","Active","billingGroupName","BillingGroupName","crmReportGroupCode","CRMReportGroupCode","campaignId","CampaignID","documentOrganizationId","DocumentOrganizationId","effectiveDate","EffectiveDate","memberPhoneNumber","MemberPhoneNumber","OrganizationId","organizationName","OrganizationName","organizationTypeCode","OrganizationTypeCode","parentOrganizationId","ParentOrganizationId","searchNotes","SearchNotes","webSite","WebSite","loadOrganizationSuccess","loadOrganizationFailed","loadClientSuccess","loadClientFailed","formatParam","param","initializeGa","params","initialize","code","standardImplementation","gaOptions","cookieDomain","cookieFlags","clientParam","clientId","clientName","dimension1","device","dimension2","organizationParam","dimension3","loadAnalyticsSuccess","loadAnalyticsFailed","links","image","requiredServices","services","exclusionTypes","openNewWindow","QuickLinksItem","itemClass","nativeApp","fullUrl","Image","draggable","QuickLinksItems","setItemClass","quickLinks","handleItemClass","quickLinkItems","clientExclusions","linkComponents","getLoadingIndicator","servicesMatch","excluded","itemExcluded","workLifeRefId","meMdSsoEnabled","meMdUrl","picwellUrl","LookupCode","Value","QuickLinksView","SelfCheckerQuestionnaire","question","lists","additionalText","yes","no","back","SelfCheckerCertificate","certHeader","certHeaderText","certDate","certTime","print","certName","certBody","safeToWork","stayHome","getCare","fahrenheit","celsius","NoAttestationHistory","introText","marginBottom","hideTemperatureIntroText","shortenedQuestionnaireIntroText","clearedHeader","notClearedHeader","seekCareHeader","clearedBodyText","notClearedBodyText","seekCareBodyText","SelfCheckerHistory","certIsOpen","setCertOpen","openHistory","setOpenHistory","header","headerText","date","certificate","setCertDate","attestationHistory","currentCertName","certToStayHome","certToWork","certToER","attestationHistoryComponents","signOffDateTimeUtc","toLocaleUpperCase","statusTypes","attestationBody","cursor","printTableCertificate","questions","answer","customStyles","left","right","transform","borderRadius","border","SelfCheckerHelpModal","modalIsOpen","_subtitle","certClicked","borderRight","borderTop","borderBottom","SelfCheckerTemperatureModal","AttestationForm","showTemperatureField","showTemperature","reAttestHours","setSignedOff","setIsOpen","temperatureModalIsOpen","setTemperatureIsOpen","reAttestText","showCdcIframe","cdcResult","submittedTemperature","handleCert","fahrenheitClicked","defaultChecked","celciusClicked","showQuestions","onMouseDown","stepDownClicked","rangeValueRef","temperature","rangeValueOnChange","temperatureUnit","checkerStatusTypes","stepUpClicked","selfcheckerPanel","CoronavirusSelfCheckerView","selectedTab","setSelectedTab","setTemperature","setTemperatureUnit","setCertificate","viewCertificateRef","setIndex","previousIndex","setPreviousIndex","answers","setAnswers","currentQuestion","getSubmittedTemperature","handleTabClick","handleAnswers","selection","handleQuestionRedirects","currentCertDate","currentCertTime","getAttestationForm","rangeOnChange","temp","loadCoronavirusSelfChecker","coronavirusSelfCheckerComponent","ReactDom","PrescriptionDiscountCard","getBiometricsRootUrl","newUrl","setAppName","createStore","applyMiddleware","Code","ClientID","ClientName","OrganizationID","Device","loadAnalytics","loadClient","loadMember","loadOrganization","loadClientServices","loadOrganizationConfigurations","loadContentExclusions","todoListElement","todoListElementMobile","loadTodosComponent","incentiveSummaryElement","loadIncentiveSummaryComponent","loadMyPointsUtComponent","quickLinksComponent","loadQuickLinksComponent","prescriptionDiscountCardComponent","loadPrescriptionDiscountCard","loadComponents","origin","fetch","indexOf","ready","unregister","checkValidServiceWorker","registerServiceWorker"],"mappings":"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","file":"static/js/main.0620c98e.chunk.js","sourcesContent":["export const LOAD_TODOS = 'LOAD_TODOS';\r\nexport const LOAD_TODOS_SUCCESS = 'LOAD_TODOS_SUCCESS';\r\nexport const LOAD_TODOS_FAILED = 'LOAD_TODOS_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = { todos: [], loading: true, error: false };\r\n\r\nexport function todoReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_TODOS_SUCCESS:\r\n return {\r\n ...state,\r\n todos: action.todos,\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_TODOS_FAILED:\r\n return {\r\n ...state,\r\n todos: [],\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","export const LOAD_SECTION_CARDS = 'LOAD_SECTION_CARDS';\r\nexport const LOAD_SECTION_CARDS_SUCCESS = 'LOAD_SECTION_CARDS_SUCCESS';\r\nexport const LOAD_SECTION_CARDS_FAILED = 'LOAD_SECTION_CARDS_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n cards: [],\r\n eapWorklifeRootUrl: '',\r\n eapBrandingName: '',\r\n eapSectionCardDescription: '',\r\n loading: true,\r\n error: false\r\n};\r\n\r\nexport function sectionCardReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_SECTION_CARDS_SUCCESS:\r\n return {\r\n ...state,\r\n cards: action.cards,\r\n eapWorklifeRootUrl: action.eapWorklifeRootUrl,\r\n eapBrandingName: action.eapBrandingName,\r\n eapSectionCardDescription: action.eapSectionCardDescription,\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_SECTION_CARDS_FAILED:\r\n return {\r\n ...state,\r\n cards: null,\r\n eapWorklifeRootUrl: null,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import axios from 'axios';\r\n\r\nexport class ApiClient {\r\n constructor(apiRootUrl, sessionToken) {\r\n this.apiRootUrl = apiRootUrl;\r\n this.sessionToken = sessionToken;\r\n }\r\n\r\n get(endpoint) {\r\n var url = `${this.apiRootUrl}${endpoint}`;\r\n var client = axios.create({\r\n headers: ApiClient.createSecureHeaders(this.sessionToken)\r\n });\r\n return client.get(url);\r\n }\r\n\r\n post(endpoint, data) {\r\n var url = `${this.apiRootUrl}${endpoint}`;\r\n var client = axios.create({\r\n headers: ApiClient.createSecureHeaders(this.sessionToken)\r\n });\r\n return client.post(url, data);\r\n }\r\n\r\n put(endpoint, data) {\r\n var url = `${this.apiRootUrl}${endpoint}`;\r\n var client = axios.create({\r\n headers: ApiClient.createSecureHeaders(this.sessionToken)\r\n });\r\n return client.put(url, data);\r\n }\r\n\r\n delete(endpoint, data) {\r\n var url = `${this.apiRootUrl}${endpoint}`;\r\n var client = axios.create({\r\n headers: ApiClient.createSecureHeaders(this.sessionToken)\r\n });\r\n return client.delete(url, data);\r\n }\r\n\r\n patch(endpoint, data) {\r\n var url = `${this.apiRootUrl}${endpoint}`;\r\n var client = axios.create({\r\n headers: ApiClient.createSecureHeaders(this.sessionToken)\r\n });\r\n return client.patch(url, data);\r\n }\r\n\r\n static createSecureHeaders(sessionToken) {\r\n var authorizationValue = 'Member-Token ' + sessionToken;\r\n return { Authorization: authorizationValue };\r\n }\r\n}\r\n","import { ApiClient } from '../api';\r\nimport uaparser from 'ua-parser-js';\r\n\r\nconst parseServerName = url => {\r\n let serverName = '';\r\n if (url && url.length > 0) {\r\n url = url.replace('http://', '');\r\n url = url.replace('https://', '');\r\n var parts = url.split('/');\r\n serverName = parts[0];\r\n }\r\n return serverName;\r\n};\r\n\r\nconst postLogEntry = (\r\n apiRootUrl,\r\n sessionToken,\r\n browser,\r\n applicationName,\r\n logLevel,\r\n className,\r\n functionName,\r\n message\r\n) => {\r\n var client = new ApiClient(apiRootUrl, sessionToken);\r\n var serverName = parseServerName(apiRootUrl);\r\n var logEntry = {\r\n LogLevel: logLevel,\r\n ServerName: serverName,\r\n BrowerVersion: browser,\r\n ApplicationName: applicationName,\r\n Class: className,\r\n Function: functionName,\r\n ErrorMessage: message\r\n };\r\n client.post('log', logEntry);\r\n return logEntry;\r\n};\r\n\r\nexport class LogService {\r\n constructor(apiRootUrl, sessionToken, applicationName) {\r\n this.apiRootUrl = apiRootUrl;\r\n this.sessionToken = sessionToken;\r\n this.applicationName = applicationName;\r\n this.browser = '';\r\n if (navigator) {\r\n var parser = new uaparser.UAParser();\r\n var browserType = parser.getResult();\r\n this.browser = `${browserType.browser.name} ${browserType.browser.version}`;\r\n }\r\n }\r\n\r\n error(className, functionName, error) {\r\n const logLevel = 'LOG_Error';\r\n postLogEntry(\r\n this.apiRootUrl,\r\n this.sessionToken,\r\n this.browser,\r\n this.applicationName,\r\n logLevel,\r\n className,\r\n functionName,\r\n error\r\n );\r\n }\r\n\r\n warn(className, functionName, message) {\r\n const logLevel = 'LOG_Warn';\r\n postLogEntry(\r\n this.apiRootUrl,\r\n this.sessionToken,\r\n this.browser,\r\n this.applicationName,\r\n logLevel,\r\n className,\r\n functionName,\r\n message\r\n );\r\n }\r\n\r\n debug(className, functionName, message) {\r\n const logLevel = 'LOG_Debug';\r\n postLogEntry(\r\n this.apiRootUrl,\r\n this.sessionToken,\r\n this.browser,\r\n this.applicationName,\r\n logLevel,\r\n className,\r\n functionName,\r\n message\r\n );\r\n }\r\n\r\n info(className, functionName, message) {\r\n const logLevel = 'LOG_Info';\r\n postLogEntry(\r\n this.apiRootUrl,\r\n this.sessionToken,\r\n this.browser,\r\n this.applicationName,\r\n logLevel,\r\n className,\r\n functionName,\r\n message\r\n );\r\n }\r\n}\r\n","let appName = '';\r\nconst productionRootImagePath = `${window.siteRootUrl}content/img/`;\r\nlet rootImagePath = productionRootImagePath;\r\n\r\nexport class AppConfiguration {\r\n static getApiRootUrl() {\r\n return window.apiRootUrl;\r\n }\r\n\r\n static getSiteRootUrl() {\r\n return window.siteRootUrl;\r\n }\r\n\r\n static getImagePath(imageSubUrl) {\r\n const fullPath = `${rootImagePath}${imageSubUrl}`;\r\n return fullPath;\r\n }\r\n\r\n static setImagePath(path) {\r\n console.warn(`Setting overridden image path: ${path}`);\r\n rootImagePath = path;\r\n }\r\n\r\n static setAppName(name) {\r\n appName = name;\r\n }\r\n\r\n static getAppName() {\r\n return appName;\r\n }\r\n\r\n static isNativeApp() {\r\n return window.isNativeApp;\r\n }\r\n\r\n static getBiometricsRootUrl() {\r\n return window.biometricsRootUrl;\r\n }\r\n}\r\n","// Determines if newtab: should be added (ie. native app)\r\nexport function getAppUrl(url) {\r\n if (window.isNativeApp) {\r\n url = `newtab:${url}`;\r\n }\r\n return url;\r\n}\r\n\r\nexport function getAppTarget(currentTarget) {\r\n if (\r\n window.isNativeApp &&\r\n currentTarget &&\r\n currentTarget.toLowerCase() === '_blank'\r\n ) {\r\n return '_self';\r\n } else {\r\n return currentTarget;\r\n }\r\n}\r\n","export const getSessionToken = () => {\r\n return window.sessionToken;\r\n};\r\n\r\nexport const updateSessionToken = (token) => {\r\n if (token) {\r\n window.sessionToken = token;\r\n } else {\r\n console.warn('Attmped to set null or empty session token.');\r\n }\r\n};\r\n","export class RateLimiter {\r\n constructor(wait) {\r\n this.isCalled = false;\r\n this.wait = wait;\r\n }\r\n\r\n limit(fn) {\r\n if (!this.isCalled) {\r\n fn();\r\n this.isCalled = true;\r\n setTimeout(() => {\r\n this.isCalled = false;\r\n }, this.wait);\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport './materialSpinner.scss';\r\n\r\nexport class MaterialSpinner extends Component {\r\n static defaultProps = {\r\n width: '65px',\r\n height: '65px'\r\n };\r\n render() {\r\n return this.props.show ? (\r\n \r\n \r\n \r\n ) : null;\r\n }\r\n}\r\n","import React from 'react';\r\nimport { MaterialSpinner } from './materialSpinner';\r\nimport './materialSpinnerPanel.scss';\r\n\r\nexport const MaterialSpinnerPanel = props => {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n","import React, { Component } from 'react';\r\nimport './errorBoundry.scss';\r\n\r\nexport class ErrorBoundry extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n static getDerivedStateFromError() {\r\n return { hasError: true };\r\n }\r\n\r\n componentDidCatch(error, info) {\r\n console.error(error);\r\n console.error(info);\r\n //TODO: log right from error boundry?\r\n }\r\n\r\n render() {\r\n const defaultMessage =\r\n 'An error occurred, technical support has been notified.';\r\n const message = this.props.errorMessage\r\n ? this.props.errorMessage\r\n : defaultMessage;\r\n if (this.state.hasError) {\r\n return (\r\n
\r\n {message}\r\n
\r\n );\r\n }\r\n return this.props.children;\r\n }\r\n}\r\n","import React from 'react';\r\n\r\nexport const ErrorCard = props => {\r\n return (\r\n
\r\n {props.message}\r\n
\r\n );\r\n};\r\n","export const formatPhoneNumber = phoneNumber => {\r\n return !phoneNumber || phoneNumber.length < 10\r\n ? ''\r\n : `(${phoneNumber.substr(0, 3)}) ${phoneNumber.substr(\r\n 3,\r\n 3\r\n )}-${phoneNumber.substr(6)}`;\r\n};\r\n","export const reinitEqualizer = () => {\r\n // Re-init equalize next tick\r\n setTimeout(() => {\r\n if (window.Foundation) {\r\n try {\r\n window.Foundation.reInit('equalizer');\r\n } catch (error) {\r\n console.error('Foundation reinit error');\r\n console.error(error);\r\n }\r\n }\r\n }, 0);\r\n};\r\n","export const LOAD_GEOCODE_ADDRESS_SUCCESS = 'LOAD_GEOCODE_ADDRESS_SUCCESS';\r\nexport const LOAD_GEOCODE_ADDRESS_FAILED = 'LOAD_GEOCODE_ADDRESS_FAILED';\r\n","import { ApiClient } from '../../api';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { getSessionToken } from '../../session';\r\nimport * as types from './actionTypes';\r\n\r\nexport function loadGeocodeAddress(latitude, longitude, logError) {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get(\r\n `geocode/address?lat=${latitude}&lon=${longitude}`\r\n );\r\n const address = apiResult.data;\r\n resolve(dispatch(loadGeocodeAddressSuccess(address)));\r\n } catch (error) {\r\n logError('geocode/address', 'loadGeoCodeAddress', error);\r\n resolve(dispatch(loadGeocodeAddressFailed()));\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport const loadGeocodeAddressSuccess = (address) => {\r\n return {\r\n type: types.LOAD_GEOCODE_ADDRESS_SUCCESS,\r\n address: address,\r\n };\r\n};\r\n\r\nexport const loadGeocodeAddressFailed = () => {\r\n return { type: types.LOAD_GEOCODE_ADDRESS_FAILED };\r\n};\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n address: [],\r\n};\r\n\r\nexport function geocodeReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_GEOCODE_ADDRESS_SUCCESS:\r\n return {\r\n ...state,\r\n address: action.address,\r\n loading: false,\r\n error: false,\r\n };\r\n case types.LOAD_GEOCODE_ADDRESS_FAILED:\r\n return {\r\n ...state,\r\n address: [],\r\n loading: false,\r\n error: true,\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { RateLimiter } from '../shared';\r\nimport axios from 'axios';\r\nimport { AppConfiguration } from '../configuration';\r\nimport { updateSessionToken } from '../session';\r\n\r\nconst keepAliveIntevalMs = 1000;\r\nconst keepAliveLimiter = new RateLimiter(keepAliveIntevalMs);\r\n\r\n// Asp.net 'keep alive' is a temporary solution until more of HP becomes react code and we\r\n// manage session in a different manner. For now this will keep the forms auth session going\r\nexport const keepAlive = () => {\r\n keepAliveLimiter.limit(() => {\r\n const pingUrl = `${AppConfiguration.getSiteRootUrl()}Account/PingSession`;\r\n axios.get(pingUrl).then((result) => {\r\n resetTimeoutWarningTimer();\r\n if (result.data.sessionToken) {\r\n updateSessionToken(result.data.sessionToken);\r\n }\r\n });\r\n });\r\n};\r\n\r\n// Check for the global reset warning function established in healthypath, call it if it exists.\r\n// This is to keep the sliding window going for the pop-up that warns the user about the session\r\n// expiration\r\nconst resetTimeoutWarningTimer = () => {\r\n if (window.resetTimeoutTimer) {\r\n window.resetTimeoutTimer();\r\n }\r\n};\r\n","import { LogService } from './logService';\r\nimport { AppConfiguration } from '../configuration';\r\nimport { getSessionToken } from '../session';\r\n\r\nexport function logError(componentPath, functionName, error) {\r\n console.error(`Component ${componentPath}, function ${functionName}`);\r\n console.error(error);\r\n const sessionToken = getSessionToken();\r\n const appName = AppConfiguration.getAppName();\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const errorString = error ? error.toString() : '';\r\n if (errorString.length > 0) {\r\n var logService = new LogService(apiRootUrl, sessionToken, appName);\r\n logService.error(componentPath, functionName, errorString);\r\n }\r\n}\r\n","import React from 'react';\r\nimport { Row, Column, Button } from 'react-foundation';\r\nimport { PropTypes } from 'prop-types';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport './header.scss';\r\n\r\nexport const Header = props => {\r\n const imageUrl = AppConfiguration.getImagePath('icon_chatNav2.svg');\r\n const errorUrl = AppConfiguration.getImagePath('icon_errorConnection.svg');\r\n\r\n const connectivityError = props => {\r\n if (props.connectivityError) {\r\n return (\r\n
\r\n \"Connection\r\n Connection Error\r\n
\r\n );\r\n }\r\n return null;\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n \"header\"\r\n
\r\n
{props.title}
\r\n {connectivityError(props)}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nHeader.propTypes = {\r\n closeButtonClicked: PropTypes.func.isRequired\r\n};\r\n","export class PhoneNumber {\r\n constructor(phoneNumberString) {\r\n this.areaCode = '';\r\n this.prefix = '';\r\n this.lineNumber = '';\r\n if (phoneNumberString) {\r\n let cleanPhone = phoneNumberString\r\n .trim()\r\n .split('')\r\n .map(x => (isNaN(parseInt(x, 10)) ? null : x))\r\n .filter(x => x !== null)\r\n .join('');\r\n if (cleanPhone.length === 10) {\r\n this.areaCode = cleanPhone.substr(0, 3);\r\n this.prefix = cleanPhone.substr(3, 3);\r\n this.lineNumber = cleanPhone.substr(6, 4);\r\n } else if (cleanPhone.length === 7) {\r\n this.areaCode = '';\r\n this.prefix = cleanPhone.substr(0, 3);\r\n this.lineNumber = cleanPhone.substr(3, 4);\r\n }\r\n }\r\n }\r\n toString() {\r\n return this.areaCode\r\n ? `${this.areaCode}-${this.prefix}-${this.lineNumber}`\r\n : `${this.prefix}-${this.lineNumber}`;\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { PropTypes } from 'prop-types';\r\nimport { Row, Column, Button } from 'react-foundation';\r\nimport { PhoneNumber } from '../../demographics';\r\nimport './signInComponent.scss';\r\n\r\nexport class SignInForm extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n firstName: '',\r\n lastName: '',\r\n phone: '',\r\n email: '',\r\n firstNameError: '',\r\n lastNameError: '',\r\n phoneError: '',\r\n emailError: ''\r\n };\r\n }\r\n\r\n submitLogin = event => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (this.validateForm()) {\r\n const phone = new PhoneNumber(this.state.phoneNumber);\r\n const user = {\r\n firstName: this.state.firstName,\r\n lastName: this.state.lastName,\r\n company: this.state.company,\r\n phone: {\r\n area: phone.areaCode,\r\n number: `${phone.prefix}${phone.lineNumber}`\r\n },\r\n email: this.state.email\r\n };\r\n this.props.setUser(user);\r\n }\r\n };\r\n\r\n validateForm() {\r\n let firstNameValid = this.validateFirstName();\r\n let lastNameValid = this.validateLastName();\r\n let phoneValid = this.validatePhone();\r\n let emailValid = this.validateEmail();\r\n return firstNameValid && lastNameValid && phoneValid && emailValid;\r\n }\r\n\r\n validateFirstName() {\r\n if (!this.state.firstName || !this.state.firstName.trim()) {\r\n this.setState({ firstNameError: 'First name is required.' });\r\n return false;\r\n }\r\n this.setState({ firstNameError: '' });\r\n return true;\r\n }\r\n\r\n validateLastName() {\r\n if (!this.state.lastName || !this.state.lastName.trim()) {\r\n this.setState({ lastNameError: 'Last name is required.' });\r\n return false;\r\n }\r\n this.setState({ lastNameError: '' });\r\n return true;\r\n }\r\n\r\n validatePhone() {\r\n if (!this.state.phoneNumber || !this.state.phoneNumber.trim()) {\r\n this.setState({ phoneError: 'Phone is required.' });\r\n return false;\r\n }\r\n const expression = '^[+]?[(]?[0-9]{3}[)]?[-s.]?[0-9]{3}[-s.]?[0-9]{4,6}$';\r\n const regEx = new RegExp(expression);\r\n if (\r\n !regEx.test(this.state.phoneNumber) ||\r\n this.state.phoneNumber.replace(/\\D/g, '').length !== 10\r\n ) {\r\n this.setState({\r\n phoneError: 'Please enter valid 10 digit phone number.'\r\n });\r\n return false;\r\n }\r\n this.setState({ phoneError: '' });\r\n return true;\r\n }\r\n\r\n validateEmail() {\r\n if (this.state.email && this.state.email.length > 0) {\r\n const expression =\r\n '^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$';\r\n const regEx = new RegExp(expression);\r\n if (!regEx.test(this.state.email)) {\r\n this.setState({ emailError: 'Please enter valid email.' });\r\n return false;\r\n }\r\n }\r\n this.setState({ emailError: '' });\r\n return true;\r\n }\r\n\r\n showFieldError(errorMessage) {\r\n if (errorMessage) {\r\n return
{errorMessage}
;\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n this.submitLogin(e)}>\r\n \r\n \r\n {this.props.description} (* Required Fields)\r\n \r\n \r\n \r\n \r\n \r\n this.setState({ firstName: e.target.value })}\r\n id=\"firstName\"\r\n className=\"form-control\"\r\n />\r\n {this.showFieldError(this.state.firstNameError)}\r\n \r\n \r\n \r\n this.setState({ lastName: e.target.value })}\r\n id=\"lastName\"\r\n className=\"form-control\"\r\n />\r\n {this.showFieldError(this.state.lastNameError)}\r\n \r\n \r\n \r\n \r\n \r\n

{this.props.company}

\r\n
\r\n \r\n \r\n {\r\n if (\r\n e.which !== 8 &&\r\n e.which !== 0 &&\r\n (e.which < 48 || e.which > 57)\r\n ) {\r\n e.preventDefault();\r\n }\r\n }}\r\n onChange={e =>\r\n this.setState({\r\n phoneNumber: e.target.value\r\n })\r\n }\r\n id=\"phone\"\r\n className=\"form-control\"\r\n />\r\n {this.showFieldError(this.state.phoneError)}\r\n \r\n
\r\n \r\n \r\n \r\n this.setState({ email: e.target.value })}\r\n id=\"email\"\r\n className=\"form-control\"\r\n />\r\n {this.showFieldError(this.state.emailError)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nSignInForm.propTypes = {\r\n company: PropTypes.string.isRequired\r\n};\r\n","import React from 'react';\r\nimport { Row, Column } from 'react-foundation';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport './errorComponent.scss';\r\n\r\nexport const ErrorComponent = () => {\r\n const imageUrl = AppConfiguration.getImagePath('img_errorScreen.png');\r\n return (\r\n
\r\n \r\n \r\n

Oops! Something's not right...

\r\n \"error\"\r\n
\r\n We are currently experiencing technical difficulties.\r\n
\r\n If this continues, please contact support.\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport ReactGa from 'react-ga';\r\nimport { PropTypes } from 'prop-types';\r\nimport { Row, Column } from 'react-foundation';\r\nimport './topicMenu.scss';\r\n\r\nexport const TopicMenu = props => {\r\n if (!props.loading && (!props.topics || !props.topics.length)) {\r\n return (\r\n

\r\n Something has gone wrong, no chat topics are available for your\r\n organization right now. Please contact your administrator.\r\n

\r\n );\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n
\r\n {props.topics.map(x => getTopic(props, x))}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst getTopic = (props, topic) => {\r\n return (\r\n {\r\n e.preventDefault();\r\n trackEvent(topic);\r\n props.topicSelected(topic);\r\n }}>\r\n
{topic.text}
\r\n keyboard_arrow_right\r\n \r\n );\r\n};\r\n\r\nconst trackEvent = topic => {\r\n ReactGa.event({\r\n category: 'Support',\r\n action: `Chat - ${topic.queueType}`\r\n });\r\n};\r\n\r\nTopicMenu.propTypes = {\r\n topics: PropTypes.array.isRequired,\r\n topicSelected: PropTypes.func.isRequired\r\n};\r\n","import React from 'react';\r\nimport { MaterialSpinner } from '../../shared';\r\n\r\nexport const LoadingComponent = () => {\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\r\n\r\nexport const ContactUsMessage = (props) => {\r\n if (props.contactUrl) {\r\n return (\r\n

\r\n If you do not want to wait,\r\n
\r\n please click here to leave us a message.\r\n

\r\n );\r\n }\r\n return null;\r\n};\r\n","import React from 'react';\r\n\r\nexport const NoAgentsAvailable = (props) => {\r\n return (\r\n

\r\n Chat is currently unavailable.\r\n
\r\n Please give us a call at {props.contactPhoneNumber}, or leave us a message by clicking the link below.\r\n

\r\n );\r\n};\r\n","import React from 'react';\r\n\r\nexport const PleaseWait = (props) => {\r\n return (\r\n

\r\n Hello {props.userDisplayName}!\r\n
\r\n Please wait for a chat agent to respond.\r\n

\r\n );\r\n};\r\n","import React from 'react';\r\n\r\nexport const QueueStatus = (props) => {\r\n if (props.estimatedWaitTime) {\r\n return (\r\n
\r\n Current wait time: {props.estimatedWaitTime} minutes\r\n
\r\n );\r\n }\r\n return null;\r\n};\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { Row, Column } from 'react-foundation';\r\nimport { ContactUsMessage } from './contactUsMessage';\r\nimport { NoAgentsAvailable } from './noAgentsAvailable';\r\nimport { PleaseWait } from './pleaseWait';\r\nimport { QueueStatus } from './queueStatus';\r\nimport './agentWaitScreenComponent.scss';\r\n\r\nexport const AgentWaitScreenComponent = (props) => {\r\n const imagePath = AppConfiguration.getImagePath('img_agentWaitScreen.png');\r\n const { estimatedWaitTime, agentsAvailable, inChatTimeWindow } = useSelector((state) => state.chat);\r\n return (\r\n
\r\n \r\n \r\n
\r\n {agentsAvailable && inChatTimeWindow ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {}\r\n \"wait\"\r\n {}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","export class ChatMessageType {\r\n static agentMessageType = 'agent';\r\n static userMessageType = 'user';\r\n static infoMessageType = 'info';\r\n}\r\n","import React from 'react';\r\nimport { ChatMessageType } from './chatMessageType';\r\n\r\nexport const MessageHeader = props => {\r\n if (props.type === ChatMessageType.agentMessageType) {\r\n return (\r\n

\r\n {props.time + ' '}\r\n {props.name}\r\n

\r\n );\r\n }\r\n return

{props.time}

;\r\n};\r\n","import React from 'react';\r\nimport { ChatMessageType } from './chatMessageType';\r\nimport { MessageHeader } from './messageHeader';\r\n\r\nconst bubbleClassMap = {};\r\nbubbleClassMap[ChatMessageType.agentMessageType] = 'ha-bubble msg';\r\nbubbleClassMap[ChatMessageType.userMessageType] = 'user-bubble msg';\r\n\r\nconst infoClassMap = {};\r\ninfoClassMap[ChatMessageType.agentMessageType] = 'info agent';\r\ninfoClassMap[ChatMessageType.userMessageType] = 'info user';\r\n\r\nexport const ChatMessage = props => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{props.message.text}

\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport './infoMessage.scss';\r\n\r\nexport const InfoMessage = props => {\r\n return (\r\n
\r\n {`${props.message.text} ${props.message.time}`}\r\n
\r\n );\r\n};\r\n","export const LOAD_CLIENT_SERVICES_SUCCESS = 'LOAD_CLIENT_SERVICES_SUCCESS';\r\nexport const LOAD_CLIENT_SERVICES_FAILED = 'LOAD_CLIENT_SERVICES_FAILED';\r\n","import { AppConfiguration } from '../configuration';\r\nimport { getSessionToken, updateSessionToken } from '../session';\r\nimport * as types from './clientServicesActionTypes.js';\r\nimport { ApiClient } from '../api';\r\n\r\nexport function loadClientServices(logError) {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return dispatch => {\r\n return new Promise(async resolve => {\r\n try {\r\n const apiClient = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await apiClient.get('client/services');\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadClientServicesSuccess(apiResult.data.result)));\r\n } catch (error) {\r\n logError('client/actions', 'loadClient', error);\r\n resolve(dispatch(loadClientServicesFailed()));\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport const loadClientServicesSuccess = clientServices => {\r\n return {\r\n type: types.LOAD_CLIENT_SERVICES_SUCCESS,\r\n clientServices: clientServices\r\n };\r\n};\r\n\r\nexport const loadClientServicesFailed = () => {\r\n return { type: types.LOAD_CLIENT_SERVICES_FAILED };\r\n};\r\n","import * as types from './clientServicesActionTypes';\r\n\r\nconst initialState = {\r\n list: [],\r\n loading: true,\r\n error: false\r\n};\r\n\r\nexport const clientServicesReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.LOAD_CLIENT_SERVICES_SUCCESS:\r\n return {\r\n ...state,\r\n list: action.clientServices,\r\n loading: false,\r\n error: false\r\n };\r\n\r\n case types.LOAD_CLIENT_SERVICES_FAILED:\r\n return {\r\n ...state,\r\n list: [],\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export class ServiceTypeSettingsArray {\r\n constructor(settingsArray) {\r\n this.settingsArray = settingsArray;\r\n }\r\n\r\n getSettingValue(lookupCode) {\r\n let value = '';\r\n if (this.settingsArray) {\r\n for (var i = 0; i < this.settingsArray.length; i++) {\r\n if (this.settingsArray[i].lookupCode.toLowerCase() === lookupCode.toLowerCase()) {\r\n value = this.settingsArray[i].value;\r\n break;\r\n }\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n","import { ApiClient } from '../api';\r\nimport { updateSessionToken, getSessionToken } from '../session';\r\nimport { ServiceTypeSettingsArray } from './serviceTypeSettingsArray';\r\nimport { AppConfiguration } from '../configuration';\r\n\r\nexport const loadServiceSettings = async (hacClientServiceCode) => {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const apiClient = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await apiClient.get(`serviceconfiguration/${hacClientServiceCode}`);\r\n if (apiResult.data.SessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n return new ServiceTypeSettingsArray(apiResult.data.result);\r\n};\r\n","const defaultPingIntervalMs = 10000;\r\nconst defaultQueueStatusIntervalMs = 10000;\r\n\r\nexport class ChatServiceSettings {\r\n constructor(\r\n chatUrl,\r\n restUrl,\r\n callbackUrl,\r\n pingIntervalMs,\r\n queueStatusIntervalMs\r\n ) {\r\n this.chatUrl = chatUrl;\r\n this.restUrl = restUrl;\r\n this.callbackUrl = callbackUrl;\r\n this.pingIntervalMs = pingIntervalMs\r\n ? pingIntervalMs\r\n : defaultPingIntervalMs;\r\n this.queueStatusIntervalMs = queueStatusIntervalMs\r\n ? queueStatusIntervalMs\r\n : defaultQueueStatusIntervalMs;\r\n }\r\n\r\n validate() {\r\n let valid = false;\r\n if (!this.chatUrl) {\r\n console.error('Avaya chat url was not specified in ChatServerSettings');\r\n return valid;\r\n }\r\n if (!this.restUrl) {\r\n console.error('Avaya rest url was not specified in ChatServerSettings');\r\n return valid;\r\n }\r\n if (!this.pingIntervalMs) {\r\n console.error(\r\n 'Ping interval specified was null, undefined or 0, invalid'\r\n );\r\n return valid;\r\n }\r\n if (!this.queueStatusIntervalMs) {\r\n console.error(\r\n 'Queue status interval specified was null, undefined or 0, invalid'\r\n );\r\n return valid;\r\n }\r\n valid = true;\r\n return valid;\r\n }\r\n}\r\n","export const LOAD_CHAT = 'LOAD_CHAT';\r\nexport const LOAD_CHAT_SUCCESS = 'LOAD_CHAT_SUCCESS';\r\nexport const LOAD_CHAT_FAILED = 'LOAD_CHAT_FAILED';\r\nexport const SHOW_MENU_CHAT = 'SHOW_MENU_CHAT';\r\nexport const SHOW_WELLNESS_CHAT = 'SHOW_WELLNESS_CHAT';\r\nexport const HIDE_CHAT = 'HIDE_CHAT';\r\nexport const LOAD_HOLD_MESSAGES = 'LOAD_HOLD_MESSAGES';\r\nexport const APPEND_MESSAGE = 'APPEND_INFO_MESSAGE';\r\nexport const RESET_CHAT_SESSION = 'RESET_CHAT_SESSION';\r\nexport const UPDATE_AGENT_IS_TYPING = 'UPDATE_AGENT_IS_TYPING';\r\nexport const UPDATE_PARTICIPANTS = 'UPDATE_PARTICIPANTS';\r\nexport const UPDATE_AGENTS_AVAILABLE = 'UPDATE_AGENTS_AVAILABLE';\r\nexport const UPDATE_ESTIMATED_WAIT_TIME = 'UPDATE_ESTIMATED_WAIT_TIME';\r\n","import { ApiClient } from '../../api';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { getSessionToken, updateSessionToken } from '../../session';\r\nimport { loadServiceSettings } from '../../services';\r\nimport { ChatServiceSettings } from '../chatServiceSettings';\r\nimport * as types from './actionTypes.js';\r\n\r\nexport const loadChat = (logError) => {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return (dispatch) => {\r\n const topicsPromise = loadTopics(apiRootUrl, sessionToken);\r\n const queuesPromise = loadQueues(apiRootUrl, sessionToken);\r\n const settingsPromise = loadServiceSettings('RealTimeChat');\r\n return new Promise((resolve) => {\r\n Promise.all([settingsPromise, topicsPromise, queuesPromise])\r\n .then((results) => {\r\n const chatResult = getChatResult(results);\r\n resolve(dispatch(loadChatSuccess(chatResult)));\r\n })\r\n .catch((error) => {\r\n logError('chat/actions', 'loadChat', error);\r\n resolve(dispatch(loadChatFailed()));\r\n });\r\n });\r\n };\r\n};\r\n\r\nconst getChatResult = (results) => {\r\n const serviceSettingsArray = results[0];\r\n const chatServiceSettings = new ChatServiceSettings(\r\n serviceSettingsArray.getSettingValue('AVA_CHTURL'),\r\n serviceSettingsArray.getSettingValue('AVA_RSTURL'),\r\n serviceSettingsArray.getSettingValue('AVA_CBURL'),\r\n serviceSettingsArray.getSettingValue('AVA_PINGMS'),\r\n serviceSettingsArray.getSettingValue('AVA_QUEMS')\r\n );\r\n return {\r\n serviceSettings: chatServiceSettings,\r\n topics: results[1],\r\n queues: results[2]\r\n };\r\n};\r\n\r\nconst loadTopics = async (apiRootUrl, sessionToken) => {\r\n const apiClient = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await apiClient.get('membersite/chattopic');\r\n if (apiResult.data.SessionToken) {\r\n updateSessionToken(apiResult.data.SessionToken);\r\n }\r\n const results = apiResult.data.Result || [];\r\n let topics = results.map((result) => {\r\n return {\r\n id: result.ChatTopicId,\r\n queue: result.Queue,\r\n displayOrder: result.DisplayOrder,\r\n text: result.Text,\r\n queueType: result.QueueType\r\n };\r\n });\r\n return topics.sort((a, b) => parseInt(a.displayOrder, 10) - parseInt(b.displayOrder, 10));\r\n};\r\n\r\nconst loadQueues = async (apiRootUrl, sessionToken) => {\r\n const apiClient = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await apiClient.get('chatqueue');\r\n if (apiResult.data.SessionToken) {\r\n updateSessionToken(apiResult.data.SessionToken);\r\n }\r\n const results = apiResult.data.Result || [];\r\n return results.map((result) => {\r\n return {\r\n queueType: result.QueueType,\r\n name: result.Name,\r\n description: result.Description\r\n };\r\n });\r\n};\r\n\r\nexport const loadChatSuccess = (data) => {\r\n return {\r\n type: types.LOAD_CHAT_SUCCESS,\r\n serviceSettings: data.serviceSettings,\r\n topics: data.topics,\r\n queues: data.queues\r\n };\r\n};\r\n\r\nexport const loadChatFailed = () => {\r\n return { type: types.LOAD_CHAT_FAILED };\r\n};\r\n\r\nexport const resetChatSession = () => {\r\n return {\r\n type: types.RESET_CHAT_SESSION\r\n };\r\n};\r\n","import * as types from './actionTypes.js';\r\n\r\nexport const showMenuChat = () => {\r\n return {\r\n type: types.SHOW_MENU_CHAT,\r\n visible: true\r\n };\r\n};\r\n\r\nexport const showWellnessChat = () => {\r\n return {\r\n type: types.SHOW_WELLNESS_CHAT,\r\n visible: true\r\n };\r\n};\r\n\r\nexport const hideChat = () => {\r\n return {\r\n type: types.HIDE_CHAT,\r\n visible: false\r\n };\r\n};\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n agentsAvailable: false,\r\n inChatTimeWindow: false,\r\n agentTyping: false,\r\n chatInProgress: false,\r\n showWaiting: true,\r\n serviceSettings: null,\r\n topics: [],\r\n queues: [],\r\n loading: true,\r\n chatVisible: false,\r\n error: false,\r\n messages: [],\r\n participants: [],\r\n estimatedWaitTime: 0\r\n};\r\n\r\nexport const chatReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.LOAD_CHAT_SUCCESS:\r\n return {\r\n ...state,\r\n serviceSettings: action.serviceSettings,\r\n topics: action.topics,\r\n queues: action.queues,\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_CHAT_FAILED:\r\n return {\r\n ...state,\r\n serviceSettings: null,\r\n topics: [],\r\n queues: [],\r\n loading: false,\r\n error: true\r\n };\r\n case types.SHOW_MENU_CHAT:\r\n return { ...state, menuChatVisible: action.visible };\r\n case types.SHOW_WELLNESS_CHAT:\r\n return { ...state, wellnessChatVisible: action.visible };\r\n case types.HIDE_CHAT:\r\n return {\r\n ...state,\r\n wellnessChatVisible: action.visible,\r\n menuChatVisible: action.visible\r\n };\r\n case types.LOAD_HOLD_MESSAGES:\r\n return {\r\n ...state,\r\n holdMessages: action.holdMessages,\r\n holdMessageDelay: action.holdMessageDelay\r\n };\r\n case types.APPEND_MESSAGE:\r\n return {\r\n ...state,\r\n messages: [...state.messages, action.message]\r\n };\r\n case types.UPDATE_PARTICIPANTS:\r\n return {\r\n ...state,\r\n participants: action.participants,\r\n chatInProgress: action.chatInProgress,\r\n showWaiting: false\r\n };\r\n case types.UPDATE_AGENT_IS_TYPING:\r\n return {\r\n ...state,\r\n agentTyping: action.agentTyping\r\n };\r\n case types.UPDATE_ESTIMATED_WAIT_TIME:\r\n return {\r\n ...state,\r\n estimatedWaitTime: action.estimatedWaitTime\r\n };\r\n case types.UPDATE_AGENTS_AVAILABLE:\r\n return {\r\n ...state,\r\n agentsAvailable: action.data.agentsAvailable,\r\n inChatTimeWindow: action.data.inChatTimeWindow\r\n };\r\n case types.RESET_CHAT_SESSION:\r\n return {\r\n ...state,\r\n messages: [],\r\n showWaiting: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { ApiClient } from '../../api';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { getSessionToken, updateSessionToken } from '../../session';\r\nimport * as types from './actionTypes.js';\r\n\r\nexport const checkIfAgentsAvailable = (queueName, logError, agentsAvailableCallback) => {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return async (dispatch) => {\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n try {\r\n const apiResult = await client.get(`avaya/queuestatus/${queueName}`);\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n const result = apiResult.data.result;\r\n dispatch(updateAgentsAvailable(result.availableAgentsInQueue > 0, result.inChatTimeWindow));\r\n const agentsAvailable = result.availableAgentsInQueue > 0 && result.inChatTimeWindow;\r\n if (agentsAvailable && agentsAvailableCallback) {\r\n agentsAvailableCallback(result.availableAgentsInQueue > 0 && result.inChatTimeWindow);\r\n }\r\n } catch (error) {\r\n console.error(`An error occured checking chat agent status`);\r\n console.error(error);\r\n }\r\n };\r\n};\r\n\r\nexport const updateAgentsAvailable = (agentsAvailable, inChatTimeWindow) => {\r\n return {\r\n type: types.UPDATE_AGENTS_AVAILABLE,\r\n data: { agentsAvailable: agentsAvailable, inChatTimeWindow: inChatTimeWindow }\r\n };\r\n};\r\n\r\nexport const updateEstimatedWaitTime = (estimatedWaitTime) => {\r\n return {\r\n type: types.UPDATE_ESTIMATED_WAIT_TIME,\r\n estimatedWaitTime: estimatedWaitTime\r\n };\r\n};\r\n\r\nexport const updateParticipants = (participants, chatInProgress) => {\r\n return {\r\n type: types.UPDATE_PARTICIPANTS,\r\n participants: participants,\r\n chatInProgress: chatInProgress\r\n };\r\n};\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport moment from 'moment';\r\nimport { Button } from 'react-foundation';\r\nimport { ChatMessage, InfoMessage, ChatMessageType } from '../chatmessage';\r\nimport { appendUserMessage } from '../store';\r\nimport { keepAlive } from '../../session';\r\nimport './chatViewComponent.scss';\r\n\r\nclass ChatViewComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n currentMessage: '',\r\n currentDateString: moment(new Date()).format('LL')\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n this.messagesEnd = React.createRef();\r\n this.scrollToBottom();\r\n }\r\n\r\n componentDidUpdate() {\r\n this.scrollToBottom();\r\n }\r\n\r\n scrollToBottom = () => {\r\n if (this.messagesEnd && this.messagesEnd.current) {\r\n this.messagesEnd.current.scrollIntoView({ behavior: 'smooth' });\r\n }\r\n };\r\n\r\n getAgentTypeingAnimation = () => {\r\n return this.props.agentTyping ? (\r\n
\r\n
\r\n ·\r\n ·\r\n ·\r\n
\r\n
\r\n ) : null;\r\n };\r\n\r\n render() {\r\n return (\r\n <>\r\n
\r\n {this.state.currentDateString}\r\n
\r\n
\r\n {this.props.messages.map((message) =>\r\n message.type === ChatMessageType.infoMessageType ? (\r\n \r\n ) : (\r\n \r\n )\r\n )}\r\n {this.getAgentTypeingAnimation()}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n this.handleChatInputChange(e);\r\n }}\r\n className=\"input-group-field\"\r\n />\r\n
\r\n \r\n Send\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n canSendChat() {\r\n return this.props.participants.length > 0;\r\n }\r\n\r\n handleSubmit = (event) => {\r\n event.preventDefault();\r\n const message = this.state.currentMessage;\r\n if (message && message.length > 0) {\r\n if (process.env.NODE_ENV !== 'development') {\r\n keepAlive();\r\n }\r\n this.props.sendMessage(message);\r\n this.props.appendUserMessage(message, this.props.messages.length + 1);\r\n this.setState({ currentMessage: '' });\r\n }\r\n };\r\n\r\n handleChatInputChange = (event) => {\r\n this.setState({ currentMessage: event.target.value });\r\n this.props.userIsTyping(true);\r\n };\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n ...state.chat\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n appendUserMessage: (message, index) => dispatch(appendUserMessage(message, index))\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ChatViewComponent);\r\n","import moment from 'moment';\r\nimport { ChatMessageType } from '../chatmessage';\r\nimport * as types from './actionTypes.js';\r\n\r\nexport const loadHoldMessages = (holdMessageResult) => {\r\n return {\r\n type: types.LOAD_HOLD_MESSAGES,\r\n holdMessages: holdMessageResult.messages,\r\n holdMessageDelay: holdMessageResult.delay\r\n };\r\n};\r\n\r\nexport const appendAgentMessage = (messageText, agentName, timestamp, index) => {\r\n const message = {\r\n id: index,\r\n type: ChatMessageType.agentMessageType,\r\n name: agentName,\r\n text: messageText,\r\n time: moment(new Date(timestamp)).format('LTS')\r\n };\r\n return {\r\n type: types.APPEND_MESSAGE,\r\n message: message\r\n };\r\n};\r\n\r\nexport const appendInfoMessage = (messageText, index) => {\r\n const message = {\r\n id: index,\r\n type: ChatMessageType.infoMessageType,\r\n text: messageText,\r\n time: moment(new Date()).format('LTS')\r\n };\r\n return {\r\n type: types.APPEND_MESSAGE,\r\n message: message\r\n };\r\n};\r\n\r\nexport const appendUserMessage = (messageText, index) => {\r\n const message = {\r\n id: index,\r\n type: ChatMessageType.userMessageType,\r\n name: '',\r\n text: messageText,\r\n time: moment(new Date()).format('LTS')\r\n };\r\n return {\r\n type: types.APPEND_MESSAGE,\r\n message: message\r\n };\r\n};\r\n\r\nexport const updateAgentIsTyping = (isTyping) => {\r\n return {\r\n type: types.UPDATE_AGENT_IS_TYPING,\r\n agentTyping: isTyping\r\n };\r\n};\r\n","export const ApiVersion = '1.0';\r\n","export class MessageTypes {\r\n static request = 'request';\r\n static newChatAcknowledgement = 'newChatAcknowledgement';\r\n static acknowledgement = 'acknowledgement';\r\n static error = 'error';\r\n static notification = 'notification';\r\n}\r\n","import { ApiVersion } from './apiVersion';\r\nimport { MessageTypes } from './messageTypes';\r\nexport class PingMessage {\r\n constructor() {\r\n this.apiVersion = ApiVersion;\r\n this.type = MessageTypes.request;\r\n this.body = {\r\n method: 'ping'\r\n };\r\n }\r\n}\r\n","import { PingMessage } from './messages/pingMessage';\r\n\r\nexport function startPingService(socket, intervalMs) {\r\n const pingInterval = setInterval(() => {\r\n sendPing(socket);\r\n }, intervalMs);\r\n return pingInterval;\r\n}\r\n\r\nexport function stopPingService(pingInterval) {\r\n clearInterval(pingInterval);\r\n}\r\n\r\nconst sendPing = socket => {\r\n if (socket && socket.closed === false) {\r\n const message = new PingMessage();\r\n socket.next(message);\r\n }\r\n};\r\n","import { ApiVersion } from './apiVersion';\r\nimport { MessageTypes } from './messageTypes';\r\n\r\nexport class ChatMessage {\r\n constructor(message) {\r\n this.apiVersion = ApiVersion;\r\n this.type = MessageTypes.request;\r\n this.body = {\r\n method: 'newMessage',\r\n message: message\r\n };\r\n }\r\n}\r\n","import { ApiVersion } from './apiVersion';\r\nimport { MessageTypes } from './messageTypes';\r\n\r\nexport class CloseRequest {\r\n constructor() {\r\n this.apiVersion = ApiVersion;\r\n this.type = MessageTypes.request;\r\n this.body = {\r\n method: 'closeConversation'\r\n };\r\n }\r\n}\r\n","export class Intrinsics {\r\n constructor(\r\n email,\r\n userName,\r\n areaCode,\r\n phoneNumber,\r\n skillset,\r\n memberId,\r\n organizationId,\r\n topicText\r\n ) {\r\n this.email = email;\r\n this.name = userName;\r\n this.country = null;\r\n this.area = areaCode;\r\n this.phoneNumber = phoneNumber;\r\n this.skillset = skillset;\r\n this.customFields = [];\r\n if (topicText) {\r\n this.customFields.push({\r\n title: 'topic',\r\n value: topicText\r\n });\r\n }\r\n // Send member id if possible, if not combination of organiziation and phone\r\n if (memberId) {\r\n this.customFields.push({ title: 'memberId', value: memberId });\r\n } else {\r\n if (organizationId) {\r\n this.customFields.push({\r\n title: 'organizationId',\r\n value: organizationId\r\n });\r\n }\r\n if (this.phoneNumber) {\r\n this.customFields.push({\r\n title: 'phoneNumber',\r\n value: this.area\r\n ? `${this.area}${this.phoneNumber}`\r\n : `${this.phoneNumber}`\r\n });\r\n }\r\n }\r\n }\r\n}\r\n","import { ApiVersion } from './apiVersion';\r\nimport { MessageTypes } from './messageTypes';\r\nexport class LoginMessage {\r\n constructor(guid, authenticationKey, requestTranscript, intrinsics) {\r\n this.apiVersion = ApiVersion;\r\n this.type = MessageTypes.request;\r\n this.body = {\r\n method: 'requestChat',\r\n guid: guid,\r\n authenticationKey: authenticationKey,\r\n requestTranscript: requestTranscript,\r\n intrinsics: intrinsics\r\n };\r\n }\r\n}\r\n","export class NotificationMessageType {\r\n static requestChat = 'requestChat';\r\n static callBack = 'callBack';\r\n static newParticipant = 'newParticipant';\r\n static isTyping = 'isTyping';\r\n static newMessage = 'newMessage';\r\n static closeConversation = 'closeConversation';\r\n static participantLeave = 'participantLeave';\r\n static newPushPageMessage = 'newPushPageMessage';\r\n static requestTranscript = 'requestTranscript';\r\n static queueStatus = 'queueStatus';\r\n static ping = 'ping';\r\n}\r\n","import { ApiVersion } from './apiVersion';\r\nimport { MessageTypes } from './messageTypes';\r\nexport class QueueStatusRequestMessage {\r\n constructor() {\r\n this.apiVersion = ApiVersion;\r\n this.type = MessageTypes.request;\r\n this.body = {\r\n method: 'queueStatus'\r\n };\r\n }\r\n}\r\n","import { ApiVersion } from './apiVersion';\r\nimport { MessageTypes } from './messageTypes';\r\n\r\nexport class UserIsTypingMessage {\r\n constructor(isTyping) {\r\n this.apiVersion = ApiVersion;\r\n this.type = MessageTypes.request;\r\n this.body = {\r\n method: 'isTyping',\r\n isTyping: isTyping\r\n };\r\n }\r\n}\r\n","import { webSocket } from 'rxjs/webSocket';\r\nimport { Subject } from 'rxjs';\r\nimport { startPingService, stopPingService } from './pingService';\r\nimport {\r\n MessageTypes,\r\n Intrinsics,\r\n NotificationMessageType,\r\n LoginMessage,\r\n ChatMessage,\r\n CloseRequest,\r\n UserIsTypingMessage,\r\n QueueStatusRequestMessage\r\n} from './messages';\r\n\r\nexport class AvayaChatService {\r\n constructor(chatServiceUrl, pingIntervalMs) {\r\n this.pingIntervalId = null;\r\n this.socket = null;\r\n this.chatServiceUrl = chatServiceUrl;\r\n this.openObservable = null;\r\n this.closeObservable = null;\r\n this.messageObservable = null;\r\n this.socketObservable = null;\r\n this.pingInterval = null;\r\n this.pingIntervalMs = pingIntervalMs;\r\n this.authenticationKey = null;\r\n this.guid = null;\r\n }\r\n\r\n connect() {\r\n this._createSocket();\r\n return {\r\n openObservable: this.openObservable,\r\n closeObservable: this.closeObservable,\r\n messageObservable: this.messageObservable,\r\n errorObservable: this.errorObservable\r\n };\r\n }\r\n\r\n _createSocket() {\r\n this.openObservable = new Subject();\r\n this.closeObservable = new Subject();\r\n this.messageObservable = new Subject();\r\n this.errorObservable = new Subject();\r\n this.socket = new webSocket({\r\n url: this.chatServiceUrl,\r\n openObserver: this.openObservable,\r\n closeObserver: this.closeObservable\r\n });\r\n this.socketObservable = this.socket.subscribe(\r\n (msg) => {\r\n this._logServerMessage(msg);\r\n this._socketMessageHandler(msg, this.socketMessageObservable);\r\n if (this.messageObservable && !this.messageObservable.closed) {\r\n this.messageObservable.next(msg);\r\n }\r\n },\r\n (err) => {\r\n if (this.errorObservable && !this.errorObservable.closed) {\r\n this.errorObservable.next(err);\r\n }\r\n }\r\n );\r\n this.openObservable.subscribe(() => {\r\n this.pingIntervalId = startPingService(this.socket, this.pingIntervalMs);\r\n });\r\n this.closeObservable.subscribe(() => {\r\n stopPingService(this.pingIntervalId);\r\n });\r\n }\r\n\r\n // Note: use for debugging messages from Avaya server (filtering pings)\r\n _logServerMessage(msg) {\r\n return; // No-op unless needed - eventually remove this completely\r\n //if (msg && msg.body && msg.body.method !== 'ping') {\r\n //console.log(JSON.stringify(msg));\r\n //}\r\n }\r\n\r\n login(email, userName, areaCode, phoneNumber, skillSet, memberId, organizationId, topicText) {\r\n let intrinsics = new Intrinsics(\r\n email,\r\n userName,\r\n areaCode,\r\n phoneNumber,\r\n skillSet,\r\n memberId,\r\n organizationId,\r\n topicText\r\n );\r\n let message = new LoginMessage(null, null, false, intrinsics);\r\n this._sendMessage(message);\r\n }\r\n\r\n sendChatMessage(messageText) {\r\n let message = new ChatMessage(messageText);\r\n this._sendMessage(message);\r\n }\r\n\r\n sendUserIsTyping(isTyping) {\r\n let message = new UserIsTypingMessage(isTyping);\r\n this._sendMessage(message);\r\n }\r\n\r\n sendQueueStatusRequest() {\r\n let message = new QueueStatusRequestMessage();\r\n this._sendMessage(message);\r\n }\r\n\r\n quitChat() {\r\n if (this.socket) {\r\n let message = new CloseRequest();\r\n this._sendMessage(message);\r\n this._disconnect();\r\n }\r\n }\r\n\r\n _disconnect() {\r\n if (this.pingInterval) {\r\n stopPingService(this.pingIntervalId);\r\n }\r\n this.socket.complete();\r\n this.openObservable = null;\r\n this.closeObservable = null;\r\n this.messageObservable = null;\r\n this.socketObservable = null;\r\n this.socket = null;\r\n }\r\n\r\n _socketMessageHandler = (message) => {\r\n if (message.type === MessageTypes.notification) {\r\n this._notificationMessageHandler(message);\r\n return;\r\n }\r\n if (message.type === MessageTypes.error) {\r\n this._errorMessageHandler(message);\r\n return;\r\n }\r\n };\r\n\r\n _notificationMessageHandler = (message) => {\r\n if (message.type !== MessageTypes.notification) {\r\n return;\r\n }\r\n let body = message.body;\r\n let method = body.method;\r\n if (method === NotificationMessageType.requestChat) {\r\n this.authenticationKey = body.authenticationKey;\r\n this.guid = body.guid;\r\n }\r\n };\r\n\r\n _errorMessageHandler = (message) => {\r\n console.error(`Received socket error message of type: ${message.type}`);\r\n console.error(message);\r\n this.errorObservable.next(message);\r\n };\r\n\r\n _sendMessage(message) {\r\n if (this.socket !== null && this.socket.closed === false) {\r\n this.socket.next(message);\r\n } else {\r\n const message = 'Failed to send chat message, web socket null or not in open state';\r\n console.error(message);\r\n this.errorObservable.next(message);\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { logError } from '../logging';\r\nimport { AgentWaitScreenComponent } from './agentwait';\r\nimport { ChatViewComponent } from './view';\r\nimport { AvayaChatService } from './services/avayaChatService';\r\nimport { ErrorComponent } from './error';\r\nimport { MessageTypes, NotificationMessageType, getHoldMessages } from './services';\r\nimport { RateLimiter } from '../shared';\r\nimport {\r\n loadHoldMessages,\r\n appendAgentMessage,\r\n updateParticipants,\r\n appendInfoMessage,\r\n updateAgentIsTyping,\r\n updateAgentsAvailable,\r\n updateEstimatedWaitTime,\r\n resetChatSession,\r\n checkIfAgentsAvailable\r\n} from './store';\r\nimport './chatComponent.scss';\r\n\r\nconst userIsTypingLimitIntevalMs = 2000;\r\nconst agentCheckIntervalMs = 30000;\r\nconst agentTypingAnimationTimeoutMs = 10000;\r\nconst observerRole = 'supervisor_observe';\r\n\r\nclass ChatComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n error: false,\r\n user: this.props.user\r\n };\r\n this.isTypingMessageRateLimiter = new RateLimiter(userIsTypingLimitIntevalMs);\r\n this.avayaChatService = null;\r\n this.messageObservable = null;\r\n this.comfortSequence = 0;\r\n this.comfortIntervalId = 0;\r\n this.agentCheckIntervalId = 0;\r\n }\r\n\r\n componentDidMount() {\r\n this.initializeConnections();\r\n this.startAgentCheckInterval();\r\n }\r\n\r\n componentWillUnmount() {\r\n this.stopAgentCheckInterval();\r\n this.stopQueueStatusInterval();\r\n this.stopIdleComfortMessages();\r\n this.props.resetChatSession();\r\n if (this.avayaChatService) {\r\n this.avayaChatService.quitChat();\r\n this.cleanupConnections();\r\n }\r\n }\r\n\r\n componentDidCatch(error) {\r\n this.stopAgentCheckInterval();\r\n this.stopQueueStatusInterval();\r\n if (this.avayaChatService) {\r\n this.avayaChatService.quitChat();\r\n this.cleanupConnections();\r\n }\r\n this.setState({ error: true });\r\n logError('ChatComponent', 'componentDidCatch', error);\r\n }\r\n\r\n initializeConnections() {\r\n if (this.props.serviceSettings.validate() || !this.props.queue) {\r\n const { chatUrl, pingIntervalMs } = this.props.serviceSettings;\r\n this.avayaChatService = new AvayaChatService(chatUrl, pingIntervalMs);\r\n } else {\r\n console.error('Failed to validate chat settings');\r\n this.setState({ error: true });\r\n }\r\n }\r\n\r\n cleanupConnections() {\r\n this.avayaChatService = null;\r\n this.closeObservable = null;\r\n this.messageObservable = null;\r\n this.errorObservable = null;\r\n this.openObservable = null;\r\n }\r\n\r\n render() {\r\n let content = null;\r\n if (this.props.error) {\r\n content = ;\r\n } else if (this.props.showWaiting) {\r\n content = (\r\n \r\n );\r\n } else {\r\n content = ;\r\n }\r\n return content;\r\n }\r\n\r\n loginUser = (user) => {\r\n const observables = this.avayaChatService.connect();\r\n this.openObservable = observables.openObservable;\r\n this.messageObservable = observables.messageObservable;\r\n this.closeObservable = observables.closeObservable;\r\n this.errorObservable = observables.errorObservable;\r\n this.messageObservable.subscribe((message) => {\r\n this.messageEvent(message);\r\n });\r\n this.closeObservable.subscribe((message) => {\r\n this.closeEvent(message);\r\n });\r\n this.errorObservable.subscribe((message) => {\r\n this.errorEvent(message);\r\n });\r\n this.avayaChatService.login(\r\n user.email,\r\n user.userName,\r\n user.phone.area,\r\n user.phone.number,\r\n this.props.queue,\r\n user.memberId,\r\n user.organizationId,\r\n this.props.topicText\r\n );\r\n };\r\n\r\n closeEvent = () => {\r\n this.stopQueueStatusInterval();\r\n };\r\n\r\n messageEvent = (message) => {\r\n if (this.props.setConnectivityError) {\r\n this.props.setConnectivityError(false);\r\n }\r\n if (message.type === MessageTypes.notification) {\r\n const notificationType = message.body.method;\r\n if (notificationType === NotificationMessageType.newParticipant) {\r\n this.newParticipant(message);\r\n } else if (notificationType === NotificationMessageType.requestChat) {\r\n this.requestChat(message);\r\n } else if (notificationType === NotificationMessageType.newMessage) {\r\n this.newMessage(message);\r\n } else if (notificationType === NotificationMessageType.isTyping) {\r\n this.agentIsTyping();\r\n } else if (notificationType === NotificationMessageType.participantLeave) {\r\n this.participantLeft(message);\r\n } else if (message.method === NotificationMessageType.queueStatus) {\r\n this.queueStatusUpdate(message);\r\n }\r\n }\r\n };\r\n\r\n queueStatusUpdate = (message) => {\r\n this.props.updateEstimatedWaitTime(message.estimatedWaitTime);\r\n };\r\n\r\n requestChat = (message) => {\r\n this.props.loadHoldMessages(getHoldMessages(message.body.webOnHoldComfortGroups));\r\n };\r\n\r\n newParticipant = (message) => {\r\n this.stopIdleComfortMessages();\r\n this.stopQueueStatusInterval();\r\n this.props.updateParticipants(message.body.participants, true);\r\n if (message.body.role !== observerRole) {\r\n const id = this.props.messages.length + 1;\r\n this.props.appendInfoMessage(`${message.body.displayName} has joined.`, id);\r\n }\r\n };\r\n\r\n participantLeft = (message) => {\r\n const chatInProgress = !message.body.endChatFlag;\r\n const participant = this.getParticipant(message.body.agentId);\r\n this.props.updateParticipants(message.body.participants, chatInProgress);\r\n const id = this.props.messages.length + 1;\r\n if (participant && participant.type !== observerRole) {\r\n this.props.appendInfoMessage(`${participant.name} has left.`, id);\r\n }\r\n if (this.props.participants.length === 0 && chatInProgress) {\r\n this.startIdleComfortMessages();\r\n }\r\n if (!chatInProgress) {\r\n const id = this.props.messages.length + 1;\r\n this.props.appendInfoMessage(`Chat session has ended.`, id);\r\n }\r\n };\r\n\r\n getParticipant(id) {\r\n let name = 'Agent';\r\n let type = '';\r\n const filteredList = this.props.participants.filter((x) => x.id === id);\r\n if (filteredList && filteredList.length > 0) {\r\n name = filteredList[0].name;\r\n type = filteredList[0].type;\r\n }\r\n return { name, type };\r\n }\r\n\r\n startIdleComfortMessages = () => {\r\n const defaultDelay = 30;\r\n const intervalSeconds = this.props.holdMessageDelay ? this.props.holdMessageDelay : defaultDelay;\r\n this.comfortIntervalId = setInterval(() => {\r\n const message = this.iterateHoldMessage();\r\n if (message && message.length > 0) {\r\n const id = this.props.messages.length + 1;\r\n this.props.appendAgentMessage(message, '', new Date(), id);\r\n }\r\n }, intervalSeconds * 1000);\r\n };\r\n\r\n iterateHoldMessage = () => {\r\n let message = '';\r\n if (this.props.holdMessages && this.props.holdMessages.length > 0) {\r\n if (this.comfortSequence >= this.props.holdMessages.length) {\r\n this.comfortSequence = 0;\r\n }\r\n message = this.props.holdMessages[this.comfortSequence];\r\n this.comfortSequence = this.comfortSequence + 1;\r\n }\r\n return message;\r\n };\r\n\r\n stopIdleComfortMessages = () => {\r\n if (this.comfortIntervalId) {\r\n clearInterval(this.comfortIntervalId);\r\n this.comfortIntervalId = 0;\r\n }\r\n };\r\n\r\n newMessage = (message) => {\r\n const id = this.props.messages.length + 1;\r\n this.props.appendAgentMessage(message.body.message, message.body.displayName, message.body.timestamp, id);\r\n this.props.updateAgentIsTyping(false);\r\n };\r\n\r\n agentIsTyping = () => {\r\n this.props.updateAgentIsTyping(true);\r\n this.clearAnimationTimer();\r\n this.animationStopTimerId = setTimeout(this.stopAgentTypingAnimation, agentTypingAnimationTimeoutMs);\r\n };\r\n\r\n stopAgentTypingAnimation = () => {\r\n this.props.updateAgentIsTyping(false);\r\n };\r\n\r\n clearAnimationTimer = () => {\r\n if (this.animationStopTimerId) {\r\n clearTimeout(this.animationStopTimerId);\r\n this.animationStopTimerId = null;\r\n }\r\n };\r\n\r\n errorEvent = (error) => {\r\n if (error && error.type !== 'close') {\r\n console.error(`ChatComponent encounter an error: `);\r\n console.error(error);\r\n if (this.props.setConnectivityError) {\r\n this.props.setConnectivityError(true);\r\n }\r\n }\r\n };\r\n\r\n sendMessage = (message) => {\r\n this.avayaChatService.sendChatMessage(message);\r\n };\r\n\r\n userIsTyping = (isTyping) => {\r\n this.isTypingMessageRateLimiter.limit(() => {\r\n this.avayaChatService.sendUserIsTyping(isTyping);\r\n });\r\n };\r\n\r\n sendQueueStatusRequest = () => {\r\n this.avayaChatService.sendQueueStatusRequest();\r\n };\r\n\r\n closeButtonClicked = (event) => {\r\n event.preventDefault();\r\n if (this.props.eventEmitter) {\r\n this.stopQueueStatusInterval();\r\n this.stopIdleComfortMessages();\r\n this.avayaChatService.quitChat();\r\n this.cleanupConnections();\r\n this.props.resetChatSession();\r\n this.props.eventEmitter.emit('ChatComponent.Close');\r\n } else {\r\n console.warn('Event emitter was not set for handling close button');\r\n }\r\n };\r\n\r\n startQeueStatusInterval = () => {\r\n if (this.props.serviceSettings.queueStatusIntervalMs) {\r\n this.queueStatusIntervalId = setInterval(\r\n this.sendQueueStatusRequest,\r\n this.props.serviceSettings.queueStatusIntervalMs\r\n );\r\n } else {\r\n console.error('Queue status interval was not set');\r\n }\r\n };\r\n\r\n stopQueueStatusInterval = () => {\r\n if (this.queueStatusIntervalId) {\r\n clearInterval(this.queueStatusIntervalId);\r\n }\r\n };\r\n\r\n startAgentCheckInterval() {\r\n if (this.props.queue) {\r\n this.props.checkIfAgentsAvailable(this.props.queue, logError, () => {\r\n this.agentsAreAvailableCallback();\r\n });\r\n this.agentCheckIntervalId = setInterval(() => {\r\n this.props.checkIfAgentsAvailable(this.props.queue, logError, () => {\r\n this.agentsAreAvailableCallback();\r\n });\r\n }, agentCheckIntervalMs);\r\n } else {\r\n console.warn('startAgentCheckInterval failed - queue is null or empty');\r\n }\r\n }\r\n\r\n agentsAreAvailableCallback() {\r\n this.stopAgentCheckInterval();\r\n this.startQeueStatusInterval();\r\n if (this.state.user != null) {\r\n this.loginUser(this.props.user);\r\n }\r\n }\r\n\r\n stopAgentCheckInterval() {\r\n if (this.agentCheckIntervalId) {\r\n clearInterval(this.agentCheckIntervalId);\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n ...state.chat\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n loadHoldMessages: (holdMessages) => dispatch(loadHoldMessages(holdMessages)),\r\n appendAgentMessage: (message, agentName, timestamp, id) =>\r\n dispatch(appendAgentMessage(message, agentName, timestamp, id)),\r\n updateParticipants: (participants) => dispatch(updateParticipants(participants)),\r\n updateAgentIsTyping: (isTyping) => dispatch(updateAgentIsTyping(isTyping)),\r\n appendInfoMessage: (message, id) => {\r\n dispatch(appendInfoMessage(message, id));\r\n },\r\n updateAgentsAvailable: (available) => dispatch(updateAgentsAvailable(available)),\r\n updateEstimatedWaitTime: (estimatedWaitTime) => dispatch(updateEstimatedWaitTime(estimatedWaitTime)),\r\n resetChatSession: () => dispatch(resetChatSession()),\r\n checkIfAgentsAvailable: (queue, logError, agentsAreAvailableCallback) =>\r\n dispatch(checkIfAgentsAvailable(queue, logError, agentsAreAvailableCallback))\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ChatComponent);\r\n","export const getHoldMessages = webOnHoldGroups => {\r\n const holdGroupName = 'Hold Messages';\r\n let holdMessages = [];\r\n let delay = 30;\r\n if (webOnHoldGroups && webOnHoldGroups.length > 0) {\r\n const holdGroup = webOnHoldGroups.filter(\r\n group => group.groupName === holdGroupName\r\n )[0];\r\n if (holdGroup) {\r\n const messages = holdGroup.messages;\r\n if (messages && messages.length > 0) {\r\n const sortedMessages = messages.sort((a, b) =>\r\n a.sequence > b.sequence ? 1 : b.sequence > a.sequence ? -1 : 0\r\n );\r\n holdMessages = sortedMessages.map(x => x.message);\r\n }\r\n delay = holdGroup.delay;\r\n }\r\n }\r\n const holdMessageResult = {\r\n delay: delay,\r\n messages: holdMessages\r\n };\r\n return holdMessageResult;\r\n};\r\n","import { PhoneNumber } from '../demographics';\r\n\r\nexport class ChatUser {\r\n constructor() {\r\n this.firstName = null;\r\n this.lastName = null;\r\n this.userName = null;\r\n this.company = null;\r\n this.phone = { area: null, number: null };\r\n this.email = null;\r\n this.organizationId = null;\r\n this.memberId = null;\r\n }\r\n\r\n static create(member, company, organizationId) {\r\n const user = new ChatUser();\r\n user.firstName = member.firstName;\r\n user.lastName = member.lastName;\r\n user.userName = ChatUser.getUserName(user.firstName, user.lastName);\r\n user.company = company;\r\n user.memberId = member.id;\r\n user.organizationId = organizationId;\r\n user.email = member.primaryEmail;\r\n if (member.primaryPhone) {\r\n const phoneNumber = new PhoneNumber(member.primaryPhone);\r\n user.phone = {\r\n area: phoneNumber.areaCode,\r\n number: `${phoneNumber.prefix}${phoneNumber.lineNumber}`\r\n };\r\n }\r\n return user;\r\n }\r\n\r\n static getUserName(firstName, lastName) {\r\n return `${firstName} ${lastName}`;\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { PropTypes } from 'prop-types';\r\nimport { logError } from '../../logging';\r\nimport { Header } from './header';\r\nimport { SignInForm } from '../signin';\r\nimport { ErrorComponent } from '../error';\r\nimport { TopicMenu } from '../topics';\r\nimport { LoadingComponent } from './loading';\r\nimport ChatComponent from '../chatComponent';\r\nimport { ChatUser } from '../chatUser';\r\nimport './chatPopUp.scss';\r\n\r\nexport class ChatPopUp extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n chatUser: null,\r\n selectedTopic: null,\r\n error: false,\r\n connectivityError: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener('beforeunload', this.handleBeforeUnload);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\r\n }\r\n\r\n // Note: modern browsers will not display this message at all, rather just the default as its been considered\r\n // as a security risk to allow for custom text\r\n handleBeforeUnload = (e) => {\r\n const message = `If you leave this page your chat session will be closed. Do you want to end the session?`;\r\n if (e) {\r\n // For very old browsers\r\n e.returnValue = message;\r\n }\r\n return message;\r\n };\r\n\r\n componentDidCatch(error) {\r\n logError('chatPopUp', 'componentDidCatch', error);\r\n this.setState({ error: true });\r\n }\r\n\r\n closeButtonClicked = (e) => {\r\n e.preventDefault();\r\n if (this.props.eventEmitter) {\r\n this.props.eventEmitter.emit('ChatPopUp.Close');\r\n }\r\n };\r\n\r\n topicSelected = (topic) => {\r\n this.setState({ selectedTopic: topic });\r\n };\r\n\r\n // If a member is provided from props transform to chat user, else one was provided by login form\r\n getUser() {\r\n let user = null;\r\n if (this.props.client.requiresLogin) {\r\n user = ChatUser.create(this.props.member, this.props.client.name, this.props.organization.organizationId);\r\n } else {\r\n user = this.state.chatUser;\r\n user.company = this.props.client.name;\r\n user.userName = ChatUser.getUserName(user.firstName, user.lastName);\r\n }\r\n return user;\r\n }\r\n\r\n setUserFromLoginScreen(userForm) {\r\n const user = new ChatUser();\r\n user.firstName = userForm.firstName;\r\n user.lastName = userForm.lastName;\r\n user.userName = '';\r\n user.company = userForm.company;\r\n user.email = userForm.email;\r\n user.phone = userForm.phone;\r\n this.setState({ chatUser: user });\r\n }\r\n\r\n setConnectivityError(error) {\r\n this.setState({ connectivityError: error });\r\n }\r\n\r\n render() {\r\n let content = null;\r\n if (this.props.error || this.state.error) {\r\n content = ;\r\n } else if (this.props.loading) {\r\n content = ;\r\n } else if (!this.state.selectedTopic && !this.props.queue) {\r\n content = (\r\n \r\n );\r\n } else if (!this.props.client.requiresLogin && !this.state.chatUser) {\r\n content = (\r\n \r\n );\r\n } else {\r\n const user = this.getUser();\r\n const queue = this.getQueue();\r\n const topicText = this.state.selectedTopic ? this.state.selectedTopic.text : '';\r\n content = (\r\n \r\n );\r\n }\r\n return (\r\n
\r\n \r\n {content}\r\n
\r\n );\r\n }\r\n\r\n // Queue is either passed in or determine from topic selection\r\n getQueue() {\r\n let queue = '';\r\n if (this.props.queue) {\r\n queue = this.props.queue;\r\n } else if (this.state.selectedTopic) {\r\n queue = this.state.selectedTopic.queue;\r\n }\r\n return queue;\r\n }\r\n}\r\n\r\nChatPopUp.propTypes = {\r\n loading: PropTypes.bool.isRequired,\r\n topics: PropTypes.array.isRequired\r\n};\r\n","export const LOAD_MEMBER_SUCCESS = 'LOAD_MEMBER_SUCCESS';\r\nexport const LOAD_MEMBER_FAILED = 'LOAD_MEMBER_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n member: null,\r\n loading: true,\r\n error: false\r\n};\r\n\r\nexport const memberReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.LOAD_MEMBER_SUCCESS:\r\n return {\r\n ...state,\r\n member: action.member,\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_MEMBER_FAILED:\r\n return {\r\n ...state,\r\n member: null,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const REQUEST_ADD_ATTESTATION = 'REQUEST_ADD_ATTESTATION';\r\nexport const ADD_ATTESTATION_SUCCESS = 'ADD_ATTESTATION_SUCCESS';\r\nexport const ADD_ATTESTATION_FAILED = 'ADD_ATTESTATION_FAILED';\r\nexport const REQUEST_LOAD_ATTESTATIONS = 'REQUEST_LOAD_ATTESTATIONS';\r\nexport const LOAD_ATTESTATIONS_SUCCESS = 'LOAD_ATTESTATIONS_SUCCESS';\r\nexport const LOAD_ATTESTATIONS_FAILED = 'LOAD_ATTESTATIONS_FAILED';\r\n","import { logError } from '../../logging';\r\nimport * as types from './actionTypes.js';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport { ApiClient } from '../../api';\r\n\r\nexport const addAttestation = (type, attestationText, result, temperatureFahrenheit) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const data = {\r\n attestationType: type,\r\n content: attestationText,\r\n result: result,\r\n temperatureFahrenheit: temperatureFahrenheit\r\n };\r\n dispatch(requestAddAttestation());\r\n const apiResult = await client.post('member/attestation', data);\r\n if (apiResult.data && apiResult.data.SessionToken) updateSessionToken(apiResult.data.SessionToken);\r\n resolve(dispatch(attestationAddSuccess(apiResult.data.result)));\r\n } catch (error) {\r\n logError('member/attestation/actions', 'addAttestation', error);\r\n resolve(dispatch(attestationAddFailed()));\r\n }\r\n });\r\n };\r\n};\r\n\r\nconst requestAddAttestation = () => {\r\n return { type: types.REQUEST_ADD_ATTESTATION };\r\n};\r\n\r\nconst attestationAddSuccess = (attestation) => {\r\n return { type: types.ADD_ATTESTATION_SUCCESS, attestation };\r\n};\r\n\r\nconst attestationAddFailed = () => {\r\n return { type: types.ADD_ATTESTATION_FAILED };\r\n};\r\n\r\nexport const loadAttestations = (type) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n dispatch(requestLoadAttestations());\r\n const apiResult = await client.get(`member/attestation?type=${type}`);\r\n if (apiResult.data && apiResult.data.sessionToken) updateSessionToken(apiResult.data.sessionToken);\r\n resolve(dispatch(attestationsLoadSuccess(type, apiResult.data.result)));\r\n } catch (error) {\r\n logError('members/attestations/actions', 'loadAttestations', error);\r\n resolve(dispatch(attestationsLoadFailed()));\r\n }\r\n });\r\n };\r\n};\r\n\r\nconst requestLoadAttestations = () => {\r\n return { type: types.REQUEST_LOAD_ATTESTATIONS };\r\n};\r\n\r\nconst attestationsLoadSuccess = (type, attestations) => {\r\n return {\r\n type: types.LOAD_ATTESTATIONS_SUCCESS,\r\n data: { type, attestations }\r\n };\r\n};\r\n\r\nconst attestationsLoadFailed = () => {\r\n return { type: types.LOAD_ATTESTATIONS_FAILED };\r\n};\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n byType: [],\r\n result: null,\r\n adding: false,\r\n addError: false\r\n};\r\n\r\nexport const memberAttestationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.REQUEST_ADD_ATTESTATION:\r\n return {\r\n ...state,\r\n result: null,\r\n adding: true,\r\n addError: false\r\n };\r\n case types.ADD_ATTESTATION_SUCCESS:\r\n let attestations = state.byType[action.attestation.type]\r\n ? state.byType[action.attestation.type].attestations\r\n : [];\r\n attestations = [action.attestation, ...attestations];\r\n return {\r\n ...state,\r\n result: action.attestation,\r\n byType: {\r\n [action.attestation.type]: {\r\n attestations: attestations,\r\n canAttest: false\r\n }\r\n },\r\n adding: false,\r\n addError: false\r\n };\r\n case types.ADD_ATTESTATION_FAILED:\r\n return {\r\n ...state,\r\n result: null,\r\n adding: false,\r\n addError: true\r\n };\r\n case types.REQUEST_LOAD_ATTESTATIONS:\r\n return {\r\n ...state,\r\n loading: true,\r\n error: false\r\n };\r\n case types.LOAD_ATTESTATIONS_SUCCESS:\r\n return {\r\n ...state,\r\n byType: { [action.data.type]: action.data.attestations },\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_ATTESTATIONS_FAILED:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const CoronaVirusSelfCheckerType = 'CoronaVirusSelfChecker';\r\n","export const LOAD_ORGANIZATION_SUCCESS = 'LOAD_ORGANIZATION_SUCCESS';\r\nexport const LOAD_ORGANIZATION_FAILED = 'LOAD_ORGANIZATION_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n organization: null,\r\n loading: true,\r\n error: false\r\n};\r\n\r\nexport const organizationReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.LOAD_ORGANIZATION_SUCCESS:\r\n return {\r\n ...state,\r\n organization: action.organization,\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_ORGANIZATION_FAILED:\r\n return {\r\n ...state,\r\n organization: null,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const LOAD_CLIENT_SUCCESS = 'LOAD_CLIENT_SUCCESS';\r\nexport const LOAD_CLIENT_FAILED = 'LOAD_CLIENT_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n client: null,\r\n loading: true,\r\n error: false\r\n};\r\n\r\nexport const clientReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.LOAD_CLIENT_SUCCESS:\r\n return {\r\n ...state,\r\n client: action.client,\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_CLIENT_FAILED:\r\n return {\r\n ...state,\r\n client: null,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const LOAD_ANALYTICS_SUCCESS = 'LOAD_ANALYTICS_SUCCESS';\r\nexport const LOAD_ANALYTICS_FAILED = 'LOAD_ANALYTICS_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n trackingParams: null,\r\n loading: true,\r\n error: false\r\n};\r\n\r\nexport const analyticsReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.LOAD_ANALYTICS_SUCCESS:\r\n return {\r\n ...state,\r\n trackingParams: action.trackingParams,\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_ANALYTICS_FAILED:\r\n return {\r\n ...state,\r\n trackingParams: null,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const LOAD_FAX_HISTORY_SUCCESS = 'LOAD_FAX_HISTORY_SUCCESS';\r\nexport const LOAD_FAX_HISTORY_FAILED = 'LOAD_FAX_HISTORY_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n list: [],\r\n loading: true,\r\n error: false,\r\n pending: false\r\n};\r\n\r\nexport const faxHistoryReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.LOAD_FAX_HISTORY_SUCCESS:\r\n return {\r\n ...state,\r\n list: action.faxHistory,\r\n pending: action.faxesPending,\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_FAX_HISTORY_FAILED:\r\n return {\r\n ...state,\r\n faxes: [],\r\n pending: false,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport moment from 'moment';\r\nimport { Callout, Colors } from 'react-foundation';\r\nimport { MaterialSpinnerPanel, MaterialSpinner } from '../../shared';\r\nimport './faxHistoryCard.scss';\r\nimport { ErrorCard } from '../../shared/error';\r\n\r\nexport const FaxHistoryCard = () => {\r\n const faxHistory = useSelector(state => state.faxHistory);\r\n return (\r\n
\r\n
\r\n

History

\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nconst EmptyHistory = () => {\r\n return (\r\n \r\n No biometrics faxes have been sent.\r\n \r\n );\r\n};\r\n\r\nconst FaxHistoryTable = props => {\r\n if (props.faxHistory.loading) {\r\n return ;\r\n }\r\n if (props.faxHistory.error) {\r\n return (\r\n \r\n );\r\n }\r\n if (!props.faxHistory.list || !props.faxHistory.list.length) {\r\n return ;\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 {props.faxHistory && props.faxHistory.list\r\n ? props.faxHistory.list.map(x => (\r\n \r\n ))\r\n : null}\r\n \r\n
Fax DatePhysicianScreening Date(s)Status
\r\n );\r\n};\r\n\r\nconst HistoryRow = props => {\r\n return (\r\n \r\n {moment(props.fax.memberSignOffDate).format('MM/DD/YYYY')}\r\n {fullName(props.fax)}\r\n {props.fax.documentTitle}\r\n \r\n
\r\n
{props.fax.faxStatus}
\r\n {showProgress(props.fax.faxStatus) ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nconst fullName = fax => {\r\n return `${fax.lastName}, ${fax.firstName}`;\r\n};\r\n\r\nconst showProgress = status => {\r\n if (!status) return false;\r\n status = status.toLowerCase();\r\n return status !== 'sent' && status !== 'failed' && status !== 'unknown';\r\n};\r\n","import * as types from './actionTypes.js';\r\nimport { updateSessionToken } from '../../session';\r\nimport { ApiClient } from '../../api';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { getSessionToken } from '../../session';\r\n\r\nexport const loadFaxHistory = logError => {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return dispatch => {\r\n return new Promise(async resolve => {\r\n const apiClient = new ApiClient(apiRootUrl, sessionToken);\r\n try {\r\n const apiResult = await apiClient.get('member/fax');\r\n if (apiResult.data.SessionToken) {\r\n updateSessionToken(apiResult.data.SessionToken);\r\n }\r\n if (apiResult.data && apiResult.data.Result) {\r\n const result = convertResult(apiResult.data.Result);\r\n resolve(\r\n dispatch(loadFaxHistorySuccess(result, faxesPending(result)))\r\n );\r\n } else {\r\n resolve(dispatch(loadFaxHistoryFailed()));\r\n }\r\n } catch (error) {\r\n logError('faxes/history/actions', 'loadFaxHistory', error);\r\n resolve(dispatch(loadFaxHistoryFailed()));\r\n }\r\n });\r\n };\r\n};\r\n\r\nlet faxHistoryIntervalId = null;\r\n\r\nexport const startHistoryRefresh = async dispatch => {\r\n const refreshTimeout = 60000;\r\n const result = await dispatch(loadFaxHistory());\r\n if (result.faxesPending) {\r\n faxHistoryIntervalId = setInterval(async () => {\r\n const result = await dispatch(loadFaxHistory());\r\n if (!result.faxesPending) {\r\n clearInterval(faxHistoryIntervalId);\r\n }\r\n }, refreshTimeout);\r\n }\r\n};\r\n\r\nexport const faxesPending = faxes => {\r\n const sent = 'sent';\r\n const failed = 'failed';\r\n const cancelled = 'cancelled';\r\n let pending = false;\r\n if (faxes) {\r\n for (let i = 0; i < faxes.length; i++) {\r\n const faxStatus = faxes[i].faxStatus.toLowerCase();\r\n const externalFaxId = faxes[i].externalFaxId;\r\n pending =\r\n !!externalFaxId &&\r\n faxStatus !== sent &&\r\n faxStatus !== failed &&\r\n faxes !== cancelled;\r\n if (pending) {\r\n break;\r\n }\r\n }\r\n }\r\n return pending;\r\n};\r\n\r\nexport const loadFaxHistorySuccess = (faxHistory, faxesPending) => {\r\n return {\r\n type: types.LOAD_FAX_HISTORY_SUCCESS,\r\n faxHistory: faxHistory,\r\n faxesPending: faxesPending\r\n };\r\n};\r\n\r\nconst convertResult = results => {\r\n return !results\r\n ? []\r\n : results.map(x => {\r\n return {\r\n memberFaxId: x.MemberFaxId,\r\n memberId: x.MemberId,\r\n memberDocumentId: x.MemberDocumentId,\r\n externalFaxId: x.ExternalFaxId,\r\n firstName: x.FirstName,\r\n lastName: x.LastName,\r\n faxNumber: x.FaxNumber,\r\n lastStatusDate: x.LastStatusDate,\r\n faxStatus: x.FaxStatus,\r\n memberSignOffDate: x.MemberSignOffDate,\r\n documentTitle: x.DocumentTitle\r\n };\r\n });\r\n};\r\n\r\nexport const loadFaxHistoryFailed = () => {\r\n return { type: types.LOAD_FAX_HISTORY_FAILED };\r\n};\r\n","export const LOAD_FAX_RECIPIENTS_SUCCESS = 'LOAD_FAX_RECIPIENTS_SUCCESS';\r\nexport const LOAD_FAX_RECIPIENTS_FAILED = 'LOAD_FAX_RECIPIENTS_FAILED';\r\nexport const ADD_FAX_RECIPIENT_FAILED = 'ADD_FAX_RECIPIENT_FAILED';\r\nexport const ADD_FAX_RECIPIENT_SUCCESS = 'ADD_FAX_RECIPIENT_SUCCESS';\r\nexport const REQUEST_ADD_FAX_RECIPIENT = 'REQUEST_ADD_FAX_RECIPIENT';\r\nexport const REQUEST_REMOVE_FAX_RECIPIENT = 'REQUEST_REMOVE_FAX_RECIPIENT';\r\nexport const REMOVE_FAX_RECIPIENT_SUCCESS = 'REMOVE_FAX_RECIPIENT_SUCCESS';\r\nexport const REMOVE_FAX_RECIPIENT_FAILED = 'REMOVE_FAX_RECIPIENT_FAILED';\r\nexport const UPDATE_FAX_RECIPIENT_FAILED = 'UPDATE_FAX_RECIPIENT_FAILED';\r\nexport const UPDATE_FAX_RECIPIENT_SUCCESS = 'UPDATE_FAX_RECIPIENT_SUCCESS';\r\nexport const REQUEST_UPDATE_FAX_RECIPIENT = 'REQUEST_UPDATE_FAX_RECIPIENT';\r\nexport const SET_RECIPIENT_CONFLICT_STATUS = 'SET_RECIPIENT_CONFLICT_STATUS';\r\nexport const RESET_RECIPIENT_CONFLICT_STATUS = 'RESET_RECIPIENT_CONFLICT_STATUS';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n list: [],\r\n loading: true,\r\n error: false,\r\n newRecipient: {\r\n adding: false,\r\n addSuccess: false,\r\n addFailure: false,\r\n conflictRecipient: false\r\n },\r\n updateRecipient: {\r\n updating: false,\r\n updateSuccess: false,\r\n updateFailure: false\r\n },\r\n removeRecipient: {\r\n removing: false,\r\n removeSuccess: false,\r\n removeFailure: false\r\n }\r\n};\r\n\r\nexport const faxRecipientsReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.LOAD_FAX_RECIPIENTS_SUCCESS:\r\n return {\r\n ...state,\r\n list: action.faxRecipients,\r\n loading: false\r\n };\r\n case types.LOAD_FAX_RECIPIENTS_FAILED:\r\n return {\r\n ...state,\r\n list: [],\r\n loading: false,\r\n error: true\r\n };\r\n case types.REQUEST_ADD_FAX_RECIPIENT:\r\n return {\r\n ...state,\r\n newRecipient: {\r\n adding: true,\r\n conflictRecipient: false\r\n }\r\n };\r\n case types.ADD_FAX_RECIPIENT_SUCCESS:\r\n return {\r\n ...state,\r\n newRecipient: {\r\n adding: false,\r\n addSuccess: true,\r\n conflictRecipient: false\r\n },\r\n list: [...state.list.concat(action.newRecipient)]\r\n };\r\n case types.ADD_FAX_RECIPIENT_FAILED:\r\n return {\r\n ...state,\r\n newRecipient: {\r\n adding: false,\r\n addFailure: true,\r\n conflictRecipient: false\r\n }\r\n };\r\n case types.REQUEST_UPDATE_FAX_RECIPIENT:\r\n return {\r\n ...state,\r\n updateRecipient: {\r\n updating: true\r\n }\r\n };\r\n case types.UPDATE_FAX_RECIPIENT_SUCCESS:\r\n return {\r\n ...state,\r\n updateRecipient: {\r\n updating: false,\r\n updateSuccess: true\r\n },\r\n list: [\r\n ...state.list\r\n .filter(item => item.memberFaxRecipientId !== action.recipientId)\r\n .concat(action.updateRecipient)\r\n ]\r\n };\r\n case types.UPDATE_FAX_RECIPIENT_FAILED:\r\n return {\r\n ...state,\r\n updateRecipient: {\r\n updating: false,\r\n updateFailure: true\r\n }\r\n };\r\n case types.REQUEST_REMOVE_FAX_RECIPIENT:\r\n return {\r\n ...state,\r\n removeRecipient: {\r\n removing: true\r\n }\r\n };\r\n case types.REMOVE_FAX_RECIPIENT_SUCCESS:\r\n return {\r\n ...state,\r\n removeRecipient: {\r\n removing: false,\r\n removeSuccess: true\r\n },\r\n list: [\r\n ...state.list.filter(\r\n item => item.memberFaxRecipientId !== action.recipientId\r\n )\r\n ]\r\n };\r\n case types.REMOVE_FAX_RECIPIENT_FAILED:\r\n return {\r\n ...state,\r\n removeRecipient: {\r\n removing: false,\r\n removeFailure: true\r\n }\r\n };\r\n case types.SET_RECIPIENT_CONFLICT_STATUS:\r\n return {\r\n ...state,\r\n newRecipient: {\r\n adding: false,\r\n conflictRecipient: true\r\n }\r\n }\r\n case types.RESET_RECIPIENT_CONFLICT_STATUS:\r\n return {\r\n ...state,\r\n newRecipient: {\r\n adding: false,\r\n conflictRecipient: false\r\n }\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { logError } from '../../logging';\r\nimport * as types from './actionTypes';\r\nimport { updateSessionToken } from '../../session';\r\nimport { ApiClient } from '../../api';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { getSessionToken } from '../../session';\r\n\r\nexport const loadFaxRecipients = () => {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return dispatch => {\r\n return new Promise(async resolve => {\r\n const apiClient = new ApiClient(apiRootUrl, sessionToken);\r\n try {\r\n const apiResult = await apiClient.get('member/faxrecipient');\r\n if (apiResult.data.SessionToken) {\r\n updateSessionToken(apiResult.data.SessionToken);\r\n }\r\n if (apiResult.data && apiResult.data.Result) {\r\n const result = convertRecipientList(apiResult.data.Result);\r\n resolve(dispatch(loadFaxRecipientsSuccess(result)));\r\n } else {\r\n resolve(dispatch(loadFaxRecipientsFailed()));\r\n }\r\n } catch (error) {\r\n logError('faxes/recipients/actions', 'loadFaxRecipients', error);\r\n resolve(dispatch(loadFaxRecipientsFailed()));\r\n }\r\n });\r\n };\r\n};\r\n\r\nexport const loadFaxRecipientsSuccess = faxRecipients => {\r\n return {\r\n type: types.LOAD_FAX_RECIPIENTS_SUCCESS,\r\n faxRecipients: faxRecipients\r\n };\r\n};\r\n\r\nconst convertRecipientList = results => {\r\n return !results ? [] : results.map(x => convertRecipient(x));\r\n};\r\n\r\nconst convertRecipient = x => {\r\n return {\r\n memberId: x.MemberId,\r\n firstName: x.FirstName,\r\n lastName: x.LastName,\r\n faxNumber: x.FaxNumber,\r\n memberFaxRecipientId: x.MemberFaxRecipientId,\r\n dateCreated: x.dateCreated\r\n };\r\n};\r\n\r\nexport const loadFaxRecipientsFailed = () => {\r\n return { type: types.LOAD_FAX_RECIPIENTS_SUCCESS };\r\n};\r\n\r\nexport const requestAddRecipient = () => {\r\n return { type: types.REQUEST_ADD_FAX_RECIPIENT };\r\n};\r\n\r\nexport const addFaxRecipient = newRecipient => {\r\n return dispatch => {\r\n return new Promise(async resolve => {\r\n let sessionToken = getSessionToken();\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const apiClient = new ApiClient(apiRootUrl, sessionToken);\r\n try {\r\n dispatch(requestAddRecipient());\r\n const apiResult = await apiClient.post('member/faxrecipient', {\r\n firstName: newRecipient.firstName,\r\n lastName: newRecipient.lastName,\r\n faxNumber: newRecipient.faxNumber\r\n });\r\n if (apiResult.data.SessionToken) {\r\n updateSessionToken(apiResult.data.SessionToken);\r\n }\r\n if (apiResult.status === 200) {\r\n if (apiResult.data && apiResult.data.Result) {\r\n const result = convertRecipient(apiResult.data.Result);\r\n resolve(dispatch(addFaxRecipientSuccess(result)));\r\n } else {\r\n resolve(dispatch(addFaxRecipientFailure()));\r\n }\r\n }\r\n } catch (error) {\r\n if (error.response.status === 409) {\r\n dispatch(setConflictStatus());\r\n return;\r\n }\r\n logError('faxes/recipients/actions', 'addFaxRecipient', error);\r\n resolve(dispatch(addFaxRecipientFailure()));\r\n }\r\n });\r\n };\r\n};\r\n\r\nexport const setConflictStatus = () => {\r\n return {\r\n type: types.SET_RECIPIENT_CONFLICT_STATUS\r\n }\r\n}\r\n\r\nexport const resetConflictStatus = () => {\r\n return {\r\n type: types.RESET_RECIPIENT_CONFLICT_STATUS\r\n }\r\n}\r\n\r\nexport const addFaxRecipientSuccess = newRecipient => {\r\n return {\r\n type: types.ADD_FAX_RECIPIENT_SUCCESS,\r\n newRecipient: newRecipient\r\n };\r\n};\r\n\r\nexport const addFaxRecipientFailure = () => {\r\n return {\r\n type: types.ADD_FAX_RECIPIENT_FAILED\r\n };\r\n};\r\n\r\nexport const requestUpdateRecipient = () => {\r\n return { type: types.REQUEST_UPDATE_FAX_RECIPIENT };\r\n};\r\n\r\nexport const updateFaxRecipient = recipient => {\r\n return dispatch => {\r\n return new Promise(async resolve => {\r\n let sessionToken = getSessionToken();\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const apiClient = new ApiClient(apiRootUrl, sessionToken);\r\n try {\r\n dispatch(requestUpdateRecipient());\r\n const apiResult = await apiClient.put('member/faxrecipient', {\r\n firstName: recipient.firstName,\r\n lastName: recipient.lastName,\r\n faxNumber: recipient.faxNumber,\r\n memberFaxRecipientId: recipient.memberFaxRecipientId,\r\n active: recipient.active\r\n });\r\n if (apiResult.data.SessionToken) {\r\n updateSessionToken(apiResult.data.SessionToken);\r\n }\r\n if (apiResult.data && apiResult.data.Result) {\r\n const result = convertRecipient(apiResult.data.Result);\r\n resolve(\r\n dispatch(\r\n updateFaxRecipientSuccess(result, recipient.memberFaxRecipientId)\r\n )\r\n );\r\n } else {\r\n resolve(dispatch(updateFaxRecipientFailure()));\r\n }\r\n } catch (error) {\r\n logError('faxes/recipients/actions', 'updateFaxRecipient', error);\r\n resolve(dispatch(updateFaxRecipientFailure()));\r\n }\r\n });\r\n };\r\n};\r\n\r\nexport const updateFaxRecipientSuccess = (updateRecipient, recipientId) => {\r\n return {\r\n type: types.UPDATE_FAX_RECIPIENT_SUCCESS,\r\n updateRecipient: updateRecipient,\r\n recipientId: recipientId\r\n };\r\n};\r\n\r\nexport const updateFaxRecipientFailure = () => {\r\n return {\r\n type: types.UPDATE_FAX_RECIPIENT_FAILED\r\n };\r\n};\r\n\r\nexport const requestRemoveRecipient = () => {\r\n return { type: types.REQUEST_REMOVE_FAX_RECIPIENT };\r\n};\r\n\r\nexport const removeFaxRecipient = recipientId => {\r\n return dispatch => {\r\n return new Promise(async resolve => {\r\n let sessionToken = getSessionToken();\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const apiClient = new ApiClient(apiRootUrl, sessionToken);\r\n try {\r\n dispatch(requestRemoveRecipient());\r\n const apiResult = await apiClient.delete(\r\n `member/faxrecipient/${recipientId}`\r\n );\r\n if (apiResult.status === 200) {\r\n resolve(dispatch(removeFaxRecipientSuccess(recipientId)));\r\n } else {\r\n resolve(dispatch(removeFaxRecipientFailure()));\r\n }\r\n } catch (error) {\r\n logError('faxes/recipients/actions', 'removeFaxRecipient', error);\r\n resolve(dispatch(removeFaxRecipientFailure()));\r\n }\r\n });\r\n };\r\n};\r\n\r\nexport const removeFaxRecipientSuccess = recipientId => {\r\n return {\r\n type: types.REMOVE_FAX_RECIPIENT_SUCCESS,\r\n recipientId: recipientId\r\n };\r\n};\r\n\r\nexport const removeFaxRecipientFailure = () => {\r\n return {\r\n type: types.REMOVE_FAX_RECIPIENT_FAILED\r\n };\r\n};\r\n","import React from \"react\";\r\nimport Modal from \"react-modal\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { removeFaxRecipient } from \"./actions\";\r\nimport \"./confirmationModal.scss\";\r\n\r\nexport const ConfirmationModal = props => {\r\n const dispatch = useDispatch();\r\n return (\r\n {\r\n props.setConfirmationModalOpen(false);\r\n }}\r\n >\r\n
\r\n
\r\n

Confirmation

\r\n
\r\n
\r\n Are you sure you want to delete the recipient{\" \"}\r\n \r\n {props.recipient.firstName} {props.recipient.lastName}\r\n {\" \"}\r\n ?\r\n
\r\n
\r\n
\r\n {\r\n e.preventDefault();\r\n props.setConfirmationModalOpen(false);\r\n }}\r\n >\r\n Cancel\r\n \r\n {\r\n e.preventDefault();\r\n dispatch(\r\n removeFaxRecipient(props.recipient.memberFaxRecipientId)\r\n );\r\n props.setConfirmationModalOpen(false);\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 { MaterialSpinner, formatPhoneNumber } from \"../../shared\";\r\nimport { FaxRecipientModal } from \"./index\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { Colors, Callout } from \"react-foundation\";\r\nimport { ConfirmationModal } from \"./confirmationModal\";\r\nimport editIcon from \"../../images/editIcon.png\";\r\nimport trashIcon from \"../../images/trashIcon.png\";\r\nimport { getOrderRecipients } from \"./faxRecipientSelector\";\r\nimport \"./faxRecipientCard.scss\";\r\nimport {ErrorCard} from '../../shared/error';\r\n\r\nexport const FaxRecipientsCard = props => {\r\n const [addModalOpen, setAddModalOpen] = useState(false);\r\n const [confirmationModalOpen, setConfirmationModalOpen] = useState(false);\r\n const [editExisting, setEditExisting] = useState(false);\r\n const [selectedRecipient, setSelectedRecipient] = useState({\r\n firstName: \"\",\r\n lastName: \"\",\r\n faxNumber: \"\",\r\n memberFaxRecipientId: \"\"\r\n });\r\n const [modalTitle, setModalTitle] = useState(null);\r\n\r\n const faxRecipients = useSelector(state => state.faxRecipients);\r\n return (\r\n
\r\n
\r\n

Select Physician

\r\n
\r\n
\r\n \r\n
\r\n {\r\n e.preventDefault();\r\n setSelectedRecipient({\r\n firstName: \"\",\r\n lastName: \"\",\r\n faxNumber: \"\",\r\n memberFaxRecipientId: \"\"\r\n });\r\n setAddModalOpen(true);\r\n setEditExisting(false);\r\n setModalTitle(\"+Add a Doctor\");\r\n }}\r\n >\r\n +Add New Doctor\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst FaxRecipientsTable = props => {\r\n if (props.faxRecipients.loading) {\r\n return (\r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n if(props.faxRecipients.error) {\r\n return \r\n }\r\n\r\n if (!props.faxRecipients.list || !props.faxRecipients.list.length) {\r\n return ;\r\n }\r\n\r\n const orderedRecipients = getOrderRecipients(props.faxRecipients.list);\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 {orderedRecipients && orderedRecipients.length\r\n ? orderedRecipients.map(x => (\r\n \r\n ))\r\n : null}\r\n \r\n
DoctorFax Number
\r\n );\r\n};\r\n\r\nconst RecipientsRow = props => {\r\n return (\r\n \r\n \r\n props.setRecipientId(e.target.value)}\r\n value={props.recipient.memberFaxRecipientId}\r\n id={props.recipient.memberFaxRecipientId}\r\n />\r\n \r\n {fullName(props.recipient)}\r\n {formatPhoneNumber(props.recipient.faxNumber)}\r\n \r\n {\r\n e.preventDefault();\r\n props.setSelectedRecipient(props.recipient);\r\n props.setConfirmationModalOpen(true);\r\n }}\r\n >\r\n \"Delete\"\r\n \r\n {\r\n e.preventDefault();\r\n props.setSelectedRecipient(props.recipient);\r\n props.setAddModalOpen(true);\r\n props.setEditExisting(true);\r\n props.setModalTitle(\"Edit Doctor Information\");\r\n }}\r\n >\r\n \"Edit\"\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst fullName = recipient => {\r\n return `${recipient.lastName}, ${recipient.firstName}`;\r\n};\r\n\r\nconst EmptyRecipients = () => {\r\n return (\r\n \r\n No recipients available for faxing.\r\n \r\n );\r\n};\r\n","export const getOrderRecipients = recipients => {\r\n const sortedRecipients =\r\n !recipients || !recipients.length\r\n ? []\r\n : recipients.sort(\r\n (a, b) => a.memberFaxRecipientId - b.memberFaxRecipientId\r\n );\r\n return sortedRecipients;\r\n};\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVVJREFUeNrMVu1twjAQNYj/zQjegGzQjMBKnaAjdISWCeJMUGcCwgSYCagjXaXj5PuwoVKf9IRj4nt35/M5G1eHQ2YP433mknnNjJlfFgPbSrFPEFoxg9ge5g/uyViNfjD/rfOjxcjGkLoWrFGnzCNNNSd4yeyelJk7jR3zUnR/hK37J/jOvAFPwBvhWJg7FdaagI11QGz4t1rfybwn747WlE5o7KHiMM7weyXzCym2pWUPO24xA19wTBUMBQOaYCQOFqudE0yMx/hgc2t6xo4oiD17EdKsIdTs4UI8nhTjSYi+SlDCKxrPJPrQKjhUNg3P7Z8meG6IGAvOtYK4cHqDYNAOvSaYGqqyf0QwKO1NQ7Ug3ZdoEBgeFQzC4Zciiq0XcKldad8yTkq/JjgbPz0SKa6pVZA7/J4IJKHRV2FAt/eF3O7SM9uddoY77q3BUbZJ/AgwAKd7biM6NvS/AAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAATRJREFUeNrcluENgjAQhcEwACPgBjiBMAFuAGwAE8gGjoAbqBMQJ8ARdALcQK/makpTbbkWf9jkRXKp/Xh3zXG+N9+KQAU+70HXGVleDBpAD9SAMc8HhaAKtCYenipiB9BGit1BS/bQCm9CkZzGENUr9lYBbuJ5vlmmscNapaiOpxLXq44d0hOHNesVTlu+2RYow1TQSvyDDfATTISO1sJBzcIvey6qIMWhztmoZrZAK9hUoDVsCpACazDeUC5NrrkgrHGUukMCw67PQDX+FlSYqcOt0KJKPJwEMwXG6EwFnQQzSWkkNF8OTRFyVri1dih/0zg0osBMHObSp+WIzsjjgsktrRHkZCbRAVeuh52F9+P1/8BAupGJ4/MzVXBnOSaa6N1/faEhZzNkkA2/J7FJPAUYAJLAn2oqv/5RAAAAAElFTkSuQmCC\"","import React from \"react\";\r\nimport Modal from 'react-modal';\r\nimport './faxRecipientModal.scss';\r\nimport * as yup from 'yup';\r\nimport { ErrorMessage, withFormik } from 'formik';\r\nimport { phoneNumberRegExp, MaterialSpinnerPanel } from '../../shared';\r\nimport { addFaxRecipient, updateFaxRecipient } from './actions';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { ErrorCard } from '../../shared/error';\r\nimport { resetConflictStatus } from '../recipients';\r\n\r\nexport const FaxRecipientModal = (props) => {\r\n const adding = useSelector(state => state.faxRecipients.newRecipient.adding);\r\n const conflictRecipient = useSelector(state => state.faxRecipients.newRecipient.conflictRecipient);\r\n return (\r\n {}}\r\n onRequestClose={e => {\r\n props.setAddModalOpen(false);\r\n }}>\r\n
\r\n
\r\n

{props.title}

\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nconst recipientForm = props => {\r\n const { values, isValid, handleChange, handleBlur, handleSubmit } = props;\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 {props.conflictRecipient ? () : null}\r\n
\r\n {\r\n props.setAddModalOpen(false);\r\n props.dispatch(resetConflictStatus());\r\n }}>\r\n Cancel\r\n \r\n\r\n \r\n
\r\n
\r\n {props.adding ? (\r\n \r\n ) : null}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst schema = yup.object({\r\n firstName: yup\r\n .string()\r\n .required('First name is required')\r\n .max(60, 'Max of 60 characters'),\r\n lastName: yup\r\n .string()\r\n .required('Last name is required')\r\n .max(60, 'Max of 60 characters'),\r\n faxNumber: yup\r\n .string()\r\n .required('Fax number is required')\r\n .matches(phoneNumberRegExp, 'A valid fax number is required.')\r\n});\r\n\r\nconst ValidatedRecipientForm = withFormik({\r\n enableReinitialize: true,\r\n isInitialValid: false,\r\n mapPropsToValues: ({ recipient }) => ({\r\n firstName: recipient.firstName,\r\n lastName: recipient.lastName,\r\n faxNumber: recipient.faxNumber\r\n }),\r\n validationSchema: schema,\r\n handleSubmit: (values, { props }) => {\r\n const promise = props.dispatch(\r\n props.editExisting\r\n ? updateFaxRecipient({\r\n firstName: values.firstName,\r\n lastName: values.lastName,\r\n faxNumber: values.faxNumber,\r\n memberFaxRecipientId: props.recipient.memberFaxRecipientId,\r\n active: true\r\n })\r\n : addFaxRecipient({\r\n firstName: values.firstName,\r\n lastName: values.lastName,\r\n faxNumber: values.faxNumber\r\n })\r\n );\r\n\r\n promise.then(() => {\r\n props.setAddModalOpen(false);\r\n });\r\n }\r\n})(recipientForm);\r\n","export const phoneNumberRegExp = /^\\D?(\\d{3})\\D?\\D?(\\d{3})\\D?(\\d{4})$/;\r\nexport const zipCodeRegExp = /^[0-9]{5}$/;\r\n","export const getBiometricsMeasurementsList = (result) => {\r\n const tips = [];\r\n addBmi(result, tips);\r\n addBloodGlucoseFasting(result, tips);\r\n addBloodGlucoseRandom(result, tips);\r\n addBodyFatPercentage(result, tips);\r\n addBloodPressure(result, tips);\r\n addHba1c(result, tips);\r\n addHeight(result, tips);\r\n addWeight(result, tips);\r\n addHdl(result, tips);\r\n addLdl(result, tips);\r\n addCotinine(result, tips);\r\n addPsa(result, tips);\r\n addTsh(result, tips);\r\n addTotalCholesterol(result, tips);\r\n addWaist(result, tips);\r\n addSarsCov2NaaDiagnostic(result, tips);\r\n addSarsCov2Antibody(result, tips);\r\n return tips;\r\n};\r\n\r\nconst addBmi = (result, tips) => {\r\n if (result.bmi) {\r\n tips.push('BMI');\r\n }\r\n};\r\n\r\nconst addBloodGlucoseFasting = (result, tips) => {\r\n if (result.bloodGlucoseFasting) {\r\n tips.push('Blood Glucose Fasting');\r\n }\r\n};\r\n\r\nconst addBloodGlucoseRandom = (result, tips) => {\r\n if (result.bloodGlucoseRandom) {\r\n tips.push('Blood Glucose Random');\r\n }\r\n};\r\n\r\nconst addBodyFatPercentage = (result, tips) => {\r\n if (result.bodyFatPercentage) {\r\n tips.push('Body Fat Percentage');\r\n }\r\n};\r\n\r\nconst addBloodPressure = (result, tips) => {\r\n if (result.diastolic || result.systolic) {\r\n tips.push('Blood Pressure');\r\n }\r\n};\r\n\r\nconst addHdl = (result, tips) => {\r\n if (result.hdl) {\r\n tips.push('HDL');\r\n }\r\n};\r\n\r\nconst addHba1c = (result, tips) => {\r\n if (result.hba1c) {\r\n tips.push('HBA1C');\r\n }\r\n};\r\n\r\nconst addHeight = (result, tips) => {\r\n if (result.height) {\r\n tips.push('Height');\r\n }\r\n};\r\n\r\nconst addLdl = (result, tips) => {\r\n if (result.ldl) {\r\n tips.push('LDL');\r\n }\r\n};\r\n\r\nconst addCotinine = (result, tips) => {\r\n if (result.nicotineMetaboliteSerumResult) {\r\n tips.push('Cotinine');\r\n }\r\n};\r\n\r\nconst addPsa = (result, tips) => {\r\n if (result.psa) {\r\n tips.push('PSA');\r\n }\r\n};\r\n\r\nconst addTsh = (result, tips) => {\r\n if (result.tsh) {\r\n tips.push('TSH');\r\n }\r\n};\r\n\r\nconst addTotalCholesterol = (result, tips) => {\r\n if (result.totalCholesterol) {\r\n tips.push('Total Cholesterol');\r\n }\r\n};\r\n\r\nconst addWaist = (result, tips) => {\r\n if (result.waist) {\r\n tips.push('Waist Circumference');\r\n }\r\n};\r\n\r\nconst addWeight = (result, tips) => {\r\n if (result.weight) {\r\n tips.push('Weight');\r\n }\r\n};\r\n\r\nconst addSarsCov2NaaDiagnostic = (result, tips) => {\r\n if (result.sarsCov2NaaDiagnostic) {\r\n tips.push('Covid-19 Diagnostic');\r\n }\r\n};\r\n\r\nconst addSarsCov2Antibody = (result, tips) => {\r\n if (result.sarsCov2Antibody) {\r\n tips.push('Covid-19 Antibody');\r\n }\r\n};\r\n","import React from 'react';\r\nimport { Colors, Callout } from 'react-foundation';\r\nimport { useSelector } from 'react-redux';\r\nimport { MaterialSpinnerPanel } from '../../shared';\r\nimport { getBiometricsMeasurementsList } from './getBiometricsMeasurementsList';\r\nimport { ErrorCard } from '../../shared/error';\r\n\r\nexport const BiometricsSelectionCard = props => {\r\n const biometrics = useSelector(state => state.biometrics);\r\n return (\r\n
\r\n
\r\n

Select Biometrics

\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nconst EmptyMeasurements = () => {\r\n return (\r\n \r\n No biometrics measurements available for faxing.\r\n \r\n );\r\n};\r\n\r\nconst ShortenMeasurements = MeasurementStr => {\r\n return MeasurementStr.length > 20\r\n ? MeasurementStr.substring(0, 80).replace(/,*\\s+\\S*$/, '') + '...'\r\n : MeasurementStr;\r\n};\r\n\r\nconst BiometricsTable = props => {\r\n if (props.biometrics.loading) {\r\n return ;\r\n }\r\n if (props.biometrics.error) {\r\n return (\r\n \r\n );\r\n }\r\n if (!props.biometrics.list.length) {\r\n return ;\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 {props.biometrics && props.biometrics.list\r\n ? props.biometrics.list.map(x => (\r\n \r\n ))\r\n : null}\r\n \r\n
DateMeasurementsSource
\r\n );\r\n};\r\n\r\nconst BiometricsRow = props => {\r\n const measurementsTooltipText = getBiometricsMeasurementsList(\r\n props.biometrics\r\n ).join(', ');\r\n const idStr = props.biometrics.id.toString();\r\n const rowChecked = !!props.measurementDates.get(idStr);\r\n return (\r\n \r\n \r\n {\r\n handleSelectionChange(\r\n e,\r\n props.biometrics.dateKey,\r\n props.setMeasurementDates,\r\n props.measurementDates\r\n );\r\n }}\r\n />\r\n \r\n {props.biometrics.measurementDate}\r\n \r\n {ShortenMeasurements(measurementsTooltipText)}\r\n \r\n {props.biometrics.measurementSource}\r\n \r\n );\r\n};\r\n\r\nconst handleSelectionChange = (\r\n e,\r\n dateKey,\r\n setMeasurementDates,\r\n measurementDates\r\n) => {\r\n const id = e.target.id;\r\n const isChecked = e.target.checked;\r\n const newDates = new Map(measurementDates);\r\n if (isChecked) {\r\n newDates.set(id, dateKey);\r\n } else {\r\n newDates.delete(id);\r\n }\r\n setMeasurementDates(newDates);\r\n};\r\n","export const SEND_BIOMETRICS_REPORT = 'SEND_BIOMETRICS_REPORT';\r\nexport const SEND_BIOMETRICS_REPORT_SUCCESS = 'SEND_BIOMETRICS_REPORT_SUCCESS';\r\nexport const SEND_BIOMETRICS_REPORT_FAILED = 'SEND_BIOMETRICS_REPORT_FAILED';\r\n","import * as types from './actionTypes.js';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport { ApiClient } from '../../api';\r\n\r\nexport const sendReport = (\r\n recipientId,\r\n measurementDates,\r\n signedOff,\r\n logError\r\n) => {\r\n return dispatch => {\r\n return new Promise(async resolve => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const data = {\r\n MemberFaxRecipientId: recipientId,\r\n MeasurementDates: measurementDates,\r\n MemberSignedOff: signedOff\r\n };\r\n dispatch(requestSendReport());\r\n const apiResult = await client.post('member/fax/biometricdata', data);\r\n if (apiResult.data && apiResult.data.SessionToken)\r\n updateSessionToken(apiResult.data.SessionToken);\r\n if (apiResult.data && apiResult.data.Result) {\r\n resolve(dispatch(sendReportSuccess()));\r\n } else {\r\n resolve(dispatch(sendReportFailed()));\r\n }\r\n } catch (error) {\r\n logError('faxes/biometricsreport/actions', 'sendReport', error);\r\n resolve(dispatch(sendReportFailed()));\r\n }\r\n });\r\n };\r\n};\r\n\r\nexport const requestSendReport = () => {\r\n return { type: types.SEND_BIOMETRICS_REPORT };\r\n};\r\n\r\nexport const sendReportSuccess = () => {\r\n return { type: types.SEND_BIOMETRICS_REPORT_SUCCESS };\r\n};\r\n\r\nexport const sendReportFailed = () => {\r\n return { type: types.SEND_BIOMETRICS_REPORT_FAILED };\r\n};\r\n","import React from 'react';\r\nimport Modal from 'react-modal';\r\nimport ReactGa from 'react-ga';\r\nimport { useDispatch } from 'react-redux';\r\nimport { sendReport } from './actions';\r\nimport { startHistoryRefresh } from '../history';\r\nimport { logError } from '../../logging';\r\nimport './authorizationModal.scss';\r\n\r\nexport const AuthorizationModal = props => {\r\n const dispatch = useDispatch();\r\n return (\r\n {\r\n props.setAuthorizationModalOpen(false);\r\n }}>\r\n
\r\n
\r\n

Authorization

\r\n
\r\n
\r\n By clicking I Accept, I acknowledge that Health Advocate is releasing\r\n my personal health information at my request and at my specific\r\n direction. Health Advocate will fax the information to the fax number\r\n I have provided and it is my sole responsibility to verify and confirm\r\n the accuracy of the fax number I have provided. Health Advocate is not\r\n responsible to verify the accuracy or confidentiality of a provided\r\n fax number.\r\n
\r\n
\r\n {\r\n e.preventDefault();\r\n props.setAuthorizationModalOpen(false);\r\n }}\r\n />\r\n {\r\n e.preventDefault();\r\n const selectedDates = Array.from(props.measurementDates.values());\r\n dispatch(\r\n sendReport(props.recipientId, selectedDates, true, logError)\r\n ).then(() => {\r\n startHistoryRefresh(dispatch);\r\n });\r\n ReactGa.event({\r\n category: 'Faxing',\r\n action: 'Send Biometrics Report to Provider'\r\n });\r\n props.setMeasurementDates(new Map());\r\n props.setAuthorizationModalOpen(false);\r\n }}\r\n />\r\n
\r\n
\r\n \r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { Button, Callout, Colors } from 'react-foundation';\r\nimport { BiometricsSelectionCard } from './biometricsSelectionCard';\r\nimport { FaxRecipientsCard } from '../recipients';\r\nimport { AuthorizationModal } from './authorizationModal';\r\nimport { MaterialSpinnerPanel } from '../../shared';\r\nimport './sendFaxView.scss';\r\n\r\nexport const SendFaxView = () => {\r\n const [recipientId, setRecipientId] = useState(null);\r\n const [measurementDates, setMeasurementDates] = useState(new Map());\r\n const [authorizationModalOpen, setAuthorizationModalOpen] = useState(false);\r\n const sending = useSelector(state => state.biometricsReport.sending);\r\n const sendFailed = useSelector(state => state.biometricsReport.sendFailed);\r\n const sendSucceeded = useSelector(\r\n state => state.biometricsReport.sendSucceeded\r\n );\r\n const cantSend = !recipientId || !measurementDates.size || sending;\r\n return (\r\n
\r\n

\r\n Step One: Select the Physician you want to send your biometrics to.\r\n

\r\n \r\n

Step Two: Select the Biometrics you wish to send.

\r\n \r\n
\r\n
\r\n {sendFailed ? (\r\n \r\n An error occurred submitting your biometrics report, please try\r\n again later and if the issue persists contact support.\r\n \r\n ) : null}\r\n
\r\n
\r\n {sendSucceeded ? (\r\n \r\n Your biometrics have been submitted, you may track the faxing\r\n status on the 'history' tab of this page.\r\n \r\n ) : null}\r\n
\r\n
\r\n \r\n
\r\n {sending ? (\r\n \r\n ) : null}\r\n
\r\n {\r\n e.preventDefault();\r\n setAuthorizationModalOpen(true);\r\n }}>\r\n Submit\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 { FaxHistoryCard } from '../history';\r\nimport { SendFaxView } from './sendFaxView';\r\nimport { ErrorBoundry } from '../../shared';\r\nimport './biometricsFaxView.scss';\r\n\r\nconst sendPanel = 'sendPanel';\r\nconst historyPanel = 'historyPanel';\r\n\r\nexport const BiometricsFaxView = () => {\r\n const [selectedView, setSeletedView] = useState(sendPanel);\r\n /* Disable lint warnings for this view */\r\n /* complaining about about anchor href & aria but\r\n foudnation tabs not functioning properly when lint advice used. */\r\n /* eslint-disable */\r\n\r\n return (\r\n
\r\n
    \r\n {\r\n e.preventDefault();\r\n setSeletedView(sendPanel);\r\n }}\r\n className={`tabs-title ${\r\n selectedView === sendPanel ? 'is-active' : ''\r\n }`}>\r\n \r\n Send Biometrics\r\n \r\n \r\n {\r\n e.preventDefault();\r\n setSeletedView(historyPanel);\r\n }}\r\n className={`tabs-title ${\r\n selectedView === sendPanel ? 'is-active' : ''\r\n }`}>\r\n \r\n History\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n );\r\n /* eslint-enable */\r\n};\r\n","export const LOAD_BIOMETRICS_SUCCESS = 'LOAD_BIOMETRICS_SUCCESS';\r\nexport const LOAD_BIOMETRICS_FAILED = 'LOAD_BIOMETRICS_FAILED';\r\n","import moment from 'moment';\r\nimport * as types from './actionTypes.js';\r\nimport { AppConfiguration } from '../configuration';\r\nimport { updateSessionToken, getSessionToken } from '../session';\r\nimport { ApiClient } from '../api';\r\n\r\nexport function loadBiometrics(logError) {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n const apiClient = new ApiClient(apiRootUrl, sessionToken);\r\n try {\r\n const apiResult = await apiClient.get('wellness/getmemberbiometrics');\r\n if (apiResult.data.SessionToken) {\r\n updateSessionToken(apiResult.data.SessionToken);\r\n }\r\n if (apiResult.data && apiResult.data.Result) {\r\n const result = convertResult(apiResult.data.Result);\r\n resolve(dispatch(loadBiometricsSuccess(result)));\r\n } else {\r\n resolve(dispatch(loadBiometricsFailed()));\r\n }\r\n } catch (error) {\r\n logError('faxes/biometricsreport/actions', 'loadBiometrics', error);\r\n resolve(dispatch(loadBiometricsFailed()));\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport const loadBiometricsSuccess = (biometrics) => {\r\n return {\r\n type: types.LOAD_BIOMETRICS_SUCCESS,\r\n biometrics: biometrics\r\n };\r\n};\r\n\r\nconst convertResult = (results) => {\r\n return !results\r\n ? []\r\n : results.map((x) => {\r\n return {\r\n id: x.ItemID,\r\n // Note formatting will transform to local tz, so 'dateKey' used as generation 'id'\r\n measurementDate: moment(x.MeasurementDate).format('MM/DD/YYYY'),\r\n dateKey: x.MeasurementDateKey,\r\n bmi: x.bmi,\r\n bloodGlucoseFasting: x.BloodGlucoseFasting,\r\n bloodGlucoseRandom: x.BloodGlucoseRandom,\r\n bodyFatPercentage: x.BodyFatPercentage,\r\n diastolic: x.Diastolic,\r\n hdl: x.HDL,\r\n hba1c: x.HbA1c,\r\n height: x.Height,\r\n ldl: x.Ldl,\r\n labReportOfRecord: x.LabReportOfRecord,\r\n labReportOfRecordId: x.LabReportOfRecordId,\r\n memberBiometricDataIdMostRecent: x.MemberBiometricDataIDMostRecent,\r\n nicotineMetaboliteSerumResult: x.NicotineMetaboliteSerumResult,\r\n psa: x.PSA,\r\n systolic: x.Systolic,\r\n tsh: x.TSH,\r\n totalCholesterol: x.TotalCholesterol,\r\n waist: x.Waist,\r\n weight: x.Weight,\r\n measurementSource: x.Source ? x.Source.join(', ') : [],\r\n sarsCov2NaaDiagnostic: x.SARSCoV2NAADiagnostic,\r\n sarsCov2Antibody: x.SARSCoV2Antibody\r\n };\r\n });\r\n};\r\n\r\nexport const loadBiometricsFailed = () => {\r\n return { type: types.LOAD_BIOMETRICS_FAILED };\r\n};\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n list: [],\r\n loading: true,\r\n error: false\r\n};\r\n\r\nexport const biometricsReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.LOAD_BIOMETRICS_SUCCESS:\r\n return {\r\n ...state,\r\n list: action.biometrics,\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_BIOMETRICS_FAILED:\r\n return {\r\n ...state,\r\n list: [],\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { BiometricsFaxView } from './biometricsFaxView';\r\nimport { startHistoryRefresh } from '../history';\r\nimport { loadBiometrics } from '../../biometrics';\r\nimport { loadFaxRecipients } from '../recipients';\r\n\r\nexport const loadBiometricsFaxView = (store, logError) => {\r\n const biometricsFaxComponent = document.getElementById(\r\n 'biometricsFaxComponent'\r\n );\r\n if (biometricsFaxComponent) {\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n biometricsFaxComponent\r\n );\r\n store.dispatch(loadBiometrics(logError));\r\n startHistoryRefresh(store.dispatch);\r\n store.dispatch(loadFaxRecipients(logError));\r\n }\r\n};\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n sending: false,\r\n sendSucceeded: false,\r\n sendFailed: false\r\n};\r\n\r\nexport const biometricsReportReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.SEND_BIOMETRICS_REPORT:\r\n return {\r\n ...state,\r\n sending: true,\r\n sendSucceeded: false,\r\n sendFailed: false\r\n };\r\n case types.SEND_BIOMETRICS_REPORT_SUCCESS:\r\n return {\r\n ...state,\r\n sending: false,\r\n sendSucceeded: true,\r\n sendFailed: false\r\n };\r\n case types.SEND_BIOMETRICS_REPORT_FAILED:\r\n return {\r\n ...state,\r\n sending: false,\r\n sendFailed: true,\r\n sendSucceeded: false\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const REQUEST_PROVIDER_SEARCH = 'REQUEST_PROVIDER_SEARCH';\r\nexport const PROVIDER_SEARCH_SUCCESS = 'PROVIDER_SEARCH_SUCCESS';\r\nexport const PROVIDER_SEARCH_FAILED = 'PROVIDER_SEARCH_FAILED';\r\nexport const REQUEST_LOAD_EPISODES = 'REQUEST_LOAD_EPISODES';\r\nexport const LOAD_EPISODES_SUCCESS = 'LOAD_EPISODES_SUCCESS';\r\nexport const LOAD_EPISODES_FAILED = 'LOAD_EPISODES_FAILED';\r\nexport const REQUEST_PROVIDER_LOOKUP = 'REQUEST_PROVIDER_LOOKUP';\r\nexport const REQUEST_PROVIDER_LOOKUP_SUCCESS = 'REQUEST_PROVIDER_LOOKUP_SUCCESS';\r\nexport const REQUEST_PROVIDER_LOOKUP_FAILED = 'REQUEST_PROVIDER_LOOKUP_FAILED';\r\nexport const PROVIDER_RESET_SUCCESS = 'PROVIDER_RESET_SUCCESS';\r\nexport const LOAD_NETWORKS_SUCCESS = 'LOAD_NETWORKS_SUCCESS';\r\nexport const LOAD_NETWORKS_FAILED = 'LOAD_NETWORKS_FAILED';\r\nexport const PROVIDER_NETWORK_SUCCESS = 'PROVIDER_NETWORK_SUCCESS';\r\nexport const GET_SPINE_PROVIDERS_START = 'GET_SPINE_PROVIDERS_START';\r\nexport const GET_SPINE_PROVIDERS_SUCCESS = 'GET_SPINE_PROVIDERS_SUCCESS';\r\nexport const GET_SPINE_PROVIDERS_FAILED = 'GET_SPINE_PROVIDERS_FAILED';\r\nexport const GET_SPINE_INCENTIVES_START = 'GET_SPINE_INCENTIVES_START';\r\nexport const GET_SPINE_INCENTIVES_SUCCESS = 'GET_SPINE_INCENTIVES_SUCCESS';\r\nexport const GET_SPINE_INCENTIVES_FAILED = 'GET_SPINE_INCENTIVES_FAILED';\r\nexport const RESET_SPINE_INCENTIVES = 'RESET_SPINCE_INCENTIVES';\r\nexport const RESET_SPINE_PROVIDERS = 'RESET_SPINE_PROVIDERS';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n searching: false,\r\n error: false,\r\n searchResults: [],\r\n loadingEpisodes: true,\r\n loadEpisodesError: false,\r\n episodes: [],\r\n loadingNetworks: true,\r\n loadNetworksError: false,\r\n networks: [],\r\n matchingProviders: [],\r\n findingProviders: false,\r\n findingProvidersError: false,\r\n providerLookupType: '',\r\n providerNetwork: '',\r\n loadingSpineProviders: false,\r\n loadSpineProvidersSuccess: false,\r\n loadSpineProvidersError: false,\r\n spineSearchResults: { providers: [] },\r\n loadingSpineIncentives: false,\r\n loadSpineIncentivesError: false,\r\n spineIncentives: []\r\n};\r\n\r\nexport const healthNavigatorReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.REQUEST_PROVIDER_SEARCH:\r\n return {\r\n ...state,\r\n searching: true\r\n };\r\n case types.PROVIDER_RESET_SUCCESS:\r\n return {\r\n ...state,\r\n searchResults: [],\r\n searching: false,\r\n providerLookupType: action.providerLookupType\r\n };\r\n case types.PROVIDER_SEARCH_SUCCESS:\r\n return {\r\n ...state,\r\n searchResults: action.searchResults,\r\n searching: false,\r\n error: false\r\n };\r\n case types.PROVIDER_SEARCH_FAILED:\r\n return {\r\n ...state,\r\n searchResults: [],\r\n searching: false,\r\n error: true\r\n };\r\n case types.LOAD_EPISODES_SUCCESS:\r\n return {\r\n ...state,\r\n loadingEpisodes: false,\r\n loadEpisodesError: false,\r\n episodes: action.episodes\r\n };\r\n case types.LOAD_EPISODES_FAILED:\r\n return {\r\n ...state,\r\n loadingEpisodes: false,\r\n loadEpisodesError: true,\r\n episodes: []\r\n };\r\n case types.REQUEST_PROVIDER_LOOKUP:\r\n return {\r\n ...state,\r\n findingProviders: true,\r\n findingProvidersError: false\r\n };\r\n case types.REQUEST_PROVIDER_LOOKUP_SUCCESS:\r\n return {\r\n ...state,\r\n findingProviders: false,\r\n findingProvidersError: false,\r\n matchingProviders: action.lookupResults\r\n };\r\n case types.REQUEST_PROVIDER_LOOKUP_FAILED:\r\n return {\r\n ...state,\r\n findingProviders: false,\r\n findingProvidersError: true,\r\n matchingProviders: []\r\n };\r\n case types.LOAD_NETWORKS_SUCCESS:\r\n return {\r\n ...state,\r\n networks: action.networks,\r\n loadingNetworks: false,\r\n loadNetworksError: false\r\n };\r\n case types.PROVIDER_NETWORK_SUCCESS:\r\n return {\r\n ...state,\r\n searchResults: [],\r\n searching: false,\r\n providerNetwork: action.providerNetwork\r\n };\r\n case types.LOAD_NETWORKS_FAILED:\r\n return {\r\n ...state,\r\n networks: [],\r\n loadingNetworks: false,\r\n loadNetworksError: true\r\n };\r\n //Spine Program\r\n case types.GET_SPINE_INCENTIVES_START:\r\n return {\r\n ...state,\r\n loadingSpineIncentives: true,\r\n loadSpineIncentivesError: false\r\n };\r\n case types.GET_SPINE_INCENTIVES_SUCCESS:\r\n return {\r\n ...state,\r\n loadingSpineIncentives: false,\r\n spineIncentives: [...action.spineIncentives]\r\n };\r\n case types.GET_SPINE_INCENTIVES_FAILED:\r\n return {\r\n ...state,\r\n loadingSpineIncentives: false,\r\n loadSpineIncentivesError: true\r\n };\r\n case types.RESET_SPINE_INCENTIVES:\r\n return {\r\n ...state,\r\n loadingSpineIncentives: false,\r\n loadSpineIncentivesError: false,\r\n spineIncentives: []\r\n };\r\n case types.GET_SPINE_PROVIDERS_START:\r\n return {\r\n ...state,\r\n loadingSpineProviders: true,\r\n loadSpineProvidersError: false\r\n };\r\n case types.GET_SPINE_PROVIDERS_SUCCESS:\r\n return {\r\n ...state,\r\n loadingSpineProviders: false,\r\n loadSpineProvidersSuccess: true,\r\n spineSearchResults: action.spineResults\r\n };\r\n case types.GET_SPINE_PROVIDERS_FAILED:\r\n return {\r\n ...state,\r\n loadingSpineProviders: false,\r\n loadSpineProvidersError: true\r\n };\r\n case types.RESET_SPINE_PROVIDERS:\r\n return {\r\n ...state,\r\n loadingSpineProviders: false,\r\n loadSpineProvidersSuccess: false,\r\n loadSpineProvidersError: false,\r\n spineSearchResults: { providers: [] }\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport * as types from './actionTypes';\r\n\r\nconst loadEpisodesSuccess = (episodes) => {\r\n return {\r\n type: types.LOAD_EPISODES_SUCCESS,\r\n episodes\r\n };\r\n};\r\n\r\nconst loadEpisodesFailed = () => {\r\n return {\r\n type: types.LOAD_EPISODES_FAILED\r\n };\r\n};\r\n\r\nexport const loadEpisodes = (logError) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get('healthnavigator/episode');\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n let episodes = apiResult.data.result;\r\n episodes = addEpisodeNameToSearchTerms(episodes);\r\n resolve(dispatch(loadEpisodesSuccess(episodes)));\r\n } catch (error) {\r\n logError('healthnavigator/episodeActions', 'loadEpisodes', error);\r\n resolve(dispatch(loadEpisodesFailed()));\r\n }\r\n });\r\n };\r\n};\r\n\r\nconst addEpisodeNameToSearchTerms = (episodes) => {\r\n if (episodes) {\r\n episodes.forEach((episode) => {\r\n if (episode.searchTerms && episode.searchTerms.length > 0 && episode.name) {\r\n episode.searchTerms.push(episode.name);\r\n }\r\n });\r\n }\r\n return episodes;\r\n};\r\n","import { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport * as types from './actionTypes';\r\n\r\nexport const providerSearch = (\r\n searchType,\r\n searchText,\r\n episodeId,\r\n networkId,\r\n zipCode,\r\n radius,\r\n latitude,\r\n longitude,\r\n logError\r\n) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n dispatch(requestProviderSearch());\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const data = {\r\n providerSearchType: searchType,\r\n searchText: searchText,\r\n episodeId: episodeId,\r\n zipCode: zipCode,\r\n radius: radius,\r\n latitude: latitude,\r\n longitude: longitude,\r\n networkId: networkId\r\n };\r\n const result = await client.post('healthnavigator/provider/search', data);\r\n if (result.data.sessionToken) {\r\n updateSessionToken(result.data.sessionToken);\r\n }\r\n resolve(dispatch(providerSearchSuccess(result.data.result)));\r\n } catch (error) {\r\n logError('healthnavigator/providerActions', 'providerSearch', error);\r\n resolve(dispatch(providerSearchFailed()));\r\n }\r\n });\r\n };\r\n};\r\n\r\n// Get provider @ all locations based on unique key (ie. autocomplete 'search')\r\nexport const getProviderById = (tin, npi, networkId, lat, lon, logError) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n dispatch(requestProviderSearch());\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n let url = `healthnavigator/provider?`;\r\n tin = tin ? tin : '';\r\n url = `${url}&tin=${tin}`;\r\n npi = npi ? npi : '';\r\n url = `${url}&npi=${npi}`;\r\n networkId = networkId ? networkId : '';\r\n url = `${url}&networkId=${networkId}`;\r\n if (lat && lon) url = `${url}&lat=${lat}&lon=${lon}`;\r\n const result = await client.get(url);\r\n if (result.data.sessionToken) {\r\n updateSessionToken(result.data.sessionToken);\r\n }\r\n resolve(dispatch(providerSearchSuccess(result.data.result)));\r\n } catch (error) {\r\n logError('healthnavigator/providerActions', 'providerSearch', error);\r\n resolve(dispatch(providerSearchFailed()));\r\n }\r\n });\r\n };\r\n};\r\n\r\nconst providerSearchFailed = () => {\r\n return {\r\n type: types.PROVIDER_SEARCH_FAILED\r\n };\r\n};\r\n\r\nconst providerSearchSuccess = (results) => {\r\n return {\r\n type: types.PROVIDER_SEARCH_SUCCESS,\r\n searchResults: results\r\n };\r\n};\r\n\r\nexport const requestProviderSearch = () => {\r\n return {\r\n type: types.REQUEST_PROVIDER_SEARCH\r\n };\r\n};\r\n\r\nexport const DoctorLookupType = 'Doctor';\r\nexport const FacilityLookupType = 'Facility';\r\n\r\nexport const providerLookup = (lookupType, filterText, networkId, logError) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n dispatch(requestProviderLookup());\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const result = await client.get(\r\n `healthnavigator/provider?providerType=${lookupType}&filterText=${filterText}&networkId=${networkId}`\r\n );\r\n if (result.data.sessionToken) {\r\n updateSessionToken(result.data.sessionToken);\r\n }\r\n resolve(dispatch(providerLookupSuccess(result.data.result)));\r\n } catch (error) {\r\n logError('healthnavigator/providerActions', 'providerLookup', error);\r\n resolve(dispatch(providerLookupFailed()));\r\n }\r\n });\r\n };\r\n};\r\n\r\nconst providerLookupFailed = () => {\r\n return {\r\n type: types.REQUEST_PROVIDER_LOOKUP_FAILED\r\n };\r\n};\r\n\r\nconst providerLookupSuccess = (results) => {\r\n return {\r\n type: types.REQUEST_PROVIDER_LOOKUP_SUCCESS,\r\n lookupResults: results\r\n };\r\n};\r\n\r\nexport const requestProviderLookup = () => {\r\n return {\r\n type: types.REQUEST_PROVIDER_LOOKUP\r\n };\r\n};\r\n","import * as types from './actionTypes';\r\n\r\nexport const providerReset = (searchType) => {\r\n return (dispatch) => {\r\n dispatch(providerResetSuccess(searchType));\r\n };\r\n};\r\n\r\nconst providerResetSuccess = (searchType) => {\r\n return {\r\n type: types.PROVIDER_RESET_SUCCESS,\r\n providerLookupType: searchType\r\n };\r\n};\r\n","// Get a unique key based on facility & address\r\nconst facilityKey = (provider) => {\r\n if (!provider) return null;\r\n return `${provider.facilityName}|${provider.addressLine1}|${provider.addressLine2}|${provider.addressLine3}|${provider.city}|${provider.state}|${provider.zip}`;\r\n};\r\n\r\n// Add a provider to the map\r\nconst mapFacilityProvider = (facilityMap, provider) => {\r\n const key = facilityKey(provider);\r\n provider.providers = [];\r\n if (provider.facilityName && provider.facilityName.length > 0) {\r\n if (!facilityMap.has(key)) {\r\n const groupedProviders = [];\r\n groupedProviders.push(provider);\r\n facilityMap.set(key, groupedProviders);\r\n } else {\r\n facilityMap.get(key).push(provider);\r\n }\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\n// Group providers at a given facility under the provider record representing said facility\r\nconst groupProvidersAtFacility = (facilityMap) => {\r\n let groupedProviders = [];\r\n for (var key of facilityMap.keys()) {\r\n const facilityProviders = facilityMap.get(key);\r\n if (facilityProviders && facilityProviders.length > 0) {\r\n // Copy first record and designate it the 'facility provider' record to nest doctors under\r\n let facility = facilityProviders[0];\r\n facility = { ...facility, firstName: '', lastName: '', credentialSuffix: '' };\r\n facility.providers = [];\r\n if (!facility || !facilityProviders || facilityProviders.length === 0) continue;\r\n // For each provider at said facility add them to an array nested in the facility\r\n facilityProviders.forEach((provider) => {\r\n if (provider.firstName && provider.firstName.length > 0 && provider.lastName && provider.lastName.length > 0) {\r\n facility.providers.push(provider);\r\n }\r\n });\r\n groupedProviders.push(facility);\r\n }\r\n }\r\n return groupedProviders;\r\n};\r\n\r\nexport const groupProcedureProviders = (providers) => {\r\n if (!providers || providers.length === 0) return [];\r\n const standAloneProviders = [];\r\n const facilityMap = new Map();\r\n providers.forEach((provider) => {\r\n if (!mapFacilityProvider(facilityMap, provider)) standAloneProviders.push(provider);\r\n });\r\n const groupedProviders = groupProvidersAtFacility(facilityMap);\r\n const allProviders = [...groupedProviders, ...standAloneProviders];\r\n allProviders.sort((p1, p2) => p1.distanceMiles - p2.distanceMiles);\r\n return allProviders;\r\n};\r\n","import * as types from './actionTypes';\r\n\r\nexport const providerSelectedNetwork = (networkID) => {\r\n return (dispatch) => {\r\n dispatch(providerSelectedNetworkSuccess(networkID));\r\n };\r\n};\r\n\r\nconst providerSelectedNetworkSuccess = (networkID) => {\r\n return {\r\n type: types.PROVIDER_NETWORK_SUCCESS,\r\n providerNetwork: networkID\r\n };\r\n};\r\n","export class SearchType {\r\n static Procedure = 'Procedure';\r\n static Doctor = 'Doctor';\r\n static Facility = 'Facility';\r\n static ByUniqueId = 'ByUniqueId';\r\n}\r\n","import React, { useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { FaChevronLeft, FaRegAddressCard, FaAngleRight } from 'react-icons/fa';\r\nimport { Modal, Spinner } from 'react-bootstrap';\r\nimport './networksModal.scss';\r\n\r\nexport const NetworksModal = ({ handleChange, selectedNetwork }) => {\r\n const [show, setShow] = useState(true);\r\n const closeHandler = () => setShow(false);\r\n const [providerLink, setProviderLink] = useState(true);\r\n const { loadingNetworks, loadNetworksError, networks } = useSelector((state) => state.healthNavigator);\r\n if (loadNetworksError) {\r\n return (\r\n
\r\n An error occurred while loading the newtworks, technical support has been notified.\r\n
\r\n );\r\n }\r\n\r\n const networkSpinner = (\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n );\r\n const selectedNetworkName = networks.map((network, index) => {\r\n let convertNetworkId = Number(selectedNetwork);\r\n if (index === 0 && network.id === convertNetworkId) {\r\n return 'State Preferred';\r\n }\r\n if (index === 1 && network.id === convertNetworkId) {\r\n return 'State BlueCare';\r\n }\r\n if (index === 2 && network.id === convertNetworkId) {\r\n return 'State BlueCare Prime';\r\n }\r\n return '';\r\n });\r\n\r\n return (\r\n
\r\n {loadingNetworks ? (\r\n networkSpinner\r\n ) : (\r\n {\r\n e.preventDefault();\r\n setShow(!show);\r\n }}>\r\n \r\n \r\n Your Network:\r\n {' '}\r\n \r\n {selectedNetworkName} {selectedNetwork && }\r\n \r\n

\r\n )}\r\n\r\n \r\n \r\n Connecticut State Health Networks\r\n \r\n\r\n {providerLink ? (\r\n \r\n

\r\n Find the first 3 digits of the Member Identification Number on your insurance card and click the\r\n appropriate network below.\r\n

\r\n {\r\n setProviderLink(false);\r\n }}>\r\n Help me locate my Member Identification Number\r\n

\r\n

\r\n

Choose your network to get started

\r\n\r\n
\r\n {networks.map((network, index) => {\r\n let convertNetworkId = Number(selectedNetwork);\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 setProviderLink(true);\r\n }}>\r\n Back to Networks\r\n

\r\n\r\n
\r\n
\r\n )}\r\n\r\n \r\n \r\n Cancel and Return to Homepage\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { AsyncTypeahead, ClearButton } from 'react-bootstrap-typeahead';\r\nimport _ from 'lodash';\r\nimport './search.scss';\r\n\r\nexport const EpisodeTypeahead = (props) => {\r\n const { values, episodes, handleBlur, handleFocus } = props;\r\n\r\n const ref = React.createRef();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [options, setOptions] = useState([]);\r\n const [selected, setSelected] = useState([]);\r\n\r\n const onSearch = (inputValue) => {\r\n setIsLoading(true);\r\n const options = episodes.filter((i) => {\r\n let k = 0;\r\n for (; k < i.searchTerms.length; k++) {\r\n if (i.searchTerms[k].toLowerCase().includes(inputValue.toLowerCase())) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n const sortOptions = _.orderBy(options, ['name'], ['asc']);\r\n setOptions(sortOptions);\r\n setIsLoading(false);\r\n };\r\n\r\n return (\r\n {\r\n return option.name;\r\n }}\r\n ref={ref}\r\n onBlur={(e) => {\r\n handleBlur(e);\r\n if (!selected.length) {\r\n ref.current.clear();\r\n }\r\n }}\r\n selected={selected}\r\n onChange={(selected) => {\r\n if (selected && selected.length) {\r\n values.searchText = selected[0].name;\r\n values.episodeId = selected[0].episodeId;\r\n setSelected(selected);\r\n handleFocus();\r\n } else {\r\n values.searchText = '';\r\n values.episodeId = null;\r\n setSelected([]);\r\n }\r\n }}>\r\n {({ onClear, selected }) =>\r\n !!selected.length && (\r\n
\r\n {\r\n onClear();\r\n values.searchText = '';\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 { AsyncTypeahead, ClearButton } from 'react-bootstrap-typeahead';\r\nimport './search.scss';\r\nimport { useDispatch } from 'react-redux';\r\nimport { SearchType } from '../searchType';\r\nimport { providerLookup, getProviderById } from '../store';\r\nimport { logError } from '../../logging';\r\n\r\nexport const ProviderTypeahead = (props) => {\r\n const { values, placeHolder, searchType, handleBlur, latitude, longitude, handleProviderFocus } = props;\r\n const dispatch = useDispatch();\r\n const ref = React.createRef();\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [options, setOptions] = useState([]);\r\n const [selected, setSelected] = useState([]);\r\n\r\n const onSearch = async (inputValue) => {\r\n setIsLoading(true);\r\n const networkId = values.networkId;\r\n\r\n const result = await dispatch(providerLookup(searchType, inputValue, networkId, logError));\r\n setOptions(result.lookupResults);\r\n setIsLoading(false);\r\n };\r\n return (\r\n \r\n searchType === SearchType.Doctor ? `${option.firstName} ${option.lastName}` : `${option.facilityName}`\r\n }\r\n minLength={3}\r\n onSearch={onSearch}\r\n options={options}\r\n placeholder={placeHolder}\r\n filterBy={(option) => {\r\n if (searchType === SearchType.Doctor) return option.firstName + ' ' + option.lastName;\r\n else return option.facilityName;\r\n }}\r\n ref={ref}\r\n selected={selected}\r\n onBlur={(e) => {\r\n handleBlur(e);\r\n }}\r\n onInputChange={(input) => {\r\n values.searchText = input;\r\n }}\r\n onChange={async (selected) => {\r\n if (selected && selected.length) {\r\n if (searchType === SearchType.Doctor) {\r\n values.searchText = selected[0].firstName + ' ' + selected[0].lastName;\r\n } else {\r\n values.searchText = selected[0].facilityName;\r\n }\r\n setSelected(selected);\r\n handleProviderFocus();\r\n const provider = selected[0];\r\n const networkId = values.networkId;\r\n\r\n await dispatch(\r\n getProviderById(provider.providerTin, provider.providerNpi, networkId, latitude, longitude, logError)\r\n );\r\n } else {\r\n setSelected([]);\r\n }\r\n }}>\r\n {({ onClear, selected }) =>\r\n !!selected.length && (\r\n
\r\n {\r\n onClear();\r\n values.searchText = '';\r\n }}\r\n />\r\n
\r\n )\r\n }\r\n \r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { ErrorMessage, withFormik } from 'formik';\r\nimport * as yup from 'yup';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { Form, Col, Button, Spinner, OverlayTrigger, Popover } from 'react-bootstrap';\r\nimport { providerSearch, providerReset, providerSelectedNetwork } from '../store';\r\nimport { SearchType } from '../searchType';\r\nimport { NetworksModal } from './networksModal';\r\nimport { zipCodeRegExp } from '../../shared';\r\nimport { logError } from '../../logging';\r\nimport { MdSearch, MdClose } from 'react-icons/md';\r\nimport { FiMapPin } from 'react-icons/fi';\r\nimport './search.scss';\r\nimport { EpisodeTypeahead } from './episodeTypeahead';\r\nimport { ProviderTypeahead } from './providerTypeahead';\r\nimport { loadGeocodeAddress } from '../../shared/geocoding';\r\n\r\nconst searchRadiusList = [5, 10, 20, 30, 50, 75, 100];\r\nlet latitude = null;\r\nlet longitude = null;\r\nlet userZipCode = null;\r\n\r\nconst SearchForm = (props) => {\r\n const { values, handleChange, handleBlur, handleSubmit } = props;\r\n const searching = useSelector((state) => state.healthNavigator.searching);\r\n const episodes = useSelector((state) => state.healthNavigator.episodes);\r\n const address = useSelector((state) => state.geocode.address);\r\n const [searchType, setSearchType] = useState(SearchType.Procedure);\r\n const [userLatitude, setUserLatitude] = useState(null);\r\n const [selectedNetwork, setSelectedNetwork] = useState('');\r\n const [userLongitude, setUserLongitude] = useState(null);\r\n const [didFocus, setDidFocus] = React.useState(false);\r\n\r\n const handleFocus = () => setDidFocus(true);\r\n\r\n const resetSearchText = () => {\r\n values.searchText = '';\r\n values.episodeId = null;\r\n };\r\n const resetZipCode = () => {\r\n props.setFieldValue('zipCode', '');\r\n };\r\n\r\n const onGeolocateSuccess = async (coordinates) => {\r\n latitude = coordinates.coords.latitude;\r\n longitude = coordinates.coords.longitude;\r\n const result = await props.dispatch(loadGeocodeAddress(latitude, longitude, logError));\r\n if (result && result.address && result.address.zipCode) userZipCode = result.address.zipCode;\r\n props.setFieldValue('zipCode', userZipCode);\r\n setUserLatitude(latitude);\r\n setUserLongitude(longitude);\r\n };\r\n\r\n const onGeolocateError = () => {};\r\n\r\n const geolocate = () => {\r\n if (window.navigator && window.navigator.geolocation) {\r\n navigator.geolocation.getCurrentPosition(onGeolocateSuccess, onGeolocateError);\r\n }\r\n };\r\n const searchButtonStyle = { backgroundColor: '#005ead' };\r\n const zipCodeLabelVisibility = values && values.zipCode && values.zipCode.length ? 'visible' : 'hidden';\r\n const searchTextLabelVisibility = values && values.searchText && values.searchText.length ? 'visible' : 'hidden';\r\n const currentLocation = () => {\r\n const { city, stateAbbreviation } = address;\r\n if (city !== undefined) {\r\n return (\r\n \r\n \r\n \r\n \r\n Your location:{' '}\r\n \r\n \r\n\r\n Enter a new zip code if this is not your location.}>\r\n {city + ', ' + stateAbbreviation}\r\n \r\n \r\n );\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n geolocate();\r\n }, []);\r\n\r\n const dispatch = useDispatch();\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n Search for\r\n {\r\n dispatch(providerReset(e.target.value));\r\n values.searchType = e.target.value;\r\n setSearchType(e.target.value);\r\n resetSearchText();\r\n setDidFocus(false);\r\n }}>\r\n \r\n \r\n \r\n \r\n
\r\n {\r\n dispatch(providerSelectedNetwork(e.target.value));\r\n values.networkId = e.target.value;\r\n setSelectedNetwork(e.target.value);\r\n }}\r\n />\r\n
\r\n
\r\n \r\n \r\n \r\n Search Term\r\n \r\n {searchType === SearchType.Procedure && (\r\n \r\n )}\r\n {searchType === SearchType.Doctor && (\r\n {\r\n setDidFocus(true);\r\n }}\r\n />\r\n )}\r\n {searchType === SearchType.Facility && (\r\n {\r\n setDidFocus(true);\r\n }}\r\n />\r\n )}\r\n\r\n {!didFocus || !values.searchText || !values.searchText.length ? (\r\n
\r\n \r\n
\r\n ) : null}\r\n
\r\n
\r\n \r\n
\r\n \r\n ZIP Code\r\n \r\n {\r\n handleChange(e);\r\n if (e.target.value !== userZipCode) {\r\n latitude = null;\r\n longitude = null;\r\n } else {\r\n latitude = userLatitude;\r\n longitude = userLongitude;\r\n }\r\n }}\r\n onBlur={handleBlur}\r\n value={values.zipCode}\r\n />\r\n {values.zipCode ? (\r\n {\r\n dispatch(providerReset());\r\n resetZipCode();\r\n }}\r\n className=\"clear-zip\">\r\n \r\n \r\n ) : null}\r\n\r\n
\r\n
\r\n {\r\n dispatch(providerSelectedNetwork(e.target.value));\r\n values.networkId = e.target.value;\r\n setSelectedNetwork(e.target.value);\r\n }}\r\n />\r\n
\r\n\r\n {searchType === SearchType.Procedure ? : null}\r\n {searchType === SearchType.Doctor && !didFocus ? : null}\r\n {searchType === SearchType.Facility && !didFocus ? : null}\r\n {values.zipCode === address['zipCode'] ? currentLocation() : ''}\r\n
\r\n
\r\n\r\n
\r\n {\r\n if (searchType === SearchType.Doctor && !values.zipCode && !values.zipCode.length) {\r\n setDidFocus(false);\r\n }\r\n if (searchType === SearchType.Facility && !values.zipCode && !values.zipCode.length) {\r\n setDidFocus(false);\r\n }\r\n }}\r\n variant=\"primary\"\r\n className=\"btn-lg\"\r\n type=\"submit\">\r\n {searching ? (\r\n <>\r\n \r\n \r\n ) : (\r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n\r\n {\r\n if (searchType === SearchType.Doctor && !values.zipCode && !values.zipCode.length) {\r\n setDidFocus(false);\r\n }\r\n if (searchType === SearchType.Facility && !values.zipCode && !values.zipCode.length) {\r\n setDidFocus(false);\r\n }\r\n }}\r\n style={\r\n values.searchText && values.searchText.length && values.zipCode && values.zipCode.length\r\n ? searchButtonStyle\r\n : null\r\n }>\r\n {searching ? (\r\n <>\r\n \r\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 schema = yup.object({\r\n searchText: yup.string().required('Search text is required').max(100, 'Max of 100 characters').nullable(),\r\n zipCode: yup\r\n .string()\r\n .required('Zip code is required')\r\n .matches(zipCodeRegExp, 'Please enter a valid zip code')\r\n .nullable()\r\n});\r\n\r\nexport const ValidatedSearchForm = withFormik({\r\n enableReinitialize: true,\r\n initialErrors: false,\r\n mapPropsToValues: () => ({\r\n searchText: '',\r\n episodeId: null,\r\n zipCode: '',\r\n searchRadius: searchRadiusList[0],\r\n searchType: SearchType.Procedure\r\n }),\r\n validationSchema: schema,\r\n handleSubmit: (values, { props }) => {\r\n const networkId = values.networkId;\r\n\r\n props.dispatch(\r\n providerSearch(\r\n values.searchType,\r\n values.searchText,\r\n values.episodeId,\r\n networkId,\r\n values.zipCode,\r\n values.searchRadius,\r\n latitude,\r\n longitude,\r\n logError\r\n )\r\n );\r\n }\r\n})(SearchForm);\r\n","import React from 'react';\r\nimport { useDispatch } from 'react-redux';\r\nimport { Container } from 'react-bootstrap';\r\nimport { ValidatedSearchForm } from './search';\r\nimport './hero.scss';\r\n\r\nexport const Hero = () => {\r\n const dispatch = useDispatch();\r\n return (\r\n
\r\n \r\n

\r\n Search here for procedures you need or the condition you have to find providers or facilities in your desired\r\n zip code. Contact a Health Navigator with any question about the Providers of Distinction program, or for help\r\n finding a provider.\r\n

\r\n

\r\n Procedures, providers and facilities will be added to this list as they are approved. To view the current list\r\n of eligible procedures and incentives,{' '}\r\n \r\n click here\r\n \r\n

\r\n \r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { getAppUrl, getAppTarget } from '../../configuration';\r\nimport { MdPlace } from 'react-icons/md';\r\nimport { FaUserMd } from 'react-icons/fa';\r\nimport { Col } from 'react-bootstrap';\r\nimport { SearchType } from '../searchType';\r\nimport { useSelector } from 'react-redux';\r\nimport './profile.scss';\r\nimport './results.scss';\r\n\r\nexport const Profile = ({\r\n distanceAway,\r\n providerAddress,\r\n providerFacilityName,\r\n providerName,\r\n providerServiceType,\r\n providerLatitude,\r\n providerLongitude\r\n}) => {\r\n const { providerLookupType } = useSelector((state) => state.healthNavigator);\r\n const googleMapsUrl = `https://www.google.com/maps/search/?api=1&query=${providerLatitude},${providerLongitude}`;\r\n const providerNameStyle = { fontSize: '0.875rem' };\r\n return (\r\n \r\n
\r\n {providerFacilityName &&

{providerFacilityName}

}\r\n\r\n {providerLookupType === SearchType.Facility ? (\r\n ''\r\n ) : (\r\n

\r\n {providerFacilityName && providerLookupType === SearchType.Doctor ? (\r\n \r\n ) : null}\r\n {providerName}\r\n

\r\n )}\r\n\r\n {providerServiceType}\r\n
\r\n

{providerAddress}

\r\n
\r\n \r\n \r\n \r\n \r\n {distanceAway}\r\n \r\n
\r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport ReactGa from 'react-ga';\r\nimport { Row, Col } from 'react-bootstrap';\r\nimport { getAppUrl, getAppTarget } from '../../configuration';\r\nimport { useSelector } from 'react-redux';\r\nimport { MdPhone, MdOpenInNew } from 'react-icons/md';\r\nimport './upswingCard.scss';\r\nconst upSwingUrl = 'https://upswinghealth.com/CT';\r\nexport const UpswingCard = () => {\r\n const searchText = useSelector((state) => state.healthNavigator.searchResults.searchText);\r\n const episodes = useSelector((state) => state.healthNavigator.episodes);\r\n\r\n const showUpswingCard = episodes.find((episode) => {\r\n return episode.name === searchText;\r\n }).showOrthopedicTeleProvider;\r\n\r\n return (\r\n <>\r\n {showUpswingCard ? (\r\n \r\n \r\n

UPSWING HEALTH

\r\n

\r\n Use this tool to help identify any orthopedic injury or condition, Chat with a healthcare professional to\r\n determine what is wrong and how to best treat the condition - whether through telemedicine visits,\r\n home-based therapies, or referrals to in-network specialists this tool will help members link to the\r\n appropriate level of care.\r\n

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

CONTACT

\r\n
\r\n

Online 24/7

\r\n {\r\n ReactGa.event({\r\n category: 'External Link',\r\n action: 'Upswing'\r\n });\r\n }}\r\n target={getAppTarget('_blank')}\r\n href={getAppUrl(upSwingUrl)}>\r\n www.upswinghealth.com/CT \r\n \r\n
\r\n {/*
\r\n

Telephone 8am-8pm Est Daily

\r\n \r\n \r\n 203-204-3855\r\n \r\n \r\n
*/}\r\n \r\n
\r\n ) : null}\r\n \r\n );\r\n};\r\n","export const sortResults = (key, sortOrder = 'asc') => {\r\n return function startSort(a, b) {\r\n if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {\r\n return 0;\r\n }\r\n const sortA = typeof a[key] === 'string' ? a[key].toUpperCase() : a[key];\r\n const sortB = typeof b[key] === 'string' ? b[key].toUpperCase() : b[key];\r\n let compareSort = 0;\r\n if (sortA > sortB) {\r\n compareSort = 1;\r\n } else if (sortA < sortB) {\r\n compareSort = -1;\r\n }\r\n return sortOrder === 'desc' ? compareSort * -1 : compareSort;\r\n };\r\n};\r\n\r\nexport const searchReferenceNumber = (str) => {\r\n let searchId =\r\n str.length === 1\r\n ? '00' + str\r\n : str.length === 2\r\n ? '0' + str\r\n : str.length === 3\r\n ? str\r\n : str.length === 4\r\n ? '00' + str\r\n : str.length === 5\r\n ? '0' + str\r\n : str.length === 6\r\n ? str\r\n : str.length === 7\r\n ? '00' + str\r\n : str.length === 8\r\n ? '0' + str\r\n : str;\r\n if (searchId.length === 6 || searchId.length > 8) {\r\n let resSearchId = [...searchId]\r\n .map((x, i) => (i % 3 === 0 ? ' ' + x : x))\r\n .join('')\r\n .trim();\r\n return resSearchId;\r\n } else {\r\n return searchId;\r\n }\r\n};\r\n","import { AppConfiguration } from '../configuration';\r\nimport { ApiClient } from '../api';\r\nimport { getSessionToken } from '../session';\r\n\r\nexport const updateSelectedProvider = (searchResultId, providerId) => {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const data = {\r\n selectedProviderId: providerId\r\n };\r\n client.put(`healthnavigator/searchresult/${searchResultId}`, data);\r\n};\r\n","import React, { useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { Modal, Button } from 'react-bootstrap';\r\nimport { MdPhone } from 'react-icons/md';\r\nimport { updateSelectedProvider } from '../../updateSelectedProvider';\r\nimport '../results.scss';\r\nimport './spineContact.scss';\r\n\r\nexport const SpineContact = ({ name, patientCode, travelIncentive, uniqueKeyId, searchResultId, isMobile }) => {\r\n const client = useSelector((state) => state.clients);\r\n const [show, setShow] = useState(false);\r\n\r\n const clients = client ? client.client : [];\r\n const closeHandler = () => setShow(false);\r\n const showHandler = () => setShow(true);\r\n\r\n return (\r\n
\r\n {\r\n e.preventDefault();\r\n updateSelectedProvider(searchResultId, uniqueKeyId);\r\n showHandler();\r\n }}\r\n variant=\"primary\"\r\n size=\"lg\">\r\n Contact\r\n \r\n\r\n
\r\n\r\n \r\n {travelIncentive}\r\n \r\n\r\n \r\n \r\n {`Contact ${name}`}\r\n \r\n \r\n

\r\n When you choose a Provider of Distinction for a listed procedure, you will automatically receive a cash\r\n incentive in the mail. Contact your Personal Health Navigator with any questions about the Providers of\r\n Distinction program, or for help finding a provider.\r\n

\r\n\r\n

\r\n Keep code {patientCode} for your records.\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 { useSelector } from 'react-redux';\r\nimport Card from 'react-bootstrap/Card';\r\nimport { searchReferenceNumber } from '../helper';\r\nimport { SpineContact } from './spineContact';\r\nimport { MdPlace } from 'react-icons/md';\r\nimport './spineProvider.scss';\r\nimport { getAppUrl, getAppTarget } from '../../../configuration';\r\n\r\nexport const SpineProvider = ({ provider, isMobile }) => {\r\n const searchResultId = useSelector((state) => state.healthNavigator.spineSearchResults.searchResultId);\r\n const {\r\n spineProgramProviderId,\r\n facilityName,\r\n addressLine1,\r\n addressLine2,\r\n addressLine3,\r\n city,\r\n state,\r\n zip,\r\n longitude,\r\n latitude,\r\n distanceMiles\r\n } = provider;\r\n\r\n const address = (\r\n <>\r\n {!addressLine1 ? '' : {addressLine1} }\r\n {!addressLine2 ? '' : {addressLine2} }\r\n {!addressLine3 ? '' : {addressLine3} }\r\n {city + ', ' + state + ' ' + zip}\r\n \r\n );\r\n\r\n const googleMapsUrl = `https://www.google.com/maps/search/?api=1&query=${latitude},${longitude}`;\r\n\r\n const distance = distanceMiles ? `${distanceMiles.toFixed(1)} Miles Away` : 'View Map';\r\n\r\n return (\r\n
\r\n \r\n \r\n

{facilityName}

\r\n

{address}

\r\n \r\n \r\n \r\n {distance}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport * as actions from '../../store/';\r\nimport { Collapse, Button } from 'react-bootstrap';\r\nimport { MdExpandMore, MdExpandLess, MdAdd } from 'react-icons/md';\r\nimport { SpineProvider } from './spineProvider';\r\nimport { MaterialSpinner } from '../../../shared/spinner/materialSpinner';\r\nimport './spineProviders.scss';\r\n\r\nexport const SpineProviders = ({ isMobile }) => {\r\n const [open, setOpen] = useState(false);\r\n const spineProviders = useSelector(state => state.healthNavigator.spineSearchResults.providers);\r\n const loadingSpineProviders = useSelector(state => state.healthNavigator.loadingSpineProviders);\r\n const loadSpineProvidersSuccess = useSelector(state => state.healthNavigator.loadSpineProvidersSuccess);\r\n const loadSpineProvidersError = useSelector(state => state.healthNavigator.loadSpineProvidersError);\r\n const searchResults = useSelector(state => state.healthNavigator.searchResults);\r\n\r\n const { latitude, longitude, episodeId, searchText, networkId, zipCode } = searchResults;\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n if (loadSpineProvidersSuccess && !loadingSpineProviders) {\r\n setOpen(true);\r\n }\r\n return () => {\r\n if (loadSpineProvidersSuccess || loadSpineProvidersError) {\r\n dispatch(actions.resetSpineProviders());\r\n }\r\n };\r\n }, [loadSpineProvidersSuccess, loadSpineProvidersError]);\r\n\r\n const spineHandler = () => {\r\n if (!loadSpineProvidersSuccess) {\r\n dispatch(actions.spineProviderSearch(searchText, episodeId, networkId, zipCode, latitude, longitude));\r\n } else {\r\n setOpen(state => !state);\r\n }\r\n };\r\n\r\n let showProvidersText = <>Expand to see providers ;;\r\n\r\n if (loadingSpineProviders) {\r\n showProvidersText = \r\n Loading providers... ;\r\n } else if (loadSpineProvidersError) {\r\n showProvidersText = \r\n An error occurred loading the spine program providers, technical support has been notified.\r\n ;\r\n }\r\n\r\n const sortedSpineProviders = latitude && longitude ?\r\n spineProviders.sort((a, b) => a.distanceMiles - b.distanceMiles)\r\n : spineProviders.sort((a, b) => a.facilityName.localeCompare(b.facilityName));\r\n\r\n const mappedSpineProviders = spineProviders.length > 0 ?\r\n sortedSpineProviders.map((provider, index) => ())\r\n : \"There are currently no Spine Program providers.\";\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n {mappedSpineProviders}\r\n
\r\n
\r\n
\r\n \r\n {open ? (\r\n
\r\n Collapse providers \r\n
\r\n ) : (\r\n
\r\n {showProvidersText}\r\n
\r\n )}\r\n \r\n
\r\n );\r\n};","import { logError } from '../../logging';\r\nimport * as types from './actionTypes';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\n\r\nconst getSpineProvidersStart = () => {\r\n return {\r\n type: types.GET_SPINE_PROVIDERS_START\r\n };\r\n};\r\n\r\nconst getSpineProvidersSuccess = (spineResults) => {\r\n return {\r\n type: types.GET_SPINE_PROVIDERS_SUCCESS,\r\n spineResults\r\n };\r\n};\r\n\r\nconst getSpineProvidersFailed = () => {\r\n return {\r\n type: types.GET_SPINE_PROVIDERS_FAILED\r\n };\r\n};\r\n\r\nexport const resetSpineProviders = () => {\r\n return {\r\n type: types.RESET_SPINE_PROVIDERS\r\n };\r\n};\r\n\r\nexport const spineProviderSearch = (searchText, episodeId, networkId, zipCode, latitude, longitude) => {\r\n return async (dispatch) => {\r\n try {\r\n dispatch(getSpineProvidersStart());\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const data = {\r\n searchText,\r\n episodeId,\r\n zipCode,\r\n latitude,\r\n longitude,\r\n networkId\r\n };\r\n const response = await client.post('healthnavigator/spineprogram/search', data);\r\n if (response.data.sessionToken) {\r\n updateSessionToken(response.data.sessionToken);\r\n }\r\n dispatch(getSpineProvidersSuccess(response.data.result));\r\n } catch (error) {\r\n logError('healthnavigator/store/spineProviderActions', 'spineProviderSearch', error);\r\n dispatch(getSpineProvidersFailed());\r\n }\r\n };\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { Row, Col } from 'react-bootstrap';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport './spineProgramCard.scss';\r\nimport * as actions from '../../store';\r\nimport { MaterialSpinner as Spinner } from '../../../shared/spinner/materialSpinner';\r\nimport { SpineProviders } from './spineProviders';\r\n\r\nexport const SpineProgramCard = ({ isMobile }) => {\r\n const searchText = useSelector((state) => state.healthNavigator.searchResults.searchText);\r\n const episodes = useSelector((state) => state.healthNavigator.episodes);\r\n const spineIncentives = useSelector((state) => state.healthNavigator.spineIncentives);\r\n const loadingSpineIncentives = useSelector((state) => state.healthNavigator.loadingSpineIncentives);\r\n const loadSpineIncentivesError = useSelector((state) => state.healthNavigator.loadSpineIncentivesError);\r\n const dispatch = useDispatch();\r\n\r\n const showSpineProgramCard = episodes.find((episode) => {\r\n return episode.name === searchText;\r\n }).showSpineProgram;\r\n\r\n useEffect(() => {\r\n if (showSpineProgramCard) {\r\n dispatch(actions.getSpineIncentives());\r\n }\r\n return () => dispatch(actions.resetSpineIncentives());\r\n }, []);\r\n\r\n let incentiveBody = null;\r\n\r\n if (loadingSpineIncentives) {\r\n incentiveBody = (

Loading incentives...

);\r\n } else if (spineIncentives.length > 0) {\r\n incentiveBody = spineIncentives.map((incentive, index) => {\r\n const { name, incentiveAmount } = incentive;\r\n return (\r\n
\r\n

{name} ${incentiveAmount}

\r\n
\r\n );\r\n });\r\n } else if (loadSpineIncentivesError) {\r\n incentiveBody = \r\n An error occurred loading the incentives, technical support has been notified.\r\n ;\r\n } else {\r\n incentiveBody = \"There are currently no spine incentives.\";\r\n }\r\n\r\n return (\r\n <>\r\n {showSpineProgramCard ? (\r\n \r\n \r\n

COMPREHENSIVE SPINE PROGRAM

\r\n

\r\n The CSP is an integrated delivery system for patients with back and neck pain. The program uses\r\n standardized tools, pathways and protocols to determine an evidence-based treatment plan. The goal of the\r\n program is to reduce cost by eliminating unnecessary tests, treatments, surgeries, and emergency\r\n department visits. Achieve improved patient experience, outcomes and satisfaction and expedite return to\r\n normal activity and work.\r\n

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

INCENTIVE

\r\n {incentiveBody}\r\n \r\n \r\n
\r\n ) : null\r\n }\r\n \r\n );\r\n};\r\n","import { logError } from '../../logging';\r\nimport * as types from './actionTypes';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\n\r\nconst getSpinceIncentivesStart = () => {\r\n return {\r\n type: types.GET_SPINE_INCENTIVES_START\r\n };\r\n};\r\n\r\nconst getSpineIncentivesSuccess = (spineIncentives) => {\r\n return {\r\n type: types.GET_SPINE_INCENTIVES_SUCCESS,\r\n spineIncentives\r\n };\r\n};\r\n\r\nconst getSpineIncentivesFailed = () => {\r\n return {\r\n type: types.GET_SPINE_INCENTIVES_FAILED\r\n };\r\n};\r\n\r\nexport const resetSpineIncentives = () => {\r\n return {\r\n type: types.RESET_SPINE_INCENTIVES\r\n };\r\n};\r\n\r\nexport const getSpineIncentives = () => {\r\n return async (dispatch) => {\r\n try {\r\n const baseUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(baseUrl, sessionToken);\r\n const requestUrl = 'healthnavigator/spineprogram/incentives';\r\n dispatch(getSpinceIncentivesStart());\r\n const response = await client.get(requestUrl);\r\n if (response.data.sessionToken) {\r\n updateSessionToken(response.data.sessionToken);\r\n }\r\n const spineIncentiveResults = response.data.result;\r\n dispatch(getSpineIncentivesSuccess(spineIncentiveResults));\r\n } catch (error) {\r\n logError('healthnavigator/store/spineIncentiveActions', 'getSpineIncentives', error);\r\n dispatch(getSpineIncentivesFailed());\r\n }\r\n };\r\n};\r\n","import React from 'react';\r\nimport { Col } from 'react-bootstrap';\r\nimport './results.scss';\r\n\r\nexport const Procedures = (props) => {\r\n return ;\r\n};\r\n","import React from 'react';\r\nexport const ProcedureTable = ({ procedureName, incentiveAmount, incentiveRating, procedureDisplay }) => {\r\n return (\r\n
\r\n
\r\n {incentiveRating}\r\n
\r\n
\r\n {procedureName}\r\n
\r\n
\r\n {incentiveAmount ? $ : null}{' '}\r\n {incentiveAmount}\r\n
\r\n
\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { Col, Modal, Button } from 'react-bootstrap';\r\nimport { MdPhone } from 'react-icons/md';\r\nimport { updateSelectedProvider } from '../updateSelectedProvider';\r\nimport './results.scss';\r\nimport './incentive.scss';\r\n\r\nexport const Incentive = ({ name, patientCode, travelIncentive, uniqueKeyId, searchResultId }) => {\r\n const client = useSelector((state) => state.clients);\r\n const clients = client ? client.client : [];\r\n const [show, setShow] = useState(false);\r\n const closeHandler = () => setShow(false);\r\n const showHandler = () => setShow(true);\r\n\r\n return (\r\n \r\n {\r\n e.preventDefault();\r\n updateSelectedProvider(searchResultId, uniqueKeyId);\r\n showHandler();\r\n }}\r\n variant=\"primary\"\r\n size=\"lg\">\r\n Contact\r\n \r\n\r\n

\r\n {travelIncentive}\r\n

\r\n\r\n \r\n \r\n {`${name}`}\r\n \r\n \r\n

\r\n When you choose a Provider of Distinction for a listed procedure, you will automatically receive a cash\r\n incentive in the mail. Contact your Personal Health Navigator with any questions about the Providers of\r\n Distinction program, or for help finding a provider.\r\n

\r\n\r\n

\r\n Keep code {patientCode} for your records.\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 { Col, Table } from 'react-bootstrap';\r\nimport './results.scss';\r\n\r\nexport const ProviderLists = (props) => {\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 {props.providerList}\r\n
NameAccepting PatientsSpecialtiesLanguageGender
\r\n \r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Collapse, Button } from 'react-bootstrap';\r\nimport { MdExpandMore, MdExpandLess, MdAdd } from 'react-icons/md';\r\nimport { ProviderLists } from './providerLists';\r\nimport './fullDetails.scss';\r\n\r\nexport const FullDetails = ({ providerFullDetails, providerList, children }) => {\r\n const [open, setOpen] = useState(false);\r\n const [isMobile, setMobile] = useState(window.innerWidth < 990);\r\n const notAcceptingPatientsStyle = { bottom: '45px' };\r\n const proceduresStyle = { bottom: '95px' };\r\n const collapseStyle = { position: 'relative', bottom: '35px' };\r\n const updateSreenSize = () => {\r\n setMobile(window.innerWidth < 990);\r\n };\r\n useEffect(() => {\r\n window.addEventListener('resize', updateSreenSize);\r\n return () => window.removeEventListener('resize', updateSreenSize);\r\n });\r\n\r\n return (\r\n
\r\n {!isMobile ? (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Procedure\r\n
\r\n
\r\n Incentive\r\n
\r\n
\r\n
\r\n
{providerFullDetails.firstIncentiveRating}
\r\n
{providerFullDetails.firstProcedureName}
\r\n
${providerFullDetails.firstIncentiveAmount}
\r\n
\r\n\r\n {!open && providerFullDetails.proceduresCount > 1 ? (\r\n
\r\n \r\n \r\n {' '}\r\n {providerFullDetails.proceduresCount - 1} more procedures & conditions\r\n
\r\n ) : null}\r\n
\r\n
\r\n ) : null}\r\n\r\n {isMobile && !open ? (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n Procedure\r\n
\r\n
\r\n Incentive\r\n
\r\n
\r\n
\r\n
{providerFullDetails.firstIncentiveRating}
\r\n
{providerFullDetails.firstProcedureName}
\r\n
${providerFullDetails.firstIncentiveAmount}
\r\n
\r\n\r\n {!open && providerFullDetails.proceduresCount > 1 ? (\r\n
\r\n \r\n \r\n {' '}\r\n {providerFullDetails.proceduresCount - 1} more procedures & conditions\r\n
\r\n ) : null}\r\n
\r\n
\r\n ) : null}\r\n\r\n \r\n
\r\n {providerFullDetails.acceptingPatients ? (\r\n
\r\n {providerFullDetails.providerListCount > 0 ? (\r\n ''\r\n ) : (\r\n

{providerFullDetails.acceptingPatients}

\r\n )}\r\n
\r\n ) : null}\r\n\r\n {providerFullDetails.providerListCount > 0 ? (\r\n ''\r\n ) : (\r\n
\r\n
\r\n {providerFullDetails.resultType && (\r\n
\r\n
\r\n

Specialties

\r\n

{providerFullDetails.providerSpecialties}

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

Gender

\r\n

{providerFullDetails.providerGenderDisplay}

\r\n
\r\n
\r\n )}\r\n\r\n
\r\n
\r\n

Language

\r\n

{providerFullDetails.languageDisplay}

\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n {/* procedures start */}\r\n \r\n {isMobile ? (\r\n <>\r\n
\r\n
\r\n \r\n
\r\n
\r\n Procedure\r\n
\r\n
\r\n Incentive\r\n
\r\n
\r\n
\r\n
{providerFullDetails.firstIncentiveRating}
\r\n
{providerFullDetails.firstProcedureName}
\r\n
${providerFullDetails.firstIncentiveAmount}
\r\n
\r\n \r\n ) : null}\r\n\r\n {open ?
{children}
: null}\r\n\r\n {!open && providerFullDetails.proceduresCount > 1 ? (\r\n

\r\n \r\n {' '}\r\n \r\n {' '}\r\n {providerFullDetails.proceduresCount - 1} more procedures & conditions\r\n

\r\n ) : null}\r\n
\r\n {providerFullDetails.providerListCount > 0 && }\r\n {/*procedures end*/}\r\n
\r\n \r\n\r\n {\r\n setOpen(!open);\r\n }}\r\n className=\"btn btn-light\"\r\n aria-controls=\"collapse-text\"\r\n aria-expanded={open}>\r\n {open ? (\r\n
\r\n {providerFullDetails.providerListCount > 0 ? 'Hide providers' : 'Hide full details'} \r\n
\r\n ) : (\r\n
\r\n Show full details \r\n
\r\n )}\r\n \r\n \r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { Row, OverlayTrigger, Popover } from 'react-bootstrap';\r\nimport { getAppUrl, getAppTarget } from '../../configuration';\r\nimport { FaTrophy } from 'react-icons/fa';\r\nimport { MdStar, MdOpenInNew } from 'react-icons/md';\r\nimport { useSelector } from 'react-redux';\r\n\r\nconst XGL = 'https://www.anthem.com/health-insurance/provider-directory/searchcriteria?alphaprefix=XGL';\r\nconst XGS = 'https://www.anthem.com/health-insurance/provider-directory/searchcriteria?alphaprefix=XGS';\r\nconst X6G = 'https://www.anthem.com/health-insurance/provider-directory/searchcriteria?alphaprefix=X6G';\r\nexport const FilterResults = (props) => {\r\n const searchResults = useSelector((state) => state.healthNavigator.searchResults);\r\n const providerNetwork = useSelector((state) => state.healthNavigator.providerNetwork);\r\n const networks = useSelector((state) => state.healthNavigator.networks);\r\n\r\n const selectedNetwork = networks.map((network, index) => {\r\n let convertNetworkId = Number(providerNetwork);\r\n if (index === 0 && network.id === convertNetworkId) {\r\n return XGS;\r\n }\r\n if (index === 1 && network.id === convertNetworkId) {\r\n return XGL;\r\n }\r\n if (index === 2 && network.id === convertNetworkId) {\r\n return X6G;\r\n }\r\n return '';\r\n });\r\n\r\n return (\r\n <>\r\n \r\n
\r\n

\r\n {searchResults && searchResults.providers !== null ? props.providerResultCount : 0} results found with{' '}\r\n {searchResults.providers !== null && props.providerResultCount === 1 ? 'incentive' : 'incentives'}{' '}\r\n \r\n {' '}\r\n |\r\n \r\n

\r\n
\r\n
\r\n \r\n See all Connecticut healthcare providers within your network \r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n The doctors, hospitals and medical groups meeting the highest quality standards are designated\r\n “Centers of Excellence.” Using a Center of Excellence, when available, may earn you a larger cash\r\n reward. They are marked with a gold star in the Providers of Distinction Search.\r\n \r\n }>\r\n

\r\n Center of Excellence\r\n

\r\n \r\n\r\n \r\n The State of Connecticut has identified doctors, hospitals and medical care groups in the state that\r\n have verified high-quality outcomes for some of the most common medical conditions and procedures.\r\n Doctors and locations proven to meet these high standards are known as “Providers of Distinction.”\r\n These providers will appear first in the Providers of Distinction Search, clearly marked by a silver\r\n trophy. When you choose a Provider of Distinction for a listed procedure, you will automatically\r\n receive a cash incentive in the mail.\r\n \r\n }>\r\n

\r\n Providers of Distinction\r\n

\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { MdCheckCircle, MdStar, MdCancel } from 'react-icons/md';\r\nimport { Container, Row, Col } from 'react-bootstrap';\r\nimport { FaTrophy } from 'react-icons/fa';\r\nimport { Profile } from './profile';\r\nimport { UpswingCard } from './upswingCard';\r\nimport { SpineProgramCard } from './spineprogram/spineProgramCard';\r\nimport { Procedures } from './procedures';\r\nimport { ProcedureTable } from './procedureTable';\r\nimport { Incentive } from './incentive';\r\nimport { FullDetails } from './fullDetails';\r\nimport { FilterResults } from './filterResults';\r\nimport { useSelector } from 'react-redux';\r\nimport { SearchType } from '../searchType';\r\nimport { searchReferenceNumber, sortResults } from './helper';\r\nimport { groupProcedureProviders } from '../store';\r\nimport { formatPhoneNumber } from '../../shared';\r\nimport ReactGa from 'react-ga';\r\nimport './procedureResults.scss';\r\nimport './results.scss';\r\n\r\nexport const ProcedureResults = () => {\r\n const [setShow] = useState(false);\r\n const [isMobile, setMobile] = useState(window.innerWidth < 990);\r\n const searchResults = useSelector((state) => state.healthNavigator.searchResults);\r\n const groupedProcedureProviders = groupProcedureProviders(searchResults.providers);\r\n\r\n const updateSreenSize = () => {\r\n setMobile(window.innerWidth < 990);\r\n };\r\n useEffect(() => {\r\n window.addEventListener('resize', updateSreenSize);\r\n return () => window.removeEventListener('resize', updateSreenSize);\r\n });\r\n const getProcedureResults =\r\n searchResults.providerSearchType === SearchType.Procedure\r\n ? groupedProcedureProviders.map((result, index) => {\r\n const {\r\n uniqueKeyId,\r\n credentialSuffix,\r\n firstName,\r\n lastName,\r\n facilityName,\r\n locationType,\r\n distanceMiles,\r\n addressLine1,\r\n addressLine2,\r\n addressLine3,\r\n city,\r\n state,\r\n zip,\r\n phoneNumber,\r\n acceptingPatients,\r\n latitude,\r\n longitude,\r\n primarySpecialty,\r\n providerGenderDisplay,\r\n languageDisplay\r\n } = result;\r\n const sortProvidersByLastName = [...result.providers].sort(sortResults('lastName'));\r\n const sortIncentivesByName = [...result.procedureIncentives].sort(sortResults('procedureName'));\r\n const searchResultId = searchResults.searchResultId.toString();\r\n const credentialSuffixCheck = !credentialSuffix ? '' : credentialSuffix;\r\n const nameSeparator = !credentialSuffix ? '' : ', ';\r\n const firstNameCheck = !firstName ? '' : firstName;\r\n const lastNameCheck = !lastName ? '' : lastName;\r\n const facilityNameCheck = !facilityName ? '' : facilityName;\r\n\r\n const name = !facilityName\r\n ? firstNameCheck + ' ' + lastNameCheck + nameSeparator + credentialSuffixCheck\r\n : facilityNameCheck;\r\n\r\n const phoneNumberClicked = () => {\r\n ReactGa.event({\r\n category: 'ContactHA',\r\n action: 'Submit',\r\n label: 'Click to call'\r\n });\r\n };\r\n const address = (\r\n <>\r\n {!addressLine1 ? '' : {addressLine1}}\r\n {!addressLine2 ? '' : {addressLine2}}\r\n {!addressLine3 ? '' : {addressLine3}}\r\n {city + ', ' + state + ' ' + zip}\r\n \r\n {formatPhoneNumber(phoneNumber)}\r\n \r\n \r\n );\r\n\r\n const isAcceptingPatients = acceptingPatients ? (\r\n \r\n \r\n Accepting Patients\r\n \r\n ) : (\r\n ''\r\n );\r\n const firstIncentiveTableIcon =\r\n sortIncentivesByName[0].incentiveLevel === 'CenterOfExcellence' ? (\r\n \r\n ) : (\r\n \r\n );\r\n const providerFullDetails = {\r\n acceptingPatients: isAcceptingPatients,\r\n firstProcedureName: sortIncentivesByName[0].procedureName,\r\n firstIncentiveAmount: sortIncentivesByName[0].incentive,\r\n firstIncentiveRating: firstIncentiveTableIcon,\r\n resultType: facilityName ? false : true,\r\n providerSpecialties: !primarySpecialty ? '' : primarySpecialty,\r\n providerGenderDisplay: !providerGenderDisplay ? '' : providerGenderDisplay,\r\n languageDisplay: !languageDisplay ? '' : languageDisplay,\r\n proceduresCount: result.procedureIncentives.length,\r\n providerListCount: result.providers.length\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n {!isMobile ? (\r\n \r\n {result.procedureIncentives\r\n ? sortIncentivesByName.map((procedure, procedureIndex) => {\r\n const incentiveTableIcon =\r\n procedure.incentiveLevel === 'CenterOfExcellence' ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n return (\r\n \r\n );\r\n })\r\n : null}\r\n \r\n ) : null}\r\n {!isMobile ? (\r\n setShow(true)}\r\n travelIncentive=\"\"\r\n />\r\n ) : null}\r\n \r\n \r\n {\r\n const credentialSuffixCheck = !providerList.credentialSuffix ? '' : providerList.credentialSuffix;\r\n const nameSeparator = !providerList.credentialSuffix ? '' : ', ';\r\n const firstNameCheck = !providerList.firstName ? '' : providerList.firstName;\r\n const lastNameCheck = !providerList.lastName ? '' : providerList.lastName;\r\n const name = firstNameCheck + ' ' + lastNameCheck + nameSeparator + credentialSuffixCheck;\r\n const isAcceptingPatients = providerList.acceptingPatients ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n );\r\n return (\r\n \r\n \r\n {isMobile ? 'Name ' : null}\r\n {name}\r\n \r\n \r\n {isMobile ? 'Accepting Patients ' : null}\r\n {isAcceptingPatients}\r\n \r\n \r\n {isMobile ? 'Specialties ' : null}\r\n {providerList.primarySpecialty}\r\n \r\n \r\n {isMobile ? 'Language ' : null}\r\n {providerList.languageDisplay}\r\n \r\n \r\n {isMobile ? 'Gender ' : null}\r\n {providerList.providerGenderDisplay}\r\n \r\n \r\n );\r\n })}>\r\n {result.procedureIncentives\r\n ? sortIncentivesByName.map((procedure, index) => {\r\n const incentiveTableIcon =\r\n procedure.incentiveLevel === 'CenterOfExcellence' ? (\r\n \r\n ) : (\r\n \r\n );\r\n const incentiveTooltipMessage =\r\n procedure.incentiveLevel === 'CenterOfExcellence'\r\n ? 'The State of Connecticut has identified doctors, hospitals and medical care groups in the state that have verified high-quality outcomes for some of the most common medical conditions and procedures. Doctors and locations proven to meet these high standards are known as “Providers of Distinction.” These providers will appear first in the Providers of Distinction Search, clearly marked by a silver trophy. When you choose a Provider of Distinction for a listed procedure, you will automatically receive a cash incentive in the mail. '\r\n : 'Centers of Excellence should always be the first choice, however, there are many other high-quality doctors and locations that have demonstrated above-average high-quality care. Those above-average high-quality doctors and locations are part of a “Providers of Distinction.” When using the Providers of Distinction Search, doctors and locations that earned the “Providers of Distinction” designation will appear immediately under the Centers of Excellence in your search results – noted by a silver seal.';\r\n\r\n return (\r\n \r\n );\r\n })\r\n : null}\r\n \r\n\r\n {isMobile ? (\r\n setShow(true)}\r\n travelIncentive=\"\"\r\n />\r\n ) : null}\r\n \r\n
\r\n );\r\n })\r\n : null;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {getProcedureResults.length > 0 ? (\r\n getProcedureResults\r\n ) : (\r\n
\r\n
New providers are added frequently, please check back or call a life navigator advocate.
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { FaTrophy } from 'react-icons/fa';\r\nimport { MdCheckCircle, MdStar } from 'react-icons/md';\r\nimport { Container, Col, Row } from 'react-bootstrap';\r\nimport { Profile } from './profile';\r\nimport { Procedures } from './procedures';\r\nimport { Incentive } from './incentive';\r\nimport { ProcedureTable } from './procedureTable';\r\nimport { FullDetails } from './fullDetails';\r\nimport { FilterResults } from './filterResults';\r\nimport { useSelector } from 'react-redux';\r\nimport { SearchType } from '../searchType';\r\nimport { searchReferenceNumber, sortResults } from './helper';\r\nimport './providerResults.scss';\r\nimport './results.scss';\r\nimport { formatPhoneNumber } from '../../shared';\r\n\r\nexport const ProviderResults = () => {\r\n const [setShow] = useState(false);\r\n const [isMobile, setMobile] = useState(window.innerWidth < 990);\r\n const { searchResults, providerLookupType } = useSelector((state) => state.healthNavigator);\r\n\r\n const updateSreenSize = () => {\r\n setMobile(window.innerWidth < 990);\r\n };\r\n useEffect(() => {\r\n window.addEventListener('resize', updateSreenSize);\r\n return () => window.removeEventListener('resize', updateSreenSize);\r\n });\r\n const providerData = searchResults.providers && searchResults.providers !== null ? searchResults.providers : [];\r\n const getProcedureResults =\r\n searchResults.providerSearchType === SearchType.Doctor || searchResults.providerSearchType === SearchType.ByUniqueId\r\n ? providerData.map((result, index) => {\r\n const {\r\n uniqueKeyId,\r\n credentialSuffix,\r\n firstName,\r\n lastName,\r\n facilityName,\r\n locationType,\r\n distanceMiles,\r\n addressLine1,\r\n addressLine2,\r\n addressLine3,\r\n city,\r\n state,\r\n zip,\r\n phoneNumber,\r\n acceptingPatients,\r\n latitude,\r\n longitude,\r\n primarySpecialty,\r\n providerGenderDisplay,\r\n languageDisplay\r\n } = result;\r\n const sortIncentivesByName = [...result.procedureIncentives].sort(sortResults('procedureName'));\r\n const searchResultId = searchResults.searchResultId;\r\n const credentialSuffixCheck = !credentialSuffix ? '' : credentialSuffix;\r\n const nameSeparator = !credentialSuffix ? '' : ', ';\r\n const firstNameCheck = !firstName ? '' : firstName;\r\n const lastNameCheck = !lastName ? '' : lastName;\r\n const name = firstNameCheck + ' ' + lastNameCheck + nameSeparator + credentialSuffixCheck;\r\n\r\n const phoneNumberClicked = () => {\r\n ReactGa.event({\r\n category: 'ContactHA',\r\n action: 'Submit',\r\n label: 'Click to call'\r\n });\r\n };\r\n\r\n const providerAddress = (\r\n <>\r\n {!addressLine1 ? '' : {addressLine1}}\r\n {!addressLine2 ? '' : {addressLine2}}\r\n {!addressLine3 ? '' : {addressLine3}}\r\n {city + ', ' + state + ' ' + zip}\r\n \r\n {formatPhoneNumber(phoneNumber)}\r\n \r\n \r\n );\r\n\r\n const isAcceptingPatients = acceptingPatients ? (\r\n \r\n \r\n Accepting Patients\r\n \r\n ) : (\r\n ''\r\n );\r\n\r\n const firstIncentiveTableIcon =\r\n sortIncentivesByName[0].incentiveLevel === 'CenterOfExcellence' ? (\r\n \r\n ) : (\r\n \r\n );\r\n\r\n const providerFullDetails = {\r\n acceptingPatients: isAcceptingPatients,\r\n firstProcedureName: sortIncentivesByName[0].procedureName,\r\n firstIncentiveAmount: sortIncentivesByName[0].incentive,\r\n firstIncentiveRating: firstIncentiveTableIcon,\r\n resultType: providerLookupType === SearchType.Doctor ? true : false,\r\n providerSpecialties: !primarySpecialty ? '' : primarySpecialty,\r\n providerGenderDisplay: !providerGenderDisplay ? '' : providerGenderDisplay,\r\n languageDisplay: !languageDisplay ? '' : languageDisplay,\r\n proceduresCount: result.procedureIncentives.length\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n {!isMobile ? (\r\n \r\n {result.procedureIncentives\r\n ? sortIncentivesByName.map((procedure, index) => {\r\n const incentiveTableIcon =\r\n procedure.incentiveLevel === 'CenterOfExcellence' ? (\r\n \r\n ) : (\r\n \r\n );\r\n const incentiveTooltipMessage =\r\n procedure.incentiveLevel === 'CenterOfExcellence'\r\n ? 'The State of Connecticut has identified the highest quality doctors, hospitals and medical care groups in the state for some of the most common medical conditions and procedures. Doctors and locations that meet the highest quality standards are designated a “Center of Excellence.” Centers of Excellence will appear first in the Providers of Distinction Search, clearly marked by a [gold star/trophy/whatever is decided]. The state will pay you a cash reward in exchange for selecting a Center of Excellence. '\r\n : 'Centers of Excellence should always be the first choice, however, there are many other high-quality doctors and locations that have demonstrated above-average high-quality care. Those above-average high-quality doctors and locations are part of a “Providers of Distinction.” When using the Providers of Distinction Search, doctors and locations that earned the “Providers of Distinction” designation will appear immediately under the Centers of Excellence in your search results – noted by a silver seal.';\r\n\r\n return (\r\n \r\n );\r\n })\r\n : null}\r\n \r\n ) : null}\r\n {!isMobile ? (\r\n setShow(true)}\r\n travelIncentive=\"\"\r\n />\r\n ) : null}\r\n \r\n \r\n \r\n {result.procedureIncentives\r\n ? sortIncentivesByName.map((procedure, index) => {\r\n const incentiveTableIcon =\r\n procedure.incentiveLevel === 'CenterOfExcellence' ? (\r\n \r\n ) : (\r\n \r\n );\r\n const incentiveTooltipMessage =\r\n procedure.incentiveLevel === 'CenterOfExcellence'\r\n ? 'The State of Connecticut has identified doctors, hospitals and medical care groups in the state that have verified high-quality outcomes for some of the most common medical conditions and procedures. Doctors and locations proven to meet these high standards are known as “Providers of Distinction.” These providers will appear first in the Providers of Distinction Search, clearly marked by a silver trophy. When you choose a Provider of Distinction for a listed procedure, you will automatically receive a cash incentive in the mail.'\r\n : 'Centers of Excellence should always be the first choice, however, there are many other high-quality doctors and locations that have demonstrated above-average high-quality care. Those above-average high-quality doctors and locations are part of a “Providers of Distinction.” When using the Providers of Distinction Search, doctors and locations that earned the “Providers of Distinction” designation will appear immediately under the Centers of Excellence in your search results – noted by a silver seal.';\r\n\r\n return (\r\n \r\n );\r\n })\r\n : null}\r\n \r\n\r\n {isMobile ? (\r\n setShow(true)}\r\n travelIncentive=\"\"\r\n />\r\n ) : null}\r\n \r\n
\r\n );\r\n })\r\n : null;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {getProcedureResults.length > 0 ? (\r\n getProcedureResults\r\n ) : (\r\n
\r\n
New providers are added frequently, please check back or call a life navigator advocate.
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { Container, Row, Col } from 'react-bootstrap';\r\nimport { ProcedureTable } from './procedureTable';\r\nimport { FullDetails } from './fullDetails';\r\nimport { FilterResults } from './filterResults';\r\nimport { Profile } from './profile';\r\nimport { FaTrophy } from 'react-icons/fa';\r\nimport { MdCheckCircle, MdStar } from 'react-icons/md';\r\nimport { Procedures } from './procedures';\r\nimport { Incentive } from './incentive';\r\nimport { useSelector } from 'react-redux';\r\nimport { SearchType } from '../searchType';\r\nimport { searchReferenceNumber, sortResults } from './helper';\r\nimport './facilityResults.scss';\r\nimport './results.scss';\r\nimport { formatPhoneNumber } from '../../shared';\r\n\r\nexport const FacilityResults = () => {\r\n const [setShow] = useState(false);\r\n const [isMobile, setMobile] = useState(window.innerWidth < 990);\r\n const { searchResults } = useSelector((state) => state.healthNavigator);\r\n\r\n const updateSreenSize = () => {\r\n setMobile(window.innerWidth < 990);\r\n };\r\n useEffect(() => {\r\n window.addEventListener('resize', updateSreenSize);\r\n return () => window.removeEventListener('resize', updateSreenSize);\r\n });\r\n const providerData = searchResults.providers && searchResults.providers !== null ? searchResults.providers : [];\r\n const getProcedureResults =\r\n searchResults.providerSearchType === SearchType.Facility ||\r\n searchResults.providerSearchType === SearchType.ByUniqueId\r\n ? providerData.map((result, index) => {\r\n const {\r\n uniqueKeyId,\r\n facilityName,\r\n locationType,\r\n distanceMiles,\r\n addressLine1,\r\n addressLine2,\r\n addressLine3,\r\n acceptingPatients,\r\n city,\r\n state,\r\n zip,\r\n phoneNumber,\r\n latitude,\r\n longitude,\r\n primarySpecialty,\r\n providerGenderDisplay,\r\n languageDisplay\r\n } = result;\r\n const sortIncentivesByName = [...result.procedureIncentives].sort(sortResults('procedureName'));\r\n const searchResultId = searchResults.searchResultId;\r\n\r\n const phoneNumberClicked = () => {\r\n ReactGa.event({\r\n category: 'ContactHA',\r\n action: 'Submit',\r\n label: 'Click to call'\r\n });\r\n };\r\n const address = (\r\n <>\r\n {!addressLine1 ? '' : {addressLine1}}\r\n {!addressLine2 ? '' : {addressLine2}}\r\n {!addressLine3 ? '' : {addressLine3}}\r\n {city + ', ' + state + ' ' + zip}\r\n \r\n {formatPhoneNumber(phoneNumber)}\r\n \r\n \r\n );\r\n const isAcceptingPatients = acceptingPatients ? (\r\n \r\n \r\n Accepting Patients\r\n \r\n ) : (\r\n ''\r\n );\r\n const firstIncentiveTableIcon =\r\n sortIncentivesByName[0].incentiveLevel === 'CenterOfExcellence' ? (\r\n \r\n ) : (\r\n \r\n );\r\n const providerFullDetails = {\r\n acceptingPatients: isAcceptingPatients,\r\n firstProcedureName: sortIncentivesByName[0].procedureName,\r\n firstIncentiveAmount: sortIncentivesByName[0].incentive,\r\n resultType: false,\r\n firstIncentiveRating: firstIncentiveTableIcon,\r\n providerSpecialties: !primarySpecialty ? '' : primarySpecialty,\r\n providerGenderDisplay: !providerGenderDisplay ? '' : providerGenderDisplay,\r\n languageDisplay: !languageDisplay ? '' : languageDisplay,\r\n proceduresCount: result.procedureIncentives.length\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n {!isMobile ? (\r\n \r\n {result.procedureIncentives\r\n ? sortIncentivesByName.map((procedure, index) => {\r\n const incentiveTableIcon =\r\n procedure.incentiveLevel === 'CenterOfExcellence' ? (\r\n \r\n ) : (\r\n \r\n );\r\n const incentiveTooltipMessage =\r\n procedure.incentiveLevel === 'CenterOfExcellence'\r\n ? 'The State of Connecticut has identified doctors, hospitals and medical care groups in the state that have verified high-quality outcomes for some of the most common medical conditions and procedures. Doctors and locations proven to meet these high standards are known as “Providers of Distinction.” These providers will appear first in the Providers of Distinction Search, clearly marked by a silver trophy. When you choose a Provider of Distinction for a listed procedure, you will automatically receive a cash incentive in the mail. '\r\n : 'Centers of Excellence should always be the first choice, however, there are many other high-quality doctors and locations that have demonstrated above-average high-quality care. Those above-average high-quality doctors and locations are part of a “Providers of Distinction.” When using the Providers of Distinction Search, doctors and locations that earned the “Providers of Distinction” designation will appear immediately under the Centers of Excellence in your search results – noted by a silver seal.';\r\n\r\n return (\r\n \r\n );\r\n })\r\n : null}\r\n \r\n ) : null}\r\n {!isMobile ? (\r\n setShow(true)}\r\n travelIncentive=\"\"\r\n />\r\n ) : null}\r\n \r\n \r\n \r\n {result.procedureIncentives\r\n ? sortIncentivesByName.map((procedure, index) => {\r\n const incentiveTableIcon =\r\n procedure.incentiveLevel === 'CenterOfExcellence' ? (\r\n \r\n ) : (\r\n \r\n );\r\n const incentiveTooltipMessage =\r\n procedure.incentiveLevel === 'CenterOfExcellence'\r\n ? 'The State of Connecticut has identified doctors, hospitals and medical care groups in the state that have verified high-quality outcomes for some of the most common medical conditions and procedures. Doctors and locations proven to meet these high standards are known as “Providers of Distinction.” These providers will appear first in the Providers of Distinction Search, clearly marked by a silver trophy. When you choose a Provider of Distinction for a listed procedure, you will automatically receive a cash incentive in the mail. '\r\n : 'Centers of Excellence should always be the first choice, however, there are many other high-quality doctors and locations that have demonstrated above-average high-quality care. Those above-average high-quality doctors and locations are part of a “Providers of Distinction.” When using the Providers of Distinction Search, doctors and locations that earned the “Providers of Distinction” designation will appear immediately under the Centers of Excellence in your search results – noted by a silver seal.';\r\n\r\n return (\r\n \r\n );\r\n })\r\n : null}\r\n \r\n\r\n {isMobile ? (\r\n setShow(true)}\r\n travelIncentive=\"\"\r\n />\r\n ) : null}\r\n \r\n
\r\n );\r\n })\r\n : null;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {getProcedureResults.length > 0 ? (\r\n getProcedureResults\r\n ) : (\r\n
\r\n
New providers are added frequently, please check back or call a life navigator advocate.
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { MdStar } from 'react-icons/md';\r\nimport { FaTrophy } from 'react-icons/fa';\r\nimport './legend.scss';\r\n\r\nexport const Legend = () => {\r\n return (\r\n
\r\n
\r\n

Use the search above to find high-quality low-cost doctors that provide monetary incentives

\r\n

\r\n Center of Excellence\r\n

\r\n

\r\n The doctors, hospitals and medical groups meeting the highest quality standards are designated “Centers of\r\n Excellence.” Using a Center of Excellence, when available, may earn you a larger cash reward. They are marked\r\n with a gold star in the Providers of Distinction search.\r\n

\r\n

\r\n Providers of Distinction\r\n

\r\n

\r\n The State of Connecticut has identified doctors, hospitals and medical care groups in the state that have\r\n verified high-quality outcomes for some of the most common medical conditions and procedures. Doctors and\r\n locations proven to meet these high standards are known as “Providers of Distinction.” These providers will\r\n appear first in the Providers of Distinction Search, clearly marked by a silver trophy. When you choose a\r\n Provider of Distinction for a listed procedure, you will automatically receive a cash incentive in the mail.\r\n

\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { ProcedureResults } from './procedureResults';\r\nimport { ProviderResults } from './providerResults';\r\nimport { FacilityResults } from './facilityResults';\r\nimport { Legend } from '../legend';\r\nimport { ErrorCard } from '../../shared/error';\r\nimport { SearchType } from '../searchType';\r\nimport { useSelector } from 'react-redux';\r\nimport './results.scss';\r\n\r\nexport const Results = () => {\r\n const searchResults = useSelector((state) => state.healthNavigator.searchResults);\r\n const searching = useSelector((state) => state.healthNavigator.searching);\r\n const error = useSelector((state) => state.healthNavigator.error);\r\n\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nconst ResultList = (props) => {\r\n if (props.error) {\r\n return (\r\n \r\n );\r\n }\r\n if (props.searching) {\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n }\r\n if (props.searchtype === SearchType.Procedure) {\r\n return ;\r\n }\r\n if (props.searchtype === SearchType.Doctor) {\r\n return ;\r\n }\r\n if (props.searchtype === SearchType.ByUniqueId) {\r\n return ;\r\n }\r\n if (props.searchtype === SearchType.Facility) {\r\n return ;\r\n } else {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { Hero } from './search';\r\nimport { Results } from './results';\r\nimport { ErrorBoundry } from '../shared';\r\nimport { keepAlive } from '../session';\r\n\r\nconst keepAliveIntervalMinutes = 1000 * 60 * 5;\r\n\r\nexport const HealthNavigatorView = () => {\r\n useEffect(() => {\r\n setInterval(() => {\r\n keepAlive();\r\n }, keepAliveIntervalMinutes);\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","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { HealthNavigatorView } from './healthNavigatorView';\r\nimport { loadEpisodes, loadNetworks } from './store';\r\nimport { ErrorBoundry } from '../shared';\r\n\r\nexport const loadHealthNavigator = (store, logError) => {\r\n const healthNavigatorComponent = document.getElementById('healthNavigatorComponent');\r\n if (healthNavigatorComponent) {\r\n store.dispatch(loadEpisodes(logError));\r\n store.dispatch(loadNetworks(logError));\r\n ReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n healthNavigatorComponent\r\n );\r\n }\r\n};\r\n","import { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport * as types from './actionTypes';\r\n\r\nconst loadNetworksSuccess = (networks) => {\r\n return {\r\n type: types.LOAD_NETWORKS_SUCCESS,\r\n networks\r\n };\r\n};\r\n\r\nconst loadNetworksFailed = () => {\r\n return {\r\n type: types.LOAD_NETWORKS_FAILED\r\n };\r\n};\r\n\r\nexport const loadNetworks = (logError) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get('healthnavigator/network');\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadNetworksSuccess(apiResult.data.result)));\r\n } catch (error) {\r\n logError('healthnavigator/networkActions', 'loadNetworks', error);\r\n resolve(dispatch(loadNetworksFailed()));\r\n }\r\n });\r\n };\r\n};\r\n","export const LOAD_ORGANIZATION_CONFIGURATIONS_SUCCESS = 'LOAD_ORGANIZATION_CONFIGURATIONS_SUCCESS';\r\nexport const LOAD_ORGANIZATION_CONFIGURATIONS_FAILED = 'LOAD_ORGANIZATION_CONFIGURATIONS_FAILED';\r\n","import { AppConfiguration } from '../configuration';\r\nimport { getSessionToken, updateSessionToken } from '../session';\r\nimport * as types from './actionTypes';\r\nimport { ApiClient } from '../api';\r\nexport function loadOrganizationConfigurations(logError) {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiClient = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await apiClient.get('OrganizationConfigurations');\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadOrganizationConfigurationsSuccess(apiResult.data.Result)));\r\n } catch (error) {\r\n logError('organizationConfigurations/actions', 'loadOrganizationConfigurations', error);\r\n resolve(dispatch(loadOrganizationConfigurationsFailed()));\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport const loadOrganizationConfigurationsSuccess = (organizationConfigurations) => {\r\n return {\r\n type: types.LOAD_ORGANIZATION_CONFIGURATIONS_SUCCESS,\r\n organizationConfigurations: organizationConfigurations\r\n };\r\n};\r\n\r\nexport const loadOrganizationConfigurationsFailed = () => {\r\n return { type: types.LOAD_ORGANIZATION_CONFIGURATIONS_FAILED };\r\n};\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n list: [],\r\n loading: true,\r\n error: false\r\n};\r\n\r\nexport const organizationConfigurationsReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.LOAD_ORGANIZATION_CONFIGURATIONS_SUCCESS:\r\n return {\r\n ...state,\r\n list: action.organizationConfigurations,\r\n loading: false,\r\n error: false\r\n };\r\n\r\n case types.LOAD_ORGANIZATION_CONFIGURATIONS_FAILED:\r\n return {\r\n ...state,\r\n list: [],\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const LOAD_CONTENTEXCLUSIONS_SUCCESS = 'LOAD_CONTENTEXCLUSIONS_SUCCESS';\r\nexport const LOAD_CONTENTEXCLUSIONS_FAILED = 'LOAD_CONTENTEXCLUSIONS_FAILED';\r\n","import { AppConfiguration } from '../configuration';\r\nimport { getSessionToken, updateSessionToken } from '../session';\r\nimport { ApiClient } from '../api';\r\nimport * as types from './actionTypes';\r\n\r\nexport function loadContentExclusions(logError) {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return dispatch => {\r\n return new Promise(async resolve => {\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n try {\r\n const apiResult = await client.get('membersite/contentexclusion');\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadContentExclusionsSuccess(apiResult.data.result)));\r\n } catch (error) {\r\n logError('contentExclusions/actions', 'loadContentExclusions', error);\r\n resolve(dispatch(loadContentExclusionsFailed()));\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport const loadContentExclusionsSuccess = contentExclusions => {\r\n return {\r\n type: types.LOAD_CONTENTEXCLUSIONS_SUCCESS,\r\n contentExclusions: contentExclusions\r\n };\r\n};\r\n\r\nexport const loadContentExclusionsFailed = () => {\r\n return { type: types.LOAD_CONTENTEXCLUSIONS_FAILED };\r\n};\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n list: [],\r\n loading: true,\r\n error: false\r\n};\r\n\r\nexport const contentExclusionsReducer = (state = initialState, action) => {\r\n switch (action.type) {\r\n case types.LOAD_CONTENTEXCLUSIONS_SUCCESS:\r\n return {\r\n ...state,\r\n list: action.contentExclusions,\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_CONTENTEXCLUSIONS_FAILED:\r\n return {\r\n ...state,\r\n list: [],\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const loadingSelector = (state) => {\r\n return (\r\n state.incentivePrograms.loading ||\r\n state.incentiveRules.loading ||\r\n state.incentiveButtonLinks.loading ||\r\n state.incentiveLinkedRules.loading ||\r\n state.sections.loading ||\r\n state.memberIncentiveScores.loading\r\n );\r\n};\r\n","// function to help get MVC antiforgery token when needed\r\nexport function getAntiForgeryToken() {\r\n var token = '';\r\n if (window.$) {\r\n var tokenField = window.$('[name= \"__RequestVerificationToken\"]').first();\r\n if (tokenField) {\r\n token = tokenField.val();\r\n if (!token) {\r\n console.warn('getAntiForgeryToken() - empty or null token.');\r\n }\r\n } else {\r\n console.warn(\r\n 'getAntiForgeryToken() - __RequestVerificationToken was not found.'\r\n );\r\n }\r\n }\r\n return token;\r\n}\r\n","import React from 'react';\r\n//import { useState, useRef } from 'react';\r\nimport { Tooltip, Button, OverlayTrigger } from 'react-bootstrap';\r\n\r\nexport const ToolTip = props => {\r\n // const [show, setShow] = useState(false);\r\n // const target = useRef(null);\r\n return (\r\n <>\r\n {props.tooltipContent}}>\r\n \r\n \r\n \r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { Row, Col, Modal, Button } from 'react-bootstrap';\r\nimport { getAntiForgeryToken } from '../../antiforgery';\r\nimport { getAppUrl, AppConfiguration } from '../../configuration';\r\nimport { ToolTip } from './tooltip';\r\nimport moment from 'moment';\r\nimport './section.scss';\r\n\r\nexport const Section = (props) => {\r\n const [show, setShow] = useState(false);\r\n const [url, SetUrl] = useState('');\r\n var sectionBlock = props.rules.map((item) => {\r\n const postUrl = `${AppConfiguration.getSiteRootUrl()}${'Home'}/${'TobaccoAffidavit'}`;\r\n const tobaccoAffidavitUrl = `${AppConfiguration.getSiteRootUrl()}${'Wellness'}/${'Secure/TobaccoOath/Default.aspx'}`;\r\n const verificationTokenName = '__RequestVerificationToken';\r\n const token = getAntiForgeryToken();\r\n\r\n const sectionButton =\r\n item.buttonName != '' ? (\r\n \r\n {item.buttonName}\r\n \r\n ) : (\r\n ''\r\n );\r\n let form = null;\r\n\r\n return (\r\n \r\n \r\n {item.description != '' ? (\r\n \r\n \r\n \r\n ) : (\r\n {item.name}\r\n )}\r\n
\r\n {item.dueDate != null ? 'Deadline: ' + moment(item.dueDate).format('MM/DD/YYYY') : null}\r\n \r\n \r\n {item.pointValue < 1 && item.maxPoints < 1 ? 'Incomplete' : item.pointValue}\r\n {item.pointValue < 1 && item.maxPoints < 1 ? '' : Points}\r\n {item.pointValue < 1 && item.maxPoints < 1 ? '' : Max of {item.maxPoints}}\r\n \r\n \r\n {item.buttonUrl.toLowerCase().includes('tobaccoaffidavit') ? (\r\n {\r\n form = ref;\r\n }}>\r\n \r\n \r\n {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n form.submit();\r\n }}\r\n href=\"\"\r\n className=\"btn btn-primary\">\r\n {item.buttonName}\r\n \r\n \r\n ) : item.buttonType === 'timeTrade' ? (\r\n <>\r\n {\r\n setShow(true);\r\n SetUrl(item.buttonUrl);\r\n }}>\r\n {item.buttonName.toLowerCase().includes('upcoming appointment')\r\n ? 'Upcoming Appointment: ' + moment(item.buttonName).format('l LT')\r\n : item.buttonName}\r\n \r\n \r\n ) : (\r\n sectionButton\r\n )}\r\n \r\n
\r\n );\r\n });\r\n return (\r\n <>\r\n {sectionBlock}\r\n {/* Modal */}\r\n\r\n {!url ? (\r\n ''\r\n ) : (\r\n {\r\n setShow(false);\r\n location.reload();\r\n }}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n","export const LOAD_INCENTIVEPROGRAMS_SUCCESS = 'LOAD_INCENTIVEPROGRAMS_SUCCESS';\r\nexport const LOAD_INCENTIVEPROGRAMS_FAILED = 'LOAD_INCENTIVEPROGRAMS_FAILED';\r\n","import * as types from './actionTypes';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\n\r\nexport const loadIncentivePrograms = (logError) => {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get('member/incentiveprogram');\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadIncentiveProgramsSuccess(apiResult.data.result)));\r\n } catch (error) {\r\n logError('incentives/programs/actions', 'loadIncentivePrograms', error);\r\n resolve(dispatch(loadIncentiveProgramsFailed()));\r\n }\r\n });\r\n };\r\n};\r\n\r\nconst loadIncentiveProgramsSuccess = (list) => {\r\n return { type: types.LOAD_INCENTIVEPROGRAMS_SUCCESS, list };\r\n};\r\n\r\nconst loadIncentiveProgramsFailed = () => {\r\n return { type: types.LOAD_INCENTIVEPROGRAMS_FAILED };\r\n};\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n list: []\r\n};\r\n\r\nexport function incentiveProgramsReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_INCENTIVEPROGRAMS_SUCCESS:\r\n return {\r\n ...state,\r\n list: action.list,\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_INCENTIVEPROGRAMS_FAILED:\r\n return {\r\n ...state,\r\n list: [],\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","export const getCurrentProgram = (programList, ipoid) => {\r\n let currentProgram = null;\r\n\r\n if (ipoid && ipoid != null) {\r\n currentProgram = programList.filter((program) => program.incentiveProgramOrganizationId == ipoid)[0];\r\n } else {\r\n currentProgram = programList.filter((program) => program.defaultProgram == true)[0];\r\n }\r\n\r\n return currentProgram;\r\n};\r\n","import { getCurrentProgram } from '../programs';\r\n\r\nconst OP_OR = 'OP_OR';\r\nconst OP_GRPREQD = 'OP_GRPREQD';\r\nconst OP_GRPMAX = 'OP_GRPMAX';\r\nconst defaultSectionName = 'Other Ways to Participate';\r\nconst IN_NoSpous = 'IN_NoSpous';\r\nconst buttonLinkIncentiveCodes = [\r\n 'IN_Waist',\r\n 'IN_TtlChol',\r\n 'IN_HdlChol',\r\n 'IN_BldPres',\r\n 'IN_CholRat',\r\n 'IN_LdlChol',\r\n 'IN_GlocsNF',\r\n 'IN_GlucsF',\r\n 'IN_Triglyc',\r\n 'IN_BMI',\r\n 'IN_HbA1c',\r\n 'IN_PSA',\r\n 'IN_BMIYoY',\r\n 'IN_TChlYoY',\r\n 'IN_HdlYoY',\r\n 'IN_BpYoY',\r\n 'IN_FGlYoY',\r\n 'IN_RGlYoy',\r\n 'IN_HbA1YoY'\r\n];\r\n\r\nexport const loadSectionData = (\r\n sections,\r\n memberIncentiveScores,\r\n incentiveProgramId,\r\n incentiveRuleDetails,\r\n incentiveButtonLinks,\r\n incentiveLinkedRules,\r\n incentiveProgramOrgId\r\n) => {\r\n let sectionsByProgamId = sections.byProgramId[incentiveProgramId];\r\n\r\n //filter incentive rules with no sections assigned\r\n let incentiveRules = incentiveRuleDetails.byProgramId[incentiveProgramId].filter((item) => {\r\n return item.sectionId != null && item.incentiveCode != IN_NoSpous;\r\n });\r\n\r\n const buttonLinks = incentiveButtonLinks.byIpoid[incentiveProgramOrgId];\r\n const linkedRules = incentiveLinkedRules.byProgramId[incentiveProgramId];\r\n\r\n const defaultSection = sectionsByProgamId.filter(\r\n (section) => section.sectionName.toLowerCase() === defaultSectionName.toLowerCase()\r\n )[0];\r\n\r\n const scoresMap = memberIncentiveScores.byIpoid[incentiveProgramOrgId].reduce((scoresMap, score) => {\r\n scoresMap[score.incentiveRuleId] = {\r\n points: score.rollupPoints\r\n };\r\n return scoresMap;\r\n }, {});\r\n\r\n sectionsByProgamId.sort((a, b) => (a.priority > b.priority ? 1 : -1));\r\n let sectionsList = sectionsByProgamId.reduce((sectionsList, section) => {\r\n sectionsList[section.sectionId] = {\r\n sectionName: section.sectionName,\r\n priority: section.priority,\r\n rules: []\r\n };\r\n return sectionsList;\r\n }, {});\r\n\r\n const buttonLinksMap = buttonLinks.reduce((buttonLinksMap, link) => {\r\n buttonLinksMap[link.incentiveRuleId] = {\r\n url: link.url,\r\n buttonName: link.buttonName,\r\n buttonType: link.buttonType\r\n };\r\n return buttonLinksMap;\r\n }, {});\r\n\r\n // hook up linked rules in sections\r\n if (linkedRules.length > 0) {\r\n let result = hookLinkedRulesForSections(\r\n sectionsList,\r\n defaultSection,\r\n linkedRules,\r\n incentiveRules,\r\n buttonLinksMap,\r\n scoresMap\r\n );\r\n incentiveRules = result.incentiveRules;\r\n sectionsList = result.sectionsList;\r\n }\r\n\r\n //get individual incentives rules\r\n incentiveRules.forEach((rule) => {\r\n const buttonLink = {\r\n buttonName: '',\r\n url: '',\r\n buttonType: ''\r\n };\r\n\r\n let incentiveButtonLink = buttonLinksMap[rule.incentiveRuleId];\r\n if (incentiveButtonLink && !buttonLinkIncentiveCodes.includes(rule.incentiveCode)) {\r\n buttonLink.buttonName = incentiveButtonLink.buttonName;\r\n buttonLink.url = incentiveButtonLink.url;\r\n buttonLink.buttonType = incentiveButtonLink.buttonType;\r\n }\r\n\r\n let incentiveScore = scoresMap[rule.incentiveRuleId];\r\n\r\n if (incentiveScore && incentiveScore.points >= rule.maxPoints) {\r\n return;\r\n }\r\n\r\n if (sectionsList[rule.sectionId] && sectionsList[rule.sectionId].rules) {\r\n sectionsList[rule.sectionId].rules.push(getIncentiveRule(rule, buttonLink));\r\n }\r\n });\r\n\r\n sectionsList = sortSectionsList(sectionsList);\r\n\r\n //push all rules from different sections to one list\r\n let noSectionsList = { 0: { sectionName: '', rules: [] } };\r\n\r\n for (const [sectionId, section] of Object.entries(sectionsList)) {\r\n if (noSectionsList[0] && noSectionsList[0].rules)\r\n noSectionsList[0].rules = noSectionsList[0].rules.concat(section.rules);\r\n }\r\n\r\n noSectionsList = sortSectionsList(noSectionsList);\r\n\r\n const rulesCount = noSectionsList[0].rules.length;\r\n\r\n return {\r\n sectionsList: rulesCount < 15 ? noSectionsList : sectionsList,\r\n buttonLinks: buttonLinks,\r\n rulesCount: rulesCount\r\n };\r\n};\r\n\r\nconst hookLinkedRulesForSections = (\r\n sectionsList,\r\n defaultSection,\r\n linkedRules,\r\n incentiveRules,\r\n buttonLinksMap,\r\n scoresMap\r\n) => {\r\n linkedRules.forEach((linkedRule) => {\r\n // get rules from incentive rules that are linked\r\n let groupedRules = incentiveRules.filter((rule) => rule.incentiveRuleLinkId === linkedRule.incentiveRuleLinkId);\r\n if (groupedRules.length > 0) {\r\n // get button details for the linked rules\r\n let result = getDetailsForLinkedRule(groupedRules, buttonLinksMap, scoresMap, linkedRule);\r\n let required = linkedRule.operatorLookupCode === OP_GRPREQD || result.required;\r\n //check if the rules are from same section\r\n let sameSectionId = groupedRules.every((rule) => rule.sectionId === groupedRules[0].sectionId);\r\n //if same section, push to that section else push to 'Other Ways to Participate' section\r\n let sectionId = sameSectionId ? groupedRules[0].sectionId : defaultSection.sectionId;\r\n if (sectionsList[sectionId] && sectionsList[sectionId].rules && !result.maxMet)\r\n sectionsList[sectionId].rules.push(\r\n getIncentiveRule(groupedRules[0], result.buttonLink, linkedRule, result.dueDate, required)\r\n );\r\n //remove linked rules from the main incentive rules\r\n incentiveRules = incentiveRules.filter((rule) => rule.incentiveRuleLinkId != linkedRule.incentiveRuleLinkId);\r\n }\r\n });\r\n return {\r\n incentiveRules: incentiveRules,\r\n sectionsList: sectionsList\r\n };\r\n};\r\n\r\nconst getDetailsForLinkedRule = (groupedRules, buttonLinksMap, scoresMap, linkedRule) => {\r\n const buttonDetails = {\r\n buttonName: '',\r\n url: '',\r\n buttonType: ''\r\n };\r\n let maxMet = false;\r\n let dueDate = '';\r\n let required = false;\r\n let buttonFound = false,\r\n dueDateFound = false,\r\n requiredFound = false,\r\n i = 0,\r\n groupScore = 0;\r\n\r\n while (i < groupedRules.length) {\r\n let incentiveScore = scoresMap[groupedRules[i].incentiveRuleId];\r\n\r\n if (incentiveScore) {\r\n if (linkedRule.operatorLookupCode == OP_OR || linkedRule.operatorLookupCode === OP_GRPREQD) {\r\n maxMet = incentiveScore.points >= groupedRules[i].pointValue;\r\n } else if (linkedRule.operatorLookupCode === OP_GRPMAX) {\r\n groupScore = groupScore + incentiveScore.points;\r\n }\r\n }\r\n\r\n if (!buttonFound && !buttonLinkIncentiveCodes.includes(groupedRules[i].incentiveCode)) {\r\n let buttonLink = buttonLinksMap[groupedRules[i].incentiveRuleId];\r\n if (buttonLink) {\r\n buttonFound = true;\r\n buttonDetails.buttonName = buttonLink.buttonName;\r\n buttonDetails.url = buttonLink.url;\r\n buttonDetails.buttonType = buttonLink.buttonType;\r\n }\r\n }\r\n if (!dueDateFound && groupedRules[i].ruleOverrideEndDate) {\r\n dueDateFound = true;\r\n dueDate = groupedRules[i].ruleOverrideEndDate;\r\n }\r\n if (!requiredFound && groupedRules[i].required) {\r\n requiredFound = true;\r\n required = true;\r\n }\r\n i++;\r\n }\r\n\r\n if (linkedRule.operatorLookupCode === OP_GRPMAX && linkedRule.groupMaxPoints != null) {\r\n maxMet = groupScore >= linkedRule.groupMaxPoints;\r\n }\r\n return {\r\n buttonLink: buttonDetails,\r\n dueDate: dueDate,\r\n required: required,\r\n maxMet: maxMet\r\n };\r\n};\r\n\r\nconst getIncentiveRule = (rule, buttonLink, linkedRule, dueDate, required) => {\r\n return {\r\n incentiveruleId: rule.incentiveRuleId,\r\n maxPoints: linkedRule && linkedRule.operatorLookupCode !== OP_OR ? linkedRule.groupMaxPoints : rule.maxPoints,\r\n name: linkedRule ? linkedRule.incentiveRuleLinkName : rule.name,\r\n pointValue: rule.pointValue,\r\n priority: rule.priority,\r\n required: required ? required : rule.required,\r\n buttonName: buttonLink.buttonName,\r\n buttonUrl: buttonLink.url,\r\n buttonType: buttonLink.buttonType,\r\n description: linkedRule ? linkedRule.incentiveRuleLinkDesc : rule.description,\r\n dueDate: dueDate ? dueDate : rule.ruleOverrideEndDate,\r\n operatorLookupCode: linkedRule ? linkedRule.operatorLookupCode : ''\r\n };\r\n};\r\n\r\nconst sortSectionsList = (sectionsList) => {\r\n for (const [sectionId, section] of Object.entries(sectionsList)) {\r\n section.rules.sort(ruleCompare);\r\n }\r\n return sectionsList;\r\n};\r\n\r\nconst ruleCompare = (rule1, rule2) => {\r\n if (!rule1 || !rule2) return 0;\r\n if (rule1.required && !rule2.required) return -1;\r\n if (!rule1.required && rule2.required) return 1;\r\n if (rule1.required && rule2.required) {\r\n if (rule1.operatorLookupCode && !rule2.operatorLookupCode) return 1;\r\n if (!rule1.operatorLookupCode && rule2.operatorLookupCode) return -1;\r\n if (rule1.operatorLookupCode && rule2.operatorLookupCode) {\r\n if (rule1.operatorLookupCode === rule2.operatorLookupCode) return 0;\r\n if (rule1.operatorLookupCode == OP_GRPREQD) return -1;\r\n if (rule2.operatorLookupCode == OP_GRPREQD) return 1;\r\n if (rule1.operatorLookupCode == OP_GRPMAX) return -1;\r\n if (rule2.operatorLookupCode == OP_GRPMAX) return 1;\r\n }\r\n }\r\n if (rule1.operatorLookupCode && !rule2.operatorLookupCode) return -1;\r\n if (!rule1.operatorLookupCode && rule2.operatorLookupCode) return 1;\r\n if (rule1.operatorLookupCode && rule2.operatorLookupCode) {\r\n if (rule1.operatorLookupCode === rule2.operatorLookupCode) return 0;\r\n if (rule1.operatorLookupCode == OP_GRPREQD) return -1;\r\n if (rule2.operatorLookupCode == OP_GRPREQD) return 1;\r\n if (rule1.operatorLookupCode == OP_GRPMAX) return -1;\r\n if (rule2.operatorLookupCode == OP_GRPMAX) return 1;\r\n }\r\n if (rule1.name > rule2.name) return 1;\r\n if (rule1.name < rule2.name) return -1;\r\n return 0;\r\n};\r\n","import React from 'react';\r\nimport { getAppUrl, getAppTarget } from '../../configuration';\r\nimport { Col, Container, Row, ListGroup, Spinner } from 'react-bootstrap';\r\nimport { MdChevronRight } from 'react-icons/md';\r\nimport { useSelector } from 'react-redux';\r\nimport { loadingSelector } from './loadingSelector';\r\nimport TrackerIcon from './images/trackerIconNew.png';\r\nimport WorkshopIcon from './images/workshopIconNew.png';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport CustomChallengeIcon from './images/customChalGeneric.png';\r\nimport PointsCompletedBkg from './images/pointsCompletedBkg.jpg';\r\nimport './pointsCompleted.scss';\r\n\r\nconst trackYourProgressUrl = `${AppConfiguration.getSiteRootUrl()}Wellbeing/ChallengeTrackers`;\r\nconst participateInWorkshopUrl = `${AppConfiguration.getSiteRootUrl()}Wellbeing/Workshops`;\r\nconst challengeYourselfUrl = `${AppConfiguration.getSiteRootUrl()}Wellbeing/Challenges`;\r\n\r\nexport const PointsCompleted = (props) => {\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {props.noProgramAvailable ? (\r\n

\r\n You don't have an active program right now, but don't let that stop you from taking control of your\r\n health. Check out these well-being activities:\r\n

\r\n ) : (\r\n

\r\n You’ve earned all the points available in your program. Great job! Click “Points Earned” to see what\r\n you’ve completed. You can continue to meet your health goals by exploring other areas of our website:\r\n

\r\n )}\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n

Track Your Progress

\r\n

Add trackers to your dashboard and watch your trends as you work towards your goals.

\r\n \r\n Learn More\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n

Participate in a Workshop

\r\n

Learn about stress management, mindfulness, fitness, and more!

\r\n \r\n Learn More\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n

Challenge Yourself

\r\n

Think you can get more steps then your colleagues? Invite them to a challenge!

\r\n \r\n Learn More\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \"points\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/jpeg;base64,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bHNib29sAAAAAABOZ3R2Ym9vbAAAAAAARW1sRGJvb2wAAAAAAEludHJib29sAAAAAABCY2tnT2JqYwAAAAEAAAAAAABSR0JDAAAAAwAAAABSZCAgZG91YkBv4AAAAAAAAAAAAEdybiBkb3ViQG/gAAAAAAAAAAAAQmwgIGRvdWJAb+AAAAAAAAAAAABCcmRUVW50RiNSbHQAAAAAAAAAAAAAAABCbGQgVW50RiNSbHQAAAAAAAAAAAAAAABSc2x0VW50RiNQeGxAUgAAAAAAAAAAAAp2ZWN0b3JEYXRhYm9vbAEAAAAAUGdQc2VudW0AAAAAUGdQcwAAAABQZ1BDAAAAAExlZnRVbnRGI1JsdAAAAAAAAAAAAAAAAFRvcCBVbnRGI1JsdAAAAAAAAAAAAAAAAFNjbCBVbnRGI1ByY0BZAAAAAAAAAAAAEGNyb3BXaGVuUHJpbnRpbmdib29sAAAAAA5jcm9wUmVjdEJvdHRvbWxvbmcAAAAAAAAADGNyb3BSZWN0TGVmdGxvbmcAAAAAAAAADWNyb3BSZWN0UmlnaHRsb25nAAAAAAAAAAtjcm9wUmVjdFRvcGxvbmcAAAAAADhCSU0D7QAAAAAAEABIAAAAAQABAEgAAAABAAE4QklNBCYAAAAAAA4AAAAAAAAAAAAAP4AAADhCSU0D8gAAAAAACgAA////////AAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNBAsAAAAAAFpodHRwczovL3d3dy5nZXR0eWltYWdlcy5jb20vZXVsYT91dG1fbWVkaXVtPW9yZ2FuaWMmdXRtX3NvdXJjZT1nb29nbGUmdXRtX2NhbXBhaWduPWlwdGN1cmw4QklNJxAAAAAAAAoAAQAAAAAAAAABOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANZAAAABgAAAAAAAAAAAAABEAAAARAAAAASAHAAbwBpAG4AdABzAEMAbwBtAHAAbABlAHQAZQBkAEIAawBnAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAEQAAABEAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAABEAAAAABSZ2h0bG9uZwAAARAAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAARAAAAAAUmdodGxvbmcAAAEQAAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQAAAABAAAAAAAGYWx0VGFnVEVYVAAAAAEAAAAAAA5jZWxsVGV4dElzSFRNTGJvb2wBAAAACGNlbGxUZXh0VEVYVAAAAAEAAAAAAAlob3J6QWxpZ25lbnVtAAAAD0VTbGljZUhvcnpBbGlnbgAAAAdkZWZhdWx0AAAACXZlcnRBbGlnbmVudW0AAAAPRVNsaWNlVmVydEFsaWduAAAAB2RlZmF1bHQAAAALYmdDb2xvclR5cGVlbnVtAAAAEUVTbGljZUJHQ29sb3JUeXBlAAAAAE5vbmUAAAAJdG9wT3V0c2V0bG9uZwAAAAAAAAAKbGVmdE91dHNldGxvbmcAAAAAAAAADGJvdHRvbU91dHNldGxvbmcAAAAAAAAAC3JpZ2h0T3V0c2V0bG9uZwAAAAAAOEJJTQQoAAAAAAAMAAAAAj/wAAAAAAAAOEJJTQQUAAAAAAAEAAAABzhCSU0EDAAAAAAwvQAAAAEAAACgAAAAoAAAAeAAASwAAAAwoQAYAAH/2P/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAoACgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A68tsb+f8ipMcZ1/HhRD3j6bSERr2d3R5JxUGW771NvjBKZrqj3J+CK01Ji5hvjt+Kr5WaKR7oafAlXS6ktIIAHeDB/BU78Hpr5dtcHHvun/q9yMavVButHKu6ta4+yfxAVf9o5czuE+avvwcGdC7zl3P4KTK8FmjcdjieS8lxP8Anf8AfVMDADSLERO9ZU0W5uS8xvbPfmf+irDBlD3HQHvtP/flebnNpaGtqbWOYYI/gEwzA8mGOceT3QJPSKQB1lbXb65GpHnOilF/cR8/7kYXVu/NDY5nRSZZTM6T4jVNs9k6d0LDZOj5Hzj8is1+odAXOPiRAS9dg0YAT4wiV2WEy5yBJ7LgPFm0WASdFNrneBKdr29zKl6k8JpXK9yi6fFTgnyUXVSdCgpES5KXeCn6YHLkxY3ndKVqf//Q7BvUqHcgj4jT/oqQux3iRtnvOn5QqP2fb+c374/Kl6L+fpecypOGPQrOOXUOgLKyPaQEz9Ro7XwCpN3N5EIzHtPggYpE7Xc3IJiJ+B0TGiw/SsA8hqpSzu4JE19tUtf5BNhE7EYfzzPmonEcBo8k+ARHWNGgAUPVd2dB8k4CSwmLA4pjV5+A/iSuP+t2Vl1ZzMKrIPoRXupZuDm2FvqvL3sLf0vpu3fpf0rKP6H/AIS1doy173Bgduc4gCR4rgPrF1VnUusW+59mPQ0VYzWPMbK9/wCmHpmutrci022V+r6136X9F+gqUecnhAJ3P5N34byv3jNQ0ER6pfu8Xb5/XP1cLt/Vnqjc3GZhZeTPUK4axtpIdYwD/TwabrW/me/17Kv9K9nqP6BuLb2LT5bl5p0/7LjdTxswh19mJcLfRc520jaHVzaN1rGtu/nXfQ/mv0C9I6XkUZ+M3Jq3NBc6t7HFrnMfWdttbn1+x/729v063/mfQRhKXCLO+o8lnOYccM044xICEvbmJSieHIP7v9xsMpub2YPLcihlwgkCPIyitx2H86ERuO3s8pGTAIo2b+4hFa6ApjGbH0kvszRy4ymEhdRUHpF3mmNQb3KW0HuUkq3peoUxZ5lPCSn/0e9FNJH0Gj4sBP8A0g5OcalzY2tH9UBp/wCigOzKYhzngHuGuH/ShM2/Ca7cGu3D84hzvylARn2P2LuKHcfavdhBwisFh8SQ4f8AfUA9Nvj8134Kx+0qNZ3D+z/tT/tHHI5sH9n/AGpw90dD9iw+0eo+1ouwbm/4Mx5CR/0VA0Wt5a4fKFojPxifpPn+qf4Jjm4r/wA5/wDm6finiU+sVhjj6SDmuqI8Z8FH0wVol+HZo0vJ8NkoTqK3/QPlqCD+VSCXcEMZj2ILkdWvfhdMy8lkl9dRDSJBBeRR6n8n0m2OfvXl2S8Gn06wXvf7nuY106FrnPZu2eyuGs/9Jr0L6+tdT0Aj1HV+rcxuxmjrAG2v9NrXR6rWv9J9mz/jFweL6dFU6+u76djjIk/m79XOYz6P7iq8wfWDvQDv/BcfFy+SFxh7plx5JDilGHDGMYRj/jsHZT2OsewgEPDw8aljhs03O/e2rv8A6l3G3Gy2ueXtquqYwADYAK37XMc36Vjq211W/wDB4+OvOrOlerbvru9up2unQ8uDJXqX1Q6Men9IY11jXOyS29gZy2stPotscdvqW+m7db/LT8cwRGI14f8AveFp89yubFLNmzAR96R4KIkMkpZYZpcPD+jGEXdaWtEogyGAePy/2tQHVO8/nooGgHmFIYA7lzxkkNglfn5AP6OmR4kj+DkjlZLoBp2z3GyP+k5yC3GbqQ2dupgTHxRqyWiGe3zCBhEbAJjMnckM6zY7VzdpHbcx3/UhEBf3BQw6w8v+8ogDideVGR5MgI8V5Pn9yafIp9rh/cn2n5oUm3//0jn6yXvg1Mpxi0Dc0NNkuj3fz59jP5P85/wyZvXuoEFrrmtaDIf6VYJ8Gu9hZtb+79P/AIVO7GxvTdaafYwn2uD9rie81t97m/n/AJjEzP2cIH2Yh/A3eoO24+2l21v+ctQe30gT9In/AKTik5ydcoH1lH/osj1bLf8AznUHMDhDtrWaCP8AB7Wte3d/wf01KrqeQNP2naAYG51ZfoPH1Gu9yZ1DS0kMZtdDoaNBI+j9J2/+u5PTi9OssY2xwrG4CCYHmP3UR7fY/SMP+9QfdGvHr4yyR/7pp0dac5+RV1HMvxXNusDbGusex1QJ2vs9N36F7HM3Xeh/NU2VK3mZXW/TacO266mpj7MnIJLDQysf4RjWt33Pqd6zG3/pLv8AAfpfU9PncKimxzsrqL3DGxnelayp4qN9t1lxdgV2O21XVu22ZmX/AKH9HVX6H86tm3qdXUW/ZMVleBj49O6vKwxZXZI+jRus/T/aGel/R3V3W5F3o/o68en7esyWfIbHFQPgOLX+s7EeXxxo8PqAHWXDp/UQ0/WGzJ9OuqzKuZsmx32gEna7YLZDa/Ts9/6LHyG1/at/pV/plstzbMfa459pDmB9bbWm1pa76O6u0P8AD/grEDDytrssX7hmYrxXkNxyLbnvaXsfk5Hp1U05P85Vs+y/r77/ALTb9l9PfjJ8axvWbK3WOrGZZW25mIzcbRU4nZdkNJfV62TV+ndbXs9X1a8bIxq7avUUnL5fUI5DcDprrw9vmY+aw3AzxCskddLjxD9IVBwfrZ9bLLbXdNbXXjtraWZNjGw6wu2veGbjY6jHa5lfsbb776v0v81XUsLpfS+o9RrfbjYljqACW3uhlRLZ3Na9/p+tf7dv6Ky1FwXs6t9Z67L2Nurtuvvsa4NcCG+tbseHh9b2/wA21y73Gfa21jwRdBbDH6TB9ga36Lf7CdHl45bmTQutN/tXR+JZuTIhjN6cUuP1Q/c4uD970PmOIX511dNDHF9rm1scfa3c8tYydxd+8vWei59HT+mUYGff6uRQ1zHWVMc5hG97qw3c2qz2sds/m151gV04/wBaWUVujGrz4a7Uj02XGNzo3P2fvbfZ6fqfzC7Xdil5Btax0/4QFuv9dw9P/pI8ty+M8RN2NNFfEPiXMTEYEwESeOq4fULj/wB27NvXOmgH067bY4LoYD8ybHf9BUcjr727drcfF3zsDpse6P3G2vqb7f3tiCKKwx9pewVVibLd7djAeDZaC5rP+/rDzcPJ604XVVAYlrXNxbbmisGoSz2X3te/1cu911np0t3s/VvW9nqJ+Y48UfT6p9OL1fbFq8uMuaXqPDCtTAcPlU2ed1XrHUc7GsrotGPieqKrGziOda5nqepua91dT9tfpVfor/RY+v1/0l/pLZxvrJkXsLW4m+ynS197XUucdCD6df6H1dr2Os+z78f8+lc707pDbsl9ebsHVRUDjzlG54aA/axjmux6Mf8A7Tfq9teT9oxfWr/R/pbVeprecsZOI59rLv0eRQyskNc0Ou2hlj6P1PIrdb9ldT+j9T0vsn/af0qkMlT4pDiF+qPh4N6eK8fBE8Jr0S31/rcX/Odg/WLJaR+osk+DyT9zmpz9YXO+mbK+xAO2Pj6TSsu84TGh1d/qteGuFolxe0w9m3a32M2u+igNzK6SDUC5p1a5wGmv/Ceq13+YtMYsZFiF3tv/AN04p5jLEkSybbj0+n6Q4XbHXQ0QLnAGdDY4GP8AN3Jn9dcPZvsM8e6xwj/oLCv6llvG1oazndFbQPyIJyMhwLjYQSZIYdug8QzbtRGCO5iPtRLnJbCRP0/9Cf/TML7C7d7mkCCC7aNo+jsP7qI6zI2+mDYHP1a2YnXlvp7faqAymvdoQ7bJriXu076usq9P+qxXcVmFcQci8VE67rdNZA+m0O9Pa39J+k+mtMmI1/Y4wEjpf40wa7Ia79JMR5T/ANS1JtAeQXk7CdHN5H8mPorT+yY72guzKw78x7tm1zQPzXSNvu/esr/8EVfL9DELnjI9WqqLL7SxuwVEF7NrPU/TWZex1GJ6T/T9X+eTTzEIi7o+A/Jkjys5mgOIf1jt/ecZnV8Pp3UrBk49OVVQ8gsdqBu9T9NW30rq9+3HZXmNyfS9DZ+r0+t+sI9nSsPrln7YqH7MBrdT6ORSxlTT/wBpL9tzHfpr930MVv8Aov8AjsiWLT0vHyXZD97Mu0uymjK9uPueDsfb6LbMP18bGqv9Kp/q49TPV/T+v6aoZHUyzqd2dUZ2NDhXmWes65vOM71Pc3dZ6n6CvId+s1fovU+yV1+lmE2Se5t14iogdgAxxuj9Vo6rZ+2Mb9FZQaw+q2A41bd1FFtj7HXXW13fpK7qvU/r/pLFudY6hYOn3Nx2facu9r662dPIyK67BSPslttjq8XLdd6NnrU20/avs3p/8NvVLoXUMvJM9Z2M6eXPY82N9Oywzutprbi/o2uY+/0s22qqzKusuxOl0f4dbr6OnOs/ZuGW2MZa0W4jRPp2Os3MzKnXMb+m30u+j+n9n6D0aa0kvCfUTAvy+o5FtNO92PikghxDZc9rdtQez+dtrbb7P5r+cXXVtsYd4EOb7xLXEac/Qa/6LkDqXUMLDyxmsxxbdZZssyqLCzJZkNDQ9z8ltHo2vZ7P1T0fV9D9LZ63T83KW1Rdf1LGx8rGtbkPsJfdWWNxn3NaWt3uaG5XpZn6RjLPT/Q5HqV+l6X80rODmeH0GqJ3afM8qJnjjdgURu+YdZFOF1rJqxhApyA5upLg+a8h8aN/m7nPbX/hP8HZ6n84vS6sDJN1jNnoi17htcGVOjd++0+7+p/XXm7qqMv613Y+XY3a7OufmXEyz06rLMi/6BFrv0VLm/8AoxFyOt5Zz3l+UMtl5sJa0k1tY47dzaLwbabdrq/s9NbKvS/V6/8ABphzyxiXCAeI7f3V3sDIY8RPoG/73H/6I9hmvHVLq6OmsYKaHWNyLGVh++5jg1novyHfrDPa63Etrr9L/Cf4BVsXbZnNxrnVClwewSQamuePp772X21W5j2etbbt9b9W/R/oK7LKcHo+Xjiy6pv6N73BprLthczYGfZWRZT+gtZvfe31qvUsx/S9VbGKNmG4epYLng2XZb2ubS6uHOtpa/RrsTFxsOyr21faLqP0tnp4Xq0XQGcp+qW5bMIRhHhjsE2Zj15jMZrq2Xuc66u+nKrOO9rK6C2/GqF3oPczGzPsXo7Mh7/tXofpkDDLMIw4249fo1lztzgHUS7J+14/quZV6XrfaGX0Xepd6frWbKsb9HiFOQ51Ls/LYy237U3JtpFZaPTc5lj249d30q8hr/tVP/ch/wDPfZMj2V3epOsrsfdabn24raLXN9I+9jLmUZX6KXX7LaHZVOYx36S6tn6X17aUUtK67p+PRjh9b7HbdtNbXMcLa2ANqsN7Nr3bqXVWu2Ynv/nP5t6Bdn9Pe7bjYTnsIhjnuIeSfb/N1+pV9Nqr9JvswsHMwsh9j8PGu20xqHsLrKqL8fKfX7/Zh+mzf+j/AEH6v+l9THRh1DADXCq+6tr3Oe9gAYHOj9CD6Y9zKv37P0v/AASv4Mh9uOhPD6d5fo/3XJ5rFEZZ6xHEePURv1f3kZzqdorsxmseJMs3NcYmdzQHez+o1KrK6eZNz21EO/m/TtcY53eo/wD8giXOe+ovq6iPTeWhw91YIb+ka201OtdVuc3c1m1/6X9J/OKlfTcS54u+0tYQHuLnkTHI9T9J+b6f8hS+5fUx+p/7prnEBrQn/if9w//Ugcas+yyQTJkgPaS3TQ2bv0n7nu/7bUXYQreGMv2ztje9zedSxu1t/pbfo/zXsehVZPqNdY/1iz2tLxIra4T6fqFzbcP1HN/f/SP/AH0VmXU97Wa312n21OLLRJ9rnwS9ztv7jLGf98VkSkOrmmI7Jsf16XNtfY8MJm21jRYdkj1PUq2fpG7Gu3t2/wBT9Kqz76OrMyNnrv6dU8impxcx+UK2vr+i5wvoxrt/6w/2eljfq3896zL1mZbum5vTneiygXnRgHpuZa4h1d97Nj2V1V0/zdb/AOd/n/s3qV2LC6taKLaepMa+qzGeNgqcyaq2u3GxjXD1N/r5LLPXvq/nbPs/p/zl6gyz4pA/RvctAwhr1PF9sYu7Q3rjLqshnqX2kvZfiB0Q3b6lr8fI9tjdj2epst9ffTR+n9b7Q/CWbVRf1PrGRTlZFVoAodlvxvziKjTONWAzGYzdsxf9Lj2/pq8O307FOj6zjpocL2bxVY6trqNhFrLK31+lZW6xzfSuxr68mu6n0rPX+0U2M/Sb1H6o51GPk5ds+hkve6+y2xrntrrpFoaNWO9axrvps9P1P+2PTsjZ3ofQLfZQxrG4AZZhtZuoZj2NO/JFXtdZ6LvU9FmR/wBq/wCe9Ky6z1lrUVZ76qKSTjit1bm1gNpc4VFvq5NzLfV9P7R6e99Lr/Uw8aujF9Sv1LFkV9RyGY4dVYCabWW20SxzqxXF+RlWAB/pU4zH436T/SZVdtH6f9Ej15/2WuvJc77dbqK7CwyfbZkHKx5tq9b1H/oWv/wL676sWq1m/wBMKbvU+l25PULsqplYffUw2+q4+jY5jnMop6g2lrnvrt2Wv6ZnUM+14/6XBv8A0NtOMud6tjW4MdNLWWYuSwV49Ja+60PPuFWJkMFbMxrqnvx/U9Sn7TX/AN26v0nTn6xTj0ZgxvXblNFRfU9u02Esx7Kn1O3bvc/1tm6vF/nP03/alCz3dPrbksqsocyo/aDU93spAaS6/EZd6e2h3petcyh/896vstsSIBCg+fW4FWPaGWOZS87xWxzNjw6v3enZubX6Vzd/uqdX/I/RoFj6NpFTmkOBsF1FfcfRbu0du923+RZ/hF2uL0Fv2K/B6jjVfZcqoOrupeHUVul1zPQ+27c/EsyX3/aGb/tH6f8ARfqtHqevy3U+i9Zx84Ygpbfdc9zKjjQ77QWN3bq66f0lG5jXe6xn5l36T9Eq8sJBsEyUR2+xxGtqFzH2kuLgWi3UvZYZ/Sexw3+7b9N3/gq6qzJzcnpFdWxtn23GFubfkOLRUWWV0PsyLag19OLe+v8Awtn6x7P5quiitcjZVe18Guyu1gMVOYCBJ9J4DH/ms+gtLC6jmYwOGTGE2XNtcHOrDvdLcnZ7vSsY+77RU5v6Rj/0lfo/zk0ToB1Q9J0Xp7asO/BxLG5uTS6uyiqIBFpP2na9u/0anUbrKbWs9HH/AJ31P0lm/ZYMerqOGN5yC2kOdW5rw5+OSW/ZrA7c2quq39afu/wX2z+fq/mebx7cyl32m02Y9r6xl2XOABa1/rZTLsR1Nnp2Yd3oXe6+z1Mhns/nLa67rvVckX14+d0uHPqPqQ5opB2fpbvR3sqsprf6v88z7NZT+jruZdX/ADTwlT2Pxs/qHRy4PZZSx+O41yba2+pfiuYysN/T4+2qpz/5uq6mzHVGzFspdtsYWBxLG7rGOmNrnBtjNjNvvY7f+iYt7IoxeoXY5aSzLo9peA4vDLWOycX7Q3bVXk03ejkMyK/8FlV+r/g/QRKm05ODTZjYznU7CKazaWltlftdXf6b3Me5t1j/AF7Gs/4yqqxTYcvBY6HVqc1gGThl1jo8x9nZdaWtLBZI21ssrGjvbo91j939Sv1P0f6T2IT3UWOHq3W27TsDhW0wR2Fu/wBzv662724uM812tvos0c5ldVd7TYAWuc6u1tn6P6T6WNfZ/wAWoPyaMnc37Tc7eQw11NqD3gTVW6x1bK6Geo9uz0/V/mf8J632ilT+7evRqjCK3D//1cQteH+k+t1NzD7ho8s/eDamuZ7/AGLX6D9mqGTb1FrbGhzPSoqAN1r5butxGVet7qav52yh36H3+/f+kpwPUqJHq1+oGmfe7eRr7twefd/Zcr/Tc3JrtOZW821YrNjydj241Dy3fYyvItoZ6LX1MZ9kZ9P/ALqW+l6s2QngLTwAe5G/FH9ceoNsyMPazZmeu4H6DK6y59bm1vure/1H/Z20Mfaz9V/0dmQ/9ZshbTiuqfiWAOF25wc+wtZWJc+qzIa1rnvrrb6t32b+d/R2WM/R/ZVnfWhnoYjah+ka53ruvGnqOyP09fqj3bn2V77fV37Lf+0382tCj7Q9mP6bAXBjG01EWOcXH6Da9r6Nv0f51z/zP9GqzfaWDiYd1DHW45FuRjQS1h2PLnWW2XbXWMc9uNTjWuufX9DJp9NlFnqJ6A1tuXkU/q2Pj+i5/obm+3a91GVX6pd/x/2e1v6bH+n6d161G3W4VIxtxxXsa5t5DWGlwaN1b6Huc782vL/S4731et6NX/DKfTGU/YOo5bKi6h9hcxzmgE1FjaXOZW7c2n7Xjtt9eyzf67LqbLP8H9oVocq7O6hZ9ncyyw13049eWwit26su+0Npe5r3XMxvdj0f4H1cdldfpfoFoYrmV78F9oxXW7Ta+3dcx/51mJk4jmubS7Hu/mP1f1cf9JTYxmfmUKtg4WRRiA2Oa+oOON+iLXVkEt9N29n+khlv87+m9Wv/AEa1vq90q3GzXdRymNfdgRkOw63bKqvU91Gc/ItZs+z5TN9lWLhNycv1Ps9/pXXfo0VO/gXYeFWbLGtxOo5hdlZRrDi1l8vp9dzLf0m/bstw+nX0Y/qVf6W77TYrFn2fOxR0zrFHqY7gLWsc07z6Xv8At7rxvxbnXWN9S3FbayvF/od32j1fZnYGL1O3qrsnDLDjOtY3MuFbseu2RdV1JleIytvq+i/0/wBYy7P53Gtr/aF39Go0r8S2q8NbXQbzAdU8lz9hOwvb/N0t2ep+5dT9m/0Wy9JLmizJ6Zl3U5P601oLm5NzCXPreHGi7c79NZa+1ttFv+D/AOF/PyLVZf1Ch1GRDMg1zWbGNc0OpcK62ZALbbcZjvVr9R9P87X6np/pKlYxL33vvxraHtx63mim+40vxXN3WtZRU61rrq7sqwtdbj2V/Z6/Tqp/V/0ddoKun0vfbkXvF59RowH72+ys1udax1+UHX24tmU+ypuyv1vXp/SXfzlySnner/VO2/DN9LGVW1sZtwqHuJeyXe1m+rYx9dLP0Vnr/rlf6O71Mr9KuRw7K6PVqsx/VqtLn0Mc7a4OANPq13enb7tjt7Lnfoa7a16jidObjhmX097X42W17TQ8uh9j2BjvRoh27J9Oj9Z+z5132r7NZ/h/0zKufjnquC+jI2ZVcAU02WRe2xh9J1WTZNWRi2WNd6ft/wCIyv8ACeqOHtop5joWdX1HdRkOZkOxK7aWvD/SvsruLnO9ZzhfiXOq9L2Xe9/pv/7avDp9uFS3LwtnUMVxIzmNrLbKtHeq6utrmOu/S+nbQ3+e/wCB/S2qhl14fQup0101jHw84WNryZl9bia2+hnb3+5uC9uyxtdlNFv9J9Rlnq103OoV9RY/djS6zfU77ONWhrmsrY91Vn+BZb6tP6PGrf8A4auj89JTsvppwmUYmfa9mTZXVdADvspsZXZRs94Y70bqrt2XVVV69X2P1Mf9JTUrX2fLrrspaDa11xbllrGGxuSYLrHMhjGW9QrfU7J+y/8Aan7Pl1etiZ1noZeLm3W9G6fnWW2Ouq+02CmgNH6Os+pdivc13rOta3GffjPfTvtrsuou9H+dS6th5v2/pWTi2l7uqMDMnFcR6eUxjH2VfptzfXyK+n5X2ar3032Wej6Vld9fqJdwiQsU6ZNGIwevaMd/Darbad/xY2q9lv8AnqF3T6MyofoKMljfc1jDW90xH59Vm7/t1Vn02GpppeN/tLhRa2troDRZ+hzsXJbXv/0Lv5n2f4eq999O7Gvrh11DLWgH1HllZI2+7e63G9Hd7Bu9lSaN74xf8v0f/QmuR0ov/9bAr3ZFocw0sc/gvdXUyZ+j6m2lrK/zKtv6an/pq31XpFtVTxZjX1l4HpVWNNuLvfLa6cfOZv3+tOyl/sf7/S2fpHonT+m2X2MuuxLcy/IcbWPbkCttxne/1t1d7PWbtd/osj1v0bKfTTt6f1p9X6nSylrmy9+DltrpcGu/Rubj3Wemx2PY1u/0bqP1hn+kSlPWrAGxsj/vv+4asRVHW7sNfGuxs89QGTWM/GobW3eSC4F291VNbKnV/rL7/wBDjX7f+6XrfrX6aVNPpnHryIsfiUtrdXY8vDn1/ot12z31MouZ6DP5r7P+56tNqGSBmPz2u9Y2tNkOqrYPUqfTV61eLg/qn2zbvsrZvZ6n89b/AKGzP6qHuyaba3vd9psY+mpm0O4/nb32Mrfc+zd/hP5v/DJh0bgNgFj9YPteTJdY17gALXS1pc/T1LIa+yy1ln7/AP25+kTZPWWOsrY3HfRQXRbQ/Sqwt9L7M/bS3+cqaz8/1fZ6SbBrpfXfYxoNjLIe8atc1oZ+hZH5jt7vWcz0vTr/AMLZZb6aX7OzOoXUscXOtzHFldrdGkg7Lcf0qtzMb0a/Uvsyr/8AtNSo48Wl9dUmno/q50pnUa/2ncW4uGx7qamPDXixutdX2yqt7Kq62vofXV/3J9e9nq+n+mXT5bMcOZ0uihjcemxl2WBWRUXSXt+h61t11ttf2rIt/TP+z4/o35lX2l+zneoivFw8ucl1tOFjCj0cdkY7AYxKelC+ftORduf6+DnPp9N9/wBoz/s/6P8AQW6nt6VNedXNrXetZkMcWkXtDaXVtednpsrrvqqx31/ocfFy/Xt/WvWuUqHbxsgVNyaashmPXQTYLciX2M3H0jtfbX6N+25rMb/C30s9H7V6uTbWxAP1lwGtayt32jGsc5juo2gvq9c73+nUzfbdkNyNr6q3Y36Ciz0KKvtP6X7Nk5XT6MrPOP1O41YuM4/ZMNgcKhUA2u31R7H+rddfT6jPW9/qfzP6xd9mh9ZfstGGzJrorJrDfTpIBrcD/N/o8d2+n3eyvFt+00f6Kr9KglTuoHIyc6g3uGDmY73YxYNzantFbMzEuZVS7Nqrp9arKr/nKfZ+k/mL/Sr09bwsLqWXmWY5FvUWY9lFbXNcGm8tfmb8tjnY9NGTk++mx/qbP6P+qbLaVzFmPcK5stFmUCNhaQ30G+5znWsl/q7X/wCi9X2V/wA96X6K2VjMe1tOYN7Q+h7MmkVSDL3UehX6LWud7WM+z+tZ/gv8FT/NLwU9jj/WissdVle/IptAxH1V3OoZW476ce7a7179jmNtqyW0P+1Y+z0/0f2izGP1L6y9P9dtn2ZmVlML/ScHEu9rWHI3FhpbZVRR7/Ut9Vn+C/Q2Y3prh6G4bsuo13O23tHqAWHGawTWymvLg+lj4rrLK31Xs/mmWWepX+j9VbtDaMXo1WeCymsuD32srgtrrLRbi+m/6Gc3Jx6/Vq/o2RVifzXo3oocD62dVnquTSWm8XtZZkjKbW+6u3a39BTm1V05DcWhvp+jT+jr/wBNV6iF07rVraaWGLq9zWOrySXNbxWfRv8A6RjMa1/r/TtZU/8AS+l7Fr5WFj9Qwahl4tIzcmrIvx317KbBtdZXTX6jS1l+2yv08j7Qz9H/AOC2cnjYxuBpY7aWnc55mC2Nzi2se92ytjrfo/QR06o1BesLS+51tddlmY+0it1eQ2DY53pfa8bIo/Vr3+r7bt7N9dP6b9N/PLs8urEvvxem5OPXkZAbUwONRqrpYNrhdgurY65r3Pp/wl/6P/B+hT63rcN9WH15HUcV7GbQx/2l1orLjUanfq9wbVsq/pHoMs/Qfn3Vf4f01dfk2Y3W8XKwMlxY19lrrXBwc6S49RYbLNz312b7fs7/AOco+2fzfqW+rW1c9xVT0a11uNdhZFVx32UPy6jUXBga7ZjZDfTvd7La9/8AL3/zt3qLGycDONTsnDDsjFIDttZaMmlkTd9ow72MtsfXH+Brs9dnpW1Y9arH6y9Mrxxg0V34tmppdfSbq3vrd6jnvortdvfV6HoUvY+z9D+n9X8yrRwskZrX5Ndr8dxaGO9JjBW2+toZZdbksfXfZZiUh2/3/aGYtn6C7fT6iaYg/wAUGETrX2aP/9fPxsmpj6xVk4mJSxj3VU7yXGxj4+1OoDt/2229vq4v6/R6VXpfzfppV7epCmn0n5baat2ThNimoARXVdfdfkX/AGizc5/6e70v9PWs99xZjmpmQ5p9wtZVUwzHsc+7b6Ln79vsq32ILL76G2U2v/RZG3exr2tDtp3s9Sve/wB9dn+kd/1uxNrcjfpbXt0cjCt+xvf6dNDC11NDW5Fj3tudtOPlOtZ9q93ssr3+rR7/AOer9CpVMbIxsi8zSarGl/2eWE2M3EOfkuLy6jHZ6Tm+r7P5z9apu/nFYpy2U9Os9tFjcOy2x4skgC5rWNZbj7H7v0zrGVvbYy79K/0bP8Cs26y2gGjJtIzqaXY9Ne4em9jTNNJuoe/dkY1/r77d/perjfZ7f51KmzD5Y+TQF9VFhwLBZXRBa5rXS4ODnN9LbDvUq9f6bW/6RdZ0zG2uGfm5DaaHXZTnUhwxzdU71vs/oNr22eqzKdfd/O/0Ky7+a9/qYnSgOpdUpNDGtsYAGWNkgWOIa/Ip/Po9J2y5nq/pKtj7P56z9Fs35mT0zJqdSKrT0+v0GPcwuJryd/vqsfvrZba049dr9l9v2rLuv9D7N+itFUl3KcSm3Joxcu12U6hleaTewEFzW201OvZQKLLPQezbj0WY/wCi/T+rf6lWNUgZlbvQY6vIufeHOfaLLGnb6/qsOVt/7kejkf0eq30rafQ+0/p/WQugZlmY+/O9YU10ta12IzYGuFjK7sfC32fToqpqs+xf4Rlf7l1fqWtZj0Z3Uq6asmy7091zsV9W/wDSV7d7/W9T0KW2svf9p32+j/pPR9Sv0Ul0K83Fta1+Ra9lTSWiuwiXUvj1cvIqZ/OOfkb6Gfs/2WWf9cWTl20V0ZFbzcbsd/pvubUaw6uxzfS3tq3bbvc5zHfzlf8AwH+C08+89PxndYc8OurY6WhgLTXtH+DeaXX0fa/53Z/gaLf5+v0ljDBdm1X5BtP2jMbv6bjncNge11bXXOt+gz33V/Yfz97Lf6NZT6aKXA67az7e/FsE10BoFVewirTfbaNv6C3c/f8ApPoXfo8iy39LXYhjNyrMS0U1ei1r6newNhrmNGNQ1lO4e30P5/1a7fUs/S/8bo4fQsh1DqbwQc2kjcGssdWyv+jeymyp73/odnu/Rb60LqnSaMNrKsQuymUv2vhpa/1iQG2NY+11Vrdv+FZ/NWWf6G2vYK7dVebR9GrLrtzLa310yAXshtQsB20vP09z632W1en/AIav+bsWr0h7fVONnueLrH0vyamuLG3tY/bY59jfdvso9f8AWmfpP2h/weR6iji9Gyaem305FDnkWC31XFrWyCH5L27Lm+p6Vfsxq6rfUsyEushnTcdpxXDLourZkHNJcC9lpf8AZ7G1Os9SjfYz9O//ALS5v6O7+d/SCRlXp1KG7Vl42JW9mM2t1ey7Ebfbuax1D911Vl9FI9TEyfXtf6j2M+mq9P1dwL8XFqq32m99z6s4F1fp247Xusxsyh/s2v2VPusZ72V/pKLPR/RrGpy2Xsc5zRTaA31ba3CHNLfT9zGuc36Lv57+Zq/wv6VXq+otw6q/XcTQX7To47Ibtr9zv5t11D3ssxdvo2fpP56r9HWwTkD6tVNj6t9J6jj0XZOFQ28ZOygk2iu6lj9uS70tlldXr5f6L0rqLvXoor9T7J+nrWxVdW02DqeN9mdeX0Y7sp7n2tvI91uZ/wBqb/0OR6bOpdMs9B+H/Saq/wBEygWB9YsfHobi3i/GNJa19m43WVANqdTuY4O3YV7Kn3vtw6LPUx8q+v8A46eX1LAaC3IyMXIrA/VyH73e02WevkbRkstZkYzrPS+zV2WUWs9+JVf6ql6KDGx1uGH0NzgHOuLHtrLr2OFIZZTlip+Ptbm0b9/oer9r9P8AS/rK0OmWWU5Jym2G2uamBzBsLXBrvQyW/S3UWtrtxtvo/wCjv/mFkuZa3b1F2Y7NwLMgiyy+x9tdjGn1N1dzm13faManb6GSz9Y/Q2U5P6P9DVZwHY9rbxlCuupzHema2/p2VvdFuUGXMue6r87I2epjV22b6bPUSS//0OUsY5rPU2t3D6QawucAZ9jX1izZsb9L6bP+LUG5jTDX2OaP3trYEe4N3vc76P8AVVp7GztqyfUe1ossFjS6sgja51Dcecj1tP5i1Uj9nLY3uDSQ4hgeWkESW07mexjt3t2O/wC3FEJXvbDTYFtL3V7n79tjdztayydLbG/zra7K2OfZW91f6N/6XYqYZjZHUXN+3HJrLj7LnOLvQrO4usfW70rLW0s3VV03f4P/AEv6BErqxdAMlxaDtIAB512V+ptb/IcxVn4GE9pbVY0SJIeCzRp9211zX7fo/wCD/nE4EdyvhKhRb/ScY0Z783BFno4zPUur9Q+kXP3toZXkVD9J9odX+r0W0+tb/obqq1vWOyLM6vIzhTkW+obSHAtY1o3n0WvHp7KG7X5ePX/p8Or0v6Xvsq9CL8Ho9+aAXU0+u5+S98TbtbTUzaz3erjNZU9j67fV9V/6D/CvV2xnqtvZWw5B9GrHY24Mef0bD6bdj/a9+Z+r0eo6z1v0P87+l9NJmGzTIeWOv6fX9ppbdGQxmylz7rC17qMbG/R5FfoWtrfibvUzqbGf8EuioZ0ep9OVc5jK8q4VY723OFjnichra8n9Db6FFv6Z9dvo022+j+j/AJipAwOnWUuyHXs/R0tNbRfstY1zvTa+3Etrh9jvRb/SGVfznp3/AKP9YT4loxrq6rWziYbQ6w2OZY2uqouycRj3vLbPtGVVRZa/Z6f/ABT/ANMkpuH7W1lr8jNFmVVVYyy59W32V/zr2sxxk/pcvDZj/afR/msb9Yqq9X07FDqNGT6G3FBfYTtD3urDmhzX2NyBjl7X/qeyq2zHr9Su7Fqrsv8AVu9VHOSy4Hpoza6MqhproAOyu3HcftGL9kywWfaPo/ZMn0bav5z7NYuX+sOa9luNRZZGSysj7LjjeRfbD7mVN3foMfc6pv2f1P8AC/zf+DSU9Hdn5WHS/C6TXsvrYCMQBrTS0Mc66mz0v0DH2Wb668eux+zMs9S3Kv8ATyKFzF32ix2LXVjur6bVk111Mp9jLMmtjMlld9t7fp+pY9lH0PSp+0/q7PR/S6bC7GwH4+Va62oNAtftexsgfaLttO8tb6W79a3/AKO/Hqqtr9D0/SVS5rvtT8jpZurx6QL20V3bKhYA5zrXMf62O/8ASMa5jf8ADfpv6iSUzMk49LKQKb7xd6cPeWsA5fZY6r1L668PYz0bcf8Aw11H2f8AWP0Kzeq3OZiWs9Oq6nLc5m3axjnPdv8A1qhzHW2Vfom1/aaLXs9e5n2v1LrfUUqGPxyRlGtrrX2ONvtmsEF7nv3sZVtq3u9mz9Ru/Sf0xPg41mT1D7Lhst3NHpte94/Vxa37U/0m2t99j/p3ZD9n81Z6Po/oklNbpf1P6k/HZbjV1i4uc117ztLSxrLGBm536V9/qfQpb/xtn+BWTbZ1LHFjgTVQXGuY2ta6sy+nYG+nv9u7ZS59e9i6/L6lRQWX2G3ONIbsbRPotYa277Gj0yx2Jlvb6Xp0u/mqrrPfR+ltys7ql2T05xyxbX67HNym2tBikvbttpuvO38z9D+h35dn8z+kremmIJs6oIedyMq270r2PAyaCRX+aQ1xdYHV7dvp7X77P9H/ANu7Ev2pl/ZxRdkF+M4m1rRMNuPv3fm2Vu9R36b0PY9UXUBoMS5pJ2uI2hwB5bu/eVrHprOOHWNlw0Di0v8Aa1zBLa2/zm39I1+7/tz6FScAAKQ6uP1bMxrbbqbW24mUA/Jp3OsYXP21uyLg1rW477bavZkNoryqbfS9T9A/9Ps9J6v0QZuPkNovtrDi8Y4aPdYa7K20OZL7rMK/1v07Kseytltv6P8AV/TqXK4OG692Tdjj7O5jN1bBLmEPds2fnW+n7Xel9P8ASbN6liU7C2rKZZXUx4db6TWC0MEttLGu+l7v8HZ+j9n/AAaJCgX/2QA4QklNBCEAAAAAAFcAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAAUAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAMgAwADIAMQAAAAEAOEJJTQQGAAAAAAAHAAQBAQABAQD/4RVtaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA2LjAtYzAwNiA3OS4xNjQ2NDgsIDIwMjEvMDEvMTItMTU6NTI6MjkgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6SXB0YzR4bXBDb3JlPSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wQ29yZS8xLjAveG1sbnMvIiB4bWxuczpHZXR0eUltYWdlc0dJRlQ9Imh0dHA6Ly94bXAuZ2V0dHlpbWFnZXMuY29tL2dpZnQvMS4wLyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bXBSaWdodHM9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9yaWdodHMvIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmF1eD0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC9hdXgvIiB4bWxuczpleGlmRVg9Imh0dHA6Ly9jaXBhLmpwL2V4aWYvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtbG5zOnBsdXM9Imh0dHA6Ly9ucy51c2VwbHVzLm9yZy9sZGYveG1wLzEuMC8iIHBob3Rvc2hvcDpTb3VyY2U9IkUrIiBwaG90b3Nob3A6QXV0aG9yc1Bvc2l0aW9uPSJDb250cmlidXRvciIgcGhvdG9zaG9wOkNvcHlyaWdodEZsYWc9InRydWUiIHBob3Rvc2hvcDpDb3VudHJ5PSJTbG92ZW5pYSIgcGhvdG9zaG9wOkRhdGVDcmVhdGVkPSIyMDE3LTA1LTIxIiBwaG90b3Nob3A6Q3JlZGl0PSJHZXR0eSBJbWFnZXMiIHBob3Rvc2hvcDpUcmFuc21pc3Npb25SZWZlcmVuY2U9Ijc3NTE2NjY3MiIgcGhvdG9zaG9wOkhlYWRsaW5lPSJTZW5pb3IgV29tYW4gRW5qb3lpbmcgdGhlIGFtYXppbmcgbGFuZHNjYXBlIEhpZ2ggaW4gdGhlIE1vdW50YWlucyIgcGhvdG9zaG9wOlVSTD0iaHR0cHM6Ly93d3cuZ2V0dHlpbWFnZXMuY29tIiBwaG90b3Nob3A6SW5zdHJ1Y3Rpb25zPSJNb2RlbCBSZWxlYXNlZCAoTVIpICIgcGhvdG9zaG9wOkxlZ2FjeUlQVENEaWdlc3Q9IjdBQzFEODU1OTYxQTMyMDAzRkMzMzJBOEY1MkZDRThCIiBwaG90b3Nob3A6VXJnZW5jeT0iMSIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiBJcHRjNHhtcENvcmU6Q291bnRyeUNvZGU9IlNWTiIgR2V0dHlJbWFnZXNHSUZUOkRscmVmPSJUdzBhajFuazZ2emRRalJFQTYxTnJ3PT0iIEdldHR5SW1hZ2VzR0lGVDpJbWFnZVJhbms9IjEiIEdldHR5SW1hZ2VzR0lGVDpBc3NldElEPSIxMDUxNzU3MzY0IiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHhtcFJpZ2h0czpXZWJTdGF0ZW1lbnQ9Imh0dHBzOi8vd3d3LmdldHR5aW1hZ2VzLmNvbS9ldWxhP3V0bV9tZWRpdW09b3JnYW5pYyZhbXA7dXRtX3NvdXJjZT1nb29nbGUmYW1wO3V0bV9jYW1wYWlnbj1pcHRjdXJsIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBMaWdodHJvb20gNi44IChXaW5kb3dzKSIgeG1wOk1vZGlmeURhdGU9IjIwMjEtMDItMTlUMTc6Mzc6NDctMDU6MDAiIHhtcDpDcmVhdGVEYXRlPSIyMDE3LTA1LTIxVDA5OjAxOjUzIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIxLTAyLTE5VDE3OjM3OjQ3LTA1OjAwIiBhdXg6U2VyaWFsTnVtYmVyPSI1MDI4OTYyIiBhdXg6TGVuc0luZm89IjI0MC8xMCA3MDAvMTAgMjgvMTAgMjgvMTAiIGF1eDpMZW5zPSIyNC4wLTcwLjAgbW0gZi8yLjgiIGV4aWZFWDpMZW5zTW9kZWw9IjI0LjAtNzAuMCBtbSBmLzIuOCIgeG1wTU06RG9jdW1lbnRJRD0iNjcwODhGNTgzRkMxRjVGMTA5QzZFRDhEQTVBMEEyMUYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MmI1NThjNzgtOWQ3Ny1iYTQwLTgyZjEtYzdiNDAxZjdkMDVkIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9IjY3MDg4RjU4M0ZDMUY1RjEwOUM2RUQ4REE1QTBBMjFGIj4gPHBob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPHJkZjpCYWc+IDxyZGY6bGk+NjcwODhGNTgzRkMxRjVGMTA5QzZFRDhEQTVBMEEyMUY8L3JkZjpsaT4gPC9yZGY6QmFnPiA8L3Bob3Rvc2hvcDpEb2N1bWVudEFuY2VzdG9ycz4gPGRjOnRpdGxlPiA8cmRmOkFsdD4gPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij4xMDUxNzU3MzY0PC9yZGY6bGk+IDwvcmRmOkFsdD4gPC9kYzp0aXRsZT4gPGRjOmNyZWF0b3I+IDxyZGY6U2VxPiA8cmRmOmxpPkFsZW5hUGF1bHVzPC9yZGY6bGk+IDwvcmRmOlNlcT4gPC9kYzpjcmVhdG9yPiA8ZGM6ZGVzY3JpcHRpb24+IDxyZGY6QWx0PiA8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPlNlbmlvciB3b21hbiBpbiB0aGUgbW91bnRhaW5zIGxvb2tpbmcgYXQgdGhlIHZpZXcsIFNsb3ZlbmlhLCBFdXJvcGUuIEFsbCBsb2dvcyByZW1vdmVkLiBOSUtPTiBEM1gsIDI0LjAtNzAuMCBtbSBmLzIuOC48L3JkZjpsaT4gPC9yZGY6QWx0PiA8L2RjOmRlc2NyaXB0aW9uPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo1NDM4MjRhYy00ZDU4LTNmNDYtYTQ3Yi1iYmMzNGFjMzU5YzciIHN0RXZ0OndoZW49IjIwMjEtMDItMTlUMTY6NDk6MjgtMDU6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMS4yIChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MmI1NThjNzgtOWQ3Ny1iYTQwLTgyZjEtYzdiNDAxZjdkMDVkIiBzdEV2dDp3aGVuPSIyMDIxLTAyLTE5VDE3OjM3OjQ3LTA1OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMiAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDxwbHVzOkxpY2Vuc29yPiA8cmRmOlNlcT4gPHJkZjpsaSBwbHVzOkxpY2Vuc29yVVJMPSJodHRwczovL3d3dy5nZXR0eWltYWdlcy5jb20vZGV0YWlsLzEwNTE3NTczNjQ/dXRtX21lZGl1bT1vcmdhbmljJmFtcDt1dG1fc291cmNlPWdvb2dsZSZhbXA7dXRtX2NhbXBhaWduPWlwdGN1cmwiLz4gPC9yZGY6U2VxPiA8L3BsdXM6TGljZW5zb3I+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg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\"","import React from 'react';\r\nimport { Container, Row, Col, Spinner } from 'react-bootstrap';\r\nimport { useSelector } from 'react-redux';\r\nimport { loadingSelector } from './loadingSelector';\r\nimport { Section } from './section';\r\nimport { getCurrentProgram } from '../programs';\r\nimport { loadSectionData } from './loadSectionData';\r\nimport { ErrorBoundry } from '../../shared';\r\nimport { PointsCompleted } from './pointsCompleted';\r\nimport './earnPoints.scss';\r\n\r\nexport const EarnPoints = (props) => {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const ipoid = urlParams.get('ipoid');\r\n const loading = useSelector((state) => loadingSelector(state));\r\n const {\r\n sections,\r\n incentivePrograms,\r\n incentiveRules,\r\n incentiveButtonLinks,\r\n incentiveLinkedRules,\r\n memberIncentiveScores\r\n } = useSelector((state) => state);\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n if (!loading) {\r\n const activeProgram = getCurrentProgram(incentivePrograms.list, ipoid);\r\n const incentiveProgramId = activeProgram.incentiveProgramId;\r\n const incentiveProgramOrgId = activeProgram.incentiveProgramOrganizationId;\r\n const sectionData = loadSectionData(\r\n sections,\r\n memberIncentiveScores,\r\n incentiveProgramId,\r\n incentiveRules,\r\n incentiveButtonLinks,\r\n incentiveLinkedRules,\r\n incentiveProgramOrgId\r\n );\r\n\r\n const sectionsList = sectionData.sectionsList;\r\n\r\n if (sectionsList[0] && sectionsList[0].rules.length == 0) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n
\r\n {Object.keys(sectionsList).map((key) => (\r\n
\r\n {sectionsList[key].rules.length > 0 && (\r\n \r\n

{sectionsList[key].sectionName}

\r\n \r\n \r\n Activity\r\n Points\r\n \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 ;\r\n};\r\n","export const LOAD_MEMBERSCOREDETAILS_SUCCESS = 'LOAD_MEMBERSCOREDETAILS_SUCCESS';\r\nexport const LOAD_MEMBERSCOREDETAILS_FAILED = 'LOAD_MEMBERSCOREDETAILS_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n byIpoid: {\r\n byRuleId: new Map()\r\n }\r\n};\r\n\r\nexport function memberScoreDetailsReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_MEMBERSCOREDETAILS_SUCCESS:\r\n return {\r\n ...state,\r\n byIpoid: { [action.data.ipoid]: { [action.data.ruleId]: action.data.memberScoreDetails } },\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_MEMBERSCOREDETAILS_FAILED:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport * as types from './actionTypes';\r\n\r\nconst loadMemberScoreDetailsSuccess = (ipoid, ruleId, memberScoreDetails) => {\r\n return {\r\n type: types.LOAD_MEMBERSCOREDETAILS_SUCCESS,\r\n data: { ipoid, ruleId, memberScoreDetails }\r\n };\r\n};\r\n\r\nconst loadMemberScoreDetailsFailed = () => {\r\n return {\r\n type: types.LOAD_MEMBERSCOREDETAILS_FAILED\r\n };\r\n};\r\n\r\nexport const loadMemberScoreDetails = (ipoid, ruleId, logError) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n\r\n const apiResult = await client.get(\r\n `member/incentiveprogram/incentiveprogramorganization/${ipoid}/rule/${ruleId}/score`\r\n );\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n\r\n resolve(dispatch(loadMemberScoreDetailsSuccess(ipoid, ruleId, apiResult.data.result)));\r\n } catch (error) {\r\n logError('incentives/memberScoreDetails/actions', 'loadMemberScoreDetails', error);\r\n resolve(dispatch(loadMemberScoreDetailsFailed()));\r\n }\r\n });\r\n };\r\n};\r\n","import React, { useState, useContext } from 'react';\r\nimport {\r\n Container,\r\n Col,\r\n Row,\r\n Accordion,\r\n Button,\r\n Spinner,\r\n Alert,\r\n Pagination,\r\n AccordionContext,\r\n useAccordionToggle\r\n} from 'react-bootstrap';\r\nimport { ToolTip } from './tooltip';\r\nimport './pointsEarned.scss';\r\nimport { logError } from '../../logging';\r\nimport { loadMemberScoreDetails } from '../memberScoreDetails';\r\nimport { getAppUrl, AppConfiguration } from '../../configuration';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { loadPointsEarned } from './loadPointsEarned';\r\nimport { getAntiForgeryToken } from '../../antiforgery';\r\nimport { ErrorBoundry } from '../../shared';\r\nimport _ from 'lodash';\r\nimport moment from 'moment';\r\n\r\nexport const PointsEarned = (props) => {\r\n const [currentPage, setCurrentPage] = useState(1);\r\n const [filterDate, setFilterDate] = useState(0);\r\n const [ruleId, setRuleId] = useState('');\r\n const loading = useSelector((state) => loadingSelector(state));\r\n\r\n const { incentiveRules, incentiveButtonLinks, memberIncentiveScores, memberScoreDetails } = useSelector(\r\n (state) => state\r\n );\r\n\r\n const dispatch = useDispatch();\r\n const scoreRollups = loadPointsEarned(\r\n props.activeProgram,\r\n incentiveRules,\r\n incentiveButtonLinks,\r\n memberIncentiveScores\r\n );\r\n\r\n if (loading) {\r\n return ;\r\n }\r\n\r\n if (scoreRollups.length < 1) {\r\n return (\r\n \r\n You have not earned any points. Click on How to Earn to get started.\r\n \r\n );\r\n }\r\n\r\n const pageSize = 10;\r\n const pastDays = moment.utc().tz('America/New_York').subtract(filterDate, 'days');\r\n\r\n const memScoreDetails =\r\n memberScoreDetails.byIpoid[props.ipoid] && memberScoreDetails.byIpoid[props.ipoid][ruleId] && ruleId != ''\r\n ? memberScoreDetails.byIpoid[props.ipoid][ruleId]\r\n : [];\r\n const rulesCount = memScoreDetails.filter((rules) => {\r\n if (moment(rules.eventDate).utc().tz('America/New_York').isAfter(pastDays)) {\r\n return rules;\r\n }\r\n if (filterDate < 1) {\r\n return rules;\r\n }\r\n }).length;\r\n const pagination = getPagination(rulesCount, pageSize, currentPage, setCurrentPage);\r\n const paginationData = getPaginationData(memScoreDetails, currentPage, pageSize, filterDate);\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n Activity\r\n \r\n \r\n Outcome\r\n \r\n \r\n Points\r\n \r\n \r\n Date\r\n \r\n \r\n \r\n {/* show all points earned data */}\r\n {scoreRollups.map((score, index) => {\r\n //show button links\r\n const postUrl = `${AppConfiguration.getSiteRootUrl()}${'Home'}/${'TobaccoAffidavit'}`;\r\n const tobaccoAffidavitUrl = `${AppConfiguration.getSiteRootUrl()}${'Wellness'}/${'Secure/TobaccoOath/Default.aspx'}`;\r\n const verificationTokenName = '__RequestVerificationToken';\r\n const token = getAntiForgeryToken();\r\n const sectionButton =\r\n score.buttonName != '' ? (\r\n \r\n {score.buttonName}\r\n \r\n ) : (\r\n ''\r\n );\r\n let form = null;\r\n /*Show accordion and rule details */\r\n if (score.showViewDetails) {\r\n let ruleId = score.incentiveRuleId;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {score.description != '' ? (\r\n \r\n ) : (\r\n score.ruleName\r\n )}\r\n \r\n \r\n {score.value}\r\n \r\n \r\n {score.points === 0 && score.maxPoints === 0 ? 'Complete' : score.points}\r\n {score.points != 0 && score.maxPoints != 0 ? (\r\n {`Max of ${score.maxPoints}`}\r\n ) : null}\r\n \r\n \r\n various\r\n \r\n {/*Dispatch redux action to fetch rollup rules*/}\r\n \r\n {\r\n dispatch(loadMemberScoreDetails(props.ipoid, ruleId, logError));\r\n setCurrentPage(1);\r\n setFilterDate(0);\r\n setRuleId(ruleId.toString());\r\n }}>\r\n Click me!\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n setFilterDate(7);\r\n setCurrentPage(1);\r\n }}\r\n className=\"date-range-link\">\r\n Last Week ➤\r\n \r\n \r\n \r\n {\r\n setFilterDate(30);\r\n setCurrentPage(1);\r\n }}\r\n className=\"date-range-link\">\r\n Last 30 Days ➤\r\n \r\n \r\n \r\n {\r\n setFilterDate(60);\r\n setCurrentPage(1);\r\n }}\r\n className=\"date-range-link\">\r\n Last 60 Days ➤\r\n \r\n \r\n \r\n {\r\n setFilterDate(90);\r\n setCurrentPage(1);\r\n }}\r\n className=\"date-range-link\">\r\n Last 90 Days ➤\r\n \r\n \r\n \r\n {\r\n setFilterDate(0);\r\n setCurrentPage(1);\r\n }}\r\n className=\"date-range-link\">\r\n All Available ➤\r\n \r\n \r\n \r\n \r\n Activity\r\n Date\r\n Points Earned\r\n \r\n {/*Get rollup rules for pagination*/}\r\n {memberScoreDetails.loading ? (\r\n \r\n ) : (\r\n paginationData.map((rules, key) => {\r\n return (\r\n \r\n {rules.incentiveRuleName}\r\n {moment(rules.eventDate).format('MM/DD/YYYY')}\r\n \r\n {rules.points}\r\n \r\n \r\n );\r\n })\r\n )}\r\n\r\n {pagination}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n return (\r\n \r\n \r\n {score.description != '' ? (\r\n \r\n ) : (\r\n score.ruleName\r\n )}\r\n \r\n \r\n {score.value}\r\n \r\n \r\n {score.points < 1 && score.maxPoints < 1 ? 'Complete' : score.points}\r\n {score.points > 0 && score.maxPoints > 0 ? (\r\n {`Max of ${score.maxPoints}`}\r\n ) : null}\r\n \r\n \r\n {moment(score.lastActivityDate).format('MM/DD/YYYY')}\r\n \r\n {/*Check to see if button is Tobacco Affidavit*/}\r\n \r\n {score.buttonUrl.toLowerCase().includes('tobaccoaffidavit') ? (\r\n {\r\n form = ref;\r\n }}>\r\n \r\n \r\n {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n form.submit();\r\n }}\r\n href=\"\"\r\n className=\"btn btn-primary\">\r\n {score.buttonName}\r\n \r\n \r\n ) : (\r\n sectionButton\r\n )}\r\n \r\n \r\n );\r\n })}\r\n\r\n \r\n \r\n Total\r\n \r\n \r\n \r\n {props.headerDetails.pointsEarned}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nconst loadingSelector = (state) => {\r\n return (\r\n state.incentiveRules.loading ||\r\n state.incentiveButtonLinks.loading ||\r\n state.incentiveLinkedRules.loading ||\r\n state.memberIncentiveScores.loading\r\n );\r\n};\r\n\r\n//Render pagination based on number of member score details\r\n\r\nconst getPagination = (rulesCount, pageSize, currentPage, setCurrentPage) => {\r\n const pageCount = Math.ceil(rulesCount / pageSize);\r\n if (pageCount === 1) return null;\r\n\r\n const pages = _.range(1, pageCount + 1);\r\n return (\r\n \r\n {pages.map((page) => (\r\n setCurrentPage(page)}\r\n className={page === currentPage ? 'active' : 'page-item'}>\r\n {page}\r\n \r\n ))}\r\n \r\n );\r\n};\r\n//Render member score details list based on number of list\r\nconst getPaginationData = (memScoreDetails, currentPage, pageSize, filterDate) => {\r\n let pastDays = moment.utc().tz('America/New_York').subtract(filterDate, 'days');\r\n\r\n let filterMemScoreDetails = memScoreDetails.filter((rules) => {\r\n if (moment(rules.eventDate).utc().tz('America/New_York').isAfter(pastDays)) {\r\n return rules;\r\n }\r\n if (filterDate < 1) {\r\n return rules;\r\n }\r\n });\r\n\r\n const sortMemScoreDetails = filterMemScoreDetails.sort().reverse();\r\n const initialPage = (currentPage - 1) * pageSize;\r\n return sortMemScoreDetails.slice(initialPage, initialPage + 10);\r\n};\r\n//Custom accordion toggle with expansion awareness\r\nconst ContextAwareToggle = ({ eventKey, callback }) => {\r\n const currentEventKey = useContext(AccordionContext);\r\n const handleClick = useAccordionToggle(eventKey, () => callback && callback(eventKey));\r\n const isCurrentEventKey = currentEventKey === eventKey;\r\n\r\n return (\r\n \r\n );\r\n};\r\n","export const loadPointsEarned = (activeProgram, incentiveRules, incentiveButtonLinks, memberIncentiveScores) => {\r\n const incentiveProgramOrgId = activeProgram.incentiveProgramOrganizationId;\r\n const incentiveProgramId = activeProgram.incentiveProgramId;\r\n const IN_TobAfft = 'IN_TobAfft';\r\n const IN_Tobacco = 'IN_Tobacco';\r\n const IN_Cotinin = 'IN_Cotinin';\r\n const IN_NoSpous = 'IN_NoSpous';\r\n const buttonLinkLookUpCodes = ['IT_BioMYoY', 'IT_HRA', 'IT_Biometr'];\r\n const viewDetailsLookUpCodes = ['IT_Chaleng', 'IT_PerChal', 'IT_Commit', 'IT_ECommit', 'IT_OnlineW'];\r\n\r\n const incentiveRuleByProgramId = incentiveRules.byProgramId[incentiveProgramId];\r\n\r\n let incentiveRuleDetails = incentiveRuleByProgramId.reduce((incentiveRuleDetails, rule) => {\r\n incentiveRuleDetails[rule.incentiveRuleId] = rule;\r\n return incentiveRuleDetails;\r\n }, {});\r\n\r\n const buttonLinksMap = incentiveButtonLinks.byIpoid[incentiveProgramOrgId].reduce((buttonLinksMap, link) => {\r\n buttonLinksMap[link.incentiveRuleId] = {\r\n url: link.url,\r\n buttonName: link.buttonName\r\n };\r\n return buttonLinksMap;\r\n }, {});\r\n\r\n let scoreDetails = [];\r\n memberIncentiveScores.byIpoid[incentiveProgramOrgId].forEach((score) => {\r\n var outcome;\r\n var hideIncentiveRule = false;\r\n switch (score.incentiveCode) {\r\n case IN_TobAfft:\r\n outcome = '';\r\n break;\r\n case IN_Tobacco:\r\n if (score.value >= 1) outcome = score.valueText;\r\n else hideIncentiveRule = true;\r\n break;\r\n case IN_Cotinin:\r\n if (score.value == 0) outcome = score.valueText;\r\n else hideIncentiveRule = true;\r\n break;\r\n case IN_NoSpous:\r\n hideIncentiveRule = true;\r\n default:\r\n outcome = score.value;\r\n }\r\n if (!hideIncentiveRule) {\r\n let incentiveScore = {\r\n incentiveRuleId: score.incentiveRuleId,\r\n points: score.rollupPoints,\r\n value: outcome,\r\n ruleName: '',\r\n description: '',\r\n buttonUrl: '',\r\n buttonName: '',\r\n lastActivityDate: score.eventDate,\r\n count: score.count,\r\n maxPoints: 0,\r\n incentiveTypeLookupCode: '',\r\n showViewDetails: score.count > 1\r\n };\r\n let incentiveRule = incentiveRuleDetails[score.incentiveRuleId];\r\n if (incentiveRule) {\r\n incentiveScore.maxPoints = incentiveRule.maxPoints;\r\n incentiveScore.ruleName = incentiveRule.name;\r\n incentiveScore.description = incentiveRule.description;\r\n incentiveScore.incentiveTypeLookupCode = incentiveRule.incentiveTypeLookupCode;\r\n if (!incentiveScore.showViewDetails) {\r\n incentiveScore.showViewDetails = viewDetailsLookUpCodes.includes(incentiveRule.incentiveTypeLookupCode);\r\n }\r\n }\r\n let buttonLink = buttonLinksMap[score.incentiveRuleId];\r\n\r\n if (buttonLink && buttonLinkLookUpCodes.includes(incentiveRule.incentiveTypeLookupCode)) {\r\n (incentiveScore.buttonUrl = buttonLink.url), (incentiveScore.buttonName = buttonLink.buttonName);\r\n }\r\n\r\n if (incentiveRule.incentiveTypeLookupCode == 'IT_ChalTrk' && score.rollupPoints == 0 && !incentiveRule.required)\r\n hideIncentiveRule = true;\r\n\r\n if (!hideIncentiveRule) scoreDetails.push(incentiveScore);\r\n }\r\n });\r\n return scoreDetails;\r\n};\r\n","import React from 'react';\r\nimport { Container, Row, Col, Badge } from 'react-bootstrap';\r\nimport { ErrorBoundry } from '../../shared';\r\nimport SanitizedHTML from 'react-sanitized-html';\r\n\r\nexport const ProgramSummary = (props) => {\r\n let programSummary = props.activeProgram.incentiveSummaryOverride;\r\n let linkData = props.documentLinks;\r\n\r\n const docLinkGenerator = (\r\n <>\r\n
\r\n

Important Links

\r\n
\r\n \r\n {linkData.map((eachLink, index) => (\r\n \r\n \r\n {eachLink.urlOverlayText}\r\n \r\n \r\n ))}\r\n \r\n \r\n );\r\n //Check to see if any links exist....hide link section if they do not\r\n let howManyLinks = linkData.length;\r\n const linksExist = howManyLinks > 0;\r\n\r\n return (\r\n \r\n
\r\n {linksExist ? (\r\n
\r\n {docLinkGenerator}\r\n
\r\n ) : null}\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { CardGroup, Card, Dropdown } from 'react-bootstrap';\r\nimport { ErrorBoundry } from '../../shared';\r\nimport moment from 'moment';\r\nimport { AppConfiguration } from '../../configuration';\r\n\r\nexport const Header = (props) => {\r\n // const debugUrl = `http://localhost:3000/mypoints`;\r\n const mypointsUrl = `${AppConfiguration.getSiteRootUrl()}Wellbeing/MyPointsProgram`;\r\n\r\n let otherPrograms = props.visiblePrograms.filter((item) => {\r\n return item.incentiveProgramId !== props.activeProgram.incentiveProgramId;\r\n });\r\n\r\n //Create an array consisting of element for each level for the graphic\r\n let levelArray = [...Array(props.headerDetails.numberOfLevels).keys()];\r\n\r\n const wellnessLogoNew = props.activeProgram.imageURL ? (\r\n \"logo\"\r\n ) : null;\r\n\r\n function LevelInfo() {\r\n const tierGraphic = (\r\n 1\r\n ? 'levelIndicator ' + 'row'\r\n : 'levelIndicator ' + 'row ' + 'singleLevelProgram'\r\n }>\r\n {levelArray.map((eachLevel, index) => (\r\n
\r\n \r\n {index + 1}\r\n \r\n
\r\n ))}\r\n \r\n );\r\n const programSumm = props.activeProgram.incentiveSummaryOverride;\r\n\r\n const progSumScript = programSumm.replace(/ /g, ' ').replace(/(<([^>]+)>)/gi, '');\r\n var trimmedprogSumScript = progSumScript.substring(0, 100) + '...';\r\n return (\r\n <>\r\n \r\n \r\n {/* Check if all levels are complete */}\r\n {props.headerDetails.allLevelsComplete ? (\r\n {props.headerDetails.highestTierAchievedMessage}\r\n ) : null}\r\n {/* Single Level (non-tiered) Program */}\r\n {props.headerDetails.numberOfLevels === 1 && !props.headerDetails.allLevelsComplete ? (\r\n <>\r\n \r\n {`Earn ${props.headerDetails.pointsToNextLevel} points to complete the program.`}\r\n
\r\n {props.headerDetails.totalAchievedTiers === 0 && props.headerDetails.currentLevel === 1 ? (\r\n {props.headerDetails.currentTierMessage} \r\n ) : (\r\n {props.headerDetails.highestTierAchievedMessage}\r\n )}\r\n
\r\n \r\n ) : null}\r\n {/* // Otherwise, we know it's a multi level program */}\r\n {props.headerDetails.numberOfLevels > 1 && !props.headerDetails.allLevelsComplete ? (\r\n <>\r\n You are currently on\r\n \r\n {props.headerDetails.tierName}\r\n {`Earn ${props.headerDetails.pointsToNextLevel} points to achieve this level.`}
\r\n {props.headerDetails.totalAchievedTiers === 0 && props.headerDetails.currentLevel === 1 ? (\r\n {props.headerDetails.currentTierMessage} \r\n ) : (\r\n {props.headerDetails.highestTierAchievedMessage}\r\n )}\r\n
\r\n
\r\n
{tierGraphic}
\r\n
\r\n \r\n ) : null}\r\n
\r\n
\r\n \r\n \r\n
\r\n Program Dates:\r\n \r\n {moment(props.activeProgram.startDate).format('MM/DD/YYYY') +\r\n ' - ' +\r\n moment(props.activeProgram.endDate).format('MM/DD/YYYY')}\r\n \r\n
\r\n {/* {trimmedprogSumScript} */}\r\n {otherPrograms.length > 0 ? (\r\n \r\n \r\n View Other Programs\r\n \r\n \r\n {otherPrograms.map((item) => (\r\n \r\n View {item.incentiveProgramDisplayName}\r\n \r\n ))}\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 (\r\n \r\n
\r\n

\r\n {wellnessLogoNew}\r\n {props.activeProgram.incentiveProgramDisplayName}\r\n

\r\n
\r\n
\r\n {/* Points circle */}\r\n
\r\n
\r\n

My Points

\r\n
\r\n
\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.headerDetails.pointsEarned}
\r\n
POINTS EARNED
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {/* End Points Circle */}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Tabs, Tab, Spinner, Alert } from 'react-bootstrap';\r\nimport { EarnPoints } from './earnPoints';\r\nimport { loadHeaderDetails } from './loadHeaderDetails';\r\nimport { useSelector } from 'react-redux';\r\nimport { loadingSelector } from './loadingSelector';\r\nimport { PointsEarned } from './pointsEarned';\r\nimport { ProgramSummary } from './programSummary';\r\nimport { Header } from './header';\r\nimport { PointsCompleted } from './pointsCompleted';\r\nimport './myPoints.css';\r\nimport { getCurrentProgram } from '../programs';\r\nimport moment from 'moment';\r\n\r\nexport const MyPoints = () => {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const ipoid = urlParams.get('ipoid');\r\n const loading = useSelector((state) => loadingSelector(state));\r\n const {\r\n sections,\r\n incentivePrograms,\r\n incentiveRules,\r\n incentiveButtonLinks,\r\n incentiveLinkedRules,\r\n tierDetails,\r\n memberTierDetails,\r\n memberIncentiveScores,\r\n documentLinks\r\n } = useSelector((state) => state);\r\n\r\n if (!incentivePrograms.loading) {\r\n const visiblePrograms = getVisiblePrograms(incentivePrograms.list);\r\n const activeProgram = getCurrentProgram(incentivePrograms.list, ipoid);\r\n\r\n if (!activeProgram) {\r\n return ;\r\n }\r\n const incentiveProgramOrgId = activeProgram.incentiveProgramOrganizationId;\r\n\r\n if (!loading && !tierDetails.loading && !memberTierDetails.loading && !documentLinks.loading) {\r\n const headerDetails = loadHeaderDetails(tierDetails, memberTierDetails, activeProgram);\r\n const showEarnPoints = moment.utc().tz('America/New_York').isSameOrBefore(activeProgram.scroingEndDate, 'day');\r\n const documentLinksByIpoid = documentLinks.byIpoid[incentiveProgramOrgId];\r\n return (\r\n
\r\n
\r\n\r\n {getErrorMessage(\r\n sections,\r\n incentivePrograms,\r\n incentiveRules,\r\n incentiveButtonLinks,\r\n incentiveLinkedRules,\r\n tierDetails,\r\n memberTierDetails,\r\n memberIncentiveScores,\r\n documentLinks\r\n )}\r\n \r\n {showEarnPoints ? (\r\n \r\n \r\n \r\n ) : (\r\n ''\r\n )}\r\n \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 ;\r\n};\r\n\r\nconst getVisiblePrograms = (programList) => {\r\n return programList.filter(\r\n (program) =>\r\n moment.utc().tz('America/New_York').isSameOrAfter(program.visibleStartDate, 'day') &&\r\n moment.utc().tz('America/New_York').isSameOrBefore(program.visibleEndDate, 'day')\r\n );\r\n};\r\n\r\nconst getErrorMessage = (\r\n sections,\r\n incentivePrograms,\r\n incentiveRules,\r\n incentiveButtonLinks,\r\n incentiveLinkedRules,\r\n tierDetails,\r\n memberTierDetails,\r\n memberIncentiveScores,\r\n documentLinks\r\n) => {\r\n if (\r\n sections.error ||\r\n incentivePrograms.error ||\r\n incentiveRules.error ||\r\n incentiveButtonLinks.error ||\r\n incentiveLinkedRules.error ||\r\n tierDetails.error ||\r\n memberTierDetails.error ||\r\n memberIncentiveScores.error ||\r\n documentLinks.error\r\n ) {\r\n return (\r\n \r\n Error fetching incentive list. Please refresh the page or try again later. \r\n \r\n );\r\n }\r\n};\r\n","export const loadHeaderDetails = (tierDetails, memberTierDetails, activeProgram) => {\r\n const tiersByProgramId = tierDetails.byProgramId[activeProgram.incentiveProgramId];\r\n const memberTiersByIpoid = memberTierDetails.byIpoid[activeProgram.incentiveProgramOrganizationId];\r\n memberTiersByIpoid.sort((a, b) => (a.precedenceOrder > b.precedenceOrder ? 1 : -1));\r\n let highestTierAchieved = null;\r\n let numberOfLevels = memberTiersByIpoid.length;\r\n // Assign the last tier as current member tier (default)\r\n let memberTier = numberOfLevels >= 1 ? memberTiersByIpoid[numberOfLevels - 1] : null;\r\n let totalAchievedTiers = 0;\r\n\r\n for (var i = 0; i < numberOfLevels; i++) {\r\n if (memberTiersByIpoid[i].achieved) {\r\n highestTierAchieved = memberTiersByIpoid[i];\r\n totalAchievedTiers = totalAchievedTiers + 1;\r\n } else {\r\n memberTier = memberTiersByIpoid[i];\r\n break;\r\n }\r\n }\r\n let currentTier =\r\n memberTier !== null\r\n ? tiersByProgramId.filter((tier) => tier.incentiveTierId === memberTier.incentiveTierId)[0]\r\n : null;\r\n\r\n let highestTierAchievedMessage =\r\n highestTierAchieved !== null\r\n ? tiersByProgramId.filter((tier) => tier.incentiveTierId === highestTierAchieved.incentiveTierId)[0].achievedMsg\r\n : null;\r\n\r\n return {\r\n numberOfLevels: numberOfLevels,\r\n currentLevel: currentTier !== null ? currentTier.precedenceOrder : null,\r\n tierName: currentTier !== null ? currentTier.name : null,\r\n pointsToNextLevel: currentTier !== null ? currentTier.pointsForGoalMin : null,\r\n pointsEarned: memberTier !== null ? memberTier.earnedPoints : null,\r\n currentTierMessage: currentTier !== null ? currentTier.notAchievedMsg : null,\r\n highestTierAchievedMessage: highestTierAchievedMessage,\r\n totalAchievedTiers: totalAchievedTiers,\r\n allLevelsComplete: totalAchievedTiers === numberOfLevels\r\n };\r\n};\r\n","export default \"data:image/png;base64,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\"","import React from 'react';\r\n\r\nexport const IncentiveWidgetTest = (props) => {\r\n return (\r\n
\r\n
\r\n

My Points

\r\n
\r\n
\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.pointsEarnedTest}
\r\n
POINTS EARNED
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Card, Col, Row, Tooltip, OverlayTrigger } from 'react-bootstrap';\r\n// import { ToolTip } from './../tooltip';\r\n\r\nexport const LevelCardTest = (props) => {\r\n return (\r\n \r\n \r\n You are currently on\r\n\r\n \r\n {props.currLevel}\r\n {/* Earn {props.ptsToNextLevel} more points to achieve this level.
*/}\r\n {/*
*/}\r\n Earn 400 total points to achieve Level 2.\r\n
\r\n \r\n \r\n 200 Points}>\r\n 1\r\n \r\n \r\n \r\n 400 Points}>\r\n 2\r\n \r\n \r\n \r\n 600 Points}>\r\n 3\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Card, Dropdown } from 'react-bootstrap';\r\n\r\nexport const ProgramInfoCardTest = (props) => {\r\n return (\r\n \r\n \r\n
\r\n Program Dates:\r\n {props.programDates}\r\n
\r\n\r\n \r\n Health Advocate medical-enrolled employees can earn the 2021 Wellness Premium Discount by completing\r\n well-being activities for points.\r\n {/* */}\r\n \r\n \r\n \r\n View Other Programs\r\n \r\n \r\n props.setScenario(props.whichScenario)}>\r\n {props.programDropdownText}\r\n \r\n {/* props.setScenario('ScenarioThree')}>\r\n Wellness Matters 2019\r\n */}\r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { CardGroup } from 'react-bootstrap';\r\nimport WellnessLogo from './../images/wellnessLogo.png';\r\nimport { IncentiveWidgetTest } from './incentiveWidgetTest.jsx';\r\nimport { LevelCardTest } from './levelCardTest';\r\nimport { ProgramInfoCardTest } from './programInfoCardTest';\r\n\r\nexport const HeaderTest = (props) => {\r\n return (\r\n
\r\n {props.currentScenario === 'ScenarioOne' ? (\r\n

\r\n \"logo\"\r\n Wellness Matters 2020\r\n

\r\n ) : null}\r\n {props.currentScenario === 'ScenarioTwo' ? (\r\n

\r\n \"logo\"\r\n Wellness Matters 2020\r\n

\r\n ) : null}\r\n {props.currentScenario === 'ScenarioThree' ? (\r\n

\r\n \"logo\"\r\n Wellness Matters 2019\r\n

\r\n ) : null}\r\n
\r\n
\r\n {props.currentScenario === 'ScenarioOne' ? : null}\r\n {props.currentScenario === 'ScenarioTwo' ? : null}\r\n {props.currentScenario === 'ScenarioThree' ? : null}\r\n \r\n {props.currentScenario === 'ScenarioOne' ? : null}\r\n {/* {props.currentScenario === 'ScenarioTwo' ? (\r\n \r\n ) : null}\r\n {props.currentScenario === 'ScenarioThree' ? (\r\n \r\n ) : null} */}\r\n {/* Program Info Card */}\r\n {props.currentScenario === 'ScenarioOne' ? (\r\n \r\n ) : null}\r\n {props.currentScenario === 'ScenarioTwo' ? (\r\n \r\n ) : null}\r\n {props.currentScenario === 'ScenarioThree' ? (\r\n \r\n ) : null}\r\n \r\n {/*
It is: {props.currentScenario}
\r\n {props.currentScenario === 'ScenarioOne' ?
ONE HEAD
: null}\r\n {props.currentScenario === 'ScenarioTwo' ?
TWO HEAD
: null}\r\n {props.currentScenario === 'ScenarioThree' ? (\r\n
THREE HEAD
\r\n ) : null} */}\r\n
\r\n
\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { Modal, Button } from 'react-bootstrap';\r\n\r\n// export const ModalDialogTest = props => {\r\n// const [show, setShow] = useState(false);\r\n// return (\r\n// \r\n// \r\n// Message\r\n// \r\n\r\n// \r\n//

\r\n// This page is intended for testing only. Some elements not necessary\r\n// for this purpose have been deactivated. In the final version, this\r\n// link will take you to {props.TestLinkDestination}.\r\n//

\r\n//
\r\n\r\n// \r\n// \r\n// {/* */}\r\n// \r\n//
\r\n// );\r\n// };\r\n\r\nexport const ModalDialogTest = (props) => {\r\n const [show, setShow] = useState(false);\r\n\r\n const handleClose = () => setShow(false);\r\n const handleShow = () => setShow(true);\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n \r\n Message\r\n \r\n \r\n This page is intended for testing only. Some elements not necessary for this purpose have been deactivated. In\r\n the final version, this link will take you to {props.TestLinkDestination}.\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { Accordion, Button, Container, Row, Col, Badge } from 'react-bootstrap';\r\nimport { ModalDialogTest } from './modalTemplate.jsx';\r\n//import FinishLogo from './../images/finishLine.png';\r\n\r\nexport const CombinedTabTest = (props) => {\r\n const colHeaderOne = 'Activity';\r\n const colHeaderTwo = 'Point Value';\r\n const colHeaderThree = 'Points Earned';\r\n const colHeaderFour = 'Date Completed';\r\n return (\r\n
\r\n \r\n

\r\n Participation Activities\r\n \r\n R Required\r\n \r\n

\r\n \r\n \r\n {colHeaderOne}\r\n {colHeaderTwo}\r\n {colHeaderThree}\r\n {colHeaderFour}\r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Participate in a Health Screening\r\n R\r\n \r\n \r\n {colHeaderTwo}: \r\n 100\r\n Max of 100\r\n \r\n \r\n 100\r\n \r\n \r\n 02/04/2020\r\n \r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Complete Your Personal Health Profile\r\n R\r\n \r\n \r\n {colHeaderTwo}: \r\n 50\r\n Max of 50\r\n \r\n \r\n 50\r\n \r\n \r\n 01/15/2020\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Attend a Workplace Event\r\n \r\n \r\n {colHeaderTwo}: 5Max of 10\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Commit to Get Healthy\r\n \r\n \r\n {colHeaderTwo}: \r\n 10\r\n Max of 10\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Commit to Attend a Weight Meeting\r\n \r\n \r\n {colHeaderTwo}: \r\n 10\r\n Max of 10\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Total Participation Activity Points Earned\r\n \r\n \r\n 150\r\n \r\n \r\n \r\n \r\n\r\n

\r\n Tobacco\r\n \r\n R Required\r\n \r\n

\r\n \r\n \r\n {colHeaderOne}\r\n {colHeaderTwo}\r\n {colHeaderThree}\r\n {colHeaderFour}\r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Complete a Tobacco Affidavit\r\n R\r\n \r\n \r\n {colHeaderTwo}: \r\n 100\r\n Max of 100\r\n \r\n \r\n 100\r\n \r\n \r\n 02/04/2020\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Commit to be Tobacco-Free\r\n R\r\n \r\n \r\n {colHeaderTwo}: \r\n 50\r\n Max of 50\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Total Tobacco Points Earned\r\n \r\n \r\n 100\r\n \r\n \r\n \r\n \r\n\r\n

\r\n Create Healthy Habits\r\n \r\n R Required\r\n \r\n

\r\n \r\n \r\n {colHeaderOne}\r\n {colHeaderTwo}\r\n {colHeaderThree}\r\n {colHeaderFour}\r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Eat 5 Servings of Fruits/Vegetables a Day\r\n \r\n \r\n {colHeaderTwo}: 5Max of 200\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Log 10,000 Steps per Day\r\n \r\n \r\n {colHeaderTwo}: 5Max of 200\r\n \r\n \r\n 20\r\n \r\n \r\n various\r\n \r\n \r\n \r\n View Details\r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n */}\r\n \r\n Steps\r\n Date\r\n Points Earned\r\n \r\n \r\n 10,000\r\n 1/8/2020\r\n \r\n 5\r\n \r\n \r\n \r\n 11,000\r\n 1/7/2020\r\n \r\n 5\r\n \r\n \r\n \r\n 10,123\r\n 1/6/2020\r\n \r\n 5\r\n \r\n \r\n \r\n 15,430\r\n 1/3/2020\r\n \r\n 5\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Sleep 6-8 Hours per Night\r\n \r\n \r\n {colHeaderTwo}: 5Max of 200\r\n \r\n \r\n \r\n various\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {colHeaderOne}: \r\n Log Weight Once per Week\r\n \r\n \r\n {colHeaderTwo}: 5Max of 200\r\n \r\n \r\n \r\n various\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {colHeaderOne}: \r\n Total Create Healthy Habits Points Earned\r\n \r\n \r\n 20\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { Container, Alert, Row, Col } from 'react-bootstrap';\r\n\r\nexport const ProgramSummaryTest = (props) => {\r\n return (\r\n
\r\n <>\r\n
\r\n \r\n \r\n \r\n \r\n Download Program Summary\r\n \r\n \r\n \r\n \r\n Download Physician Form\r\n \r\n \r\n \r\n \r\n
\r\n {/* Scenario One */}\r\n {props.currentScenario === 'ScenarioOne' ? (\r\n \r\n

Wellness Matters 2020

\r\n

\r\n Health Advocate medical-enrolled employees can earn the\r\n 2021 Wellness Premium Discount by completing well-being activities for points. The\r\n amount of the 2021 weekly discount will be determined by the points level met by the program deadline of\r\n December 31, 2020. Download the Incentive Guide for full details on the wellness program and the\r\n well-being activities available to complete for points.\r\n

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

\r\n The amount of the 2021 weekly wellness discount is based on the total points earned by December 31,\r\n 2020 and levels below:\r\n

\r\n
    \r\n
  • \r\n Level 1 = 200 total points = $10 off weekly premium\r\n
  • \r\n
  • \r\n Level 2 = 400 total points = $20 off weekly premium\r\n
  • \r\n
  • \r\n Level 3 = 600 total points = $30 off weekly premium\r\n
  • \r\n
\r\n
\r\n
\r\n

\r\n Preventive Care Exams are encouraged to be scheduled before\r\n September 30, 2020 in order to earn the points by the deadline. It may take up to 90\r\n days from the date of service for the exam and points to be loaded to the member wellness website. All\r\n points must be earned by December 31, 2020.\r\n

\r\n
\r\n ) : null}\r\n\r\n {props.currentScenario === 'ScenarioTwo' ? (\r\n \r\n

Wellness Matters 2020

\r\n

\r\n Health Advocate medical-enrolled employees can earn the 2021 Wellness Premium Discount{' '}\r\n by completing well-being activities for points. Complete the following to earn a{' '}\r\n $600 Premium Credit:\r\n

\r\n \r\n
    \r\n
  • Personal Health Profile
  • \r\n
  • Tobacco Affidavit
  • \r\n
  • Be Tobacco Free or Complete Tobacco Cessation Program
  • \r\n
  • Health Screening Completion
  • \r\n
  • Health Education Session with a Coach
  • \r\n
\r\n
\r\n
\r\n ) : null}\r\n\r\n {props.currentScenario === 'ScenarioThree' ? (\r\n \r\n

Wellness Matters 2019

\r\n

\r\n Health Advocate medical-enrolled employees can earn the\r\n 2020 Wellness Premium Discount by completing well-being activities for points. Complete\r\n the following to earn a $400 Premium Credit:\r\n

\r\n \r\n
    \r\n
  • Personal Health Profile
  • \r\n
  • Tobacco Affidavit
  • \r\n
  • Be Tobacco Free or Complete Tobacco Cessation Program
  • \r\n
  • Health Screening Completion
  • \r\n
  • Health Education Session with a Coach
  • \r\n
\r\n
\r\n
\r\n ) : null}\r\n \r\n
\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { Tabs, Tab } from 'react-bootstrap';\r\nimport { HeaderTest } from './headerTest.jsx';\r\n// import { EarnPointsTest } from './earnPointsTest.jsx';\r\nimport { CombinedTabTest } from './combinedTab.jsx';\r\n\r\n//import { PointsEarnedTest } from './pointsEarnedTest.jsx';\r\nimport { ProgramSummaryTest } from './programSummaryTest';\r\n\r\nexport const MyPointsUtView = () => {\r\n const [currentScenario, setScenario] = useState('ScenarioOne');\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","export const LOAD_INCENTIVE_PROGRAM_STATUS = 'LOAD_INCENTIVE_PROGRAM_STATUS';\r\nexport const LOAD_INCENTIVE_PROGRAM_STATUS_SUCCESS =\r\n 'LOAD_INCENTIVE_PROGRAM_STATUS_SUCCESS';\r\nexport const LOAD_INCENTIVE_PROGRAM_STATUS_FAILED =\r\n 'LOAD_INCENTIVE_PROGRAM_STATUS_FAILED';\r\n","import * as types from './actionTypes';\r\nimport { ApiClient } from '../../api';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\n\r\nexport function loadIncentiveProgramStatus(logError) {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return (dispatch) => {\r\n return new Promise((resolve) => {\r\n var client = new ApiClient(apiRootUrl, sessionToken);\r\n client.get('member/incentiveprogram/status').then(\r\n (apiResult) => {\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadIncentiveProgramStatusSuccess(apiResult.data.result)));\r\n },\r\n (error) => {\r\n logError('incentive/actions', 'loadIncentiveProgramStatus', error);\r\n resolve(dispatch(loadIncentiveProgramStatusFailed()));\r\n }\r\n );\r\n });\r\n };\r\n}\r\n\r\nexport function loadIncentiveProgramStatusSuccess(details) {\r\n return { type: types.LOAD_INCENTIVE_PROGRAM_STATUS_SUCCESS, details };\r\n}\r\n\r\nexport function loadIncentiveProgramStatusFailed() {\r\n return { type: types.LOAD_INCENTIVE_PROGRAM_STATUS_FAILED };\r\n}\r\n","import React from 'react';\r\nimport { Provider } from 'react-redux';\r\nimport ReactDOM from 'react-dom';\r\nimport { MyPointsUtView } from './myPointsUtView';\r\nimport { loadIncentiveProgramStatus } from '../../widget/actions';\r\n\r\nexport const loadMyPointsUtComponent = (store, logError) => {\r\n const myPointsElement = document.getElementById('myPointsUtComponent');\r\n if (myPointsElement) {\r\n store.dispatch(loadIncentiveProgramStatus(logError));\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n myPointsElement\r\n );\r\n }\r\n};\r\n","export const REQUEST_LOAD_PROGRAMRULES = 'REQUEST_LOAD_PROGRAMRULES';\r\nexport const LOAD_PROGRAMRULES_SUCCESS = 'LOAD_PROGRAMRULES_SUCCESS';\r\nexport const LOAD_PROGRAMRULES_FAILED = 'LOAD_PROGRAMRULES_FAILED';\r\n","import * as types from './actionTypes';\r\nimport { ApiClient } from '../../api';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\n\r\nexport const loadProgramRules = (programId, logError) => {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n dispatch(requestLoadProgramRules(programId));\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get(`incentiveprogram/${programId}/rulesdetails`);\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadProgramRulesSuccess(programId, apiResult.data.result)));\r\n } catch (error) {\r\n resolve(dispatch(loadProgramRulesFailed()));\r\n logError('incentives/rules/actions', 'loadProgramRules', error);\r\n }\r\n });\r\n };\r\n};\r\n\r\nexport const requestLoadProgramRules = (programId) => {\r\n return { type: types.REQUEST_LOAD_PROGRAMRULES, programId };\r\n};\r\n\r\nexport const loadProgramRulesSuccess = (programId, rules) => {\r\n return { type: types.LOAD_PROGRAMRULES_SUCCESS, data: { programId, rules } };\r\n};\r\n\r\nexport const loadProgramRulesFailed = () => {\r\n return { type: types.LOAD_PROGRAMRULES_FAILED };\r\n};\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n byProgramId: new Map()\r\n};\r\n\r\nexport function incentiveRulesReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_PROGRAMRULES_SUCCESS:\r\n return {\r\n ...state,\r\n byProgramId: { [action.data.programId]: action.data.rules },\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_PROGRAMRULES_FAILED:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","export const LOAD_MEMBERSCORES_SUCCESS = 'LOAD_MEMBERSCORES_SUCCESS';\r\nexport const LOAD_MEMBERSCORES_FAILED = 'LOAD_MEMBERSCORES_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n byIpoid: new Map()\r\n};\r\n\r\nexport function memberScoresReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_MEMBERSCORES_SUCCESS:\r\n return {\r\n ...state,\r\n byIpoid: { [action.data.ipoid]: action.data.memberScores },\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_MEMBERSCORES_FAILED:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport * as types from './actionTypes';\r\n\r\nconst loadMemberScoresSuccess = (ipoid, memberScores) => {\r\n return {\r\n type: types.LOAD_MEMBERSCORES_SUCCESS,\r\n data: { ipoid, memberScores }\r\n };\r\n};\r\n\r\nconst loadMemberScoresFailed = () => {\r\n return {\r\n type: types.LOAD_MEMBERSCORES_FAILED\r\n };\r\n};\r\n\r\nexport const loadMemberScores = (ipoid, logError) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n\r\n const apiResult = await client.get(`member/incentiveprogram/incentiveprogramorganization/${ipoid}/score`);\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n\r\n resolve(dispatch(loadMemberScoresSuccess(ipoid, apiResult.data.result)));\r\n } catch (error) {\r\n logError('incentives/memberScores/actions', 'loadMemberScores', error);\r\n resolve(dispatch(loadMemberScoresFailed()));\r\n }\r\n });\r\n };\r\n};\r\n","export const LOAD_BUTTONLINKS_SUCCESS = 'LOAD_BUTTONLINKS_SUCCESS';\r\nexport const LOAD_BUTTONLINKS_FAILED = 'LOAD_BUTTONLINKS_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n byIpoid: new Map()\r\n};\r\n\r\nexport function buttonLinksReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_BUTTONLINKS_SUCCESS:\r\n return {\r\n ...state,\r\n byIpoid: { [action.data.ipoid]: action.data.buttonLinks },\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_BUTTONLINKS_FAILED:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport * as types from './actionTypes';\r\n\r\nconst loadButtonLinksSuccess = (ipoid, buttonLinks) => {\r\n return {\r\n type: types.LOAD_BUTTONLINKS_SUCCESS,\r\n data: { ipoid, buttonLinks }\r\n };\r\n};\r\n\r\nconst loadButtonLinksFailed = () => {\r\n return {\r\n type: types.LOAD_BUTTONLINKS_FAILED\r\n };\r\n};\r\n\r\nexport const loadButtonLinks = (ipoid, logError) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get(\r\n `member/incentiveprogram/incentiveprogramorganization/${ipoid}/buttonlinkdetail`\r\n );\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadButtonLinksSuccess(ipoid, apiResult.data.result)));\r\n } catch (error) {\r\n logError('incentives/buttonlinks/actions', 'loadButtonLinks', error);\r\n resolve(dispatch(loadButtonLinksFailed()));\r\n }\r\n });\r\n };\r\n};\r\n","export const LOAD_DOCUMENTLINKS_SUCCESS = 'LOAD_DOCUMENTLINKS_SUCCESS';\r\nexport const LOAD_DOCUMENTLINKS_FAILED = 'LOAD_DOCUMENTLINKS_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n byIpoid: new Map()\r\n};\r\n\r\nexport function documentLinksReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_DOCUMENTLINKS_SUCCESS:\r\n return {\r\n ...state,\r\n byIpoid: { [action.data.ipoid]: action.data.documentLinks },\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_DOCUMENTLINKS_FAILED:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport * as types from './actionTypes';\r\n\r\nconst loadDocumentLinksSuccess = (ipoid, documentLinks) => {\r\n return {\r\n type: types.LOAD_DOCUMENTLINKS_SUCCESS,\r\n data: { ipoid, documentLinks }\r\n };\r\n};\r\n\r\nconst loadDocumentLinksFailed = () => {\r\n return {\r\n type: types.LOAD_DOCUMENTLINKS_FAILED\r\n };\r\n};\r\n\r\nexport const loadDocumentLinks = (ipoid, logError) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get(`incentiveprogram/${ipoid}/documents`);\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadDocumentLinksSuccess(ipoid, apiResult.data.result)));\r\n } catch (error) {\r\n logError('incentives/documentLinks/actions', 'loadDoucmentLinks', error);\r\n resolve(dispatch(loadDocumentLinksFailed()));\r\n }\r\n });\r\n };\r\n};\r\n","export const LOAD_LINKEDRULES_SUCCESS = 'LOAD_LINKEDRULES_SUCCESS';\r\nexport const LOAD_LINKEDRULES_FAILED = 'LOAD_LINKEDRULES_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n byProgramId: new Map()\r\n};\r\n\r\nexport function linkedRulesReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_LINKEDRULES_SUCCESS:\r\n return {\r\n ...state,\r\n byProgramId: { [action.data.programId]: action.data.linkedRules },\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_LINKEDRULES_FAILED:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport * as types from './actionTypes';\r\n\r\nconst loadLinkedRulesSuccess = (programId, linkedRules) => {\r\n return {\r\n type: types.LOAD_LINKEDRULES_SUCCESS,\r\n data: { programId, linkedRules }\r\n };\r\n};\r\n\r\nconst loadLinkedRulesFailed = () => {\r\n return {\r\n type: types.LOAD_LINKEDRULES_FAILED\r\n };\r\n};\r\n\r\nexport const loadLinkedRules = (programId, logError) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get(`incentiveprogram/${programId}/rulelinks`);\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadLinkedRulesSuccess(programId, apiResult.data.result)));\r\n } catch (error) {\r\n logError('incentives/LinkedRules/actions', 'loadLinkedRules', error);\r\n resolve(dispatch(loadLinkedRulesFailed()));\r\n }\r\n });\r\n };\r\n};\r\n","export const LOAD_SECTIONS_SUCCESS = 'LOAD_SECTIONS_SUCCESS';\r\nexport const LOAD_SECTIONS_FAILED = 'LOAD_SECTIONS_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n byProgramId: new Map()\r\n};\r\n\r\nexport function sectionsReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_SECTIONS_SUCCESS:\r\n return {\r\n ...state,\r\n byProgramId: { [action.data.programId]: action.data.sections },\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_SECTIONS_FAILED:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport * as types from './actionTypes';\r\n\r\nconst loadSectionsSuccess = (programId, sections) => {\r\n return {\r\n type: types.LOAD_SECTIONS_SUCCESS,\r\n data: { programId, sections }\r\n };\r\n};\r\n\r\nconst loadSectionsFailed = () => {\r\n return {\r\n type: types.LOAD_SECTIONS_FAILED\r\n };\r\n};\r\n\r\nexport const loadSections = (programId, logError) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get(`incentiveprogram/${programId}/sections`);\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadSectionsSuccess(programId, apiResult.data.result)));\r\n } catch (error) {\r\n logError('incentives/sections/actions', 'loadSections', error);\r\n resolve(dispatch(loadSectionsFailed()));\r\n }\r\n });\r\n };\r\n};\r\n","export const LOAD_TIERDETAILS_SUCCESS = 'LOAD_TIERDETAILS_SUCCESS';\r\nexport const LOAD_TIERDETAILS_FAILED = 'LOAD_TIERDETAILS_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n byProgramId: new Map()\r\n};\r\n\r\nexport function tierDetailsReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_TIERDETAILS_SUCCESS:\r\n return {\r\n ...state,\r\n byProgramId: { [action.data.programId]: action.data.tierDetails },\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_TIERDETAILS_FAILED:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport * as types from './actionTypes';\r\n\r\nconst loadTierDetailsSuccess = (programId, tierDetails) => {\r\n return {\r\n type: types.LOAD_TIERDETAILS_SUCCESS,\r\n data: { programId, tierDetails }\r\n };\r\n};\r\n\r\nconst loadTierDetailsFailed = () => {\r\n return {\r\n type: types.LOAD_TIERDETAILS_FAILED\r\n };\r\n};\r\n\r\nexport const loadTierDetails = (programId, logError) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get(`incentiveprogram/${programId}/tierdetail`);\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadTierDetailsSuccess(programId, apiResult.data.result)));\r\n } catch (error) {\r\n logError('incentives/TierDetails/actions', 'loadTierDetails', error);\r\n resolve(dispatch(loadTierDetailsFailed()));\r\n }\r\n });\r\n };\r\n};\r\n","export const LOAD_MEMBERTIERDETAILS_SUCCESS = 'LOAD_MEMBERTIERDETAILS_SUCCESS';\r\nexport const LOAD_MEMBERTIERDETAILS_FAILED = 'LOAD_MEMBERTIERDETAILS_FAILED';\r\n","import * as types from './actionTypes';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n byIpoid: new Map()\r\n};\r\n\r\nexport function memberTierDetailsReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_MEMBERTIERDETAILS_SUCCESS:\r\n return {\r\n ...state,\r\n byIpoid: { [action.data.ipoid]: action.data.memberTierDetails },\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_MEMBERTIERDETAILS_FAILED:\r\n return {\r\n ...state,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { AppConfiguration } from '../../configuration';\r\nimport { ApiClient } from '../../api';\r\nimport { updateSessionToken, getSessionToken } from '../../session';\r\nimport * as types from './actionTypes';\r\n\r\nconst loadMemberTierDetailsSuccess = (ipoid, memberTierDetails) => {\r\n return {\r\n type: types.LOAD_MEMBERTIERDETAILS_SUCCESS,\r\n data: { ipoid, memberTierDetails }\r\n };\r\n};\r\n\r\nconst loadMemberTierDetailsFailed = () => {\r\n return {\r\n type: types.LOAD_MEMBERTIERDETAILS_FAILED\r\n };\r\n};\r\n\r\nexport const loadMemberTierDetails = (ipoid, logError) => {\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get(\r\n `member/incentiveprogram/incentiveprogramorganization/${ipoid}/tierachievement`\r\n );\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadMemberTierDetailsSuccess(ipoid, apiResult.data.result)));\r\n } catch (error) {\r\n logError('incentives/memberTierDetails/actions', 'loadMemberTierDetails', error);\r\n resolve(dispatch(loadMemberTierDetailsFailed()));\r\n }\r\n });\r\n };\r\n};\r\n","import React from 'react';\r\nimport { Provider } from 'react-redux';\r\nimport ReactDOM from 'react-dom';\r\nimport { MyPoints } from './myPoints';\r\nimport { loadCurrentProgram } from './actions';\r\n\r\nexport const loadMyPointsComponent = (store, logError) => {\r\n const myPointsElement = document.getElementById('myPointsComponent');\r\n if (myPointsElement) {\r\n store.dispatch(loadCurrentProgram(logError));\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n myPointsElement\r\n );\r\n }\r\n};\r\n","import { loadIncentivePrograms, getCurrentProgram } from '../programs';\r\nimport { loadProgramRules } from '../rules';\r\nimport { loadMemberScores } from '../memberScores';\r\nimport { loadButtonLinks } from '../buttonLinks';\r\nimport { loadDocumentLinks } from '../documentLinks';\r\nimport { loadLinkedRules } from '../linkedRules';\r\nimport { loadSections } from '../sections';\r\nimport { loadTierDetails } from '../tierDetails';\r\nimport { loadMemberTierDetails } from '../memberTierDetails';\r\n\r\nexport const loadCurrentProgram = (logError) => {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n let ipoid = urlParams.get('ipoid');\r\n\r\n return (dispatch) => {\r\n return new Promise(async () => {\r\n try {\r\n const visiblePrograms = await dispatch(loadIncentivePrograms(logError));\r\n const activeProgram = getCurrentProgram(visiblePrograms.list, ipoid);\r\n ipoid = activeProgram.incentiveProgramOrganizationId;\r\n // TODO: how do we handle this cleanly?\r\n if (!activeProgram) {\r\n console.error('Failed to get active incentive program from list');\r\n return;\r\n }\r\n let promises = [];\r\n\r\n promises.push(dispatch(loadSections(activeProgram.incentiveProgramId, logError)));\r\n promises.push(dispatch(loadProgramRules(activeProgram.incentiveProgramId, logError)));\r\n promises.push(dispatch(loadTierDetails(activeProgram.incentiveProgramId, logError)));\r\n promises.push(dispatch(loadButtonLinks(ipoid, logError)));\r\n promises.push(dispatch(loadLinkedRules(activeProgram.incentiveProgramId, logError)));\r\n promises.push(dispatch(loadDocumentLinks(ipoid, logError)));\r\n promises.push(dispatch(loadMemberScores(ipoid, logError)));\r\n promises.push(dispatch(loadMemberTierDetails(ipoid, logError)));\r\n\r\n await Promise.all(promises);\r\n } catch (error) {\r\n logError('incentive/mypoints/actions', 'loadCurrentProgram', error);\r\n }\r\n });\r\n };\r\n};\r\n\r\n//TO DO: move member end points to this method and add currentIncentiveProgramId to incentivesProgram Reducer\r\nconst loadMemberDetails = (ipoid, logError) => {\r\n return (dispatch) => {\r\n return new Promise(async () => {\r\n try {\r\n } catch (error) {\r\n logError('incentive/mypoints/actions', 'loadMemberDetails', error);\r\n }\r\n });\r\n };\r\n};\r\n","// Note: these map to server result enum values\r\nexport const ProgramStatusType = Object.freeze({\r\n NotStarted: 'NotStarted',\r\n InProgress: 'InProgress',\r\n Complete: 'Complete',\r\n TierRequirementsIncomplete: 'TierRequirementsIncomplete'\r\n});\r\n","import { ProgramStatusType } from './programStatusType';\r\n\r\nexport class ProgramDetails {\r\n constructor() {\r\n this.currentTier = 0;\r\n this.earnedPoints = 0;\r\n this.pointsToNextTier = 0;\r\n this.status = ProgramStatusType.NotStarted;\r\n this.tierPoints = []; // (note MUST be cummulative, eg. 25, 50, 100 correct, 25, 25, 50 incorrect)\r\n this.isRewardProgram = false;\r\n this.rewardBalance = 0;\r\n this.rewardLevel = 0;\r\n this.canBrowseRewards = false;\r\n this.canRedeemRewards = false;\r\n this.rewardsUrl = '';\r\n this.incentiveProgramOrganizationId = 0;\r\n }\r\n\r\n static create(apiStatusResult) {\r\n let details = new ProgramDetails();\r\n if (apiStatusResult.data && apiStatusResult.data.Result) {\r\n var result = apiStatusResult.data.Result;\r\n details.currentTier = result.CurrentTier;\r\n details.earnedPoints = result.EarnedPoints;\r\n details.pointsToNextTier = result.PointsToNextTier;\r\n details.status = result.Status;\r\n details.tierPoints = result.TierPoints;\r\n details.isRewardProgram = result.IsRewardProgram;\r\n details.rewardBalance = result.RewardBalance;\r\n details.rewardLevel = result.RewardLevel;\r\n details.canBrowseRewards = result.CanBrowseRewards;\r\n details.canRedeemRewards = result.CanRedeemRewards;\r\n details.rewardsUrl = result.RewardsUrl;\r\n details.incentiveProgramOrganizationId =\r\n result.IncentiveProgramOrganizationId;\r\n }\r\n return details;\r\n }\r\n}\r\n","import * as types from './actionTypes';\r\nimport { ProgramDetails } from './programDetails';\r\n\r\nconst initialState = {\r\n loading: true,\r\n error: false,\r\n details: new ProgramDetails()\r\n};\r\n\r\nexport function incentivesReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_INCENTIVE_PROGRAM_STATUS_SUCCESS:\r\n return {\r\n ...state,\r\n details: action.details,\r\n loading: false,\r\n error: false\r\n };\r\n case types.LOAD_INCENTIVE_PROGRAM_STATUS_FAILED:\r\n return {\r\n ...state,\r\n details: null,\r\n loading: false,\r\n error: true\r\n };\r\n default:\r\n return state;\r\n }\r\n}\r\n","import { combineReducers } from 'redux';\r\nimport { todoReducer as todos } from '../todos';\r\nimport { sectionCardReducer as sectionCards } from '../sectioncards';\r\nimport { chatReducer as chat } from '../chat';\r\nimport { memberReducer as members } from '../members';\r\nimport { organizationReducer as organizations } from '../organizations';\r\nimport { clientReducer as clients } from '../clients';\r\nimport { analyticsReducer as analytics } from '../analytics';\r\nimport { faxHistoryReducer as faxHistory } from '../faxes';\r\nimport { faxRecipientsReducer as faxRecipients } from '../faxes';\r\nimport { biometricsReducer as biometrics } from '../biometrics';\r\nimport { biometricsReportReducer as biometricsReport } from '../faxes';\r\nimport { healthNavigatorReducer as healthNavigator } from '../healthnavigator';\r\nimport { clientServicesReducer as clientServices } from '../services';\r\nimport { organizationConfigurationsReducer as organizationConfigurations } from '../organizationConfigurations';\r\nimport { contentExclusionsReducer as contentExclusions } from '../contentExclusions';\r\nimport {\r\n incentivesReducer as incentives,\r\n incentiveRulesReducer as incentiveRules,\r\n incentiveProgramsReducer as incentivePrograms,\r\n buttonLinksReducer as incentiveButtonLinks,\r\n linkedRulesReducer as incentiveLinkedRules,\r\n sectionsReducer as sections,\r\n tierDetailsReducer as tierDetails,\r\n memberScoresReducer as memberIncentiveScores,\r\n memberScoreDetailsReducer as memberScoreDetails,\r\n memberTierDetailsReducer as memberTierDetails,\r\n documentLinksReducer as documentLinks\r\n} from '../incentives';\r\nimport { geocodeReducer as geocode } from '../shared/geocoding';\r\nimport { memberAttestationReducer as memberAttestations } from '../members';\r\n\r\nconst rootReducer = combineReducers({\r\n incentives,\r\n sections,\r\n incentivePrograms,\r\n incentiveRules,\r\n tierDetails,\r\n incentiveButtonLinks,\r\n incentiveLinkedRules,\r\n memberIncentiveScores,\r\n memberScoreDetails,\r\n memberTierDetails,\r\n documentLinks,\r\n sectionCards,\r\n todos,\r\n chat,\r\n members,\r\n organizations,\r\n organizationConfigurations,\r\n clients,\r\n analytics,\r\n faxHistory,\r\n biometrics,\r\n faxRecipients,\r\n biometricsReport,\r\n healthNavigator,\r\n clientServices,\r\n contentExclusions,\r\n geocode,\r\n memberAttestations\r\n});\r\n\r\nexport default rootReducer;\r\n","import { createStore, applyMiddleware } from 'redux';\r\nimport { composeWithDevTools } from 'redux-devtools-extension';\r\nimport thunk from 'redux-thunk';\r\nimport rootReducer from './rootReducer';\r\n\r\nconst composeEnhancers = composeWithDevTools({});\r\nconst middleware =\r\n process.env.NODE_ENV !== 'production'\r\n ? [require('redux-immutable-state-invariant').default(), thunk]\r\n : [thunk];\r\n\r\nexport default function configureStore(initialState) {\r\n return createStore(\r\n rootReducer,\r\n initialState,\r\n composeEnhancers(applyMiddleware(...middleware))\r\n );\r\n}\r\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n // const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n const publicUrl =\n '//localhost/HealthyPath/Scripts/WebComponents/service-worker.js'; // TODO: make config resource\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl =\n '//localhost/HealthyPath/Scripts/WebComponents/service-worker.js'; // TODO: make config resource\n //const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://goo.gl/SC7cgQ'\n );\n });\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React, { Component } from 'react';\r\nimport { AppConfiguration, getAppUrl, getAppTarget } from '../configuration';\r\n\r\nexport class SectionCard extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.cardRef = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n this.props.addCardRef(this.cardRef);\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n {this.getCardImage(this.props.card.CardImageType)}\r\n
\r\n

{this.props.card.Title}

\r\n

{this.props.card.Description}

\r\n {this.getViewLink()}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n getViewLink() {\r\n var url = this.props.card.Url.replace(\r\n '~/',\r\n AppConfiguration.getSiteRootUrl()\r\n );\r\n if (this.props.card.IsModalWindow) {\r\n return (\r\n {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n }}>\r\n {this.props.card.ButtonText}\r\n \r\n );\r\n } else if (this.props.card.IsNewWindow) {\r\n return (\r\n \r\n {this.props.card.ButtonText}\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {this.props.card.ButtonText}\r\n \r\n );\r\n }\r\n }\r\n\r\n getCardImage(cardImageType) {\r\n const nutrition = 'nutrition';\r\n if (cardImageType) {\r\n if (cardImageType.toLowerCase() === nutrition) {\r\n const imageFilename = 'zipongoImageOne.jpg';\r\n return (\r\n \"\"\r\n );\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { MaterialSpinner } from '../shared';\r\n\r\nexport class CardLoadingPlaceholderComponent extends 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}\r\n","import React, { Component } from 'react';\r\n\r\nexport class SectionErrorCardComponent extends Component {\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n

\r\n {`An error occurred loading the ${this.props.title} section,\r\n technical support has been notified.`}\r\n

\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport Equalizer from 'react-equalizer';\r\nimport { AppConfiguration, getAppUrl, getAppTarget } from '../configuration';\r\nimport { SectionCard } from './sectionCard';\r\nimport { getTopCardsForSectionType } from './selectors';\r\nimport { CardLoadingPlaceholderComponent } from './cardLoadingPlaceholder';\r\nimport { SectionErrorCardComponent } from './sectionErrorCard';\r\nimport './section.scss';\r\n\r\nconst eapWorklifeRootUrlType = 'eapWorklifeRootUrl';\r\nconst eapWorklifeSectionType = 'WorkLife';\r\n\r\nexport const Section = (props) => {\r\n const sectionCards = useSelector((state) => state.sectionCards);\r\n const { eapWorklifeRootUrl, loading, error, eapBrandingName, eapSectionCardDescription } = sectionCards;\r\n const top = 2;\r\n const cards = getTopCardsForSectionType(sectionCards, props.config.sectionType, top);\r\n const cardRefs = [];\r\n let title = (props.config && props.config.title) || '';\r\n let description = (props.config && props.config.description) || '';\r\n let sectionUrl = (props.config && props.config.sectionUrl) || '';\r\n let browseButtonText = (props.config && props.config.browseButtonText) || '';\r\n if (props.config && props.config.sectionType === eapWorklifeSectionType) {\r\n if (eapBrandingName) {\r\n title = eapBrandingName;\r\n browseButtonText = `Browse ${eapBrandingName}`;\r\n }\r\n if (eapSectionCardDescription) description = eapSectionCardDescription;\r\n }\r\n return (\r\n
\r\n
\r\n cardRefs} property=\"minHeight\">\r\n
\r\n
\r\n

{title}

\r\n

{description}

\r\n

{getBrowseButton(sectionUrl, eapWorklifeRootUrl, browseButtonText)}

\r\n
\r\n {error ? getErrorMessage(title) : loading ? getLoading() : getCards(cards, cardRefs)}\r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst getErrorMessage = (title) => {\r\n return ;\r\n};\r\n\r\nconst getLoading = () => {\r\n return ;\r\n};\r\n\r\nconst isExternalSiteUrl = (sectionUrl) => {\r\n return sectionUrl === eapWorklifeRootUrlType;\r\n};\r\n\r\nconst getTarget = (sectionUrl) => {\r\n return isExternalSiteUrl(sectionUrl) ? '_blank' : '';\r\n};\r\n\r\nconst getBrowseButton = (sectionUrl, eapWorklifeRootUrl, browseButtonText) => {\r\n if (isExternalSiteUrl(sectionUrl)) {\r\n return (\r\n \r\n {browseButtonText}\r\n \r\n );\r\n }\r\n return (\r\n \r\n {browseButtonText}\r\n \r\n );\r\n};\r\n\r\n// Get section cards, bind section 'this' context so that we can get a child element reference for Equalizer\r\nconst getCards = (cards, cardRefs) => {\r\n return cards.map((card) => {\r\n return cardRefs.push(ref.current)} />;\r\n });\r\n};\r\n\r\nconst getSectionBackgroundClasses = (backgroundClass) => {\r\n return `expanded columns row ${backgroundClass}`;\r\n};\r\n\r\nconst getBrowseUrl = (sectionUrl, eapWorklifeRootUrl) => {\r\n let url = sectionUrl;\r\n // Special case, url from API result\r\n if (sectionUrl === eapWorklifeRootUrlType) {\r\n url = eapWorklifeRootUrl;\r\n } else {\r\n const siteRootUrl = AppConfiguration.getSiteRootUrl();\r\n url = `${siteRootUrl}${url}`;\r\n }\r\n return url;\r\n};\r\n","export function getTopCardsForSectionType(state, sectionType, top) {\r\n const sectionCards = state.cards ? state.cards[sectionType] : [];\r\n if (sectionCards && sectionCards.length > 0) {\r\n return sectionCards.slice(0, top);\r\n } else {\r\n return [];\r\n }\r\n}\r\n","export const healthConfig = {\r\n sectionType: 'Health',\r\n title: 'Health',\r\n backgroundClass: 'background-health',\r\n description:\r\n 'Use our Health resources to find a doctor, clarify your treatment options, and manage your health and well-being.',\r\n browseButtonText: 'Browse Health',\r\n sectionUrl: 'Health'\r\n};\r\n\r\nexport const financeConfig = {\r\n sectionType: 'Finance',\r\n title: 'Finance',\r\n backgroundClass: 'background-finance',\r\n description:\r\n 'Let us help you manage your healthcare costs and improve your financial well-being.',\r\n browseButtonText: 'Browse Finance',\r\n sectionUrl: 'Finance'\r\n};\r\n\r\nexport const wellbeingConfig = {\r\n sectionType: 'Wellbeing',\r\n title: 'Well-being',\r\n backgroundClass: 'background-wellbeing',\r\n description:\r\n 'We can help with stress, anxiety, relationships, and emotional health to help you improve your overall well-being.',\r\n browseButtonText: 'Browse Well-being',\r\n sectionUrl: 'WellBeing'\r\n};\r\n\r\nexport const worklifeConfig = {\r\n sectionType: 'WorkLife',\r\n title: 'EAP+Work/Life',\r\n backgroundClass: 'background-worklife',\r\n description:\r\n 'We’re here to help with work-related issues, workplace safety, and balancing your work and life.',\r\n browseButtonText: 'Browse EAP+Work/Life',\r\n sectionUrl: 'eapWorklifeRootUrl'\r\n};\r\n","import { ApiClient } from '../api';\r\nimport { AppConfiguration } from '../configuration';\r\nimport { getSessionToken } from '../session';\r\nimport * as types from './actionTypes';\r\n\r\nexport function loadSectionCardsSuccess(cards, eapWorklifeRootUrl, eapBrandingName, eapSectionCardDescription) {\r\n return {\r\n type: types.LOAD_SECTION_CARDS_SUCCESS,\r\n cards: cards,\r\n eapWorklifeRootUrl: eapWorklifeRootUrl,\r\n eapBrandingName: eapBrandingName,\r\n eapSectionCardDescription: eapSectionCardDescription\r\n };\r\n}\r\n\r\nexport function loadSectionCardsFailed() {\r\n return { type: types.LOAD_SECTION_CARDS_FAILED };\r\n}\r\n\r\nexport function loadSectionCards(logError) {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n try {\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get('membersite/sectioncard');\r\n const siteCards = apiResult.data.Result.SectionCards;\r\n const url = apiResult.data.Result.EapWorklifeRootUrl;\r\n const eapBrandingName = apiResult.data.Result.EapBrandingName;\r\n const eapSectionCardDescription = apiResult.data.Result.EapSectionCardDescription;\r\n let cardMap = {};\r\n if (siteCards) {\r\n siteCards.forEach((card) => {\r\n if (!cardMap[card.SectionCode]) {\r\n cardMap[card.SectionCode] = [];\r\n }\r\n cardMap[card.SectionCode].push(card);\r\n });\r\n }\r\n resolve(dispatch(loadSectionCardsSuccess(cardMap, url, eapBrandingName, eapSectionCardDescription)));\r\n } catch (error) {\r\n logError('sectioncards/actions', 'loadSectionCards', error);\r\n resolve(dispatch(loadSectionCardsFailed()));\r\n }\r\n });\r\n };\r\n}\r\n","import React from 'react';\r\nimport { Provider } from 'react-redux';\r\nimport ReactDOM from 'react-dom';\r\nimport { Section } from './section';\r\nimport { healthConfig, financeConfig, wellbeingConfig, worklifeConfig } from './sectionConfig';\r\nimport { loadSectionCards } from './actions';\r\n\r\nexport const loadSectionCardComponents = (store, logError) => {\r\n const healthCardElement = document.getElementById('healthSectionComponent');\r\n const financeCardElement = document.getElementById('financeSectionComponent');\r\n const wellbeingCardElement = document.getElementById('wellbeingSectionComponent');\r\n const worklifeCardElement = document.getElementById('worklifeSectionComponent');\r\n if (healthCardElement || wellbeingCardElement || financeCardElement || worklifeCardElement) {\r\n store.dispatch(loadSectionCards(logError));\r\n }\r\n\r\n if (healthCardElement) {\r\n ReactDOM.render(\r\n \r\n
\r\n ,\r\n healthCardElement\r\n );\r\n }\r\n\r\n if (financeCardElement) {\r\n ReactDOM.render(\r\n \r\n
\r\n ,\r\n financeCardElement\r\n );\r\n }\r\n\r\n if (wellbeingCardElement) {\r\n ReactDOM.render(\r\n \r\n
\r\n ,\r\n wellbeingCardElement\r\n );\r\n }\r\n\r\n if (worklifeCardElement) {\r\n ReactDOM.render(\r\n \r\n
\r\n ,\r\n worklifeCardElement\r\n );\r\n }\r\n};\r\n","import React, { Component } from 'react';\r\nimport { BrowserRouter as Router, Route } from 'react-router-dom';\r\nimport { Menu, MenuItem } from 'react-foundation';\r\nimport { debugLogin } from './debugLogin';\r\n\r\n// This 'debugApp' is for debugging individual components while we work in a hybrid MVC/SPA mode\r\n// and will only be created while debugging w/ npm start\r\n\r\nconst coronavirusSelfCheckerTestHarness = () => {\r\n return (\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nconst todoTestHarness = () => {\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst biometricsFaxesTestHarness = () => {\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst incentiveTestHarness = () => {\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst sectionCardsTestHarness = () => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\nconst quickLinksTestHarness = () => {\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst myPointsTestHarness = () => {\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst myPointsUserTestHarness = () => {\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst chatTestHarness = () => {\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 healthNavigatorTestHarness = () => {\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst prescriptionDiscountCardTestHarness = () => {\r\n return (\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport class DebugAppComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n window.apiRootUrl = process.env.REACT_APP_API_ROOT_URL;\r\n this.apiRootUrl = window.apiRootUrl;\r\n window.siteRootUrl = process.env.REACT_APP_SITE_ROOT_URL;\r\n this.siteRootUrl = window.siteRootUrl;\r\n this.clientGuid = process.env.REACT_APP_DEBUG_CLIENT_GUID;\r\n this.userName = process.env.REACT_APP_DEBUG_USER;\r\n this.password = process.env.REACT_APP_DEBUG_PASSWORD;\r\n }\r\n\r\n componentDidMount() {\r\n console.warn(`Debug environment detected, using debug login credentials for user ${this.userName}`);\r\n debugLogin(this.apiRootUrl, this.clientGuid, this.userName, this.password).then((sessionToken) => {\r\n console.log(`Debug login succeeded, session token: ${sessionToken}`);\r\n window.sessionToken = sessionToken;\r\n this.props.loadComponents(this.apiRootUrl, sessionToken);\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n
\r\n \r\n \r\n todos\r\n \r\n \r\n incentives\r\n \r\n \r\n sectioncards\r\n \r\n \r\n chat\r\n \r\n \r\n biometrics fax\r\n \r\n \r\n health navigator\r\n \r\n \r\n my points\r\n \r\n \r\n my points user testing\r\n \r\n \r\n i want to\r\n \r\n \r\n return pass\r\n \r\n \r\n Prescription Discount Card\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \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 { ApiClient } from '../api';\r\nimport * as types from './actionTypes.js';\r\nimport { AppConfiguration } from '../configuration';\r\nimport { getSessionToken } from '../session';\r\n\r\nexport function loadTodosSuccess(todos) {\r\n return { type: types.LOAD_TODOS_SUCCESS, todos };\r\n}\r\n\r\nexport function loadTodosFailed() {\r\n return { type: types.LOAD_TODOS_FAILED };\r\n}\r\n\r\nexport function loadTodos(logError) {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return dispatch => {\r\n return new Promise(async resolve => {\r\n try {\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get('todo');\r\n resolve(dispatch(loadTodosSuccess(apiResult.data.ToDoList)));\r\n } catch (error) {\r\n logError('todos/actions', 'loadTodos', error);\r\n resolve(dispatch(loadTodosFailed()));\r\n }\r\n });\r\n };\r\n}\r\n","const topTodoCount = 5;\r\n\r\nexport const topTodosSelector = (todos) => {\r\n return todos ? todos.slice(0, topTodoCount) : [];\r\n};\r\n\r\nexport const moreTodosAvailableSelector = (todos) => {\r\n return todos.length > topTodoCount;\r\n};\r\n\r\nexport const getTopRequiredTodos = (state, topCount) => {\r\n let topTodos = [];\r\n let topTodosFound = 0;\r\n if (state && state.todos) {\r\n for (let i = 0; i < state.todos.length; i++) {\r\n let todo = state.todos[i];\r\n if (todo.Required) {\r\n topTodos.push(todo);\r\n topTodosFound++;\r\n if (topTodosFound === topCount) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return topTodos;\r\n};\r\n","import React, { Component } from 'react';\r\nimport { ProgramStatusType } from './programStatusType';\r\nimport './pointsMeter.scss';\r\n\r\nexport class PointsMeter extends Component {\r\n static defaultProps = {\r\n tierPoints: [],\r\n currentPoints: 0,\r\n currentTier: 0,\r\n status: null,\r\n segmentMargin: 1\r\n };\r\n\r\n render() {\r\n const segments = this.getTierPercentageSegments(this.props.tierPoints);\r\n const isOneTierProgram = !segments || segments.length <= 1;\r\n const totalPoints = this.getTierPointsMax(this.props.tierPoints);\r\n let fractionCompleted = 0;\r\n if (this.props.status !== ProgramStatusType.TierRequirementsIncomplete) {\r\n fractionCompleted = this.getFractionCompleted(\r\n totalPoints,\r\n this.props.currentPoints\r\n );\r\n }\r\n const circumference = this.getCircumference();\r\n const fillLineOffset = this.getFillLine(circumference, fractionCompleted);\r\n const levelDashArray = this.getStrokeArray(\r\n circumference,\r\n segments,\r\n this.props.segmentMargin\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.getRingText(isOneTierProgram)}\r\n
\r\n
\r\n );\r\n }\r\n\r\n getTierPercentageSegments = tiers => {\r\n let segments = [];\r\n if (tiers && tiers.length > 0) {\r\n // Last tier entry in array represents total points\r\n let totalTierPoints = tiers[tiers.length - 1];\r\n let previousTierPoints = 0;\r\n tiers.forEach(score => {\r\n segments.push((score - previousTierPoints) / totalTierPoints);\r\n previousTierPoints = score;\r\n });\r\n }\r\n return segments;\r\n };\r\n\r\n getTierPointsMax = tiers => {\r\n let max = 0;\r\n if (tiers) {\r\n max = Math.max(...tiers);\r\n }\r\n return max;\r\n };\r\n\r\n getCircumference() {\r\n let circumference = 0;\r\n const radius = 54;\r\n circumference = 2 * Math.PI * radius;\r\n return circumference;\r\n }\r\n\r\n getFractionCompleted(totalPoints, earnedPoints) {\r\n let percentageComplete = 0;\r\n if (totalPoints && totalPoints > 0) {\r\n if (earnedPoints >= totalPoints) {\r\n percentageComplete = 1;\r\n } else {\r\n percentageComplete = earnedPoints / totalPoints;\r\n }\r\n }\r\n return percentageComplete;\r\n }\r\n\r\n getFillLine(circumference, fractionCompleted) {\r\n let fillLine = 0;\r\n fillLine = circumference * (1 - fractionCompleted);\r\n return fillLine;\r\n }\r\n\r\n // Calculate dash array based on circumference of circle\r\n // and percentages of segments.\r\n getStrokeArray(circumference, segments, segmentMargin) {\r\n let dashArray = `1 ${circumference - 1}`;\r\n if (segments && segments.length > 1) {\r\n dashArray = segments.map(segment => {\r\n return `${segmentMargin} ${segment * circumference - segmentMargin}`;\r\n });\r\n }\r\n return dashArray;\r\n }\r\n\r\n getRingText(isOneTierProgram) {\r\n if (this.props.status === ProgramStatusType.NotStarted) {\r\n return this.getJustStarted(isOneTierProgram);\r\n }\r\n if (this.props.status === ProgramStatusType.InProgress) {\r\n return this.getInProgress(isOneTierProgram);\r\n }\r\n if (this.props.status === ProgramStatusType.TierRequirementsIncomplete) {\r\n return this.getTierRequirementsIncomplete(isOneTierProgram);\r\n }\r\n if (this.props.status === ProgramStatusType.Complete) {\r\n return this.getComplete(isOneTierProgram);\r\n }\r\n return null;\r\n }\r\n\r\n getJustStarted() {\r\n return (\r\n
\r\n
\r\n
0
\r\n
\r\n
\r\n );\r\n }\r\n\r\n getInProgress(isOneTierProgram) {\r\n return (\r\n
\r\n
\r\n
{this.props.currentPoints}
\r\n {!isOneTierProgram ? (\r\n
\r\n {'Level ' + this.props.currentTier}\r\n
\r\n ) : null}\r\n
\r\n
\r\n );\r\n }\r\n\r\n getTierRequirementsIncomplete() {\r\n return (\r\n
\r\n
\r\n
PROGRAM INCOMPLETE
\r\n
\r\n
\r\n );\r\n }\r\n\r\n getComplete() {\r\n return (\r\n
\r\n
\r\n
{this.props.currentPoints}
\r\n
COMPLETE
\r\n
\r\n
\r\n );\r\n }\r\n\r\n getStatusText() {\r\n const incomplete = 'PROGRAM INCOMPLETE';\r\n const complete = 'COMPLETE';\r\n let statusText = '';\r\n if (this.props.status === ProgramStatusType.Complete) {\r\n statusText = complete;\r\n }\r\n if (this.props.status === ProgramStatusType.TierRequirementsIncomplete) {\r\n statusText = incomplete;\r\n }\r\n return statusText;\r\n }\r\n\r\n getSubtitle(isOneTierProgram) {\r\n let subtitle = '';\r\n if (\r\n this.props.status === ProgramStatusType.NotStarted &&\r\n !isOneTierProgram\r\n ) {\r\n subtitle = 'Level 1';\r\n }\r\n if (\r\n this.props.status === ProgramStatusType.InProgress &&\r\n !isOneTierProgram\r\n ) {\r\n subtitle = `Level ${this.props.currentTier}`;\r\n }\r\n if (this.props.status === ProgramStatusType.Complete) {\r\n subtitle = `Complete`;\r\n }\r\n return subtitle;\r\n }\r\n}\r\n","export const TodoTypes = {\r\n Commitment: 'TD_Commitment',\r\n EnhCommitment: 'TD_EnhCommitment',\r\n MemberProcedure: 'TD_MemberProcedure',\r\n Competition: 'TD_Competition',\r\n HealthEducationSessionContact: 'TD_HealthEducationSession_Contact',\r\n HealthEducationSessionRequest: 'TD_HealthEducationSession_Request',\r\n HealthScreening: 'TD_HealthScreening',\r\n FluShot: 'TD_FluShot',\r\n HRA: 'TD_HRA',\r\n OnlineProgram: 'TD_OnlineProgram',\r\n Tobacco: 'TD_Tobacco',\r\n Tracker: 'TD_Tracker',\r\n CompetitionTracker: 'TD_CompetitionTracker',\r\n Workshop: 'TD_Workshop',\r\n TimeTrade: 'TD_Timetrade',\r\n TimetradeSchedulingWellnessCoach: 'TD_TimetradeSchedulingWellnessCoach'\r\n};\r\n","import React, { Component } from 'react';\r\nimport moment from 'moment';\r\nimport momentTimeZone from 'moment-timezone';\r\nimport { getAppUrl, AppConfiguration } from '../configuration';\r\n\r\nexport class TimeTradeTodoItem extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.anchorRef = React.createRef();\r\n }\r\n\r\n render() {\r\n return (\r\n {\r\n this.launchTimeTradeWorkflow(e);\r\n }}>\r\n

{this.props.todo.Title}

\r\n
{this.getLinkText(this.props.todo.LinkText)}
\r\n {this.props.todo.Points ? (\r\n +{this.props.todo.Points} POINTS\r\n ) : null}\r\n {this.props.todo.Required ? (\r\n REQUIRED\r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n launchTimeTradeWorkflow(event) {\r\n if (!AppConfiguration.isNativeApp()) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n if (window.tt) {\r\n return window.tt.launchWorkflow(this.anchorRef.current);\r\n } else {\r\n console.error('tt library is not defined');\r\n }\r\n }\r\n\r\n getLocalAppointmentDateTime(utcDateTime) {\r\n if (!utcDateTime) return '';\r\n\r\n const timeZoneOffset = new Date().getTimezoneOffset();\r\n const timeZone = momentTimeZone.tz.guess();\r\n const timeZoneAbbr = momentTimeZone.tz.zone(timeZone).abbr(timeZoneOffset);\r\n const localDate = moment\r\n .utc(utcDateTime)\r\n .local()\r\n .format('L');\r\n const localTime = moment\r\n .utc(utcDateTime)\r\n .local()\r\n .format('LT');\r\n return ` ${localTime} ${timeZoneAbbr} on ${localDate}`;\r\n }\r\n\r\n getLinkText() {\r\n return `${this.props.todo.ShortInfo} ${this.getLocalAppointmentDateTime(\r\n this.props.todo.LinkText\r\n )}`;\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { getAppUrl, AppConfiguration } from '../configuration';\r\n\r\nexport class ScheduleWellnessCoachTodoItem extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.anchorRef = React.createRef();\r\n }\r\n\r\n render() {\r\n return (\r\n {\r\n this.launchTimeTradeWorkflow(e);\r\n }}>\r\n {this.props.todo.Title ?

{this.props.todo.Title}

: null}\r\n {this.props.todo.ShortInfo ? (\r\n
{this.props.todo.ShortInfo}
\r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n launchTimeTradeWorkflow(event) {\r\n if (!AppConfiguration.isNativeApp()) {\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n if (window.tt) {\r\n return window.tt.launchWorkflow(this.anchorRef.current);\r\n } else {\r\n console.error('tt library is not defined');\r\n }\r\n }\r\n}\r\n","const redirectMap = {\r\n TD_Commitment: { area: 'Home', controller: 'Home', action: 'Commitments' },\r\n TD_Competition: {\r\n area: 'Wellbeing',\r\n controller: 'Wellbeing',\r\n action: 'Challenges'\r\n },\r\n TD_HealthEducationSession_Contact: {\r\n area: 'Home',\r\n controller: 'Home',\r\n action: 'MessageCoach'\r\n },\r\n TD_HealthScreening: {\r\n area: 'Home',\r\n controller: 'Home',\r\n action: 'BiometricScreening'\r\n },\r\n TD_FluShot: { area: 'Home', controller: 'Home', action: 'FluShot' },\r\n TD_HRA: {\r\n area: 'Health',\r\n controller: 'Health',\r\n action: 'PersonalHealthProfile'\r\n },\r\n TD_OnlineProgram: { area: 'Home', controller: 'Home', action: 'Programs' },\r\n TD_Tobacco: { area: 'Home', controller: 'Home', action: 'TobaccoAffidavit' },\r\n TD_Tracker: {\r\n area: 'Wellbeing',\r\n controller: 'Wellbeing',\r\n action: 'ChallengeTrackers'\r\n },\r\n TD_CompetitionTracker: {\r\n area: 'Wellbeing',\r\n controller: 'Wellbeing',\r\n action: 'CompetitionTrackers'\r\n },\r\n TD_Workshop: {\r\n area: 'Wellbeing',\r\n controller: 'Wellbeing',\r\n action: 'Workshops'\r\n },\r\n TD_BiometricsFax: {\r\n area: 'Biometrics',\r\n controller: 'Biometrics',\r\n action: 'Fax'\r\n }\r\n};\r\n\r\n// Certain To Do item types require iFrame redirect action, these types are\r\n// mapped here and will be posted back to HealthyPath in a form\r\nexport function getRedirectRoute(todoType) {\r\n let redirectRoute = null;\r\n if (todoType) {\r\n redirectRoute = redirectMap[todoType];\r\n }\r\n return redirectRoute;\r\n}\r\n","import React from 'react';\r\nimport { getAntiForgeryToken } from '../antiforgery';\r\nimport { AppConfiguration } from '../configuration';\r\nimport { getRedirectRoute } from './routeRedirectMap';\r\n\r\n// TODO: pun intended - re-write this, ported directly from old MVC code and its overly complex\r\nexport const TodoItem = (props) => {\r\n const redirectRoute = getRedirectRoute(props.todo.ToDoType);\r\n // These To Do items require a healthy path redirect to take special actions // such as setting up an iFrame route\r\n if (redirectRoute) {\r\n return getTodoForm(props.todo, redirectRoute);\r\n }\r\n // These are plan hyper link to do items\r\n if (props.todo.Href && props.todo.Href.length > 0) {\r\n return getTodoLink(props.todo);\r\n }\r\n return getPlainTodo(props.todo);\r\n};\r\n\r\n// To Do items that need an iFrame redirect into wellness post-back to healthy path\r\n// home/index/[action] in order to do so\r\nconst getTodoForm = (todo, redirectRoute) => {\r\n const postUrl = `${AppConfiguration.getSiteRootUrl()}${redirectRoute.controller}/${redirectRoute.action}`;\r\n const token = getAntiForgeryToken();\r\n const verificationTokenName = '__RequestVerificationToken';\r\n let form = null;\r\n return (\r\n {\r\n form = ref;\r\n }}>\r\n \r\n \r\n {/*eslint-disable */}\r\n {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n form.submit();\r\n }}>\r\n

{todo.Title}

\r\n {todo.ShortInfo ?
{todo.ShortInfo}
: null}\r\n {todo.Points ? +{todo.Points} POINTS : null}\r\n {todo.Required ? REQUIRED : null}\r\n \r\n {/*eslint-enable */}\r\n \r\n );\r\n};\r\n\r\n// Render a todo item that is a hyperlink\r\nconst getTodoLink = (todo) => {\r\n return (\r\n \r\n

{todo.Title}

\r\n {todo.ShortInfo ?
{todo.ShortInfo}
: null}\r\n {todo.Points ? +{todo.Points} POINTS : null}\r\n {todo.Required ? REQUIRED : null}\r\n
\r\n );\r\n};\r\n\r\n// Render a todo item that doens't link anywhere\r\nconst getPlainTodo = (todo) => {\r\n return (\r\n
\r\n

{todo.Title}

\r\n {todo.ShortInfo ?
{todo.ShortInfo}
: null}\r\n {todo.Points ? +{todo.Points} POINTS : null}\r\n {todo.Required ? REQUIRED : null}\r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { TodoTypes } from './todoTypes';\r\nimport { TimeTradeTodoItem } from './timeTradeTodoItem';\r\nimport { ScheduleWellnessCoachTodoItem } from './scheduleWellnessCoachTodoItem';\r\nimport { TodoItem } from './todoItem';\r\n\r\nexport const todoRenderFactory = todo => {\r\n if (todo.ToDoType === TodoTypes.TimeTrade) {\r\n return ;\r\n } else if (\r\n todo.ToDoType === TodoTypes.TimetradeSchedulingWellnessCoach ||\r\n todo.ToDoType === TodoTypes.HealthEducationSessionRequest\r\n ) {\r\n return ;\r\n } else {\r\n return ;\r\n }\r\n};\r\n","import React, { Component } from 'react';\r\nimport { todoRenderFactory } from './todoRenderFactory';\r\nimport './requiredToDoList.scss';\r\nimport { ErrorCard } from '../shared/error';\r\n\r\nexport class RequiredToDoList extends Component {\r\n static defaultProps = {\r\n todos: [],\r\n loading: true,\r\n error: false\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n {!this.props.error ? (\r\n this.getTodoList()\r\n ) : (\r\n \r\n )}\r\n
\r\n );\r\n }\r\n\r\n getTodoList() {\r\n return (\r\n <>\r\n
    {this.getTodos()}
\r\n \r\n );\r\n }\r\n\r\n getTodos() {\r\n return (\r\n this.props.todos &&\r\n this.props.todos.map(todo => {\r\n return
  • {todoRenderFactory(todo)}
  • ;\r\n })\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { ProgramStatusType } from './programStatusType';\r\nimport './statusPane.scss';\r\n\r\nexport class StatusPane extends Component {\r\n static defaultProps = {\r\n loading: false,\r\n status: ProgramStatusType.NotStarted,\r\n hasRequiredTodos: false,\r\n pointsToNextTier: 0,\r\n currentTier: 0,\r\n oneTierProgram: false\r\n };\r\n\r\n render() {\r\n if (this.props.status === ProgramStatusType.TierRequirementsIncomplete) {\r\n return this.getTierRequirementsIncompleteMessage();\r\n } else if (this.props.status === ProgramStatusType.Complete) {\r\n return this.getCompleteMessage();\r\n } else if (this.props.status === ProgramStatusType.NotStarted) {\r\n return this.getNotStartedMessage();\r\n } else {\r\n return this.getInProgressMessage();\r\n }\r\n }\r\n\r\n getTierRequirementsIncompleteMessage() {\r\n let messageText = this.props.oneTierProgram\r\n ? \"Don't forget to complete the required items\"\r\n : \"Don't forget to complete the required items to qualify for the next Level!\";\r\n return

    {messageText}

    ;\r\n }\r\n\r\n getCompleteMessage() {\r\n return (\r\n

    \r\n Congratulations - You have completed this year's program requirements!\r\n

    \r\n );\r\n }\r\n\r\n getNotStartedMessage() {\r\n if (this.props.oneTierProgram) {\r\n return null;\r\n }\r\n return (\r\n

    \r\n Earn{' '}\r\n {this.props.pointsToNextTier}{' '}\r\n points to complete Level 1.\r\n {this.props.hasRequiredTodos ? (\r\n \r\n Start with these required items:\r\n \r\n ) : null}\r\n

    \r\n );\r\n }\r\n\r\n getInProgressMessage() {\r\n return (\r\n

    \r\n You are currently on \r\n Level {this.props.currentTier}\r\n \r\n !
    \r\n Earn{' '}\r\n \r\n {this.props.pointsToNextTier}\r\n {' '}\r\n points to complete this level.\r\n
    \r\n

    \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { AppConfiguration, getAppUrl, getAppTarget } from '../configuration';\r\nimport './rewardsProgramSummary.scss';\r\n\r\nexport class RewardsProgramSummary extends Component {\r\n static defaultProps = {\r\n rewardBalance: 0,\r\n rewardLevel: 0,\r\n earnedPoints: 0,\r\n canBrowseRewards: false,\r\n canRedeemRewards: false,\r\n rewardsUrl: ''\r\n };\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    \r\n \r\n Rewards Balance\r\n

    \r\n
    \r\n

    ${this.props.rewardBalance}

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

    \r\n \r\n Current Points\r\n

    \r\n
    \r\n

    {this.props.earnedPoints}

    \r\n
    \r\n
    \r\n
    \r\n {this.getBrowseButton()}\r\n \r\n Points Detail\r\n \r\n
    \r\n );\r\n }\r\n\r\n getPointsDetailLink() {\r\n return `${AppConfiguration.getSiteRootUrl()}Wellbeing/Rewards/${\r\n this.props.incentiveProgramOrganizationId\r\n }`;\r\n }\r\n\r\n getBrowseButton() {\r\n let buttonText = '';\r\n if (this.props.canBrowseRewards && !this.props.canRedeemRewards) {\r\n buttonText = 'Browse Now';\r\n } else if (this.props.canRedeemRewards) {\r\n buttonText = 'Shop Now';\r\n }\r\n if (this.props.canBrowseRewards || this.props.canRedeemRewards) {\r\n return (\r\n \r\n {buttonText}\r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { getTopRequiredTodos } from '../../todos/selectors';\r\nimport { PointsMeter } from './pointsMeter';\r\nimport { RequiredToDoList } from '../../todos/requiredToDoList';\r\nimport { ProgramDetails } from './programDetails';\r\nimport './summaryPanel.scss';\r\nimport { MaterialSpinner, reinitEqualizer } from '../../shared';\r\nimport { StatusPane } from './statusPane';\r\nimport { RewardsProgramSummary } from '../../rewards/rewardsProgramSummary';\r\nimport { ProgramStatusType } from './programStatusType';\r\n\r\nclass SummaryPanel extends Component {\r\n static defaultProps = {\r\n loading: true,\r\n error: false,\r\n details: new ProgramDetails(),\r\n todo: {\r\n todos: [],\r\n error: false\r\n }\r\n };\r\n\r\n componentDidMount() {\r\n reinitEqualizer();\r\n }\r\n\r\n componentDidUpdate() {\r\n reinitEqualizer();\r\n }\r\n\r\n render() {\r\n if (this.props.loading) {\r\n return this.getLoading();\r\n }\r\n if (this.props.error) {\r\n return this.getError();\r\n }\r\n if (this.props.details.isRewardProgram) {\r\n return this.getRewardsView();\r\n }\r\n return this.getMeterView();\r\n }\r\n\r\n getMeterView() {\r\n return (\r\n <>\r\n
    \r\n
    \r\n

    My Points

    \r\n
    \r\n
    \r\n \r\n 0}\r\n oneTierProgram={this.props.details.tierPoints.length <= 1}\r\n />\r\n

    Scores may take up to 24 hours to reflect recent activity

    \r\n
    \r\n \r\n
    \r\n \r\n {this.getPointsButtonText()}\r\n \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n\r\n getRewardsView() {\r\n return (\r\n \r\n );\r\n }\r\n\r\n getError() {\r\n return (\r\n
    \r\n \r\n Sorry, but an error occurred.\r\n
    \r\n Technical support has been notified.\r\n
    \r\n
    \r\n );\r\n }\r\n\r\n getLoading() {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n }\r\n\r\n getMyPointsLink() {\r\n return `${AppConfiguration.getSiteRootUrl()}Wellbeing/MyPoints`;\r\n }\r\n\r\n getPointsButtonText() {\r\n const pointsDetail = 'Points Detail';\r\n const getStarted = 'Get Started';\r\n const earnMore = 'Earn More';\r\n if (this.props.details.status === ProgramStatusType.Complete) {\r\n return earnMore;\r\n } else {\r\n return this.props.details.earnedPoints > 0 ? pointsDetail : getStarted;\r\n }\r\n }\r\n}\r\n\r\nconst topToDoCount = 2;\r\n\r\nlet mapDispatchToProps = (state) => {\r\n return {\r\n ...state.incentives,\r\n ...state.organizations,\r\n todo: {\r\n ...state.todos,\r\n todos: getTopRequiredTodos(state.todos, topToDoCount)\r\n }\r\n };\r\n};\r\n\r\nexport default connect(mapDispatchToProps)(SummaryPanel);\r\n","import React from 'react';\r\n\r\nexport const TodoLoadingAnimation = () => {\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","import React from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { AppConfiguration } from '../configuration';\r\nimport { todoRenderFactory } from './todoRenderFactory';\r\nimport { topTodosSelector, moreTodosAvailableSelector } from './selectors';\r\nimport { TodoLoadingAnimation } from './todoLoadingAnimation';\r\nimport { ErrorCard } from '../shared';\r\nimport './todoList.scss';\r\n\r\nexport const TodoList = () => {\r\n const top = 5;\r\n let { error, loading, todos } = useSelector((state) => state.todos);\r\n todos = topTodosSelector(todos, top);\r\n const moreTodosAvailable = moreTodosAvailableSelector(todos);\r\n if (error) {\r\n return (\r\n \r\n );\r\n }\r\n if (loading) {\r\n return ;\r\n }\r\n if (!todos || todos.length < 1) {\r\n return null;\r\n }\r\n return (\r\n
    \r\n
    \r\n
      \r\n {getTodos(todos)}\r\n {getShowAllButton(moreTodosAvailable)}\r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\n//const getTodoList = (todos, moreTodosAvailable) => {};\r\n\r\nconst getShowAllButton = (moreTodosAvailable) => {\r\n if (moreTodosAvailable) {\r\n return (\r\n \r\n See All\r\n \r\n );\r\n }\r\n return null;\r\n};\r\n\r\nconst getTodos = (todos) => {\r\n return (\r\n todos &&\r\n todos.map((todo) => {\r\n return
  • {todoRenderFactory(todo)}
  • ;\r\n })\r\n );\r\n};\r\n\r\nconst getTodoLink = () => {\r\n return `${AppConfiguration.getSiteRootUrl()}ToDo`;\r\n};\r\n","import React, { useRef, useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { Overlay, Popover, Button } from 'react-bootstrap';\r\nimport { FaCaretDown } from 'react-icons/fa';\r\nimport { TodoList } from './todoList';\r\nimport { AppConfiguration } from '../configuration';\r\nimport { ErrorBoundry, ErrorCard } from '../shared';\r\nimport './todoDropDown.scss';\r\n\r\n\r\n\r\nexport const TodoDropDown = () => {\r\n const ref = useRef(null);\r\n const [show, setShow] = useState(false);\r\n const [target, setTarget] = useState(null);\r\n let { todos, error, loading } = useSelector((state) => state.todos);\r\n\r\n if (loading) {\r\n return (\r\n <>\r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n if (todos && !error && todos.length <= 0) return null;\r\n return (\r\n \r\n
    \r\n {\r\n setShow(!show);\r\n setTarget(e.target);\r\n }}\r\n className=\"todo-button\">\r\n MY TO-DO LIST\r\n Point Suggestions{' '}\r\n \r\n \r\n\r\n \r\n \r\n \r\n {!error ? : }\r\n {todos.length > 5 ? (\r\n \r\n See All\r\n \r\n ) : null}\r\n \r\n \r\n \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nconst getTodoLink = () => {\r\n return `${AppConfiguration.getSiteRootUrl()}ToDo`;\r\n};\r\n","import React, { useEffect } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { EventEmitter } from 'fbemitter';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { hideChat } from '../store';\r\nimport { ChatPopUp } from '../popup';\r\nimport { loadingSelector } from './loadingSelector';\r\nimport { errorSelector } from './errorSelector';\r\nimport { wellnessQueueSelector } from './wellnessQueueSelector';\r\nimport './chatMount.scss';\r\n\r\n// 'Mount' element for chat. Needed as the chat component itself cannot be in the main menu in healthypath, but the\r\n// button that invokes it does have to be. If the chat component itself was in the menu it would be dismissed on scroll\r\n// action which closes the menu. This component also shows/hides the chat dialog from any button on the page its launched\r\n// by and uses redux state to toggle visibility\r\n\r\nlet eventEmitter = null;\r\n\r\nexport const ChatMount = () => {\r\n const dispatch = useDispatch();\r\n const chatState = useSelector((state) => state.chat);\r\n const member = useSelector((state) => state.members.member);\r\n const client = useSelector((state) => state.clients.client);\r\n const organization = useSelector((state) => state.organizations.organization);\r\n const chatVisible = chatState.menuChatVisible || chatState.wellnessChatVisible;\r\n const loading = useSelector((state) => loadingSelector(state));\r\n const error = useSelector((state) => errorSelector(state));\r\n const contactUrl = `${AppConfiguration.getSiteRootUrl()}Home/Message`;\r\n const description =\r\n \"Please fill out the information in the form below then click 'Start Live Chat' and an agent will assist you as soon as possible.\";\r\n const title = 'Live Chat';\r\n // If it's 'wellness' specific chat being displayed set queue directly on chat popup (else topic dialog will handle)\r\n let wellnessQueue = null;\r\n if (chatState.wellnessChatVisible) {\r\n wellnessQueue = wellnessQueueSelector(chatState);\r\n }\r\n useEffect(() => {\r\n eventEmitter = new EventEmitter();\r\n eventEmitter.addListener('ChatPopUp.Close', () => {\r\n dispatch(hideChat());\r\n });\r\n }, [dispatch]);\r\n return chatVisible ? (\r\n
    \r\n \r\n
    \r\n ) : null;\r\n};\r\n","export const loadingSelector = (state) => {\r\n return (\r\n state.chat.loading &&\r\n state.members.loading &&\r\n state.organizations.loading &&\r\n state.clients.loading &&\r\n state.analytics.loading\r\n );\r\n};\r\n","export const errorSelector = (state) => {\r\n return state.chat.error && state.members.error && state.organizations.error && state.clients.error;\r\n};\r\n","export const wellnessQueueSelector = (chatState) => {\r\n let queueName = '';\r\n if (chatState && chatState.queues && chatState.queues.length > 0) {\r\n const filteredQueues = chatState.queues.filter((x) => x.queueType === 'Wellness');\r\n // Assuming 1 queue per type, if this changes this logic needs to be changed\r\n if (filteredQueues && filteredQueues.length > 0) {\r\n if (filteredQueues.length > 1) {\r\n console.warning('More than queue was found for type Wellness, defaulting to first entry found');\r\n }\r\n queueName = filteredQueues[0].name;\r\n } else {\r\n console.warn('Failed to find Wellness chat queue');\r\n }\r\n }\r\n return queueName;\r\n};\r\n","import React from 'react';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { showMenuChat, hideChat } from '../store';\r\nimport './menuChatButton.scss';\r\n\r\nexport const MenuChatButton = () => {\r\n const dispatch = useDispatch();\r\n const { wellnessChatVisible, menuChatVisible } = useSelector((state) => state.chat);\r\n const chatVisible = wellnessChatVisible || menuChatVisible;\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nconst handleShowChatClick = (event, dispatch, chatVisible) => {\r\n event.preventDefault();\r\n if (chatVisible) {\r\n dispatch(hideChat());\r\n } else {\r\n dispatch(showMenuChat());\r\n }\r\n};\r\n","import React from 'react';\r\nimport ReactGa from 'react-ga';\r\nimport { AppConfiguration } from '../../configuration';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { showWellnessChat, hideChat } from '../store';\r\nimport './wellnessChatButton.scss';\r\n\r\nexport const WellnessChatButton = () => {\r\n const dispatch = useDispatch();\r\n const { wellnessChatVisible, menuChatVisible } = useSelector((state) => state.chat);\r\n const chatVisible = wellnessChatVisible || menuChatVisible;\r\n const imageUrl = AppConfiguration.getImagePath('icon_chatNav2.svg');\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nconst handleShowChatClick = (event, chatVisible, dispatch) => {\r\n event.preventDefault();\r\n if (chatVisible) {\r\n dispatch(hideChat());\r\n } else {\r\n trackEvent();\r\n dispatch(showWellnessChat());\r\n }\r\n};\r\n\r\nconst trackEvent = () => {\r\n ReactGa.event({\r\n category: 'Support',\r\n action: `Chat - Wellness`\r\n });\r\n};\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { loadChat } from './store';\r\nimport { ChatMount } from './mount';\r\nimport { MenuChatButton, WellnessChatButton } from './buttons';\r\n\r\nexport const loadChatComponent = (store, logError) => {\r\n loadChatMount(store, logError);\r\n loadMainMenuChat(store);\r\n loadWellnessCoachChat(store);\r\n};\r\n\r\nconst loadChatMount = (store, logError) => {\r\n const mountElement = document.getElementById('chatMountComponent');\r\n if (mountElement) {\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n mountElement\r\n );\r\n store.dispatch(loadChat(logError));\r\n }\r\n};\r\n\r\nconst loadMainMenuChat = (store) => {\r\n const buttonElement = document.getElementById('menuChatButtonComponent');\r\n if (buttonElement) {\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n buttonElement\r\n );\r\n }\r\n};\r\n\r\nconst loadWellnessCoachChat = (store) => {\r\n const buttonElement = document.getElementById('wellnessChatButtonComponent');\r\n if (buttonElement) {\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n buttonElement\r\n );\r\n }\r\n};\r\n","import { ApiClient } from '../api';\r\nimport { AppConfiguration } from '../configuration';\r\nimport { getSessionToken } from '../session';\r\nimport * as types from './actionTypes';\r\n\r\nexport function loadMember(logError) {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return dispatch => {\r\n return new Promise(async resolve => {\r\n try {\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await client.get('member');\r\n const member = getMemberFromResult(apiResult.data.Result);\r\n resolve(dispatch(loadMemberSuccess(member)));\r\n } catch (error) {\r\n logError('members/actions', 'loadMember', error);\r\n resolve(dispatch(loadMemberFailed()));\r\n }\r\n });\r\n };\r\n}\r\n\r\nconst getMemberFromResult = result => {\r\n const member = {\r\n addressLine1: result.AddressLine1,\r\n addressLine2: result.AddressLine2,\r\n alternatePhone: result.AlternatePhone,\r\n birthDate: new Date(result.BirthDate),\r\n city: result.City,\r\n countryCode: result.CountryCode,\r\n demoAccount: result.DemoAccount,\r\n firstName: result.FirstName,\r\n gender: result.Gender,\r\n id: result.Id,\r\n lastName: result.LastName,\r\n middleName: result.MiddleName,\r\n prefix: result.Prefix,\r\n primaryEmail: result.PrimaryEmail,\r\n primaryPhone: result.PrimaryPhone,\r\n state: result.State,\r\n stateAbbreviation: result.StateAbbreviation,\r\n suffix: result.Suffux,\r\n vipMember: result.VIPMember,\r\n zipCode: result.ZipCode\r\n };\r\n return member;\r\n};\r\n\r\nexport const loadMemberSuccess = member => {\r\n return {\r\n type: types.LOAD_MEMBER_SUCCESS,\r\n member: member\r\n };\r\n};\r\n\r\nexport const loadMemberFailed = () => {\r\n return { type: types.LOAD_MEMBER_FAILED };\r\n};\r\n","import { ApiClient } from '../api';\r\nimport { AppConfiguration } from '../configuration';\r\nimport { getSessionToken } from '../session';\r\nimport * as types from './actionTypes.js';\r\n\r\nexport function loadOrganization(logError) {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return dispatch => {\r\n return new Promise(async resolve => {\r\n try {\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n const result = await client.get('organization');\r\n const organization = convertResult(result.data.Result);\r\n resolve(dispatch(loadOrganizationSuccess(organization)));\r\n } catch (error) {\r\n logError('organization/actions', 'loadOrganization', error);\r\n resolve(dispatch(loadOrganizationFailed()));\r\n }\r\n });\r\n };\r\n}\r\n\r\nconst convertResult = result => {\r\n const organization = {\r\n active: result.Active,\r\n billingGroupName: result.BillingGroupName,\r\n crmReportGroupCode: result.CRMReportGroupCode,\r\n campaignId: result.CampaignID,\r\n documentOrganizationId: result.DocumentOrganizationId,\r\n effectiveDate: result.EffectiveDate,\r\n memberPhoneNumber: result.MemberPhoneNumber,\r\n organizationId: result.OrganizationId,\r\n organizationName: result.OrganizationName,\r\n organizationTypeCode: result.OrganizationTypeCode,\r\n parentOrganizationId: result.ParentOrganizationId,\r\n searchNotes: result.SearchNotes,\r\n webSite: result.WebSite\r\n };\r\n return organization;\r\n};\r\n\r\nexport const loadOrganizationSuccess = organization => {\r\n return {\r\n type: types.LOAD_ORGANIZATION_SUCCESS,\r\n organization: organization\r\n };\r\n};\r\n\r\nexport const loadOrganizationFailed = () => {\r\n return { type: types.LOAD_ORGANIZATION_FAILED };\r\n};\r\n","import { AppConfiguration } from '../configuration';\r\nimport { getSessionToken, updateSessionToken } from '../session';\r\nimport * as types from './actionTypes.js';\r\nimport { ApiClient } from '../api';\r\n\r\nexport function loadClient(logError) {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return dispatch => {\r\n return new Promise(async resolve => {\r\n try {\r\n const apiClient = new ApiClient(apiRootUrl, sessionToken);\r\n const apiResult = await apiClient.get('client');\r\n if (apiResult.data.sessionToken) {\r\n updateSessionToken(apiResult.data.sessionToken);\r\n }\r\n resolve(dispatch(loadClientSuccess(apiResult.data.result)));\r\n } catch (error) {\r\n logError('client/actions', 'loadClient', error);\r\n resolve(dispatch(loadClientFailed()));\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport const loadClientSuccess = client => {\r\n return {\r\n type: types.LOAD_CLIENT_SUCCESS,\r\n client: client\r\n };\r\n};\r\n\r\nexport const loadClientFailed = () => {\r\n return { type: types.LOAD_CLIENT_FAILED };\r\n};\r\n","import { AppConfiguration } from '../configuration';\r\nimport { getSessionToken } from '../session';\r\nimport ReactGa from 'react-ga';\r\nimport * as types from './actionTypes.js';\r\nimport { ApiClient } from '../api';\r\n\r\nexport function loadAnalytics(logError) {\r\n const apiRootUrl = AppConfiguration.getApiRootUrl();\r\n const sessionToken = getSessionToken();\r\n return (dispatch) => {\r\n return new Promise(async (resolve) => {\r\n const client = new ApiClient(apiRootUrl, sessionToken);\r\n try {\r\n const apiResult = await client.get('analytics/trackingparams');\r\n const result = apiResult.data;\r\n const params = {\r\n code: result.Code,\r\n clientId: result.ClientID,\r\n clientName: result.ClientName,\r\n organizationId: result.OrganizationID,\r\n organizationName: result.OrganizationName,\r\n device: result.Device\r\n };\r\n resolve(dispatch(loadAnalyticsSuccess(params)));\r\n initializeGa(params);\r\n } catch (error) {\r\n logError('analytics/actions', 'loadAnalytics', error);\r\n resolve(dispatch(loadAnalyticsFailed()));\r\n }\r\n });\r\n };\r\n}\r\n\r\nconst formatParam = (id, name) => {\r\n var param = '';\r\n if (id && name && name.length > 0) {\r\n param = name + ' (' + id + ')';\r\n }\r\n return param;\r\n};\r\n\r\nconst initializeGa = (params) => {\r\n ReactGa.initialize(params.code, {\r\n standardImplementation: true,\r\n gaOptions: { cookieDomain: 'auto', cookieFlags: 'Secure' }\r\n });\r\n const clientParam = formatParam(params.clientId, params.clientName);\r\n if (clientParam.length > 0) {\r\n ReactGa.set({ dimension1: clientParam });\r\n }\r\n if (params.device && params.device.length > 0) {\r\n ReactGa.set({ dimension2: params.device });\r\n }\r\n const organizationParam = formatParam(params.organizationId, params.organizationName);\r\n if (organizationParam.length > 0) {\r\n ReactGa.set({ dimension3: organizationParam });\r\n }\r\n};\r\n\r\nexport const loadAnalyticsSuccess = (trackingParams) => {\r\n return {\r\n type: types.LOAD_ANALYTICS_SUCCESS,\r\n trackingParams: trackingParams\r\n };\r\n};\r\n\r\nexport const loadAnalyticsFailed = () => {\r\n return { type: types.LOAD_ANALYTICS_FAILED };\r\n};\r\n","export const links = [\r\n {\r\n title: 'Return Pass',\r\n description: 'Daily coronavirus self-checker to be cleared to return to work',\r\n url: 'Health/ReturnPass',\r\n image: 'quicklinks_icon_return_pass.svg',\r\n priority: 1,\r\n requiredServices: ['ReturnPassAttestation'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'COVID Results',\r\n description: 'View results for your COVID test.',\r\n url: 'Home/BiometricScreening',\r\n image: 'quicklinks_icon_return_pass_results.svg',\r\n priority: 1,\r\n requiredServices: [],\r\n services: ['CovidAbTesting', 'CovidDxTesting'],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Report COVID Test Results',\r\n description: 'Report COVID Test Results',\r\n url: 'Health/CovidTest',\r\n image: 'quicklinks_icon_report_covid_results.svg',\r\n priority: 1,\r\n requiredServices: ['SelfReportCovidTest'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n\r\n {\r\n title: 'COVID Testing',\r\n description: 'Download a COVID Voucher or schedule an appointment to get tested.',\r\n url: 'Home/BiometricScreening',\r\n image: 'quicklinks_icon_return_pass_testing.svg',\r\n priority: 1,\r\n requiredServices: [],\r\n services: ['CovidAbTesting', 'CovidDxTesting'],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Resolve a Billing Issue',\r\n description: 'Dealing with insurance companies can be hard. Let us do it for you!',\r\n url: 'Finance/ClaimsResolution',\r\n image: 'quicklinks_icon_resolve_billing.svg',\r\n priority: 1,\r\n requiredServices: ['CoreAdvocacy'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Find a Doctor',\r\n description: 'Locate in-network providers.',\r\n url: 'Health/GetCare',\r\n image: 'quicklinks_icon_find_a_doctor.svg',\r\n priority: 2,\r\n requiredServices: ['CoreAdvocacy'],\r\n services: [],\r\n exclusionTypes: ['HealthgradesDoctorLocator'],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Message an Advocate',\r\n description: 'Need help? We’re just a click away.',\r\n url: 'Home/Message',\r\n image: 'quicklinks_icon_message_advocate.svg',\r\n priority: 3,\r\n requiredServices: ['CoreAdvocacy'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Take the Personal Health Profile',\r\n description: 'Learn if you have any health risks.',\r\n url: 'Health/PersonalHealthProfile',\r\n image: 'quicklinks_icon_take_the_php.svg',\r\n priority: 4,\r\n requiredServices: ['Wellness', 'Wellness_PHP'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Join a Challenge',\r\n description: 'Challenge yourself to achieve your goals.',\r\n url: 'Wellbeing/Challenges',\r\n image: 'quicklinks_icon_join_challenge.svg',\r\n priority: 5,\r\n requiredServices: ['Wellness'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Sync My Fitness Device',\r\n description: 'Click here to sync your devices.',\r\n url: 'Home/Settings?section=fitness',\r\n image: 'quicklinks_icon_link_my_fitness_devices.svg',\r\n priority: 6,\r\n requiredServices: ['Wellness'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Log My Activity',\r\n description: 'Use health trackers to keep tabs on your progress.',\r\n url: 'Wellbeing/ChallengeTrackers',\r\n image: 'quicklinks_icon_log_my_activity.svg',\r\n priority: 7,\r\n requiredServices: ['Wellness'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Search for Recipes',\r\n description:\r\n \"We'll help you take the guesswork out of healthy eating through delicious recipes and easy meal plans.\",\r\n url: 'Wellbeing/Nutrition',\r\n image: 'quicklinks_icon_nutrition.svg',\r\n priority: 7,\r\n requiredServices: ['Nutrition_Meredith'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Find High-Quality, Low-Cost Providers',\r\n description: 'Compare quality and costs in your area.',\r\n url: 'Finance/HealthCostEstimatorPlus',\r\n image: 'quicklinks_icon_low_cost_providers.svg',\r\n priority: 1,\r\n requiredServices: ['HCEPlus'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n\r\n {\r\n title: 'Providers of Distinction Search',\r\n description: 'Find providers participating in the incentive program in Connecticut',\r\n url: 'Finance/healthnavigator',\r\n image: 'quicklinks_icon_find_a_doctor.svg',\r\n priority: 10,\r\n requiredServices: ['HealthNavigator'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Improve My Personal Finances',\r\n description: 'Start with a confidential assessment to learn where to begin.',\r\n url:\r\n 'https://healthadvocate.personaladvantage.com/gateway.jsp?SingleSignIn:refid=<#REFID#>&SingleSignIn:target=/portal/content/10113924;subject=10000073',\r\n image: 'quicklinks_icon_improve_personal_finances.svg',\r\n priority: 1,\r\n requiredServices: ['FinancialWellness'],\r\n services: [],\r\n exclusionTypes: ['Finance'],\r\n openNewWindow: true\r\n },\r\n {\r\n title: 'Legal Center',\r\n description: 'Access state-specific legal forms and information.',\r\n url:\r\n 'https://healthadvocate.personaladvantage.com/gateway.jsp?SingleSignIn:refid=<#REFID#>&SingleSignIn:target=subject/10000313;subject=10000313',\r\n image: 'quicklinks_icon_create_a_will.svg',\r\n priority: 1,\r\n requiredServices: [],\r\n services: ['EAP', 'SAP', 'WorkLife'],\r\n exclusionTypes: [],\r\n openNewWindow: true\r\n },\r\n {\r\n title: 'Telemedicine Consult',\r\n description: 'Connect to a MeMD medical provider instantly.',\r\n url: 'Shared/GetMeMdLogin',\r\n image: 'quicklinks_icon_telemedicine.svg',\r\n priority: 1,\r\n requiredServices: ['Telemedicine'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: true\r\n },\r\n {\r\n title: 'Telemedicine Consult',\r\n description: 'Connect to a MeMD medical provider instantly.',\r\n url: '',\r\n image: 'quicklinks_icon_telemedicine.svg',\r\n priority: 9,\r\n requiredServices: ['ExternalTelemedicineProvider'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: true\r\n },\r\n {\r\n title: 'Schedule a Flu Shot',\r\n description: 'Schedule your onsite flu shot with Health Advocate and view your flu shot information here.',\r\n url: 'Home/FluShot',\r\n image: 'quicklinks_icon_schedule_flu_shot.svg',\r\n priority: 8,\r\n requiredServices: ['FluShot'],\r\n services: [],\r\n exclusionTypes: ['FluShotCard'],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Send Health Screening Results to Physician',\r\n description: 'Request your screening results to be faxed',\r\n url: 'Biometrics/Fax',\r\n image: 'quicklinks_icon_send_biometrics.svg',\r\n priority: 7,\r\n requiredServices: ['BiometricScreenings'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Schedule a Health Screening',\r\n description: 'Schedule an appointment, view results, or download forms for your Biometric Screening program.',\r\n url: 'Home/BiometricScreening',\r\n image: 'quicklinks_icon_schedule_biometric_screening.svg',\r\n priority: 9,\r\n requiredServices: ['BiometricScreenings'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Save $$ on Prescriptions',\r\n description: 'Save $$ on Prescriptions.',\r\n url: 'Finance/PrescriptionDiscountCard',\r\n image: 'quicklinks_icon_rxCard.svg',\r\n priority: 10,\r\n requiredServices: ['RxDiscountCard'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Health Education',\r\n description: '',\r\n url: 'https://www.healthwise.net/healthadvocate/Content/CustDocument.aspx?XML=STUB.XML&XSL=CD.FRONTPAGE.XSL',\r\n image: 'quicklinks_icon_health_education.svg',\r\n priority: 1,\r\n requiredServices: ['HealthwiseHealthTopics'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: true\r\n },\r\n {\r\n title: 'Decision Support',\r\n description: '',\r\n url: 'https://www.healthwise.net/healthadvocate/Content/StdDocument.aspx?DOCHWID=share',\r\n image: 'quicklinks_icon_decision_support.svg',\r\n priority: 1,\r\n requiredServices: ['HealthwiseDecisionPoints'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: true\r\n },\r\n {\r\n title: 'Symptom Checker',\r\n description: '',\r\n url: 'https://www.healthwise.net/healthadvocate/sxchecker/index',\r\n image: 'quicklinks_icon_symptom_checker.svg',\r\n priority: 1,\r\n requiredServices: ['HealthwiseSymptomChecker'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: true\r\n },\r\n {\r\n title: 'Practice Mindfulness & Reduce Stress',\r\n description: '',\r\n url: 'Wellbeing/Mindfulness',\r\n image: 'quicklinks_icon_mindfulness.svg',\r\n priority: 1,\r\n requiredServices: [],\r\n services: ['Wellness'],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Focus on Financial Health',\r\n description: '',\r\n url: 'Wellbeing/FinancialHealth',\r\n image: 'quicklinks_icon_financial_health.svg',\r\n priority: 1,\r\n requiredServices: [],\r\n services: ['Wellness'],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Achieve a Healthy Weight',\r\n description: '',\r\n url: 'Wellbeing/HealthyWeight',\r\n image: 'quicklinks_icon_healthy_weight.svg',\r\n priority: 1,\r\n requiredServices: [],\r\n services: ['Wellness'],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Improve My Eating Habits',\r\n description: '',\r\n url: 'Wellbeing/EatHealthy',\r\n image: 'quicklinks_icon_eat_healthy.svg',\r\n priority: 1,\r\n requiredServices: [],\r\n services: ['Wellness'],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Be More Active',\r\n description: '',\r\n url: 'Wellbeing/PhysicalActivity',\r\n image: 'quicklinks_icon_physical_activity.svg',\r\n priority: 1,\r\n requiredServices: [],\r\n services: ['Wellness'],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Report COVID Vaccination Status',\r\n description: '',\r\n url: 'Home/Message?source=vaccination',\r\n image: 'quicklinks_icon_upload_vacc_card.svg',\r\n priority: 1,\r\n requiredServices: ['CovidVaccinationForms'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: false\r\n },\r\n {\r\n title: 'Benefits Selection Tool',\r\n description: '',\r\n url: '',\r\n image: 'quicklinks-icon-benefit-selectiont.svg',\r\n priority: 1,\r\n requiredServices: ['PicWellSelectionTool'],\r\n services: [],\r\n exclusionTypes: [],\r\n openNewWindow: true\r\n }\r\n];\r\n","import React from 'react';\r\nimport { Image } from 'react-bootstrap';\r\nimport './quickLinksItem.scss';\r\nimport { AppConfiguration } from '../configuration';\r\n\r\nexport const QuickLinksItem = ({ text, image, url, openNewWindow, itemClass }) => {\r\n const nativeApp = AppConfiguration.isNativeApp();\r\n let fullUrl = !openNewWindow ? `${AppConfiguration.getSiteRootUrl()}${url}` : url;\r\n let target = '_self';\r\n if (nativeApp && openNewWindow) {\r\n fullUrl = `newtab:${fullUrl}`;\r\n } else if (openNewWindow && !nativeApp) {\r\n target = '_blank';\r\n }\r\n\r\n return (\r\n \r\n );\r\n};\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport { Spinner } from 'react-bootstrap';\r\nimport { AppConfiguration } from '../configuration';\r\nimport { links } from './links';\r\nimport { QuickLinksItem } from './quickLinksItem';\r\nimport './quickLinksItems.scss';\r\nimport { ErrorCard } from '../shared/error';\r\n\r\nexport const QuickLinksItems = () => {\r\n const [itemClass, setItemClass] = useState('col-lg-2 col-md-2 col-sm-6 col-6 quick-links-item ');\r\n const loading = useSelector(\r\n (state) =>\r\n state.clientServices.loading ||\r\n state.contentExclusions.loading ||\r\n state.clients.loading ||\r\n state.organizationConfigurations.loading\r\n );\r\n const error = useSelector(\r\n (state) => state.clientServices.error || state.contentExclusions.error || state.clients.error\r\n );\r\n const clientServices = useSelector((state) => state.clientServices.list);\r\n const client = useSelector((state) => state.clients.client);\r\n const contentExclusions = useSelector((state) => state.contentExclusions.list);\r\n const organizationConfigurations = useSelector((state) => state.organizationConfigurations.list);\r\n let quickLinks = [];\r\n\r\n useEffect(() => {\r\n handleItemClass(quickLinks, setItemClass);\r\n }, [quickLinks]);\r\n\r\n // show error card\r\n if (error) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n quickLinks = quickLinkItems(\r\n links,\r\n loading,\r\n client,\r\n clientServices,\r\n contentExclusions,\r\n itemClass,\r\n organizationConfigurations\r\n );\r\n return <>{quickLinks};\r\n};\r\n\r\n// Update class based on number of items\r\nconst handleItemClass = (quickLinks, setItemClass) => {\r\n if (quickLinks && quickLinks.length < 13) {\r\n return setItemClass('col-md-2 col-sm-6 col-6 quick-links-item ');\r\n }\r\n if (quickLinks && quickLinks.length > 12 && quickLinks.length < 15) {\r\n return setItemClass('col-lg-13 col-md-2 col-sm-6 col-6 quick-links-item ');\r\n }\r\n};\r\n\r\n// Iterate all link components defined in links.js & determine which to show\r\nconst quickLinkItems = (\r\n links,\r\n loading,\r\n client,\r\n clientServices,\r\n clientExclusions,\r\n itemClass,\r\n organizationConfigurations\r\n) => {\r\n let linkComponents = links.map((link, index) => {\r\n const refIdToken = '<#REFID#>';\r\n const { title, image, openNewWindow } = link;\r\n let url = link.url;\r\n if (loading) return getLoadingIndicator(index);\r\n const match = servicesMatch(link, clientServices);\r\n const excluded = itemExcluded(link, clientExclusions);\r\n if (!match || excluded) {\r\n return null;\r\n }\r\n // Replace workref token if in url w/ real ID\r\n url = url.replace(refIdToken, client.workLifeRefId);\r\n\r\n // If memd - but NOT sso, use custom url instead\r\n if (\r\n link.requiredServices.includes('Telemedicine') ||\r\n link.requiredServices.includes('ExternalTelemedicineProvider')\r\n ) {\r\n url = client.meMdSsoEnabled ? url : client.meMdUrl;\r\n }\r\n if (link.requiredServices.includes('Telemedicine') && client.meMdSsoEnabled) {\r\n url = `${AppConfiguration.getSiteRootUrl()}${url}`;\r\n }\r\n\r\n if (link.requiredServices.includes('PicWellSelectionTool')) {\r\n let picwellUrl = organizationConfigurations.find((config) => {\r\n return config.LookupCode === 'PWELL_URL';\r\n }).Value;\r\n if (picwellUrl) url = picwellUrl;\r\n }\r\n // TODO: same URL logic as above for 'external telemed service' - get URL from client.meMdUrl\r\n return (\r\n \r\n );\r\n });\r\n // Remove null items (ie. not to be shown)\r\n linkComponents = linkComponents.filter((x) => !!x);\r\n return linkComponents;\r\n};\r\n\r\nconst getLoadingIndicator = (index) => {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nconst servicesMatch = (link, clientServices) => {\r\n let required = link.requiredServices.length === 0;\r\n if (link.requiredServices && link.requiredServices.length > 0 && clientServices && clientServices.length > 0) {\r\n required =\r\n clientServices.filter((value) => link.requiredServices.includes(value)).length === link.requiredServices.length;\r\n }\r\n\r\n let match = link.services.length === 0;\r\n if (link.services && link.services.length > 0 && clientServices && clientServices.length > 0) {\r\n match = clientServices.filter((value) => link.services.includes(value)).length > 0;\r\n }\r\n return required && match;\r\n};\r\n\r\nconst itemExcluded = (link, clientExclusions) => {\r\n let excluded = false;\r\n if (link.exclusionTypes && link.exclusionTypes.length > 0 && clientExclusions && clientExclusions.length > 0) {\r\n excluded = clientExclusions.filter((value) => link.exclusionTypes.includes(value)).length > 0;\r\n }\r\n return excluded;\r\n};\r\n","import React from 'react';\r\nimport { QuickLinksItems } from './quickLinksItems';\r\nimport './quickLinksView.scss';\r\nimport { Container, Row, Col } from 'react-bootstrap';\r\nimport { ErrorBoundry } from '../shared';\r\n\r\nexport const QuickLinksView = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n

    I would like to...

    \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 { MdKeyboardBackspace } from 'react-icons/md';\r\nimport { Button } from 'react-bootstrap';\r\nimport './selfCheckerQuestionnaire.scss';\r\nexport const SelfCheckerQuestionnaire = (props) => {\r\n return (\r\n
    \r\n {props.current.id != 10 && (\r\n <>\r\n

    {props.current.question}

    \r\n
      \r\n {props.current.lists.map((list, key) => {\r\n return (\r\n
    • \r\n {list}\r\n
    • \r\n );\r\n })}\r\n
    \r\n

    {props.current.additionalText}

    \r\n
    \r\n \r\n {props.current.id !== 4 && (\r\n \r\n )}\r\n
    \r\n \r\n )}\r\n {props.children}\r\n {props.current.id !== 1 && (\r\n
    \r\n \r\n
    \r\n )}\r\n
    \r\n );\r\n};\r\n","import React from 'react';\r\nimport { AppConfiguration } from '../configuration';\r\nimport './selfCheckerCertificate.scss';\r\nimport { MdPrint } from 'react-icons/md';\r\n\r\nexport const SelfCheckerCertificate = props => {\r\n return (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    {props.certHeader}
    \r\n
    {props.certHeaderText}
    \r\n
    \r\n

    {props.certDate}

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

    {props.certTime}

    \r\n
    \r\n
    \r\n
    \r\n {!AppConfiguration.isNativeApp() ? (\r\n {\r\n window.print();\r\n }}\r\n className=\"cta noprint\">\r\n \r\n
    \r\n ) : null}\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    {props.certName}

    \r\n

    {props.certDate}

    \r\n

    {props.certTime}

    \r\n
    \r\n {props.certBody}\r\n
    \r\n
    \r\n );\r\n};\r\n","export const safeToWork = 'SafeToWork';\r\nexport const stayHome = 'StayHome';\r\nexport const getCare = 'GetCare';\r\nexport const fahrenheit = 'Fahrenheit';\r\nexport const celsius = 'Celsius';\r\n","import React from 'react';\r\n\r\nexport const NoAttestationHistory = () => {\r\n return (\r\n
    \r\n
    \r\n

    \r\n No Return Pass certificates have been added.\r\n

    \r\n
    \r\n
    \r\n );\r\n};\r\n","import React from 'react';\r\nimport { MdHome, MdBusinessCenter } from 'react-icons/md';\r\nimport { FaAmbulance } from 'react-icons/fa';\r\n\r\nexport const attestationText =\r\n 'I attest that I completed the CDC Self-Checker to the best of my knowledge based on my current health status.';\r\nexport const shortenedAttestationText =\r\n 'I attest that I have answered the questionnaire to the best of my knowledge based on my current health status.';\r\nexport const introText = (\r\n <>\r\n

    \r\n Complete the below questionnaire to determine if you are Cleared to Return to the workplace.\r\n

    \r\n \r\n);\r\nexport const hideTemperatureIntroText = (\r\n <>\r\n

    \r\n Complete the below questionnaire to determine if you are Cleared to Return to the workplace.\r\n

    \r\n \r\n);\r\nexport const shortenedQuestionnaireIntroText = (\r\n <>\r\n

    \r\n The CDC's Coronavirus Self-Checker is experiencing technical difficulties. Complete the shortened questionnaire\r\n below to determine if you are cleared to return to the workplace.\r\n

    \r\n

    \r\n If you think you are experiencing a medical emergency, please call 911 immediately.\r\n

    \r\n \r\n);\r\nexport const btnText =\r\n 'Almost done! Select the status below that describes your result from the questionnaire. If you’re not sure what to choose, click “help me decide” below.';\r\n\r\nexport const shortenedBtnText =\r\n 'Almost done! If you answered no to all the questions, select “Cleared”. If you answered yes to any of the questions, and/or have a fever, you are “Not cleared” to return to work';\r\n\r\nexport const shortenedBtnTextWithoutTemperature =\r\n 'Almost done! If you answered no to all the questions, select “Cleared”. If you answered yes to any of the questions, you are “Not cleared” to return to work';\r\n\r\nexport const clearedHeader = (\r\n <>\r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n);\r\n\r\nexport const notClearedHeader = (\r\n <>\r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n);\r\nexport const seekCareHeader = (\r\n <>\r\n
    \r\n \r\n \r\n \r\n
    \r\n \r\n);\r\nexport const clearedBodyText = (\r\n <>\r\n

    Cleared to Return to Work

    \r\n

    \r\n You are cleared to return to work today. Each time you badge into or otherwise enter the company’s facilities, you\r\n will be confirming that you received a Cleared to Return to Work Pass for that day.\r\n

    \r\n

    Your employer will automatically be sent your results.

    \r\n

    \r\n \r\n If you have any questions, contact your Human Resources department or Health Advocate by selecting the telephone\r\n icon at the bottom of the screen.\r\n \r\n

    \r\n \r\n);\r\n\r\nexport const notClearedBodyText = (\r\n <>\r\n

    NOT cleared to Return to Work

    \r\n

    \r\n If you receive a NOT cleared to Return to Work Pass either now or at any time in the future, you must notify your\r\n manager, company contact, HR Partner, or follow your company’s Coronavirus process as soon as possible. Depending\r\n on your specific responses, you may be required to remain out of the company’s facilities and work from home, if\r\n applicable, for a time period.\r\n

    \r\n

    \r\n Please note: Each time you badge into or otherwise enter the company’s facilities, you will be confirming that you\r\n received a Cleared to Return to Work Pass for that day.\r\n

    \r\n

    Your employer will automatically be sent your results.

    \r\n

    \r\n \r\n If you have any questions, contact your Human Resources department or Health Advocate by selecting the telephone\r\n icon at the bottom of the screen.\r\n \r\n

    \r\n \r\n);\r\n\r\nexport const seekCareBodyText = (\r\n <>\r\n

    Seek Emergency Care

    \r\n

    \r\n Urgent medical attention may be needed. Please call 911 or go to the Emergency Department. Based\r\n on your symptoms, urgent medical attention may be needed. Please call 911 or go to the nearest emergency\r\n department. Tell the 911 operator or emergency staff if you have had contact with someone with COVID-19 or if you\r\n have recently been to an area where COVID-19 is spreading.\r\n

    \r\n \r\n);\r\n","import React, { useState } from 'react';\r\nimport { useSelector } from 'react-redux';\r\nimport moment from 'moment';\r\nimport { MdHome, MdBusinessCenter } from 'react-icons/md';\r\nimport { FaAmbulance, FaChevronCircleRight } from 'react-icons/fa';\r\nimport { CoronaVirusSelfCheckerType } from '../../members/attestations';\r\nimport { MdKeyboardArrowLeft } from 'react-icons/md';\r\nimport { SelfCheckerCertificate } from '../selfCheckerCertificate';\r\nimport * as statusTypes from '../checkerStatusTypes';\r\nimport './selfCheckerHistory.scss';\r\nimport { NoAttestationHistory } from './noAttestationHistory';\r\nimport * as attestationBody from '../attestationBody';\r\nexport const SelfCheckerHistory = () => {\r\n const [certIsOpen, setCertOpen] = useState(false);\r\n const [openHistory, setOpenHistory] = useState(true);\r\n const [certificate, setCertDate] = useState({\r\n name: '',\r\n header: '',\r\n headerText: '',\r\n date: '',\r\n time: '',\r\n body: ''\r\n });\r\n const member = useSelector((state) => state.members);\r\n const members = member ? member.member : [];\r\n const attestationHistory = useSelector((state) => state.memberAttestations.byType[CoronaVirusSelfCheckerType]);\r\n const attestations = attestationHistory ? attestationHistory.attestations || [] : [];\r\n\r\n let currentCertName = members ? members.firstName + ' ' + members.lastName : null;\r\n const certToStayHome = (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n const certToWork = (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n const certToER = (\r\n <>\r\n \r\n \r\n \r\n \r\n );\r\n const attestationHistoryComponents =\r\n attestations.length > 0\r\n ? attestations.map((attestation, index) => {\r\n const certDate = moment(attestation.signOffDateTimeUtc).format('LL');\r\n const certTime = moment(attestation.signOffDateTimeUtc).format('h:mm a').toLocaleUpperCase();\r\n const certBody =\r\n attestation.result === statusTypes.stayHome\r\n ? attestationBody.notClearedBodyText\r\n : attestation.result === statusTypes.safeToWork\r\n ? attestationBody.clearedBodyText\r\n : attestation.result === statusTypes.getCare\r\n ? attestationBody.seekCareBodyText\r\n : null;\r\n\r\n return (\r\n {\r\n e.preventDefault();\r\n setCertOpen(true);\r\n setOpenHistory(false);\r\n setCertDate({\r\n header:\r\n attestation.result === statusTypes.stayHome\r\n ? attestationBody.notClearedHeader\r\n : attestation.result === statusTypes.safeToWork\r\n ? attestationBody.clearedHeader\r\n : attestation.result === statusTypes.getCare\r\n ? attestationBody.seekCareHeader\r\n : null,\r\n date: certDate,\r\n name: currentCertName,\r\n time: certTime,\r\n body: certBody,\r\n headerText:\r\n attestation.result === statusTypes.stayHome ? (\r\n NOT cleared to Return to Work\r\n ) : attestation.result === statusTypes.safeToWork ? (\r\n Cleared to Return to Work\r\n ) : attestation.result === statusTypes.getCare ? (\r\n Seek Emergency Care\r\n ) : null\r\n });\r\n }}>\r\n
    \r\n
    \r\n
    \r\n {attestation.result === statusTypes.stayHome\r\n ? certToStayHome\r\n : attestation.result === statusTypes.safeToWork\r\n ? certToWork\r\n : attestation.result === statusTypes.getCare\r\n ? certToER\r\n : null}\r\n
    \r\n
    \r\n
    \r\n
    \r\n {attestation.result === statusTypes.stayHome ? (\r\n NOT cleared to Return to Work\r\n ) : attestation.result === statusTypes.safeToWork ? (\r\n Cleared to Return to Work\r\n ) : attestation.result === statusTypes.getCare ? (\r\n Seek Emergency Care\r\n ) : null}\r\n
    \r\n
    \r\n\r\n
    \r\n
    {certDate}
    \r\n
    \r\n\r\n
    \r\n
    {certTime}
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n );\r\n })\r\n : null;\r\n const printTableCertificate = (\r\n \r\n );\r\n\r\n const handTableCertificate = () => {\r\n if (openHistory) {\r\n if (!attestationHistoryComponents || attestationHistoryComponents.length === 0) {\r\n return ;\r\n } else {\r\n return attestationHistoryComponents;\r\n }\r\n }\r\n if (certIsOpen) {\r\n return (\r\n <>\r\n {\r\n setCertOpen(false);\r\n setOpenHistory(true);\r\n }}>\r\n \r\n Back to History\r\n \r\n {printTableCertificate}\r\n \r\n );\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n
    {handTableCertificate()}
    \r\n
    \r\n );\r\n};\r\n","export const questions = [\r\n {\r\n id: 1,\r\n question: 'Have you experienced any of the following symptoms in the past 48 hours?',\r\n answer: '',\r\n lists: [\r\n 'fever or chills',\r\n 'new or unexplained onset of cough, shortness of breath or difficulty breathing',\r\n 'new or unexplained muscle aches',\r\n 'new or unexplained loss of taste or smell'\r\n ]\r\n },\r\n {\r\n id: 2,\r\n question:\r\n 'Are you isolating or quarantining because you tested positive for COVID-19 or are worried that you may be sick with COVID-19?',\r\n answer: '',\r\n lists: [],\r\n additionalText: ''\r\n },\r\n {\r\n id: 3,\r\n question:\r\n 'Have you been in close physical contact* in the last 10 days with anyone who has tested positive for COVID-19?',\r\n answer: '',\r\n lists: [],\r\n additionalText:\r\n '*Close physical contact is defined as being within 6 feet of an infected/symptomatic person for a cumulative total of 15 minutes or more over a 24 hour period starting from 48 hours before illness onset (or, for asymptomatic individuals, 48 hours prior to test specimen collection)'\r\n },\r\n {\r\n id: 4,\r\n question: 'Wear a mask at work for 10 days following exposure',\r\n answer: '',\r\n lists: [\r\n 'Get tested 5 days after exposure',\r\n 'If you develop symptoms, immediately leave campus, isolate and consult with your healthcare provider'\r\n ],\r\n additionalText: ''\r\n },\r\n {\r\n id: 5,\r\n question: 'Are you fully vaccinated with the primary series of COVID-19 vaccination?',\r\n answer: '',\r\n lists: ['OR', 'Have you recovered from a documented COVID-19 infection in the last 3 months?'],\r\n additionalText:\r\n '*To be considered fully vaccinated, you must be ≥2 weeks following receipt of the second dose in a 2 dose series or ≥2 weeks following receipt of one dose of a single dose vaccine'\r\n },\r\n {\r\n id: 6,\r\n question: 'Have you:',\r\n answer: '',\r\n lists: [\r\n 'Have you recovered from a documented COVID-19 infection in the last 3 months? OR',\r\n 'Received a booster COVID-19 vaccination shot? OR',\r\n 'Completed the primary series of Pfizer-BioNTech within the last 5 months? OR',\r\n 'Completed the primary series of Moderna within the last 6 months? OR',\r\n 'Completed the primary series of J&J vaccine within the last two months?'\r\n ],\r\n additionalText: ''\r\n },\r\n\r\n {\r\n id: 7,\r\n question: 'Have you quarantined for at least 5 days after you were exposed to COVID-19?',\r\n answer: '',\r\n lists: [],\r\n additionalText: ''\r\n },\r\n {\r\n id: 8,\r\n question:\r\n 'Did you have a negative COVID-19 test taken at least 5 days after your last exposure to the close contact?',\r\n answer: '',\r\n lists: [],\r\n additionalText: ''\r\n },\r\n {\r\n id: 9,\r\n question: 'Have you traveled * in the past 5 days?',\r\n answer: '',\r\n lists: [],\r\n additionalText:\r\n '*Travel is defined as any trip that is overnight AND on public transportation (plane, train, bus, Uber, Lyft, cab, etc.) OR any trip that is overnight AND with people who are not in your household.'\r\n },\r\n\r\n {\r\n id: 10,\r\n question: '',\r\n answer: '',\r\n lists: [],\r\n additionalText: ''\r\n }\r\n];\r\n","import React from 'react';\r\nimport Modal from 'react-modal';\r\nconst customStyles = {\r\n content: {\r\n top: '50%',\r\n left: '50%',\r\n right: 'auto',\r\n bottom: 'auto',\r\n marginRight: '-47%',\r\n width: 'auto',\r\n maxWidth: '33rem',\r\n transform: 'translate(-50%, -50%)',\r\n borderRadius: '2px',\r\n border: '1px solid #948E94'\r\n }\r\n};\r\n\r\nexport const SelfCheckerHelpModal = (props) => {\r\n let subtitle;\r\n return (\r\n {}}>\r\n
    (subtitle = _subtitle)} className=\"modal-content\">\r\n
    \r\n
    \r\n
    \r\n

    \r\n After completing the self-checker, look for the CDC guidance message. Use the table below to determine\r\n the appropriate selection.\r\n

    \r\n {subtitle}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n CDC Guidance\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n “Sounds like you (they) are feeling okay.”\r\n “Monitor for symptoms, wear a mask\"\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \"Sorry you (they) are feeling sick. Stay home (keep them home) and monitor your (their) symptoms.\r\n Call your (their) medical provider if you get worse.\"\r\n \r\n \"Contact the occupational health provider at your workplace.\"\r\n \r\n \"Contact a medical provider in the care center, nursing home, or homeless shelter where you (they)\r\n live.\"\r\n \r\n \"Monitor for symptoms, stay at home.\"\r\n \r\n \"Stay home and take care of yourself. Call your provider if you get worse.\"\r\n \r\n \r\n \"Sounds like you (they) may have symptoms of COVID-19. You (they) should get tested for COVID-19.\"\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \"Urgent medical attention may be needed. Please call 911 or go to the Emergency Department \"\r\n \r\n \r\n \r\n \r\n \r\n
    Select Option
    Cleared
    Not Cleared
    Seek Care
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport Modal from 'react-modal';\r\nconst customStyles = {\r\n content: {\r\n top: '50%',\r\n left: '50%',\r\n right: 'auto',\r\n bottom: 'auto',\r\n marginRight: '-47%',\r\n width: 'auto',\r\n maxWidth: '33rem',\r\n transform: 'translate(-50%, -50%)',\r\n borderRadius: '2px',\r\n border: '1px solid #948E94'\r\n }\r\n};\r\n\r\nexport const SelfCheckerTemperatureModal = (props) => {\r\n let subtitle;\r\n return (\r\n {}}>\r\n
    (subtitle = _subtitle)} className=\"modal-content\">\r\n
    \r\n
    \r\n
    \r\n

    Before taking your temperature

    \r\n {subtitle}\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n

    \r\n Wait 30 minutes after eating, drinking, or exercising, and Wait at least 6 hours after taking medicines that\r\n can lower your temperature, like: Acetaminophen, Ibuprofen, or aspirin.\r\n

    \r\n

    How to Take Your Temperature

    \r\n
    \r\n
      \r\n
    1. Turn on the thermometer.
    2. \r\n
    3. Hold the top of the thermometer under your tongue until it beeps. Do not bite the thermometer.
    4. \r\n
    5. \r\n Read your temperature on the screen. If your temperature is 100.4°F/38°C or higher, you have a fever.\r\n
    6. \r\n
    7. Record your temperature.
    8. \r\n
    9. Clean your thermometer with soap and water and dry it well.
    10. \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { addAttestation } from '../members/attestations';\r\nimport * as attestationBody from './attestationBody';\r\nimport { CoronaVirusSelfCheckerType } from '../members/attestations';\r\nimport { SelfCheckerHelpModal } from './selfCheckerHelpModal';\r\nimport { SelfCheckerTemperatureModal } from './selfCheckerTemperatureModal';\r\nimport { FaQuestionCircle } from 'react-icons/fa';\r\nimport * as checkerStatusTypes from './checkerStatusTypes';\r\nimport './attestationForm.scss';\r\nexport const AttestationForm = (props) => {\r\n const attestationHistory = useSelector(\r\n (state) => state.memberAttestations.byType[CoronaVirusSelfCheckerType] || null\r\n );\r\n const showTemperatureField = attestationHistory ? attestationHistory.showTemperature : true;\r\n const reAttestHours = attestationHistory ? attestationHistory.reAttestHours : 0;\r\n const [signedOff, setSignedOff] = useState(false);\r\n const [modalIsOpen, setIsOpen] = useState(false);\r\n const [temperatureModalIsOpen, setTemperatureIsOpen] = useState(false);\r\n const dispatch = useDispatch();\r\n let reAttestText = `You can only submit this form once every ${reAttestHours} hours.`;\r\n if (reAttestHours === 1) reAttestText = 'You can only submit this form once every hour.';\r\n const attestationText = props.showCdcIframe\r\n ? attestationBody.attestationText\r\n : attestationBody.shortenedAttestationText;\r\n\r\n return (\r\n
    \r\n {\r\n e.preventDefault();\r\n dispatch(\r\n addAttestation(CoronaVirusSelfCheckerType, attestationText, props.cdcResult, props.submittedTemperature)\r\n );\r\n props.handleCert();\r\n }}>\r\n {/* Temperature field */}\r\n {showTemperatureField ? (\r\n
    \r\n

    Please enter your temperature

    \r\n\r\n
    \r\n \r\n \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n
    \r\n {\r\n e.preventDefault();\r\n }}>\r\n -\r\n \r\n
    \r\n\r\n \r\n
    \r\n \r\n {props.temperatureUnit === checkerStatusTypes.celsius ? °C : °F}\r\n \r\n {\r\n e.preventDefault();\r\n }}>\r\n +\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {\r\n setTemperatureIsOpen(true);\r\n }}>\r\n \r\n \r\n \r\n How to take my temperature\r\n

    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n {props.temperatureUnit === checkerStatusTypes.celsius ? (\r\n 38.0°C or greater is considered a fever.\r\n ) : (\r\n 100.4 or greater is considered a fever. \r\n )}\r\n
    \r\n
    \r\n
    \r\n ) : null}\r\n {/* end of temperature field */}\r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n {reAttestHours ? (\r\n

    \r\n Note: {reAttestText}\r\n

    \r\n ) : null}\r\n
    \r\n \r\n
    \r\n
    \r\n \r\n\r\n {\r\n setIsOpen(false);\r\n }}\r\n />\r\n\r\n {\r\n setTemperatureIsOpen(false);\r\n }}\r\n />\r\n
    \r\n );\r\n};\r\nconst getButtonClass = (currentButton, cdcResult) => {\r\n if (currentButton === cdcResult) {\r\n return 'cdc-button cdc-result-selection';\r\n }\r\n return 'cdc-button';\r\n};\r\n","import React, { useState, useRef } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { addAttestation } from '../members/attestations';\r\nimport moment from 'moment';\r\nimport { ErrorBoundry } from '../shared';\r\nimport { SelfCheckerQuestionnaire } from './selfCheckerQuestionnaire';\r\nimport { SelfCheckerHistory } from './history';\r\nimport { SelfCheckerCertificate } from './selfCheckerCertificate';\r\nimport { questions } from './questionnaire';\r\nimport * as attestationBody from './attestationBody';\r\nimport { CoronaVirusSelfCheckerType } from '../members/attestations';\r\nimport * as checkerStatusTypes from './checkerStatusTypes';\r\nimport { AttestationForm } from './attestationForm';\r\nimport { ErrorCard } from '../shared/error';\r\nimport './coronavirusSelfCheckerView.scss';\r\nimport { setIn } from 'formik';\r\n\r\nconst selfcheckerPanel = 'selfcheckerPanel';\r\nconst historyPanel = 'historyPanel';\r\n\r\nexport const CoronavirusSelfCheckerView = () => {\r\n const attestationHistory = useSelector(\r\n (state) => state.memberAttestations.byType[CoronaVirusSelfCheckerType] || null\r\n );\r\n const member = useSelector((state) => state.members);\r\n const members = member ? member.member : [];\r\n const attestations = attestationHistory ? attestationHistory.attestations : [];\r\n const dispatch = useDispatch();\r\n const canAttest = attestationHistory ? attestationHistory.canAttest : true;\r\n const showTemperatureField = attestationHistory ? attestationHistory.showTemperature : true;\r\n const isLoading = useSelector((state) => state.memberAttestations.loading);\r\n const error = useSelector((state) => state.memberAttestations.error || state.memberAttestations.addError);\r\n const [selectedTab, setSelectedTab] = useState(selfcheckerPanel);\r\n const [temperature, setTemperature] = useState(98.6);\r\n const [temperatureUnit, setTemperatureUnit] = useState(checkerStatusTypes.fahrenheit);\r\n const [cdcResult, setCdcResult] = useState(null);\r\n const [certificate, setCertificate] = useState(false);\r\n const viewCertificateRef = useRef(null);\r\n const rangeValueRef = useRef(null);\r\n const attestationText = attestationBody.attestationText;\r\n const [index, setIndex] = useState(0);\r\n const [previousIndex, setPreviousIndex] = useState(0);\r\n const [showQuestions, setShowQuestions] = useState(true);\r\n const [answers, setAnswers] = useState(questions);\r\n const currentQuestion = questions[index];\r\n\r\n const submittedTemperature =\r\n temperatureUnit === checkerStatusTypes.fahrenheit\r\n ? temperature\r\n : getSubmittedTemperature(temperatureUnit, temperature);\r\n\r\n // display error card\r\n if (error) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n const handleTabClick = (key) => {\r\n setSelectedTab(key);\r\n };\r\n\r\n const handleAnswers = (selection) => {\r\n return answers.map((answer) => {\r\n if (currentQuestion.id === answer.id) {\r\n return (answer.answer = selection);\r\n }\r\n return setAnswers([...answers]);\r\n });\r\n };\r\n const handlePrevQuestion = () => {\r\n if (previousIndex) {\r\n setIndex(previousIndex);\r\n }\r\n if (previousIndex === index) {\r\n setIndex(previousIndex - 1);\r\n setPreviousIndex(null);\r\n }\r\n if (!previousIndex) {\r\n setIndex(index - 1);\r\n }\r\n };\r\n\r\n const handleQuestionRedirects = () => {\r\n switch (index) {\r\n case 0:\r\n if (answers[index].answer === 'no') {\r\n setIndex(index + 1);\r\n }\r\n break;\r\n case 1:\r\n if (answers[index].answer === 'no') {\r\n setPreviousIndex(index);\r\n setIndex(2);\r\n }\r\n break;\r\n case 2:\r\n if (answers[index].answer === 'yes') setIndex(3);\r\n else {\r\n setIndex(9);\r\n }\r\n setPreviousIndex(2);\r\n break;\r\n case 3:\r\n if (answers[index].answer === 'yes') {\r\n setIndex(9);\r\n setPreviousIndex(3);\r\n }\r\n break;\r\n case 4:\r\n setPreviousIndex(4);\r\n if (answers[2].answer === 'no') {\r\n if (answers[4].answer === 'no') setIndex(7);\r\n else setIndex(5);\r\n } else {\r\n if (answers[4].answer === 'no') setIndex(9);\r\n else {\r\n if (answers[3].answer === 'yes') setIndex(3);\r\n if (answers[4].answer === 'yes' && answers[3].answer === 'no') setIndex(5);\r\n else {\r\n setIndex(8);\r\n }\r\n }\r\n }\r\n break;\r\n case 5:\r\n if (answers[index].answer === 'yes') {\r\n setIndex(6);\r\n }\r\n setPreviousIndex(1);\r\n break;\r\n case 6:\r\n if (answers[index].answer === 'yes') {\r\n if (answers[2].answer === 'no') {\r\n setIndex(7);\r\n } else {\r\n setIndex(8);\r\n }\r\n }\r\n setPreviousIndex(2);\r\n break;\r\n case 7:\r\n if (answers[index].answer === 'no') {\r\n setIndex(8);\r\n setPreviousIndex(5);\r\n }\r\n break;\r\n case 8:\r\n if (answers[index].answer === 'yes') {\r\n setIndex(9);\r\n setPreviousIndex(9);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n if (\r\n answers[0].answer === 'yes' ||\r\n answers[1].answer === 'yes' ||\r\n answers[5].answer === 'no' ||\r\n answers[6].answer === 'no' ||\r\n answers[7].answer === 'yes'\r\n ) {\r\n return dispatch(\r\n addAttestation(CoronaVirusSelfCheckerType, attestationText, checkerStatusTypes.stayHome, submittedTemperature)\r\n );\r\n }\r\n };\r\n\r\n const currentCertDate = attestations.length > 0 ? moment(attestations[0].signOffDateTimeUtc).format('LL') : null;\r\n const currentCertTime =\r\n attestations.length > 0 ? moment(attestations[0].signOffDateTimeUtc).format('h:mm a').toLocaleUpperCase() : null;\r\n const currentCertName = members ? members.firstName + ' ' + members.lastName : null;\r\n\r\n const tabContent = () => {\r\n //Start Self-Checker Panel & canAttest is false\r\n if (selectedTab === selfcheckerPanel && attestations.length > 0 && !canAttest) {\r\n return (\r\n \r\n NOT cleared to Return to Work\r\n ) : attestations[0].result === checkerStatusTypes.safeToWork ? (\r\n Cleared to Return to Work\r\n ) : attestations[0].result === checkerStatusTypes.getCare ? (\r\n Seek Emergency Care\r\n ) : null\r\n }\r\n certBody={\r\n attestations[0].result === checkerStatusTypes.stayHome\r\n ? attestationBody.notClearedBodyText\r\n : attestations[0].result === checkerStatusTypes.safeToWork\r\n ? attestationBody.clearedBodyText\r\n : attestations[0].result === checkerStatusTypes.getCare\r\n ? attestationBody.seekCareBodyText\r\n : null\r\n }\r\n />\r\n \r\n );\r\n }\r\n //Start Self-Checker Panel & canAttest is true\r\n if (selectedTab === selfcheckerPanel && canAttest) {\r\n if (certificate) {\r\n return (\r\n \r\n NOT cleared to Return to Work\r\n ) : cdcResult === checkerStatusTypes.safeToWork ? (\r\n Cleared to Return to Work\r\n ) : cdcResult === checkerStatusTypes.getCare ? (\r\n Seek Emergency Care\r\n ) : null\r\n }\r\n certBody={\r\n cdcResult === checkerStatusTypes.stayHome\r\n ? attestationBody.notClearedBodyText\r\n : cdcResult === checkerStatusTypes.safeToWork\r\n ? attestationBody.clearedBodyText\r\n : cdcResult === checkerStatusTypes.getCare\r\n ? attestationBody.seekCareBodyText\r\n : null\r\n }\r\n />\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n {\r\n e.preventDefault();\r\n handleAnswers('yes');\r\n handleQuestionRedirects();\r\n }}\r\n no={() => {\r\n if (index < 9) {\r\n handleAnswers('no');\r\n handleQuestionRedirects();\r\n }\r\n }}\r\n back={() => {\r\n handlePrevQuestion();\r\n }}>\r\n {index === 9 && selectedTab === selfcheckerPanel ? getAttestationForm() : null}\r\n \r\n \r\n );\r\n }\r\n\r\n // Start History Panel\r\n if (selectedTab === historyPanel) {\r\n return (\r\n
    \r\n \r\n \r\n \r\n
    \r\n );\r\n }\r\n };\r\n\r\n const getAttestationForm = () => {\r\n if (canAttest) {\r\n return (\r\n 100.3\r\n ? checkerStatusTypes.stayHome\r\n : temperatureUnit === checkerStatusTypes.celsius && temperature > 37.9\r\n ? checkerStatusTypes.stayHome\r\n : checkerStatusTypes.safeToWork\r\n }\r\n temperature={temperature}\r\n temperatureUnit={temperatureUnit}\r\n submittedTemperature={\r\n temperatureUnit === checkerStatusTypes.fahrenheit\r\n ? temperature\r\n : getSubmittedTemperature(temperatureUnit, temperature)\r\n }\r\n showQuestions={showQuestions}\r\n handleCert={() => {\r\n setCertificate(true);\r\n }}\r\n fahrenheitClicked={() => {\r\n setTemperatureUnit(checkerStatusTypes.fahrenheit);\r\n let temp = (temperature * 9) / 5 + 32;\r\n setTemperature(temp.toFixed(1));\r\n }}\r\n celciusClicked={() => {\r\n setTemperatureUnit(checkerStatusTypes.celsius);\r\n let temp = (temperature - 32) / 1.8;\r\n setTemperature(temp.toFixed(1));\r\n }}\r\n rangeValueOnChange={(e) => {\r\n setTemperature(e.target.value);\r\n }}\r\n rangeOnChange={(e) => {\r\n let temp = Number(e.target.value).toFixed(1);\r\n setTemperature(temp);\r\n }}\r\n stepUpClicked={() => {\r\n let temp = Number(rangeValueRef.current.value);\r\n setTemperature((temp + 0.1).toFixed(1));\r\n }}\r\n stepDownClicked={() => {\r\n let temp = Number(rangeValueRef.current.value);\r\n setTemperature((temp - 0.1).toFixed(1));\r\n }}\r\n />\r\n );\r\n }\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n {showQuestions\r\n ? showTemperatureField\r\n ? attestationBody.introText\r\n : attestationBody.hideTemperatureIntroText\r\n : attestationBody.shortenedQuestionnaireIntroText}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    {tabContent()}
    \r\n\r\n {/* end of questionnaire */}\r\n
    \r\n {/* end of responsive row */}\r\n
    \r\n );\r\n};\r\n\r\nconst getSubmittedTemperature = (temperatureUnit, temperature) => {\r\n if (temperatureUnit === checkerStatusTypes.celsius && temperature !== '') {\r\n let temp = (temperature * 9) / 5 + 32;\r\n return temp.toFixed(1);\r\n }\r\n};\r\n","import React from 'react';\r\nimport ReactDom from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { CoronavirusSelfCheckerView } from './coronavirusSelfCheckerView';\r\nimport { loadAttestations, CoronaVirusSelfCheckerType } from '../members/attestations';\r\nimport { ErrorBoundry } from '../shared';\r\n\r\nexport const loadCoronavirusSelfChecker = store => {\r\n const coronavirusSelfCheckerComponent = document.getElementById('coronavirusSelfCheckerComponent');\r\n if (coronavirusSelfCheckerComponent) {\r\n store.dispatch(loadAttestations(CoronaVirusSelfCheckerType));\r\n ReactDom.render(\r\n \r\n \r\n \r\n \r\n ,\r\n coronavirusSelfCheckerComponent\r\n );\r\n }\r\n};\r\n","import React from 'react';\r\nimport { AppConfiguration } from '../configuration';\r\n//import { RxModalPrint } from './rxModalPrint';\r\nimport { RxModal } from './rxModal';\r\nimport './prescriptionCard.scss';\r\n\r\nexport const PrescriptionDiscountCard = (props) => {\r\n const nativeApp = AppConfiguration.isNativeApp();\r\n // const url = AppConfiguration.getSiteRootUrl();\r\n const url = AppConfiguration.getBiometricsRootUrl();\r\n console.log(url);\r\n var newUrl = url + 'Secure/Forms/PrescriptionDiscountCard.aspx';\r\n if (nativeApp === true) {\r\n var newUrl = url + 'Secure/Forms/PrescriptionDiscountCard.aspx?doctype=pdf';\r\n } else {\r\n var newUrl = url + 'Secure/Forms/PrescriptionDiscountCard.aspx';\r\n }\r\n return (\r\n
    \r\n

    Save money on your prescriptions, compliments of Health Advocate!

    \r\n\r\n

    \r\n We’re pleased to offer you Rx Shopper to help you find the lowest prices for your prescriptions.  \r\n \r\n Download and print your card, then bring it with you when filling your prescription to save up to 80%.\r\n \r\n
    \r\n {/* This card is accepted at over 35,000 pharmacies nationwide! */}\r\n

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

    Check with your pharmacy

    \r\n

    Your Rx Shopper card is accepted at over 35,000 pharmacies nationwide!

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

    You can still use your insurance

    \r\n

    But ask the pharmacist to run your Rx Shopper card to find the lowest price

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

    It’s a win-win situation

    \r\n

    You’ll always pay the lower price—the pharmacy’s, your insurance’s or Rx Shopper’s!

    \r\n
    \r\n \r\n Download my card!\r\n \r\n

    *Prescription savings vary by prescription and by pharmacy, and may reach up to 80% off of the cash price.

    \r\n
    \r\n );\r\n};\r\n","import React, { Component } from 'react';\r\nimport html2canvas from 'html2canvas';\r\nimport { jsPDF } from 'jspdf';\r\nimport 'promise-polyfill/src/polyfill';\r\nimport { Button } from 'react-bootstrap';\r\nimport altHALogo from './img/haLogo.png';\r\nimport hpLogo from './img/haLogoRx.jpg';\r\nimport cardBG from './img/rxCardBG.png';\r\nimport scissorOne from './img/scissorOne.png';\r\nimport scissorTwo from './img/scissorTwo.png';\r\n// do nto make this a function....component reqires a class\r\nexport class RxCardContent extends Component {\r\n generatePDF() {\r\n //Hide Download Button for PDF\r\n document.getElementById('downloadCardBtn').style.display = 'none';\r\n //Create screenshot of the card in svg\r\n html2canvas(document.querySelector('#capture')).then((canvas) => {\r\n document.body.appendChild(canvas).style.display = 'none';\r\n //Re-show Download Button\r\n document.getElementById('downloadCardBtn').style.display = 'inline';\r\n });\r\n //convert svg to png\r\n const input = document.getElementById('capture');\r\n // html2canvas(input).then((canvas) => {\r\n // const imgData = canvas.toDataURL('image/png');\r\n // });\r\n //convert png to pdf\r\n html2canvas(input).then((canvas) => {\r\n const imgData = canvas.toDataURL('image/png');\r\n const pdf = new jsPDF();\r\n pdf.addImage(imgData, 'PNG', 0, 0);\r\n pdf.save('RxSaverCard.pdf');\r\n });\r\n }\r\n\r\n windowPrint() {\r\n window.print();\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n

    Save money on your prescriptions, compliments of Health Advocate!

    \r\n

    \r\n We’re pleased to offer you Rx Shopper to help you find the lowest prices for your prescriptions.\r\n \r\n Download and print your card, then bring it with you when filling your prescription to save up to 80%.\r\n \r\n
    \r\n {/* This card is accepted at over 35,000 pharmacies nationwide! */}\r\n

    \r\n \r\n \r\n {/*

    \r\n Click\r\n \r\n   here \r\n \r\n to print out your card.\r\n

    */}\r\n
    \r\n \"Scissor\"\r\n \"Scissor\"\r\n
    — Fold
    \r\n\r\n
    \r\n \"Rx\r\n \"Health\r\n

    Rx Shopper

    \r\n {/*
    \r\n {this.props.cardName}\r\n
    */}\r\n
    \r\n Group: HARX{this.props.organizationId}
    \r\n
    \r\n
    \r\n BIN: 610301\r\n
    \r\n
    \r\n PCN: HD\r\n
    \r\n
    \r\n Member Number: 1120012002
    \r\n
    \r\n
    \r\n This is not insurance. It is a prescription discount program. This card is free.\r\n
    \r\n
    \r\n
    \r\n {/*

    \r\n This card is accepted at over
    35,000 pharmacies nationwide!\r\n

    */}\r\n

    \r\n Members: If you have questions or need
    \r\n assitance, please call 877.783.6772\r\n

    \r\n
    \r\n By using this card, you have agreed to the terms and conditions\r\n found at https://glichealth.com/terms-and-conditions. The\r\n GlicHealth Program is administered by Glic Health LLC,\r\n One Marina Park Drive, Suite 1410, Boston, MA.\r\n
    \r\n
    \r\n Pharmacist Instructions:
    \r\n This card is pre-activated and provides discounts through the BIN, PCN and
    Group. If you need\r\n assitance, please call 877.800.7820\r\n
    \r\n
    \r\n
    \r\n
    \r\n \"HA\r\n
    \r\n {' '}\r\n \r\n {' '}\r\n {' '}\r\n \r\n {' '}\r\n {' '}\r\n
    \r\n We're not an insurance company. Health Advocate is not a direct healthcare provider and is\r\n not affiliated with any insurance company or thrid party provider. 2020 health Advocate HA-M-2007020-1CRD\r\n
    \r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n","import 'core-js/stable';\nimport React from 'react';\nimport { Provider } from 'react-redux';\nimport ReactDOM from 'react-dom';\nimport { configureStore } from './store';\nimport registerServiceWorker from './registerServiceWorker';\nimport { AppConfiguration } from './configuration';\nimport { getSessionToken } from './session';\nimport { loadSectionCardComponents } from './sectioncards/loadSectionCardComponents';\nimport { DebugAppComponent } from './debugApp';\nimport { loadIncentiveSummaryComponent } from './incentives/widget/loadIncentiveSummaryComponent';\nimport { loadMyPointsComponent, loadMyPointsUtComponent } from './incentives';\nimport { loadTodosComponent } from './todos/loadTodosComponent';\nimport { loadChatComponent } from './chat/loadChatComponent';\nimport { loadMember } from './members/actions';\nimport { loadOrganization } from './organizations/actions';\nimport { loadClient } from './clients/actions';\nimport { loadAnalytics } from './analytics/actions';\nimport { loadBiometricsFaxView } from './faxes';\nimport { logError } from './logging';\nimport { loadQuickLinksComponent } from './quicklinks';\nimport { loadHealthNavigator } from './healthnavigator';\nimport { loadClientServices } from './services';\nimport { loadOrganizationConfigurations } from './organizationConfigurations';\nimport { loadContentExclusions } from './contentExclusions';\nimport { loadCoronavirusSelfChecker } from './coronavirusselfchecker';\nimport { loadPrescriptionDiscountCard } from './prescriptionDiscountCard';\n\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport 'react-bootstrap-typeahead/css/Typeahead.css';\n\nconst appName = 'HealthyPath.WebComponents';\nAppConfiguration.setAppName(appName);\nconst store = configureStore();\n\nconst loadComponents = (sessionToken) => {\n if (sessionToken) {\n store.dispatch(loadAnalytics(logError));\n store.dispatch(loadClient(logError));\n store.dispatch(loadMember(logError));\n store.dispatch(loadOrganization(logError));\n store.dispatch(loadClientServices(logError));\n store.dispatch(loadOrganizationConfigurations(logError));\n store.dispatch(loadContentExclusions(logError));\n loadSectionCardComponents(store, logError);\n loadTodosComponent(store, logError);\n loadIncentiveSummaryComponent(store, logError);\n loadChatComponent(store, logError);\n loadBiometricsFaxView(store, logError);\n loadHealthNavigator(store, logError);\n loadMyPointsComponent(store, logError);\n loadMyPointsUtComponent(store, logError); // TODO: Remove once Evan done user testing\n loadQuickLinksComponent(store, logError);\n loadCoronavirusSelfChecker(store);\n loadPrescriptionDiscountCard(store);\n }\n};\n\n// In development environment, test harness with debug app will be created to host components\nif (process.env.NODE_ENV === 'development') {\n window.siteRootUrl = '/';\n AppConfiguration.setImagePath('/img/');\n ReactDOM.render(\n \n \n ,\n document.getElementById('root')\n );\n} else {\n // In production mode DOM target elements will exist in healthypath\n loadComponents(getSessionToken());\n}\n\nregisterServiceWorker();\n","import React from 'react';\r\nimport { Provider } from 'react-redux';\r\nimport ReactDOM from 'react-dom';\r\nimport { TodoDropDown } from './todoDropDown';\r\nimport { loadTodos } from './actions';\r\n\r\nexport const loadTodosComponent = (store, logError) => {\r\n const todoListElement = document.getElementById('todoComponent');\r\n const todoListElementMobile = document.getElementById('todoComponentMobile');\r\n if (todoListElement) {\r\n store.dispatch(loadTodos(logError));\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n todoListElement\r\n );\r\n }\r\n if (todoListElementMobile) {\r\n store.dispatch(loadTodos(logError));\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n todoListElementMobile\r\n );\r\n }\r\n};\r\n","import React from 'react';\r\nimport { Provider } from 'react-redux';\r\nimport ReactDOM from 'react-dom';\r\nimport { loadTodos } from '../../todos/actions';\r\nimport { loadIncentiveProgramStatus } from './actions';\r\nimport SummaryPanel from './summaryPanel';\r\n\r\nexport const loadIncentiveSummaryComponent = (store, logError) => {\r\n const incentiveSummaryElement = document.getElementById('incentiveSummaryComponent');\r\n if (incentiveSummaryElement) {\r\n store.dispatch(loadTodos(logError));\r\n store.dispatch(loadIncentiveProgramStatus(logError));\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n incentiveSummaryElement\r\n );\r\n }\r\n};\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { QuickLinksView } from './quickLinksView';\r\n\r\nexport const loadQuickLinksComponent = store => {\r\n const quickLinksComponent = document.getElementById('quickLinksComponent');\r\n if (quickLinksComponent) {\r\n ReactDOM.render(\r\n \r\n \r\n ,\r\n quickLinksComponent\r\n );\r\n }\r\n};\r\n","import React from 'react';\r\nimport ReactDom from 'react-dom';\r\nimport { Provider } from 'react-redux';\r\nimport { ErrorBoundry } from '../shared';\r\nimport { PrescriptionDiscountCard } from './discountCard';\r\n\r\nexport const loadPrescriptionDiscountCard = store => {\r\n const prescriptionDiscountCardComponent = document.getElementById('prescriptionDiscountCardComponent');\r\n if (prescriptionDiscountCardComponent) {\r\n ReactDom.render(\r\n \r\n \r\n \r\n \r\n ,\r\n prescriptionDiscountCardComponent\r\n );\r\n }\r\n};\r\n"],"sourceRoot":""}