\r\n
\r\n
\r\n
\r\n
\r\n
\r\n BSWQA-DFW ConnectedCare \r\n \r\n Available only to members of the DFW ConnectedCare medical plan offered by American Airlines and Baylor Scott & White Quality Alliance.\r\n \r\n
\r\n
\r\n
\r\n
\r\n {aalDown ? aal ?
{aal}
\r\n :
Unable to display
\r\n : aal ?
{aal}
\r\n : linkAASuccess && aalId ?
{aalId}
\r\n :
Not linked
\r\n }\r\n
\r\n
\r\n
\r\n {(isAALUnLinking) ?\r\n :\r\n aalDown && aal ?\r\n \r\n Unlink account \r\n \r\n :\r\n this.handleUnLinkAAAccountClick()}>Unlink account \r\n }\r\n
\r\n {unLinkAAError &&\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n return {\r\n unLinkAAError: state.healthPlan.unLinkAAError,\r\n linkAASuccess: state.healthPlan.linkAASuccess,\r\n isAALUnLinking: state.healthPlan.isAALUnLinking,\r\n aal: state.memberships.aaMembershipId,\r\n isProxyUser: state.domain.ip,\r\n MobileOnQueryString: state.domain.mq,\r\n aalDown: state.common.aalDown,\r\n aalId: state.healthPlan.aalId\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n unLinkAAAccount: (memberId, isFromMobile) => dispatch({\r\n type: types.UNLINK_AA_ACCOUNT_START, payload: { memberId: memberId, isFromMobile: isFromMobile }\r\n }),\r\n clearUnLinkMessages: () => dispatch({\r\n type: types.UNLINK_AA_ACCOUNT_CLEAR_MESSAGE\r\n })\r\n\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LinkAAAccount);","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport GenericInput from \"../common/input/GenericInput\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport DataComponent from \"../common/DataComponent\";\r\nimport YesNoModal from \"../common/YesNoComponent\";\r\nimport SectionLoadingError from '../common/SectionLoadingError';\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\nimport Spinner from \"../common/spinner\";\r\n\r\nclass LinkEmployeeAccount extends DataComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n fields: {\r\n LinkNetworkID: \"\",\r\n LinkNetworkPassword: null\r\n },\r\n showModal: false,\r\n modalText: null,\r\n modalYesFunction: null,\r\n modalNoFunction: null,\r\n inInputMode: props.openEmployee ? true : false,\r\n submitEnabled: false\r\n };\r\n this.handleLinkEmployeeAccountClick = this.handleLinkEmployeeAccountClick.bind(this);\r\n this.handleUnlinkEmployeeAccountClick = this.handleUnlinkEmployeeAccountClick.bind(this);\r\n this.validateLinkEmployeeInputs = this.validateLinkEmployeeInputs.bind(this);\r\n this.handleLinkEmployeeAccountClick2 = this.handleLinkEmployeeAccountClick2.bind(this);\r\n this.cancelModel = this.cancelModel.bind(this);\r\n this.handleUnlinkEmployeeAccountClick2 = this.handleUnlinkEmployeeAccountClick2.bind(this);\r\n this.handlePasswordKeyClick = this.handlePasswordKeyClick.bind(this);\r\n this.toggleInputMode = this.toggleInputMode.bind(this);\r\n this.inputsChanged = this.inputsChanged.bind(this);\r\n this.isMobileQueryValue = Tools.isMobileQuery(props.location);\r\n this.isFromMobile = false;\r\n }\r\n\r\n componentDidMount() {\r\n if (super.componentDidMount) { super.componentDidMount(); }\r\n this.isFromMobile = this.isMobileQueryValue || Tools.getItemFromSessionStorage('isMobile') || this.props.MobileOnQueryString;\r\n logUI(\"MBHWeb.UI.LinkEmployeeAccount.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n const { inInputMode } = this.state;\r\n if (inInputMode) {\r\n if ((prevProps.EmployeeID !== this.props.EmployeeID) ||\r\n (!prevProps.unlinkEmployeeSuccessMessage && this.props.unlinkEmployeeSuccessMessage) ||\r\n (!prevProps.linkEmployeeSuccessMessage && this.props.linkEmployeeSuccessMessage)) {\r\n this.setState({ inInputMode: false }); // turn off the edit if an account was just delinked or linked\r\n }\r\n }\r\n }\r\n\r\n inputsChanged() {\r\n const { submitEnabled } = this.state;\r\n const bValid = this.validateLinkEmployeeInputs();\r\n if (bValid && !submitEnabled) {\r\n this.setState({ submitEnabled: true });\r\n }\r\n else if (!bValid && submitEnabled) {\r\n this.setState({ submitEnabled: false });\r\n }\r\n }\r\n\r\n toggleInputMode() {\r\n const { inInputMode } = this.state;\r\n this.setState({ inInputMode: !inInputMode }, () => Tools.setFocus('networkId', !inInputMode));\r\n }\r\n\r\n cancel = () => {\r\n this.setState({ inInputMode: false, submitEnabled: false, fields: {} });\r\n }\r\n\r\n handlePasswordKeyClick(e) {\r\n if (e.key.toLowerCase() === \"enter\") {\r\n // this.handleLinkEmployeeAccountClick();\r\n }\r\n }\r\n\r\n handleLinkEmployeeAccountClick() {\r\n const encodedId = btoa(this.props.UserId);\r\n const url = `${window.serverData.data.secureAuthUrl}?id=${encodedId}&networkId=${this.state.fields.LinkNetworkID}`;\r\n const json = { url };\r\n logUI(\"MBHWeb.Account.Employee.Link\", new Date(), Tools.getURLPath(), JSON.stringify(json));\r\n window.location.href = url;\r\n /*const { linkEmployeeAccount } = this.props;\r\n const { LinkNetworkID, LinkNetworkPassword } = this.state.fields;\r\n if (this.validateLinkEmployeeInputs()) {\r\n this.setState({\r\n showModal: true,\r\n modalText: \"Are you sure you want to link \" + LinkNetworkID + \"?\",\r\n modalYesFunction: this.handleLinkEmployeeAccountClick2,\r\n modalNoFunction: this.cancelModel\r\n });\r\n }*/\r\n }\r\n\r\n handleLinkEmployeeAccountClick2() {\r\n const { linkEmployeeAccount } = this.props;\r\n const { LinkNetworkID, LinkNetworkPassword } = this.state.fields;\r\n this.cancelModel();\r\n logUI(\"MBHWeb.Account.Employee.Link\", new Date(), Tools.getURLPath());\r\n linkEmployeeAccount(LinkNetworkID, LinkNetworkPassword, this.isFromMobile);\r\n window.componentChanged = false;\r\n\r\n }\r\n\r\n cancelModel() {\r\n this.setState({\r\n showModal: false\r\n });\r\n }\r\n\r\n handleUnlinkEmployeeAccountClick() {\r\n const { EmployeeID } = this.props;\r\n this.setState({\r\n showModal: true,\r\n modalText: \"Are you sure you want to unlink \" + EmployeeID + \"?\",\r\n modalYesFunction: this.handleUnlinkEmployeeAccountClick2,\r\n modalNoFunction: this.cancelModel\r\n });\r\n }\r\n\r\n handleUnlinkEmployeeAccountClick2() {\r\n const { unlinkEmployeeAccount } = this.props;\r\n this.cancelModel();\r\n logUI(\"MBHWeb.Account.Employee.Unlink\", new Date(), Tools.getURLPath());\r\n unlinkEmployeeAccount(this.isFromMobile);\r\n }\r\n\r\n validateLinkEmployeeInputs() {\r\n const { LinkNetworkID, LinkNetworkPassword } = this.state.fields;\r\n const { linkEmployeeError } = this.props;\r\n if (Tools.isEmptyString(LinkNetworkID) /*|| Tools.isEmptyString(LinkNetworkPassword)*/) {\r\n //linkEmployeeError(\"You must supply a network ID and password!\");\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n render() {\r\n const {\r\n EmployeeID,\r\n linkEmployeeFailureMessage,\r\n linkEmployeeSuccessMessage,\r\n linkEmployeeInProcess,\r\n unlinkEmployeeFailureMessage,\r\n unlinkEmployeeSuccessMessage,\r\n unlinkEmployeeInProcess,\r\n isProxyUser\r\n } = this.props;\r\n\r\n const {\r\n showModal, modalYesFunction, modalNoFunction, modalText,\r\n inInputMode, submitEnabled, fields\r\n } = this.state;\r\n\r\n //debugger;\r\n if (!this.bHasWindow) {\r\n console.log(\"Linked accounts render: EmpID =\" + EmployeeID);\r\n }\r\n if (isProxyUser) {\r\n return \"\";\r\n }\r\n\r\n return (\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n BSWH Employee\r\n
\r\n
\r\n
\r\n
\r\n {!EmployeeID\r\n ?
Not linked
\r\n :
{EmployeeID}
\r\n }\r\n
\r\n
\r\n
\r\n {unlinkEmployeeInProcess || linkEmployeeInProcess\r\n ?
\r\n : EmployeeID &&
this.handleUnlinkEmployeeAccountClick()}>Unlink account \r\n /*:\r\n UserId &&\r\n
this.handleLinkEmployeeAccountClick(secureAuthUrl)}>Link Account
\r\n */\r\n }\r\n {!EmployeeID && !inInputMode &&\r\n
\r\n Link Account \r\n
\r\n }\r\n
\r\n
\r\n {EmployeeID || !inInputMode ?
:\r\n
\r\n
\r\n this.handleInputChange(e)} required autoComplete=\"username\"\r\n />\r\n
\r\n
\r\n This is the username that you use when signing into your BSWH devices.\r\n
\r\n {/*
\r\n this.handleInputChange(e)} onKeyPress={(e) => this.handlePasswordKeyClick(e)} required autoComplete=\"new-password\"\r\n />\r\n
*/}\r\n
\r\n }\r\n {inInputMode &&
\r\n
\r\n Cancel \r\n Verify and link \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n {linkEmployeeFailureMessage &&
}\r\n {unlinkEmployeeFailureMessage &&
}\r\n {!this.isFromMobile && linkEmployeeSuccessMessage &&
{linkEmployeeSuccessMessage}
}\r\n {!this.isFromMobile && unlinkEmployeeSuccessMessage &&
{unlinkEmployeeSuccessMessage}
}\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n UserName: state.domain.un,\r\n EmployeeID: state.domain.ei,\r\n //EmployeeID: state.memberships.employeeID, //Getting from memberships profile\r\n linkEmployeeInProcess: state.healthSource.linkEmployeeInProcess,\r\n linkEmployeeSuccessMessage: state.healthSource.linkEmployeeSuccessMessage,\r\n linkEmployeeFailureMessage: state.healthSource.linkEmployeeFailureMessage,\r\n unlinkEmployeeInProcess: state.healthSource.unlinkEmployeeInProcess,\r\n unlinkEmployeeSuccessMessage: state.healthSource.unlinkEmployeeSuccessMessage,\r\n unlinkEmployeeFailureMessage: state.healthSource.unlinkEmployeeFailureMessage,\r\n isProxyUser: state.domain.ip,\r\n history: state.session.history,\r\n token: state.domain.t,\r\n UserId: state.domain.ui,\r\n MobileOnQueryString: state.domain.mq\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n linkEmployeeAccount: (lanId, password, isFromMobile) => {\r\n dispatch({\r\n type: types.LINK_EMPLOYEE_ACCOUNT_START,\r\n lanId: lanId,\r\n password: password,\r\n isFromMobile\r\n });\r\n },\r\n unlinkEmployeeAccount: (isFromMobile) => {\r\n dispatch({\r\n type: types.UNLINK_EMPLOYEE_ACCOUNT_START,\r\n isFromMobile\r\n });\r\n },\r\n linkEmployeeError: (errorText) => {\r\n dispatch({\r\n type: types.LINK_EMPLOYEE_ACCOUNT_FAILURE, errorText: errorText\r\n });\r\n }\r\n\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LinkEmployeeAccount);","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport InfoModal from \"../common/InfoModal\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport * as msgs from \"../../constants/textConstants\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport SuccessBanner from './SuccessBanner';\r\nimport Spinner from \"../common/spinner\";\r\nimport TryAgainToolTip from '../common/TryAgainToolTip';\r\n\r\nclass LinkHealthPlanAccount extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showModal: false,\r\n modalText: null,\r\n modalYesFunction: null,\r\n modalNoFunction: null\r\n };\r\n this.handleUnlinkHealthPlanAccountClick = this.handleUnlinkHealthPlanAccountClick.bind(this);\r\n this.cancelModel = this.cancelModel.bind(this);\r\n this.handleUnlinkHealthPlanAccountClick2 = this.handleUnlinkHealthPlanAccountClick2.bind(this);\r\n this.isMobileQueryValue = Tools.isMobileQuery(props.location);\r\n this.isFromMobile = false;\r\n }\r\n\r\n componentDidMount() {\r\n if (super.componentDidMount) { super.componentDidMount(); }\r\n this.isFromMobile = this.isMobileQueryValue || Tools.getItemFromSessionStorage('isMobile') || this.props.MobileOnQueryString;\r\n logUI(\"MBHWeb.UI.LinkHealthPlanAccount.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n cancelModel() {\r\n this.setState({ showModal: false });\r\n }\r\n\r\n handleUnlinkHealthPlanAccountClick() {\r\n const { HealthPlanID } = this.props;\r\n if (!HealthPlanID)\r\n return;\r\n this.setState({\r\n showModal: true,\r\n modalText:
Are you sure you want to unlink your account?
By unlinking your account, you will be shown the default MyBSWHealth experience with market rates for available services.
You may visit this page at any time to re-link your account.
,\r\n modalYesFunction: this.handleUnlinkHealthPlanAccountClick2,\r\n modalNoFunction: this.cancelModel\r\n });\r\n }\r\n\r\n handleUnlinkHealthPlanAccountClick2() {\r\n const { unlinkHealthPlanAccount, HealthPlanID } = this.props;\r\n this.cancelModel();\r\n logUI(\"MBHWeb.Account.HealthPlan.UnLink\", new Date(), Tools.getURLPath());\r\n unlinkHealthPlanAccount(this.isFromMobile, HealthPlanID);\r\n window.componentChanged = false;\r\n }\r\n\r\n clearAllMessages() {\r\n const { clearUnLinkMessages } = this.props;\r\n clearUnLinkMessages();\r\n }\r\n\r\n\r\n render() {\r\n const {\r\n HealthPlanID,\r\n linkHP,\r\n unlinkHP,\r\n isProxyUser,\r\n swhpDown\r\n } = this.props;\r\n const { showModal,\r\n modalYesFunction,\r\n modalNoFunction,\r\n modalText } = this.state;\r\n if (isProxyUser) {\r\n return \"\";\r\n }\r\n return (\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
Baylor Scott & White Health Plan
\r\n
\r\n
\r\n
\r\n {swhpDown ? HealthPlanID ?
{HealthPlanID}
\r\n :
Unable to display
\r\n : HealthPlanID ?
{HealthPlanID}
\r\n : linkHP?.successMessage ?
{linkHP.successMessage.indexOf(\":\") > 0 ? linkHP?.successMessage.slice(linkHP.successMessage.indexOf(\":\") + 1) : \"\"}
\r\n : null}\r\n
\r\n
\r\n
\r\n {(unlinkHP?.successMessage) ?\r\n :\r\n swhpDown && HealthPlanID ?\r\n \r\n Unlink account \r\n \r\n \r\n : this.handleUnlinkHealthPlanAccountClick()}>Unlink account \r\n }\r\n
\r\n {unlinkHP?.error &&\r\n
\r\n
{unlinkHP.error}
\r\n
}\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n return {\r\n HealthPlanID: state.memberships.anySWHPMembershipId,\r\n linkHP: state.healthPlan.linkHP,\r\n unlinkHP: state.healthPlan.unlinkHP,\r\n isProxyUser: state.domain.ip,\r\n serverData: state.session.serverData,\r\n MobileOnQueryString: state.domain.mq,\r\n swhpDown: state.common.swhpDown\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n unlinkHealthPlanAccount: (isFromMobile, MemberId) => {\r\n dispatch({\r\n type: types.UNLINK_HEALTHPLAN_ACCOUNT,\r\n isFromMobile,\r\n MemberId\r\n });\r\n },\r\n clearUnLinkMessages: () => dispatch({\r\n type: types.UNLINK_HEALTHPLAN_CLEAR_MESSAGE\r\n })\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LinkHealthPlanAccount);","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport GenericInput from \"../common/input/GenericInput\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport DataComponent from \"../common/DataComponent\";\r\nimport { Modal, ModalBody, Tooltip } from 'reactstrap';\r\nimport YesNoModal from \"../common/YesNoComponent\";\r\nimport SectionLoadingError from '../common/SectionLoadingError';\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\nimport SuccessBanner from './SuccessBanner';\r\nimport Spinner from \"../common/spinner\";\r\nimport TryAgainToolTip from '../common/TryAgainToolTip';\r\n\r\nclass LinkMyChartAccounts extends DataComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n fields: {\r\n MyChartUserName: \"\",\r\n MyChartPassword: \"\"\r\n },\r\n showModal: false,\r\n modalText: null,\r\n modalYesFunction: null,\r\n modalNoFunction: null,\r\n inInputMode: props.openMyChart ? true : false,\r\n submitEnabled: false,\r\n showToolTip: false,\r\n showError: false\r\n };\r\n this.handleLinkMyChartAccountClick = this.handleLinkMyChartAccountClick.bind(this);\r\n this.handleUnlinkMyChartAccountClick = this.handleUnlinkMyChartAccountClick.bind(this);\r\n this.validateLinkMyChartInputs = this.validateLinkMyChartInputs.bind(this);\r\n this.handleLinkMyChartAccountClick2 = this.handleLinkMyChartAccountClick2.bind(this);\r\n this.cancelModal = this.cancelModal.bind(this);\r\n this.toggleTooltip = this.toggleTooltip.bind(this);\r\n this.handleUnlinkMyChartAccountClick2 = this.handleUnlinkMyChartAccountClick2.bind(this);\r\n this.handlePasswordKeyClick = this.handlePasswordKeyClick.bind(this);\r\n this.handleInputChange = this.handleInputChange.bind(this);\r\n this.toggleInputMode = this.toggleInputMode.bind(this);\r\n this.inputsChanged = this.inputsChanged.bind(this);\r\n this.isMobileQueryValue = Tools.isMobileQuery(props.location);\r\n this.isFromMobile = false;\r\n }\r\n\r\n componentDidMount() {\r\n if (super.componentDidMount) { super.componentDidMount(); }\r\n this.isFromMobile = this.isMobileQueryValue || Tools.getItemFromSessionStorage('isMobile') || this.props.MobileOnQueryString;\r\n logUI(\"MBHWeb.UI.LinkMyChartAccounts.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState, snapshot) {\r\n const { inInputMode } = this.state;\r\n if (inInputMode) {\r\n if ((prevProps.MyChartID !== this.props.MyChartID) ||\r\n (!prevProps.unlinkMyChartSuccessMessage && this.props.unlinkMyChartSuccessMessage) ||\r\n (!prevProps.linkMyChartSuccessMessage && this.props.linkMyChartSuccessMessage)) {\r\n this.setState({ inInputMode: false, showError: false }); // turn off the edit if an account was just delinked or linked\r\n }\r\n }\r\n }\r\n\r\n toggleInputMode() {\r\n const { inInputMode } = this.state;\r\n this.setState({ inInputMode: !inInputMode, showError: false }, () => Tools.setFocus('myChartId', !inInputMode));\r\n\r\n }\r\n\r\n toggleTooltip() {\r\n this.setState(prevState => ({\r\n showToolTip: !prevState.showToolTip\r\n }));\r\n }\r\n\r\n inputsChanged() {\r\n const { submitEnabled } = this.state;\r\n const bValid = this.validateLinkMyChartInputs();\r\n this.setState({ showError: false });\r\n if (bValid && !submitEnabled) {\r\n this.setState({ submitEnabled: true });\r\n }\r\n else if (!bValid && submitEnabled) {\r\n this.setState({ submitEnabled: false });\r\n }\r\n }\r\n\r\n handlePasswordKeyClick(e) {\r\n if (e.key.toLowerCase() === \"enter\") {\r\n this.handleLinkMyChartAccountClick();\r\n }\r\n }\r\n\r\n\r\n handleLinkMyChartAccountClick() {\r\n const { MyChartUserName } = this.state.fields;\r\n if (this.validateLinkMyChartInputs()) {\r\n this.setState({\r\n showModal: true,\r\n modalText: \"Are you sure you want to link \" + MyChartUserName + \"?\",\r\n modalYesFunction: this.handleLinkMyChartAccountClick2,\r\n modalNoFunction: this.cancelModal\r\n });\r\n }\r\n }\r\n handleLinkMyChartAccountClick2() {\r\n const { linkMyChartAccount } = this.props;\r\n const { MyChartUserName, MyChartPassword } = this.state.fields;\r\n this.cancelModal();\r\n logUI(\"MBHWeb.Account.MyChart.Link\", new Date(), Tools.getURLPath());\r\n linkMyChartAccount(MyChartUserName, MyChartPassword, this.isFromMobile);\r\n this.setState({ showError: true })\r\n window.componentChanged = false;\r\n }\r\n\r\n cancelModal() {\r\n this.setState({\r\n showModal: false\r\n });\r\n }\r\n\r\n handleUnlinkMyChartAccountClick() {\r\n const { MyChartID } = this.props;\r\n if (!MyChartID)\r\n return;\r\n this.setState({\r\n showModal: true,\r\n modalText: \"Are you sure you want to unlink \" + MyChartID + \"?\",\r\n modalYesFunction: this.handleUnlinkMyChartAccountClick2,\r\n modalNoFunction: this.cancelModal\r\n });\r\n }\r\n handleUnlinkMyChartAccountClick2() {\r\n const { unlinkMyChartAccount } = this.props;\r\n this.cancelModal();\r\n logUI(\"MBHWeb.Account.MyChart.Unlink\", new Date(), Tools.getURLPath());\r\n unlinkMyChartAccount(this.isFromMobile);\r\n }\r\n\r\n validateLinkMyChartInputs() {\r\n const { MyChartUserName, MyChartPassword } = this.state.fields;\r\n const { linkMyChartError } = this.props;\r\n if (Tools.isEmptyString(MyChartUserName) || Tools.isEmptyString(MyChartPassword)) {\r\n //linkMyChartError(\"You must supply a MyChart UserName and MyChart Password!\");\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n render() {\r\n const {\r\n technicalHelpDeskNumber,\r\n technicalHelpDeskHours,\r\n MyChartID,\r\n linkMyChartFailureMessage,\r\n linkMyChartSuccessMessage,\r\n linkMyChartInProcess,\r\n unlinkMyChartFailureMessage,\r\n unlinkMyChartSuccessMessage,\r\n unlinkMyChartInProcess,\r\n isProxyUser,\r\n MobileOnQueryString,\r\n epicEHRDown,\r\n registrationUrl\r\n } = this.props;\r\n const { showModal,\r\n modalYesFunction,\r\n modalNoFunction,\r\n modalText,\r\n inInputMode,\r\n showToolTip,\r\n submitEnabled,\r\n fields,\r\n showError\r\n } = this.state;\r\n\r\n //debugger;\r\n if (!this.bHasWindow) {\r\n console.log(\"Linked accounts render: MyChartID =\" + MyChartID);\r\n }\r\n if (isProxyUser) {\r\n return \"\";\r\n }\r\n return (\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n Medical Records \r\n \r\n Appointments, test results, messages, etc.\r\n \r\n
\r\n
\r\n
\r\n
\r\n {epicEHRDown ? MyChartID ?
{MyChartID}
\r\n :
Not linked
\r\n : MyChartID ?
{MyChartID}
\r\n : linkMyChartSuccessMessage ?
{fields.MyChartUserName}
\r\n :
Not linked
}\r\n
\r\n\r\n
\r\n
\r\n
\r\n {(unlinkMyChartInProcess || linkMyChartInProcess) ?\r\n
:\r\n epicEHRDown === false &&\r\n (MyChartID) \r\n ?
\r\n \r\n \r\n :
\r\n {epicEHRDown === true\r\n ?\r\n
\r\n \r\n Link account \r\n
\r\n \r\n \r\n : !inInputMode ?
this.toggleInputMode()}>Link Account : \"\"\r\n }\r\n
\r\n }\r\n
\r\n
\r\n
\r\n {MyChartID || !inInputMode ?
:\r\n
\r\n {/*
*/}\r\n {/* this.handleInputChange(e)} required autoComplete=\"new-password\"*/}\r\n {/* />*/}\r\n {/*
*/}\r\n {/*
*/}\r\n {/* this.handleInputChange(e)} onKeyPress={(e) => this.handlePasswordKeyClick(e)} required autoComplete=\"new-password\"*/}\r\n {/* />*/}\r\n {/*
*/}\r\n {/*{showError &&*/}\r\n {/*
*/}\r\n {/* {linkMyChartFailureMessage &&
}*/}\r\n {/* {unlinkMyChartFailureMessage &&
}*/}\r\n {/*
*/}\r\n {/*}*/}\r\n {/*{inInputMode &&
*/}\r\n {/*
*/}\r\n {/* this.toggleInputMode()}>Cancel */}\r\n {/* this.handleLinkMyChartAccountClick()}>Verify and link */}\r\n {/*
*/}\r\n {/*
*/}\r\n {/*} */}\r\n \r\n {/*{!this.isFromMobile &&*/}\r\n {/*
*/}\r\n {/*}*/}\r\n
\r\n
\r\n
\r\n this.toggleInputMode()}>Cancel \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n technicalHelpDeskNumber: state.session.serverData.technicalHelpDeskNumber, \r\n technicalHelpDeskHours: state.session.serverData.technicalHelpDeskHours,\r\n UserName: state.domain.un,\r\n MyChartID: state.domain.mc,\r\n linkMyChartInProcess: state.healthSource.linkMyChartInProcess,\r\n linkMyChartSuccessMessage: state.healthSource.linkMyChartSuccessMessage,\r\n linkMyChartFailureMessage: state.healthSource.linkMyChartFailureMessage,\r\n unlinkMyChartInProcess: state.healthSource.unlinkMyChartInProcess,\r\n unlinkMyChartSuccessMessage: state.healthSource.unlinkMyChartSuccessMessage,\r\n unlinkMyChartFailureMessage: state.healthSource.unlinkMyChartFailureMessage,\r\n isProxyUser: state.domain.ip,\r\n MobileOnQueryString: state.domain.mq,\r\n epicEHRDown: state.common.epicEHRDown,\r\n registrationUrl: state.session.serverData.myChartRegistrationUrl\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n linkMyChartAccount: (MyChartUserName, MyChartPassword, isFromMobile) => {\r\n dispatch({\r\n type: types.LINK_MYCHART_ACCOUNT_START,\r\n MyChartUserName,\r\n MyChartPassword,\r\n isFromMobile: isFromMobile\r\n });\r\n },\r\n unlinkMyChartAccount: (isFromMobile) => {\r\n dispatch({\r\n type: types.UNLINK_MYCHART_ACCOUNT_START,\r\n isFromMobile: isFromMobile\r\n });\r\n },\r\n linkMyChartError: (errorText) => {\r\n dispatch({\r\n type: types.LINK_MYCHART_ACCOUNT_FAILURE,\r\n errorText: errorText\r\n });\r\n }\r\n\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LinkMyChartAccounts);","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport RxNumber from \"../common/RxNumber\";\r\nimport DatePicker from \"../common/DatePicker\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport SectionLoading from '../common/SectionLoading';\r\nimport { Link, withRouter } from \"react-router-dom\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport * as msgs from \"../../constants/textConstants\";\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\nimport Spinner from \"../common/spinner\";\r\nimport SuccessBanner from './SuccessBanner';\r\n\r\n\r\nclass LinkPharmacy extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.rxNumberId = 'rxNumber';\r\n this.dobId = 'dob';\r\n this.state = {\r\n gotFocus: false, editing: props.openPharmacy ? true : false, showMessage: false,\r\n rxNumber: '', isRxNumberValid: false, rxNumberTouched: false,\r\n dob: '', isValid: false, isDobValid: false, dobTouched: false\r\n };\r\n this.props.unlinkedRxTransfer();\r\n this.isMobileQueryValue = Tools.isMobileQuery(props.location);\r\n this.rxLinkingCallback = this.rxLinkingCallback.bind(this);\r\n this.isFromMobile = false;\r\n }\r\n\r\n componentDidMount() {\r\n this.isFromMobile = this.isMobileQueryValue || Tools.getItemFromSessionStorage('isMobile') || this.props.MobileOnQueryString;\r\n logUI(\"MBHWeb.UI.LinkedAccounts.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n\r\n componentDidUpdate() {\r\n if (!this.state.gotFocus) {\r\n this.setFocus(this.rxNumberId);\r\n }\r\n }\r\n\r\n setFocus(inputId) {\r\n const input = document.getElementById(inputId);\r\n if (input) {\r\n input.focus();\r\n }\r\n this.setState({ gotFocus: true });\r\n }\r\n\r\n edit() {\r\n this.setState({ editing: true, gotFocus: false }, () => Tools.setFocus('rxNumber'));\r\n }\r\n\r\n cancel() {\r\n this.setState({ editing: false, rxNumber: '', dob: '', rxNumberTouched: false, dobTouched: false, showMessage: false });\r\n }\r\n\r\n onRxNumberChange(e, isRxNumberValid) {\r\n const isValid = isRxNumberValid && this.state.isDobValid;\r\n this.setState({ rxNumber: e.target.value, isValid, isRxNumberValid, showMessage: false, rxNumberTouched: true });\r\n }\r\n\r\n onDobChange(value, isDobValid) {\r\n const isValid = isDobValid && this.state.isRxNumberValid;\r\n this.setState({ dob: value, isValid, isDobValid, showMessage: false, dobTouched: true });\r\n }\r\n\r\n onSetupAccount() {\r\n const { isValid, rxNumber, dob, isRxNumberValid } = this.state;\r\n const { link, userDetails } = this.props;\r\n\r\n this.setState({ rxNumberTouched: true, dobTouched: true });\r\n if (isValid) {\r\n link(userDetails, rxNumber, dob, this.rxLinkingCallback);\r\n this.setState({ showMessage: true });\r\n }\r\n else {\r\n if (!isRxNumberValid) {\r\n this.setFocus(this.rxNumberId);\r\n }\r\n else {\r\n this.setFocus(this.dobId);\r\n }\r\n }\r\n }\r\n\r\n rxLinkingCallback(linkedAccount) {\r\n if (linkedAccount && this.props.onLinked && this.isFromMobile) {\r\n this.props.onLinked();\r\n }\r\n }\r\n\r\n render() {\r\n const { rxDown, hasPharmacyLogin, unLinkedRxTransfer, linking, errorMessage, relogin, isProxyUser, MobileOnQueryString, successMessage } = this.props;\r\n const { editing, rxNumber, dob, showMessage, rxNumberTouched, dobTouched, isValid } = this.state;\r\n\r\n if (isProxyUser) {\r\n return \"\";\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
{msgs.PharmacyTileName}
\r\n
\r\n
\r\n
\r\n {rxDown ? hasPharmacyLogin ?
Account linked
:
Unable to display
\r\n : hasPharmacyLogin ?
Account linked
\r\n : unLinkedRxTransfer\r\n ?
Pending
\r\n :
Not linked
\r\n }\r\n
\r\n
\r\n
\r\n {linking ?
: hasPharmacyLogin ? null :\r\n <>{!hasPharmacyLogin && !linking && !relogin && !unLinkedRxTransfer &&\r\n
\r\n {!editing\r\n ? rxDown === false && this.edit()}>Link account \r\n : null\r\n }\r\n
\r\n }>\r\n }\r\n
\r\n
\r\n\r\n {!hasPharmacyLogin && !linking && editing && !relogin &&\r\n
\r\n
\r\n this.onRxNumberChange(e, isRxNumberValid)}\r\n inputErrorMsg=\"Please enter a minimum of 7 digits.\" minLength={7}\r\n tooltipID=\"activeRXToolTip\" tooltipMsg=\"Enter the digits before the dash [xxxxxx]-xx from your most recent, active prescription.\"\r\n />\r\n
\r\n
\r\n this.onDobChange(value, isDobValid)} disabled\r\n />\r\n
\r\n {!successMessage && showMessage &&\r\n
}\r\n {editing &&\r\n
\r\n
\r\n this.cancel()}>Cancel \r\n this.onSetupAccount()}>Verify and Link \r\n
\r\n
\r\n }\r\n \r\n {!this.isFromMobile &&\r\n
\r\n
\r\n Don’t have an active BSW pharmacy RX number? To set up your pharmacy by transferring a prescription click here\r\n
\r\n
\r\n }\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n const { isLinking, linkPharmacyError, linkedAccount } = state.pharmacy;\r\n const hasPharmacyLogin = state.memberships.isActiveFeature_Pharmacy;\r\n const { technicalHelpDeskNumber, technicalHelpDeskHours } = state.session.serverData;\r\n let errorMessage = '';\r\n let successMessage = '';\r\n let relogin = false;\r\n\r\n if (!isLinking && linkPharmacyError) {\r\n if (linkPharmacyError.status === 409 && !hasPharmacyLogin) {\r\n errorMessage = `You may have duplicate accounts. Contact the MyBSWHealth Technical Help Desk ${technicalHelpDeskHours} at ${technicalHelpDeskNumber} to correct this.`\r\n const matchedPhoneNumber = errorMessage.match(/.*(\\d{3}\\.\\d{3}\\.\\d{4}).*/) && errorMessage.match(/.*(\\d{3}\\.\\d{3}\\.\\d{4}).*/)[1];\r\n const phoneNumber = `
${matchedPhoneNumber} `;\r\n if (errorMessage && matchedPhoneNumber)\r\n errorMessage = errorMessage.replace(matchedPhoneNumber, phoneNumber);\r\n //errorMessage = 'Your account is already linked. Please log out and sign back in to see your new pharmacy details.';\r\n //relogin = true;\r\n }\r\n else {\r\n errorMessage = 'Your pharmacy information could not be verified. Try again.'\r\n }\r\n }\r\n\r\n if (!isLinking && linkedAccount) {\r\n successMessage = \"We have successfully linked your BSW pharmacy.\";\r\n }\r\n\r\n return {\r\n userDetails: state.sso.userDetails,\r\n unLinkedRxTransfer: state.pharmacy.unLinkedRxTransfer,\r\n rxDown: state.common.rxDown,\r\n hasPharmacyLogin: hasPharmacyLogin,\r\n linking: isLinking,\r\n errorMessage: { __html: errorMessage },\r\n successMessage: successMessage,\r\n relogin: relogin,\r\n isProxyUser: state.domain.ip,\r\n MobileOnQueryString: state.domain.mq\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n link: (userDetails, rxNumber, dob, callback) => {\r\n const data = {\r\n rxNumber: rxNumber,\r\n DateOfBirth: dob,\r\n loginId: userDetails.userName,\r\n FirstName: userDetails.Givenname,\r\n LastName: userDetails.Surname\r\n };\r\n dispatch({ type: types.LINK_PHARMACY, accountToLink: data, callback });\r\n },\r\n unlinkedRxTransfer: (proxyId) =>\r\n dispatch({\r\n type: types.UNLINK_RX_TRANSFER_START,\r\n payload: { proxyId: proxyId }\r\n })\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LinkPharmacy);","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport LinkPharmacy from \"./LinkPharmacy\";\r\nimport LinkEmployeeAccount from \"./LinkEmployeeAccount\";\r\nimport LinkMyChartAccount from \"./LinkMyChartAccount\";\r\nimport LinkHealthPlanAccount from \"./LinkHealthPlanAccount\";\r\nimport DartOrWacoAccount from \"./DartOrWacoAccount\";\r\nimport FirstCareAccount from \"./FirstCareAccount\";\r\nimport InsurancePlan from './InsurancePlan';\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport * as msgs from \"../../constants/textConstants\";\r\nimport LinkAAAccount from \"./LinkAAAccount\";\r\nimport StatusBanner from '../common/StatusBanner';\r\nimport SectionLoadingError from \"../common/SectionLoadingError\";\r\nimport { Link } from \"react-router-dom\";\r\nimport * as queryString from 'query-string';\r\nimport TryAgainToolTip from '../common/TryAgainToolTip';\r\nimport { PageHeading } from \"../ecosystem/mybswh\";\r\n\r\nclass LinkedAccounts extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.isMobileQueryValue = Tools.isMobileQuery(props.location);\r\n this.isFromMobile = false;\r\n this.state = { pharmacyLinked: false };\r\n const searchParams = props.location && props.location.searchParams ? queryString.parse(props.location.searchParams) : null;\r\n if (searchParams && searchParams.openMyChart)\r\n this.openMyChart = true;\r\n else\r\n this.openMyChart = false;\r\n if (searchParams && searchParams.openPharmacy)\r\n this.openPharmacy = true;\r\n else\r\n this.openPharmacy = false;\r\n if (searchParams && searchParams.openInsurance)\r\n this.openInsurance = true;\r\n else\r\n this.openInsurance = false;\r\n if (searchParams && searchParams.openEmployee)\r\n this.openEmployee = true;\r\n else\r\n this.openEmployee = false;\r\n }\r\n\r\n componentDidMount() {\r\n logUI(\"MBHWeb.UI.LinkedAccounts.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n this.isFromMobile = this.isMobileQueryValue || Tools.getItemFromSessionStorage('isMobile') || this.props.MobileOnQueryString;\r\n }\r\n\r\n render() {\r\n const { serverData, isProxyUser, MobileOnQueryString,\r\n epicEHRDown, hasMyChart, linkMyChartSuccessMessage, unlinkMyChartSuccessMessage,\r\n aalDown, hasAAL, linkAASuccess, unLinkAASuccess, linkEmployeeSuccessMessage, unlinkEmployeeSuccessMessage,\r\n swhpDown, hasHealthPlanLogin,\r\n hasFirstCare, linkFirstCare, unlinkFirstCare, hasDART, hasWACO, wacoMembershipId, dartMembershipId,\r\n linkHP, unlinkHP, linkDart, unlinkDart, linkWaco, unlinkWaco, isMyChartInActive, removeBSWPharmacy\r\n } = this.props;\r\n //let regError = true; //Task 36729: uncommand to test error page\r\n\r\n let pharmacyLinkingSuccess = \"We've successfully linked your account.\";\r\n\r\n return (\r\n
\r\n {this.isFromMobile && (linkMyChartSuccessMessage || unlinkMyChartSuccessMessage) ?\r\n
\r\n :\r\n this.isFromMobile && (linkHP?.successMessage || unlinkHP?.successMessage) ?\r\n
:\r\n this.isFromMobile && (linkAASuccess || unLinkAASuccess) ?\r\n
:\r\n this.isFromMobile && (linkEmployeeSuccessMessage || unlinkEmployeeSuccessMessage) ?\r\n
:\r\n removeBSWPharmacy === false && this.isFromMobile && this.state.pharmacyLinked ?\r\n
:\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {!isProxyUser &&
Accounts }\r\n \r\n
\r\n {isProxyUser ?
:\r\n
\r\n \r\n {(hasAAL || linkAASuccess) && !unLinkAASuccess && serverData.enableAA && }\r\n {serverData.enableNewHealthPlan && (hasFirstCare || (linkFirstCare && linkFirstCare.success)) && (!unlinkFirstCare || !unlinkFirstCare.success) &&\r\n \r\n }\r\n {(hasHealthPlanLogin || (linkHP?.success)) && !(unlinkHP?.success) && }\r\n {(hasDART || (linkDart && linkDart.success)) && !(unlinkDart && unlinkDart.success) && }\r\n {(hasWACO || (linkWaco && linkWaco.success)) && !(unlinkWaco && unlinkWaco.success) && }\r\n \r\n \r\n {removeBSWPharmacy === false && this.setState({ pharmacyLinked: true })} openPharmacy={this.openPharmacy} />}\r\n \r\n }\r\n
\r\n
\r\n }\r\n
\r\n // }\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n return {\r\n UserName: state.domain.un,\r\n hasMyChart: state.domain.hm,\r\n hasAAL: state.memberships.hasAA,\r\n hasHealthPlanLogin: state.memberships.hasAnySWHP,\r\n hasFirstCare: state.memberships.hasFC,\r\n\r\n hasDART: state.memberships.hasDART,\r\n hasWACO: state.memberships.hasWACO,\r\n wacoMembershipId: state.memberships.wacoMembershipId,\r\n dartMembershipId: state.memberships.dartMembershipId,\r\n epicEHRDown: state.common.epicEHRDown,\r\n aalDown: state.common.aalDown,\r\n swhpDown: state.common.swhpDown,\r\n serverData: state.session.serverData,\r\n isProxyUser: state.domain.ip,\r\n MobileOnQueryString: state.domain.mq,\r\n linkMyChartSuccessMessage: state.healthSource.linkMyChartSuccessMessage,\r\n unlinkMyChartSuccessMessage: state.healthSource.unlinkMyChartSuccessMessage,\r\n linkEmployeeSuccessMessage: state.healthSource.linkEmployeeSuccessMessage,\r\n unlinkEmployeeSuccessMessage: state.healthSource.unlinkEmployeeSuccessMessage,\r\n linkAASuccess: state.healthPlan.linkAASuccess,\r\n unLinkAASuccess: state.healthPlan.unLinkAASuccess,\r\n linkHP: state.healthPlan.linkHP,\r\n unlinkHP: state.healthPlan.unlinkHP,\r\n linkFirstCare: state.healthPlan.linkFirstCare,\r\n unlinkFirstCare: state.healthPlan.unlinkFirstCare,\r\n linkDart: state.healthPlan.linkDart,\r\n unlinkDart: state.healthPlan.unlinkDart,\r\n linkWaco: state.healthPlan.linkWaco,\r\n unlinkWaco: state.healthPlan.unlinkWaco,\r\n isMyChartInActive: state.dashboard.isMyChartInActive,\r\n removeBSWPharmacy: state.session.serverData ? state.session.serverData.removeBSWPharmacy : false\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LinkedAccounts);","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport MyChartDataTile from \"../dashboard/MyChartDataTile\";\r\nimport { Link } from \"react-router-dom\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as d from \"../../reducers/domainReducer\";\r\nimport { getFirstName } from \"../../helpers/formatting\";\r\nimport SectionLoadingError from \"../common/SectionLoadingError\";\r\nimport { PageHeading } from \"../ecosystem/mybswh\";\r\n\r\nclass LinkedDevices extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.isMobileQueryValue = Tools.isMobileQuery(props.location);\r\n this.isFromMobile = false;\r\n }\r\n\r\n componentDidMount() {\r\n logUI(\"MBHWeb.UI.LinkedAccounts.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n this.isFromMobile = this.isMobileQueryValue || Tools.getItemFromSessionStorage('isMobile') || this.props.MobileOnQueryString;\r\n }\r\n\r\n render() {\r\n const { serverData, epicEHRDown, hasMyChart, HpFhirConsents, isProxyUser, currentUser, primaryUser } = this.props;\r\n let displayName = '';\r\n if (currentUser && typeof primaryUser?.externalId !== 'undefined' &&\r\n currentUser?.externalId !== primaryUser?.externalId && currentUser?.displayName) {\r\n displayName = getFirstName(currentUser?.displayName);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n {isProxyUser\r\n ?
\r\n : <>\r\n
\r\n\r\n
\r\n
\r\n
Insurance \r\n
Services Accessing My Account \r\n {HpFhirConsents && HpFhirConsents.length > 0\r\n ?
View apps that have permission to access your data.
\r\n : <>\r\n
You’ve given the following apps permission to access your data.
\r\n
\r\n >\r\n }\r\n
\r\n
\r\n {hasMyChart && !epicEHRDown && <>\r\n
\r\n
\r\n
Medical Records \r\n \r\n
\r\n
\r\n >\r\n }\r\n >\r\n }\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\nconst mapStateToProps = (state) => {\r\n return {\r\n serverData: state.session.serverData,\r\n epicEHRDown: state.common.epicEHRDown,\r\n hasMyChart: !state.common.epicEHRDown && state.domain.hm,\r\n HpFhirConsents: state.sso.hpConsentList || [],\r\n MobileOnQueryString: state.domain.mq,\r\n isProxyUser: state.domain.ip,\r\n primaryUser: d.hydrateProxyUser(state.domain.pu),\r\n currentUser: d.hydrateProxyUser(state.domain.cu),\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, null)(LinkedDevices);","import React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { connect } from \"react-redux\";\r\nimport { Tooltip } from 'reactstrap';\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport GenericInput from \"../common/input/GenericInput\";\r\nimport SectionLoadingError from '../common/SectionLoadingError';\r\nimport DataComponent from \"../common/DataComponent\";\r\nimport LoginSettingsUserName from \"./LoginSettingsUserName\";\r\nimport LoginSettingsPassword from \"./LoginSettingsPassword\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport { PageHeading } from \"../ecosystem/mybswh\";\r\n\r\n\r\nclass LoginSettings extends DataComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n if (super.componentDidMount) { super.componentDidMount(); }\r\n logUI(\"MBHWeb.UI.LoginSettings.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n componentWillUnmount() {\r\n super.componentWillUnmount();\r\n this.props.refreshLoginSettings();\r\n }\r\n\r\n\r\n \r\n\r\n\r\n validateConfirm(group,event) {\r\n const target = event.target;\r\n const value = !target ? event : target.type === 'checkbox' ? target.checked : target.value;\r\n const passwordData = this.state.passwordData;\r\n const errors = {};\r\n if (group === 'confirmPassword') {\r\n if (target) {\r\n errors[\"passwordMismatch\"] = (value === this.state.passwordData.NewPassword) ? false : true;\r\n }\r\n if (value) {\r\n this.setState({ invalidInput: false });\r\n } else {\r\n this.setState({ invalidInput: true });\r\n }\r\n }\r\n if (group === 'confirmUsername') {\r\n if (target) {\r\n errors[\"userNameMismatch\"] = (value === this.state.userNamesData.NewUserName) ? false : true;\r\n }\r\n if (value) {\r\n this.setState({ invalidInputName: false });\r\n } else {\r\n this.setState({ invalidInputName: true });\r\n }\r\n\r\n }\r\n this.setState(prevState => ({\r\n errors: {\r\n ...prevState.errors,\r\n passwordMismatch: errors[\"passwordMismatch\"],\r\n userNameMismatch: errors[\"userNameMismatch\"]\r\n }\r\n }));\r\n }\r\n\r\n\r\n\r\n render() {\r\n \r\n const { errors, passwordData, invalidInput, invalidInputName, editingUserName, editingPassword } = this.state;\r\n\r\n const { isLoggedIn, technicalHelpDeskNumber, userName } = this.props;\r\n \r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n );\r\n };\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n isLoggedIn: state.domain.li,\r\n userName: state.domain.un,\r\n technicalHelpDeskNumber: state.session.serverData ? state.session.serverData.technicalHelpDeskNumber : \"\",\r\n Email: state.domain.e,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n refreshLoginSettings: () => {\r\n dispatch({\r\n type: types.RESET_LOGIN_SETTINGS_DATA \r\n });\r\n }\r\n };\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LoginSettings);","import React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { connect } from \"react-redux\";\r\nimport { Tooltip } from 'reactstrap';\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport GenericInput from \"../common/input/GenericInput\";\r\nimport SectionLoadingError from '../common/SectionLoadingError';\r\nimport DataComponent from \"../common/DataComponent\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport MiniSpinner from \"../common/MiniSpinner\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\n\r\n\r\nexport const initialState = {\r\n editingPassword: false,\r\n oldPassword: \"\",\r\n newPassword: \"\",\r\n newPasswordConfirmation: \"\",\r\n tooltipOpen: false,\r\n errors: {\r\n hasCapital: false,\r\n hasLower: false,\r\n hasSpecial: false,\r\n hasReqLength: false,\r\n passwordMismatch: false,\r\n newPasswordEmpty: true,\r\n oldPasswordEmpty: true,\r\n passwordConfirmationEmpty: true\r\n },\r\n};\r\n\r\nclass LoginSettingsUserName extends DataComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = initialState;\r\n\r\n this.toggleEdit = this.toggleEdit.bind(this);\r\n this.toggleTooltip = this.toggleTooltip.bind(this);\r\n this.save = this.save.bind(this);\r\n this.savePassword = this.savePassword.bind(this);\r\n this.handlePasswordInputChange = this.handlePasswordInputChange.bind(this);\r\n this.closeEdit = this.closeEdit.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n if (super.componentDidMount) { super.componentDidMount(); }\r\n logUI(\"MBHWeb.UI.LoginSettingsUserName.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n componentWillUnmount() {\r\n super.componentWillUnmount();\r\n const { clearPasswordChangeState } = this.props;\r\n clearPasswordChangeState();\r\n }\r\n\r\n\r\n toggleEdit() {\r\n const { editingPassword } = this.state;\r\n const { clearPasswordChangeState, passwordUpdateError } = this.props;\r\n if (editingPassword && passwordUpdateError) {\r\n clearPasswordChangeState();\r\n }\r\n this.setState({ editingPassword: !editingPassword });\r\n\r\n }\r\n\r\n save() {\r\n let { newName, newNameConfirmation, errors } = this.state;\r\n const { changeUserName, userName } = this.props;\r\n if (!errors.userNameMismatch && !errors.userNameEmpty && !errors.userNameConfirmationEmpty) {\r\n changeUserName(userName, newName, this.closeEdit);\r\n }\r\n }\r\n\r\n savePassword = () => {\r\n const { changePassword, isLoggedIn, userName } = this.props;\r\n const { oldPassword, newPassword, newPasswordConfirmation } = this.state;\r\n if (isLoggedIn) {\r\n logUI(\"MBHWeb.Login.Password.Change\", new Date(), Tools.getURLPath());\r\n changePassword(userName, oldPassword, newPassword, newPasswordConfirmation, this.closeEdit); //pass all password data \r\n\r\n }\r\n //this.togglePassword();\r\n }\r\n\r\n\r\n\r\n handlePasswordInputChange(event) {\r\n const target = event.target;\r\n const value = !target ? event : target.type === 'checkbox' ? target.checked : target.value;\r\n let { errors, oldPassword, newPassword, newPasswordConfirmation } = this.state;\r\n\r\n if (target.name === 'OldPassword') {\r\n oldPassword = value;\r\n }\r\n else if (target.name === 'NewPassword') {\r\n newPassword = value;\r\n } else if (target.name === 'ConfirmPassword') {\r\n newPasswordConfirmation = value;\r\n }\r\n\r\n errors.hasCapital = (/([A-Z]+)/g.test(newPassword)) ? true : false;\r\n errors.hasLower = (/([a-z]+)/g.test(newPassword)) ? true : false;\r\n errors.hasSpecial = (/[!@#$ %^&* (),.? \":{}|<>/[`~|\\]\\\\0-9]/g.test(newPassword)) ? true : false;\r\n errors.hasReqLength = newPassword.length > 7 ? true : false;\r\n errors.passwordConfirmationEmpty = newPasswordConfirmation.length < 1;\r\n errors.oldPasswordEmpty = oldPassword.length < 1;\r\n errors.newPasswordEmpty = newPassword.length < 1;\r\n errors.passwordMismatch = newPasswordConfirmation.length > 0 && newPassword !== newPasswordConfirmation;\r\n\r\n this.setState({\r\n oldPassword: oldPassword,\r\n newPassword: newPassword,\r\n newPasswordConfirmation: newPasswordConfirmation,\r\n errors: errors\r\n });\r\n\r\n window.componentChanged = true;\r\n\r\n return true;\r\n }\r\n\r\n\r\n closeEdit() {\r\n const { editingPassword } = this.state;\r\n if (editingPassword && this._isMounted) {\r\n this.setState({ editingPassword: false });\r\n }\r\n window.componentChanged = false;\r\n }\r\n\r\n toggleTooltip() {\r\n this.setState(prevState => ({\r\n tooltipOpen: !prevState.tooltipOpen\r\n }));\r\n }\r\n\r\n render() {\r\n\r\n const { isLoggedIn, passwordUpdateResponse, passwordUpdateError, apiPasswordErrorMessage, passwordChangeIsWaiting } = this.props;\r\n let { oldPassword, newPassword, newPasswordConfirmation, errors, editingPassword } = this.state;\r\n const enablePasswordSave = errors.hasCapital &&\r\n errors.hasLower &&\r\n errors.hasSpecial &&\r\n errors.hasReqLength &&\r\n !errors.passwordConfirmationEmpty &&\r\n !errors.passwordEmpty &&\r\n !errors.passwordMismatch && oldPassword;\r\n const passwordHasErrors = errors.newPasswordEmpty || !errors.hasCapital ||\r\n !errors.hasLower ||\r\n !errors.hasSpecial ||\r\n !errors.hasReqLength;\r\n const confirmationHasError = errors.passwordMismatch;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {passwordChangeIsWaiting ?
:\r\n
{/* Edit should change to Save and Cancel when clicked */}\r\n {!editingPassword ?
this.toggleEdit()}>Edit :\r\n
\r\n this.savePassword()}>Save \r\n this.toggleEdit()}>Cancel \r\n
\r\n }\r\n
\r\n }\r\n
\r\n
\r\n\r\n {/* Show this below the row above when user edits the password */}\r\n {editingPassword &&\r\n
\r\n
\r\n
\r\n this.handlePasswordInputChange(e)}\r\n showEye\r\n />\r\n
\r\n
\r\n
\r\n
\r\n this.handlePasswordInputChange(e)}\r\n showEye\r\n />\r\n
\r\n
\r\n\r\n
\r\n
\r\n this.handlePasswordInputChange(e)}\r\n showEye\r\n />\r\n \r\n {!errors.passwordMismatch && !errors.passwordConfirmationEmpty && <>Password matches>}\r\n \r\n
\r\n
\r\n
\r\n {errors.passwordMismatch &&\r\n
Password confirmation doesn’t match.
\r\n }\r\n
\r\n
\r\n
\r\n }\r\n\r\n
\r\n {passwordUpdateResponse &&
Your new password has been saved.
}\r\n {apiPasswordErrorMessage &&
}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n isLoggedIn: state.domain.li,\r\n userName: state.domain.un,\r\n passwordUpdateResponse: state.header.passwordUpdateResponse,\r\n passwordUpdateError: state.header.passwordUpdateError,\r\n apiPasswordErrorMessage: state.header.apiPasswordErrorMessage,\r\n email: state.domain.e,\r\n passwordChangeIsWaiting: state.header.passwordChangeIsWaiting\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n changePassword: (Email, OldPassword, NewPassword, ConfirmPassword, successCallback, failureCallback) => {\r\n dispatch({\r\n type: types.CHANGE_PASSWORD,\r\n Email: Email,\r\n OldPassword: OldPassword,\r\n NewPassword: NewPassword,\r\n ConfirmPassword: ConfirmPassword,\r\n successCallback: successCallback,\r\n failureCallback: failureCallback\r\n });\r\n },\r\n clearPasswordChangeState: () => {\r\n dispatch({\r\n type: types.CHANGE_PASSWORD_CLEAR\r\n });\r\n }\r\n };\r\n};\r\n\r\n\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LoginSettingsUserName);","import React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { connect } from \"react-redux\";\r\nimport { Tooltip } from 'reactstrap';\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport GenericInput from \"../common/input/GenericInput\";\r\nimport SectionLoadingError from '../common/SectionLoadingError';\r\nimport DataComponent from \"../common/DataComponent\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport MiniSpinner from \"../common/MiniSpinner\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\n\r\nexport const initialState = {\r\n showEdit: false,\r\n newName: \"\",\r\n newNameConfirmation: \"\",\r\n inputsDisabled: false,\r\n tooltipOpen: false,\r\n errors: {\r\n userNameMismatch: false,\r\n userNameEmpty: true,\r\n userNameConfirmationEmpty: true\r\n }\r\n};\r\n\r\nclass LoginSettingsUserName extends DataComponent {\r\n\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = Tools.deepCopy( initialState);\r\n\r\n this.toggleEdit = this.toggleEdit.bind(this);\r\n this.toggleTooltip = this.toggleTooltip.bind(this);\r\n this.save = this.save.bind(this);\r\n this.handleUserNameInputChange = this.handleUserNameInputChange.bind(this);\r\n this.closeEdit = this.closeEdit.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n if (super.componentDidMount) { super.componentDidMount(); }\r\n logUI(\"MBHWeb.UI.LoginSettingsUserName.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n componentWillUnmount() {\r\n super.componentWillUnmount();\r\n const { clearUserNameState } = this.props;\r\n this.setState(Tools.deepCopy(initialState));\r\n clearUserNameState();\r\n }\r\n\r\n\r\n toggleEdit() {\r\n const { showEdit } = this.state;\r\n const { clearUserNameState, userNameUpdateError } = this.props;\r\n if (showEdit && userNameUpdateError) {\r\n clearUserNameState();\r\n }\r\n this.setState({ showEdit: !showEdit });\r\n\r\n }\r\n\r\n save() {\r\n let { newName, newNameConfirmation, errors } = this.state;\r\n const { changeUserName, userName } = this.props;\r\n if (!errors.userNameMismatch && !errors.userNameEmpty && !errors.userNameConfirmationEmpty) {\r\n logUI(\"MBHWeb.Login.UserName.Change\", new Date(), Tools.getURLPath());\r\n changeUserName(userName, newName, this.closeEdit);\r\n }\r\n }\r\n\r\n handleUserNameInputChange(group, event) {\r\n const { email, userName } = this.props;\r\n let { newName, newNameConfirmation, inputsDisabled } = this.state;\r\n\r\n const target = event.target;\r\n\r\n if (target.type === 'checkbox') {\r\n if (target.checked) {\r\n inputsDisabled = true;\r\n newName = email;\r\n newNameConfirmation = email;\r\n }\r\n else {\r\n inputsDisabled = false;\r\n }\r\n } else if (target.name === \"NewUserNameConfirmation\") {\r\n newNameConfirmation = target.value;\r\n } else if (target.name === \"NewUserName\") {\r\n newName = target.value;\r\n }\r\n\r\n this.setState({\r\n newName: newName,\r\n newNameConfirmation: newNameConfirmation,\r\n inputsDisabled: inputsDisabled,\r\n errors: {\r\n userNameMismatch: newName !== newNameConfirmation,\r\n userNameEmpty: Tools.isEmptyString(newName),\r\n userNameConfirmationEmpty: Tools.isEmptyString(newNameConfirmation)\r\n }\r\n });\r\n\r\n window.componentChanged = true;\r\n\r\n }\r\n\r\n closeEdit() {\r\n const { showEdit } = this.state;\r\n if (showEdit && this._isMounted) {\r\n this.setState({ showEdit: false });\r\n }\r\n window.componentChanged = false;\r\n\r\n }\r\n\r\n clearMessageState() {\r\n const { clearUserNameState } = this.props;\r\n clearUserNameState();\r\n }\r\n\r\n toggleTooltip() {\r\n this.setState(prevState => ({\r\n tooltipOpen: !prevState.tooltipOpen\r\n }));\r\n }\r\n\r\n render() {\r\n\r\n const { isLoggedIn, userName, userNameUpdateResponse, userNameUpdateError, apiUserNameErrorMessage, userNameChangeIsWaiting} = this.props;\r\n let { newName, newNameConfirmation, inputsDisabled, errors, tooltipOpen, showEdit } = this.state;\r\n const enableSave = !errors.userNameMismatch && !errors.userNameEmpty && !errors.userNameConfirmationEmpty;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
{isLoggedIn && userName}
\r\n
\r\n
\r\n {userNameChangeIsWaiting ?
:\r\n
{/* Edit should change to Save and Cancel when clicked */}\r\n {!showEdit ?
this.toggleEdit()}>Edit :\r\n
\r\n Save \r\n Cancel \r\n
\r\n }\r\n
\r\n }\r\n
\r\n
\r\n\r\n {/* Show this below the row above when user edits the username */}\r\n {showEdit &&\r\n
\r\n
\r\n
\r\n
7) ? \" input-invalid\" : \"\"}\r\n disabled={inputsDisabled}\r\n onChange={(e) => this.handleUserNameInputChange('Generic', e)}\r\n value={newName}\r\n required\r\n autoFocus\r\n name=\"NewUserName\"\r\n autoComplete=\"new-password\"\r\n placeholder=\"New Username\"\r\n />\r\n \r\n {/* Add tooltip on hover: \"Username must not be less than 8 characters long.\" */}\r\n \r\n Username must not be less than 8 characters long.\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n this.handleUserNameInputChange('Generic', e)}\r\n value={newNameConfirmation}\r\n name=\"NewUserNameConfirmation\"\r\n autoComplete=\"new-password\"\r\n placeholder=\"Confirm New Username\"\r\n />\r\n \r\n {!errors.userNameMismatch && !errors.userNameEmpty && <>Username matches>}\r\n \r\n
\r\n
\r\n
\r\n {!errors.userNameConfirmationEmpty && errors.userNameMismatch &&\r\n
UserName confirmation doesn’t match.
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n \r\n this.handleUserNameInputChange('Generic', e)} />\r\n \r\n Use my email address as my username \r\n \r\n
\r\n
\r\n
You can update your email in personal information
\r\n
\r\n
\r\n
\r\n
\r\n }\r\n
\r\n {userNameUpdateResponse &&
Your new username has been saved.
}\r\n {apiUserNameErrorMessage &&
}\r\n {userNameUpdateError &&
}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n isLoggedIn: state.domain.li,\r\n userName: state.domain.un,\r\n userNameUpdateResponse: state.header.userNameResponse,\r\n userNameUpdateError: state.header.userNameUpdateError,\r\n apiUserNameErrorMessage: state.header.apiUserNameErrorMessage,\r\n email: state.domain.e,\r\n userNameChangeIsWaiting: state.header.userNameChangeIsWaiting\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n changeUserName: (OldUserName, NewUserName, successCallback, failureCallback) => {\r\n dispatch({\r\n type: types.CHANGE_USERNAME,\r\n OldUserName: OldUserName,\r\n NewUserName: NewUserName,\r\n successCallback: successCallback,\r\n failureCallback: failureCallback\r\n });\r\n },\r\n clearUserNameState: () => {\r\n dispatch({\r\n type: types.CHANGE_USERNAME_CLEAR\r\n });\r\n }\r\n };\r\n};\r\n\r\n\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LoginSettingsUserName);","import * as Tools from \"../../helpers/Tools\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport { Grid } from \"../ecosystem\";\r\nimport { LandingCard, PageHeading } from \"../ecosystem/mybswh\";\r\n\r\nconst ManageAccessLanding = (props) => {\r\n\r\n logUI(\"MBHWeb.UI.ManageAccess.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n\r\n const onClickTile = (tileName, routeName) => {\r\n logUI(`MBHWeb.UI.ManageAccessLanding.${tileName}.Clicked`, new Date(), Tools.getURLPath());\r\n if (routeName) {\r\n props.history.push(routeName);\r\n }\r\n };\r\n\r\n const headingText = \"Manage Accounts & Access\"\r\n const headingDesc = \"Bring your health information together.\"\r\n\r\n const { isMyChartUser, disableMyChartMenuItems, isPrimaryUser, sessionServerData } = Tools.handleMychartUserShowOrHideMenuItems();\r\n const enableHappyTogether = sessionServerData && sessionServerData.enableHappyTogether ? sessionServerData.enableHappyTogether : false;\r\n const { proxyName } = Tools.getProxyName();\r\n\r\n\r\n const landingItems = [\r\n {\r\n title: \"Community Accounts\",\r\n body: \"View health information from other organizations where you and your family have records.\",\r\n to: \"/communitymanage\",\r\n show: isMyChartUser && enableHappyTogether,\r\n disabled: disableMyChartMenuItems,\r\n onClick: () => { onClickTile(\"CommunityAccounts\"); }\r\n },\r\n {\r\n title: \"Linked Accounts\",\r\n body: \"Connect to employer programs, health plans, or pharmacy accounts.\",\r\n to: \"/linkedaccounts\",\r\n show: isPrimaryUser,\r\n onClick: () => { onClickTile(\"LinkedAccounts\"); }\r\n },\r\n {\r\n title: \"App & Device Access\",\r\n body: \"Manage apps and devices currently accessing your account.\",\r\n to: \"/linkeddevices\",\r\n show: isPrimaryUser,\r\n onClick: () => { onClickTile(\"AppDeviceAccess\"); }\r\n }\r\n ]\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n {\r\n landingItems.map((item, i) => {\r\n {\r\n return item.show ?\r\n
\r\n \r\n
\r\n : null\r\n }\r\n })\r\n }\r\n
\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default ManageAccessLanding","import * as React from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { connect } from \"react-redux\";\r\nimport { Tooltip } from 'reactstrap';\r\nimport ToggleSwitch from \"../common/input/ToggleSwitch\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport MyChartDataTile from \"../dashboard/MyChartDataTile\";\r\nimport SectionLoading from \"../common/SectionLoading\";\r\nimport SectionLoadingError from \"../common/SectionLoadingError\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport GeneralNotifications from \"./GeneralNotifications\";\r\nimport HealthPlanNotifications from \"./HealthPlanNotifications\";\r\nimport { PageHeading } from \"../ecosystem/mybswh\";\r\n\r\nconst pharmacyNotification = \"PharmacyNotification\";\r\n\r\nclass Notifications extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.toggleTooltip = this.toggleTooltip.bind(this);\r\n this.state = {\r\n UseEmail: false, UseSms: false, Phone: null, Email: null,\r\n showToolTip: false, alreadySet: false, useSmsChanging: false, useEmailChanging: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const { userName, getUserNotificationPreference } = this.props;\r\n this.setState({ alreadySet: false });\r\n getUserNotificationPreference(userName);\r\n logUI(\"MBHWeb.UI.Notifications.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n componentDidUpdate() {\r\n const { useSmsChanging, useEmailChanging, alreadySet } = this.state;\r\n const { rxNotificationUpdate, notificationData } = this.props;\r\n const error = rxNotificationUpdate && rxNotificationUpdate.error ? rxNotificationUpdate.error : null;\r\n\r\n const notificationPreferenceData = notificationData && !notificationData.waiting && notificationData.response && notificationData.response.length > 0 ? notificationData.response : [];\r\n if (!alreadySet) {\r\n for (let data of notificationPreferenceData) {\r\n if (data.EventName === pharmacyNotification) {\r\n const { UseEmail, UseSms, Phone, Email } = data;\r\n this.setState({ alreadySet: true, UseEmail, UseSms, Phone, Email });\r\n break;\r\n }\r\n }\r\n }\r\n if (useSmsChanging && error) {\r\n this.setState({ useSmsChanging: false, UseSms: !this.state.UseSms });\r\n }\r\n else if (useEmailChanging && error) {\r\n this.setState({ useEmailChanging: false, UseEmail: !this.state.UseEmail });\r\n }\r\n }\r\n\r\n onRxSmsNotificationChange(UseSms) {\r\n const { userName, savePharmacyNotificationPreference } = this.props;\r\n const { UseEmail, UsePush } = this.state;\r\n this.setState({ useSmsChanging: true, UseSms });\r\n savePharmacyNotificationPreference(userName, UseEmail, UseSms, UsePush, pharmacyNotification);\r\n }\r\n\r\n onRxEmailNotificationChange(UseEmail) {\r\n const { userName, savePharmacyNotificationPreference } = this.props;\r\n const { UseSms, UsePush } = this.state;\r\n this.setState({ useEmailChanging: true, UseEmail });\r\n savePharmacyNotificationPreference(userName, UseEmail, UseSms, UsePush, pharmacyNotification);\r\n }\r\n formattedPhone(phone) {\r\n return `${phone.AreaCode}.${phone.PhoneNumber.substr(0, 3)}.${phone.PhoneNumber.substr(3)}`;\r\n }\r\n\r\n toggleTooltip() {\r\n this.setState(prevState => ({\r\n showToolTip: !prevState.showToolTip\r\n }));\r\n }\r\n\r\n\r\n render() {\r\n const { serverData, rxDown, hasPharmacyLogin, hasMyChart, rxNotificationUpdate, isProxyUser, epicEHRDown, notificationData, hasSWHP, hasFirstCare, insuranceName, isMyChartInActive, removeBSWPharmacy } = this.props;\r\n const { UseEmail, UseSms, Phone, Email, showToolTip } = this.state;\r\n\r\n return (\r\n
\r\n
\r\n
\r\n\r\n
\r\n {serverData.enableGeneralNotification &&
}\r\n \r\n {removeBSWPharmacy === false && !isProxyUser &&
\r\n \r\n
\r\n
Pharmacy \r\n \r\n
\r\n {!rxDown\r\n ? \r\n {hasPharmacyLogin\r\n ? \r\n {typeof notificationData === 'undefined' || notificationData.waiting\r\n ? \r\n : notificationData.error\r\n ? \r\n : \r\n \r\n
\r\n
\r\n
\r\n
Mobile Phone:
\r\n
{Phone ? this.formattedPhone(Phone) : 'None entered'}
\r\n
\r\n
\r\n
Email:
\r\n
{Email ? Email : 'None entered'}
\r\n
\r\n
\r\n Edit in your profile\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
Prescriptions \r\n \r\n Be notified when they’re ready to refill and/or pickup.\r\n \r\n
\r\n
\r\n
\r\n this.onRxSmsNotificationChange(checked)}\r\n />\r\n
\r\n
\r\n this.onRxEmailNotificationChange(checked)}\r\n />\r\n
\r\n
\r\n {rxNotificationUpdate &&\r\n
\r\n {rxNotificationUpdate.waiting\r\n ? \r\n : rxNotificationUpdate.error\r\n ? \r\n : rxNotificationUpdate.response && Your change has been successfully saved. \r\n }\r\n
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
Manage in MyBSWHealth mobile app.
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n }\r\n\r\n\r\n \r\n : \r\n You haven’t linked a BSWH pharmacy account yet. You can do this {' '}\r\n here.\r\n
\r\n }\r\n \r\n : \r\n }\r\n \r\n }\r\n \r\n \r\n {(hasSWHP || hasFirstCare) && serverData && serverData.enableNewHealthPlan && !isProxyUser &&\r\n
\r\n
\r\n
\r\n
{\r\n `${ insuranceName ? insuranceName : hasFirstCare ? \"FirstCare Health Plans\" : \"Baylor Scott & White Health Plan\"}`}\r\n \r\n \r\n
\r\n
You can manage your notifications here.
\r\n
\r\n /*
*/\r\n } \r\n {hasMyChart &&\r\n
\r\n \r\n
\r\n
Medical Records \r\n \r\n
\r\n {!epicEHRDown && !isMyChartInActive ?\r\n \r\n :\r\n \r\n }\r\n \r\n }\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n rxDown: state.common.rxDown,\r\n hasPharmacyLogin: state.memberships.isActiveFeature_Pharmacy,\r\n hasMyChart: state.domain.hm,\r\n serverData: state.session.serverData,\r\n userName: state.domain.un,\r\n isProxyUser: state.domain.ip,\r\n rxNotificationUpdate: state.common[types.PHARMACY_NOTIFICATION_PREFERENCE_SAVE],\r\n epicEHRDown: state.common.epicEHRDown,\r\n notificationData: state.common[types.GET_USER_NOTIFICATION_PREFERENCE],\r\n bffDashboardData: state.dashboard.bffDashboardData,\r\n currentUser: state.memberships.currentUser,\r\n hasSWHP: state.memberships.hasAnySWHP,\r\n hasFirstCare: state.memberships.hasFC,\r\n insuranceName: state.session.insuranceName,\r\n isMyChartInActive: state.dashboard.isMyChartInActive,\r\n removeBSWPharmacy: state.session.serverData ? state.session.serverData.removeBSWPharmacy : false\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n getUserNotificationPreference: (userName) => dispatch({ type: types.GET_USER_NOTIFICATION_PREFERENCE, data: userName }),\r\n savePharmacyNotificationPreference: (userName, useEmail, useSms, usePush, eventName) =>\r\n dispatch({ type: types.PHARMACY_NOTIFICATION_PREFERENCE_SAVE, data: { userName, useEmail, useSms, usePush, eventName } })\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Notifications);","import * as React from \"react\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport MyChartContainer from \"../mychart/MyChartContainer\";\r\nimport { MyChartHeading } from \"../ecosystem/mybswh\";\r\n\r\nconst Preferences = (props) => {\r\n logUI(\"MBHWeb.UI.Preferences.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n const serverData = props.serverData;\r\n const { proxyName } = Tools.getProxyName();\r\n const heading = (\r\n
\r\n );\r\n\r\n return
;\r\n};\r\n\r\nexport default Preferences;","import * as React from \"react\";\r\nimport MyChartDataTile from \"../dashboard/MyChartDataTile\";\r\nimport { connect } from \"react-redux\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport ProxySetup from \"../proxyManagement/ProxySetup\";\r\nimport * as d from \"../../reducers/domainReducer\";\r\nimport { getFirstName } from \"../../helpers/formatting\";\r\nimport * as msgs from \"../../constants/textConstants\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Typography, Notifier } from \"../ecosystem\";\r\nimport { PageHeading } from \"../ecosystem/mybswh\";\r\nclass ProxyManagement extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n componentDidMount() {\r\n logUI(\"MBHWeb.UI.ProxyManagement.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n render() {\r\n let { serverData, hasMyChart, location, rxDown, epicEHRDown, myChartRegistrationUrl, technicalHelpDeskNumber, technicalHelpDeskHours, currentMyChartUser, isProxyUser, screenBreakPoint, removeBSWPharmacy } = this.props;\r\n const referrer = location && location.state && location.state.referrer ? location.state.referrer : null;\r\n let showForPrimaryUser = false;\r\n let markup = \"\";\r\n let displayName = \"\";\r\n let isMinor = \"\";\r\n const technicalAssistanceMsg = `For assistance, call the MyBSWHealth technical help desk ${technicalHelpDeskHours} at `;\r\n const isMobile = ([msgs.XS_MOBILE, msgs.SM_MOBILE, msgs.MD_TABLET, msgs.LG_TABLET, msgs.XL_DESKTOP]).indexOf(screenBreakPoint) > -1 ? true : false;\r\n\r\n if (isProxyUser && currentMyChartUser) { //user is mychart proxy, so take age and show the appropriate message. \r\n const isAdult = currentMyChartUser && currentMyChartUser.ageYears && currentMyChartUser.ageYears >= 14;\r\n isMinor = currentMyChartUser && currentMyChartUser.ageYears && currentMyChartUser.ageYears >= 0 && currentMyChartUser.ageYears <= 13;\r\n displayName = currentMyChartUser && currentMyChartUser.firstName ? currentMyChartUser.firstName : currentMyChartUser ? getFirstName(currentMyChartUser.displayName) : \"\";\r\n if (isAdult) {\r\n markup = (
\r\n
\r\n {displayName} must manage their family access within their own MyBSWHealth account. If they do not have one they can create one here. \r\n {technicalAssistanceMsg} {technicalHelpDeskNumber} .\r\n \r\n
);\r\n }\r\n else if (isMinor) {\r\n markup = (
\r\n
\r\n {displayName} cannot manage their family access within MyBSWHealth. They must be at least 14 years old. \r\n {technicalAssistanceMsg} {technicalHelpDeskNumber} .\r\n \r\n
);\r\n } else { // if age is unknown for mychart proxies.\r\n markup = (
\r\n
\r\n {displayName} must manage their family access within their own MyBSWHealth account. They must be at least 14 years old to have an account and can create one here. \r\n {technicalAssistanceMsg} {technicalHelpDeskNumber} .\r\n \r\n
);\r\n }\r\n } else {\r\n showForPrimaryUser = true; // user is primary user.\r\n }\r\n return (\r\n
\r\n
\r\n
\r\n {removeBSWPharmacy &&\r\n \r\n Your Pharmacy Records and Medical Records have been combined.\r\n \r\n }\r\n \r\n
\r\n
\r\n {showForPrimaryUser ?\r\n
\r\n
\r\n
\r\n
\r\n\r\n {/*hasMyChart &&\r\n
\r\n
\r\n
\r\n
Medical Records \r\n \r\n
\r\n {!epicEHRDown ?\r\n
\r\n :\r\n
\r\n }\r\n
\r\n */}\r\n
\r\n
\r\n\r\n : (
\r\n )}\r\n
);\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n hasMyChart: state.domain.hm,\r\n serverData: state.session.serverData,\r\n rxDown: state.common.rxDown,\r\n epicEHRDown: state.common.epicEHRDown,\r\n myChartRegistrationUrl: state.session.serverData && state.session.serverData.myChartRegistrationUrl,\r\n technicalHelpDeskNumber: state.session.serverData ? state.session.serverData.technicalHelpDeskNumber : \"\",\r\n technicalHelpDeskHours: state.session.serverData ? state.session.serverData.technicalHelpDeskHours : \"\",\r\n currentMyChartUser: d.hydrateProxyUser(state.domain.cu),\r\n currentPharmacyUser: d.hydratePharmacyUser(state.domain.cpu),\r\n removeBSWPharmacy: state.session.serverData ? state.session.serverData.removeBSWPharmacy : false,\r\n\r\n screenBreakPoint: state.common.screenBreakPoint,\r\n isProxyUser: state.domain.ip\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ProxyManagement);","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport * as d from \"../../reducers/domainReducer\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nclass ProxyMgmtForPharamcyProxies extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n componentDidMount() {\r\n logUI(\"MBHWeb.UI.ProxyMgmtForPharamcyProxies.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n render() {\r\n let { myChartRegistrationUrl, technicalHelpDeskNumber, technicalHelpDeskHours ,currentPharmacyUser } = this.props;\r\n let displayName = currentPharmacyUser ? currentPharmacyUser.firstName : \"\";\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Grant or Access Family Accounts ({displayName}) \r\n \r\n
\r\n
\r\n {displayName} must manage their family access within their own MyBSWHealth account. They must be at least 14 years old to have an account and can create one here. \r\n For assistance, please call the MyBSWHealth Technical Help Desk {technicalHelpDeskHours} at{' '} {technicalHelpDeskNumber} .\r\n \r\n
\r\n
\r\n
\r\n
\r\n
);\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n myChartRegistrationUrl: state.session.serverData && state.session.serverData.myChartRegistrationUrl,\r\n technicalHelpDeskNumber: state.session.serverData ? state.session.serverData.technicalHelpDeskNumber : \"\",\r\n technicalHelpDeskHours: state.session.serverData ? state.session.serverData.technicalHelpDeskHours:\"\",\r\n currentPharmacyUser: d.hydratePharmacyUser(state.domain.cpu)\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ProxyMgmtForPharamcyProxies);","import * as React from \"react\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\n\r\n/**\r\n * Container component for the Settings page.\r\n * \r\n */\r\nclass Settings extends React.Component {\r\n\r\n componentDidMount() {\r\n logUI(\"MBHWeb.UI.Settings.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n
\r\n
Settings \r\n \r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nexport default Settings;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst propTypes = {\r\n message: PropTypes.string, // success message\r\n showMessage: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]) // To show/hide the message\r\n}\r\nconst SuccessBanner = ({ message, showMessage }) => {\r\n return (\r\n <>\r\n {showMessage &&\r\n
\r\n \r\n {message} \r\n
\r\n }\r\n >\r\n );\r\n}\r\n\r\nSuccessBanner.propTypes = propTypes;\r\n\r\nexport default SuccessBanner;","import * as React from \"react\";\r\nimport Autocomplete from \"react-autocomplete\";\r\nimport AutocompleteInput from \"../common/input/AutocompleteInput\";\r\nimport { Link, withRouter } from \"react-router-dom\";\r\nimport WhatsNewHeadings from \"./WhatsNewHeadings\";\r\nimport * as d from \"../../reducers/domainReducer\";\r\nimport Cookies from \"cookies-js\";\r\nimport { connect } from \"react-redux\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\n\r\nconst Interactive_InApp_Tutorial = 'InteractiveInAppTutorial'; //cookie name for Interactive In App Site Tour\r\n\r\nclass WhatsNew extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n value: '',\r\n showMenu: false,\r\n showMenuApril: false\r\n };\r\n\r\n }\r\n\r\n componentDidMount() {\r\n logUI(\"MBHWeb.UI.WhatsNew.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n takeTour() {\r\n if (Cookies.get(Interactive_InApp_Tutorial)) {\r\n Cookies.set(Interactive_InApp_Tutorial, false, { path: '/' });\r\n }\r\n if (this.props.history) {\r\n this.props.history.push('/?whatsnew=1');\r\n }\r\n }\r\n\r\n render() {\r\n let contentObject = [];\r\n\r\n const { currentPharmacyUser, serverData } = this.props;\r\n\r\n const careOptionType = serverData && serverData.careOptions ? serverData.careOptions : \"Convenient Care Options\";\r\n const careOptionsImg = careOptionType.toLowerCase().split(\" \");\r\n const imageSrc = \"/images/\" + careOptionsImg[0] + \"-care-tile.jpg\";\r\n\r\n const UrgentCare = '
The ' + careOptionType + ' tile presents a full range of service options for “urgent care like” needs. Finding same day care is now easier than ever. Within ' + careOptionType + ' you can receive care through:
In-Person Appointment – See available walk-in locations or appointments today for a doctor near you eVisit – Complete an assessment in 5-10 minutes and receive a doctor response in less than an hour Video Visit - Schedule a 20 minute video visit to receive care at your convenience (Note: only available to small pilot group in March release. This will be expanded to all users in coming months)
';\r\n const EnhancedSearchScheduling = '
You can now search by condition, treatment, or specialty and receive a list of both doctors and locations that meet your search criteria. Online scheduling is also easier than ever. The next 3 available time slots will show in the search results for many BSWH doctors and scheduling has been streamlined down to 3 short steps.
';\r\n const WhatsNew = '
This section will highlight the key features that are included in each release. Check back on occasion to learn about new offerings.
';\r\n\r\n contentObject.push({ ContentId: \"Whatsnew_bswh1\", ContentName: careOptionType, content: UrgentCare ? UrgentCare : '' });\r\n contentObject.push({ ContentId: \"Whatsnew_bswh2\", ContentName: \"Enhanced Search & Scheduling\", content: EnhancedSearchScheduling ? EnhancedSearchScheduling : '' });\r\n contentObject.push({ ContentId: \"Whatsnew_bswh3\", ContentName: \"What's New\", content: WhatsNew ? WhatsNew : '' });\r\n\r\n\r\n var RenderContent = contentObject.map(function (item, key) {\r\n return (\r\n
\r\n );\r\n });\r\n return (\r\n
\r\n
\r\n
\r\n
What's New \r\n
\r\n {!currentPharmacyUser ?\r\n
\r\n
\r\n
\r\n Get a detailed overview of some of the new website changes.\r\n
\r\n
\r\n this.takeTour()}>TAKE A QUICK TOUR \r\n
\r\n
\r\n
: null}\r\n
\r\n
\r\n
\r\n
{ if (key.keyCode === 13) this.search(value); },\r\n //onFocus: () => this.onFocus()\r\n }}\r\n items={[\r\n { label: 'Redesigned website', id: 1 },\r\n { label: 'Urgent Care Options', id: 2 }\r\n ]}\r\n //shouldItemRender={(item, value) => item.label.toLowerCase().indexOf(value.toLowerCase()) > -1}\r\n getItemValue={(item) => item.label}\r\n renderItem={(item, highlighted) =>\r\n (\r\n {item.label}\r\n
)\r\n }\r\n value={this.state.value}\r\n onChange={(e) => this.setState({ value: e.target.value })}\r\n onSelect={(value) => this.setState({ value })}\r\n />\r\n Search
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n this.setState({ showMenu: !this.state.showMenu })}>
{this.state.showMenu ? : }MARCH 2019 \r\n {this.state.showMenu &&\r\n \r\n }\r\n \r\n
\r\n {/*
\r\n this.setState({ showMenuApril: !this.state.showMenuApril })}>
{this.state.showMenuApril ? : }APRIL 2019 \r\n {this.state.showMenuApril &&\r\n \r\n }\r\n */}\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
March 2019 \r\n \r\n
\r\n {/*
\r\n
\r\n
*/ }\r\n {RenderContent}\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n currentPharmacyUser: d.hydratePharmacyUser(state.domain.cpu),\r\n serverData: state.session.serverData\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WhatsNew);","import * as React from \"react\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\n\r\nclass WhatsNewHeadings extends React.Component {\r\n constructor(props) {\r\n super(props); \r\n }\r\n\r\n componentDidMount() {\r\n logUI(\"MBHWeb.UI.WhatsNewHeadings.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n render() {\r\n\r\n let { ContentId, ContentName, content } = this.props;\r\n \r\n return (\r\n\r\n
\r\n
\r\n
{ContentName} \r\n {content &&
}\r\n
\r\n
\r\n\r\n );\r\n }\r\n};\r\n\r\nexport default WhatsNewHeadings;\r\n","import React, { useState } from 'react';\r\nimport CircularProgressbar from \"../common/CircularProgressbar\";\r\n\r\n\r\nfunction Accordion(props) {\r\n const { group, index, hideNavLink, onClickHandler, isOverallScore, report } = props;\r\n const [showContent, setShowContent] = useState(false);\r\n if (showContent && !hideNavLink) {\r\n setShowContent(false)\r\n }\r\n function onMenuClick() {\r\n setShowContent(true)\r\n onClickHandler(group && group.groupTitle || 'Overall score');\r\n }\r\n return (\r\n
\r\n {!hideNavLink && isOverallScore &&
{ onMenuClick() }}>\r\n
\r\n \r\n
\r\n
Overall score
\r\n
\r\n
}\r\n {!hideNavLink && !isOverallScore &&
{ onMenuClick() }}>\r\n
\r\n \r\n
\r\n
{group.groupTitle}
\r\n
\r\n
}\r\n {showContent && !isOverallScore &&
\r\n
\r\n
\r\n
{group.groupTitle}
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n {group.wellnessQuestions.map(question => {\r\n return
\r\n
\r\n
\r\n {question.answers.map(answer => {\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 {isOverallScore && showContent &&
\r\n
\r\n
\r\n
{report.overallScoreTitle}
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
{report.overallScoreInterpretation}
\r\n
\r\n
\r\n
\r\n
\r\n
}\r\n
)\r\n \r\n}\r\n\r\nexport default Accordion;","import React from \"react\";\r\nimport { connect } from 'react-redux';\r\n\r\n// Function to add link to phone number with '-' seperated \r\n// will change this code to common.tools.linkphonenumber once api will correct itself\r\nconst linkPhoneNumber = (stringWithPhoneNumber) => {\r\n const regex = /.*(\\d{3}\\-[A-Z]{3}\\-[A-Z]{4}[ ][(]\\d{3}\\-\\d{3}\\-\\d{4}[)]).*/;\r\n const matchedPhoneNumber = stringWithPhoneNumber.match(regex) && stringWithPhoneNumber.match(regex)[1];\r\n const linkedPhoneNumber = `
${matchedPhoneNumber} `;\r\n if (matchedPhoneNumber)\r\n stringWithPhoneNumber = stringWithPhoneNumber.replace(matchedPhoneNumber, linkedPhoneNumber);\r\n return stringWithPhoneNumber;\r\n};\r\n\r\nconst linkURL = (stringWithURL) => {\r\n const regex = /[[](https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|www\\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\\.[^\\s]{2,}|https?:\\/\\/(?:www\\.|(?!www))[a-zA-Z0-9]+\\.[^\\s]{2,}|www\\.[a-zA-Z0-9]+\\.[^\\s]{2,})/;\r\n const matchedURL = (stringWithURL.match(regex) && stringWithURL.match(regex)[0]) || \"\";\r\n const linkedURL = `
${matchedURL} `;\r\n if (linkedURL)\r\n stringWithURL = stringWithURL.replace(matchedURL, linkedURL);\r\n return stringWithURL;\r\n}\r\n\r\nconst ActionPlanTile = props => {\r\n const { report, currentYear } = props;\r\n let discussion = [];\r\n let hasDiscussion = false;\r\n // Get Current year data to show current year score \r\n let currentYearReport = report && report.length > 0 && report.filter(item => item.year === currentYear)[0];\r\n if (currentYearReport && currentYearReport.discussionPoints && currentYearReport.discussionPoints.length > 0) {\r\n discussion = currentYearReport.discussionPoints.map((discussion, i) => {\r\n let html = linkPhoneNumber(discussion);\r\n html = linkURL(html);\r\n hasDiscussion = true;\r\n return (\r\n
\r\n );\r\n });\r\n }\r\n try {\r\n return
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
ACTION PLAN
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {hasDiscussion === true ?\r\n
\r\n :\r\n
Find a doctor or specialist if you would like to discuss your wellness report.
\r\n }\r\n
\r\n
\r\n
\r\n
;\r\n } catch (ex) {\r\n console.error(ex);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n report: state.thrive.report\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps, null)(ActionPlanTile);","import React from 'react';\r\nimport { Link, withRouter } from \"react-router-dom\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport CircularProgressbar from \"../common/CircularProgressbar\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\n\r\nclass AssessmentSuccessTile extends React.Component {\r\n\r\n render() {\r\n const { containerClass, iconInnerClass, showScore, score, overallScoreColor, linkText, linkLogAndylyticsText, linkUrl, cardHeading, subHeading } = this.props;\r\n return (
\r\n
\r\n
\r\n
\r\n
\r\n
{cardHeading} \r\n \r\n
\r\n
\r\n
\r\n
\r\n
{subHeading}
\r\n
It may take up to 10 business days for your completion status and points to appear in your Thrive365 portal.
\r\n {linkText && linkUrl &&
logUI(linkLogAndylyticsText ? linkLogAndylyticsText : \"MBHWeb.UI.WellnessTile.Reports.Clicked\", new Date(), Tools.getURLPath())}>\r\n {linkText}\r\n \r\n }\r\n
\r\n
\r\n
\r\n
\r\n {showScore &&\r\n
\r\n }\r\n {iconInnerClass &&
\r\n
\r\n
While completing a preventive care visit is not a Thrive requirement this year, we encourage everyone to continue their preventive care visits as recommended and in accordance with their health care provider.
\r\n
\r\n
}\r\n\r\n
\r\n
);\r\n }\r\n\r\n}\r\n\r\nexport default AssessmentSuccessTile;","import React from \"react\";\r\n\r\nconst CoachingTile = props => {\r\n try {\r\n return
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
WELLNESS COACHING
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n <>\r\n
\r\n Available to You and Your Spouse \r\n Meet with a Wellness Coach \r\n Improve Your Well-being \r\n \r\n >\r\n\r\n
\r\n
\r\n
\r\n
\r\n
;\r\n } catch (ex) {\r\n console.error(ex);\r\n }\r\n}\r\n\r\nexport default CoachingTile;","import React, { useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { logToAndylitics } from \"../../api/andyliticsApi\";\r\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from 'reactstrap';\r\nimport { Link } from \"react-router-dom\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport * as Tools from \"../../helpers/Tools\";\r\n\r\nconst THRIVE_URL = \"https://bswh.livehealthyignite.com/users/sign_in\";\r\n\r\nconst EarnPointsTile = props => {\r\n const [openModal, toggleModal] = useState(false);\r\n const { thrive, hasMyChart, serverData } = props;\r\n const enableCustomDirectScheduling = serverData && serverData.enableCustomDirectScheduling ? serverData.enableCustomDirectScheduling : false;\r\n const thriveMainUrl = THRIVE_URL; //thrive && thrive.thriveMainUrl ? thrive.thriveMainUrl : \"\";\r\n const logActivity = () => {\r\n logToAndylitics('MBHWeb.EarnPoints.VisitThrive.Redirect', new Date(), thriveMainUrl);\r\n }\r\n return
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
EARN THRIVE POINTS
\r\n
toggleModal(!openModal)} />\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
Earn points by completing a Preventive Care Exam, talking with a Wellness coach, or completing a Thrive Culture Activity.
\r\n\r\n
Track and learn more about points at Thrive365.
\r\n
\r\n
\r\n
\r\n
\r\n
toggleModal(!openModal)} centered>\r\n \r\n Earn Points \r\n \r\n \r\n \r\n
\r\n
If you have questions about missing points or the requirements for earning points, please read our\r\n {serverData && serverData.wellnessFAQURL && FAQs. } \r\n \r\n *Does not apply to employees with non-BSWH coverage.\r\n
\r\n
\r\n
\r\n
\r\n \r\n Preventive Care Exam \r\n If you haven't already, be sure to schedule your annual wellness-visit with your doctor.
\r\n {!hasMyChart ?\r\n SCHEDULE APPOINTMENT :\r\n logUI(\"MBHWeb.UI.EarnPoints.Schedule\", new Date(), Tools.getURLPath())}>SCHEDULE APPOINTMENT\r\n } \r\n\r\n \r\n \r\n Wellness Coaching \r\n Schedule a meeting with a Wellness Coach. Available to you and your spouse.
\r\n logUI(\"MBHWeb.UI.EarnpointsTile.ThriveWellnessCoaching\", new Date(), Tools.getURLPath())}\r\n target=\"_blank\">BOOK A SESSION\r\n \r\n \r\n Well-being Journeys \r\n Well-being Journeys set you on a path of education and activities to promote awareness in the areas you are intrested in.
\r\n logUI(\"MBHWeb.UI.EarnPointsTile.StartJourneyClicked\", new Date(), Tools.getURLPath())}>START A JOURNEY\r\n \r\n \r\n Culture Activities \r\n Approved Thrive365 events you can participate in on your road to Well-being.
\r\n LEARN MORE\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n toggleModal(false)}>OKAY \r\n \r\n \r\n
;\r\n}\r\nconst mapStateToProps = (state) => {\r\n return {\r\n thrive: state.header.thrive,\r\n hasMyChart: !state.common.epicEHRDown && state.domain.hm,\r\n serverData: state.session.serverData\r\n };\r\n};\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(EarnPointsTile);\r\n\r\n","import * as React from \"react\";\r\nimport { logToAndylitics } from \"../../api/andyliticsApi\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\n\r\nexport default class MyChartActivation extends React.Component {\r\n\r\n componentDidMount() {\r\n logUI(\"MBHWeb.UI.MyChartActivation.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n logActivity(activityPath, url) {\r\n logToAndylitics(activityPath, new Date(), url);\r\n }\r\n\r\n render() {\r\n const { myChartLinkUrl, myChartActivationUrl } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
Baylor Scott & White employees, it’s that time again.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n}","import React from \"react\";\r\nimport { connect } from 'react-redux';\r\n\r\nconst PledgeTile = props => {\r\n const { report, currentYear } = props; \r\n // Get Current year data to show current year score \r\n let currentYearReport = report && report.length > 0 && report.filter(item => item.year === currentYear)[0];\r\n const pledge = currentYearReport && currentYearReport.pledge ? currentYearReport.pledge : '';\r\n try {\r\n return
;\r\n } catch (ex) {\r\n console.error(ex);\r\n }\r\n}\r\n\r\nfunction mapStateToProps(state) {\r\n return {\r\n report: state.thrive.report\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps, null)(PledgeTile);","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter, Link } from \"react-router-dom\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport * as Tools from \"../../helpers/Tools\";\r\n\r\nconst PreventiveCareExamTile = props => {\r\n try {\r\n const { hasMyChart, serverData } = props;\r\n \r\n const enableCustomDirectScheduling = serverData && serverData.enableCustomDirectScheduling ? serverData.enableCustomDirectScheduling : false;\r\n return
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
PREVENTIVE CARE EXAM
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
If you haven't already, be sure to schedule your annual wellness-visit with your doctor.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {!hasMyChart ?\r\n
SCHEDULE APPOINTMENT :\r\n
logUI(\"MBHWeb.UI.WellBeingDashboard.PreventiveCareExamTile.Schedule\", new Date(), Tools.getURLPath())}>SCHEDULE APPOINTMENT\r\n }\r\n
\r\n
\r\n
\r\n
;\r\n } catch (ex) {\r\n console.error(ex);\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n hasMyChart: !state.common.epicEHRDown && state.domain.hm,\r\n serverData: state.session.serverData\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n };\r\n};\r\n\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(PreventiveCareExamTile));","import * as React from \"react\";\r\nimport { logToAndylitics } from \"../../api/andyliticsApi\";\r\nimport { Link } from \"react-router-dom\";\r\n\r\nexport default class StartThrive extends React.Component {\r\n logActivity() {\r\n logToAndylitics('MBHWeb.Thrive.Start.Redirect', new Date(), this.props.thriveGetStartedUrl);\r\n }\r\n\r\n render() {\r\n const { thriveGetStartedUrl } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
Baylor Scott & White employees, it’s that time again.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Submit your Thrive health screening by November 9 in order to avoid paying an additional $30 per pay period in 2019. \r\n
\r\n
\r\n To complete the Thrive Health Screening, you must be a Baylor Scott & White Employee. Spouses are optional and may submit only if desired.\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n this.logActivity()}>\r\n Get Started\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n}","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport VisitThrive from \"./VisitThrive\";\r\nimport StartThrive from \"./StartThrive\";\r\nimport MyChartActivation from \"./MyChartActivation\";\r\nimport NotAuthorized from \"../common/NotAuthorized\";\r\nimport { logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\n\r\n/**\r\n * Container component for the Thrive page.\r\n * \r\n */\r\nclass Thrive extends React.Component {\r\n\r\n componentDidMount() {\r\n logUI(\"MBHWeb.UI.Thrive.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n render() {\r\n const thrive = this.props.thrive;\r\n if (!thrive) {\r\n return null;\r\n }\r\n return (\r\n
\r\n {thrive.canVisitThrive ?\r\n (\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n {/*
\r\n {thrive.hasMyChart ?\r\n :\r\n \r\n }\r\n
*/}\r\n
\r\n
\r\n
\r\n
) :\r\n \r\n }\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n thrive: state.header.thrive\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n };\r\n};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(Thrive);","import * as React from \"react\";\r\nimport { logToAndylitics, logUI } from \"../../api/andyliticsApi\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\n\r\nexport default class VisitThrive extends React.Component {\r\n\r\n componentDidMount() {\r\n logUI(\"MBHWeb.UI.VisitThrive.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n logActivity() {\r\n logToAndylitics('MBHWeb.Thrive.Visit.Redirect', new Date(), this.props.thriveMainUrl);\r\n }\r\n\r\n render() {\r\n const { employeeLoggedIn, thriveMainUrl } = this.props;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
Be your better self more often.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n Even if you can't be at your best all the time, what if you could have more energy, \r\n stress less, or kick that not-so-great-for-you habit? \r\n
\r\n
\r\n We'll help you build skills based on your goals, needs, and life to help improve your health.\r\n {employeeLoggedIn ? '' : ' And you just may find you can be at your best more often.'}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter, Link } from \"react-router-dom\";\r\nimport queryString from 'query-string';\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport * as dateTime from \"../../helpers/dateTime\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport Spinner from \"../common/spinner\";\r\nimport NotAuthorized from '../common/NotAuthorized';\r\nimport StatusBanner from '../common/StatusBanner';\r\nimport PledgeTile from './PledgeTile';\r\nimport EarnPointsTile from './EarnPointsTile';\r\nimport WellBeingScoreTile from './WellBeingScoreTile';\r\nimport CoachingTile from './CoachingTile';\r\nimport WellnessGoals from './WellnessGoals';\r\nimport SectionLoadingError from \"../common/SectionLoadingError\";\r\nimport PreventiveCareExamTile from './PreventiveCareExamTile';\r\nimport ActionPlanTile from './ActionPlanTile';\r\n\r\nclass WellBeingDashboard extends React.Component {\r\n\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n const { wellnessDueDate } = this.props.serverData;\r\n //let qValues = this.props.location && this.props.location.search && queryString.parse(this.props.location.search);\r\n //const currentYear = qValues && qValues.year ? parseInt(qValues.year) : new Date(wellnessDueDate).getFullYear();\r\n const currentYear = new Date(wellnessDueDate).getFullYear();\r\n this.state = { tryAgain: false, currentYear: currentYear };\r\n }\r\n\r\n componentDidMount() {\r\n this.props.getWellnessReportV2(this.props.userToken, this.state.currentYear);\r\n logUI(\"MBHWeb.UI.WellBeingDashboard.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n tryAgain = (e) => {\r\n e.preventDefault();\r\n this.setState({ tryAgain: true });\r\n logUI(\"MBHWeb.UI.WellnessReport.onTryAgain\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n render() {\r\n const { hasMyChartLogin, dcjSelfOrderFailure, isProxyUser, serverData } = this.props;\r\n const { tryAgain, currentYear } = this.state;\r\n const wellnessDueDate = serverData && serverData.wellnessDueDate ? dateTime.formatDate(serverData.wellnessDueDate) : 'NA' ;\r\n\r\n\r\n return ( \r\n isProxyUser ?
:
\r\n\r\n {this.props.reportPending === true ?
:\r\n dcjSelfOrderFailure && !tryAgain ?
\r\n \r\n Please this.tryAgain(e)}>try again later. \r\n \r\n
\r\n
:\r\n (this.props.reportError ?\r\n
\r\n :\r\n this.props.reportSuccess === true &&\r\n\r\n <>\r\n {/*!hasMyChartLogin ?\r\n
\r\n :*/\r\n
\r\n
\r\n
\r\n
\r\n
Well-being Dashboard \r\n
Complete your Well-being Assessment and earn 365 Thrive points by {wellnessDueDate} to avoid a $40 per pay period surcharge.
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n }\r\n >\r\n\r\n )}\r\n
\r\n )\r\n }\r\n}\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n hasMyChartLogin: state.domain.hm,\r\n report: state.thrive.report,\r\n reportPending: state.thrive.reportPending,\r\n reportSuccess: state.thrive.reportSuccess,\r\n reportError: state.thrive.reportError,\r\n userToken: state.domain.t,\r\n dcjSelfOrderPending: state.dashboard.dcjSelfOrderPending,\r\n dcjSelfOrderSuccess: state.dashboard.dcjSelfOrderSuccess,\r\n dcjSelfOrderFailure: state.dashboard.dcjSelfOrderFailure,\r\n isProxyUser: state.domain.ip,\r\n serverData: state.session.serverData,\r\n ...ownProps\r\n \r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n getWellnessReportV2: (token, reportYear) => {\r\n dispatch({ type: types.THRIVE_GET_REPORT, token, reportYear });\r\n }\r\n };\r\n};\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(WellBeingDashboard));","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { Link } from \"react-router-dom\";\r\nimport WellnessGoals from './WellnessGoals';\r\nimport SectionLoadingError from \"../common/SectionLoadingError\";\r\nimport ReactPlayer from \"react-player\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport * as Tools from \"../../helpers/Tools\";\r\n\r\nclass WellBeingJourney extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n const { wellnessDueDate } = this.props.serverData;\r\n this.currentYear = new Date(wellnessDueDate).getFullYear();\r\n const windowWidth = document.documentElement.clientWidth || document.body.clientWidth;\r\n this.state = {\r\n showVideoLink: 'd-block d-md-none',\r\n videoClass: ' d-none d-md-block',\r\n videoPlaying: windowWidth && (windowWidth >= 768) ? true : false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n const { report } = this.props;\r\n if (!report) {\r\n this.props.getWellnessReportV2(this.props.userToken, this.currentYear);\r\n logUI(\"MBHWeb.UI.WellBeingDashboard.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n } \r\n }\r\n\r\n showVideo = () => {\r\n this.setState({ showVideoLink: 'd-none', videoClass: '', videoPlaying: true });\r\n }\r\n\r\n render() {\r\n const { hasMyChartLogin, isProxyUser } = this.props;\r\n const { showVideoLink, videoClass, videoPlaying } = this.state;\r\n return (\r\n
\r\n {\r\n isProxyUser ?\r\n
\r\n :\r\n
\r\n
\r\n
\r\n
\r\n
Well-being Journeys \r\n \r\n
\r\n
\r\n
\r\n
Start a Well-Being journey to track your health throughout the year. Enrolling in a journey is the first step. Please watch this video to learn more.
\r\n
\r\n
\r\n
\r\n
\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 Get started below, or at anytime from your Well-being dashboard \r\n
\r\n\r\n
\r\n
\r\n }\r\n
\r\n )\r\n }\r\n}\r\nconst mapStateToProps = (state) => {\r\n return {\r\n hasMyChartLogin: state.domain.hm,\r\n userToken: state.domain.t,\r\n report: state.thrive.report,\r\n serverData: state.session.serverData,\r\n isProxyUser: state.domain.ip\r\n };\r\n};\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n getWellnessReportV2: (token, reportYear) => {\r\n dispatch({ type: types.THRIVE_GET_REPORT, token, reportYear });\r\n }\r\n };\r\n};\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(WellBeingJourney));","import React from 'react';\r\nimport { connect } from \"react-redux\";\r\nimport { Link, withRouter } from \"react-router-dom\";\r\nimport queryString from 'query-string';\r\nimport CircularProgressbar from \"../common/CircularProgressbar\";\r\nimport { Nav, NavItem, NavLink } from 'reactstrap';\r\nimport { ScrollspyNavLink } from 'reactstrap-scrollspy';\r\nimport { Scrollspy } from 'reactstrap-scrollspy'\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport SectionLoadingError from \"../common/SectionLoadingError\";\r\nimport Spinner from '../common/spinner';\r\nimport Accordion from './Accordion';\r\n\r\nclass WellBeingReport extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n const { wellnessDueDate } = this.props.serverData;\r\n this.onPageLoad = this.onPageLoad.bind(this);\r\n this.loadReport = this.loadReport.bind(this);\r\n this.printReport = this.printReport.bind(this);\r\n this.state = {\r\n stickyNavClass: \"\",\r\n hideNavLink: false,\r\n };\r\n\r\n this.currentYear = new Date(wellnessDueDate).getFullYear();\r\n this.throttle = _.throttle(this.handleStickyNav.bind(this), 150, { maxWait: 100 });\r\n }\r\n\r\n componentDidMount() {\r\n const { userToken } = this.props;\r\n this.props.getWellBeingReport(userToken, this.currentYear);\r\n logUI(\"MBHWeb.UI.WellBeingReport.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n if (typeof window !== 'undefined') {\r\n window.addEventListener('load', this.onPageLoad);\r\n window.addEventListener('scroll', this.throttle);\r\n this.handleStickyNav();\r\n }\r\n this.onPageLoad();\r\n\r\n this.historyUnlisten = this.props.history.listen((location, action) => {\r\n if (location.pathname === this.props.history.location.pathname) {\r\n setTimeout(() => this.scrollIntoView(), 100);\r\n }\r\n });\r\n\r\n }\r\n printReport() {\r\n const { userToken } = this.props;\r\n this.props.getReportPdf(userToken, this.currentYear);\r\n logUI(\"MBHWeb.UI.WellBeingDashboard.WellBeingReport.GetReportPdf.Clicked\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n onPageLoad() {\r\n // wait until the page is rendered and scroll into view\r\n setTimeout(() => this.scrollIntoView(), 1000);\r\n }\r\n\r\n isMobile() {\r\n const windowWidth = document.documentElement.clientWidth || document.body.clientWidth;\r\n return windowWidth && (windowWidth < 768);\r\n }\r\n\r\n getHash() {\r\n const { location } = this.props;\r\n return location && location.hash ? decodeURI(location.hash.substr(1).trim()) : \"\"\r\n }\r\n\r\n loadReport(report, faqHash) {\r\n var faqId = \"\";\r\n if (faqHash) {\r\n const faqIdEnd = faqHash.indexOf(\"-q\");\r\n if (faqIdEnd !== -1) {\r\n faqId = faqHash.substr(0, faqIdEnd);\r\n } else {\r\n faqId = faqHash;\r\n }\r\n }\r\n const reportContent = report.wellnessQuestionsGroups.map((group, index) => {\r\n return
\r\n
\r\n
\r\n \r\n
\r\n
{group.groupTitle}:
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n {group.wellnessQuestions.map(question => {\r\n return
\r\n
\r\n
\r\n {question.answers.map(answer => {\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 const overAllSection =
\r\n
\r\n
\r\n \r\n
\r\n
{report.overallScoreTitle}:
\r\n
\r\n \r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
{report.overallScoreInterpretation}
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n reportContent.unshift(overAllSection);\r\n\r\n const stickyMenu = \r\n\r\n reportContent.unshift(stickyMenu);\r\n\r\n return reportContent;\r\n }\r\n onMenuClick(event) {\r\n if (this.isMobile()) {\r\n window.scrollTo({ top: 0 });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (typeof window !== 'undefined') {\r\n window.removeEventListener('load', this.onPageLoad);\r\n window.removeEventListener('scroll', this.throttle);\r\n }\r\n if (this.historyUnlisten) {\r\n this.historyUnlisten();\r\n }\r\n }\r\n\r\n getTop(el) {\r\n return el.offsetTop + (el.offsetParent && this.getTop(el.offsetParent));\r\n }\r\n\r\n\r\n scrollIntoView() {\r\n // everytime a menu link is clicked, this is called 100 ms later\r\n const reportHash = this.getHash();\r\n\r\n if (reportHash) {\r\n const element = document.getElementById(reportHash);\r\n const minimizedHeader = document.getElementsByClassName('page-scrolled-down')\r\n\r\n if (element) {\r\n let pos = this.getTop(element);\r\n if (minimizedHeader.length === 0) {\r\n // account for header maximizing in size when user is scrolling/scrolled up\r\n window.scrollTo({\r\n top: pos - 31,\r\n behavior: 'smooth'\r\n })\r\n }\r\n else {\r\n element.scrollIntoView();\r\n }\r\n }\r\n else {\r\n window.scrollTo({ top: 0 });\r\n }\r\n }\r\n }\r\n\r\n handleStickyNav(event) {\r\n if (typeof window !== 'undefined') {\r\n const scrollY = window.pageYOffset;\r\n const topOffsetHeight = 90;\r\n if (scrollY > topOffsetHeight) {\r\n if ((this.state.scrollTopY + topOffsetHeight) < scrollY) {\r\n this.setState({\r\n scrollTopY: scrollY,\r\n stickyNavClass: \" sticky-nav-fixed\"\r\n });\r\n }\r\n else if ((this.state.scrollTop - topOffsetHeight) > scrollY) {\r\n this.setState({\r\n scrollTopY: scrollY,\r\n stickyNavClass: \"\"\r\n });\r\n }\r\n }\r\n else {\r\n this.setState({\r\n scrollTopY: scrollY,\r\n stickyNavClass: \"\"\r\n });\r\n }\r\n }\r\n }\r\n\r\n toggleAccordion = (val) => {\r\n if (val) {\r\n this.setState({\r\n hideNavLink: true,\r\n })\r\n } else {\r\n this.setState({\r\n hideNavLink: false,\r\n })\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n\r\n render() {\r\n const { report, isReportFailure, isReportPending, isReportSuccess, isProxyUser } = this.props;\r\n let scrollSpyNames = ['overAllScore'];\r\n const reportHash = this.getHash();\r\n\r\n const reportContent = report ? this.loadReport(report, reportHash) : \"\";\r\n if (report != null) {\r\n report.wellnessQuestionsGroups.map(group => {\r\n scrollSpyNames.push(group.groupTitle);\r\n })\r\n scrollSpyNames.unshift(\"wellbeing-menu\");\r\n }\r\n return (\r\n < React.Fragment >\r\n
\r\n {isReportPending ?
:\r\n <>\r\n {isProxyUser ?\r\n
\r\n :\r\n isReportFailure ?\r\n
\r\n :\r\n <>\r\n {(isReportSuccess && report) &&\r\n
\r\n
\r\n
\r\n
\r\n
{this.currentYear} Well-being Report\r\n {reportHash !== \"\" ?\r\n
\r\n this.onMenuClick(e)}>SEE ALL\r\n
:
\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n }\r\n\r\n >\r\n }\r\n >\r\n }\r\n
\r\n \r\n )\r\n }\r\n}\r\n\r\n\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n report: state.thrive.wellBeingReport,\r\n isReportPending: state.thrive.wellBeingReportPending,\r\n isReportSuccess: state.thrive.wellBeingReportSuccess,\r\n isReportFailure: state.thrive.wellBeingReportFailure,\r\n userToken: state.domain.t,\r\n serverData: state.session.serverData,\r\n isProxyUser: state.domain.ip\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n getWellBeingReport: (token, reportYear) => {\r\n dispatch({ type: types.GET_WELLBEING_REPORT, token, reportYear });\r\n },\r\n getReportPdf: (token, reportYear) => { dispatch({ type: types.GET_WELLNESS_REPORT_PDF, token, reportYear }) }\r\n };\r\n};\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(WellBeingReport));","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter, Link } from \"react-router-dom\";\r\nimport CircularProgressbar from \"../common/CircularProgressbar\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport * as Tools from \"../../helpers/Tools\";\r\n\r\n\r\nconst WellBeingScoreTile = props => {\r\n const { report, currentYear } = props;\r\n const previousYear = currentYear - 1;\r\n let results = [];\r\n const defaultScoreColor = \"#008fbe\";\r\n // Get Current year data to show current year score\r\n let currentYearReport = report && report.length > 0 && report.filter(item => item.year === currentYear)[0];\r\n // Get Previous Year data \r\n let previousYearReport = report && report.length > 0 && report.filter(item => item.year === previousYear)[0];\r\n const { overallScoreInterpretation = null, overallScore = 0, overallScoreColor = defaultScoreColor } = currentYearReport || {};\r\n if ((currentYearReport && currentYearReport.results) || (previousYearReport && previousYearReport.results))\r\n results = ((currentYearReport && currentYearReport.results) || (previousYearReport && previousYearReport.results)).map((result, index) => {\r\n const previousYearResult = currentYearReport && currentYearReport.results ? previousYearReport && previousYearReport.results &&\r\n previousYearReport.results.find(goal => goal.name == result.name) : result;\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {(previousYearReport && previousYearReport.results && previousYearResult) &&\r\n
\r\n
\r\n {previousYear}
\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
\r\n
\r\n
\r\n {overallScoreInterpretation} \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {previousYearReport &&\r\n
\r\n
\r\n {previousYear}
\r\n \r\n }\r\n
\r\n
\r\n {results && results.length > 0 &&\r\n
\r\n
\r\n
Individual Scores \r\n \r\n
\r\n
\r\n {results}\r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n logUI(\"MBHWeb.UI.WellBeingDashboard.WellBeingScoreTile.ViewFullReportClicked\", new Date(), Tools.getURLPath())}>VIEW FULL REPORT \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n report: state.thrive.report,\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps)(WellBeingScoreTile));\r\n\r\n","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport Iframe from 'react-iframe';\r\nimport { withRouter, Prompt } from 'react-router';\r\nimport { Nav, NavItem } from 'reactstrap';\r\nimport { Link } from \"react-router-dom\";\r\nimport Cookies from \"cookies-js\";\r\nimport { getDomain } from \"../../helpers/Tools\";\r\nimport ReactIframeResizer from \"../common/iFrameResizerComponent\";\r\nimport * as d from \"../../reducers/domainReducer\";\r\nimport { getURLPath } from '../../helpers/Tools';\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport Spinner from \"../common/spinner\";\r\nimport { getFirstName, getSecondName } from \"../../helpers/formatting\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport SectionLoadingError from \"../common/SectionLoadingError\";\r\n\r\n\r\nconst SURVEY_CANCELLED = \"surveycancelled\";\r\nconst SURVEY_COMPLETED = \"surveycompleted\";\r\nconst COMPLETE = 'complete';\r\n\r\n/**\r\n * Wellness Assessment.\r\n * \r\n */\r\n\r\nclass WellnessAssessment extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n var _byroute = false;\r\n this.serverData = this.props.serverData;\r\n this.processWindowMessage = this.processWindowMessage.bind(this);\r\n\r\n }\r\n\r\n componentDidMount() {\r\n this._isMounted = true;\r\n window.formChanged = false;\r\n window.addEventListener(\"message\", this.processWindowMessage);\r\n const { thriveData } = this.props;\r\n let andyliticsJson = {\r\n surveyUrl: thriveData && thriveData.surveyUrl ? thriveData.surveyUrl : ''\r\n };\r\n logUI(\"MBHWeb.UI.WellnessAssessment.ComponentDidMount\", new Date(), getURLPath(), andyliticsJson);\r\n }\r\n\r\n componentWillUnmount() {\r\n this._isMounted = false;\r\n window.formChanged = false;\r\n window.removeEventListener(\"message\", this.processWindowMessage);\r\n }\r\n\r\n processWindowMessage(messageEvent) {\r\n const { token } = this.props;\r\n if (messageEvent.data && messageEvent.data === SURVEY_CANCELLED) {\r\n logUI(\"MBHWeb.UI.WellnessAssessment.Cancelled\", new Date(), getURLPath());\r\n this.props.getThriveData(token);\r\n this.props.history.push(\"/dashboard\");\r\n } else if (messageEvent.data && messageEvent.data === SURVEY_COMPLETED) {\r\n logUI(\"MBHWeb.UI.WellnessAssessment.Completed\", new Date(), getURLPath());\r\n this.props.getThriveData(token);\r\n this.props.history.push({ pathname: \"/wellnessassessmentsuccess\", state: { isComplete: true } });\r\n }\r\n }\r\n\r\n render() {\r\n\r\n //debugger;\r\n const { reloadKey, currentUser, thriveData, thriveDataPending, thriveDataSuccess, thriveDataError, isEmployee } = this.props;\r\n const sAdditionalScripts = [window.location.origin + '/scripts/childChangeDetection.js'];\r\n const sAdditionalCSS = [window.location.origin + '/css/wellness.css'];\r\n\r\n //Adding target key param in survey to handle our css.\r\n const url = thriveData && thriveData.surveyUrl ? thriveData.surveyUrl + '&target=web' : '';\r\n\r\n const isSurveyCompleted = (thriveData && thriveData.surveyStatus && thriveData.surveyStatus.toLowerCase() === COMPLETE) ? true : false;\r\n\r\n //if (!url) {\r\n // return
;\r\n //}\r\n\r\n var myDomain = getDomain();\r\n\r\n const iframeResizerOptions = { checkOrigin: false, scrolling: true, heightCalculationMethod: 'bodyScroll', warningTimeout: 10000 };\r\n const iframeResizerStyle = this.props.style || { width: '100%' };\r\n //debugger;\r\n const formID = this.props.id ? this.props.id : \"wellness_assessment\";\r\n //debugger;\r\n return (\r\n (url && !isSurveyCompleted) ?\r\n
\r\n \r\n \r\n \r\n
\r\n :\r\n
\r\n
\r\n
\r\n {(isEmployee && (thriveDataPending || (!thriveDataSuccess && !thriveDataError))) ? :\r\n isSurveyCompleted ?\r\n :\r\n isEmployee ? :\r\n \r\n To access the wellness assessment please link your employee account here.\r\n \r\n }\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n loginStatus: state.domain.ls,\r\n currentUser: d.hydrateProxyUser(state.domain.cu),\r\n serverData: state.session.serverData,\r\n token: state.domain.t,\r\n reloadKey: state.session.reloadKey,\r\n empId: state.domain.ei,\r\n thriveDataPending: state.thrive.cardPending,\r\n thriveDataSuccess: state.thrive.cardSuccess,\r\n thriveDataError: state.thrive.error ? true : false,\r\n thriveData: state.thrive.card,\r\n isEmployee: state.domain.ie\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n getThriveData: (token) => {\r\n dispatch({ type: types.THRIVE_GET_CARD, token: token });\r\n }\r\n };\r\n};\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(WellnessAssessment));\r\n","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport StatusBanner from '../common/StatusBanner';\r\nimport Spinner from \"../common/spinner\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport AssessmentSuccessTile from './AssessmentSuccessTile';\r\n\r\nclass WellnessAssessmentSuccess extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {};\r\n }\r\n\r\n componentDidMount() {\r\n logUI(\"MBHWeb.UI.WellnessAssessmentSuccess.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n render() {\r\n const { thriveDataPending, thriveData, thriveDataError } = this.props;\r\n const showScore = thriveData && !thriveDataError ? true : false;\r\n const score = showScore ? thriveData.overallScore : 0;\r\n const overallScoreColor = showScore ? thriveData.overallScoreColor : \"#008fbe\";\r\n const defaultScoreColor = \"#008fbe\";\r\n return (
\r\n {thriveDataPending ?
:\r\n
\r\n \r\n \r\n \r\n }\r\n
);\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n thriveData: state.thrive.card,\r\n thriveDataPending: state.thrive.cardPending,\r\n thriveDataSuccess: state.thrive.cardSuccess,\r\n thriveDataError: state.thrive.error ? true : false,\r\n token: state.domain.t\r\n //...ownProps\r\n };\r\n};\r\n\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n };\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(WellnessAssessmentSuccess);","import React from 'react';\r\nimport WellnessInfowindow from \"./WellnessInfowindow\";\r\nimport MessageModal from \"../common/MessageModal\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport BackdropWrapper from '../common/BackdropWrapper';\r\n\r\nconst PROGRAM_STATUS = { VIEWINBOX: \"VIEW INBOX\", GETSTARTED: \"GET STARTED\", COMPLETED: \"COMPLETED\" };\r\n\r\nclass WellnessGoals extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { openModal: false, openGetstartedModal: false};\r\n\r\n }\r\n\r\n toggleModal = () => {\r\n this.setState({ openModal: !this.state.openModal });\r\n }\r\n //getProgramStatus = (goalProgramId) => {\r\n // let wellnessDCJList = null;\r\n // let programFoundInList = null;\r\n // const { bffDashboardData, currentUser } = this.props;\r\n // if (currentUser && currentUser.epi && bffDashboardData && bffDashboardData.data && bffDashboardData.data.dcjStatus && bffDashboardData.data.dcjStatus.wellnessDCJList) {\r\n // wellnessDCJList = bffDashboardData.data.dcjStatus.wellnessDCJList;\r\n // if (wellnessDCJList && wellnessDCJList.length > 0)\r\n // programFoundInList = wellnessDCJList.find(el => el.wellness_journey_id === goalProgramId && el.patient_id === currentUser.epi);\r\n // }\r\n // if (programFoundInList) {\r\n // const { complete, terminated } = programFoundInList;\r\n // return complete || terminated ? { status: PROGRAM_STATUS.GETSTARTED, showInbox: false, showCompleted: true } : { status: PROGRAM_STATUS.VIEWINBOX, showInbox: true, showCompleted: false };\r\n // }\r\n // else\r\n // return { status: PROGRAM_STATUS.GETSTARTED, showInbox: false, showCompleted: false };\r\n //}\r\n //onDcjSelfOrder = (goalProgramId, goalName) => {\r\n // this.setState({ tryAgain: false, openGetstartedModal: true, });\r\n // const { serverData, hasMyChartLogin } = this.props\r\n // if (serverData && serverData.enableDCJSelfEnrollForWellness && hasMyChartLogin) {\r\n // if (goalProgramId) {\r\n // const { myChartId, dcjSelfOrder, userToken } = this.props;\r\n // dcjSelfOrder(userToken, myChartId, goalProgramId);\r\n // logUI(\"MBHWeb.UI.WellnessReport.\" + goalName.trim() + \"GetStartedCTA\", new Date(), Tools.getURLPath());\r\n // }\r\n // }\r\n // else {\r\n // logUI(\"MBHWeb.UI.WellnessReport.GetStarted.NoMedicalRecord.Clicked\", new Date(), Tools.getURLPath());\r\n // }\r\n //}\r\n\r\n //loadInbox = (goalName) => {\r\n // logUI(\"MBHWeb.UI.WellnessReport.ViewInbox.\" + goalName.trim() + \"CTA\", new Date(), Tools.getURLPath());\r\n // this.props.history.push(\"/wellbeinginbox\");\r\n //}\r\n\r\n toggleGetstartedModal = () => {\r\n this.setState({ openGetstartedModal: !this.state.openGetstartedModal });\r\n //const { serverData, hasMyChartLogin } = this.props\r\n //if (serverData && serverData.enableDCJSelfEnrollForWellness && hasMyChartLogin) {\r\n // logUI(\"MBHWeb.UI.WellnessReport.DcjSelfOrderModal.Okay.Clicked\", new Date(), Tools.getURLPath());\r\n //} else {\r\n logUI(\"MBHWeb.UI.WellnessReport.NoMedicalRecordModal.Okay.Clicked\", new Date(), Tools.getURLPath());\r\n //}\r\n\r\n };\r\n\r\n tryAgain = (e) => {\r\n e.preventDefault();\r\n this.setState({ tryAgain: true });\r\n logUI(\"MBHWeb.UI.WellnessReport.onTryAgain\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n render() {\r\n const { openModal, openGetstartedModal } = this.state;\r\n const { report, hasMyChartLogin, showDCJSelfEnrollToolTip, serverData, currentYear, updateDCJSelfEnrollToolTipPreference, isWellnessReport, isWellBeingDashboard } = this.props;\r\n let goals = [];\r\n let hasGoals = false;\r\n let btnStyle = isWellnessReport ? 'btn text-btn' : \"btn btn-primary\";\r\n // Get Current year data to show current year score \r\n let currentYearReport = report && report.length > 0 && report.filter(item => item.year === currentYear)[0];\r\n if (currentYearReport && currentYearReport.results && currentYearReport.results.length > 0) {\r\n goals = currentYearReport.results.map((r, i) => {\r\n //const { status, showInbox, showCompleted } = this.getProgramStatus(r.goalProgramId);\r\n hasGoals = r.goals && r.goals.length > 0 && r.goals[0] !== null;\r\n\r\n return (\r\n
\r\n {\r\n !hasGoals ?\r\n \r\n {r.name} \r\n No goals selected for this wellness category
\r\n \r\n :\r\n (hasGoals === true/* || (serverData && serverData.enableDCJSelfEnrollForWellness)*/) &&\r\n \r\n {r.name} \r\n \r\n {r.goals.map((g, gi) =>\r\n
)\r\n }\r\n {/*
\r\n {serverData && serverData.enableDCJSelfEnrollForWellness && hasMyChartLogin && r.goalProgramId\r\n ? showInbox\r\n ?
this.loadInbox(r.name)}>{status} \r\n :
\r\n {showCompleted &&
You have completed this journey. Click Get Started to enroll again.
}\r\n
this.onDcjSelfOrder(r.goalProgramId, r.name)}>{status} \r\n
\r\n :\r\n
this.onDcjSelfOrder(r.goalProgramId, r.name)}>Get Started }\r\n
*/}\r\n
\r\n \r\n \r\n }\r\n \r\n );\r\n });\r\n }\r\n let modalBody = /*serverData && serverData.enableDCJSelfEnrollForWellness && hasMyChartLogin\r\n ? (\r\n
\r\n
Just a sec!\r\n
\r\n We're getting your care journey ready. Once it's ready, you'll receive an email or text notification to view messages in your inbox.\r\n
\r\n
\r\n You can also get to your inbox from the MyBSWH dashboard.\r\n
\r\n
\r\n )\r\n : */
This feature is currently being tested with BSWH Employee Core Champions.If you are seeing this message, you don't have required medical record linkage. More information will be available soon.
\r\n let modalFooterButtons = [{ label: \"OKAY\", handleClick: () => this.toggleGetstartedModal() }]\r\n let modalClassName = \"wellness-getStarted-modal\"\r\n const topThreeGoals = goals.slice(0, 3);\r\n const restOfGoals = goals.filter(goal => !topThreeGoals.includes(goal));\r\n const wellnessReportContainerClass = \" row well-being__goals\";\r\n return (
\r\n \r\n \r\n
\r\n
\r\n
\r\n
{false/*serverData.enableDCJSelfEnrollForWellness*/ ? 'Well-Being Journeys & Resources' : 'Well-Being Goals & Links'}
\r\n {/*{serverData.enableDCJSelfEnrollForWellness && hasMyChartLogin &&
}*/}\r\n
\r\n {topThreeGoals && topThreeGoals.length > 0 && My Top 3
}\r\n {topThreeGoals}\r\n {restOfGoals && restOfGoals.length > 0 && More
}\r\n {restOfGoals}\r\n \r\n
\r\n {!isWellnessReport &&\r\n
Want to learn more about each category?
\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n report: state.thrive.report,\r\n serverData: state.session.serverData,\r\n showDCJSelfEnrollToolTip: state.session.showDCJSelfEnrollToolTip,\r\n myChartId: state.domain.mc,\r\n hasMyChartLogin: state.domain.hm,\r\n bffDashboardData: state.dashboard.bffDashboardData,\r\n currentUser: state.domain.cu,\r\n userToken: state.domain.t\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n dcjSelfOrder: (token, myChartId, goalProgramId) => {\r\n //dispatch({ type: types.DCJ_SELF_ORDER, token, myChartId, goalProgramId });\r\n },\r\n updateDCJSelfEnrollToolTipPreference: () => {\r\n //dispatch({ type: types.UPDATE_DCJ_SELF_ENROLL_TOOLTIP_PREFERENCE });\r\n },\r\n };\r\n};\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(WellnessGoals));","import React from 'react';\r\nimport { Modal, ModalFooter, ModalBody } from 'reactstrap';\r\n\r\nconst WellnessInfowindow = ({ showInfo, toggle, technicalHelpDeskNumber, technicalHelpDeskHours}) => {\r\n return (
\r\n \r\n \r\n
\r\n
\r\n \r\n
Well-Being Journeys & Resources \r\n \r\n
\r\n
\r\n
To help you take the first steps in achieving your Well-being goals, Well-being Journeys set you on a path of education and activities to promote awareness in the areas you are interested in.
\r\n
\r\n To begin, select \"Get Started\" . \r\n Once enrolled you can find your Well-being Journey in the Care Coach tile on the home screen of your app, there a welcome message and introduction video will be waiting for you. \r\n Follow the prompts and complete the activities to move on to the next step. \r\n You can complete these journeys as fast as you would like, but we encourage you spend at least a few days, trying to be mindful of the goal you want to reach. \r\n You can return to the Care Coach tile at any time to pick up where you left off, or to review your responses and progress. \r\n \r\n
\r\n
\r\n If you are having trouble accessing a
Well-being Journey , call the
MyBSWHealth technical help desk {technicalHelpDeskHours} at
{technicalHelpDeskNumber} .\r\n
\r\n
\r\n \r\n OKAY \r\n );\r\n};\r\n\r\nexport default WellnessInfowindow;","import * as React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { Link, withRouter, Redirect } from \"react-router-dom\";\r\nimport CircularProgressbar from \"../common/CircularProgressbar\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport * as Tools from \"../../helpers/Tools\";\r\nimport { logUI } from '../../api/andyliticsApi';\r\nimport Spinner from \"../common/spinner\";\r\nimport SectionLoadingError from \"../common/SectionLoadingError\";\r\nimport StatusBanner from '../common/StatusBanner';\r\nimport WellnessGoals from './WellnessGoals';\r\nimport NotAuthorized from '../common/NotAuthorized';\r\n\r\nclass WellnessReport extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n const { wellnessDueDate } = this.props.serverData;\r\n const currentYear = new Date(wellnessDueDate).getFullYear();\r\n this.state = { currentYear: currentYear, openGetstartedModal: false };\r\n }\r\n\r\n componentDidMount() {\r\n this.props.getWellnessReportV2(this.props.userToken, this.state.currentYear);\r\n logUI(\"MBHWeb.UI.WellnessReport.ComponentDidMount\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n tryAgain = (e) => {\r\n e.preventDefault();\r\n this.setState({ tryAgain: true });\r\n logUI(\"MBHWeb.UI.WellnessReport.onTryAgain\", new Date(), Tools.getURLPath());\r\n }\r\n\r\n render() {\r\n const { dcjSelfOrderPending, dcjSelfOrderFailure, isProxyUser, report } = this.props;\r\n const { tryAgain, currentYear } = this.state;\r\n let currentYearReport = report && report.length > 0 && report.filter(item => item.year === currentYear)[0];\r\n let results = [];\r\n const defaultScoreColor = \"#008fbe\";\r\n const { pledge, discussionPoints, overallScoreInterpretation, overallScore } = currentYearReport || {};\r\n if (currentYearReport && currentYearReport.results && currentYearReport.results.length > 0) {\r\n results = currentYearReport.results.map((r, i) => {\r\n return (\r\n
\r\n );\r\n });\r\n }\r\n\r\n let discussion = [];\r\n let hasDiscussion = false;\r\n if (discussionPoints && discussionPoints.length > 0) {\r\n discussion = discussionPoints.map((d, i) => {\r\n hasDiscussion = true;\r\n return (\r\n
\r\n {\r\n hasDiscussion === true &&\r\n {d} \r\n }\r\n \r\n );\r\n });\r\n }\r\n return (isProxyUser ?
:
\r\n
\r\n
\r\n {this.props.reportPending === true || dcjSelfOrderPending ?
:\r\n dcjSelfOrderFailure && !tryAgain ?
\r\n \r\n Please this.tryAgain(e)}>try again later. \r\n \r\n
\r\n
:\r\n (this.props.reportError ?\r\n
\r\n :\r\n this.props.reportSuccess === true &&\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {overallScoreInterpretation} \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
Individual Score \r\n \r\n
\r\n
\r\n {results}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n //hasDiscussion === true &&\r\n \r\n
\r\n
\r\n
\r\n
\r\n
Discussion{hasDiscussion === true && Points } \r\n
\r\n {hasDiscussion === true ?\r\n
\r\n
Discuss the following with your doctor: \r\n
\r\n
:\r\n
\r\n
Find a doctor or specialist if you would like to discuss your wellness report.
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n }\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
My Pledge \r\n
{pledge} \r\n
\r\n
\r\n
\r\n
\r\n )\r\n\r\n }\r\n
\r\n
\r\n
);\r\n\r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n report: state.thrive.report,\r\n reportPending: state.thrive.reportPending,\r\n reportSuccess: state.thrive.reportSuccess,\r\n reportError: state.thrive.reportError,\r\n userToken: state.domain.t,\r\n serverData: state.session.serverData,\r\n showDCJSelfEnrollToolTip: state.session.showDCJSelfEnrollToolTip,\r\n myChartId: state.domain.mc,\r\n dcjSelfOrderPending: state.dashboard.dcjSelfOrderPending,\r\n dcjSelfOrderSuccess: state.dashboard.dcjSelfOrderSuccess,\r\n dcjSelfOrderFailure: state.dashboard.dcjSelfOrderFailure,\r\n isProxyUser: state.domain.ip,\r\n hasMyChartLogin: state.domain.hm,\r\n bffDashboardData: state.dashboard.bffDashboardData,\r\n currentUser: state.domain.cu,\r\n ...ownProps\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n getWellnessReportV2: (token, reportYear) => {\r\n dispatch({ type: types.THRIVE_GET_REPORT, token, reportYear });\r\n }\r\n };\r\n};\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(WellnessReport));\r\n","export const RXModule = \"rxModule\";\r\nexport const VideoVisit = \"videoVisit\";\r\nexport const EVisit = \"eVisit\";\r\nexport const ProviderSearch = \"providerSearch\";\r\nexport const LocationSearch = \"locationSearch\";\r\nexport const InsuranceModule = \"insuranceModule\";\r\nexport const BehavioralHealthTriage = \"behavioralHealthTriage\";\r\nexport const FAQ = \"faq\";\r\nexport const OnlineAppointmentScheduling = \"onlineAppointmentScheduling\";\r\nexport const Wellness = \"wellness\";\r\nexport const PricingTransparency = \"pricingTransparency\";\r\nexport const SDCVideoVisit = \"sdcVideoVisit\";\r\nexport const ThriveModule = \"thrive\";\r\nexport const AmbulatoryVideoVisit = \"ambulatoryVideoVisit\";\r\nexport const ChatBot = \"chatBot\";\r\nexport const FluShot = \"fluShot\";\r\nexport const Amity = \"amity\";\r\nexport const InHomeVaccine = \"inHomeVaccinationScheduling\";\r\nexport const Lyra = \"lyra\";","export const AMRN = \"AMRN\";\r\nexport const EID = \"EID\";\r\nexport const EPI = \"EPI\";\r\nexport const EXTERNAL = \"EXTERNAL\";\r\nexport const INTERNAL = \"INTERNAL\";\r\nexport const MYCHARTLOGIN = \"MYCHARTLOGIN\";\r\nexport const WPRINTERNAL = \"WPRINTERNAL\";\r\n\r\n\r\n","export const SELECT_LOCATION = \"SELECT_LOCATION\";\r\nexport const SEARCH_LOCATION = \"SEARCH_LOCATION\";\r\nexport const SEARCH_LOCATION_CLEAR = \"SEARCH_LOCATION_CLEAR\";\r\nexport const CLEAR_LOCATIONS = \"CLEAR_LOCATIONS\";\r\nexport const CLEAR_LOCATIONS_RESULTS = \"CLEAR_LOCATIONS_RESULTS\";\r\nexport const SEARCH_LOCATION_SUCCESS = \"SEARCH_LOCATION_SUCCESS\";\r\nexport const SEARCH_LOCATION_ERROR = \"SEARCH_LOCATION_ERROR\";\r\nexport const GET_LOCATION_TYPES = \"GET_LOCATION_TYPES\";\r\nexport const GET_LOCATION_TYPES_SUCCESS = \"GET_LOCATION_TYPES_SUCCESS\";\r\nexport const GET_FACILITY_TYPES = \"GET_FACILITYY_TYPES\";\r\nexport const GET_FACILITY_TYPES_SUCCESS = \"GET_FACILITY_TYPES_SUCCESS\";\r\n\r\nexport const SEARCH_PROVIDER = \"SEARCH_PROVIDER\";\r\nexport const SEARCH_PROVIDER_CLEAR = \"SEARCH_PROVIDER_CLEAR\";\r\nexport const SEARCH_PROVIDER_ERROR = \"SEARCH_PROVIDER_ERROR\";\r\nexport const SEARCH_PROVIDER_BY_LOCAION = \"SEARCH_PROVIDER_BY_LOCATION\";\r\nexport const SEARCH_PROVIDER_BY_NAME = \"SEARCH_PROVIDER_BY_NAME\";\r\nexport const PROVIDER_DETAIL = \"PROVIDER_DETAIL\";\r\nexport const SELECT_PROVIDER = \"SELECT_PROVIDER\";\r\nexport const LOAD_PROVIDERS_SUCCESS = \"LOAD_PROVIDERS_SUCCESS\";\r\nexport const SAVE_PROVIDER_SEARCH_MODEL = \"SAVE_PROVIDER_SEARCH_MODEL\";\r\nexport const LOAD_PROVIDER_DETAIL_SUCCESS = \"LOAD_PROVIDER_DETAIL_SUCCESS\";\r\nexport const CLEAR_PROVIDERS = \"CLEAR_PROVIDERS\";\r\nexport const CLEAR_PROVIDER_DETAIL = \"CLEAR_PROVIDER_DETAIL\";\r\nexport const UPDATE_FACETS = \"UPDATE_FACETS\";\r\nexport const UPDATE_USEMYBSWHEALTH_FILTER = \"UPDATE_USEMYBSWHEALTH_FILTER\";\r\nexport const FIND_CARE_FILTERS_OPEN = \"FIND_CARE_FILTERS_OPEN\";\r\n\r\nexport const SEARCH_FOR_GENERIC_PROVIDER = \"SEARCH_FOR_GENERIC_PROVIDER\";\r\nexport const SEARCH_FOR_GENERIC_PROVIDER_SUCCESS = \"SEARCH_FOR_GENERIC_PROVIDER_SUCCESS\";\r\nexport const SEARCH_FOR_GENERIC_PROVIDER_FAILURE = \"SEARCH_FOR_GENERIC_PROVIDER_FAILURE\";\r\n\r\nexport const SEARCH_FOR_GENERIC_PROVIDER_SLOT_AVAILABILITY = \"SEARCH_FOR_GENERIC_PROVIDER_SLOTS\";\r\nexport const SEARCH_FOR_GENERIC_PROVIDER_SLOT_AVAILABILITY_SUCCESS = \"SEARCH_FOR_GENERIC_PROVIDER_SLOTS_SUCCESS\";\r\nexport const SEARCH_FOR_GENERIC_PROVIDER_SLOT_AVAILABILITY_FAILURE = \"SEARCH_FOR_GENERIC_PROVIDER_SLOTS_FAILURE\";\r\n\r\nexport const BEGIN_AJAX_CALL = \"BEGIN_AJAX_CALL\";\r\nexport const AJAX_CALL_ERROR = \"AJAX_CALL_ERROR\";\r\nexport const APPLICATION_ERROR = \"APPLICATION_ERROR\";\r\nexport const INIT_SESSION = \"INIT_SESSION\";\r\n\r\nexport const NOTICES_NON_LOGGED_IN = \"NOTICES_NON_LOGGED_IN\";\r\nexport const NOTICES_LOGGED_IN = \"NOTICES_LOGGED_IN\";\r\nexport const NOTICES_NON_LOGGED_IN_HIDE = \"NOTICES_NON_LOGGED_IN_HIDE\";\r\nexport const NOTICES_LOGGED_IN_HIDE = \"NOTICES_LOGGED_IN_HIDE\";\r\n\r\nexport const USER_AUTHENTICATE = \"USER_AUTHENTICATE\";\r\nexport const USER_AUTHENTICATE_SUCCESS = \"USER_AUTHENTICATE_SUCCESS\";\r\nexport const USER_AUTHENTICATE_FAILURE = \"USER_AUTHENTICATE_FAILURE\";\r\nexport const USER_AUTHENTICATE_REFRESH = \"USER_AUTHENTICATE_REFRESH\";\r\nexport const USER_AUTHENTICATE_ISLOGGEDIN = \"USER_AUTHENTICATE_ISLOGGEDIN\";\r\nexport const ON_USER_AUTHENTICATE_SUCCESS = \"ON_USER_AUTHENTICATE_SUCCESS\";\r\nexport const UPDATE_TOKEN_AND_REFRESH_TOKEN = \"UPDATE_TOKEN_AND_REFRESH_TOKEN\";\r\nexport const LOGIN = \"LOGIN\";\r\nexport const LOGOUT = \"LOGOUT\";\r\nexport const LOGOUT_COMPLETED = \"LOGOUT_COMPLETED\";\r\nexport const VERIFY_LOGIN = \"VERIFY_LOGIN\";\r\nexport const VERIFY_LOGIN_COMPLETED = \"VERIFY_LOGIN_COMPLETED\";\r\nexport const REFRESH_TOKEN = \"REFRESH_TOKEN\";\r\nexport const REFRESH_TOKEN_FAILURE = \"REFRESH_TOKEN_FAILURE\";\r\nexport const USER_LOGGED_OUT = \"USER_LOGGED_OUT\";\r\nexport const SET_REDIRECT_URL = \"SET_REDIRECT_URL\";\r\nexport const CHECK_IS_LOGGED_IN = \"CHECK_IS_LOGGED_IN\";\r\nexport const LOGIN_FORM_SUCCESS = \"LOGIN_FORM_SUCCESS\";\r\nexport const CLEAR_USERLOGGEDOUT_MESSAGE = \"CLEAR_USERLOGGEDOUT_MESSAGE\";\r\nexport const CLEAR_LOGGEDOUT_MESSAGE = \"CLEAR_LOGGEDOUT_MESSAGE\";\r\nexport const CLEAR_REDIRECT_URL = \"CLEAR_REDIRECT_URL\";\r\nexport const REFRESH_FAMILY_MANAGEMENT_TOOLTIP = \"REFRESH_FAMILY_MANAGEMENT_TOOLTIP\";\r\n\r\nexport const PROXY_LIST_LOADING = \"PROXY_LIST_LOADING\";\r\nexport const PROXY_LIST_LOADED = \"PROXY_LIST_LOADED\";\r\nexport const NO_USER_PROXY = \"NO_USER_PROXY\";\r\nexport const PROXY_LIST_FAILURE = \"PROXY_LIST_FAILURE\";\r\nexport const USER_TO_SWITCH = \"USER_TO_SWITCH\";\r\nexport const SWITCH_USER_SAGA = \"SWITCH_USER_SAGA\";\r\nexport const SWITCH_USER_REDUCER = \"SWITCH_USER_REDUCER\";\r\nexport const SWITCH_TO_PHARMACY_USER = \"SWITCH_TO_PHARMACY_USER\";\r\nexport const SET_PHARMACY_LINKED = \"SET_PHARMACY_LINKED\";\r\nexport const RESET_USER_VALUE = \"RESET_USER_VALUE\";\r\n\r\nexport const LOAD_DASHBOARD_START = \"LOAD_DASHBOARD_START\";\r\nexport const LOAD_DASHBOARD_SUCCESS = \"LOAD_DASHBOARD_SUCCESS\";\r\nexport const LOAD_DASHBOARD_ERROR = \"LOAD_DASHBOARD_ERROR\";\r\nexport const INITIATE_TODOS = \"INITIATE_TODOS\";\r\nexport const TODOS_SUCCESS = \"TODOS_SUCCESS\";\r\nexport const TODOS_FAILURE = \"TODOS_FAILURE\";\r\nexport const SET_MEMBERSHIP_NOTI_RESPONSE = \"SET_MEMBERSHIP_NOTI_RESPONSE\";\r\nexport const LOAD_DASHBOARD_SEE_ALL_VIEW = \"LOAD_DASHBOARD_SEE_ALL_VIEW\";\r\nexport const RESET_DASHBOARD_SEE_ALL_VIEW = \"RESET_DASHBOARD_SEE_ALL_VIEW\";\r\nexport const INITIAL_STATE_DASHBOARD_SEE_ALL_VIEW = \"INITIAL_STATE_DASHBOARD_SEE_ALL_VIEW\";\r\n\r\nexport const LOAD_HEALTHPLANDASHBOARD_START = \"LOAD_HEALTHPLANDASHBOARD_START\";\r\nexport const LOAD_HEALTHPLANDASHBOARD_SUCCESS = \"LOAD_HEALTHPLANDASHBOARD_SUCCESS\";\r\n\r\nexport const THRIVE = \"THRIVE\";\r\nexport const EVISIT = \"EVISIT\";\r\nexport const EVISIT_GET_SUCCESS = \"EVISIT_GET_SUCCESS\";\r\nexport const EVISIT_GET_FAILURE = \"EVISIT_GET_FAILURE\";\r\nexport const FAQ = \"FAQ\";\r\nexport const FAQ_SUCCESS = \"FAQ_SUCCESS\";\r\nexport const FAQ_FAILURE = \"FAQ_FAILURE\";\r\n\r\nexport const LOAD_HEALTHSOURCEDASHBOARD_START = \"LOAD_HEALTHSOURCEDASHBOARD_START\";\r\nexport const LOAD_HEALTHSOURCEDASHBOARD_SUCCESS = \"LOAD_HEALTHSOURCEDASHBOARD_SUCCESS\";\r\nexport const REMOVE_SLIDE = \"REMOVE_SLIDE\";\r\n\r\nexport const LOAD_PHARMACYDASHBOARD_START = \"LOAD_PHARMACYDASHBOARD_START\";\r\nexport const LOAD_PHARMACYDASHBOARD_SUCCESS = \"LOAD_PHARMACYDASHBOARD_SUCCESS\";\r\nexport const LOAD_PHARMACYDASHBOARD_FAILURE = \"LOAD_PHARMACYDASHBOARD_FAILURE\";\r\nexport const GEOLOCATION = \"GEOLOCATION\";\r\nexport const GEOADDRESS = \"GEOADDRESS\";\r\nexport const GEOLOCATION_SUCCESS = \"GEOLOCATION_SUCCESS\";\r\nexport const GEOLOCATION_FAILURE = \"GEOLOCATION_FAILURE\";\r\nexport const GEOADDRESS_SUCCESS = \"GEOADDRESS_SUCCESS\";\r\nexport const GEOADDRESS_FAILURE = \"GEOADDRESS_FAILURE\";\r\nexport const CLOSEST_PHARMACY = \"CLOSEST_PHARMACY\";\r\nexport const CLOSEST_PHARMACY_SUCCESS = \"CLOSEST_PHARMACY_SUCCESS\";\r\nexport const CLOSEST_PHARMACY_FAILURE = \"CLOSEST_PHARMACY_FAILURE\";\r\nexport const LINK_PHARMACY_DIALOG_OPEN = \"LINK_PHARMACY_DIALOG_OPEN\";\r\nexport const LINK_PHARMACY_DIALOG_CLOSE = \"LINK_PHARMACY_DIALOG_CLOSE\";\r\nexport const LINK_PHARMACY = \"LINK_PHARMACY\";\r\nexport const LINK_PHARMACY_SUCCESS = \"LINK_PHARMACY_SUCCESS\";\r\nexport const LINK_PHARMACY_FAILURE = \"LINK_PHARMACY_FAILURE\";\r\n\r\nexport const RX_READY_FOR_PICKUP = \"RX_READY_FOR_PICKUP\";\r\nexport const RX_READY_FOR_PICKUP_SUCCESS = \"RX_READY_FOR_PICKUP_SUCCESS\";\r\nexport const RX_READY_FOR_PICKUP_FAILURE = \"RX_READY_FOR_PICKUP_FAILURE\";\r\nexport const RX_READY_FOR_REFILL_SUCCESS = \"RX_READY_FOR_REFILL_SUCCESS\";\r\nexport const RX_READY_FOR_REFILL_FAILURE = \"RX_READY_FOR_REFILL_FAILURE\";\r\nexport const RXTRANSFER_START = \"RXTRANSFER_START\";\r\nexport const EXTERNAL_RX_TRANSFER_START = \"EXTERNAL_RX_TRANSFER_START\";\r\nexport const EXTERNAL_RX_TRANSFER_SUCCESS = \"EXTERNAL_RX_TRANSFER_SUCCESS\";\r\nexport const EXTERNAL_RX_TRANSFER_FAILURE = \"EXTERNAL_RX_TRANSFER_FAILURE\";\r\nexport const PHARMACY_LIST_START = \"PHARMACY_LIST_START\";\r\nexport const PHARMACY_LIST_COMPLETED = \"PHARMACY_LIST_COMPLETED\";\r\nexport const RECENTPHARMACY_LIST_START = \"RECENTPHARMACY_LIST_START\";\r\nexport const RECENTPHARMACY_LIST_COMPLETED = \"RECENTPHARMACY_LIST_COMPLETED\";\r\n\r\nexport const LOAD_RX_LIST_START = \"LOAD_RX_LIST_START\";\r\nexport const LOAD_RX_LIST_COMPLETED = \"LOAD_RX_LIST_COMPLETED\";\r\nexport const RX_List_FAILURE = \"RX_List_FAILURE\";\r\n\r\nexport const LOAD_ARCHIVED_RX_LIST_START = \"LOAD_ARCHIVED_RX_LIST_START\";\r\nexport const ARCHIVE_UNARCHIVE_RX_START = \"ARCHIVE_UNARCHIVE_RX_START\";\r\nexport const ARCHIVE_UNARCHIVE_RX_SUCCESS = \"ARCHIVE_UNARCHIVE_RX_SUCCESS\";\r\nexport const ARCHIVE_UNARCHIVE_RX_FAILURE = \"ARCHIVE_UNARCHIVE_RX_FAILURE\";\r\nexport const LOAD_ARCHIVED_RX_LIST_COMPLETED = \"LOAD_ARCHIVED_RX_LIST_COMPLETED\";\r\nexport const RX_ARCHIVED_List_FAILURE = \"RX_ARCHIVED_List_FAILURE\";\r\n\r\nexport const RX_DETAIL = \"RX_DETAIL\";\r\nexport const RX_DETAIL_SUCCESS = \"RX_DETAIL_SUCCESS\";\r\nexport const RX_DETAIL_FAILURE = \"RX_DETAIL_FAILURE\";\r\nexport const RX_HISTORY = \"RX_HISTORY\";\r\nexport const RX_HISTORY_SUCCESS = \"RX_HISTORY_SUCCESS\";\r\nexport const RX_HISTORY_FAILURE = \"RX_HISTORY_FAILURE\";\r\n\r\nexport const UNLINK_RX_TRANSFER_START = \"UNLINK_RX_TRANSFER_START\";\r\nexport const UNLINK_RX_TRANSFER_SUCCESS = \"UNLINK_RX_TRANSFER_SUCCESS\";\r\n\r\nexport const SET_SERVER_DATA = \"SET_SERVER_DATA\";\r\nexport const SET_HISTORY_OBJECT = \"SET_HISTORY_OBJECT\";\r\nexport const UPDATE_PATIENT_IDS = \"UPDATE_PATIENT_IDS\";\r\n\r\nexport const LOAD_ORDERREFILLS_LIST_START = \"LOAD_ORDERREFILLS_LIST_START\";\r\nexport const LOAD_ORDERREFILLS_LIST_COMPLETED = \"LOAD_ORDERREFILLS_LIST_COMPLETED\";\r\nexport const LOAD_ORDERREFILLS_LIST_FAILURE = \"LOAD_ORDERREFILLS_LIST_FAILURE\";\r\nexport const ORDER_REFILL_LIST_UPDATE = \"ORDER_REFILL_LIST_UPDATE\";\r\n\r\nexport const LOAD_PICKUP_HOURS_START = \"LOAD_PICKUP_HOURS_START\";\r\nexport const LOAD_PICKUP_HOURS_COMPLETED = \"LOAD_PICKUP_HOURS_COMPLETED\";\r\n\r\nexport const SUBMIT_IVR_START = \"SUBMIT_IVR_START\";\r\nexport const SUBMIT_IVR_ORDER_REQUEST = \"SUBMIT_IVR_ORDER_REQUEST\";\r\nexport const SUBMIT_IVR_ORDER_COMPLETED = \"SUBMIT_IVR_ORDER_COMPLETED\";\r\n\r\nexport const INTERNAL_RX_TRANSFER_START = \"INTERNAL_RX_TRANSFER_START\";\r\nexport const INTERNAL_RX_TRANSFER_COMPLETED = \"INTERNAL_RX_TRANSFER_COMPLETED\";\r\nexport const INTERNAL_RX_TRANSFER_FAILURE = \"INTERNAL_RX_TRANSFER_FAILURE\";\r\n\r\nexport const GET_PHARMACY_BY_STORENUMBER_START = \"GET_PHARMACY_BY_STORENUMBER_START\";\r\nexport const GET_PHARMACY_BY_STORENUMBER_COMPLETED = \"GET_PHARMACY_BY_STORENUMBER_COMPLETED\";\r\n\r\n\r\nexport const MAP__CLOSE_INFO_WINDOW = \"MAP__CLOSE_INFO_WINDOW\";\r\n\r\nexport const MAP__OPEN_MODAL_WINDOW = \"MAP__OPEN_MODAL_WINDOW\";\r\n\r\nexport const MAP__CLOSE_MODAL_WINDOW = \"MAP__CLOSE_MODAL_WINDOW\";\r\n\r\nexport const SET_FAVOURITE_PHARMACY_START = \"SET_FAVOURITE_PHARMACY_START\";\r\nexport const SET_FAVOURITE_PHARMACY_SUCCESS = \"SET_FAVOURITE_PHARMACY_SUCCESS\";\r\n\r\nexport const OPEN_SCHEDULE_PROVIDER = \"OPEN_SCHEDULE_PROVIDER\";\r\nexport const OPEN_SCHEDULE_PROVIDER_SUCCESS = \"OPEN_SCHEDULE_PROVIDER_SUCCESS\";\r\nexport const OPEN_SCHEDULE_PROVIDER_FAILED = \"OPEN_SCHEDULE_PROVIDER_FAILED\";\r\nexport const OPEN_SCHEDULE_PROVIDER_PENDING = \"OPEN_SCHEDULE_PROVIDER_PENDING\";\r\nexport const OPEN_SCHEDULE_PROV_LOC = \"OPEN_SCHEDULE_PROV_LOC\";\r\nexport const OPEN_SCHEDULE_PROV_LOC_SUCCESS = \"OPEN_SCHEDULE_PROV_LOC_SUCCESS\";\r\nexport const OPEN_SCHEDULE_AVAILABILITY = \"OPEN_SCHEDULE_AVAILABILITY\";\r\nexport const OPEN_SCHEDULE_AVAILABILITY_SUCCESS = \"OPEN_SCHEDULE_AVAILABILITY_SUCCESS\";\r\nexport const OPEN_SCHEDULE_SCHEDULE = \"OPEN_SCHEDULE_SCHEDULE\";\r\nexport const OPEN_SCHEDULE_SCHEDULE_SUCCESS = \"OPEN_SCHEDULE_SCHEDULE_SUCCESS\";\r\nexport const OPEN_SCHEDULE_SCHEDULE_FAILED = \"OPEN_SCHEDULE_SCHEDULE_FAILED\";\r\nexport const OPEN_SCHEDULE_SCHEDULE_PENDING = \"OPEN_SCHEDULE_SCHEDULE_PENDING\";\r\nexport const OPEN_SCHEDULE_VISIT_TYPE_LOCATION = \"OPEN_SCHEDULE_VISIT_TYPE_LOCATION\";\r\nexport const OPEN_SCHEDULE_VISIT_TYPE_LOCATION_RUNNING = \"OPEN_SCHEDULE_VISIT_TYPE_LOCATION_RUNNING\";\r\nexport const OPEN_SCHEDULE_VISIT_TYPE_LOCATION_SUCCESS = \"OPEN_SCHEDULE_VISIT_TYPE_LOCATION_SUCCESS\";\r\nexport const OPEN_SCHEDULE_VISIT_TYPE_LOCATION_FAILED = \"OPEN_SCHEDULE_VISIT_TYPE_LOCATION_FAILED\";\r\nexport const OPEN_SCHEDULE_EARLIEST = \"OPEN_SCHEDULE_EARLIEST\";\r\nexport const OPEN_SCHEDULE_EARLIEST_SUCCESS = \"OPEN_SCHEDULE_EARLIEST_SUCCESS\";\r\nexport const OPEN_SCHEDULE_EARLIEST_FAILURE = \"OPEN_SCHEDULE_EARLIEST_FAILURE\";\r\nexport const OPEN_SCHEDULE_ARRIVAL_TIME = \"OPEN_SCHEDULE_ARRIVAL_TIME\";\r\nexport const OPEN_SCHEDULE_ARRIVAL_TIME_SUCCESS = \"OPEN_SCHEDULE_ARRIVAL_TIME_SUCCESS\";\r\nexport const OPEN_SCHEDULE_ARRIVAL_TIME_FAILURE = \"OPEN_SCHEDULE_ARRIVAL_TIME_FAILURE\";\r\nexport const OPEN_SCHEDULE_PROVIDER_LIST = \"OPEN_SCHEDULE_PROVIDER_LIST\";\r\nexport const OPEN_SCHEDULE_PROVIDER_LIST_SUCCESS = \"OPEN_SCHEDULE_PROVIDER_LIST_SUCCESS\";\r\nexport const OPEN_SCHEDULE_CREATE_PATIENT = \"OPEN_SCHEDULE_CREATE_PATIENT\";\r\nexport const OPEN_SCHEDULE_CREATE_AND_SCHEDULE = \"OPEN_SCHEDULE_CREATE_AND_SCHEDULE\";\r\nexport const OPEN_SCHEDULE_CREATE_PATIENT_SUCCESS = \"OPEN_SCHEDULE_CREATE_PATIENT_SUCCESS\";\r\nexport const OPEN_SCHEDULE_CREATE_PATIENT_FAILED = \"OPEN_SCHEDULE_CREATE_PATIENT_FAILED\";\r\nexport const OPEN_SCHEDULE_CLEAR_REDUX_STATE = \"OPEN_SCHEDULE_CLEAR_REDUX_STATE\";\r\nexport const RESET_SELECTED_MAPS_VALUE = \"RESET_SELECTED_MAPS_VALUE\";\r\nexport const CURRENT_LOCATION_ZIPCODE = \"CURRENT_LOCATION_ZIPCODE\";\r\nexport const UPDATE_BYPASS_PROXY_AND_INFO = \"UPDATE_BYPASS_PROXY_AND_INFO\";\r\nexport const OPEN_SCHEDULE_MAMMOGRAM_QUESTIONS = \"OPEN_SCHEDULE_MAMMOGRAM_QUESTIONS\";\r\nexport const OPEN_SCHEDULE_MAMMOGRAM_QUESTIONS_SUCCESS = \"OPEN_SCHEDULE_MAMMOGRAM_QUESTIONS_SUCCESS\";\r\nexport const OPEN_SCHEDULE_MAMMOGRAM_QUESTIONS_FAILURE = \"OPEN_SCHEDULE_MAMMOGRAM_QUESTIONS_FAILURE\";\r\nexport const OPEN_SCHEDULE_MAMMOGRAM_ANSWERS_SUCCESS = \"OPEN_SCHEDULE_MAMMOGRAM_ANSWERS_SUCCESS\";\r\nexport const OPEN_SCHEDULE_MAMMOGRAM_ANSWERS_FAILURE = \"OPEN_SCHEDULE_MAMMOGRAM_ANSWERS_FAILURE\";\r\nexport const OPEN_SCHEDULE_MAMMOGRAM_ANSWERS = \"OPEN_SCHEDULE_MAMMOGRAM_ANSWERS\";\r\nexport const OPEN_SCHEDULE_QUESTIONS_RESPONSE_SUCCESS = \"OPEN_SCHEDULE_QUESTIONS_RESPONSE_SUCCESS\";\r\nexport const OPEN_SCHEDULE_QUESTIONS_RESPONSE_FAILURE = \"OPEN_SCHEDULE_QUESTIONS_RESPONSE_FAILURE\";\r\nexport const OPEN_SCHEDULE_QUESTIONS_RESPONSE = \"OPEN_SCHEDULE_QUESTIONS_RESPONSE\";\r\nexport const OPEN_SCHEDULE_RESET_MAMMOGRAM_QUESTION_CURRENT_RESPONSE = \"OPEN_SCHEDULE_RESET_MAMMOGRAM_QUESTION_CURRENT_RESPONSE\";\r\nexport const OPEN_SCHEDULE_RESET_MAMMOGRAM_QUESTION_CURRENT_RESPONSE_COMPLETED = \"OPEN_SCHEDULE_RESET_MAMMOGRAM_QUESTION_CURRENT_RESPONSE_COMPLETED\";\r\n\r\nexport const CHANGE_USERNAME = \"CHANGE_USERNAME\";\r\nexport const CHANGE_USERNAME_SUCCESS = \"CHANGE_USERNAME_SUCCESS\";\r\nexport const CHANGE_USERNAME_FAILURE = \"CHANGE_USERNAME_FAILURE\";\r\nexport const CHANGE_USERNAME_CLEAR = \"CHANGE_USERNAME_CLEAR\";\r\n\r\nexport const CHANGE_EMAIL_START = \"CHANGE_EMAIL_START\";\r\nexport const CHANGE_EMAIL_SUCCESS = \"CHANGE_EMAIL_SUCCESS\";\r\nexport const CHANGE_EMAIL_FAILURE = \"CHANGE_EMAIL_FAILURE\";\r\nexport const CHANGE_EMAIL_CLEAR_MESSAGE = \"CHANGE_EMAIL_CLEAR_MESSAGE\";\r\n\r\nexport const CHANGE_PASSWORD = \"CHANGE_PASSWORD\";\r\nexport const CHANGE_PASSWORD_SUCCESS = \"CHANGE_PASSWORD_SUCCESS\";\r\nexport const CHANGE_PASSWORD_FAILURE = \"CHANGE_PASSWORD_FAILURE\";\r\nexport const CHANGE_PASSWORD_CLEAR = \"CHANGE_PASSWORD_CLEAR\";\r\n\r\nexport const FORGOT_PASSWORD_START = \"FORGOT_PASSWORD_START\";\r\nexport const FORGOT_PASSWORD_SUCCESS = \"FORGOT_PASSWORD_SUCCESS\";\r\nexport const FORGOT_PASSWORD_FAILURE = \"FORGOT_PASSWORD_FAILURE\";\r\nexport const FORGOT_PASSWORD_CLEAR = \"FORGOT_PASSWORD_CLEAR\";\r\n\r\nexport const RESET_PASSWORD_START = \"RESET_PASSWORD_START\";\r\nexport const RESET_PASSWORD_SUCCESS = \"RESET_PASSWORD_SUCCESS\";\r\nexport const RESET_PASSWORD_FAILURE = \"RESET_PASSWORD_FAILURE\";\r\n\r\nexport const LINK_EMPLOYEE_ACCOUNT_START = \"LINK_EMPLOYEE_ACCOUNT_START\";\r\nexport const LINK_EMPLOYEE_ACCOUNT_SUCCESS = \"LINK_EMPLOYEE_ACCOUNT_SUCCESS\";\r\nexport const LINK_EMPLOYEE_ACCOUNT_FAILURE = \"LINK_EMPLOYEE_ACCOUNT_FAILURE\";\r\nexport const LINK_EMPLOYEE_CLEAR_MESSAGE = \"LINK_EMPLOYEE_CLEAR_MESSAGE\";\r\n\r\nexport const UNLINK_EMPLOYEE_ACCOUNT_START = \"UNLINK_EMPLOYEE_ACCOUNT_START\";\r\nexport const UNLINK_EMPLOYEE_ACCOUNT_SUCCESS = \"UNLINK_EMPLOYEE_ACCOUNT_SUCCESS\";\r\nexport const UNLINK_EMPLOYEE_ACCOUNT_FAILURE = \"UNLINK_EMPLOYEE_ACCOUNT_FAILURE\";\r\nexport const UNLINK_EMPLOYEE_CLEAR_MESSAGE = \"UNLINK_EMPLOYEE_CLEAR_MESSAGE\";\r\n\r\nexport const LINK_MYCHART_ACCOUNT_START = \"LINK_MYCHART_ACCOUNT_START\";\r\nexport const LINK_MYCHART_ACCOUNT_SUCCESS = \"LINK_MYCHART_ACCOUNT_SUCCESS\";\r\nexport const LINK_MYCHART_ACCOUNT_FAILURE = \"LINK_MYCHART_ACCOUNT_FAILURE\";\r\nexport const LINK_MYCHART_CLEAR_MESSAGE = \"LINK_MYCHART_CLEAR_MESSAGE\";\r\n\r\nexport const UNLINK_MYCHART_ACCOUNT_START = \"UNLINK_MYCHART_ACCOUNT_START\";\r\nexport const UNLINK_MYCHART_ACCOUNT_SUCCESS = \"UNLINK_MYCHART_ACCOUNT_SUCCESS\";\r\nexport const UNLINK_MYCHART_ACCOUNT_FAILURE = \"UNLINK_MYCHART_ACCOUNT_FAILURE\";\r\nexport const UNLINK_MYCHART_CLEAR_MESSAGE = \"UNLINK_MYCHART_CLEAR_MESSAGE\";\r\n\r\nexport const RX_DEFAULT_PHARMACY_FAILURE = \"RX_DEFAULT_PHARMACY_FAILURE\";\r\nexport const GET_PHARMACY_BY_STORENUMBER_FAILURE = \"GET_PHARMACY_BY_STORENUMBER_FAILURE\";\r\nexport const SUBMIT_IVR_ORDER_FAILURE = \"SUBMIT_IVR_ORDER_FAILURE\";\r\nexport const LOAD_PICKUP_HOURS_FAILURE = \"LOAD_PICKUP_HOURS_FAILURE\";\r\nexport const UNLINK_RX_TRANSFER_FAILURE = \"UNLINK_RX_TRANSFER_FAILURE\";\r\nexport const RECENTPHARMACY_LIST_FAILURE = \"RECENTPHARMACY_LIST_FAILURE\";\r\nexport const CITY_ZIP_LIST = \"CITY_ZIP_LIST\";\r\nexport const CITY_ZIP_LIST_SUCCESS = \"CITY_ZIP_LIST_SUCCESS\";\r\nexport const CITY_ZIP_LIST_FAILURE = \"CITY_ZIP_LIST_FAILURE\";\r\nexport const CITIES_LIST_FAILURE = \"CITIES_LIST_FAILURE\";\r\nexport const RXTRANSFER_FAILURE = \"RXTRANSFER_FAILURE\";\r\nexport const SET_FAVOURITE_PHARMACY_FAILURE = \"SET_FAVOURITE_PHARMACY_FAILURE\";\r\n\r\nexport const SET_PROGRESS_FORWARD = \"SET_PROGRESS_FORWARD\";\r\nexport const RESET_LOGIN_SETTINGS_DATA = \"RESET_LOGIN_SETTINGS_DATA\";\r\n\r\nexport const ARCHIVE_UNLINKED_RX_TRANSFER_START = \"ARCHIVE_UNLINKED_RX_TRANSFER_START\";\r\nexport const ARCHIVE_UNLINKED_RX_TRANSFER_SUCCESS = \"ARCHIVE_UNLINKED_RX_TRANSFER_SUCCESS\";\r\nexport const ARCHIVE_UNLINKED_RX_TRANSFER_FAILURE = \"ARCHIVE_UNLINKED_RX_TRANSFER_FAILURE\";\r\n\r\nexport const GET_FAVORITE_PROVIDERS_START = \"GET_FAVORITE_PROVIDERS_START\";\r\nexport const GET_FAVORITE_PROVIDERS_SUCCESS = \"GET_FAVORITE_PROVIDERS_SUCCESS\";\r\nexport const GET_FAVORITE_PROVIDERS_FAILURE = \"GET_FAVORITE_PROVIDERS_FAILURE\";\r\n\r\n\r\nexport const GET_RECENT_VISITED_DOCTORS_START = \"GET_RECENT_VISITED_DOCTORS_START\";\r\nexport const GET_RECENT_VISITED_DOCTORS_SUCCESS = \"GET_RECENT_VISITED_DOCTORS_SUCCESS\";\r\nexport const GET_RECENT_VISITED_DOCTORS_FAILURE = \"GET_RECENT_VISITED_DOCTORS_FAILURE\";\r\n\r\nexport const FORGOT_USERNAME_START = \"FORGOT_USERNAME_START\";\r\nexport const FORGOT_USERNAME_SUCCESS = \"FORGOT_USERNAME_SUCCESS\";\r\nexport const FORGOT_USERNAME_FAILURE = \"FORGOT_USERNAME_FAILURE\";\r\nexport const FORGOT_USERNAME_CLEAR = \"FORGOT_USERNAME_CLEAR\";\r\n\r\nexport const LOAD_DOCS_DATA = \"LOAD_DOCS_DATA\";\r\nexport const LOAD_DOCS_DATA_SUCCESS = \"LOAD_DOCS_DATA_SUCCESS\";\r\nexport const LOAD_DOCS_DATA_FAILURE = \"LOAD_DOCS_DATA_FAILURE\";\r\n\r\nexport const REMOVE_FAVORITE_PROVIDER_START = \"REMOVE_FAVORITE_PROVIDER_START\";\r\nexport const REMOVE_FAVORITE_PROVIDER_SUCCESS = \"REMOVE_FAVORITE_PROVIDER_SUCCESS\";\r\nexport const REMOVE_FAVORITE_PROVIDER_FAILURE = \"REMOVE_FAVORITE_PROVIDER_FAILURE\";\r\n\r\nexport const ADD_FAVORITE_PROVIDER_START = \"ADD_FAVORITE_PROVIDER_START\";\r\nexport const ADD_FAVORITE_PROVIDER_SUCCESS = \"ADD_FAVORITE_PROVIDER_SUCCESS\";\r\nexport const ADD_FAVORITE_PROVIDER_FAILURE = \"ADD_FAVORITE_PROVIDER_FAILURE\";\r\n\r\nexport const LOAD_MYCHART_TERMS_DATA_START = \"LOAD_MYCHART_TERMS_DATA_START\";\r\nexport const LOAD_MYCHART_TERMS_DATA_SUCCESS = \"LOAD_MYCHART_TERMS_DATA_SUCCESS\";\r\nexport const LOAD_MYCHART_TERMS_DATA_FAILURE = \"LOAD_MYCHART_TERMS_DATA_FAILURE\";\r\n\r\nexport const SET_TERMS_AND_CONDITIONS = \"SET_TERMS_AND_CONDITIONS\";\r\nexport const LOAD_TERMS_AND_CONDITIONS = \"LOAD_TERMS_AND_CONDITIONS\";\r\nexport const ACCEPT_TERMS_AND_CONDITIONS = \"ACCEPT_TERMS_AND_CONDITIONS\";\r\n\r\nexport const SHOW_MARKETING_EMAIL_OPT_IN = \"SHOW_MARKETING_EMAIL_OPT_IN\"\r\nexport const SET_MARKETING_EMAIL_OPT_IN = \"SET_MARKETING_EMAIL_OPT_IN\"\r\nexport const SET_MARKETING_EMAIL_OPT_IN_SUCCESS = \"SET_MARKETING_EMAIL_OPT_IN_SUCCESS\"\r\nexport const SET_MARKETING_EMAIL_OPT_IN_FAILURE = \"SET_MARKETING_EMAIL_OPT_IN_FAILURE\"\r\nexport const UPDATE_SEEN_MARKETING_EMAIL_OPT_IN = \"UPDATE_SEEN_MARKETING_EMAIL_OPT_IN\"\r\n\r\nexport const PHARMACY_PROXY_INFO = \"pharmacyProxyInfo\";\r\nexport const PHARMACY_PROXY_REQUEST = \"pharmacyProxyRequest\";\r\nexport const PHARMACY_PROXY_REQUEST_DATA = \"pharmacyProxyRequestData\";\r\nexport const PHARMACY_PROXY_RESEND_REQUEST = \"pharmacyProxyResendRequest\";\r\nexport const PHARMACY_PROXY_REMOVE = \"pharmacyProxyRemove\";\r\nexport const PHARMACY_PROXY_APPROVE = \"pharmacyProxyApprove\";\r\nexport const PHARMACY_PROXY_DECLINE = \"pharmacyProxyDecline\";\r\nexport const PHARMACY_PROXY_ACCESS_LIST = \"pharmacyProxyAccessList\";\r\nexport const PHARMACY_PROXY_GRANT = \"pharmacyProxyGrant\";\r\nexport const HEALTH_RECORD_PROXY_REQUEST = \"healthRecordProxyRequest\";\r\nexport const PROXY_REQUEST_DATA = \"hrp_proxyRequestData\";\r\n\r\nexport const MYCHART_PROXY_REQUEST = \"mychartProxyRequest\";\r\n\r\nexport const PHARMACY_NOTIFICATION_PREFERENCE_SAVE = \"pharmacyNotificationPreferenceSave\";\r\n\r\nexport const GET_CARETEAM_PROVIDERS_START = \"GET_CARETEAM_PROVIDERS_START\";\r\nexport const GET_CARETEAM_PROVIDERS_SUCCESS = \"GET_CARETEAM_PROVIDERS_SUCCESS\";\r\nexport const GET_CARETEAM_PROVIDERS_FAILURE = \"GET_CARETEAM_PROVIDERS_FAILURE\";\r\n\r\nexport const SET_PROVIDER_DETAILS_NPI_LISTS = \"SET_PROVIDER_DETAILS_NPI_LISTS\";\r\nexport const SET_PROVIDER_DETAILS_FROM_NPI_LIST = \"SET_PROVIDER_DETAILS_FROM_NPI_LIST\";\r\nexport const SET_PARSED_PROVIDER_DETAILS_LISTS = \"SET_PARSED_PROVIDER_DETAILS_LISTS\";\r\n\r\nexport const GET_USER_PHONE_NUMBER_START = \"GET_USER_PHONE_NUMBER_START\";\r\nexport const GET_USER_PHONE_NUMBER_SUCCESS = \"GET_USER_PHONE_NUMBER_SUCCESS\";\r\nexport const GET_USER_PHONE_NUMBER_FAILURE = \"GET_USER_PHONE_NUMBER_FAILURE\";\r\n\r\nexport const ADD_OR_UPDATE_USER_PHONE_NUMBER_START = \"ADD_OR_UPDATE_USER_PHONE_NUMBER_START\";\r\nexport const ADD_OR_UPDATE_USER_PHONE_NUMBER_SUCCESS = \"ADD_OR_UPDATE_USER_PHONE_NUMBER_SUCCESS\";\r\nexport const ADD_OR_UPDATE_USER_PHONE_NUMBER_FAILURE = \"ADD_OR_UPDATE_USER_PHONE_NUMBER_FAILURE\";\r\n\r\nexport const GET_USER_ADDRESS_START = \"GET_USER_ADDRESS_START\";\r\nexport const GET_USER_ADDRESS_SUCCESS = \"GET_USER_ADDRESS_SUCCESS\";\r\nexport const GET_USER_ADDRESS_FAILURE = \"GET_USER_ADDRESS_FAILURE\";\r\n\r\nexport const GET_LAT_LNG_USER_ADDRESS_START = \"GET_LAT_LNG_USER_ADDRESS_START\";\r\nexport const GET_LAT_LNG_USER_ADDRESS_SUCCESS = \"GET_LAT_LNG_USER_ADDRESS_SUCCESS\";\r\nexport const GET_LAT_LNG_USER_ADDRESS_FAILURE = \"GET_LAT_LNG_USER_ADDRESS_FAILURE\";\r\n\r\nexport const RELOAD_KEY = \"RELOAD_KEY\";\r\n\r\nexport const SET_USER_PREFERENCES = \"SET_USER_PREFERENCES\";\r\nexport const GET_USER_PREFERENCE = \"GetUserPreference\";\r\nexport const GET_USER_PREFERENCE_SUCCESS = \"GetUserPreference.Success\";\r\nexport const GET_USER_PREFERENCE_FAILURE = \"GetUserPreference.Failure\";\r\nexport const UPDATE_USER_PREFERENCE = \"UpdateUserPreference\";\r\nexport const UPDATE_USER_PREFERENCE_SUCCESS = \"UpdateUserPreference.Success\";\r\nexport const UPDATE_USER_PREFERENCE_FAILURE = \"UpdateUserPreference.Failure\";\r\n\r\nexport const SET_HIDE_TUTORIAL = \"SET_HIDE_TUTORIAL\";\r\nexport const SAVE_HIDE_TUTORIAL = \"SAVE_HIDE_TUTORIAL\";\r\n\r\nexport const SUBMIT_USER_FEEDBACK_FORM = \"SUBMIT_USER_FEEDBACK_FORM\";\r\n\r\nexport const DIRECT_SCHEDULING_PROVIDER_LIST = \"DIRECT_SCHEDULING_PROVIDER_LIST\";\r\nexport const DIRECT_SCHEDULING_PROVIDER_LIST_SUCCESS = \"DIRECT_SCHEDULING_PROVIDER_LIST_SUCCESS\";\r\nexport const DIRECT_SCHEDULING_PROVIDER_LIST_FAILURE = \"DIRECT_SCHEDULING_PROVIDER_LIST_FAILURE\";\r\n\r\nexport const CONSENT_GET_FLU = \"CONSENT_GET_FLU\";\r\nexport const CONSENT_GET_SUCCESS = \"CONSENT_GET_SUCCESS\";\r\nexport const CONSENT_GET_FAILURE = \"CONSENT_GET_FAILURE\";\r\nexport const CONSENT_GET_PENDING = \"CONSENT_GET_PENDING\";\r\nexport const CONSENT_GET_LIST = \"CONSENT_GET_LIST\";\r\nexport const CONSENT_GET_LIST_SUCCESS = \"CONSENT_GET_LIST_SUCCESS\";\r\nexport const CONSENT_GET_LIST_FAILURE = \"CONSENT_GET_LIST_FAILURE\";\r\n\r\nexport const CONSENT_FLU_PENDING = \"CONSENT_FLU_PENDING\";\r\nexport const CONSENT_FLU_SUCCESS = \"CONSENT_FLU_SUCCESS\";\r\nexport const CONSENT_FLU_FAILURE = \"CONSENT_FLU_FAILURE\";\r\n\r\nexport const CONSENT_SET_FLU = \"CONSENT_SET_FLU\";\r\nexport const CONSENT_SET_SUCCESS = \"CONSENT_SET_SUCCESS\";\r\nexport const CONSENT_SET_FAILURE = \"CONSENT_SET_FAILURE\";\r\nexport const CONSENT_SET_PENDING = \"CONSENT_SET_PENDING\";\r\n\r\nexport const CONSENT_TYPE_GET = \"CONSENT_TYPE_GET\";\r\nexport const CONSENT_TYPE_PENDING = \"CONSENT_TYPE_PENDING\";\r\nexport const CONSENT_TYPE_SUCCESS = \"CONSENT_TYPE_SUCCESS\";\r\nexport const CONSENT_TYPE_FAILURE = \"CONSENT_TYPE_FAILURE\";\r\n\r\nexport const CONSENT_TYPE_LIST_GET = \"CONSENT_TYPE_LIST_GET\";\r\nexport const CONSENT_TYPE_LIST_PENDING = \"CONSENT_TYPE_LIST_PENDING\";\r\nexport const CONSENT_TYPE_LIST_SUCCESS = \"CONSENT_TYPE_LIST_SUCCESS\";\r\nexport const CONSENT_TYPE_LIST_FAILURE = \"CONSENT_TYPE_LIST_FAILURE\";\r\n\r\nexport const GET_COMPLETE_FLU_STATUS = \"GET_COMPLETE_FLU_STATUS\";\r\nexport const GET_COMPLETE_FLU_STATUS_PENDING = \"GET_COMPLETE_FLU_STATUS_PENDING\";\r\nexport const GET_COMPLETE_FLU_STATUS_SUCCESS = \"GET_COMPLETE_FLU_STATUS_SUCCESS\";\r\nexport const GET_COMPLETE_FLU_STATUS_FAILURE = \"GET_COMPLETE_FLU_STATUS_FAILURE\";\r\n\r\nexport const DISABLE_FLU = \"DISABLE_FLU\";\r\nexport const DISMISS_FLU_TILE = \"DISMISS_FLU_TILE\";\r\nexport const HIDE_FLU_VACCINE_TILE = \"HIDE_FLU_VACCINE_TILE\";\r\n\r\nexport const STAY_ON_INCOMPLETE_FORM = \"STAY_ON_INCOMPLETE_FORM\";\r\n\r\nexport const SITE_SEARCH_START = \"SITE_SEARCH_START\";\r\nexport const SITE_SEARCH_SUCCESS = \"SITE_SEARCH_SUCCESS\";\r\nexport const SITE_SEARCH_FAILURE = \"SITE_SEARCH_FAILURE\";\r\n\r\nexport const PATIENT_PHOTO_START = \"PATIENT_PHOTO_START\";\r\nexport const PATIENT_PHOTO_SUCCESS = \"PATIENT_PHOTO_SUCCESS\";\r\nexport const PATIENT_PHOTO_FAILURE = \"PATIENT_PHOTO_FAILURE\";\r\n\r\nexport const THRIVE_GET_CARD = \"THRIVE_GET_CARD\";\r\nexport const THRIVE_GET_CARD_SUCCESS = \"THRIVE_GET_CARD_SUCCESS\";\r\nexport const THRIVE_GET_CARD_PENDING = \"THRIVE_GET_CARD_PENDING\";\r\nexport const THRIVE_GET_CARD_FAILURE = \"THRIVE_GET_CARD_FAILURE\";\r\n\r\nexport const THRIVE_GET_REPORT = \"THRIVE_GET_REPORT\";\r\nexport const THRIVE_GET_REPORT_SUCCESS = \"THRIVE_GET_REPORT_SUCCESS\";\r\nexport const THRIVE_GET_REPORT_PENDING = \"THRIVE_GET_REPORT_PENDING\";\r\nexport const THRIVE_GET_REPORT_FAILURE = \"THRIVE_GET_REPORT_FAILURE\";\r\n\r\nexport const HP_GET_OTHER_COVERAGE_START = \"HP_GET_OTHER_COVERAGE_START\";\r\nexport const HP_GET_OTHER_COVERAGE_SUCCESS = \"HP_GET_OTHER_COVERAGE_SUCCESS\";\r\nexport const HP_GET_OTHER_COVERAGE_FAILURE = \"HP_GET_OTHER_COVERAGE_FAILURE\";\r\n\r\nexport const HP_UPDATE_OTHER_COVERAGE_START = \"HP_UPDATE_OTHER_COVERAGE_START\";\r\nexport const HP_UPDATE_OTHER_COVERAGE_SUCCESS = \"HP_UPDATE_OTHER_COVERAGE_SUCCESS\";\r\nexport const HP_UPDATE_OTHER_COVERAGE_FAILURE = \"HP_UPDATE_OTHER_COVERAGE_FAILURE\";\r\n\r\nexport const HP_GET_NOTIFICATION_PREFERENCES_START = \"HP_GET_NOTIFICATION_PREFERENCES_START\";\r\nexport const HP_GET_NOTIFICATION_PREFERENCES_SUCCESS = \"HP_GET_NOTIFICATION_PREFERENCES_SUCCESS\";\r\nexport const HP_GET_NOTIFICATION_PREFERENCES_FAILURE = \"HP_GET_NOTIFICATION_PREFERENCES_FAILURE\";\r\n\r\nexport const HP_UPDATE_NOTIFICATION_PREFERENCES_START = \"HP_UPDATE_NOTIFICATION_PREFERENCES_START\";\r\nexport const HP_UPDATE_NOTIFICATION_PREFERENCES_SUCCESS = \"HP_UPDATE_NOTIFICATION_PREFERENCES_SUCCESS\";\r\nexport const HP_UPDATE_NOTIFICATION_PREFERENCES_FAILURE = \"HP_UPDATE_NOTIFICATION_PREFERENCES_FAILURE\";\r\n\r\nexport const HP_TRIGGER_PAPER_DOCUMENT_START = \"HP_TRIGGER_PAPER_DOCUMENT_START\";\r\nexport const HP_TRIGGER_PAPER_DOCUMENT_SUCCESS = \"HP_TRIGGER_PAPER_DOCUMENT_SUCCESS\";\r\nexport const HP_TRIGGER_PAPER_DOCUMENT_FAILURE = \"HP_TRIGGER_PAPER_DOCUMENT_FAILURE\";\r\n\r\nexport const HP_GET_SUPPORT_NOTIFICATION_START = \"HP_GET_SUPPORT_NOTIFICATION_START\";\r\nexport const HP_GET_SUPPORT_NOTIFICATION_SUCCESS = \"HP_GET_SUPPORT_NOTIFICATION_SUCCESS\";\r\nexport const HP_GET_SUPPORT_NOTIFICATION_FAILURE = \"HP_GET_SUPPORT_NOTIFICATION_FAILURE\";\r\n\r\nexport const HP_GET_BENEFIT_PLANS_START = \"HP_GET_BENEFIT_PLANS_START\";\r\nexport const HP_GET_BENEFIT_PLANS_SUCCESS = \"HP_GET_BENEFIT_PLANS_SUCCESS\";\r\nexport const HP_GET_BENEFIT_PLANS_FAILURE = \"HP_GET_BENEFIT_PLANS_FAILURE\";\r\n\r\nexport const HP_GET_BENEFIT_DOCUMENTS_START = \"HP_GET_BENEFIT_DOCUMENTS_START\";\r\nexport const HP_GET_BENEFIT_DOCUMENTS_SUCCESS = \"HP_GET_BENEFIT_DOCUMENTS_SUCCESS\";\r\nexport const HP_GET_BENEFIT_DOCUMENTS_FAILURE = \"HP_GET_BENEFIT_DOCUMENTS_FAILURE\";\r\n\r\nexport const HP_GET_BENEFIT_DOCUMENT_START = \"HP_GET_BENEFIT_DOCUMENT_START\";\r\nexport const HP_GET_BENEFIT_DOCUMENT_SUCCESS = \"HP_GET_BENEFIT_DOCUMENT_SUCCESS\";\r\nexport const HP_GET_BENEFIT_DOCUMENT_FAILURE = \"HP_GET_BENEFIT_DOCUMENT_FAILURE\";\r\n\r\nexport const HP_SSO_PHARMACY_START = \"HP_SSO_PHARMACY_START\";\r\nexport const HP_SSO_PHARMACY_SUCCESS = \"HP_SSO_PHARMACY_SUCCESS\";\r\nexport const HP_SSO_PHARMACY_FAILURE = \"HP_SSO_PHARMACY_FAILURE\";\r\n\r\nexport const HP_SSO_NATURALLYSLIM_START = \"HP_SSO_NATURALLYSLIM_START\";\r\nexport const HP_SSO_NATURALLYSLIM_SUCCESS = \"HP_SSO_NATURALLYSLIM_SUCCESS\";\r\nexport const HP_SSO_NATURALLYSLIM_FAILURE = \"HP_SSO_NATURALLYSLIM_FAILURE\";\r\n\r\nexport const HP_SSO_FIRSTCAREPLUS_START = \"HP_SSO_FIRSTCAREPLUS_START\";\r\nexport const HP_SSO_FIRSTCAREPLUS_SUCCESS = \"HP_SSO_FIRSTCAREPLUS_SUCCESS\";\r\nexport const HP_SSO_FIRSTCAREPLUS_FAILURE = \"HP_SSO_FIRSTCAREPLUS_FAILURE\";\r\n\r\nexport const HP_SSO_THRIVE_START = \"HP_SSO_THRIVE_START\";\r\nexport const HP_SSO_THRIVE_SUCCESS = \"HP_SSO_THRIVE_SUCCESS\";\r\nexport const HP_SSO_THRIVE_FAILURE = \"HP_SSO_THRIVE_FAILURE\";\r\n\r\nexport const HP_SSO_INVOICESANDPAYMENTS_START = \"HP_SSO_INVOICESANDPAYMENTS_START\";\r\nexport const HP_SSO_INVOICESANDPAYMENTS_SUCCESS = \"HP_SSO_INVOICESANDPAYMENTS_SUCCESS\";\r\nexport const HP_SSO_INVOICESANDPAYMENTS_FAILURE = \"HP_SSO_INVOICESANDPAYMENTS_FAILURE\";\r\n\r\nexport const HP_SSO_TELEMEDICINE_START = \"HP_SSO_TELEMEDICINE_START\";\r\nexport const HP_SSO_TELEMEDICINE_SUCCESS = \"HP_SSO_TELEMEDICINE_SUCCESS\";\r\nexport const HP_SSO_TELEMEDICINE_FAILURE = \"HP_SSO_TELEMEDICINE_FAILURE\";\r\n\r\nexport const HP_GET_ACCUMULATOR_DATA = \"HP_GET_ACCUMULATOR_DATA\";\r\nexport const HP_GET_ACCUMULATOR_DATA_START = \"HP_GET_ACCUMULATOR_DATA_START\";\r\nexport const HP_GET_ACCUMULATOR_DATA_SUCCESS = \"HP_GET_ACCUMULATOR_DATA_SUCCESS\";\r\nexport const HP_GET_ACCUMULATOR_DATA_FAILURE = \"HP_GET_ACCUMULATOR_DATA_FAILURE\";\r\n\r\nexport const HP_GET_AUTHORIZATIONS_LIST = \"HP_GET_AUTHORIZATIONS_LIST\";\r\nexport const HP_GET_AUTHORIZATIONS_LIST_START = \"HP_GET_AUTHORIZATIONS_LIST_START\";\r\nexport const HP_GET_AUTHORIZATIONS_LIST_SUCCESS = \"HP_GET_AUTHORIZATIONS_LIST_SUCCESS\";\r\nexport const HP_GET_AUTHORIZATIONS_LIST_FAILURE = \"HP_GET_AUTHORIZATIONS_LIST_FAILURE\";\r\n\r\nexport const HP_GET_AUTHORIZATION_DETAIL = \"HP_GET_AUTHORIZATION_DETAIL\";\r\nexport const HP_GET_AUTHORIZATION_DETAIL_START = \"HP_GET_AUTHORIZATION_DETAIL_START\";\r\nexport const HP_GET_AUTHORIZATION_DETAIL_SUCCESS = \"HP_GET_AUTHORIZATION_DETAIL_SUCCESS\";\r\nexport const HP_GET_AUTHORIZATION_DETAIL_FAILURE = \"HP_GET_AUTHORIZATION_DETAIL_FAILURE\";\r\n\r\nexport const HP_GET_AUTHORIZATION_APPROVAL_LETTER = \"HP_GET_AUTHORIZATION_APPROVAL_LETTER\";\r\nexport const HP_GET_AUTHORIZATION_APPROVAL_LETTER_START = \"HP_GET_AUTHORIZATION_APPROVAL_LETTER_START\";\r\nexport const HP_GET_AUTHORIZATION_APPROVAL_LETTER_SUCCESS = \"HP_GET_AUTHORIZATION_APPROVAL_LETTER_SUCCESS\";\r\nexport const HP_GET_AUTHORIZATION_APPROVAL_LETTER_FAILURE = \"HP_GET_AUTHORIZATION_APPROVAL_LETTER_FAILURE\";\r\n\r\nexport const HP_GET_CLAIMS_LIST = \"HP_GET_CLAIMS_LIST\";\r\nexport const HP_GET_CLAIMS_LIST_START = \"HP_GET_CLAIMS_LIST_START\";\r\nexport const HP_GET_CLAIMS_LIST_SUCCESS = \"HP_GET_CLAIMS_LIST_SUCCESS\";\r\nexport const HP_GET_CLAIMS_LIST_FAILURE = \"HP_GET_CLAIMS_LIST_FAILURE\";\r\n\r\nexport const HP_GET_CLAIM_DETAIL = \"HP_GET_CLAIM_DETAIL\";\r\nexport const HP_GET_CLAIM_DETAIL_START = \"HP_GET_CLAIM_DETAIL_START\";\r\nexport const HP_GET_CLAIM_DETAIL_SUCCESS = \"HP_GET_CLAIM_DETAIL_SUCCESS\";\r\nexport const HP_GET_CLAIM_DETAIL_FAILURE = \"HP_GET_CLAIM_DETAIL_FAILURE\";\r\n\r\nexport const HP_GET_CRM_MEMBER_MESSAGES = \"HP_GET_CRM_MEMBER_MESSAGES\";\r\nexport const HP_GET_CRM_MEMBER_MESSAGES_START = \"HP_GET_CRM_MEMBER_MESSAGES_START\";\r\nexport const HP_GET_CRM_MEMBER_MESSAGES_SUCCESS = \"HP_GET_CRM_MEMBER_MESSAGES_SUCCESS\";\r\nexport const HP_GET_CRM_MEMBER_MESSAGES_FAILURE = \"HP_GET_CRM_MEMBER_MESSAGES_FAILURE\";\r\n\r\nexport const HP_SUBMIT_CLAIM_APPEAL = \"HP_SUBMIT_CLAIM_APPEAL\";\r\nexport const HP_SUBMIT_CLAIM_APPEAL_START = \"HP_SUBMIT_CLAIM_APPEAL_START\";\r\nexport const HP_SUBMIT_CLAIM_APPEAL_SUCCESS = \"HP_SUBMIT_CLAIM_APPEAL_SUCCESS\";\r\nexport const HP_SUBMIT_CLAIM_APPEAL_FAILURE = \"HP_SUBMIT_CLAIM_APPEAL_FAILURE\";\r\n\r\nexport const HP_GET_IDCARD = \"HP_GET_IDCARD\";\r\nexport const HP_GET_IDCARD_START = \"HP_GET_IDCARD_START\";\r\nexport const HP_GET_IDCARD_SUCCESS = \"HP_GET_IDCARD_SUCCESS\";\r\nexport const HP_GET_IDCARD_FAILURE = \"HP_GET_IDCARD_FAILURE\";\r\n\r\nexport const HP_GET_IDCARD_IMAGE = \"HP_GET_IDCARD_IMAGE\";\r\nexport const HP_GET_IDCARD_IMAGE_START = \"HP_GET_IDCARD_IMAGE_START\";\r\nexport const HP_GET_IDCARD_IMAGE_SUCCESS = \"HP_GET_IDCARD_IMAGE_SUCCESS\";\r\nexport const HP_GET_IDCARD_IMAGE_FAILURE = \"HP_GET_IDCARD_IMAGE_FAILURE\";\r\n\r\nexport const HP_GET_DOCUMENTS_LIST = \"HP_GET_DOCUMENTS_LIST\";\r\nexport const HP_GET_DOCUMENTS_LIST_START = \"HP_GET_DOCUMENTS_LIST_START\";\r\nexport const HP_GET_DOCUMENTS_LIST_SUCCESS = \"HP_GET_DOCUMENTS_LIST_SUCCESS\";\r\nexport const HP_GET_DOCUMENTS_LIST_FAILURE = \"HP_GET_DOCUMENTS_LIST_FAILURE\";\r\n\r\nexport const HP_GET_DOCUMENT_DETAIL = \"HP_GET_DOCUMENT_DETAIL\";\r\nexport const HP_GET_DOCUMENT_DETAIL_START = \"HP_GET_DOCUMENT_DETAIL_START\";\r\nexport const HP_GET_DOCUMENT_DETAIL_SUCCESS = \"HP_GET_DOCUMENT_DETAIL_SUCCESS\";\r\nexport const HP_GET_DOCUMENT_DETAIL_FAILURE = \"HP_GET_DOCUMENT_DETAIL_FAILURE\";\r\n\r\nexport const HP_GET_INVOICES_LIST = \"HP_GET_INVOICES_LIST\";\r\nexport const HP_GET_INVOICES_LIST_START = \"HP_GET_INVOICES_LIST_START\";\r\nexport const HP_GET_INVOICES_LIST_SUCCESS = \"HP_GET_INVOICES_LIST_SUCCESS\";\r\nexport const HP_GET_INVOICES_LIST_FAILURE = \"HP_GET_INVOICES_LIST_FAILURE\";\r\n\r\nexport const HP_GET_INVOICE_DETAIL = \"HP_GET_INVOICE_DETAIL\";\r\nexport const HP_GET_INVOICE_DETAIL_START = \"HP_GET_INVOICE_DETAIL_START\";\r\nexport const HP_GET_INVOICE_DETAIL_SUCCESS = \"HP_GET_INVOICE_DETAIL_SUCCESS\";\r\nexport const HP_GET_INVOICE_DETAIL_FAILURE = \"HP_GET_INVOICE_DETAIL_FAILURE\";\r\n\r\nexport const HP_GET_INVOICE_ADJUSTMENTS = \"HP_GET_INVOICE_ADJUSTMENTS\";\r\nexport const HP_GET_INVOICE_ADJUSTMENTS_START = \"HP_GET_INVOICE_ADJUSTMENTS_START\";\r\nexport const HP_GET_INVOICE_ADJUSTMENTS_SUCCESS = \"HP_GET_INVOICE_ADJUSTMENTS_SUCCESS\";\r\nexport const HP_GET_INVOICE_ADJUSTMENTS_FAILURE = \"HP_GET_INVOICE_ADJUSTMENTS_FAILURE\";\r\n\r\nexport const HP_GET_INVOICE_PDF = \"HP_GET_INVOICE_PDF\";\r\nexport const HP_GET_INVOICE_PDF_START = \"HP_GET_INVOICE_PDF_START\";\r\nexport const HP_GET_INVOICE_PDF_SUCCESS = \"HP_GET_INVOICE_PDF_SUCCESS\";\r\nexport const HP_GET_INVOICE_PDF_FAILURE = \"HP_GET_INVOICE_PDF_FAILURE\";\r\n\r\nexport const HP_GET_FORM = \"HP_GET_FORM\";\r\nexport const HP_GET_FORM_START = \"HP_GET_FORM_START\";\r\nexport const HP_GET_FORM_SUCCESS = \"HP_GET_FORM_SUCCESS\";\r\nexport const HP_GET_FORM_FAILURE = \"HP_GET_FORM_FAILURE\";\r\n\r\nexport const HP_GET_SUBSCRIPTION = \"HP_GET_SUBSCRIPTION\";\r\nexport const HP_GET_SUBSCRIPTION_START = \"HP_GET_SUBSCRIPTION_START\";\r\nexport const HP_GET_SUBSCRIPTION_SUCCESS = \"HP_GET_SUBSCRIPTION_SUCCESS\";\r\nexport const HP_GET_SUBSCRIPTION_FAILURE = \"HP_GET_SUBSCRIPTION_FAILURE\";\r\n\r\nexport const HP_GET_MEMBERS_LIST = \"HP_GET_MEMBERS_LIST\";\r\nexport const HP_GET_MEMBERS_LIST_START = \"HP_GET_MEMBERS_LIST_START\";\r\nexport const HP_GET_MEMBERS_LIST_SUCCESS = \"HP_GET_MEMBERS_LIST_SUCCESS\";\r\nexport const HP_GET_MEMBERS_LIST_FAILURE = \"HP_GET_MEMBERS_LIST_FAILURE\";\r\n\r\nexport const HP_GET_BENEFIT_PLAN_DETAIL = \"HP_GET_BENEFIT_PLAN_DETAIL\";\r\nexport const HP_GET_BENEFIT_PLAN_DETAIL_START = \"HP_GET_BENEFIT_PLAN_DETAIL_START\";\r\nexport const HP_GET_BENEFIT_PLAN_DETAIL_SUCCESS = \"HP_GET_BENEFIT_PLAN_DETAIL_SUCCESS\";\r\nexport const HP_GET_BENEFIT_PLAN_DETAIL_FAILURE = \"HP_GET_BENEFIT_PLAN_DETAIL_FAILURE\";\r\n\r\nexport const HP_GET_AA_BENEFIT_PLAN_DETAIL = \"HP_GET_AA_BENEFIT_PLAN_DETAIL\";\r\nexport const HP_GET_AA_BENEFIT_PLAN_DETAIL_START = \"HP_GET_AA_BENEFIT_PLAN_DETAIL_START\";\r\nexport const HP_GET_AA_BENEFIT_PLAN_DETAIL_SUCCESS = \"HP_GET_AA_BENEFIT_PLAN_DETAIL_SUCCESS\";\r\nexport const HP_GET_AA_BENEFIT_PLAN_DETAIL_FAILURE = \"HP_GET_AA_BENEFIT_PLAN_DETAIL_FAILURE\";\r\n\r\nexport const HP_UPDATE_MEMBER_ADDRESS = \"HP_UPDATE_MEMBER_ADDRESS\";\r\nexport const HP_UPDATE_MEMBER_ADDRESS_START = \"HP_UPDATE_MEMBER_ADDRESS_START\";\r\nexport const HP_UPDATE_MEMBER_ADDRESS_SUCCESS = \"HP_UPDATE_MEMBER_ADDRESS_SUCCESS\";\r\nexport const HP_UPDATE_MEMBER_ADDRESS_FAILURE = \"HP_UPDATE_MEMBER_ADDRESSE_FAILURE\";\r\n\r\nexport const HP_GET_CORR_EMAIL_ADDRESS = \"HP_GET_CORR_EMAIL_ADDRESS\";\r\nexport const HP_GET_CORR_EMAIL_ADDRESS_START = \"HP_GET_CORR_EMAIL_ADDRESS_START\";\r\nexport const HP_GET_CORR_EMAIL_ADDRESS_SUCCESS = \"HP_GET_CORR_EMAIL_ADDRESS_SUCCESS\";\r\nexport const HP_GET_CORR_EMAIL_ADDRESS_FAILURE = \"HP_GET_CORR_EMAIL_ADDRESS_FAILURE\";\r\n\r\n\r\nexport const HP_GET_PROFILE = \"HP_GET_PROFILE\";\r\nexport const HP_GET_PROFILE_START = \"HP_GET_PROFILE_START\";\r\nexport const HP_GET_PROFILE_SUCCESS = \"HP_GET_PROFILE_SUCCESS\";\r\nexport const HP_GET_PROFILE_FAILURE = \"HP_GET_PROFILE_FAILURE\";\r\n\r\nexport const HP_GET_EOB_DOCUMENT = \"HP_GET_EOB_DOCUMENT\";\r\nexport const HP_GET_EOB_DOCUMENT_START = \"HP_GET_EOB_DOCUMENT_START\";\r\nexport const HP_GET_EOB_DOCUMENT_SUCCESS = \"HP_GET_EOB_DOCUMENT_SUCCESS\";\r\nexport const HP_GET_EOB_DOCUMENT_FAILURE = \"HP_GET_EOB_DOCUMENT_FAILURE\";\r\n\r\nexport const HP_GET_SERVICE_CATEGORIES = \"HP_GET_SERVICE_CATEGORIES\";\r\nexport const HP_GET_SERVICE_CATEGORIES_START = \"HP_GET_SERVICE_CATEGORIES_START\";\r\nexport const HP_GET_SERVICE_CATEGORIES_SUCCESS = \"HP_GET_SERVICE_CATEGORIES_SUCCESS\";\r\nexport const HP_GET_SERVICE_CATEGORIES_FAILURE = \"HP_GET_SERVICE_CATEGORIES_FAILURE\";\r\n\r\nexport const HP_GET_IS_MEMBER_DPC = \"HP_GET_IS_MEMBER_DPC\";\r\nexport const HP_GET_IS_MEMBER_DPC_START = \"HP_GET_IS_MEMBER_DPC_START\";\r\nexport const HP_GET_IS_MEMBER_DPC_SUCCESS = \"HP_GET_IS_MEMBER_DPC_SUCCESS\";\r\nexport const HP_GET_IS_MEMBER_DPC_FAILURE = \"HP_GET_IS_MEMBER_DPC_FAILURE\";\r\n\r\nexport const HP_GET_SUPPORT_MESSAGES = \"HP_GET_SUPPORT_MESSAGES\";\r\nexport const HP_GET_SUPPORT_MESSAGES_START = \"HP_GET_SUPPORT_MESSAGES_START\";\r\nexport const HP_GET_SUPPORT_MESSAGES_SUCCESS = \"HP_GET_SUPPORT_MESSAGES_SUCCESS\";\r\nexport const HP_GET_SUPPORT_MESSAGES_FAILURE = \"HP_GET_SUPPORT_MESSAGES_FAILURE\";\r\n\r\nexport const HP_GET_ISSUE_ATTACHMENT_OPTIONS = \"HP_GET_ISSUE_ATTACHMENT_OPTIONS\";\r\nexport const HP_GET_ISSUE_ATTACHMENT_OPTIONS_START = \"HP_GET_ISSUE_ATTACHMENT_OPTIONS_START\";\r\nexport const HP_GET_ISSUE_ATTACHMENT_OPTIONS_SUCCESS = \"HP_GET_ISSUE_ATTACHMENT_OPTIONS_SUCCESS\";\r\nexport const HP_GET_ISSUE_ATTACHMENT_OPTIONS_FAILURE = \"HP_GET_ISSUE_ATTACHMENT_OPTIONS_FAILURE\";\r\n\r\nexport const HP_SUBMIT_SERVICE_REQUEST = \"HP_SUBMIT_SERVICE_REQUEST\";\r\nexport const HP_SUBMIT_SERVICE_REQUEST_START = \"HP_SUBMIT_SERVICE_REQUEST_START\";\r\nexport const HP_SUBMIT_SERVICE_REQUEST_SUCCESS = \"HP_SUBMIT_SERVICE_REQUEST_SUCCESS\";\r\nexport const HP_SUBMIT_SERVICE_REQUEST_FAILURE = \"HP_SUBMIT_SERVICE_REQUEST_FAILURE\";\r\n\r\nexport const HP_REQUEST_NEW_IDCARD = \"HP_REQUEST_NEW_IDCARD\";\r\nexport const HP_REQUEST_NEW_IDCARD_START = \"HP_REQUEST_NEW_IDCARD_START\";\r\nexport const HP_REQUEST_NEW_IDCARD_SUCCESS = \"HP_REQUEST_NEW_IDCARD_SUCCESS\";\r\nexport const HP_REQUEST_NEW_IDCARD_FAILURE = \"HP_REQUEST_NEW_IDCARD_FAILURE\";\r\n\r\nexport const HP_SEND_CRM_MESSAGE = \"HP_SEND_CRM_MESSAGE\";\r\nexport const HP_SEND_CRM_MESSAGE_START = \"HP_SEND_CRM_MESSAGE_START\";\r\nexport const HP_SEND_CRM_MESSAGE_SUCCESS = \"HP_SEND_CRM_MESSAGE_SUCCESS\";\r\nexport const HP_SEND_CRM_MESSAGE_FAILURE = \"HP_SEND_CRM_MESSAGE_FAILURE\";\r\n\r\nexport const HP_CREATE_CRM_TICKET = \"HP_CREATE_CRM_TICKET\";\r\nexport const HP_CREATE_CRM_TICKET_START = \"HP_CREATE_CRM_TICKET_START\";\r\nexport const HP_CREATE_CRM_TICKET_SUCCESS = \"HP_CREATE_CRM_TICKET_SUCCESS\";\r\nexport const HP_CREATE_CRM_TICKET_FAILURE = \"HP_CREATE_CRM_TICKET_FAILURE\";\r\n\r\nexport const HP_GET_DENTAL_INVOICE_DETAIL = \"HP_GET_DENTAL_INVOICE_DETAIL\";\r\nexport const HP_GET_DENTAL_INVOICE_DETAIL_START = \"HP_GET_DENTAL_INVOICE_DETAIL_START\";\r\nexport const HP_GET_DENTAL_INVOICE_DETAIL_SUCCESS = \"HP_GET_DENTAL_INVOICE_DETAIL_SUCCESS\";\r\nexport const HP_GET_DENTAL_INVOICE_DETAIL_FAILURE = \"HP_GET_DENTAL_INVOICE_DETAIL_FAILURE\";\r\n\r\nexport const HP_GET_GROUPED_PROCEDURES_START = \"HP_GET_GROUPED_PROCEDURES_START\";\r\nexport const HP_GET_GROUPED_PROCEDURES_SUCCESS = \"HP_GET_GROUPED_PROCEDURES_SUCCESS\";\r\nexport const HP_GET_GROUPED_PROCEDURES_FAILURE = \"HP_GET_GROUPED_PROCEDURES_FAILURE\";\r\n\r\nexport const HP_GET_GROUPED_PROCEDURES_BY_CPT_START = \"HP_GET_GROUPED_PROCEDURES_BY_CPT_START\";\r\nexport const HP_GET_GROUPED_PROCEDURES_BY_CPT_SUCCESS = \"HP_GET_GROUPED_PROCEDURES_BY_CPT_SUCCESS\";\r\nexport const HP_GET_GROUPED_PROCEDURES_BY_CPT_FAILURE = \"HP_GET_GROUPED_PROCEDURES_BY_CPT_FAILURE\";\r\n\r\nexport const HP_GET_PROCEDURE_COST_START = \"HP_GET_PROCEDURE_COST_START\";\r\nexport const HP_GET_PROCEDURE_COST_SUCCESS = \"HP_GET_PROCEDURE_COST_SUCCESS\";\r\nexport const HP_GET_PROCEDURE_COST_FAILURE = \"HP_GET_PROCEDURE_COST_FAILURE\";\r\nexport const HP_GET_PROCEDURE_COST_CLEAR = \"HP_GET_PROCEDURE_COST_CLEAR\";\r\n\r\nexport const HP_GET_TAX_DOCUMENT_LIST_START = \"HP_GET_TAX_DOCUMENT_LIST_START\";\r\nexport const HP_GET_TAX_DOCUMENT_LIST_SUCCESS = \"HP_GET_TAX_DOCUMENT_LIST_SUCCESS\";\r\nexport const HP_GET_TAX_DOCUMENT_LIST_FAILURE = \"HP_GET_TAX_DOCUMENT_LIST_FAILURE\";\r\n\r\nexport const HP_GET_TAX_DOCUMENT_URL_START = \"HP_GET_TAX_DOCUMENT_URL_START\";\r\nexport const HP_GET_TAX_DOCUMENT_URL_SUCCESS = \"HP_GET_TAX_DOCUMENT_URL_SUCCESS\";\r\nexport const HP_GET_TAX_DOCUMENT_URL_FAILURE = \"HP_GET_TAX_DOCUMENT_URL_FAILURE\";\r\n\r\nexport const GET_APP_UPDATE = \"GET_APP_UPDATE\";\r\nexport const GOT_APP_UPDATE = \"GOT_APP_UPDATE\";\r\nexport const HIDE_NORMAL_APP_UPDATE = \"HIDE_NORMAL_APP_UPDATE\";\r\nexport const IS_HEADER_SHRINKED = \"IS_HEADER_SHRINKED\";\r\n\r\nexport const GRAPHIC_BANNER_UPDATE = \"GRAPHIC_BANNER_UPDATE\";\r\n\r\nexport const SET_HIDE_AUTO_HP_LINKMODAL = \"SET_HIDE_AUTO_HP_LINKMODAL\";\r\n\r\nexport const LOAD_HEALTHPLAN_DATA_START = \"LOAD_HEALTHPLAN_DATA_START\";\r\nexport const LOAD_HEALTHPLAN_DATA_SUCCESS = \"LOAD_HEALTHPLAN_DATA_SUCCESS\";\r\nexport const LOAD_HEALTHPLAN_DATA_FAILURE = \"LOAD_HEALTHPLAN_DATA_FAILURE\";\r\n\r\nexport const LINK_HEALTHPLAN_ACCOUNT = \"LINK_HEALTHPLAN_ACCOUNT\";\r\nexport const LINK_HEALTHPLAN_ACCOUNT_SUCCESS = \"LINK_HEALTHPLAN_ACCOUNT_SUCCESS\";\r\nexport const LINK_HEALTHPLAN_ACCOUNT_FAILURE = \"LINK_HEALTHPLAN_ACCOUNT_FAILURE\";\r\nexport const LINK_HEALTHPLAN_CLEAR_MESSAGE = \"LINK_HEALTHPLAN_CLEAR_MESSAGE\";\r\nexport const UNLINK_HEALTHPLAN_ACCOUNT = \"UNLINK_HEALTHPLAN_ACCOUNT\";\r\nexport const UNLINK_HEALTHPLAN_ACCOUNT_SUCCESS = \"UNLINK_HEALTHPLAN_ACCOUNT_SUCCESS\";\r\nexport const UNLINK_HEALTHPLAN_ACCOUNT_FAILURE = \"UNLINK_HEALTHPLAN_ACCOUNT_FAILURE\";\r\nexport const UNLINK_HEALTHPLAN_CLEAR_MESSAGE = \"UNLINK_HEALTHPLAN_CLEAR_MESSAGE\";\r\n\r\nexport const LINK_AUTO_HP_ACCOUNT_START = \"LINK_AUTO_HP_ACCOUNT_START\";\r\nexport const LINK_AUTO_HP_ACCOUNT_SUCCESS = \"LINK_AUTO_HP_ACCOUNT_SUCCESS\";\r\nexport const LINK_AUTO_HP_ACCOUNT_FAILURE = \"LINK_AUTO_HP_ACCOUNT_FAILURE\";\r\nexport const LINK_AUTO_HP_ACCOUNT_CLEAR_MESSAGE = \"LINK_AUTO_HP_ACCOUNT_CLEAR_MESSAGE\";\r\n\r\nexport const LINK_AA_ACCOUNT_START = \"LINK_AA_ACCOUNT_START\";\r\nexport const LINK_AA_ACCOUNT_SUCCESS = \"LINK_AA_ACCOUNT_SUCCESS\";\r\nexport const LINK_AA_ACCOUNT_FAILURE = \"LINK_AA_ACCOUNT_FAILURE\";\r\nexport const LINK_AA_ACCOUNT_CLEAR_MESSAGE = \"LINK_AA_ACCOUNT_CLEAR_MESSAGE\";\r\nexport const LINK_AA_ACCOUNT_ERROR_COUNT = \"LINK_AA_ACCOUNT_ERROR_COUNT\";\r\nexport const LINK_AA_ACCOUNT_UPDATE_TOKEN_SUCCESS = \"LINK_AA_ACCOUNT_UPDATE_TOKEN_SUCCESS\";\r\n\r\nexport const UNLINK_AA_ACCOUNT_START = \"UNLINK_AA_ACCOUNT_START\";\r\nexport const UNLINK_AA_ACCOUNT_SUCCESS = \"UNLINK_AA_ACCOUNT_SUCCESS\";\r\nexport const UNLINK_AA_ACCOUNT_FAILURE = \"UNLINK_AA_ACCOUNT_FAILURE\";\r\nexport const UNLINK_AA_ACCOUNT_CLEAR_MESSAGE = \"UNLINK_AA_ACCOUNT_CLEAR_MESSAGE\";\r\nexport const UNLINK_AA_ACCOUNT_UPDATE_TOKEN_SUCCESS = \"UNLINK_AA_ACCOUNT_UPDATE_TOKEN_SUCCESS\";\r\n\r\nexport const LINK_FIRST_CARE_ACCOUNT = \"LINK_FIRST_CARE_ACCOUNT\";\r\nexport const LINK_FIRST_CARE_ACCOUNT_SUCCESS = \"LINK_FIRST_CARE_ACCOUNT_SUCCESS\";\r\nexport const LINK_FIRST_CARE_ACCOUNT_FAILURE = \"LINK_FIRST_CARE_ACCOUNT_FAILURE\";\r\nexport const LINK_FIRST_CARE_ACCOUNT_CLEAR = \"LINK_FIRST_CARE_ACCOUNT_CLEAR\";\r\n\r\nexport const UNLINK_FIRST_CARE_ACCOUNT = \"UNLINK_FIRST_CARE_ACCOUNT\";\r\nexport const UNLINK_FIRST_CARE_ACCOUNT_SUCCESS = \"UNLINK_FIRST_CARE_ACCOUNT_SUCCESS\";\r\nexport const UNLINK_FIRST_CARE_ACCOUNT_FAILURE = \"UNLINK_FIRST_CARE_ACCOUNT_FAILURE\";\r\nexport const UNLINK_FIRST_CARE_ACCOUNT_CLEAR = \"UNLINK_FIRST_CARE_ACCOUNT_CLEAR\";\r\n\r\nexport const LINK_DART_ACCOUNT = \"LINK_DART_ACCOUNT\";\r\nexport const LINK_DART_ACCOUNT_SUCCESS = \"LINK_DART_ACCOUNT_SUCCESS\";\r\nexport const LINK_DART_ACCOUNT_FAILURE = \"LINK_DART_ACCOUNT_FAILURE\";\r\nexport const LINK_DART_ACCOUNT_CLEAR = \"LINK_DART_ACCOUNT_CLEAR\";\r\n\r\nexport const UNLINK_DART_ACCOUNT = \"UNLINK_DART_ACCOUNT\";\r\nexport const UNLINK_DART_ACCOUNT_SUCCESS = \"UNLINK_DART_ACCOUNT_SUCCESS\";\r\nexport const UNLINK_DART_ACCOUNT_FAILURE = \"UNLINK_DART_ACCOUNT_FAILURE\";\r\nexport const UNLINK_DART_ACCOUNT_CLEAR = \"UNLINK_DART_ACCOUNT_CLEAR\";\r\n\r\nexport const LINK_WACO_ACCOUNT = \"LINK_WACO_ACCOUNT\";\r\nexport const LINK_WACO_ACCOUNT_SUCCESS = \"LINK_WACO_ACCOUNT_SUCCESS\";\r\nexport const LINK_WACO_ACCOUNT_FAILURE = \"LINK_WACO_ACCOUNT_FAILURE\";\r\nexport const LINK_WACO_ACCOUNT_CLEAR = \"LINK_WACO_ACCOUNT_CLEAR\";\r\n\r\nexport const UNLINK_WACO_ACCOUNT = \"UNLINK_WACO_ACCOUNT\";\r\nexport const UNLINK_WACO_ACCOUNT_SUCCESS = \"UNLINK_WACO_ACCOUNT_SUCCESS\";\r\nexport const UNLINK_WACO_ACCOUNT_FAILURE = \"UNLINK_WACO_ACCOUNT_FAILURE\";\r\nexport const UNLINK_WACO_ACCOUNT_CLEAR = \"UNLINK_WACO_ACCOUNT_CLEAR\";\r\n\r\nexport const COOKIE_BSWPROXY_START = \"COOKIE_BSWPROXY_START\";\r\nexport const COOKIE_BSWPROXY_SUCCESS = \"COOKIE_BSWPROXY_SUCCESS\";\r\n\r\nexport const ZIPNOSIS_EVISIT_URL = \"ZIPNOSIS_EVISIT_URL\";\r\nexport const ZIPNOSIS_EVISIT_URL_SUCCESS = \"ZIPNOSIS_EVISIT_URL_SUCCESS\";\r\nexport const ZIPNOSIS_EVISIT_URL_FAILURE = \"ZIPNOSIS_EVISIT_URL_FAILURE\";\r\nexport const ZIPNOSIS_EVISIT_CLEAR = \"ZIPNOSIS_EVISIT_CLEAR\";\r\n\r\nexport const UPDATE_MENU = \"UPDATE_MENU\";\r\nexport const HIDE_BANNER_ON_CRASH = \"HIDE_BANNER_ON_CRASH\";\r\n\r\nexport const GET_EPIC_LETTERS = \"GET_EPIC_LETTERS\";\r\nexport const GET_EPIC_LETTERS_SUCCESS = \"GET_EPIC_LETTERS_SUCCESS\";\r\nexport const GET_EPIC_LETTERS_FAILURE = \"GET_EPIC_LETTERS_FAILURE\";\r\n\r\nexport const PROXY_RELATIONSHIP_TYPES = \"PROXY_RELATIONSHIP_TYPES\";\r\nexport const PROXY_RELATIONSHIP_TYPES_PENDING = \"PROXY_RELATIONSHIP_TYPES_PENDING\";\r\nexport const PROXY_RELATIONSHIP_TYPES_SUCCESS = \"PROXY_RELATIONSHIP_TYPES_SUCCESS\";\r\nexport const PROXY_RELATIONSHIP_TYPES_FAILURE = \"PROXY_RELATIONSHIP_TYPES_FAILURE\";\r\n\r\nexport const PROXY_RELATIONSHIP_SET = \"PROXY_RELATIONSHIP_SET\";\r\nexport const PROXY_RELATIONSHIP_SET_PENDING = \"PROXY_RELATIONSHIP_SET_PENDING\";\r\nexport const PROXY_RELATIONSHIP_SET_SUCCESS = \"PROXY_RELATIONSHIP_SET_SUCCESS\";\r\nexport const PROXY_RELATIONSHIP_SET_FAILURE = \"PROXY_RELATIONSHIP_SET_FAILURE\";\r\n\r\nexport const PROXY_RELATIONSHIP_ACCEPT = \"PROXY_RELATIONSHIP_ACCEPT\";\r\nexport const PROXY_RELATIONSHIP_ACCEPT_PENDING = \"PROXY_RELATIONSHIP_ACCEPT_PENDING\";\r\nexport const PROXY_RELATIONSHIP_ACCEPT_SUCCESS = \"PROXY_RELATIONSHIP_ACCEPT_SUCCESS\";\r\nexport const PROXY_RELATIONSHIP_ACCEPT_FAILURE = \"PROXY_RELATIONSHIP_ACCEPT_FAILURE\";\r\n\r\nexport const PROXY_RELATIONSHIP_GRANT = \"PROXY_RELATIONSHIP_GRANT\";\r\nexport const PROXY_RELATIONSHIP_GRANT_PENDING = \"PROXY_RELATIONSHIP_GRANT_PENDING\";\r\nexport const PROXY_RELATIONSHIP_GRANT_SUCCESS = \"PROXY_RELATIONSHIP_GRANT_SUCCESS\";\r\nexport const PROXY_RELATIONSHIP_GRANT_FAILURE = \"PROXY_RELATIONSHIP_GRANT_FAILURE\";\r\n\r\nexport const PROXY_RELATIONSHIP_DELETE = \"PROXY_RELATIONSHIP_DELETE\";\r\nexport const PROXY_RELATIONSHIP_DELETE_PENDING = \"PROXY_RELATIONSHIP_DELETE_PENDING\";\r\nexport const PROXY_RELATIONSHIP_DELETE_SUCCESS = \"PROXY_RELATIONSHIP_DELETE_SUCCESS\";\r\nexport const PROXY_RELATIONSHIP_DELETE_FAILURE = \"PROXY_RELATIONSHIP_DELETE_FAILURE\";\r\n\r\nexport const REFRESH_PROXY_LIST = \"REFRESH_PROXY_LIST\";\r\n\r\nexport const UPDATE_INSURANCE_PREFERENCE = \"UPDATE_INSURANCE_PREFERENCE\";\r\nexport const SHOW_INSURANCE_FORM = \"SHOW_INSURANCE_FORM\";\r\n\r\n//BEGIN Onboarding Flow V2 Perferences\r\n//action that determines if the FamilyMembers screen should be shown during Onboarding flow\r\nexport const SHOW_FAMILYMEMBERS_SCREEN = \"SHOW_FAMILYMEMBERS_SCREEN\";\r\nexport const UPDATE_FAMILYMEMBERS_SCREEN_PREFERENCE = \"UPDATE_FAMILYMEMBERS_PREFERENCE\";\r\nexport const SHOW_NOTIFICATIONS_SCREEN = \"SHOW_NOTIFICATIONS_SCREEN\";\r\nexport const UPDATE_NOTIFICATIONS_SCREEN_PREFERENCE = \"UPDATE_NOTIFICATIONS_SCREEN_PREFERENCE\";\r\nexport const SHOW_SCHEDULE_CARE_TOOLTIP = \"SHOW_SCHEDULE_CARE_TOOLTIP\";\r\nexport const UPDATE_SCHEDULE_CARE_TOOLTIP_PREFERENCE = \"UPDATE_SCHEDULE_CARE_TOOLTIP_PREFERENCE\";\r\nexport const HAS_COMPLETED_ONBOARDING = \"HAS_COMPLETED_ONBOARDING\";\r\nexport const SET_USE_ONBOARDING_LAYOUT = 'SET_USE_ONBOARDING_LAYOUT'\r\nexport const INITIALIZE_ONBOARDING_PREFERENCES = 'INITIALIZE_ONBOARDING_PREFERENCES'\r\n//END Onboarding V2 Preferences\r\n\r\nexport const UPDATE_CARE_COACH_MODAL_PREFERENCE = \"UPDATE_CARE_COACH_MODAL_PREFERENCE\";\r\n\r\nexport const SHOW_AUTOLINK_MYCHART = \"SHOW_AUTOLINK_MYCHART\";\r\nexport const UPDATE_AUTOLINK_MYCHART_PREFERENCE = \"UPDATE_AUTOLINK_MYCHART_PREFERENCE\";\r\n\r\nexport const AUTOLINK_MYCHART = \"AUTOLINK_MYCHART\";\r\nexport const AUTOLINK_MYCHART_SUCCESS = \"AUTOLINK_MYCHART_SUCCESS\";\r\nexport const AUTOLINK_MYCHART_FAILURE = \"AUTOLINK_MYCHART_FAILURE\";\r\nexport const AUTOLINK_MYCHART_ERROR_COUNT = \"AUTOLINK_MYCHART_ERROR_COUNT\";\r\nexport const AUTOLINK_MYCHART_UPDATE_TOKEN_SUCCESS = \"AUTOLINK_MYCHART_UPDATE_TOKEN_SUCCESS\";\r\nexport const AUTOLINK_MYCHART_CLEAR_MESSAGE = \"AUTOLINK_MYCHART_CLEAR_MESSAGE\";\r\n\r\nexport const INITIATE_PROXY_RX_REQUEST = \"INITIATE_PROXY_RX_REQUEST\";\r\nexport const INITIATE_PROXY_RX_REQUEST_FAILURE = \"INITIATE_PROXY_RX_REQUEST_FAILURE\";\r\nexport const INITIATE_PROXY_EPIC_REQUEST = \"INITIATE_PROXY_EPIC_REQUEST\";\r\nexport const REQUEST_PROXY_INFO = \"REQUEST_PROXY_INFO\";\r\nexport const REQUEST_PROXY_ACCESS_LIST = \"REQUEST_PROXY_ACCESS_LIST\";\r\nexport const REQUEST_PROXY_FAMILY_MEMBERS_LIST = \"REQUEST_PROXY_FAMILY_MEMBERS_LIST\";\r\nexport const REQUEST_PROXY_CHANGE_STATUS = \"REQUEST_PROXY_CHANGE_STATUS\";\r\nexport const VERIFY_REQUESTOR_DOB = \"VERIFY_REQUESTOR_DOB\";\r\nexport const VERIFY_REQUESTOR_DOB_FAILURE = \"VERIFY_REQUESTOR_DOB_FAILURE\";\r\nexport const REQUEST_PROXY_RESEND = \"REQUEST_PROXY_RESEND\";\r\nexport const REQUEST_PROXY_CANCEL = \"REQUEST_PROXY_CANCEL\";\r\nexport const SET_PROXY_MESSAGE = \"SET_PROXY_MESSAGE\";\r\nexport const CLEAR_PROXY_MESSAGE = \"CLEAR_PROXY_MESSAGE\";\r\nexport const INITIATE_PROXY_EPIC_REQUEST_FAILURE = \"INITIATE_PROXY_EPIC_REQUEST_FAILURE\";\r\nexport const PROXY_TERMS_AND_CONDITIONS = \"PROXY_TERMS_AND_CONDITIONS\";\r\nexport const PROXY_TERMS_AND_CONDITIONS_SUCCESS = \"PROXY_TERMS_AND_CONDITIONS_SUCCESS\";\r\nexport const PROXY_TERMS_AND_CONDITIONS_FAILURE = \"PROXY_TERMS_AND_CONDITIONS_FAILURE\";\r\nexport const ACCEPT_PROXY_TERMS_AND_CONDITIONS = \"ACCEPT_PROXY_TERMS_AND_CONDITIONS\";\r\nexport const ACCEPT_PROXY_TERMS_AND_CONDITIONS_SUCCESS = \"ACCEPT_PROXY_TERMS_AND_CONDITIONS_SUCCESS\";\r\nexport const ACCEPT_PROXY_TERMS_AND_CONDITIONS_FAILURE = \"ACCEPT_PROXY_TERMS_AND_CONDITIONS_FAILURE\";\r\nexport const CLEAR_REQUEST_PROXY_CHANGE_STATUS_ERROR = \"CLEAR_REQUEST_PROXY_CHANGE_STATUS_ERROR\";\r\n\r\nexport const SET_EMAIL_APPROVED_PROXY_REQUEST = \"SET_EMAIL_APPROVED_PROXY_REQUEST\";\r\nexport const CLEAR_EMAIL_PROXY_MESSAGE = \"CLEAR_EMAIL_PROXY_MESSAGE \";\r\n\r\nexport const CARE_COACH_NOTIFICATION_PREFERENCE_SAVE = \"CARE_COACH_NOTIFICATION_PREFERENCE_SAVE\";\r\nexport const GET_USER_NOTIFICATION_PREFERENCE = \"GET_USER_NOTIFICATION_PREFERENCE\";\r\nexport const GENERAL_NOTIFICATION_PREFERENCE_SAVE = \"GENERAL_NOTIFICATION_PREFERENCE_SAVE\";\r\n\r\nexport const UPDATE_ADD_DEPENDENT_PROXY_PREFERENCE = \"UPDATE_ADD_DEPENDENT_PROXY_PREFERENCE\";\r\nexport const SHOW_ADD_DEPENDENT_PROXY_FORM = \"SHOW_ADD_DEPENDENT_PROXY_FORM\";\r\n\r\nexport const LOAD_BFF_DASHBOARD_START = \"LOAD_BFF_DASHBOARD_START\";\r\nexport const LOAD_BFF_DASHBOARD_SUCCESS = \"LOAD_BFF_DASHBOARD_SUCCESS\";\r\nexport const LOAD_BFF_DASHBOARD_PENDING = \"LOAD_BFF_DASHBOARD_PENDING\";\r\nexport const LOAD_BFF_DASHBOARD_FAILURE = \"LOAD_BFF_DASHBOARD_FAILURE\";\r\n\r\nexport const LOAD_CURRENT_MANAGERS_PENDING = \"LOAD_CURRENT_MANAGERS_PENDING\";\r\nexport const LOAD_CURRENT_MANAGERS_SUCCESS = \"LOAD_CURRENT_MANAGERS_SUCCESS\";\r\nexport const LOAD_CURRENT_MANAGERS_FAILURE = \"LOAD_CURRENT_MANAGERS_FAILURE\";\r\n\r\nexport const GET_VIDEO_VISIT_CONDITIONS = \"GET_VIDEO_VISIT_CONDITIONS\";\r\nexport const GET_VIDEO_VISIT_CONDITIONS_PENDING = \"GET_VIDEO_VISIT_CONDITIONS_PENDING\";\r\nexport const GET_VIDEO_VISIT_CONDITIONS_SUCCESS = \"GET_VIDEO_VISIT_CONDITIONS_SUCCESS\";\r\nexport const GET_VIDEO_VISIT_CONDITIONS_FAILURE = \"GET_VIDEO_VISIT_CONDITIONS_FAILURE\";\r\n\r\nexport const GET_VIDEO_VISIT_TIME_SLOTS = \"GET_VIDEO_VISIT_TIME_SLOTS\";\r\nexport const GET_VIDEO_VISIT_TIME_SLOTS_PENDING = \"GET_VIDEO_VISIT_TIME_SLOTS_PENDING\";\r\nexport const GET_VIDEO_VISIT_TIME_SLOTS_SUCCESS = \"GET_VIDEO_VISIT_TIME_SLOTS_SUCCESS\";\r\nexport const GET_VIDEO_VISIT_TIME_SLOTS_FAILURE = \"GET_VIDEO_VISIT_TIME_SLOTS_FAILURE\";\r\n\r\nexport const SCHEDULE_VIDEO_VISIT_REQUEST = \"SCHEDULE_VIDEO_VISIT_REQUEST\";\r\nexport const SCHEDULE_VIDEO_VISIT_REQUEST_PENDING = \"SCHEDULE_VIDEO_VISIT_REQUEST_PENDING\";\r\nexport const SCHEDULE_VIDEO_VISIT_REQUEST_SUCCESS = \"SCHEDULE_VIDEO_VISIT_REQUEST_SUCCESS\";\r\nexport const SCHEDULE_VIDEO_VISIT_REQUEST_FAILURE = \"SCHEDULE_VIDEO_VISIT_REQUEST_FAILURE\";\r\n\r\nexport const GET_VIDEO_VISIT_TERMS = \"GET_VIDEO_VISIT_TERMS\";\r\nexport const GET_VIDEO_VISIT_TERMS_PENDING = \"GET_VIDEO_VISIT_TERMS_PENDING\";\r\nexport const GET_VIDEO_VISIT_TERMS_SUCCESS = \"GET_VIDEO_VISIT_TERMS_SUCCESS\";\r\nexport const GET_VIDEO_VISIT_TERMS_FAILURE = \"GET_VIDEO_VISIT_TERMS_FAILURE\";\r\n\r\nexport const GET_VIDEO_VISIT_LINK = \"GET_VIDEO_VISIT_LINK\";\r\nexport const GET_VIDEO_VISIT_LINK_SUCCESS = \"GET_VIDEO_VISIT_LINK_SUCCESS\";\r\nexport const GET_VIDEO_VISIT_LINK_FAILURE = \"GET_VIDEO_VISIT_LINK_FAILURE\";\r\nexport const GET_VIDEO_VISIT_LINK_RESET = \"GET_VIDEO_VISIT_LINK_RESET\";\r\n\r\nexport const ACCEPT_VIDEO_VISIT_CONDITIONS = \"ACCEPT_VIDEO_VISIT_CONDITIONS\";\r\nexport const ACCEPT_VIDEO_VISIT_CONDITIONS_PENDING = \"ACCEPT_VIDEO_VISIT_CONDITIONS_PENDING\";\r\nexport const ACCEPT_VIDEO_VISIT_CONDITIONS_SUCCESS = \"ACCEPT_VIDEO_VISIT_CONDITIONS_SUCCESS\";\r\nexport const ACCEPT_VIDEO_VISIT_CONDITIONS_FAILURE = \"ACCEPT_VIDEO_VISIT_CONDITIONS_FAILURE\";\r\n\r\nexport const SHOW_VIDEO_VISIT_TOOLTIP = \"SHOW_VIDEO_VISIT_TOOLTIP\";\r\nexport const UPDATE_VIDEO_VISIT_TOOLTIP_PREFERENCE = \"UPDATE_VIDEO_VISIT_TOOLTIP_PREFERENCE\";\r\nexport const GET_SPECIFIC_XEALTH_MESSAGE = \"GET_SPECIFIC_XEALTH_MESSAGE\";\r\nexport const GET_SPECIFIC_XEALTH_MESSAGE_PENDING = \"GET_SPECIFIC_XEALTH_MESSAGE_PENDING\";\r\nexport const GET_SPECIFIC_XEALTH_MESSAGE_FAILURE = \"GET_SPECIFIC_XEALTH_MESSAGE_FAILURE\";\r\nexport const GET_SPECIFIC_XEALTH_MESSAGE_SUCCESS = \"GET_SPECIFIC_XEALTH_MESSAGE_SUCCESS\";\r\n\r\n\r\nexport const AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST = \"AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST\";\r\nexport const AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_PENDING = \"AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_PENDING\";\r\nexport const AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_SUCCESS = \"AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_SUCCESS\";\r\nexport const AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_FAILURE = \"AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_FAILURE\";\r\n\r\nexport const GET_ECHECKIN_STATUS = \"GET_ECHECKIN_STATUS\";\r\nexport const GET_ECHECKIN_STATUS_PENDING = \"GET_ECHECKIN_STATUS_PENDING\";\r\nexport const GET_ECHECKIN_STATUS_SUCCESS = \"GET_ECHECKIN_STATUS_SUCCESS\";\r\nexport const GET_ECHECKIN_STATUS_FAILURE = \"GET_ECHECKIN_STATUS_FAILURE\";\r\n\r\nexport const GET_ROOM_STATUSES_SUCCESS = \"GET_ROOM_STATUSES_SUCCESS\";\r\nexport const GET_ROOM_STATUSES_FAILURE = \"GET_ROOM_STATUSES_FAILURE\";\r\n\r\nexport const GET_CONSUMER_JWT = \"GET_CONSUMER_JWT\";\r\nexport const GET_CONSUMER_JWT_PENDING = \"GET_CONSUMER_JWT_PENDING\";\r\nexport const GET_CONSUMER_JWT_SUCCESS = \"GET_CONSUMER_JWT_SUCCESS\";\r\nexport const GET_CONSUMER_JWT_FAILURE = \"GET_CONSUMER_JWT_FAILURE\";\r\n\r\nexport const GET_PROVIDER_JWT = \"GET_PROVIDER_JWT\";\r\nexport const GET_PROVIDER_JWT_PENDING = \"GET_PROVIDER_JWT_PENDING\";\r\nexport const GET_PROVIDER_JWT_SUCCESS = \"GET_PROVIDER_JWT_SUCCESS\";\r\nexport const GET_PROVIDER_JWT_FAILURE = \"GET_PROVIDER_JWT_FAILURE\";\r\n\r\nexport const HP_USERDATA_SUCCESS = \"HP_USERDATA_SUCCESS\";\r\nexport const HP_AMI_ISUSERPAYER_SUCCESS = \"HP_AMI_ISUSERPAYER_SUCCESS\";\r\n//export const HP_USERDATA_STORETOKEN = \"HP_USERDATA_STORETOKEN\"; not needed, using portals token, keeping just incase\r\n\r\nexport const SAVE_PROXY_REQUESTEE_INFO = \"SAVE_PROXY_REQUESTEE_INFO\";\r\nexport const UPDATE_PROXY_REQUESTEE_INFO = \"UPDATE_PROXY_REQUESTEE_INFO\";\r\nexport const UPDATE_GETCARE_TOOLTIP_PREFERENCE = \"UPDATE_GETCARE_TOOLTIP_PREFERENCE\";\r\nexport const SHOW_GET_CARE_TOOLTIP = \"SHOW_GET_CARE_TOOLTIP\";\r\n\r\nexport const SHOW_FAMILY_MANAGEMENT_TOOLTIP = \"SHOW_FAMILY_MANAGEMENT_TOOLTIP\";\r\nexport const UPDATE_FAMILY_MANAGEMENT_TOOLTIP_PREFERENCE = \"UPDATE_FAMILY_MANAGEMENT_TOOLTIP_PREFERENCE\";\r\nexport const SET_HP_PREFIX = \"SET_HP_PREFIX\";\r\n\r\nexport const SET_HEALTHPLAN_INFO = \"SET_HEALTHPLAN_INFO\";\r\nexport const SET_HEALTHPLAN_MAINTENANCE_EVENTS = \"SET_HEALTHPLAN_MAINTENANCE_EVENTS\";\r\n\r\nexport const INITIATE_PROXY_EPIC_GRANT = \"INITIATE_PROXY_EPIC_GRANT\";\r\nexport const INITIATE_PROXY_EPIC_GRANT_FAILURE = \"INITIATE_PROXY_EPIC_GRANT_FAILURE\";\r\nexport const INITIATE_PROXY_RX_GRANT = \"INITIATE_PROXY_RX_GRANT\";\r\nexport const INITIATE_PROXY_RX_GRANT_FAILURE = \"INITIATE_PROXY_RX_GRANT_FAILURE\";\r\n\r\nexport const GET_PROVIDERS_LIST_BY_VISITTYPE = \"GET_PROVIDERS_LIST_BY_VISITTYPE\";\r\nexport const GET_PROVIDERS_LIST_BY_VISITTYPE_SUCCESS = \"GET_PROVIDERS_LIST_BY_VISITTYPE_SUCCESS\";\r\nexport const GET_PROVIDERS_LIST_BY_VISITTYPE_ERROR = \"GET_PROVIDERS_LIST_BY_VISITTYPE_ERROR\";\r\n\r\nexport const GET_PROVIDERS_LIST_VISITTYPE = \"GET_PROVIDERS_LIST_VISITTYPE\";\r\nexport const GET_PROVIDERS_LIST_VISITTYPE_SUCCESS = \"GET_PROVIDERS_LIST_BY_VISITTYPE_SUCCESS\";\r\nexport const GET_PROVIDERS_LIST_VISITTYPE_ERROR = \"GET_PROVIDERS_LIST_VISITTYPE_ERROR\";\r\nexport const GET_PROVIDERS_LIST_VISITTYPE_FAILURE = \"GET_PROVIDERS_LIST_VISITTYPE_FAILURE\";\r\nexport const GET_PROVIDERS_LIST_VISITTYPE_PENDING = \"GET_PROVIDERS_LIST_VISITTYPE_PENDING\";\r\n\r\n\r\nexport const GET_PROVIDER_WITH_EARLIESTSCHEDULE = \"GET_PROVIDER_WITH_EARLIESTSCHEDULE\";\r\nexport const GET_PROVIDER_WITH_EARLIESTSCHEDULE_SUCCESS = \"GET_PROVIDER_WITH_EARLIESTSCHEDULE_SUCCESS\";\r\nexport const GET_PROVIDER_WITH_EARLIESTSCHEDULE_ERROR = \"GET_PROVIDER_WITH_EARLIESTSCHEDULE_ERROR\";\r\n\r\n//export const SHOW_DCJ_SELF_ENROLL_TOOLTIP = \"SHOW_DCJ_SELF_ENROLL_TOOLTIP\";\r\n//export const UPDATE_DCJ_SELF_ENROLL_TOOLTIP_PREFERENCE = \"UPDATE_DCJ_SELF_ENROLL_TOOLTIP_PREFERENCE\";\r\n//export const CARECOACH_JOURNEY_PREFERENCE = \"CARECOACH_JOURNEY_PREFERENCE\";\r\n//export const UPDATE_CARECOACH_JOURNEY_PREFERENCE = \"UPDATE_CARECOACH_JOURNEY_PREFERENCE\";\r\n//export const DCJ_SELF_ORDER = \"DCJ_SELF_ORDER\";\r\n//export const DCJ_SELF_ORDER_PENDING = \"DCJ_SELF_ORDER_PENDING\";\r\n//export const DCJ_SELF_ORDER_SUCCESS = \"DCJ_SELF_ORDER_SUCCESS\";\r\n//export const DCJ_SELF_ORDER_FAILURE = \"DCJ_SELF_ORDER_FAILURE\";\r\n\r\n//export const DCJ_SELF_ORDER_OPTOUT = \"DCJ_SELF_ORDER_OPTOUT\";\r\n//export const DCJ_SELF_ORDER_OPTOUT_PENDING = \"DCJ_SELF_ORDER_OPTOUT_PENDING\";\r\n//export const DCJ_SELF_ORDER_OPTOUT_SUCCESS = \"DCJ_SELF_ORDER_OPTOUT_SUCCESS\";\r\n//export const DCJ_SELF_ORDER_OPTOUT_FAILURE = \"DCJ_SELF_ORDER_OPTOUT_FAILURE\";\r\n//export const UPDATE_DCJ_SELF_ORDER_OPTOUT_CONFIRM = \"UPDATE_DCJ_SELF_ORDER_OPTOUT_CONFIRM\";\r\n\r\nexport const PROXY_STATUS = \"PROXY_STATUS\";\r\nexport const PROXY_STATUS_FAILURE = \"PROXY_STATUS_FAILURE\";\r\n\r\nexport const PROXY_DETAILS = \"PROXY_DETAILS\";\r\n\r\n/*START PRICING ESTIMATES BENEFIT */\r\nexport const PRICING_USERQUOTE_APPOINTMENTS_LOADING = \"PRICING_USERQUOTE_APPOINTMENTS_LOADING\";\r\nexport const PRICING_USERQUOTE_APPOINTMENTS_ERROR = \"PRICING_USERQUOTE_APPOINTMENTS_ERROR\";\r\nexport const PRICING_USER_PROXY_SELECTED_INITIAL_STATE = \"PRICING_USER_PROXY_SELECTED_INITIAL_STATE\";\r\nexport const PRICING_USERSQUOTE_QUOTE_CLEAR = \"PRICING_USERSQUOTE_QUOTE_CLEAR\";\r\nexport const PRICING_USERSQUOTE_QUOTE_CLEAR_SUCCESS = \"PRICING_USERSQUOTE_QUOTE_CLEAR_SUCCESS\";\r\nexport const PRICING_USERSQUOTE_BENEFITDETAILS = \"PRICING_USERSQUOTE_BENEFITDETAILS\";\r\nexport const PRICING_USERSQUOTE_APPOINTMENTS = \"PRICING_USERSQUOTE_APPOINTMENTS\";\r\nexport const PRICING_USERSQUOTE_APPOINTMENTS_SUCCESS = \"PRICING_USERSQUOTE_APPOINTMENTS_SUCCESS\";\r\nexport const PRICING_USERSQUOTE_BENEFITDETAILS_SUCCESS = \"PRICING_USERSQUOTE_BENEFITDETAILS_SUCCESS\";\r\nexport const PRICING_USER_PROXY_SUCCESS = \"PRICING_USER_PROXY_SUCCESS\";\r\nexport const PRICING_USERQUOTE_PROXYLIST_SUCCESS = \"PRICING_USERQUOTE_PROXYLIST_SUCCESS\";\r\nexport const PRICING_USERSQUOTE_ESTIMATE_PDF = \"PRICING_USERSQUOTE_ESTIMATE_PDF\";\r\nexport const PRICING_USERSQUOTE_ESTIMATE_PDF_SUCCESS = \"PRICING_USERSQUOTE_ESTIMATE_PDF_SUCCESS\";\r\nexport const ESTIMATE_DETAILS_TILE_MESSAGE_DETAILS = \"ESTIMATE_DETAILS_TILE_MESSAGE_DETAILS\";\r\nexport const ESTIMATE_DETAILS_TILE_MESSAGE_DETAILS_SUCCESS = \"ESTIMATE_DETAILS_TILE_MESSAGE_DETAILS_SUCCESS\";\r\nexport const ESTIMATE_DETAILS_SCROLL_TO_BOTTOM = \"ESTIMATE_DETAILS_SCROLL_TO_BOTTOM\";\r\nexport const ESTIMATE_DETAILS_SCROLL_TO_BOTTOM_SUCCESS = \"ESTIMATE_DETAILS_SCROLL_TO_BOTTOM_SUCCESS\";\r\n/*END*/\r\n\r\n//export const DCJ_INBOX_GET_JOURNEYS = \"DCJ_INBOX_GET_JOURNEYS\";\r\n//export const DCJ_INBOX_GET_JOURNEYS_PENDING = \"DCJ_INBOX_GET_JOURNEYS_PENDING\";\r\n//export const DCJ_INBOX_GET_JOURNEYS_SUCCESS = \"DCJ_INBOX_GET_JOURNEYS_SUCCESS\";\r\n//export const DCJ_INBOX_GET_JOURNEYS_FAILURE = \"DCJ_INBOX_GET_JOURNEYS_FAILURE\";\r\n//export const DCJ_INBOX_SET_SELECTED_JOURNEY = \"DCJ_INBOX_SET_SELECTED_JOURNEY\";\r\n//export const DCJ_INBOX_GET_CONVERSATIONS = \"DCJ_INBOX_GET_CONVERSATIONS\";\r\n//export const DCJ_INBOX_GET_CONVERSATIONS_PENDING = \"DCJ_INBOX_GET_CONVERSATIONS_PENDING\";\r\n//export const DCJ_INBOX_GET_CONVERSATIONS_SUCCESS = \"DCJ_INBOX_GET_CONVERSATIONS_SUCCESS\";\r\n//export const DCJ_INBOX_GET_CONVERSATIONS_FAILURE = \"DCJ_INBOX_GET_CONVERSATIONS_FAILURE\";\r\n//export const DCJ_INBOX_GET_MESSAGES = \"DCJ_INBOX_GET_MESSAGES\";\r\n//export const DCJ_INBOX_GET_MESSAGES_PENDING = \"DCJ_INBOX_GET_MESSAGES_PENDING\";\r\n//export const DCJ_INBOX_GET_MESSAGES_SUCCESS = \"DCJ_INBOX_GET_MESSAGES_SUCCESS\";\r\n//export const DCJ_INBOX_GET_MESSAGES_FAILURE = \"DCJ_INBOX_GET_MESSAGES_FAILURE\";\r\n//export const DCJ_INBOX_RESET = \"DCJ_INBOX_RESET\";\r\n\r\n//export const DCJ_INBOX_MARK_CONVERSATION_READ = \"DCJ_INBOX_MARK_CONVERSATION_READ\";\r\n//export const DCJ_INBOX_MARK_CONVERSATION_READ_PENDING = \"DCJ_INBOX_MARK_CONVERSATION_READ_PENDING\";\r\n//export const DCJ_INBOX_MARK_CONVERSATION_READ_SUCCESS = \"DCJ_INBOX_MARK_CONVERSATION_READ_SUCCESS\";\r\n//export const DCJ_INBOX_MARK_CONVERSATION_READ_FAILURE = \"DCJ_INBOX_MARK_CONVERSATION_READ_FAILURE\";\r\n\r\nexport const MEMBERSHIP_GET_START = \"MEMBERSHIP_GET_START\";\r\nexport const MEMBERSHIP_GET_SUCCESS = \"MEMBERSHIP_GET_SUCCESS\";\r\nexport const MEMBERSHIP_GET_FAILURE = \"MEMBERSHIP_GET_FAILURE\";\r\nexport const MEMBERSHIP_TIMER_START = \"MEMBERSHIP_TIMER_START\";\r\nexport const MEMBERSHIP_RECOMPILE_START = \"MEMBERSHIP_RECOMPILE_START\";\r\nexport const MEMBERSHIP_RECOMPILE_FAILURE = \"MEMBERSHIP_RECOMPILE_FAILURE\";\r\nexport const MEMBERSHIP_CARE_COMPANION = \"MEMBERSHIP_CARE_COMPANION\";\r\n\r\nexport const PRICING_ESTIMATE_QUOTE = \"PRICING_ESTIMATE_QUOTE\";\r\nexport const PRICING_ESTIMATE_GET_PENDING = \"PRICING_ESTIMATE_GET_PENDING\";\r\nexport const PRICING_ESTIMATE_GET_SUCCESS = \"PRICING_ESTIMATE_GET_SUCCESS\";\r\nexport const DCJ_INBOX_SET_CONVERSATION_ID = \"DCJ_INBOX_SET_CONVERSATION_ID\";\r\n\r\nexport const DCJ_INBOX_MARK_CONVERSATION_FOR_FOLLOWUP = \"DCJ_INBOX_MARK_CONVERSATION_FOR_FOLLOWUP\";\r\nexport const DCJ_INBOX_MARK_CONVERSATION_FOR_FOLLOWUP_PENDING = \"DCJ_INBOX_MARK_CONVERSATION_FOR_FOLLOWUP_PENDING\";\r\nexport const DCJ_INBOX_MARK_CONVERSATION_FOR_FOLLOWUP_SUCCESS = \"DCJ_INBOX_MARK_CONVERSATION_FOR_FOLLOWUP_SUCCESS\";\r\nexport const DCJ_INBOX_MARK_CONVERSATION_FOR_FOLLOWUP_FAILURE = \"DCJ_INBOX_MARK_CONVERSATION_FOR_FOLLOWUP_FAILURE\";\r\n\r\nexport const GET_WELLBEING_REPORT = \"GET_WELLBEING_REPORT\";\r\nexport const GET_WELLBEING_REPORT_PENDING = \"GET_WELLBEING_REPORT_PENDING\";\r\nexport const GET_WELLBEING_REPORT_SUCCESS = \"GET_WELLBEING_REPORT_SUCCESS\";\r\nexport const GET_WELLBEING_REPORT_FAILURE = \"GET_WELLBEING_REPORT_FAILURE\";\r\nexport const GET_WELLNESS_REPORT_PDF = \"GET_WELLNESS_REPORT_PDF\";\r\n\r\nexport const DCJ_INBOX_GET_JOURNEY_CONVERSATION_ID = \"DCJ_INBOX_GET_JOURNEY_CONVERSATION_ID\";\r\nexport const DCJ_INBOX_GET_JOURNEY_CONVERSATION_ID_PENDING = \"DCJ_INBOX_GET_JOURNEY_CONVERSATION_ID_PENDING\";\r\nexport const DCJ_INBOX_GET_JOURNEY_CONVERSATION_ID_SUCCESS = \"DCJ_INBOX_GET_JOURNEY_CONVERSATION_ID_SUCCESS\";\r\nexport const DCJ_INBOX_GET_JOURNEY_CONVERSATION_ID_FAILURE = \"DCJ_INBOX_GET_JOURNEY_CONVERSATION_ID_FAILURE\";\r\n\r\nexport const GET_EPIC_ENCRYPT_CSN = \"GET_EPIC_ENCRYPT_CSN\";\r\nexport const GET_EPIC_ENCRYPT_CSN_PENDING = \"GET_EPIC_ENCRYPT_CSN_PENDING\";\r\nexport const GET_EPIC_ENCRYPT_CSN_SUCCESS = \"GET_EPIC_ENCRYPT_CSN_SUCCESS\";\r\nexport const GET_EPIC_ENCRYPT_CSN_FAILURE = \"GET_EPIC_ENCRYPT_CSN_FAILURE\";\r\n\r\nexport const GET_TERMS_FOR_VIDEO_VISIT_SHARELINK = \"GET_TERMS_FOR_VIDEO_VISIT_SHARELINK\";\r\nexport const GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_PENDING = \"GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_PENDING\";\r\nexport const GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_SUCCESS = \"GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_SUCCESS\";\r\nexport const GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_FAILURE = \"GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_FAILURE\";\r\n\r\nexport const GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK = \"GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK\";\r\nexport const GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK_PENDING = \"GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK_PENDING\";\r\nexport const GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK_SUCCESS = \"GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK_SUCCESS\";\r\nexport const GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK_FAILURE = \"GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK_FAILURE\";\r\n\r\nexport const ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK = \"ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK\";\r\nexport const ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK_PENDING = \"ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK_PENDING\";\r\nexport const ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK_SUCCESS = \"ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK_SUCCESS\";\r\nexport const ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK_FAILURE = \"ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK_FAILURE\";\r\n\r\nexport const HP_CONSENT_LIST = \"HP_CONSENT_LIST\";\r\nexport const REVOKE_HP_FHIR_GRANT = \"REVOKE_HP_FHIR_GRANT\";\r\nexport const REVOKE_HP_FHIR_GRANT_PENDING = \"REVOKE_HP_FHIR_GRANT_PENDING\";\r\nexport const REVOKE_HP_FHIR_GRANT_SUCCESS = \"REVOKE_HP_FHIR_GRANT_SUCCESS\";\r\nexport const REVOKE_HP_FHIR_GRANT_FAILURE = \"REVOKE_HP_FHIR_GRANT_FAILURE\";\r\nexport const SHOW_CARE_COACH_MODAL = \"SHOW_CARE_COACH_MODAL\";\r\n\r\nexport const MYCHART_DATA_TILE_TOUCHED = \"MYCHART_DATA_TILE_TOUCHED\";\r\nexport const MYCHART_DATA_TILE_TOUCHED_SUCCESS = \"MYCHART_DATA_TILE_TOUCHED_SUCCESS\";\r\nexport const MYCHART_DEMOGRAPHICS_COMPLETE = \"MYCHART_DEMOGRAPHICS_COMPLETE\";\r\nexport const MYCHART_DEMOGRAPHICS_COMPLETED = \"MYCHART_DEMOGRAPHICS_COMPLETED\";\r\n\r\nexport const SET_SELECTED_USERS = \"SET_SELECTED_USERS\";\r\nexport const CHECK_GET_INHOME_PREFILL = \"CHECK_GET_PREFILL_DATA\";\r\nexport const GET_INHOME_PREFILL = \"GET_PREFILL_DATA\";\r\nexport const GET_INHOME_PREFILL_RESULT = \"GET_INHOME_PREFILL_RESULT\";\r\nexport const SET_INHOME_LOCATION = \"SET_INHOME_LOCATION\";\r\nexport const GET_INHOME_VACCINES = \"GET_INHOME_VACCINES\";\r\nexport const SET_INHOME_VACCINES = \"SET_INHOME_VACCINES\";\r\nexport const GET_INHOME_VACCINES_RESULT = \"GET_INHOME_VACCINES_RESULT\";\r\nexport const GET_INHOME_ELIGIBILITY_Q = \"GET_INHOME_ELIGIBILITY_Q\";\r\nexport const GET_INHOME_ELIGIBILITY_Q_RESULT = \"GET_INHOME_ELIGIBILITY_Q_RESULT\";\r\nexport const GET_INHOME_ELIGIBILITY_COVID_Q = \"GET_INHOME_ELIGIBILITY_COVID_Q\";\r\nexport const GET_INHOME_ELIGIBILITY_COVID_Q_RESULT = \"GET_INHOME_ELIGIBILITY_COVID_Q_RESULT\";\r\nexport const REMOVE_VACCINE = \"REMOVE_VACCINE\";\r\nexport const SEND_INHOME_ELIGIBILITY_RESPONSES = \"SEND_INHOME_ELIGIBILITY_RESPONSES\";\r\nexport const GET_INHOME_APPTS = \"GET_INHOME_APPTS\";\r\nexport const GET_INHOME_APPTS_RESULT = \"GET_INHOME_APPTS_RESULT\"\r\nexport const SET_INHOME_DATETIME = \"SET_INHOME_DATETIME\";\r\nexport const BOOK_INHOME_APPT = \"BOOK_INHOME_APPT\";\r\nexport const BOOK_INHOME_APPT_RESULT = \"BOOK_INHOME_APPT_RESULT\";\r\nexport const CANCEL_INHOME_BOOKING = \"CANCEL_INHOME_BOOKING\";\r\nexport const SAVE_COVID_SERVICE_RESULTS = \"SAVE_COVID_SERVICE_RESULTS\";\r\nexport const RESET_COVID_DATA = \"RESET_COVID_DATA\";\r\nexport const VALIDATE_INHOME_ZIPCODE = \"VALIDATE_INHOME_ZIPCODE\";\r\nexport const SET_VALIDATE_INHOME_ZIPCODE_RESULT = \"SET_VALIDATE_INHOME_ZIPCODE_RESULT\";\r\nexport const INHOME_NUDGE_MODAL_VIEWED = \"INHOME_NUDGE_MODAL_VIEWED\";\r\n\r\n\r\nexport const SHOW_ONBOARDING_MODAL = \"SHOW_ONBOARDING_MODAL\";\r\n\r\n\r\nexport const MASTER_SPINNER_ON = \"MASTER_SPINNER_ON\";\r\nexport const MASTER_SPINNER_OFF = \"MASTER_SPINNER_OFF\";\r\n\r\nexport const UPDATE_THRIVE_TOOLTIP_PREFERENCE = \"UPDATE_THRIVE_TOOLTIP_PREFERENCE\";\r\nexport const SHOW_THRIVE_TOOLTIP = \"SHOW_THRIVE_TOOLTIP\";\r\nexport const HAS_SEEN_SCHEDULE_CARE_TOOLTIP = \"HAS_SEEN_SCHEDULE_CARE_TOOLTIP \";\r\nexport const REQUEST_PROXY_SUGGESTION_LIST = \"REQUEST_PROXY_SUGGESTION_LIST\";\r\nexport const GET_PROXY_SUGGESTION_LIST = \"GET_PROXY_SUGGESTION_LIST\";\r\nexport const SET_PROXY_SELECTED_USERS = \"SET_PROXY_SELECTED_USERS\";\r\nexport const CLEAR_PROXY_SELECTED_USERS = \"CLEAR_PROXY_SELECTED_USERS\";\r\nexport const SET_SCREEN_BREAKPOINT = \"SET_SCREEN_BREAKPOINT\";\r\nexport const GET_PROXY_USER_PROXYFLOW_STATUS = \"GET_PROXY_USER_PROXYFLOW_STATUS\";\r\n\r\n/** MAMMOGRAPHY FLOW RELATED ACTIONS **/\r\nexport const UPDATE_MAMMOGRAPHY_FLOW_SELECTED_OPTION = \"UPDATE_MAMMOGRAPHY_FLOW_SELECTED_OPTION\";\r\nexport const CLEAR_MAMMOGRAPHY_FLOW_SELECTED_OPTION = \"CLEAR_MAMMOGRAPHY_FLOW_SELECTED_OPTION\";\r\nexport const UPDATE_MAMMOGRAPHY_FLOW_FORM_INPUTS = \"UPDATE_MAMMOGRAPHY_FLOW_FORM_INPUTS\";\r\nexport const POST_MAMMOGRAPHY_FLOW_DATA = \"POST_MAMMOGRAPHY_FLOW_DATA\";\r\nexport const POST_MAMMOGRAPHY_FLOW_DATA_STATUS = \"POST_MAMMOGRAPHY_FLOW_DATA_STATUS\";\r\nexport const UPDATE_NO_MAMMOGRAPHY_FLOW_SELECTED_REASON = \"UPDATE_NO_MAMMOGRAPHY_FLOW_SELECTED_REASON\";\r\nexport const CLEAR_MAMMOGRAPHY_DATA_AFTER_SUBMIT = \"CLEAR_MAMMOGRAPHY_DATA_AFTER_SUBMIT\";\r\nexport const GET_MAMMOGRAPHY_FLOW_DATA = \"GET_MAMMOGRAPHY_FLOW_DATA\";\r\nexport const SAVE_CAREGAPS_SESSION_ID = \"SAVE_CAREGAPS_SESSION_ID\";\r\nexport const CLEAR_MAMMOGRAPHY_DATA_AFTER_ONCHANGE = \"CLEAR_MAMMOGRAPHY_DATA_AFTER_ONCHANGE\";\r\n\r\n/** CAREGAP FLOW RELATED ACTIONS **/\r\nexport const UPDATE_CAREGAP_SELECTED_OPTION = \"UPDATE_CAREGAP_SELECTED_OPTION\";\r\nexport const UPDATE_NO_CAREGAP_FLOW_SELECTED_DATA = \"UPDATE_NO_CAREGAP_FLOW_SELECTED_DATA\";\r\nexport const GET_CAREGAP_FLOW_DATA = \"GET_CAREGAP_FLOW_DATA\";\r\nexport const UPDATE_CAREGAP_FLOW_FORM_INPUTS = \"UPDATE_CAREGAP_FLOW_FORM_INPUTS\";\r\nexport const POST_CAREGAP_FLOW_DATA_STATUS = \"POST_CAREGAP_FLOW_DATA_STATUS\";\r\nexport const CLEAR_CAREGAP_DATA_AFTER_SUBMIT = \"CLEAR_CAREGAP_DATA_AFTER_SUBMIT\";\r\nexport const POST_CAREGAP_FLOW_DATA = \"POST_CAREGAP_FLOW_DATA\";\r\nexport const POST_CAREGAP_SETUP_DATA = \"POST_CAREGAP_SETUP_DATA\";\r\nexport const CLEAR_CAREGAP_DATA_AFTER_ONCHANGE = \"CLEAR_CAREGAP_DATA_AFTER_ONCHANGE\";\r\nexport const GET_CAREGAP_FILE_ATTACHMENTS = \"GET_CAREGAP_FILE_ATTACHMENTS\";\r\nexport const GET_PATIENT_SCHEDULING_PERMISSIONS_START = 'GET_PATIENT_SCHEDULING_PERMISSIONS_START';\r\nexport const GET_PATIENT_SCHEDULING_PERMISSIONS_SUCCESS = 'GET_PATIENT_SCHEDULING_PERMISSIONS_SUCCESS';\r\nexport const GET_PATIENT_SCHEDULING_PERMISSIONS_FAILURE = 'GET_PATIENT_SCHEDULING_PERMISSIONS_FAILURE';\r\n\r\nexport const SHOW_ONBOARDING_PHASEONE_TOOLTIP = \"SHOW_ONBOARDING_PHASEONE_TOOLTIP\";\r\nexport const SHOW_ONBOARDING_PHASETWO_TOOLTIP = \"SHOW_ONBOARDING_PHASETWO_TOOLTIP\";\r\nexport const SHOW_ONBOARDING_PHASETHREE_TOOLTIP = \"SHOW_ONBOARDING_PHASETHREE_TOOLTIP\";\r\nexport const SHOW_ONBOARDING_PHASEFOUR_TOOLTIP = \"SHOW_ONBOARDING_PHASEFOUR_TOOLTIP\";\r\nexport const DISMISS_ONBOARDING_PHASEONE_TOOLTIP = \"DISMISS_ONBOARDING_PHASEONE_TOOLTIP\";\r\nexport const DISMISS_ONBOARDING_PHASETWO_TOOLTIP = \"DISMISS_ONBOARDING_PHASETWO_TOOLTIP\";\r\nexport const DISMISS_ONBOARDING_PHASETHREE_TOOLTIP = \"DISMISS_ONBOARDING_PHASETHREE_TOOLTIP\";\r\nexport const DISMISS_ONBOARDING_PHASEFOUR_TOOLTIP = \"DISMISS_ONBOARDING_PHASEFOUR_TOOLTIP\";\r\nexport const SHOW_LINK_MEDICALRECORD_PHASEONE_TOOLTIP = \"SHOW_LINK_MEDICALRECORD_PHASEONE_TOOLTIP\";\r\nexport const DISMISS_LINK_MEDICALRECORD_PHASEONE_TOOLTIP = \"DISMISS_LINK_MEDICALRECORD_PHASEONE_TOOLTIP\";\r\n\r\nexport const GET_PRIVACY_HEALTHPLAN_TEXT = \"GET_PRIVACY_HEALTHPLAN_TEXT\";\r\nexport const GET_PRIVACY_HEALTHPLAN_TEXT_SUCCESS = \"GET_PRIVACY_HEALTHPLAN_TEXT_SUCCESS\";\r\nexport const GET_PRIVACY_HEALTHPLAN_TEXT_FAILURE = \"GET_PRIVACY_HEALTHPLAN_TEXT_FAILURE\";\r\n\r\nexport const GET_PRIVACY_MYBSWH_TEXT = \"GET_PRIVACY_MYBSWH_TEXT\";\r\nexport const GET_PRIVACY_MYBSWH_TEXT_SUCCESS = \"GET_PRIVACY_MYBSWH_TEXT_SUCCESS\";\r\nexport const GET_PRIVACY_MYBSWH_TEXT_FAILURE = \"GET_PRIVACY_MYBSWH_TEXT_FAILURE\";\r\n\r\nexport const GET_PRIVACY_MYCHART_TEXT = \"GET_PRIVACY_MYCHART_TEXT\";\r\nexport const GET_PRIVACY_MYCHART_TEXT_SUCCESS = \"GET_PRIVACY_MYCHART_TEXT_SUCCESS\";\r\nexport const GET_PRIVACY_MYCHART_TEXT_FAILURE = \"GET_PRIVACY_MYCHART_TEXT_FAILURE\";\r\n\r\nexport const IS_PROXY_SWITCH_FOR_MYCHART_DEEPLINK = \"IS_PROXY_SWITCH_FOR_MYCHART_DEEPLINK\";\r\n\r\nexport const DISCOVER_TILE_DISMISS = \"DISCOVER_TILE_DISMISS\";\r\nexport const DISCOVER_TILE_DISMISS_SUCCESS = \"DISCOVER_TILE_DISMISS_SUCCESS\";\r\nexport const DISCOVER_TILE_DISMISS_FAILURE = \"DISCOVER_TILE_DISMISS_FAILURE\";\r\nexport const DISCOVER_TILE_UNDISMISS = \"DISCOVER_TILE_UNDISMISS\";\r\n\r\nexport const SET_SCRUBBING_IN_EMAIL_OPT_IN = \"SET_SCRUBBING_IN_EMAIL_OPT_IN\";\r\nexport const SET_SCRUBBING_IN_EMAIL_OPT_IN_SUCCESS = \"SET_SCRUBBING_IN_EMAIL_OPT_IN_SUCCESS\";\r\nexport const SET_SCRUBBING_IN_EMAIL_OPT_IN_FAILURE = \"SET_SCRUBBING_IN_EMAIL_OPT_IN_FAILURE\";\r\n\r\nexport const DASHBOARD_MENU_COLLAPSIBLE_STATE_CHANGE = \"DASHBOARD_MENU_COLLAPSIBLE_STATE_CHANGE\";\r\n\r\nexport const ACCEPT_BSW_DIGITAL_PRIVACY_POLICY = \"GET_BSW_DIGITAL_PRIVACY_POLICY\";\r\nexport const ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_PENDING = \"ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_PENDING\";\r\nexport const ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_SUCCESS = \"ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_SUCCESS\";\r\nexport const ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_FAILURE = \"ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_FAILURE\";\r\nexport const UPDATE_PRIVACY_MYBSWH_ACCEPTED = \"UPDATE_PRIVACY_MYBSWH_ACCEPTED\";\r\n\r\nexport const MYCHART_DATATILE_LANG_UPDATE = \"MYCHART_DATATILE_LANG_UPDATE\";\r\n\r\n\r\nexport const PROFILE_DATA_LOADED = \"PROFILE_DATA_LOADED\";","export const SETUP_AMITY_USER_SESSION = \"SetupUserSession\";\r\nexport const SETUP_AMITY_USER_SESSION_SUCCESS = \"SetupUserSession.Success\";\r\nexport const SETUP_AMITY_USER_SESSION_FAILURE = \"SetupUserSession.Failure\";\r\nexport const RESET_PRAYER_FEATURE = \"ResetPrayerFeature\";\r\nexport const AMITY_CONNECTION_CHANGED = \"AmityConnection.Changed\";\r\nexport const UPDATE_AMITY_USER_ROLE = \"UpdateAmityUserRole\";\r\nexport const PRAYER_WALL_TAB_CHANGED = \"PrayerWallTab.Changed\";\r\nexport const PRAYER_WALL_ENTERED = \"PrayerWall.Entered\";\r\nexport const PRAYER_WALL_LEFT = \"PrayerWall.Left\";\r\nexport const POST_PRAYER = \"PostPrayer\";\r\nexport const POST_PRAYER_SUCCESS = \"PostPrayer.Success\";\r\nexport const POST_PRAYER_FAILURE = \"PostPrayer.Failure\";\r\nexport const EDIT_PRAYER = \"EditPrayer\";\r\nexport const EDIT_PRAYER_SUCCESS = \"EditPrayer.Success\";\r\nexport const EDIT_PRAYER_FAILURE = \"EditPrayer.Failure\";\r\nexport const GET_PRAYER_OF_THE_WEEK = \"GetPrayerOfTheWeek\";\r\nexport const GET_PRAYER_OF_THE_WEEK_SUCCESS = \"GetPrayerOfTheWeek.Success\";\r\nexport const GET_PRAYER_OF_THE_WEEK_FAILURE = \"GetPrayerOfTheWeek.Failure\";\r\nexport const GET_ALL_PRAYERS = \"GetAllPrayers\";\r\nexport const GET_ALL_PRAYERS_SUCCESS = \"GetAllPrayers.Success\";\r\nexport const GET_ALL_PRAYERS_FAILURE = \"GetAllPrayers.Failure\";\r\nexport const UPDATE_LAST_LOAD_TIME = \"UpdateLastLoadTime\";\r\nexport const GET_MY_PRAYERS = \"GetMyPrayers\";\r\nexport const GET_MY_PRAYERS_SUCCESS = \"GetMyPrayers.Success\";\r\nexport const GET_MY_PRAYERS_FAILURE = \"GetMyPrayers.Failure\";\r\nexport const GET_NEXT_PRAYERS = \"GetNextPrayers\";\r\nexport const GET_NEXT_PRAYERS_COMPLETED = \"GetNextPrayersCompleted\";\r\nexport const REFRESH_ALL_PRAYERS = \"RefreshAllPrayers\";\r\nexport const REFRESH_MY_PRAYERS = \"RefreshMyPrayers\";\r\nexport const DELETE_PRAYER = \"DeletePrayer\";\r\nexport const DELETE_PRAYER_SUCCESS = \"DeletePrayer.Success\";\r\nexport const DELETE_PRAYER_FAILURE = \"DeletePrayer.Failure\";\r\nexport const ADD_PRAYER_REACTION = \"AddPrayerReaction\";\r\nexport const ADD_PRAYER_REACTION_SUCCESS = \"AddPrayerReaction.Success\";\r\nexport const ADD_PRAYER_REACTION_FAILURE = \"AddPrayerReaction.Failure\";\r\nexport const REMOVE_PRAYER_REACTION = \"RemovePrayerReaction\";\r\nexport const REMOVE_PRAYER_REACTION_SUCCESS = \"RemovePrayerReaction.Success\";\r\nexport const REMOVE_PRAYER_REACTION_FAILURE = \"RemovePrayerReaction.Failure\";\r\nexport const GET_COMMENTS = \"GetComments\";\r\nexport const GET_COMMENTS_SUCCESS = \"GetComments.Success\";\r\nexport const GET_COMMENTS_FAILURE = \"GetComments.Failure\";\r\nexport const GET_COMMENT = \"GetComment\";\r\nexport const GET_COMMENT_SUCCESS = \"GetComment.Success\";\r\nexport const GET_COMMENT_FAILURE = \"GetComment.Failure\";\r\nexport const ADD_COMMENT = \"AddComment\";\r\nexport const ADD_COMMENT_SUCCESS = \"AddComment.Success\";\r\nexport const ADD_COMMENT_FAILURE = \"AddComment.Failure\";\r\nexport const EDIT_COMMENT = \"EditComment\";\r\nexport const EDIT_COMMENT_SUCCESS = \"EditComment.Success\";\r\nexport const EDIT_COMMENT_FAILURE = \"EditComment.Failure\";\r\nexport const DELETE_COMMENT = \"DeleteComment\";\r\nexport const DELETE_COMMENT_SUCCESS = \"DeleteComment.Success\";\r\nexport const DELETE_COMMENT_FAILURE = \"DeleteComment.Failure\";\r\nexport const ADD_COMMENT_REACTION = \"AddCommentReaction\";\r\nexport const ADD_COMMENT_REACTION_SUCCESS = \"AddCommentReaction.Success\";\r\nexport const ADD_COMMENT_REACTION_FAILURE = \"AddCommentReaction.Failure\";\r\nexport const REMOVE_COMMENT_REACTION = \"RemoveCommentReaction\";\r\nexport const REMOVE_COMMENT_REACTION_SUCCESS = \"RemoveCommentReaction.Success\";\r\nexport const REMOVE_COMMENT_REACTION_FAILURE = \"RemoveCommentReaction.Failure\";\r\nexport const GET_NOTIFICATION_BADGE = \"GetNotificationBadge\";\r\nexport const GET_NOTIFICATION_BADGE_SUCCESS = \"GetNotificationBadge.Success\";\r\nexport const GET_NOTIFICATION_BADGE_FAILURE = \"GetNotificationBadge.Failure\";\r\nexport const POST_NOTIFICATION_BADGE_ASREAD = \"PostNotificationBadgeAsRead\";\r\nexport const POST_NOTIFICATION_BADGE_ASREAD_SUCCESS = \"PostNotificationBadgeAsRead.Success\";\r\nexport const POST_NOTIFICATION_BADGE_ASREAD_FAILURE = \"PostNotificationBadgeAsRead.Failure\";\r\nexport const GET_DELETED_POSTS = \"GetDeletedPosts\";\r\nexport const GET_DELETED_POSTS_SUCCESS = \"GetDeletedPosts.Success\";\r\nexport const GET_DELETED_POSTS_FAILURE = \"GetDeletedPosts.Failure\";\r\nexport const MARK_DELETED_POST_ASREAD = \"MarkDeletedPostsAsRead\";\r\nexport const MARK_DELETED_POST_ASREAD_SUCCESS = \"MarkDeletedPostsAsRead.Success\";\r\nexport const MARK_DELETED_POST_ASREAD_FAILURE = \"MarkDeletedPostsAsRead.Failure\";\r\n","export const COMMUNITY_SUPPORT_IS_DOWN = \"Oh no! Community Support is down at the moment. Please try again later.\";\r\nexport const LOAD_POST_ERROR = \"Oh no! We are having issues loading this post. Please try again later.\";\r\nexport const LOAD_MORE_POST_ERROR = \"Oh no! We are having issues loading more posts. Please try again later.\";\r\nexport const ADD_POST_ERROR = \"Oh no! We encountered an issue while posting. Please try again later.\";\r\nexport const EDIT_POST_ERROR = \"Oh no! We encountered an issue while editing your post. Please try again later.\";\r\nexport const DELETE_POST_ERROR = \"Oh no! We encountered an issue while deleting your post. Please try again later.\";\r\nexport const ADD_COMMENT_ERROR = \"Oh no! We encountered an issue while posting your update. Please try again later.\";\r\nexport const EDIT_COMMENT_ERROR = \"Oh no! We encountered an issue while editing your update. Please try again later.\";\r\nexport const BAN_WORD_ERROR = \"It looks like you have used a word in your post that violates our terms. Please remove the word to post on our Support Wall.\";\r\nexport const ACTION_ERROR = \"Oops! Something went wrong. Please try again later.\";\r\n\r\nexport const ADD_POST_SUCCESS = \"Your post was successful.\";\r\nexport const EDIT_POST_SUCCESS = \"Your edit was successful.\";\r\nexport const DELETE_POST_CONFIRM = \"Are you sure you want to delete your post and all of its updates? This action can't be undone.\";\r\nexport const DELETE_POST_SUCCESS = \"Your post was successfully deleted.\";\r\nexport const ADD_COMMENT_SUCCESS = \"Your update was successful.\";\r\nexport const DELETE_COMMENT_CONFIRM = \"Are you sure you want to delete this update? This action can't be undone.\";\r\n\r\nexport const HIDE_PRAYER_WALL_TOOLTIP = \"HidePrayerWallTooltip\";\r\nexport const HIDE_PRAYER_CARD_TOOLTIP = \"HidePrayerCardTooltip\";\r\n\r\nexport const CHAPLAIN_INFO_HEADER = 'Chaplains are here to listen.';\r\nexport const CHAPLAIN_INFO_MESSAGE = \"Our Support Wall is a community where chaplains actively engage with fellow MyBSWHealth users’ posts.\";\r\nexport const CHAPLAIN_INFO_SECOND_MESSAGE = \"If you need 1-on-1 spiritual support, our chaplains are here to listen and are ready to provide confidential emotional/spiritual support to those of all faiths and those not associated with a faith tradition through numerous methods, including prayer.\";\r\nexport const CHAPLAIN_INFO_FOOTER = 'Call our prayer support line.';\r\n\r\nexport const POST_DISCLAIMER = \"Please do not use proper names or information that may identify individuals and their health conditions.\";\r\nexport const POST_ACKNOWLEDGMENT = \"By tapping Submit, I acknowledge that this post will be viewable by all MyBSWHealth users and that Baylor Scott & White Health has no responsibility for the content that is shared. Any content that is submitted is subject to removal by Baylor Scott & White Health.\";\r\nexport const NO_POST_MESSAGE = \"To create a post simply click on the Add a Post button.\";\r\nexport const NO_POST_SECOND_MESSAGE = \"To create a post simply click on the Add a Post button.\"\r\n\r\nexport const DELETE_INFO_SECOND_MESSAGE = \"Please do not use proper names or information that may identify individuals and their health conditions.\"\r\nexport const DELETE_INFO_THIRD_MESSAGE = \"All posts are viewable by MyBSWHealth users and Baylor Scott & White Health has no responsibility for the content that is shared. Any content that is submitted is subject to removal by Baylor Scott & White Health. \"\r\n\r\nexport const COMMUNITY_SUPPORT_BANNED = \"CommunitySupportBanned\";","export const UserInitiatedLogoutMessage = \"You have been successfully logged out of your MyBSWHealth account.\";\r\nexport const SystemInitiatedLogoutMessage = \"For your security, we logged you out due to inactivity.\";\r\nexport const LoginInvalidGrantMessage = \"Username or password is incorrect. Please verify your password and try again.\";\r\nexport const PharmacyTileName = \"BSW Pharmacy\";\r\nexport const TestResultsTileName = \"TEST RESULTS\";\r\nexport const LyraTileName = \"Sign up for Lyra\";\r\nexport const ToDoTileName = \"PREVENTIVE CARE\";\r\nexport const BillingTileName = \"BILLING\";\r\nexport const MessagesTileName = \"MESSAGES\";\r\nexport const AppointmentTileName = \"Next Appointment\";\r\nexport const HPTileName = \"BAYLOR SCOTT & WHITE HEALTH PLAN\";\r\nexport const HPCareTileName = \"BSWQA-DFW CONNECTEDCARE\";\r\nexport const CovidScreeningModalSessionKeyInitial = \"COVID19ScreeningModalClose_\";\r\nexport const MammogramCovid19ModalSessionKeyInitial = \"MammogramCovid19ModalClose_\";\r\n//export const CareCoachTileName = \"CARE COACH\";\r\nexport const VIDEOVISIT_LABEL = 'video visit';\r\n//export const ShowCareCoachModal = 'ShowCareCoachModal';\r\n\r\n/* PROXY MANAGEMENT */\r\nexport const PROXY_APPROVED = \"A\";\r\nexport const PROXY_DECLINED = \"D\";\r\nexport const PROXY_CANCELLED = \"C\";\r\nexport const PROXY_PENDING = \"P\";\r\nexport const PROXY_DELETE = \"X\";\r\nexport const HideGetCareToolTip = \"HideGetCareTutorial\";\r\nexport const ShowFamilyManagementToolTip = \"ShowFamilyManagementToolTipForWeb\";\r\nexport const LOGIN_PROVIDER_FIRSTCARE = \"hr-fc\";\r\nexport const LOGIN_PROVIDER_HR_SWHP = \"hr-swhp\";\r\nexport const LOGIN_PROVIDER_SWHP = \"healthplan\";\r\nexport const LOGIN_PROVIDER_AAL = \"aal\";\r\nexport const LOGIN_PROVIDER_AUTO_FIRSTCARE = \"auto-hr-fc\";\r\nexport const LOGIN_PROVIDER_AUTO_HR_SWHP = \"auto-hr-swhp\";\r\nexport const LOGIN_PROVIDER_AUTO_SWHP = \"auto-healthplan\";\r\nexport const LOGIN_PROVIDER_AUTO_AAL = \"auto-aal\";\r\nexport const AALinkModalExpire = '_aalinkingmodalexpire';\r\nexport const LinkModalExpire = 'linkingmodalexpire';\r\n//export const MINOR_PROXYREQUEST_TERMS = '
I understand that if this proxy request is approved, a MyBSWHealth record will be established for my child (or children if I have requested access for more than one child). I understand that the records of my minor child or children will be accessed through my MyBSWHealth account. I understand that the following age range limitations apply for MyBSWHealth:0-13 years of age: Parent/guardian is granted full access to child’s MyBSWHealth records 14-17 years of age: Parent/guardian is granted partial access to child’s MyBSWHealth records 18 years of age and above: Parent/guardian no longer has access to child’s MyBSWHealth records I understand that if any of my children have the right under Texas law to consent for his/her entire health care before they reach 18 years of age, I may not be granted access to their MyBSWHealth records. I understand that if my legal relationship with the patient changes I must inform BSWH immediately by sending written notice to BSWH, Health Information Management Department, Mail Stop 01047, 2401 S. 31st Street, Temple, TX 76508 or fax to 254-724-0119, or for HealthTexas Provider Network (HTPN) patients, to the Health Information Management department, 8105 N. Central Expressway, Suite 400, Box 47, Dallas, TX. By selecting “I agree to the terms”, I attest that I have read and understand the language in this document By selecting “I agree to the terms”, I attest that I am the parent or legal guardian of the minor(s) who I am requesting access on behalf of. I understand that my answer will be captured and recorded. ';\r\n//export const ADULT_PROXYREQUEST_TERMS = '
I understand that if approved, the requested patient’s records will be accessed through my MyBSWHealth account. I understand that if my legal relationship with the patient changes I must inform BSWH immediately by sending written notice to BSWH, Health Information Management Department, Mail Stop 01047, 2401 S. 31st Street, Temple, TX 76508 or fax to 254-724-0119, or for HealthTexas Provider Network (HTPN) patients, to the Health Information Management department, 8105 N. Central Expressway, Suite 400, Box 47, Dallas, TX. By selecting “I agree to the terms”, I attest that I have read and understand the language in this document. By selecting “I agree to the terms”, I attest that I have authority to consent for this patient. I understand that my answer will be captured and recorded. ';\r\n//export const PHARMACY_ATTESTATION_PROXY = '
By selecting “I agree to the terms”, I attest that I am the parent or legal guardian of the named minor(s). I understand that my answer will be captured and recorded. ';\r\n//export const ADULT_PROXYGRANT_TERMS = '
I understand that if approved, my MyBSWHealth proxy will be able to access my health records through their MyBSWHealth account. I understand that the medical information in my MyBSWHealth health records is obtained from my electronic medical record and may include information from all BSWH facilities. I understand that I am only approving release of my information through my MyBSWHealth health record. I understand that once information has been disclosed, it potentially may be re - disclosed by the proxy and the disclosed information may not be covered by federal privacy protections. I understand that participation in MyBSWHealth and designating a MyBSWHealth proxy is completely voluntary.I understand that I am not required to designate a MyBSWHealth proxy, and I am not required to provide this authorization. I understand that BSWH does not condition any of my health care treatment, payment or other services on whether I provide this authorization.However, I also understand that if I do not provide authorization, BSWH is not permitted to provide access to my MyBSWHealth record to my designated proxy. I understand that this authorization will expire upon receipt of my written notice of proxy revocation to BSWH Health Information Management Department, Mail Stop 01047, 2401 S. 31st Street, Temple, TX 76508 or fax to 254 - 724 - 0119; or for HealthTexas Provider Network(HTPN) patients, Health Information Management department, 8105 N.Central Expressway, Suite 400, Box 47, Dallas, TX 75206 or fax to 214 - 818 - 9781. I understand that if I revoke this authorization, my designated proxy access to MyBSWHealth record will be ended.I also understand my revocation will not affect any disclosures that were made prior to processing the revocation request. By selecting “I agree to the terms”, I attest that I have read and understand the language in this document. By selecting “I agree to the terms”, I agree to designate the person named in this digital form as my MyBSWHealth proxy, thereby allowing them access to my MyBSWHealth health records. By selecting “I agree to the terms”, I authorize BSWH to release the information contained in my MyBSWHealth health record to my designated proxy via MyBSWHealth. I understand that my answer will be captured and recorded. ';\r\n//export const ADULT_PROXYGRANT_TERMS = '
I understand that if approved, my MyBSWHealth proxy will be able to access my health records through their MyBSWHealth account. I understand that the medical information in my MyBSWHealth health records is obtained from my electronic medical record and may include information from all BSWH facilities. I understand that I am only approving release of my information through my MyBSWHealth health record. I understand that once information has been disclosed, it potentially may be re - disclosed by the proxy and the disclosed information may not be covered by federal privacy protections. I understand that participation in MyBSWHealth and designating a MyBSWHealth proxy is completely voluntary.I understand that I am not required to designate a MyBSWHealth proxy, and I am not required to provide this authorization. I understand that BSWH does not condition any of my health care treatment, payment or other services on whether I provide this authorization.However, I also understand that if I do not provide authorization, BSWH is not permitted to provide access to my MyBSWHealth record to my designated proxy. I understand that this authorization will expire upon receipt of my written notice of proxy revocation to BSWH Health Information Management Department, Mail Stop 01047, 2401 S. 31st Street, Temple, TX 76508 or fax to 254 - 724 - 0119; or for HealthTexas Provider Network(HTPN) patients, Health Information Management department, 8105 N.Central Expressway, Suite 400, Box 47, Dallas, TX 75206 or fax to 214 - 818 - 9781. I understand that if I revoke this authorization, my designated proxy access to MyBSWHealth record will be ended.I also understand my revocation will not affect any disclosures that were made prior to processing the revocation request. By selecting “I agree to the terms”, I attest that I have read and understand the language in this document. By selecting “I agree to the terms”, I agree to designate the person named in this digital form as my MyBSWHealth proxy, thereby allowing them access to my MyBSWHealth health records. By selecting “I agree to the terms”, I authorize BSWH to release the information contained in my MyBSWHealth health record to my designated proxy via MyBSWHealth. I understand that my answer will be captured and recorded. ';\r\n\r\n/* Hardcoded text for proxy terms */\r\nexport const RX_EPIC_REQUEST_MINOR_FALLBACK_TERMS = '
I understand that if this proxy request is approved, a MyBSWHealth health and pharmacy record will be established for my child (or children if I have requested access for more than one child).
I understand that the health and pharmacy records of my minor child or children will be accessed through my MyBSWHealth account.
I understand that the following age range limitations apply for MyBSWHealth:
0-13 years of age: Parent/guardian is granted full access to child’s MyBSWHealth health and pharmacy records
14-17 years of age: Parent/guardian is granted partial access to child’s MyBSWHealth health and pharmacy records
18 years of age and above: Parent/guardian no longer has access to child’s MyBSWHealth health and pharmacy records
I understand that if any of my children have the right under Texas law to consent for his/her entire health care before they reach 18 years of age, I may not be granted access to their MyBSWHealth health and pharmacy records.
I understand that if my legal relationship with the patient changes I must inform BSWH immediately by sending written notice to BSWH, Health Information Management Department, Mail Stop 01047, 2401 S. 31st Street, Temple, TX 76508 or fax to 254-724-0119, or for HealthTexas Provider Network (HTPN) patients, to the Health Information Management department, 8105 N. Central Expressway, Suite 400, Box 47, Dallas, TX.
By selecting “I agree to the terms”, I attest that I have read and understand the language in this document.
By selecting “I agree to the terms”, I attest that I am the parent or legal guardian of the minor(s) who I am requesting access on behalf of.
I understand that my answer will be captured and recorded.
';\r\nexport const INITIATE_GRANT_APPROVE_REQUEST_FALLBACK_TERMS = '
I understand that if approved, my MyBSWHealth proxy will be able to access my health records and pharmacy records through their MyBSWHealth account.
I understand that the medical information in my MyBSWHealth health records is obtained from my electronic medical record and may include information from all BSWH facilities.
I understand that my MyBSWHealth proxy will be able to access any of the following IF they are contained in my records: (i) mental health records; (ii) drug, alcohol and substance abuse records; (iii) genetic information (including genetic test results); or (iv) and HIV/AIDS test results/treatment records.
I understand that I am approving release of my information through my MyBSWHealth health record and pharmacy record.
I understand that if proxy access is given to my pharmacy records, the proxy may be able to determine the underlying condition/diagnosis in my health record.
I understand that once information has been disclosed, it potentially may be re-disclosed by the proxy and the disclosed information may not be covered by federal privacy protections.
I understand that participation in MyBSWHealth and designating a MyBSWHealth proxy is completely voluntary. I understand that I am not required to designate a MyBSWHealth proxy, and I am not required to provide this authorization.
I understand that BSWH does not condition any of my health care treatment, payment or other services on whether I provide this authorization. However, I also understand that if I do not provide authorization, BSWH is not permitted to provide access to my MyBSWHealth health record and pharmacy record to my designated proxy.
I understand that this authorization will expire upon receipt of my written notice of proxy revocation to BSWH Health Information Management Department, Mail Stop 01047, 2401 S. 31st Street, Temple, TX 76508 or fax to 254-724-0119; or for HealthTexas Provider Network (HTPN) patients, Health Information Management department, 8105 N. Central Expressway, Suite 400, Box 47, Dallas, TX 75206 or fax to 214-818-9781. I understand that if I revoke this authorization, my designated proxy access to MyBSWHealth health record and pharmacy record will be ended. I also understand my revocation will not affect any disclosures that were made prior to processing the revocation request.
By selecting “I agree to the terms”, I attest that I have read and understand the language in this document.
By selecting “I agree to the terms”, I agree to designate the person named in this digital form as my MyBSWHealth proxy, thereby allowing them access to my MyBSWHealth health records and pharmacy records.
By selecting “I agree to the terms”, I authorize BSWH to release the information contained in my MyBSWHealth health record and pharmacy record to my designated proxy via MyBSWHealth.
I understand that my answer will be captured and recorded.
';\r\nexport const INITIATE_REQUEST_ACEEPT_GRANT_FALLBACK_TERMS = '
I understand that if I accept, I will be able to access the person named in this digital form’s health records and pharmacy records through my MyBSWHealth account.
I understand that the medical information in this person’s MyBSWHealth health records is obtained from their electronic medical record and may include information from all BSWH facilities.
I understand that my MyBSWHealth proxy will be able to access any of the following IF they are contained in my records: (i) mental health records; (ii) drug, alcohol and substance abuse records; (iii) genetic information (including genetic test results); (iv) and HIV/AIDS test results/treatment records; or (v) psychotherapy notes.
I understand that I am accepting access to this person’s information through their MyBSWHealth health record and pharmacy record.
I understand that once information has been disclosed to me, the disclosed information may not be covered by federal privacy protections.
I understand that participation in MyBSWHealth and accepting a MyBSWHealth proxy designation is completely voluntary. I understand that I am not required to accept a MyBSWHealth proxy designation, and I am not required to authorize a proxy.
I understand that BSWH does not condition any of my health care treatment, payment or other services on whether I accept this authorization. However, I also understand that if I do not accept authorization, BSWH is not permitted to provide me with access to this person’s MyBSWHealth record.
I understand that this designation will expire upon receipt of my written notice of proxy removal to BSWH Health Information Management Department, Mail Stop 01047, 2401 S. 31st Street, Temple, TX 76508 or fax to 254-724-0119; or for HealthTexas Provider Network (HTPN) patients, Health Information Management department, 8105 N. Central Expressway, Suite 400, Box 47, Dallas, TX 75206 or fax to 214-818-9781. I understand that if I remove this designation, my authorized proxy access to this person’s MyBSWHealth health record and pharmacy record will be ended. I also understand my removal will not affect any disclosures that were made prior to processing the removal request.
By selecting “I agree to the terms”, I attest that I have read and understand the language in this document.
By selecting “I agree to the terms”, I agree to accept designation as a MyBSWHealth proxy to the person named in this digital form, thereby allowing me to access their MyBSWHealth health records and pharmacy records.
I understand that my answer will be captured and recorded. By selecting “I agree to the terms”, I authorize BSWH to grant me access to the information contained in the person named in this digital form’s MyBSWHealth health record and pharmacy record via MyBSWHealth.
I understand that my answer will be captured and recorded.
';\r\n\r\n/* Feature Id for Getting TERMS AND CONDITIONS in Proxy Management */\r\n\r\nexport const EPIC_GRANT_ADULT_FEATUREID = \"EpicGrantAdult_En\";\r\nexport const EPIC_GRANT_MINOR_FEATUREID = \"EpicGrantMinor_En\";\r\nexport const EPIC_REQUEST_ADULT_FEATUREID = \"EpicRequestAdult_En\";\r\nexport const EPIC_REQUEST_MINOR_FEATUREID = \"EpicRequestMinor_En\";\r\n\r\nexport const RX_GRANT_ADULT_FEATUREID = \"RxGrantAdult_En\";\r\nexport const RX_GRANT_MINOR_FEATUREID = \"RxGrantMinor_En\";\r\nexport const RX_REQUEST_ADULT_FEATUREID = \"RxRequestAdult_En\";\r\nexport const RX_REQUEST_MINOR_FEATUREID = \"RxRequestMinor_En\";\r\n\r\nexport const RX_EPIC_GRANT_ADULT_FEATUREID = \"RXEpicGrantAdult_En\";\r\nexport const RX_EPIC_GRANT_MINOR_FEATUREID = \"RXEpicGrantMinor_En\";\r\nexport const RX_EPIC_REQUEST_ADULT_FEATUREID = \"RXEpicRequestAdult_En\";\r\n//export const RX_EPIC_REQUEST_MINOR_FEATUREID = \"RXEpicRequestMinor_En\";\r\n\r\nexport const EPIC_GRANT_ACCEPT_ADULT_FEATUREID = \"EpicGrantAcceptAdult_En\";\r\nexport const RX_GRANT_ACCEPT_ADULT_FEATUREID = \"RxGrantAcceptAdult_En\";\r\nexport const RX_EPIC_GRANT_ACCEPT_ADULT_FEATUREID = \"RxEpicGrantAcceptAdult_En\";\r\nexport const EPIC_REQUEST_ACCEPT_ADULT_FEATUREID = \"EpicRequestAcceptAdult_En\";\r\nexport const RX_REQUEST_ACCEPT_ADULT_FEATUREID = \"AdultGrantProxyAttestation_En\"; //\"RxRequestAcceptAdult_En\";\r\nexport const RX_EPIC_REQUEST_ACCEPT_ADULT_FEATUREID = \"RxEpicRequestAcceptAdult_En\";\r\n\r\n/* Combined feature Ids */\r\nexport const INITIATE_GRANT_APPROVE_REQUEST_FEATUREID = \"AdultGrantProxyAttestation_En\";\r\nexport const INITIATE_REQUEST_ACEEPT_GRANT_FEATUREID = \"AdultAcceptProxyAttestation_En\";\r\nexport const RX_EPIC_REQUEST_MINOR_FEATUREID = \"RXEpicRequestMinor_En\";\r\n\r\nexport const EPIC = \"epic\";\r\nexport const GRANT = \"grant\";\r\nexport const REQUEST = \"request\";\r\nexport const REQUESTV2 = \"request.v2\";\r\nexport const RX = \"rx\";\r\nexport const RXEPIC = \"rx,epic\";\r\nexport const EPICRX = \"epic,rx\";\r\nexport const ACCEPT = \"accept\";\r\nexport const DECLINE = \"decline\";\r\nexport const RXREQUEST = \"rx-request\";\r\nexport const EPICREQUEST = \"epic-request\";\r\n\r\n//PROXYINFO STATUSES\r\nexport const PENDING_STATUS = \"pending\";\r\nexport const APPROVED_STATUS = \"approved\";\r\nexport const EXPIRED_STATUS = \"expired\";\r\nexport const CANCELLED_STATUS = \"cancelled\";\r\nexport const DECLINED_STATUS = \"declined\";\r\n\r\n//SURVEY STATUSES\r\nexport const NOT_STARTED = 'notstarted';\r\nexport const INCOMPLETE = 'incomplete';\r\nexport const COMPLETE = 'complete';\r\nexport const NOT_ENROLLED = 'notenrolled'\r\n\r\nexport const ONBOARDING_FLOW = 'onboarding-flow';\r\nexport const ShowThriveTooltip = 'ShowThriveTooltip';\r\n\r\nexport const inHomeVerifyErrors = Object.freeze({\r\n TimeAlreadyBooked: \"TimeAlreadyBooked\"\r\n})\r\n\r\nexport const inHomeWhereErrors = Object.freeze({\r\n noVax: \"noVax\",\r\n notInServiceArea: \"notInServiceArea\",\r\n notValidZip: \"notValidZip\",\r\n other: \"other\"\r\n})\r\n\r\n//SCREEN BREAKPOINTS\r\nexport const XS_MOBILE = 'XS';\r\nexport const SM_MOBILE = 'SM';\r\nexport const MD_TABLET = 'MD';\r\nexport const LG_TABLET = 'LG';\r\nexport const XL_DESKTOP = 'XL';\r\nexport const XXL_DESKTOP = 'XXL';\r\n\r\n//PRIVACY CONSTANTS\r\nexport const Privacy_HealthPlan = 'Privacy_HealthPlan-En';\r\nexport const Privacy_MyBswh = 'BswDigitalPrivacyPolicy';\r\nexport const Privacy_MyChart = 'Privacy_MyChart-En';\r\nexport const Privacy_HealthPlan_FallBack_Text = \"Your privacy is important to us. The information you provide on this web site is protected by federal laws. To learn more about how your rights to privacy are being protected, \";\r\nexport const Privacy_MyBswh_FallBack_Text = \"Your privacy is important to us. The information you provide on this web site is protected by federal laws. To learn more about how your rights to privacy are being protected, \";\r\nexport const Privacy_MyChart_FallBack_Text = \"Your privacy is important to us. The information you provide on this web site is protected by federal laws. To learn more about how your rights to privacy are being protected, \";\r\nexport const Privacy_MyBswh_VersionId = '1';\r\n\r\n//CAREGAP PROCEDURE TYPES\r\nexport const A1C = \"A1C\";\r\nexport const AWF = \"Annual Wellness Visit\";\r\nexport const CrC = \"Colorectal Cancer\";\r\nexport const BP = \"Blood Pressure\";\r\n\r\n//Patient ID Types\r\nexport const EPI = 'EPI';\r\nexport const ChartLoginIdType = 'MYCHARTLOGIN';\r\n\r\n//A1C Campaign Labels\r\nexport const A1cScreeningOptions = {\r\n Yes: 'Yes, I have had one',\r\n No: 'No, let’s set one up',\r\n DontNeed: 'I don’t need an A1c screening'\r\n};","import { put, call, fork, all, select, takeLatest } from \"redux-saga/effects\";\r\nimport moment from 'moment-timezone';\r\nimport { connect, Connect, useSelector } from \"react-redux\";\r\nimport { withRouter } from 'react-router';\r\nimport { instanceOf } from \"prop-types\";\r\nimport * as queryString from 'query-string';\r\nimport * as IDTypes from \"../constants/PatientIDTypes\";\r\nimport * as React from \"react\";\r\nimport { logAndylitics, log, logAPI } from \"../api/andyliticsApi\";\r\nimport { hydratePharmacyUser, hydrateProxyUser } from \"../reducers/domainReducer\";\r\nimport { getFirstName } from \"./formatting\";\r\n\r\nconst CENTRAL_TIME_ZONE = \"America/Chicago\";\r\n\r\n\r\nexport const hpAPIBaseURL = () => {\r\n var oState = window.store.getState();\r\n\r\n if (window.location.href.toLocaleLowerCase().includes(\"localhost\")) {\r\n if (oState.domain.pre == \"HR\") {\r\n var hpServicesSpecificUrl = buildUrl(window.serverData.data.hpServicesUrl, \"\");\r\n return hpServicesSpecificUrl;\r\n }\r\n }\r\n\r\n var sRet = ciReplace(window.serverData.data.hpGatewayUrl, \"WTPA\", oState.domain.pre);\r\n return sRet;\r\n};\r\n\r\nexport const hrAPIBaseURL = () => {\r\n var prefix = \"HR\";\r\n\r\n if (window.location.href.toLocaleLowerCase().includes(\"localhost\")) {\r\n var hpServicesSpecificUrl = buildUrl(window.serverData.data.hpServicesUrl, \"\");\r\n return hpServicesSpecificUrl;\r\n }\r\n\r\n var sRet = ciReplace(window.serverData.data.hpGatewayUrl, \"WTPA\", prefix);\r\n return sRet;\r\n};\r\n\r\n\r\nexport const ciReplace = (sStringToReplaceIn, sStringToReplace, sStringToReplaceWith) => {\r\n var regEx = new RegExp(sStringToReplace, \"ig\");\r\n //debugger;\r\n return sStringToReplaceIn.replace(regEx, sStringToReplaceWith);\r\n}\r\n\r\n\r\n\r\nexport const getURLPath = (serverURL = null) => {\r\n //debugger;\r\n if (typeof window !== 'undefined') {\r\n //debugger;\r\n return window.location.pathname;\r\n }\r\n else {\r\n //debugger;\r\n return serverURL;\r\n }\r\n};\r\n\r\n\r\nexport const getMyChartCookieName = () => {\r\n var sName = 'BSWSSO';\r\n if (window.serverData.data.environment.toLowerCase() == \"prod\") {\r\n return sName;\r\n }\r\n sName += \"-\" + window.serverData.data.environment;\r\n return sName;\r\n}\r\n\r\nexport const getDomain = (serverURL) => {\r\n var sRet = \"\";\r\n var iDot = 0;\r\n if (typeof window !== \"undefined\") {\r\n sRet = window.location.hostname;\r\n iDot = sRet.indexOf(\".\");\r\n if (iDot > 0) {\r\n sRet = sRet.substring(iDot + 1);\r\n }\r\n return sRet;\r\n }\r\n else {\r\n if (serverURL) {\r\n //console.log(\"getDomain staritng with: \" + serverURL);\r\n var iStart = serverURL.indexOf(\"//\");\r\n //console.log(\"getDomain iStart = \" + iStart);\r\n var iEnd = serverURL.indexOf(\"/\", iStart + 2);\r\n var iEnd2 = serverURL.indexOf(\":\", iStart + 2);\r\n if (iEnd2 > 0) {\r\n if (iEnd2 < iEnd) {\r\n iEnd = iEnd2;\r\n }\r\n }\r\n if (iEnd < 1) {\r\n iEnd = serverURL.length + 1;\r\n }\r\n //console.log(\"getDomain iEnd = \" + iEnd);\r\n sRet = serverURL.substring(iStart + 2, iEnd);\r\n //console.log(\"getDomain parsed = \" + sRet + \" Parsed length = \" + sRet.length);\r\n iDot = sRet.indexOf(\".\");\r\n if (iDot > 0) {\r\n sRet = sRet.substring(iDot + 1);\r\n }\r\n return sRet;\r\n }\r\n }\r\n};\r\n\r\nexport const splitIntoRowsOf = (arrayObj, iMaxPerRow) => {\r\n if (arrayObj === null || typeof arrayObj === \"undefined\") { return null; }\r\n //debugger;\r\n try {\r\n var newArray = [];\r\n //debugger;\r\n for (var i = 0; i < arrayObj.length; i = i + iMaxPerRow) {\r\n //debugger;\r\n newArray.push(arrayObj.slice(i, i + iMaxPerRow));\r\n //debugger;\r\n }\r\n return newArray;\r\n }\r\n catch (ex) {\r\n //debugger;\r\n return arrayObj;\r\n }\r\n};\r\n\r\n\r\nexport const mergeArrays = (array1, array2) => {\r\n if (typeof array1 === \"undefined\") { array1 = []; }\r\n if (typeof array2 === \"undefined\") { array2 = []; }\r\n var ret = array1.concat(array2.filter(function (item) { return array1.indexOf(item) < 0; }));\r\n return ret;\r\n};\r\n\r\nexport const getUnhydratedProviderNPIs = (arrayNPI, arrayHydratedProviders) => {\r\n //debugger;\r\n if (typeof arrayNPI === \"undefined\") { arrayNPI = []; }\r\n if (typeof arrayHydratedProviders === \"undefined\") { arrayHydratedProviders = []; }\r\n var ret = arrayNPI.filter(function (item) { return typeof arrayHydratedProviders.find(function (prov) { return prov.npi === item; }) === \"undefined\"; });\r\n if (ret.length > 0) {\r\n //debugger;\r\n }\r\n return ret;\r\n};\r\n\r\nexport const getFormattedDate = (date) => {\r\n if (!isValidDate(date)) { return null; }\r\n var year = date.getFullYear();\r\n\r\n var month = (1 + date.getMonth()).toString();\r\n month = month.length > 1 ? month : '0' + month;\r\n\r\n var day = date.getDate().toString();\r\n day = day.length > 1 ? day : '0' + day;\r\n\r\n return month + '/' + day + '/' + year;\r\n};\r\n\r\nexport const isAndroid = () => {\r\n if (typeof navigator !== 'undefined' && /android/i.test(navigator.userAgent)) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nexport const isIos = () => {\r\n if (typeof navigator !== 'undefined' && /iPhone|iPad|iPod/i.test(navigator.userAgent))\r\n return true;\r\n return false;\r\n};\r\n\r\nexport const isIPad = () => {\r\n if (typeof navigator !== 'undefined' && /iPad/i.test(navigator.userAgent))\r\n return true;\r\n return false;\r\n};\r\n\r\n\r\nexport const isMobile = () => {\r\n return isAndroid() || isIos() || isIPad();\r\n}\r\n\r\n\r\nexport const isValidZipCode = (zipCode) => {\r\n try {\r\n zipCode = zipCode || \"\";\r\n const regex = /^\\d{1,5}$/; //ZipCode is 5 digit long and only number\r\n return regex.test(zipCode) && zipCode.length === 5;\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n};\r\n\r\nexport const isValidDate = (thisDate) => {\r\n try {\r\n if (typeof thisDate === \"string\") {\r\n const workDate = new Date(thisDate);\r\n return (typeof thisDate !== \"undefined\") && (thisDate !== null) && (thisDate !== \"\") && (!isNaN(workDate.valueOf()));\r\n }\r\n else {\r\n return (typeof thisDate !== \"undefined\") && (thisDate !== null) && (thisDate !== \"\") && (!isNaN(thisDate.valueOf()));\r\n }\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n};\r\n\r\nexport const isFutureDate = (thisDate) => {\r\n try {\r\n const dateValue = new Date(thisDate);\r\n var currentDate = new Date();\r\n return isValidDate(thisDate) && dateValue > currentDate;\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n};\r\n\r\nexport const isEmptyString = (thisString) => {\r\n try {\r\n return (thisString === null || thisString.trim() === \"\");\r\n }\r\n catch (e) {\r\n return true;\r\n }\r\n};\r\n\r\nexport const isValidEmail = (thisEmail) => {\r\n try {\r\n thisEmail = thisEmail || \"\";\r\n const regex = /(.+)@(.+){2,}\\.(.+){2,}/;\r\n return regex.test(thisEmail);\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n};\r\n\r\nexport const isValidPassword = (thisPassword) => {\r\n try {\r\n thisPassword = thisPassword || \"\";\r\n const hasCapital = (/([A-Z]+)/g.test(thisPassword)) ? true : false;\r\n const hasLower = (/([a-z]+)/g.test(thisPassword)) ? true : false;\r\n const hasSpecial = (/[!@#$ %^&* (),.? \":{}|<>/[`~|\\]\\\\0-9]/g.test(thisPassword)) ? true : false;\r\n const hasReqLength = thisPassword.length > 7 ? true : false;\r\n return hasCapital && hasLower && hasSpecial && hasReqLength;\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n};\r\n\r\nexport const isObjectEmpty = (thisObject) => {\r\n try {\r\n return Object.keys(thisObject).length === 0;\r\n }\r\n catch (e) {\r\n return true;\r\n }\r\n};\r\n\r\n\r\n// Caution... don't use this on big objects... the intention is for use copying nested initial state objects\r\nexport const deepCopy = (src) => {\r\n let target = {};\r\n for (let prop in src) {\r\n if (src.hasOwnProperty(prop)) {\r\n if (!isObjectEmpty(src[prop])) {\r\n target[prop] = deepCopy(src[prop]);\r\n }\r\n else {\r\n target[prop] = src[prop];\r\n }\r\n\r\n }\r\n }\r\n return target;\r\n};\r\n\r\n\r\n// Here is a simple wrapper function to protect your Sagas against 401s, 404s or 500s, where we might want to handle those conditions more gracefully\r\nexport const safeCall = (saga, ...args) => call(function* () {\r\n var oResult;\r\n try {\r\n //debugger;\r\n oResult = yield call(saga, ...args);\r\n //debugger;\r\n return { err: false, result: oResult };\r\n } catch (err) {\r\n // don't really want this here. this function is designed to fail\r\n //debugger;\r\n return { err: true, result: err };\r\n }\r\n});\r\n\r\n\r\nexport const superFetch = (url, params, start, activityCode) => {\r\n try {\r\n var oResponse = null;\r\n return fetch(url, params).then(response => {\r\n oResponse = response;\r\n if (response == null) {\r\n logAPI(activityCode + \".Failure\", start, url, { err: \"true\", message: \"response is null!\", response: response }, \"Failure\");\r\n return Promise.reject(response);\r\n }\r\n else if (response.length === 0)\r\n {\r\n logAPI(activityCode + \".Failure\", start, url, { err: \"true\", message: \"response is zero length!\", response: response }, \"Failure\");\r\n return Promise.reject(response);\r\n }\r\n else if (response === {}) {\r\n logAPI(activityCode + \".Failure\", start, url, { err: \"true\", message: \"response is empty object!\", response: response }, \"Failure\");\r\n return Promise.reject(response);\r\n }\r\n else if (response.status >= 200 && response.status < 300) {\r\n try {\r\n var oRet = response.json();\r\n logAPI(activityCode, start, url, oRet, \"Success\");\r\n return Promise.resolve(oRet);\r\n }\r\n catch (parseEx) {\r\n logAPI(activityCode + \".Failure\", start, url, { err: \"true\", message: \"json parse failure!\", response: response, exception: parseEx }, \"Failure\");\r\n return Promise.reject({ err: \"true\", message: \"json parse failure!\", response: response, exception: parseEx });\r\n }\r\n \r\n } else {\r\n logAPI(activityCode + \".Failure\", start, url, { err: \"true\", message: \"response status code invalid!\", response: response } , \"Failure\");\r\n return Promise.reject(response);\r\n }\r\n }).catch(err => {\r\n //debugger;\r\n logAPI(activityCode + \".Failure\", start, url, { err: \"true\", message: \"unknown error in fetch\", exception: err, response: oResponse }, \"Failure\");\r\n return Promise.reject({ message: \"Unhandled fetch error\", error: err });\r\n });\r\n }\r\n catch (mainEx) {\r\n logAPI(activityCode + \".Failure\", start, url, { err: \"true\", message: \"unknown error in superfetch\", exception: mainEx }, \"Failure\");\r\n return Promise.reject({ message: \"Unhandled mainEx error.\", error: mainEx });\r\n }\r\n}\r\n\r\n\r\nexport const dateAsUTCString = (oDate) => {\r\n return padLeftZeros(oDate.getUTCFullYear().toString(), 4) + \"-\" +\r\n padLeftZeros(oDate.getUTCMonth().toString() + 1, 2) + \"-\" +\r\n padLeftZeros(oDate.getUTCDate().toString(), 2) + \"T\" +\r\n padLeftZeros(oDate.getUTCHours().toString(), 2) + \":\" +\r\n padLeftZeros(oDate.getUTCMinutes().toString(), 2) + \":\" +\r\n padLeftZeros(oDate.getUTCSeconds().toString(), 2) + \"Z\";\r\n\r\n};\r\n\r\n\r\nexport const padLeftZeros = (sString, iLen) => {\r\n return padLeft(sString, iLen, '0');\r\n};\r\n\r\n\r\nexport const padLeft = (sString, iLen, sPadChar) => {\r\n while (sString.length < iLen) {\r\n sString = sPadChar + sString;\r\n }\r\n return sString;\r\n};\r\n\r\n\r\n\r\nexport const trimComma = (sString) => {\r\n if (sString && sString.length > 0) {\r\n sString = sString.trim();\r\n sString = sString.replace(/(^,)|(,$)/g, \"\");\r\n }\r\n return sString;\r\n};\r\n\r\n\r\nexport const lCase = (sString) => {\r\n if (sString) {\r\n sString = sString.toLowerCase();\r\n }\r\n return sString;\r\n};\r\n\r\n\r\nexport const usersAreTheSame = (primaryUser, myChartProxyUser) => {\r\n try {\r\n if (primaryUser && !myChartProxyUser) {\r\n return true;\r\n }\r\n if (primaryUser && myChartProxyUser) {\r\n if (primaryUser.externalId === myChartProxyUser.externalId && lCase(primaryUser.myChartId) === lCase(myChartProxyUser.myChartId)) {\r\n return true;\r\n }\r\n }\r\n }\r\n catch (ex) {\r\n\r\n }\r\n return false;\r\n};\r\n\r\n\r\n\r\nexport const timeformat = (date) => {\r\n try {\r\n if (date) {\r\n var h = date.getHours();\r\n var m = date.getMinutes();\r\n var x = h >= 12 ? 'PM' : 'AM';\r\n h = h % 12;\r\n h = h ? h : 12;\r\n m = m < 10 ? '0' + m : m;\r\n var mytime = h + ':' + m + ' ' + x;\r\n return mytime;\r\n }\r\n } catch (e) {\r\n }\r\n}\r\n\r\nexport const calculateDateInDays = (date1, date2) => {\r\n try {\r\n var diffc = date1.getTime() - date2.getTime();\r\n var days = Math.round(Math.abs(diffc / (1000 * 60 * 60 * 24)));\r\n return days;\r\n }\r\n catch (e) {\r\n }\r\n}\r\n\r\nexport const formatDate = (date) => {\r\n try {\r\n if (date) {\r\n var month = '' + (date.getMonth() + 1),\r\n day = '' + date.getDate(),\r\n year = date.getFullYear();\r\n\r\n if (month.length < 2) month = '0' + month;\r\n if (day.length < 2) day = '0' + day;\r\n month = getMonthName(month);\r\n return [month, day].join(' ');\r\n }\r\n } catch (e) {\r\n //debugger;\r\n }\r\n};\r\n\r\nexport const formatDateForSafari = (date) => {\r\n try {\r\n if (date) {\r\n return date.replace(/-/g, '/').replace('T', ' ');\r\n }\r\n } catch (e) {\r\n //debugger;\r\n }\r\n};\r\n\r\nexport const getRootRef = (oObject) => {\r\n if (oObject.getWrappedInstance) {\r\n return getRootRef(oObject.getWrappedInstance() || oObject);\r\n }\r\n return oObject;\r\n};\r\n\r\n\r\nexport const toJSDate = (dateTime, dateFormat) => {\r\n try {\r\n if (dateTime) {\r\n if (typeof window !== 'undefined') { \r\n return dateFormat ? moment(dateTime, dateFormat).toDate() : moment(dateTime).toDate();\r\n } else {\r\n return new Date(dateTime);\r\n }\r\n }\r\n } catch (e) {\r\n }\r\n}\r\n\r\nexport const getDateFormats = () => {\r\n return ['YYYY-MM-DD HH:mm:ss', 'YYYY-M-D HH:mm:ss', 'YYYY-MM-D HH:mm:ss', 'YYYY-M-DD HH:mm:ss'];\r\n};\r\n\r\n\r\nexport const addMonths = (dateTime, iMonths) => {\r\n let momentDate = moment(dateTime);\r\n return momentDate.add(iMonths, 'months').toDate();\r\n}\r\n\r\nexport const addDays = (dateTime, iDays) => {\r\n let momentDate = moment(dateTime);\r\n return momentDate.add(iDays, 'days').toDate();\r\n}\r\n\r\n\r\nexport const dateSimpleFormat = (dateTime) => {\r\n let momentDate = moment(dateTime);\r\n return momentDate.format(\"YYYY-MM-DD\");\r\n}\r\n\r\nexport const getSpecificDateFormat = (dateTime) => {\r\n let momentDate = moment(dateTime);\r\n return momentDate.format(\"MM-DD-YYYY\");\r\n}\r\n\r\nexport const getDateStrByFormat = (dateTime, format) => {\r\n let momentDate = moment(dateTime);\r\n return momentDate.format(format ? format : \"YYYY-MM-DD\");\r\n}\r\n\r\nexport const getMonthFullName = (monthValue, format) => {\r\n try {\r\n if (monthValue) {\r\n if (typeof window !== 'undefined') {\r\n return format ? moment(monthValue, 'MM').format(format) : moment(monthValue, 'MM').format('MMMM');\r\n }\r\n }\r\n return \"\"\r\n } catch (e) {\r\n return \"\";\r\n }\r\n};\r\n\r\nexport const getMonthName = (month) => {\r\n switch (month) {\r\n case \"01\":\r\n return \"JAN\";\r\n break;\r\n case \"02\":\r\n return \"FEB\";\r\n break;\r\n case \"03\":\r\n return \"MAR\";\r\n break;\r\n case \"04\":\r\n return \"APR\";\r\n break;\r\n case \"05\":\r\n return \"MAY\";\r\n break;\r\n case \"06\":\r\n return \"JUN\";\r\n break;\r\n case \"07\":\r\n return \"JUL\";\r\n break;\r\n case \"08\":\r\n return \"AUG\";\r\n break;\r\n case \"09\":\r\n return \"SEP\";\r\n break;\r\n case \"10\":\r\n return \"OCT\";\r\n break;\r\n case \"11\":\r\n return \"NOV\";\r\n break;\r\n case \"12\":\r\n return \"DEC\";\r\n break;\r\n default:\r\n return \"\";\r\n break;\r\n }\r\n}\r\n\r\nexport const isDateAfter = (date, compareToDate) => {\r\n return moment(date).isAfter(compareToDate);\r\n}\r\n\r\nexport const formatTimeString = (timeString) => {\r\n let ret = \"\";\r\n\r\n if (timeString.indexOf(\":\") > 0) {\r\n let parts = timeString.split(\":\");\r\n let hours = parseInt(parts[0]);\r\n let AMPM = hours < 12 ? \"AM\" : \"PM\";\r\n hours = hours > 12 ? hours - 12 : hours;\r\n let minutes = parts[1].toString().padStart(2, \"0\");\r\n ret = `${hours}:${minutes} ${AMPM}`;\r\n }\r\n\r\n return ret;\r\n}\r\n\r\n\r\n//let isBlocked = false;\r\n\r\n//export const block = (historyObject, prompt = false) => {\r\n// debugger;\r\n\r\n// let historyScope = historyObject.listen[\"[[Scopes]]\"];\r\n// debugger;\r\n// const unblock = historyScope[0].transitionManager.setPrompt(prompt);\r\n\r\n// if (!isBlocked) {\r\n// historyScope[0].checkDOMListeners(1);\r\n// isBlocked = true;\r\n// }\r\n\r\n// return () => {\r\n// if (this.isBlocked) {\r\n// this.isBlocked = false;\r\n// historyScope[0].checkDOMListeners(-1);\r\n// }\r\n\r\n// return unblock();\r\n// };\r\n//}\r\n\r\nexport const getStates = () => {\r\n return [\r\n { value: 'AL', label: 'Alabama' },\r\n { value: 'AK', label: 'Alaska' },\r\n { value: 'AZ', label: 'Arizona' },\r\n { value: 'AR', label: 'Arkansas' },\r\n { value: 'CA', label: 'California' },\r\n { value: 'CO', label: 'Colorado' },\r\n { value: 'CT', label: 'Connecticut' },\r\n { value: 'DE', label: 'Delaware' },\r\n { value: 'FL', label: 'Florida' },\r\n { value: 'GA', label: 'Georgia' },\r\n { value: 'HI', label: 'Hawaii' },\r\n { value: 'ID', label: 'Idaho' },\r\n { value: 'IL', label: 'Illinois' },\r\n { value: 'IN', label: 'Indiana' },\r\n { value: 'IA', label: 'Iowa' },\r\n { value: 'KS', label: 'Kansas' },\r\n { value: 'KY', label: 'Kentucky' },\r\n { value: 'LA', label: 'Louisiana' },\r\n { value: 'ME', label: 'Maine' },\r\n { value: 'MD', label: 'Maryland' },\r\n { value: 'MA', label: 'Massachusetts' },\r\n { value: 'MI', label: 'Michigan' },\r\n { value: 'MN', label: 'Minnesota' },\r\n { value: 'MS', label: 'Mississippi' },\r\n { value: 'MO', label: 'Missouri' },\r\n { value: 'MT', label: 'Montana' },\r\n { value: 'NE', label: 'Nebraska' },\r\n { value: 'NV', label: 'Nevada' },\r\n { value: 'NH', label: 'New Hampshire' },\r\n { value: 'NJ', label: 'New Jersey' },\r\n { value: 'NM', label: 'New Mexico' },\r\n { value: 'NY', label: 'New York' },\r\n { value: 'NC', label: 'North Carolina' },\r\n { value: 'ND', label: 'North Dakota' },\r\n { value: 'OH', label: 'Ohio' },\r\n { value: 'OK', label: 'Oklahoma' },\r\n { value: 'OR', label: 'Oregon' },\r\n { value: 'PA', label: 'Pennsylvania' },\r\n { value: 'RI', label: 'Rhode Island' },\r\n { value: 'SC', label: 'South Carolina' },\r\n { value: 'SD', label: 'South Dakota' },\r\n { value: 'TN', label: 'Tennessee' },\r\n { value: 'TX', label: 'Texas' },\r\n { value: 'UT', label: 'Utah' },\r\n { value: 'VT', label: 'Vermont' },\r\n { value: 'VA', label: 'Virginia' },\r\n { value: 'WA', label: 'Washington' },\r\n { value: 'WV', label: 'West Virginia' },\r\n { value: 'WI', label: 'Wisconsin' },\r\n { value: 'WY', label: 'Wyoming' },\r\n { value: 'AS', label: 'American Samoa' },\r\n { value: 'DC', label: 'District of Columbia' },\r\n { value: 'FM', label: 'Federated States of Micronesia' },\r\n { value: 'GU', label: 'Guam' },\r\n { value: 'MH', label: 'Marshall Islands' },\r\n { value: 'MP', label: 'Northern Mariana Islands' },\r\n { value: 'PW', label: 'Palau' },\r\n { value: 'PR', label: 'Puerto Rico' },\r\n { value: 'VI', label: 'Virgin Islands' }\r\n ];\r\n};\r\n\r\nexport const getACOs = () => {\r\n return [\r\n { id: 'AEBH', label: 'Aetna' },\r\n { id: 'AEFI', label: 'Aetna' },\r\n { id: 'AEMA', label: 'Aetna' },\r\n { id: 'AESI', label: 'Aetna' },\r\n { id: 'BCBS', label: 'Blue Cross Blue Shield' },\r\n { id: 'BCDT', label: 'Blue Cross Blue Shield' },\r\n { id: 'CGCT', label: 'Cigna' },\r\n { id: 'CGNT', label: 'Cigna' },\r\n { id: 'DART', label: 'Healthscope' },\r\n { id: 'HUMA', label: 'Humana' },\r\n { id: 'MSSP', label: 'Medicare' },\r\n { id: 'UHAC', label: 'UnitedHealth' }\r\n ];\r\n};\r\n\r\nexport const isSafari = () => {\r\n let userAgent = (typeof navigator !== 'undefined' && navigator.userAgent) ? navigator.userAgent : \"\";\r\n let isSafari = (userAgent && !(/CriOS/i.test(userAgent)) && !(/FxiOS/i.test(userAgent)) && /^((?!chrome|android).)*safari/i.test(userAgent)) ? true : false;\r\n return isSafari;\r\n};\r\n\r\nexport const getSafariBroswerVersion = (isSafari) => {\r\n let version = 0;\r\n try {\r\n if (isSafari && typeof navigator !== 'undefined' && navigator.appVersion) {\r\n let ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\r\n if (ua && !ua.indexOf(\"Chrome\") > -1) {\r\n if (/trident/i.test(M[1])) {\r\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\r\n return { name: 'IE', version: (tem[1] || '') };\r\n }\r\n if (M[1] === 'Chrome') {\r\n tem = ua.match(/\\bOPR|Edge\\/(\\d+)/);\r\n if (tem !== null) { return { name: 'Opera', version: tem[1] }; }\r\n }\r\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\r\n if ((tem = ua.match(/version\\/(\\d+)/i)) !== null) { M.splice(1, 1, tem[1]); }\r\n version = M[1];\r\n }\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n return version;\r\n};\r\n\r\nexport const getBroswerVersion = () => {\r\n let version = 0;\r\n try {\r\n if (typeof navigator !== 'undefined' && navigator.appVersion) {\r\n let ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\r\n\r\n if (/trident/i.test(M[1])) {\r\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\r\n return { name: 'IE', version: (tem[1] || '') };\r\n }\r\n if (M[1] === 'Chrome') {\r\n tem = ua.match(/\\bOPR|Edge\\/(\\d+)/);\r\n if (tem !== null) { return { name: 'Opera', version: tem[1] }; }\r\n }\r\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\r\n if ((tem = ua.match(/version\\/(\\d+)/i)) !== null) { M.splice(1, 1, tem[1]); }\r\n version = M[1];\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n return version;\r\n};\r\n\r\nexport const dateStringFormat = (dateTime, formatStr) => {\r\n if (typeof window !== 'undefined' && dateTime) {\r\n let momentDate = moment(dateTime);\r\n let fmtStr = formatStr ? formatStr : \"YYYY-MM-DD\";\r\n return momentDate.format(fmtStr);\r\n }\r\n return;\r\n};\r\n\r\nexport const validateManualDate = (dateTime, formatStr) => {\r\n if (typeof window !== 'undefined' && dateTime) {\r\n let isValid = moment(dateTime, formatStr, true).isValid();\r\n return isValid;\r\n }\r\n return false;\r\n};\r\n\r\nexport const isMobileQuery = (location) => {\r\n if (typeof location !== 'undefined' && location) {\r\n const params = queryString.parse(location.search);\r\n if (params && params.mobile === 'true') {\r\n return true;\r\n }\r\n else {\r\n let isMobileUrl = typeof window !== 'undefined' && window.location && window.location.href.indexOf('mobile=true') > 0 ? true : false;\r\n return isMobileUrl;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nexport const isMobileQueryDisabled = (location) => {\r\n if (typeof location !== 'undefined' && location) {\r\n const params = queryString.parse(location.search);\r\n if (params && params.mobile === 'false') {\r\n return true;\r\n }\r\n else {\r\n let isMobileUrl = typeof window !== 'undefined' && window.location && window.location.href.indexOf('mobile=false') > 0 ? true : false;\r\n return isMobileUrl;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nexport const isRegistrationQuery = (location) => { //created seperate fof like the above isMobileQuery\r\n if (typeof location !== 'undefined' && location) {\r\n const params = queryString.parse(location.search);\r\n if (params && params.registration === 'true') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nexport const isNewerVersion = (oldVer, newVer) => {\r\n if (oldVer && newVer) {\r\n const oldParts = oldVer.split('.');\r\n const newParts = newVer.split('.');\r\n for (var i = 0; i < newParts.length; i++) {\r\n const a = parseInt(newParts[i]) || 0;\r\n const b = parseInt(oldParts[i]) || 0;\r\n if (a > b) return true;\r\n if (a < b) return false;\r\n }\r\n }\r\n return false;\r\n};\r\n\r\nexport const setFocus = (inputId, condition) => {\r\n if (typeof condition === 'undefined' || condition) {\r\n const input = document.querySelector('#' + inputId);\r\n if (input) {\r\n input.focus();\r\n }\r\n }\r\n};\r\n\r\nexport const setItemToSessionStorage = (key, valueToSet) => {\r\n if (window && window.sessionStorage) {\r\n const value = window.sessionStorage.getItem(key);\r\n if (value === null || value !== valueToSet)\r\n window.sessionStorage.setItem(key, valueToSet);\r\n }\r\n};\r\n\r\nexport const getItemFromSessionStorage = (key) => {\r\n if (window && window.sessionStorage)\r\n return window.sessionStorage.getItem(key);\r\n};\r\n\r\nexport const clearItemFromSessionStorage = (key) => {\r\n if (window && window.sessionStorage)\r\n window.sessionStorage.removeItem(key);\r\n};\r\n\r\nexport const clearItemFromSessionStorageWithStrContains = (key) => {\r\n if (window && window.sessionStorage && key) {\r\n for (let skey in window.sessionStorage) {\r\n if (window.sessionStorage.hasOwnProperty(skey) && skey && skey.indexOf(key) > -1) {\r\n window.sessionStorage.removeItem(skey);\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const buildUrl = (domainRoot, urlPath, queryParams) => {\r\n if (domainRoot.charAt(domainRoot.length - 1) !== \"/\") {\r\n domainRoot = domainRoot + \"/\";\r\n }\r\n if (urlPath.charAt(0) === \"/\") {\r\n urlPath = urlPath.substring(1);\r\n }\r\n var workUrl = domainRoot + urlPath;\r\n if (queryParams && queryParams.length > 0) {\r\n queryParams.forEach((parm, index) => {\r\n if (parm.key) {\r\n if (workUrl.toLowerCase().indexOf(parm.key.toLowerCase()) == -1) {\r\n if (workUrl.indexOf(\"?\") == -1) {\r\n workUrl += \"?\";\r\n }\r\n else {\r\n workUrl += \"&\";\r\n }\r\n workUrl += parm.key + \"=\" + encodeURIComponent(parm.value);\r\n }\r\n }\r\n });\r\n }\r\n return workUrl;\r\n}\r\n\r\nexport const isBrowserIEOrEdge = () => {\r\n if (typeof navigator !== 'undefined' && /MSIE|Trident|Edge/i.test(navigator.userAgent))\r\n return true;\r\n return false;\r\n};\r\n\r\nexport const linkPhoneNumber = (stringWithPhoneNumber) => {\r\n const regex = /.*(\\d{3}\\.\\d{3}\\.\\d{4}).*/;\r\n const matchedPhoneNumber = stringWithPhoneNumber.match(regex) && stringWithPhoneNumber.match(regex)[1];\r\n const linkedPhoneNumber = `
${matchedPhoneNumber} `;\r\n if (matchedPhoneNumber)\r\n stringWithPhoneNumber = stringWithPhoneNumber.replace(matchedPhoneNumber, linkedPhoneNumber);\r\n return stringWithPhoneNumber;\r\n};\r\n\r\nexport const fileToBase64 = (file) => {\r\n return new Promise(resolve => {\r\n var reader = new FileReader();\r\n // Read file content on file loaded event\r\n reader.onload = function (event) {\r\n const base64String = event.target.result.replace(\"data:\", \"\").replace(/^.+,/, \"\"); // remove data url part\r\n resolve(base64String);\r\n };\r\n // Convert data to base64 \r\n reader.readAsDataURL(file);\r\n });\r\n};\r\n\r\nexport const formatRxErrorMessage = (action) => {\r\n let errorMsg = null;\r\n if (action && action.error) {\r\n if (action.error.status) {\r\n switch (action.error.status) {\r\n case 409: errorMsg = \"The request may have already been approved or declined.\"; break;\r\n default: errorMsg = \"We're sorry, we currently are unable to process this request.\"; break;\r\n }\r\n }\r\n else {\r\n errorMsg = (typeof action.error === \"string\") ? action.error : null;\r\n }\r\n }\r\n return errorMsg;\r\n};\r\n\r\nexport const getTimeZone = (dateInput) => {\r\n var dateObject = dateInput || new Date(),\r\n dateString = dateObject + \"\",\r\n tzAbbr = (\r\n dateString.match(/\\(([^\\)]+)\\)$/) || dateString.match(/([A-Z]+) [\\d]{4}$/)\r\n );\r\n if (tzAbbr) {\r\n tzAbbr = tzAbbr[1].match(/[A-Z]/g).join(\"\");\r\n }\r\n return tzAbbr;\r\n};\r\n\r\nexport const findInternalId = (IdsArray) => {\r\n const internalId = IdsArray && IdsArray.reduce(function (prevValue, currValue) {\r\n return (currValue && currValue.idType && currValue.idType.toLowerCase() === \"internal\") ? currValue.id.trim() : prevValue;\r\n }, null);\r\n return internalId;\r\n};\r\n\r\n\r\nexport const browserDetection = () => {\r\n if (typeof navigator !== 'undefined' && navigator && navigator.userAgent) {\r\n if (/Edge\\/\\d./i.test(navigator.userAgent)) {\r\n return \"Edge\";\r\n } else if (/MSIE|Trident/i.test(navigator.userAgent)) {\r\n return \"IE\";\r\n } else if (navigator.userAgent.indexOf(\"Firefox\") > -1) {\r\n return 'Firefox';\r\n } else if (navigator.userAgent.indexOf(\"CriOS\") > -1) { //Mobile IOS Chrome\r\n return 'Chrome'\r\n } else if (navigator.userAgent.indexOf(\"FxiOS\") > -1) { //Mobile IOS Firefox\r\n return 'Firefox';\r\n } else if (navigator.userAgent.indexOf(\"edg\") > -1) {\r\n return 'New Edge';\r\n } else if ((navigator.userAgent.indexOf(\"Opera\") > -1) || (navigator.userAgent.indexOf(\"OPR\") > -1)) {\r\n return 'Opera';\r\n } else if (navigator.userAgent.indexOf(\"SamsungBrowser\") > -1) {\r\n return 'Samsung Internet';\r\n } else if ((navigator.userAgent.indexOf('Mozilla/5.0') > -1 && navigator.userAgent.indexOf('Android ') > -1 &&\r\n navigator.userAgent.indexOf('AppleWebKit') > -1) && (navigator.userAgent.indexOf('Version') > -1)) {\r\n return 'Android Native'; //Mobile Android default browser\r\n } else if (!(navigator.userAgent.indexOf(\"Chrome\") > -1) && (navigator.userAgent.indexOf(\"Safari\") > -1)) {\r\n return 'Safari';\r\n } else if (navigator.userAgent.indexOf(\"Chrome\") > -1 && navigator.vendor && /Google Inc/.test(navigator.vendor)) {\r\n return 'Chrome';\r\n }\r\n }\r\n return '';\r\n};\r\n\r\n//Get current Date In Central Time Zone.\r\nexport const getCurDateInCentralTz = () => {\r\n try {\r\n return moment.tz(moment(), CENTRAL_TIME_ZONE);\r\n }\r\n catch (error) {\r\n return new Date();\r\n }\r\n};\r\n\r\n//Get convert Date In Central Time Zone.\r\nexport const convertDateToCentralTz = (dateString) => {\r\n try {\r\n return moment.tz(dateString, CENTRAL_TIME_ZONE);\r\n }\r\n catch (error) {\r\n return new Date(dateString);\r\n }\r\n};\r\n\r\n\r\n//Compare date\r\nexport const isSameDate = (srcDateString, desDateString) => {\r\n try {\r\n return moment(srcDateString).isSame(desDateString);\r\n }\r\n catch (error) {\r\n return false;\r\n }\r\n};\r\n\r\n\r\n//Get Difference in days by Central Time Zone.\r\nexport const differenceInDays = (dateString) => {\r\n try {\r\n const visitDate = convertDateToCentralTz(dateString);\r\n const visitDateMinusTime = visitDate.clone().hour(0).minute(0).second(0).millisecond(0);\r\n const now = getCurDateInCentralTz();\r\n const nowMinusTime = now.clone().hour(0).minute(0).second(0).millisecond(0);\r\n return visitDateMinusTime.diff(nowMinusTime, 'days');\r\n }\r\n catch (error) {\r\n const date1 = toJSDate(dateString);\r\n date1.setHours(0, 0, 0, 0);\r\n const currDate = new Date();\r\n currDate.setHours(0, 0, 0, 0);\r\n return calculateDateInDays(date1, currDate);\r\n }\r\n};\r\n\r\n//Get CST Time Format.\r\nexport const getCentralDateWithFormat = (dateString, format) => {\r\n return convertDateToCentralTz(dateString).format(format);\r\n};\r\n\r\n//Helpers functions to use in Video Visits.\r\nexport const subtractMinutesFromDate = (dateString, minutes) => {\r\n try {\r\n const date = convertDateToCentralTz(dateString);\r\n return date.clone().subtract(minutes, \"minutes\");\r\n }\r\n catch (error) {\r\n const date = new Date(formatDateForSafari(dateString));\r\n date.setMinutes(timeBefore.getMinutes() - minutes);\r\n return date;\r\n }\r\n};\r\n\r\nexport const addMinutesToDate = (dateString, minutes) => {\r\n try {\r\n const date = convertDateToCentralTz(dateString);\r\n return date.clone().add(minutes, \"minutes\");\r\n }\r\n catch (error) {\r\n const date = new Date(formatDateForSafari(dateString));\r\n date.setMinutes(timeBefore.getMinutes() + minutes);\r\n return date;\r\n }\r\n};\r\n\r\nexport const isVisitToday = (dateString) => {\r\n const now = getCurDateInCentralTz();\r\n const visitDate = convertDateToCentralTz(dateString);\r\n const yearInNow = now && (now.year ? now.year() : now.getFullYear ? now.getFullYear() : null);\r\n const yearInVisitDate = visitDate && (visitDate.year ? visitDate.year() : visitDate.getFullYear ? visitDate.getFullYear() : null);\r\n const monthInNow = now && (now.month ? now.month() : now.getMonth ? now.getMonth() : null);\r\n const monthInVisitDate = visitDate && (visitDate.month ? visitDate.month() : visitDate.getMonth ? visitDate.getMonth() : null);\r\n const dateInNow = now && (now.date ? now.date() : now.getDate ? now.getDate() : null);\r\n const dateInVisitDate = visitDate && (visitDate.date ? visitDate.date() : visitDate.getDate ? visitDate.getDate() : null);\r\n return (yearInNow === yearInVisitDate && monthInNow === monthInVisitDate && dateInNow === dateInVisitDate);\r\n};\r\n\r\nexport const formatCentralDate = (dateObj, format) => {\r\n return dateObj.format ? dateObj.format(format) : dateObj;\r\n};\r\n\r\nexport const isBetween = (date1Obj, date2Obj) => {\r\n if (!date1Obj || !date2Obj) return false;\r\n const now = getCurDateInCentralTz();\r\n if (now.isBetween) {\r\n return now.isBetween(date1Obj, date2Obj);\r\n }\r\n else\r\n return (now >= date1Obj && now <= date2Obj);\r\n};\r\n\r\nexport const isAfter = (dateObj) => {\r\n if (!dateObj) return false;\r\n const now = getCurDateInCentralTz();\r\n if (now.isAfter)\r\n return now.isAfter(dateObj);\r\n else\r\n return now >= dateObj;\r\n};\r\n\r\nexport const getHealthPlanByProviderKey = (healthPlans, key) => {\r\n let healthPlan = null;\r\n try {\r\n for (let pIndex = 0; pIndex < healthPlans.length; pIndex++) {\r\n const { LoginProvider } = healthPlans[pIndex];\r\n if (LoginProvider && LoginProvider.toLowerCase() === key) {\r\n healthPlan = healthPlans[pIndex];\r\n break;\r\n }\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n return healthPlan;\r\n};\r\n\r\nexport const copyText = (text) => {\r\n if (!navigator.clipboard) { //Edge browser does not support , so fallback added.\r\n fallbackCopyText(text);\r\n return;\r\n }\r\n navigator.clipboard.writeText(text).then(function () {\r\n console.log('Async: Copying to clipboard was successful!');\r\n }, function (err) {\r\n console.error('Async: Could not copy text: ', err);\r\n });\r\n};\r\n\r\nconst fallbackCopyText = (text) => {\r\n const textArea = document.createElement(\"textarea\");\r\n textArea.value = text;\r\n\r\n // Avoid scrolling to bottom\r\n textArea.style.top = \"0\";\r\n textArea.style.left = \"0\";\r\n textArea.style.position = \"fixed\";\r\n\r\n document.body.appendChild(textArea);\r\n textArea.focus();\r\n textArea.select();\r\n\r\n try {\r\n const successful = document.execCommand('copy');\r\n const msg = successful ? 'successful' : 'unsuccessful';\r\n console.log('Fallback: Copying text command was ' + msg);\r\n } catch (err) {\r\n console.error('Fallback: Oops, unable to copy', err);\r\n }\r\n\r\n document.body.removeChild(textArea);\r\n};\r\n\r\nexport const getFeature = (profileData, key) => {\r\n var oMatch;\r\n if (profileData && profileData.features && profileData.features.length > 0) {\r\n oMatch = profileData.features.find((feature) => {\r\n return feature.key && feature.key.toLowerCase() == key.toLowerCase();\r\n });\r\n }\r\n return oMatch;\r\n\r\n}\r\n\r\nexport const getMembership = (profileData, key) => {\r\n var oMatch;\r\n if (profileData && profileData.memberships && profileData.memberships.length > 0) {\r\n oMatch = profileData.memberships.find((membership) => {\r\n return membership.membershipKey.toLowerCase() == key.toLowerCase();\r\n });\r\n }\r\n return oMatch;\r\n}\r\n\r\nexport const convertProfileListToProxyList = (profileList) => {\r\n var newProxyList = [];\r\n\r\n try {\r\n profileList.forEach((c, index, arr) => {\r\n var newProxy = convertProfileToProxy(c, index);\r\n newProxyList.push(newProxy);\r\n });\r\n }\r\n catch (ex) {\r\n //debugger;\r\n console.error(ex);\r\n }\r\n\r\n //debugger;\r\n return newProxyList;\r\n}\r\n\r\nexport const ageInMonths = (dob) => {\r\n let today = new Date(); \r\n let age = null;\r\n if (dob) {\r\n //const totalmonth=moment().diff(moment(dob), 'month'); \r\n // age = parseFloat(parseInt(totalmonth/12)+\".\"+totalmonth%12); \r\n \t\tvar d = new Date(dob); \r\n \tvar years = today.getFullYear() - d.getFullYear(); \r\n \t\td.setFullYear(d.getFullYear() + years);\r\n var days = (today.getTime() - d.getTime()) / (3600 * 24 * 1000);\r\n let totalMonth = years + days / (isLeapYear(d.getFullYear()) ? 366 : 365);\r\n age = (totalMonth).toFixed(2);\r\n }\r\n \r\n return age;\r\n}\r\n\r\nconst isLeapYear = (year) => {\r\n var d = new Date(year, 1, 28);\r\n d.setDate(d.getDate() + 1);\r\n return d.getMonth() == 1;\r\n}\r\n\r\nexport const getContentWindow = (frame) => {\r\n return (frame && frame.contentWindow ? frame.contentWindow : frame);\r\n}\r\n\r\nexport const getSessionItem = (itemName, callback) => {\r\n //debugger;\r\n var frame = window.document.getElementById(\"frmStorage\");\r\n var win = getContentWindow(frame);\r\n var item = null;\r\n if (win && window.serverData.data.storageControllerV2) {\r\n item = win.getSessionItem(itemName);\r\n }\r\n else if (typeof self !== \"undefined\" && self[\"sessionStorage\"][itemName]) {\r\n item = self[\"sessionStorage\"][itemName];\r\n }\r\n if (callback) {\r\n callback(null, item);\r\n }\r\n if (itemName == \"root\") {\r\n // combine session and window properties\r\n var oItem = JSON.parse(item ? item : \"{}\");\r\n oItem[\"inMemory\"] = window.inMemory ? window.inMemory : {};\r\n item = JSON.stringify(oItem);\r\n }\r\n return item;\r\n}\r\n\r\nexport const setSessionItem = (itemName, value, callback) => {\r\n var frame = window.document.getElementById(\"frmStorage\");\r\n var win = getContentWindow(frame);\r\n if (win && window.serverData.data.storageControllerV2) {\r\n if (itemName == \"root\") {\r\n var oValue = JSON.parse(value);\r\n window.inMemory = oValue[\"inMemory\"] ? oValue[\"inMemory\"] : \"{}\";\r\n oValue[\"inMemory\"] = {};\r\n win.setSessionItem(itemName, JSON.stringify(oValue));\r\n }\r\n else {\r\n win.setSessionItem(itemName, value);\r\n }\r\n }\r\n else {\r\n if (typeof self !== \"undefined\") {\r\n self[\"sessionStorage\"].setItem(itemName, value, callback)\r\n }\r\n }\r\n if (callback) {\r\n callback(null);\r\n }\r\n return null;\r\n}\r\n\r\nexport const removeSessionItem = (itemName, callback) => {\r\n var frame = window.document.getElementById(\"frmStorage\");\r\n var win = getContentWindow(frame);\r\n if (win && window.serverData.data.storageControllerV2) {\r\n win.removeSessionItem(itemName);\r\n }\r\n else {\r\n if (typeof self !== \"undefined\") {\r\n self[\"sessionStorage\"].removeItem(itemName, callback)\r\n }\r\n }\r\n if (callback) {\r\n callback(null);\r\n }\r\n return null;\r\n\r\n}\r\n\r\n\r\n\r\nexport const getProfileListFromMembershipData = (membershipData) => {\r\n var profileList = [];\r\n\r\n if (membershipData && membershipData.epic) {\r\n let oCurrMem = { patient: membershipData.epic.patient, features: membershipData.features, memberships: membershipData.memberships };\r\n profileList.push(oCurrMem);\r\n if (membershipData.epic.proxySubjects) {\r\n membershipData.epic.proxySubjects.forEach((c, index, arr) => {\r\n profileList.push(membershipData.epic.proxySubjects[index]);\r\n });\r\n }\r\n }\r\n\r\n return profileList;\r\n}\r\n\r\nexport const convertProfileToProxy = (profileData, index) => {\r\n var newProxy = null;\r\n try {\r\n if (profileData && profileData.patient) {\r\n //debugger;\r\n newProxy = {\r\n displayName: profileData.patient.PatientName,\r\n externalId: getPatientID(profileData.patient.PatientIds, IDTypes.EXTERNAL),\r\n internalId: getPatientID(profileData.patient.PatientIds, IDTypes.INTERNAL),\r\n myChartId: getPatientID(profileData.patient.PatientIds, IDTypes.MYCHARTLOGIN) || profileData.patient.MyChartAccount,\r\n eid: getPatientID(profileData.patient.PatientIds, IDTypes.EID),\r\n relationshipId: profileData.patient.RelationshipID,\r\n ageYears: profileData.patient.AgeYears,\r\n dob: profileData.patient.DOB, //\"DOB\" key comming from API\r\n isMinor: profileData.patient.IsMinor,\r\n index: index,\r\n epi: getPatientID(profileData.patient.PatientIds, IDTypes.EPI),\r\n expireDate: profileData.patient.ToDate,\r\n wprInternalID: getPatientID(profileData.patient.PatientIds, IDTypes.WPRINTERNAL)\r\n //Comments: c.patient.Comments,\r\n //DeploymentDescriptor: c.patient.DeploymentDescriptor,\r\n //DisabledReason: c.patient.DisabledReason,\r\n //FromDate: c.patient.FromData,\r\n //MyChartStatus: c.patient.MyChartStatus,\r\n //PatientName: c.patient.PatientName,\r\n //Relation: c.patient.Relation, \r\n //RelationshipID: c.patient.RelationshipID, \r\n //ToDate: c.patient.ToDate,\r\n //PatientIds: c.patient.PatientIds, \r\n //AgeYears: c.patient.AgeYears, \r\n //InuranceId: null, \r\n //IsMinor: c.patient.IsMinor, \r\n //EID: c.patient.EID, \r\n //EPID: c.patient.EPID,\r\n //AuthorizedFeatures: null, \r\n //IsMedicaid: c.patient.IsMedicaid, \r\n //LinkedAccountStatus: null,\r\n };\r\n }\r\n else {\r\n //debugger;\r\n console.log(\"Why here?\");\r\n }\r\n }\r\n catch (EX) {\r\n //debugger;\r\n console.error(EX);\r\n throw EX;\r\n }\r\n\r\n return newProxy;\r\n}\r\n\r\nexport const extractEVisitInfo = (eVisitData) => {\r\n return {\r\n subscriberVsDependent: eVisitData.EvisitInfo.EviSubscriberVsDependent,\r\n isZipnosisEligible: eVisitData.EvisitInfo.IsZipnosisEvistEligible,\r\n isMyChartEVisit: eVisitData.EvisitInfo.IsMyChartEvisit,\r\n bswZipGroup: eVisitData.EvisitInfo.BswZipGroup ? {\r\n id: eVisitData.EvisitInfo.BswZipGroup.Id,\r\n name: eVisitData.EvisitInfo.BswZipGroup.Name,\r\n price: eVisitData.EvisitInfo.BswZipGroup.Price,\r\n } : null\r\n }\r\n}\r\n\r\nexport const hasFeature = (membershipData, key) => {\r\n //debugger;\r\n if (membershipData.features && membershipData.features.length > 0) {\r\n var oMatch = membershipData.features.find((feature) => { return feature.key.toLowerCase() == key.toLowerCase(); });\r\n if (oMatch) {\r\n return true; // active flag only matters for insurance things\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport const hasMyChart = (membershipData) => {\r\n return (membershipData.epic && membershipData.epic.patient ? membershipData.epic.patient.HasMyChartAccount : false);\r\n}\r\n\r\nexport const getMyChartID = (membershipData) => {\r\n return (membershipData.epic && membershipData.epic.patient ? membershipData.epic.patient.MyChartAccount : null);\r\n}\r\n\r\nexport const getMemberDataPatientID = (membershipData, idType) => {\r\n return getPatientID(membershipData.epic.patient.PatientIds, idType);\r\n}\r\n\r\nexport const getPatientID = (PatientIDs, idType) => {\r\n //debugger;\r\n var sRet = null;\r\n try {\r\n if (!PatientIDs) return null;\r\n for (var i = 0; i < PatientIDs.length; i++) {\r\n var currentValue = PatientIDs[i];\r\n if (currentValue.IDType.toUpperCase() === idType.toUpperCase()) {\r\n sRet = currentValue.ID;\r\n break;\r\n }\r\n }\r\n }\r\n catch (E) {\r\n //debugger;\r\n console.error(E);\r\n }\r\n return sRet;\r\n}\r\n\r\n\r\n\r\nconst inIframe = () => {\r\n try {\r\n return window.self !== window.top;\r\n } catch (e) {\r\n return true;\r\n }\r\n}\r\n\r\n// Detect our time zone is Central Time Zone or not.\r\nexport const isCentralTimeZone = () => moment.tz.guess() === CENTRAL_TIME_ZONE;\r\n\r\n// Sort conversations in descending order By lastMessageNoteDate\r\nexport const sortConversations = (conversations) => {\r\n let conversationList = conversations && conversations.conversations ? conversations.conversations : [];\r\n if (conversationList && conversationList.length > 0) {\r\n conversationList = [].concat(conversationList).sort((conversationA, conversationB) => {\r\n const dateA = conversationA.lastMessageNoteDate;\r\n const dateB = conversationB.lastMessageNoteDate;\r\n return dateA > dateB ? -1 : 1;\r\n });\r\n }\r\n\r\n return conversationList;\r\n}\r\n\r\nexport const sortMessages = (messages) => {\r\n let messagesList = messages && messages.messages ? messages.messages : [];\r\n if (messagesList && messagesList.length > 0) {\r\n messagesList = [].concat(messagesList).sort((messageA, messageB) => {\r\n const dateA = messageA.noteDate;\r\n const dateB = messageB.noteDate;\r\n return dateA > dateB ? -1 : 1;\r\n });\r\n }\r\n return { ...messages, messages: messagesList.reverse() };\r\n}\r\nexport const getQueryStringValue = (qs, param) => {\r\n let val = \"\";\r\n let reg = new RegExp('[?&]' + param + '=([^]*)', 'i');\r\n if (qs.indexOf(param) != -1) {\r\n val = reg.exec(qs)[1];\r\n //console.info(qs);\r\n }\r\n console.info(`Tools.getQueryStringValue param '${param}' value '${val}' `, qs);\r\n return val;\r\n}\r\n\r\n// Reference : https://stackoverflow.com/questions/9514179/how-to-find-the-operating-system-version-using-javascript\r\nexport const getOSInfo = () => {\r\n var unknown = 'Unknown';\r\n //browser\r\n var nVer = navigator.appVersion;\r\n var nAgt = navigator.userAgent;\r\n\r\n // system\r\n var os = unknown;\r\n var clientStrings = [\r\n { s: 'Windows 3.11', r: /Win16/ },\r\n { s: 'Windows 95', r: /(Windows 95|Win95|Windows_95)/ },\r\n { s: 'Windows ME', r: /(Win 9x 4.90|Windows ME)/ },\r\n { s: 'Windows 98', r: /(Windows 98|Win98)/ },\r\n { s: 'Windows CE', r: /Windows CE/ },\r\n { s: 'Windows 2000', r: /(Windows NT 5.0|Windows 2000)/ },\r\n { s: 'Windows XP', r: /(Windows NT 5.1|Windows XP)/ },\r\n { s: 'Windows Server 2003', r: /Windows NT 5.2/ },\r\n { s: 'Windows Vista', r: /Windows NT 6.0/ },\r\n { s: 'Windows 7', r: /(Windows 7|Windows NT 6.1)/ },\r\n { s: 'Windows 8.1', r: /(Windows 8.1|Windows NT 6.3)/ },\r\n { s: 'Windows 8', r: /(Windows 8|Windows NT 6.2)/ },\r\n { s: 'Windows NT 4.0', r: /(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/ },\r\n { s: 'Windows ME', r: /Windows ME/ },\r\n { s: 'Android', r: /Android/ },\r\n { s: 'Open BSD', r: /OpenBSD/ },\r\n { s: 'Sun OS', r: /SunOS/ },\r\n { s: 'Linux', r: /(Linux|X11)/ },\r\n { s: 'iOS', r: /(iPhone|iPad|iPod)/ },\r\n { s: 'Mac OS X', r: /Mac OS X/ },\r\n { s: 'Mac OS', r: /(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/ },\r\n { s: 'QNX', r: /QNX/ },\r\n { s: 'UNIX', r: /UNIX/ },\r\n { s: 'BeOS', r: /BeOS/ },\r\n { s: 'OS/2', r: /OS\\/2/ },\r\n { s: 'Search Bot', r: /(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\\/Teoma|ia_archiver)/ }\r\n ];\r\n for (var id in clientStrings) {\r\n var cs = clientStrings[id];\r\n if (cs.r.test(nAgt)) {\r\n os = cs.s;\r\n break;\r\n }\r\n }\r\n var osVersion = unknown;\r\n\r\n try {\r\n if (/Windows/.test(os)) {\r\n osVersion = /Windows (.*)/.exec(os);\r\n if (osVersion)\r\n osVersion = osVersion[1] || 0;\r\n os = 'Windows';\r\n }\r\n\r\n switch (os) {\r\n case 'Mac OS X':\r\n osVersion = /Mac OS X (\\d+)_(\\d+)_?(\\d+)?/.exec(nAgt);\r\n if (osVersion) {\r\n osVersion = `${osVersion[1] || 0}.${osVersion[2] || 0}.${osVersion[3] || 0}`;\r\n };\r\n break;\r\n\r\n case 'Android':\r\n osVersion = /Android ([\\.\\_\\d]+)/.exec(nAgt);\r\n if (osVersion)\r\n osVersion = osVersion[1] || 0;\r\n break;\r\n\r\n case 'iOS':\r\n osVersion = /OS (\\d+)_(\\d+)_?(\\d+)?/.exec(nVer);\r\n if (osVersion)\r\n osVersion = [parseInt(osVersion[1] || 0, 10), parseInt(osVersion[2] || 0, 10), parseInt(osVersion[3] || 0, 10)];\r\n break;\r\n }\r\n\r\n return {\r\n os: os,\r\n osVersion: osVersion\r\n };\r\n }\r\n\r\n catch (error) {\r\n return { os: \"\", osVersion: \"\" };\r\n }\r\n}\r\n\r\nexport const getEndOfMonth = (year, month) => {\r\n let dt = new Date();\r\n if (year) {\r\n dt = new Date(year, month + 1, 0);\r\n }\r\n return dt;\r\n};\r\n\r\n\r\nexport const getStartOfMonth = (year, month) => {\r\n let dt = new Date();\r\n if (year) {\r\n dt = new Date(year, month, 1);\r\n }\r\n return dt;\r\n};\r\n\r\n// Get Month number from DateString\r\n// firefox , Crome & other browser Support \r\n\r\nexport const getMonthNumber = (dateString) => {\r\n if (dateString) {\r\n const dateData = dateString.split(' ');\r\n const month = dateData[0].substring(0, 3).toUpperCase();\r\n switch (month) {\r\n case \"JAN\": return \"1\";\r\n case \"FEB\": return \"2\";\r\n case \"MAR\": return \"3\";\r\n case \"APR\": return \"4\";\r\n case \"MAY\": return \"5\";\r\n case \"JUN\": return \"6\";\r\n case \"JUL\": return \"7\";\r\n case \"AUG\": return \"8\";\r\n case \"SEP\": return \"9\";\r\n case \"OCT\": return \"10\";\r\n case \"NOV\": return \"11\";\r\n case \"DEC\": return \"12\";\r\n }\r\n }\r\n};\r\n\r\n// Scroll element into window view not scrolling within another element\r\n// Using scrollTo instead of scrollIntoView for better Safari support\r\nexport const scrollIntoWindowView = (id, el, behavior, offSet) => {\r\n let element = document.querySelector(id) || el;\r\n let animateBehavior = behavior ? behavior : \"smooth\";\r\n const topOffset = offSet ? offSet : -90;\r\n\r\n if (element && window) {\r\n const scrollY = element.getBoundingClientRect().top + window.pageYOffset + topOffset;\r\n window.scrollTo({ top: scrollY, behavior: animateBehavior });\r\n }\r\n}\r\n\r\n//Check string is json.\r\nexport const IsJsonString = (str) => {\r\n try {\r\n JSON.parse(str);\r\n } catch (e) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n\r\nexport const IncrementInstanceCount = () => {\r\n try {\r\n var sLastInstCnt = localStorage.getItem(\"lastinstcnt\");\r\n var dLastInstCnt;\r\n if (sLastInstCnt) {\r\n dLastInstCnt = Date.parse(sLastInstCnt);\r\n }\r\n else {\r\n dLastInstCnt = new Date();\r\n }\r\n\r\n var sInstCnt = localStorage.getItem(\"instcnt\");\r\n var iInstCnt;\r\n if (sInstCnt) {\r\n iInstCnt = parseFloat(sInstCnt);\r\n }\r\n else {\r\n iInstCnt = 0\r\n }\r\n if (iInstCnt > 100) {\r\n iInstCnt = 0;\r\n }\r\n var dNew = new Date();\r\n if (((dNew - dLastInstCnt) / 60000) > 20) {\r\n // debugger;\r\n iInstCnt = 0;\r\n }\r\n\r\n localStorage.setItem(\"instcnt\", iInstCnt + 1);\r\n\r\n }\r\n catch (e) {\r\n\r\n }\r\n}\r\n\r\nexport const DecrementInstanceCount = () => {\r\n try {\r\n //debugger;\r\n var sInstCnt = localStorage.getItem(\"instcnt\");\r\n var iInstCnt;\r\n if (sInstCnt) {\r\n iInstCnt = parseFloat(sInstCnt);\r\n }\r\n else {\r\n iInstCnt = 0\r\n }\r\n iInstCnt = iInstCnt - 1;\r\n if (iInstCnt < 0) { iInstCnt = 0; }\r\n localStorage.setItem(\"instcnt\", iInstCnt);\r\n localStorage.setItem(\"lastinstcnt\", new Date());\r\n if (iInstCnt == 0) {\r\n localStorage.removeItem(\"root\"); // this clears the left over token\r\n }\r\n }\r\n catch (E3) {\r\n }\r\n\r\n}\r\n\r\nexport const getMonths = () => {\r\n return [\r\n { value: '01', label: 'January' },\r\n { value: '02', label: 'February' },\r\n { value: '03', label: 'March' },\r\n { value: '04', label: 'April' },\r\n { value: '05', label: 'May' },\r\n { value: '06', label: 'June' },\r\n { value: '07', label: 'July' },\r\n { value: '08', label: 'August' },\r\n { value: '09', label: 'September' },\r\n { value: '10', label: 'October' },\r\n { value: '11', label: 'November' },\r\n { value: '12', label: 'December' }\r\n ];\r\n};\r\n\r\nexport const getPreviousYears = (numberOfYears) => {\r\n const currentYear = (new Date()).getFullYear();\r\n const allYears = Array.from(new Array(numberOfYears), (val, index) => currentYear - index);\r\n return (\r\n allYears.map((yr, i) => {\r\n return
\r\n {yr}\r\n \r\n })\r\n )\r\n};\r\n\r\n\r\nexport const getYears = () => { \r\n const currentYear = (new Date()).getFullYear();\r\n const allYears = Array.from(new Array(5), (val, index) => currentYear - index);\r\n let yearsArray = allYears.map((item, index) => ({ value: '' + item, label: '' + item })); \r\n return yearsArray;\r\n};\r\n\r\nexport const getFullMonthName = (month) => {\r\n switch (month) {\r\n case \"01\":\r\n return \"January\";\r\n break;\r\n case \"02\":\r\n return \"February\";\r\n break;\r\n case \"03\":\r\n return \"March\";\r\n break;\r\n case \"04\":\r\n return \"April\";\r\n break;\r\n case \"05\":\r\n return \"May\";\r\n break;\r\n case \"06\":\r\n return \"June\";\r\n break;\r\n case \"07\":\r\n return \"July\";\r\n break;\r\n case \"08\":\r\n return \"August\";\r\n break;\r\n case \"09\":\r\n return \"September\";\r\n break;\r\n case \"10\":\r\n return \"October\";\r\n break;\r\n case \"11\":\r\n return \"November\";\r\n break;\r\n case \"12\":\r\n return \"December\";\r\n break;\r\n default:\r\n return \"\";\r\n break;\r\n }\r\n} \r\nexport const getDayOfWeek = (date) => {\r\n var dt = toJSDate(`${date}T00:00:00`, getDateFormats());\r\n if (dt) {\r\n let weekday = moment(dt).format('dddd');\r\n return weekday;\r\n }\r\n return \"Invalid Date\";\r\n};\r\n\r\nexport const handleMychartUserShowOrHideMenuItems = () => {\r\n let isMyChartUser = false;\r\n let disableMyChartMenuItems = false;\r\n let isPrimaryUser = false;\r\n let notPharmacyProxy = false;\r\n let sessionServerData;\r\n try {\r\n const currentPharmacyUser = useSelector((state) => hydratePharmacyUser(state.domain.cpu));\r\n const epicEHRDown = useSelector((state) => state.common.epicEHRDown);\r\n const isMyChartInActive = useSelector((state) => state.dashboard.isMyChartInActive);\r\n const hasMyChart = useSelector((state) => state.domain.hm);\r\n const isProxyUser = useSelector((state) => state.domain.ip);\r\n sessionServerData = useSelector((state) => state.session.serverData);\r\n const bundle = sessionServerData && sessionServerData.bundle ? sessionServerData.bundle : \"mybswhealth\";\r\n const pathname = typeof window !== \"undefined\" ? window.location.pathname.toLowerCase() : \"\";\r\n const isPharmacy = bundle === \"pharmacy\" || pathname.indexOf('/pharmacy') === 0;\r\n const isMyBSWHealth = bundle === \"mybswhealth\" && !isPharmacy;\r\n const isMyChartProxyUser = isProxyUser;\r\n notPharmacyProxy = isMyBSWHealth || isPharmacy && !currentPharmacyUser; // Pharmacy Only Proxy\r\n isMyChartUser = notPharmacyProxy && hasMyChart;\r\n disableMyChartMenuItems = epicEHRDown || isMyChartInActive;\r\n isPrimaryUser = notPharmacyProxy && !isMyChartProxyUser;\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n \r\n return { isMyChartUser, disableMyChartMenuItems, isPrimaryUser, notPharmacyProxy, sessionServerData };\r\n};\r\n\r\nexport const getProxyName = (pUser, cUser) => {\r\n let proxyName = \"\";\r\n let primaryUser = pUser ? pUser : \"\";\r\n let currentUser = cUser ? cUser : \"\";\r\n if (!pUser && !cUser) {\r\n try {\r\n primaryUser = useSelector((state) => hydrateProxyUser(state.domain.pu))\r\n currentUser = useSelector((state) => hydrateProxyUser(state.domain.cu))\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n if (currentUser && typeof primaryUser.externalId !== 'undefined' &&\r\n currentUser?.externalId !== primaryUser?.externalId && currentUser?.displayName)\r\n proxyName = getFirstName(currentUser?.displayName);\r\n\r\n return { proxyName };\r\n};","// override the browser's default fetch to globally trap 401's.\r\nimport * as types from \"../constants/actionTypes\";\r\nimport Cookies from \"cookies-js\";\r\n\r\n// adapted from https://www.npmjs.com/package/fetch-readablestream and https://javascript.info/fetch-progress\r\nfunction getFromBodyReader(body) {\r\n const reader = body.getReader();\r\n const chunks = [];\r\n let receivedLength = 0;\r\n\r\n function pump() {\r\n return reader.read().then(({ value, done }) => {\r\n if (done) {\r\n let chunksAll = new Uint8Array(receivedLength);\r\n let position = 0;\r\n for (let chunk of chunks) {\r\n chunksAll.set(chunk, position);\r\n position += chunk.length;\r\n }\r\n const result = new TextDecoder(\"utf-8\").decode(chunksAll);\r\n try {\r\n return JSON.parse(result);\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n }\r\n chunks.push(value);\r\n receivedLength += value.length;\r\n return pump();\r\n });\r\n }\r\n\r\n return pump();\r\n}\r\n\r\nconst configureFetch = () => {\r\n const fetch = global.fetch;\r\n global.rawFetch = fetch;\r\n const newFetch = function (url, params) {\r\n if (url instanceof Request) {\r\n // unpack it here since Request has readonly properties\r\n //debugger;\r\n params = Object.assign(params || {}, {\r\n headers: url.headers,\r\n method: url.method,\r\n mode: url.mode,\r\n referrerPolicy: url.referrerPolicy,\r\n body: url.body,\r\n bodyUsed: url.bodyUsed,\r\n credentials: url.credentials,\r\n cache: url.cache,\r\n context: url.context\r\n });\r\n url = url.url;\r\n }\r\n else if (typeof params === \"undefined\" || params === null) {\r\n params = { method: \"GET\" };\r\n }\r\n\r\n if (url.indexOf('.googleapis.') != -1 || url.indexOf('google-analytics') != -1) {\r\n params.mode = \"no-cors\";\r\n params.cache = \"no-store\";\r\n params.credentials = \"omit\";\r\n params.withCredentials = false;\r\n //params.referrerPolicy = \"unsafe-url\";\r\n } else {\r\n params.mode = \"cors\";\r\n params.cache = \"no-store\";\r\n params.referrerPolicy = \"unsafe-url\";\r\n }\r\n\r\n //let oState = window && window.store && window.store.getState ? window.store.getState() : { domain: { c: null, s: null } };\r\n //let sCorrelationID = (oState && oState.domain ? oState.domain.c : null) || Cookies.get(\"bsw-CorrelationId\");\r\n //let sSessionID = (oState && oState.domain ? oState.domain.s : null) || Cookies.get(\"bsw-SessionId\");\r\n let domain = sessionStorage['root'] ? JSON.parse(JSON.parse(sessionStorage['root']).domain) : window && window.store && window.store.getState ? window.store.getState().domain : { c: null, s: null };\r\n let sCorrelationID = (domain ? domain.c : null) || Cookies.get(\"bsw-CorrelationId\");\r\n let sSessionID = (domain ? domain.s : null) || Cookies.get(\"bsw-SessionId\");\r\n params.headers = params.headers || {};\r\n if (url.indexOf('.googleapis.') === -1 || url.indexOf('google-analytics') === -1) {\r\n if (sCorrelationID) {\r\n setHeaders(params.headers, \"bsw-CorrelationId\", sCorrelationID);\r\n }\r\n if (sSessionID) {\r\n setHeaders(params.headers, \"bsw-SessionId\", sSessionID);\r\n }\r\n }\r\n if (url.indexOf(\"SummaryEx\") > 0) {//\r\n //debugger;\r\n }\r\n try {\r\n return fetch.apply(global, [url, params])\r\n .then(resp => {\r\n \r\n if (resp.status === 404 || resp.status === 429) {\r\n return Promise.reject(resp);\r\n }\r\n return resp;\r\n }).catch(err => {\r\n console.info(`configureFetch catch err`,err);\r\n return Promise.reject(err);\r\n });\r\n }\r\n catch (e) {\r\n return Promise.reject(e);\r\n }\r\n };\r\n global.fetchWithCreds = function (url, params) {\r\n if (url instanceof Request) {\r\n // unpack it here since Request has readonly properties\r\n //debugger;\r\n params = Object.assign(params || {}, {\r\n headers: url.headers,\r\n method: url.method,\r\n mode: url.mode,\r\n referrerPolicy: url.referrerPolicy,\r\n body: url.body,\r\n bodyUsed: url.bodyUsed,\r\n credentials: url.credentials,\r\n cache: url.cache,\r\n context: url.context\r\n });\r\n url = url.url;\r\n }\r\n else if (typeof params === \"undefined\" || params === null) {\r\n params = { method: \"GET\" };\r\n }\r\n\r\n params.credentials = \"include\";\r\n\r\n return newFetch(url, params);\r\n };\r\n global.fetch2 = (url, token, data, method, headers, textBodyExpected) => {\r\n const p = params(token, data, method, null, headers);\r\n\r\n return newFetch(url, p).then(response => {\r\n //debugger;\r\n if (response && response.url && response.url.toUpperCase().indexOf(\"DETAIL\") > 0) {\r\n var sStophere = \"Set a breakpoint\";\r\n }\r\n\r\n const status = response.status;\r\n if (status >= 200 && status < 300) {\r\n if (status === 200) {//added this condition as fetch is failing in case of null response and status is 200:OK \r\n const contentType = response.headers.get('content-type');\r\n if (contentType === null) {\r\n return Promise.resolve('OK'); //given OK as of now.\r\n }\r\n }\r\n else if (status === 204) {\r\n const { body } = response;\r\n if (response.statusText) {\r\n return Promise.reject(response.statusText);\r\n } else if (body && typeof body !== 'string' && typeof body.getReader !== 'undefined' && typeof TextDecoder !== 'undefined') {\r\n return getFromBodyReader(body).then(response => {\r\n console.log(response);\r\n return Promise.reject(response);\r\n });\r\n }\r\n else {\r\n return Promise.resolve(null);\r\n }\r\n }\r\n return Promise.resolve(textBodyExpected ? response.text() : response.json());\r\n } else {\r\n //debugger;\r\n return Promise.reject(response);\r\n }\r\n }).catch(err => {\r\n //debugger;\r\n const { body } = err;\r\n if (body && typeof body !== 'string' && typeof body.getReader !== 'undefined' && typeof TextDecoder !== 'undefined') {\r\n return getFromBodyReader(body).then(response => {\r\n console.log(response);\r\n return Promise.reject(response);\r\n });\r\n }\r\n else {\r\n console.log(err);\r\n return Promise.reject(err);\r\n }\r\n });\r\n };\r\n\r\n global.fetch3 = (url, token, data, method, headers) => {\r\n const p = params(token, data, method, null, headers);\r\n\r\n return newFetch(url, p).then(response => {\r\n //debugger;\r\n if (response && response.url && response.url.toUpperCase().indexOf(\"DETAIL\") > 0) {\r\n var sStophere = \"Set a breakpoint\";\r\n }\r\n\r\n const status = response.status;\r\n if (status >= 200 && status < 300) {\r\n if (status === 200) {//added this condition as fetch is failing in case of null response and status is 200:OK \r\n const contentType = response.headers.get('content-type');\r\n if (contentType === null) {\r\n return Promise.resolve('OK'); //given OK as of now.\r\n }\r\n }\r\n else if (status === 204) { //As discussed and added fetch3 version to return resolve if we get 204 with no content instead of rejecting it.\r\n return Promise.resolve(response);\r\n }\r\n return Promise.resolve(response.json());\r\n } else {\r\n //debugger;\r\n return Promise.reject(response);\r\n }\r\n }).catch(err => {\r\n //debugger;\r\n const { body } = err;\r\n if (body && typeof body !== 'string' && typeof body.getReader !== 'undefined' && typeof TextDecoder !== 'undefined') {\r\n return getFromBodyReader(body).then(response => {\r\n console.log(response);\r\n return Promise.reject(response);\r\n });\r\n }\r\n else {\r\n console.log(err);\r\n return Promise.reject(err);\r\n }\r\n });\r\n };\r\n\r\n global.fetch = newFetch;\r\n};\r\n\r\nconst setHeaders = (header, headerKey, headerValue) => {\r\n if (header instanceof Headers) {\r\n header.set(headerKey, headerValue);\r\n }\r\n else {\r\n header[headerKey] = headerValue;\r\n }\r\n};\r\n\r\nglobal.params = function (token, data, method, contentType, headers) {\r\n let _params = {\r\n method: method ? method : 'get',\r\n headers: {\r\n 'Content-Type': contentType ? contentType : 'application/json',\r\n 'Cache-Control': 'no-cache'\r\n }\r\n };\r\n if (headers) {\r\n //debugger;\r\n _params.headers = Object.assign(_params.headers, headers);\r\n //debugger;\r\n //headers.forEach(function (header) { _params.headers.push(header) });\r\n }\r\n\r\n if (token) {\r\n _params.headers.Authorization = `bearer ${token}`;\r\n }\r\n\r\n if (data) {\r\n _params.body = data;\r\n }\r\n\r\n return _params;\r\n};\r\n\r\nglobal.urlParams = function () {\r\n var paramList = '';\r\n var delimiter = '?';\r\n for (var i = 0; i < arguments.length - 1; i = i + 2) {\r\n var arg = arguments[i + 1];\r\n if (arg !== undefined && arg !== null) {\r\n paramList += delimiter + arguments[i] + '=' + arg;\r\n delimiter = '&';\r\n }\r\n }\r\n return paramList;\r\n};\r\n\r\nexport default configureFetch;\r\n","export const getValue = (field, conditionForDefaultValue, defaultValue, ...objects) => {\r\n if (conditionForDefaultValue) {\r\n return defaultValue;\r\n }\r\n else {\r\n for (let i = 0; i < objects.length; i++) {\r\n const obj = objects[i];\r\n if (obj && typeof obj[field] !== 'undefined') {\r\n return obj[field];\r\n }\r\n }\r\n }\r\n return defaultValue;\r\n};\r\n\r\nexport const mybswhTooltipMsg = 'This provider allows you to use MyBSWHealth which is a mobile app and web portal where you can: manage appointments, message your doctor, view visit summary, test results, pay bills, and much more!';\r\n\r\nexport const availabilityList = [\r\n { value: -1, display: 'No Preference' }, { value: 0, display: 'Any Day' }, { value: 1, display: 'Today' }, { value: 3, display: 'Next 3 Days' }\r\n];\r\n\r\nexport const genderList = [\r\n { value: 'Any', display: 'No Preference' }, { value: 'Male', display: 'Male' }, { value: 'Female', display: 'Female' }\r\n];\r\n\r\n// this function converts an error message of a failing zipnosis api call to a custom matching one given in app.config;\r\n// inside this function, the app.config key names of the custom messages are defined as field names of the object \"pairs\";\r\n// part of strings expected to appear in the original error are defined as values in this object.\r\nexport const convertZipnosisErrorMessage = (error) => {\r\n const thePostalCode = \"The postal code\";\r\n const pairs = {\r\n zipnosisInvalidZipCodeMessage: thePostalCode + \"|No clinics are available\",\r\n zipnosisNoEmailMessage: \"Email can't be blank|No EMAIL on file for this user\",\r\n zipnosisEmailTakenMessage: \"Email has already been taken\",\r\n zipnosisNoGenderMessage: \"Gender is not included\",\r\n zipnosisInvalidTokenDependentMessage: \"Invalid token - user is a dependent\",\r\n zipnosisActivatedPatientMessage: \"Patient already activated\",\r\n zipnosisFailedToAuthenticateMessage: \"Failed to authenticate the user\",\r\n zipnosisNoMemberMessage: \"Member record not found\",\r\n zipnosisAccountLockedMessage: \"Your account is locked\",\r\n zipnosisNoEPID: \"No EPID on file for this user\",\r\n zipnosisInvalidPhoneMessage: \"Phone is an invalid number\"\r\n };\r\n\r\n const keys = Object.keys(pairs);\r\n for (let i = 0; i < keys.length; i++) {\r\n const errorMessageName = keys[i];\r\n const values = pairs[errorMessageName].split('|');\r\n for (let j = 0; j < values.length; j++) {\r\n const errorToSearchFor = values[j];\r\n const index = error.indexOf(errorToSearchFor);\r\n if (index > -1) {\r\n //if (errorToSearchFor === thePostalCode) { // to take care of this kind of error: \\\"...The postal code 78702 is not valid for the state of SC\\\"\r\n // const errorMessage = error.substr(index, error.indexOf('\\\"'));\r\n // if (errorMessage) {\r\n // return { errorMessage, errorMessageName };\r\n // }\r\n //}\r\n return { errorMessage: window.serverData.data[errorMessageName], errorMessageName };\r\n }\r\n }\r\n }\r\n\r\n const errorMessageName = \"zipnosisDefaultMsg\";\r\n return { errorMessage: window.serverData.data[errorMessageName], errorMessageName };\r\n //return null;\r\n};\r\n\r\nexport const translateText = (translate, text, t) => {\r\n if (translate) {\r\n text = t(text);\r\n }\r\n return text;\r\n};\r\n\r\nexport const translateTextWithPhone = (translate, text, t) => {\r\n if (translate) {\r\n const numbers = text.match(/\\d+/g);\r\n if (numbers && numbers.length > 0) {\r\n const start = text.indexOf(numbers[0]);\r\n const lastNumber = numbers[numbers.length - 1];\r\n const end = text.lastIndexOf(lastNumber) + lastNumber.length;\r\n const phone = text.subStr(start + end);\r\n text = text.subStr(0, start) + '{0}' + text.subStr(end);\r\n text = t(text);\r\n text = text.subStr(0, start) + phone + text.subStr(end);\r\n }\r\n else {\r\n text = t(text);\r\n }\r\n }\r\n return text;\r\n};","const dateFormat = /^(0[1-9]|10|11|12)\\/(0[1-9]|[1-2][0-9]|3[0-1])\\/(19|[2-9]\\d)\\d{2}$/;\r\n\r\nexport const formatDate = (value, options) => {\r\n options = options || { year: 'numeric', month: 'long', day: 'numeric' };\r\n const date = new Date(value);\r\n if (date) {\r\n return date.toLocaleDateString([],options);\r\n }\r\n else {\r\n return value;\r\n }\r\n};\r\n\r\nexport const formatTime = (value, options) => {\r\n let timeOptions = options || { hour: '2-digit', minute: '2-digit' };\r\n const date = new Date(value);\r\n if (date) {\r\n return date.toLocaleTimeString([], timeOptions);\r\n }\r\n else {\r\n return value;\r\n }\r\n};\r\n\r\nexport const isValidDate = (value) => {\r\n let noMonthShift = true;\r\n let dateValue = null;\r\n if (value instanceof Date) {\r\n dateValue = value;\r\n }\r\n else {\r\n if (!value || !dateFormat.test(value)) {\r\n return false;\r\n }\r\n dateValue = new Date(value);\r\n noMonthShift = Number(value.substr(0, 2)) === dateValue.getMonth() + 1;\r\n }\r\n return noMonthShift;\r\n};\r\n\r\nexport const removeTime = (date) => {\r\n if (isValidDate(date)) {\r\n date = new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n }\r\n return date;\r\n};\r\n\r\nexport const getAge = date => {\r\n var ageDifMs = Date.now() - new Date(date).getTime();\r\n var ageDate = new Date(ageDifMs); // miliseconds from epoch\r\n return Math.abs(ageDate.getUTCFullYear() - 1970);\r\n};","export const queryParams = (obj) => {\r\n let params = '';\r\n for (var key in obj) {\r\n const item = obj[key];\r\n if (item) {\r\n params = params\r\n ? `${params}&${key}=${item}`\r\n : `${key}=${item}`;\r\n }\r\n }\r\n return params;\r\n};\r\n\r\nexport const titleCase = (name) => {\r\n const nameParts = name.split(' ');\r\n let titleCase = '';\r\n for (let i = 0; i < nameParts.length; i++) {\r\n titleCase += (i > 0 ? ' ' : '') + nameParts[i].substr(0, 1).toUpperCase() + nameParts[i].substr(1).toLowerCase();\r\n }\r\n return titleCase;\r\n};\r\n\r\n\r\nexport const getInitial = (name) => {\r\n if (name !== null && name.length > 0) {\r\n return name[0].toUpperCase();\r\n }\r\n else {\r\n return name;\r\n }\r\n};\r\n\r\n\r\nexport const reduceSpaces = (someString) => {\r\n if (someString !== null) {\r\n while (someString.indexOf(' ') > -1) {\r\n someString = someString.replace(' ', ' ');\r\n }\r\n }\r\n return someString;\r\n};\r\n\r\n\r\nexport const getInitials = (diplayName) => {\r\n let name = reduceSpaces(diplayName).trim();\r\n let firstInitial = '', lastInitial = '';\r\n if (name.indexOf(',') > -1) {\r\n let parts = name.split(',');\r\n firstInitial = getInitial(parts[1].trim());\r\n lastInitial = getInitial(parts[0].trim());\r\n }\r\n else {\r\n let parts = name.split(' ');\r\n firstInitial = getInitial(parts[0].trim());\r\n if (parts.length > 1) {\r\n lastInitial = getInitial(parts[1].trim());\r\n }\r\n }\r\n return firstInitial + lastInitial;\r\n};\r\n\r\n\r\n\r\nexport const getFirstName = (diplayName) => {\r\n let name = diplayName.trim();\r\n if (name.indexOf(',') > -1) {\r\n let first = name.split(',')[1];\r\n return first.trim().split(' ')[0];\r\n }\r\n else {\r\n return name.split(' ')[0];\r\n }\r\n};\r\n\r\nexport const getSecondName = (diplayName) => {\r\n let name = diplayName.trim();\r\n if (name.indexOf(',') > -1) {\r\n let second = name.split(',')[0];\r\n return second.trim();\r\n }\r\n else if (name.indexOf(' ') > -1){\r\n return name.split(' ')[1];\r\n }\r\n return null;\r\n};\r\n\r\nexport const firstNameFirst = (diplayName) => {\r\n let name = diplayName.trim();\r\n const commaIndex = name.indexOf(',');\r\n if (commaIndex > -1) {\r\n const last = name.substr(0, commaIndex).trim();\r\n const first = name.substr(commaIndex + 1).trim();\r\n return titleCase(first + ' ' + last);\r\n }\r\n else {\r\n return titleCase(name);\r\n }\r\n};\r\n\r\nexport const formatDoctorName = (displayName) => {\r\n let fullName = '';\r\n if (displayName) {\r\n let displayNameArr = displayName.split(',');\r\n if (displayNameArr.length > 2) {\r\n fullName = displayNameArr[1] +' '+ displayNameArr[0] +','+ displayNameArr[2];\r\n } else if (displayNameArr.length > 1) {\r\n fullName = displayNameArr[1] +' '+ displayNameArr[0];\r\n } else if (displayNameArr.length > 0){\r\n fullName = displayNameArr[0]\r\n }\r\n }\r\n return fullName;\r\n};\r\n\r\nexport const formatPhoneNumber = (phone) => {\r\n const cleaned = ('' + phone).replace(/\\D/g, '');\r\n const match = cleaned.match(/^(\\d{3})(\\d{3})(\\d{4})$/);\r\n if (match) {\r\n return match[1] + '.' + match[2] + '.' + match[3];\r\n }\r\n return null;\r\n};\r\n\r\nexport const formatPrice = (amount) => {\r\n if (amount) {\r\n const formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' });\r\n let price = (typeof amount === 'number') ? amount : parseFloat(amount);\r\n\r\n return formatter.format(price);\r\n } else {\r\n return amount;\r\n }\r\n\r\n};\r\n\r\nexport const rxRoute = (routeName) => {\r\n let prefix = '/';\r\n if (typeof window !== 'undefined' && window.serverData.data.bundle !== 'pharmacy' &&\r\n window.location.href.toLowerCase().indexOf('localhost') > -1) {\r\n prefix = '/pharmacy';\r\n }\r\n if (routeName && routeName[0] === '/') {\r\n routeName = routeName.substr(1);\r\n }\r\n return prefix + routeName;\r\n};\r\n\r\nconst rxPath = /\\brxlist|\\brxrefill|\\brxtransfer|\\bbswtransfer|\\bnonbswtransfer|\\bfindpharmacy|\\brxhome/;\r\n\r\nexport const isRxRoute = (pathname) => {\r\n const prefix = '/pharmacy';\r\n let pathToCheck = pathname.toLowerCase();\r\n if (typeof window !== 'undefined' && window.location.href.toLowerCase().indexOf('localhost') > -1 &&\r\n pathToCheck.indexOf(prefix) === 0) {\r\n pathToCheck = pathToCheck.substr(prefix.length);\r\n }\r\n return rxPath.test(pathToCheck);\r\n};\r\n\r\nexport const replaceURLs = (message) => {\r\n if (!message) return;\r\n\r\n const urlRegex = /(((https?:\\/\\/)|(www\\.))[^\\s]+)/g;\r\n return message.replace(urlRegex, function (url) {\r\n let hyperlink = url;\r\n if (!hyperlink.match('^https?:\\/\\/')) {\r\n hyperlink = 'http://' + hyperlink;\r\n }\r\n return '
' + url + ' '\r\n });\r\n}\r\n\r\nexport const replacePhoneNumber = (message) => {\r\n if (!message) return;\r\n\r\n const urlRegex = /(?:[-+() ]*\\d){10,13}/gm;\r\n return message.replace(urlRegex, function (number) {\r\n \r\n return '
' + number + ' '\r\n });\r\n}\r\n\r\nexport const numIntoWords = (number) => {\r\n const first = ['', 'one ', 'two ', 'three ', 'four ', 'five ', 'six ', 'seven ', 'eight ', 'nine ', 'ten ', 'eleven ', 'twelve ', 'thirteen ', 'fourteen ', 'fifteen ', 'sixteen ', 'seventeen ', 'eighteen ', 'nineteen '];\r\n const tens = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];\r\n const mad = ['', 'thousand', 'million', 'billion', 'trillion'];\r\n let word = '';\r\n\r\n for (let i = 0; i < mad.length; i++) {\r\n let tempNumber = number % (100 * Math.pow(1000, i));\r\n if (Math.floor(tempNumber / Math.pow(1000, i)) !== 0) {\r\n if (Math.floor(tempNumber / Math.pow(1000, i)) < 20) {\r\n word = first[Math.floor(tempNumber / Math.pow(1000, i))] + mad[i] + ' ' + word;\r\n } else {\r\n word = tens[Math.floor(tempNumber / (10 * Math.pow(1000, i)))] + '-' + first[Math.floor(tempNumber / Math.pow(1000, i)) % 10] + mad[i] + ' ' + word;\r\n }\r\n }\r\n\r\n tempNumber = number % (Math.pow(1000, i + 1));\r\n if (Math.floor(tempNumber / (100 * Math.pow(1000, i))) !== 0) word = first[Math.floor(tempNumber / (100 * Math.pow(1000, i)))] + 'hunderd ' + word;\r\n }\r\n return word;\r\n}","\r\nexport const handleError = (response) => {\r\n \r\n switch (response.status) { \r\n case 401:\r\n // Go to login\r\n return true;\r\n break;\r\n \r\n }\r\n \r\n}","export const getDirectionsUrl = (fromAddress, toAddress) => {\r\n if (!toAddress) {\r\n return '';\r\n }\r\n\r\n const from = fromAddress ? fromAddress : '';\r\n let cp = '';\r\n let to = '';\r\n\r\n if (toAddress.StreetAddress) {\r\n to = toAddress.StreetAddress + ', ' + toAddress.City + ', ' +\r\n toAddress.State + ' ' + toAddress.Zip;\r\n if (toAddress.Latitude && toAddress.Longitude) {\r\n cp = '/' + toAddress.Latitude + ',' + toAddress.Longitude;\r\n }\r\n }\r\n else {\r\n to = toAddress;\r\n }\r\n\r\n const googleMapurl = 'https://www.google.com/maps/place/' + from + to + cp;\r\n return googleMapurl;\r\n};\r\n\r\nexport const getAddressUrl = (address) => {\r\n let addressUrl = '#';\r\n if (address) {\r\n const toAddress = address.StreetAddress + ', ' + address.City + ', ' + address.State + ' ' + address.Zip;\r\n addressUrl = getDirectionsUrl(null, toAddress);\r\n }\r\n return addressUrl;\r\n};\r\n\r\nexport const findDistance = (lat1, lon1, lat2, lon2, unit) => {\r\n try {\r\n if (lat1 === lat2 && lon1 === lon2) {\r\n return \"\";\r\n }\r\n else {\r\n var radlat1 = Math.PI * lat1 / 180;\r\n var radlat2 = Math.PI * lat2 / 180;\r\n var theta = lon1 - lon2;\r\n var radtheta = Math.PI * theta / 180;\r\n var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);\r\n if (dist > 1) {\r\n dist = 1;\r\n }\r\n dist = Math.acos(dist);\r\n dist = dist * 180 / Math.PI;\r\n dist = dist * 60 * 1.1515;\r\n if (unit === \"K\") { dist = dist * 1.609344 }\r\n if (unit === \"N\") { dist = dist * 0.8684 }\r\n return dist;\r\n }\r\n }\r\n catch {\r\n return \"\";\r\n }\r\n};\r\n\r\nexport const formatMiles = (miles) => {\r\n if (miles) {\r\n miles = miles.toFixed(2);\r\n return miles + \" Miles Away\";\r\n }\r\n return \"\";\r\n};","import i18n from \"i18next\";\r\nimport {initReactI18next} from \"react-i18next\";\r\nimport translationEN from './locales/en/translation.json';\r\nimport translationES from './locales/es/translation.json';\r\n\r\n//Will move into seprate js files ultimitly managed by the translation tool\r\n\r\nconst resources = {\r\n en:{\r\n translation:translationEN\r\n },\r\n es:{\r\n translation:translationES\r\n }\r\n};\r\n\r\ni18n\r\n .use(initReactI18next) // passes i18n down to react-i18next\r\n .init({\r\n resources,\r\n lng: \"en\", \r\n interpolation:{\r\n escapeValue:false // react already safes from xss\r\n }\r\n });\r\n\r\nexport default i18n;","export default __webpack_public_path__ + \"static/media/ArticleImg.252d1fef.png\";","export default __webpack_public_path__ + \"static/media/DSN-mWeb.0f09e4cf.png\";","export default __webpack_public_path__ + \"static/media/Get-Care-mWeb.5303ca87.png\";","export default __webpack_public_path__ + \"static/media/Next-Appts-mWeb.ba626921.png\";","export default __webpack_public_path__ + \"static/media/Proxy-mWeb.7673d35b.png\";","export default __webpack_public_path__ + \"static/media/Refresh-menu-mWeb.375683f6.png\";","export default __webpack_public_path__ + \"static/media/appointment-onboarding-carousel-web.8ee27e7d.png\";","export default __webpack_public_path__ + \"static/media/discover-something-onboarding-carousel-web.b6fb7027.png\";","export default __webpack_public_path__ + \"static/media/get-care-onboarding-carousel-web.42818633.png\";","export default __webpack_public_path__ + \"static/media/health-summary-menu-onboarding-carousel-web.5c8ac52c.png\";","export default __webpack_public_path__ + \"static/media/proxy-selector-onboarding-carousel-web.67b306dc.png\";","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const careGapsInitialState = function () {\r\n return {\r\n selectedMammographyOption: null,\r\n mammographyFlowFormInputs: null,\r\n postMammographyDataResult: null,\r\n selectedNoMammographyReason: null,\r\n postMammographyDataPending: false,\r\n careGapsSessionId: '',\r\n selectedNoMammographyData: null,\r\n \r\n selectedCareGapOption: null,\r\n selectedNoCareGapReason: null,\r\n postCareGapDataPending: false,\r\n selectedNoCareGapData: null,\r\n postCareGapDataResult: null,\r\n careGapFlowFormInputs: null,\r\n careGapProcedureType: null,\r\n schedulingPermissions: {},\r\n }\r\n};\r\n\r\nexport default function careGapReducer(state = careGapsInitialState(), action) {\r\n switch (action.type) {\r\n\r\n case types.UPDATE_MAMMOGRAPHY_FLOW_SELECTED_OPTION:\r\n return {\r\n ...state, selectedMammographyOption: action.selectedOption\r\n }\r\n case types.CLEAR_MAMMOGRAPHY_FLOW_SELECTED_OPTION:\r\n return {\r\n ...state, selectedMammographyOption: null, mammographyFlowFormInputs:null \r\n }\r\n case types.UPDATE_MAMMOGRAPHY_FLOW_FORM_INPUTS:\r\n return {\r\n ...state, mammographyFlowFormInputs: action.formInputs\r\n }\r\n case types.POST_MAMMOGRAPHY_FLOW_DATA_STATUS:\r\n return {\r\n ...state, postMammographyDataResult:action.result, postMammographyDataPending: false,\r\n }\r\n case types.UPDATE_NO_MAMMOGRAPHY_FLOW_SELECTED_REASON:\r\n return {\r\n ...state, selectedNoMammographyReason: action.reason, selectedNoMammographyData: action.selectedData\r\n }\r\n case types.CLEAR_MAMMOGRAPHY_DATA_AFTER_SUBMIT:\r\n return {\r\n ...careGapsInitialState()\r\n }\r\n case types.GET_MAMMOGRAPHY_FLOW_DATA:\r\n return {\r\n ...state, postMammographyDataPending: true, postMammographyDataResult: null\r\n }\r\n case types.SAVE_CAREGAPS_SESSION_ID:\r\n return {\r\n ...state, careGapsSessionId: action.careGapsSessionId\r\n }\r\n case types.CLEAR_MAMMOGRAPHY_DATA_AFTER_ONCHANGE:\r\n return {\r\n ...careGapsInitialState(), careGapsSessionId: action.careGapsSessionId\r\n }\r\n\r\n // CAREGAP FLOW RELATED ACTIONS TYPES\r\n\r\n case types.UPDATE_CAREGAP_SELECTED_OPTION:\r\n return {\r\n ...state, selectedCareGapOption: action.selectedOption, careGapProcedureType: action.procedureType\r\n }\r\n case types.CLEAR_CAREGAP_DATA_AFTER_ONCHANGE:\r\n return {\r\n ...careGapsInitialState(), careGapsSessionId: action.careGapsSessionId, schedulingPermissions: { ...state.schedulingPermissions }\r\n }\r\n case types.UPDATE_NO_CAREGAP_FLOW_SELECTED_DATA:\r\n return {\r\n ...state, selectedNoCareGapReason: action.reason, selectedNoCareGapData: action.selectedData, careGapProcedureType: action.procedureType\r\n }\r\n case types.GET_CAREGAP_FLOW_DATA:\r\n return {\r\n ...state, postCareGapDataPending: true, postCareGapDataResult: null\r\n }\r\n case types.UPDATE_CAREGAP_FLOW_FORM_INPUTS:\r\n return {\r\n ...state, careGapFlowFormInputs: action.formInputs, careGapProcedureType: action.procedureType\r\n }\r\n case types.CLEAR_CAREGAP_DATA_AFTER_SUBMIT:\r\n return {\r\n ...careGapsInitialState()\r\n }\r\n case types.POST_CAREGAP_FLOW_DATA_STATUS:\r\n return {\r\n ...state, postCareGapDataResult: action.result, careGapProcedureType: action.procedureType, postCareGapDataPending: false, \r\n }\r\n case types.GET_PATIENT_SCHEDULING_PERMISSIONS_START:\r\n return {\r\n ...state,\r\n schedulingPermissions: {\r\n loadedSchedulingPermissions: false,\r\n isFetching: true,\r\n error: null\r\n }\r\n }\r\n case types.GET_PATIENT_SCHEDULING_PERMISSIONS_SUCCESS:\r\n return {\r\n ...state,\r\n schedulingPermissions: {\r\n ...action.schedulingPermissions,\r\n loadedSchedulingPermissions: true,\r\n isFetching: false,\r\n error: null\r\n }\r\n }\r\n case types.GET_PATIENT_SCHEDULING_PERMISSIONS_FAILURE:\r\n return {\r\n ...state,\r\n schedulingPermissions: {\r\n loadedSchedulingPermissions: false,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n }\r\n default:\r\n return { ...state };\r\n }\r\n}\r\n\r\n","import * as types from \"../constants/actionTypes\";\r\nimport { RX, EPIC, RXEPIC } from \"../constants/textConstants\";\r\n\r\n\r\nexport const commonReducerInitialState = {\r\n hideBannerOnCrash: false,\r\n stayOnIncompleteForm: false,\r\n rxDown: window.serverData && window.serverData.data ? window.serverData.data.rxDown : false,\r\n aalDown: window.serverData && window.serverData.data ? window.serverData.data.aalDown : false,\r\n swhpDown: window.serverData && window.serverData.data ? window.serverData.data.swhpDown : false,\r\n epicEHRDown: window.serverData && window.serverData.data ? window.serverData.data.epicEHRDown : false,\r\n screenBreakPoint: ''\r\n};\r\n\r\nfunction getProxyData(type, data, request) {\r\n let rtnData = data;\r\n if (type === types.REQUEST_PROXY_INFO) {\r\n if (request && request.proxySource && request.proxySource.toLowerCase() === RXEPIC) {\r\n rtnData = { EpicProxyInformation: [], PharmacyProxyInformation: [] };\r\n let epicWhoCanManageYou = data && data.WhoCanManageYou && data.WhoCanManageYou.filter(wcmy => wcmy.ProxySource.toLowerCase() === EPIC);\r\n let epicWhoYouCanManage = data && data.WhoYouCanManage && data.WhoYouCanManage.filter(wcmy => wcmy.ProxySource.toLowerCase() === EPIC);\r\n let rxWhoCanManageYou = data && data.WhoCanManageYou && data.WhoCanManageYou.filter(wcmy => wcmy.ProxySource.toLowerCase() === RX);\r\n let rxWhoYouCanManage = data && data.WhoYouCanManage && data.WhoYouCanManage.filter(wcmy => wcmy.ProxySource.toLowerCase() === RX);\r\n rtnData.EpicProxyInformation.WhoCanManageYou = epicWhoCanManageYou;\r\n rtnData.EpicProxyInformation.WhoYouCanManage = epicWhoYouCanManage;\r\n rtnData.PharmacyProxyInformation.WhoCanManageYou = rxWhoCanManageYou;\r\n rtnData.PharmacyProxyInformation.WhoYouCanManage = rxWhoYouCanManage;\r\n }\r\n }\r\n else if (type === types.PROXY_RELATIONSHIP_TYPES) {\r\n rtnData[\"Minor\"] = data && data[\"Minor\"].map(item => { return { ...item, label: item.RelationshipName }; });\r\n rtnData[\"Adult\"] = data && data[\"Adult\"].map(item => { return { ...item, label: item.RelationshipName }; });\r\n }\r\n return rtnData;\r\n}\r\n\r\nfunction getFallbackRelationTypes() {\r\n return {\r\n \"Minor\": [\r\n {\r\n \"IsRx\": false,\r\n \"label\": \"Parent/Guardian of Child\",\r\n \"RelationshipCode\": \"3-PC\",\r\n \"RelationshipName\": \"Parent/Guardian of Child\"\r\n },\r\n {\r\n \"IsRx\": false,\r\n \"label\": \"Step-Parent\",\r\n \"RelationshipCode\": \"3-PC\",\r\n \"RelationshipName\": \"Step-Parent\"\r\n },\r\n {\r\n \"IsRx\": false,\r\n \"label\": \"Foster Parent\",\r\n \"RelationshipCode\": \"3-PC\",\r\n \"RelationshipName\": \"Foster Parent\"\r\n },\r\n {\r\n \"IsRx\": false,\r\n \"label\": \"Grandparent\",\r\n \"RelationshipCode\": \"3-PC\",\r\n \"RelationshipName\": \"Grandparent\"\r\n },\r\n {\r\n \"IsRx\": false,\r\n \"label\": \"Other\",\r\n \"RelationshipCode\": \"4-OR\",\r\n \"RelationshipName\": \"Other\"\r\n }\r\n ],\r\n \"Adult\": [\r\n {\r\n \"IsRx\": true,\r\n \"label\": \"Spouse/Partner\",\r\n \"RelationshipCode\": \"1-SP\",\r\n \"RelationshipName\": \"Spouse/Partner\"\r\n },\r\n {\r\n \"IsRx\": true,\r\n \"label\": \"Child\",\r\n \"RelationshipCode\": \"2-CP\",\r\n \"RelationshipName\": \"Child\"\r\n },\r\n {\r\n \"IsRx\": true,\r\n \"label\": \"Parent/Guardian\",\r\n \"RelationshipCode\": \"3-PC\",\r\n \"RelationshipName\": \"Parent/Guardian\"\r\n },\r\n {\r\n \"IsRx\": true,\r\n \"label\": \"Other\",\r\n \"RelationshipCode\": \"4-OR\",\r\n \"RelationshipName\": \"Other\"\r\n }\r\n ]\r\n };\r\n}\r\n\r\nexport default function commonReducer(state = commonReducerInitialState, action) {\r\n const type = action.type;\r\n\r\n if (typeof type === 'string') {\r\n if (type === types.STAY_ON_INCOMPLETE_FORM) {\r\n return { ...state, stayOnIncompleteForm: action.stay };\r\n }\r\n else if (type === types.USER_TO_SWITCH) {\r\n return { ...state, userToSwitch: action.user };\r\n }\r\n else if (type.indexOf('pharmacyProxy') === 0 || type === types.PHARMACY_NOTIFICATION_PREFERENCE_SAVE || type.indexOf('REQUEST_PROXY') === 0\r\n || type.indexOf('mychartProxy') === 0 || type.indexOf('healthRecordProxy') === 0 || type.indexOf('hrp_proxyRequestData') === 0\r\n || type === types.GENERAL_NOTIFICATION_PREFERENCE_SAVE|| type === types.CARE_COACH_NOTIFICATION_PREFERENCE_SAVE || type === types.GET_USER_NOTIFICATION_PREFERENCE || type === types.PROXY_RELATIONSHIP_TYPES\r\n || type === types.INITIATE_PROXY_RX_REQUEST || type === types.INITIATE_PROXY_EPIC_REQUEST || type === types.INITIATE_PROXY_EPIC_GRANT || type === types.INITIATE_PROXY_RX_GRANT || type.indexOf('PROXY_STATUS') === 0 || type === types.PROXY_TERMS_AND_CONDITIONS || type === types.ACCEPT_PROXY_TERMS_AND_CONDITIONS || type === types.VERIFY_REQUESTOR_DOB || type.indexOf(types.PROXY_DETAILS) === 0) {\r\n if (action.success) {\r\n state[type] = { ...state[type], waiting: false, success: true, response: getProxyData(type, action.data, state[type] && state[type].request), error: null, errorMessage: null };\r\n }\r\n else if (action.failure) {\r\n state[type] = { ...state[type], waiting: false, success: false, response: (type === types.PROXY_RELATIONSHIP_TYPES) ? getFallbackRelationTypes() : null, error: action.error, errorMessage: null };\r\n } else if (action.pData) {\r\n state[type] = { ...state[type], pData: action.pData };\r\n }\r\n else {\r\n state[type] = {\r\n waiting: true, success: false, request: action.data,\r\n response: (type === types.REQUEST_PROXY_INFO && action && action.changeProxyStatus && state[type] && state[type].response) ? state[type].response : (type === types.PROXY_RELATIONSHIP_TYPES) ? getFallbackRelationTypes() : null, error: null, errorMessage: null\r\n };//making response and error null as it is still waiting for response. Exceptional for proxy info response.\r\n }\r\n }\r\n else if (type.indexOf('GOT_APP_UPDATE') === 0) {\r\n if (action.success) {\r\n state[type] = { ...state[type], waiting: false, success: true, response: action.data, error: null };\r\n }\r\n else if (action.failure) {\r\n state[type] = { ...state[type], waiting: false, success: false, response: null, error: action.error };\r\n }\r\n else {\r\n state[type] = { waiting: true, request: action.data };\r\n }\r\n\r\n if (action.data !== undefined) {\r\n return { ...state, rxDown: action.data.rxDown, aalDown: action.data.aalDown, swhpDown: action.data.swhpDown, epicEHRDown: action.data.epicEHRDown };\r\n }\r\n }\r\n\r\n if (type === types.UPDATE_MENU) {\r\n return { ...state, currentLocation: action.currentLocation };\r\n }\r\n if (type === types.HIDE_BANNER_ON_CRASH) {\r\n return { ...state, hideBannerOnCrash: action.value };\r\n }\r\n if (type === types.SET_PROXY_MESSAGE) {\r\n return { ...state, actionType: action.data.actionType };\r\n }\r\n if (type === types.CLEAR_PROXY_MESSAGE) {\r\n return { ...state, actionType: null };\r\n }\r\n\r\n if (type === types.INITIATE_PROXY_RX_REQUEST_FAILURE) {\r\n state[types.INITIATE_PROXY_RX_REQUEST] = { ...state[types.INITIATE_PROXY_RX_REQUEST], waiting: false, success: false, response: null, error: action.errorCode, errorMessage: action.errorMessage };\r\n }\r\n\r\n if (type === types.VERIFY_REQUESTOR_DOB_FAILURE) {\r\n state[types.VERIFY_REQUESTOR_DOB] = { ...state[types.VERIFY_REQUESTOR_DOB], waiting: false, success: false, response: null, error: action.error };\r\n }\r\n\r\n if (type === types.PROXY_TERMS_AND_CONDITIONS_FAILURE) {\r\n state[types.PROXY_TERMS_AND_CONDITIONS] = { ...state[types.PROXY_TERMS_AND_CONDITIONS], waiting: false, success: false, response: null, error: action.error };\r\n }\r\n\r\n if (type === types.ACCEPT_PROXY_TERMS_AND_CONDITIONS_FAILURE) {\r\n state[types.ACCEPT_PROXY_TERMS_AND_CONDITIONS] = { ...state[types.PROXY_TERMS_AND_CONDITIONS], waiting: false, success: false, response: null, error: action.error };\r\n }\r\n\r\n if (type === types.SET_EMAIL_APPROVED_PROXY_REQUEST) {\r\n return { ...state, actiontype: action.data.actionType, emailProxyRequestId: action.data.emailProxyRequestId, emailProxyRequestStatus: action.data.status, emailProxyRequestErrMsg: action.data.errorMessage };\r\n }\r\n\r\n if (type === types.CLEAR_EMAIL_PROXY_MESSAGE) {\r\n return { ...state, actionType: null, emailProxyRequestId: null, emailProxyRequestStatus: null, emailProxyRequestErrMsg: null };\r\n }\r\n\r\n if (type === types.LOGOUT_COMPLETED) {\r\n state[types.REQUEST_PROXY_INFO] = {\r\n waiting: false, success: false, request: null,\r\n response: null, error: null, errorMessage: null\r\n };\r\n state[types.PROXY_REQUEST_DATA] = {};\r\n }\r\n\r\n if (type === types.INITIATE_PROXY_EPIC_GRANT_FAILURE) {\r\n state[types.INITIATE_PROXY_EPIC_GRANT] = { ...state[types.INITIATE_PROXY_EPIC_GRANT], waiting: false, success: false, response: null, error: action.errorCode, errorMessage: action.errorMessage };\r\n }\r\n\r\n //if (type === types.INITIATE_PROXY_RX_GRANT_FAILURE) {\r\n // state[types.INITIATE_PROXY_RX_GRANT] = { ...state[types.INITIATE_PROXY_RX_GRANT], waiting: false, success: false, response: null, error: action.errorCode, errorMessage: action.errorMessage };\r\n //}\r\n\r\n if (type === types.CLEAR_REQUEST_PROXY_CHANGE_STATUS_ERROR) {\r\n state[types.REQUEST_PROXY_CHANGE_STATUS] = { ...state[types.REQUEST_PROXY_CHANGE_STATUS], error: null, errorMessage: null };\r\n }\r\n\r\n if (type === types.SET_SCREEN_BREAKPOINT) {\r\n return { ...state, screenBreakPoint: action.screenBreakPoint };\r\n }\r\n\r\n }\r\n\r\n return state;\r\n}\r\n","import * as types from \"../constants/actionTypes\";\r\nimport * as Tools from \"../helpers/Tools\";\r\n\r\nexport const dashboardInitialState = {\r\n dcjSelfOrderOptOutConfirm: false,\r\n hasSeenMembershipNotification: false,\r\n isMyChartInActive: false,\r\n isShowAllUsers: null,\r\n videoVisitLinks: null\r\n};\r\n\r\n\r\nexport default function dashboardReducer(state = dashboardInitialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_DASHBOARD_START:\r\n return { ...state, error: false, isFetching: true, todosWaiting: true, isEpicDashboardError: false };\r\n case types.LOAD_DASHBOARD_SUCCESS:\r\n return { ...state, isFetching: action.isWaiting, dashBoardDetails: action.dashBoardData, isEpicDashboardError: false };\r\n case types.LOAD_DASHBOARD_ERROR:\r\n return { ...state, isEpicDashboardError: true };\r\n case types.TODOS_SUCCESS:\r\n return { ...state, todosWaiting: action.isWaiting, todos: action.todos, todosError: null };\r\n case types.TODOS_FAILURE:\r\n return { ...state, todosWaiting: false, todosError: action.error };\r\n //case types.AJAX_CALL_ERROR:\r\n // debugger;\r\n // return { ...state, isFetching: false, error: action.error };\r\n case types.USER_LOGGED_OUT:\r\n //debugger;\r\n return { ...dashboardInitialState, error: action.errorCode };\r\n case types.GET_EPIC_LETTERS_SUCCESS:\r\n return { ...state, letters: action.letters, isLetterSuccess: true, lettersError: null };\r\n case types.GET_EPIC_LETTERS_FAILURE:\r\n return { ...state, letters: null, isLetterSuccess: false, lettersError: action.error };\r\n case types.LOAD_BFF_DASHBOARD_PENDING:\r\n return {\r\n ...state, bffDashboardData: { ...state.bffDashboardData, isWaiting: true, error: null, success: false }\r\n };\r\n case types.LOAD_BFF_DASHBOARD_SUCCESS:\r\n if (action.bffDashboardData && action.bffDashboardData.visits && action.bffDashboardData.visits.length > 0) {\r\n const visits = [...action.bffDashboardData.visits];\r\n\r\n const appointments = visits && visits.length > 0 && visits.map((acc, index) => {\r\n\r\n if (acc.appointmentDateTime && acc.patientInternalId) {\r\n return {\r\n ...acc, appointmenttimes: Tools.getCentralDateWithFormat(acc.appointmentDateTime, \"LT\"),\r\n appointmentEcheckinDays: Tools.differenceInDays(acc.appointmentDateTime),\r\n appointmentDateTimeForDisplay: Tools.getCentralDateWithFormat(acc.appointmentDateTime, \"MMM DD\"),\r\n appointmentTimeZone: Tools.getCentralDateWithFormat(acc.appointmentDateTime, 'z'),\r\n patientInternalId: acc.patientInternalId.trim(),\r\n }\r\n }\r\n return acc;\r\n });\r\n action.bffDashboardData.appointments = appointments;\r\n }\r\n\r\n let membershipNotification = null;\r\n if (!state.hasSeenMembershipNotification) {\r\n membershipNotification = action.bffDashboardData?.filteredMembershipNotifications\r\n }\r\n return {\r\n ...state, isMyChartInActive: action.bffDashboardData.isMyChartInActive, bffDashboardData: { ...state.bffDashboardData, isWaiting: false, data: action.bffDashboardData, membershipNotification: membershipNotification, error: null, success: true }\r\n };\r\n case types.LOAD_BFF_DASHBOARD_FAILURE:\r\n return {\r\n ...state, bffDashboardData: { isWaiting: false, data: null, error: true, success: false }\r\n };\r\n case types.SET_MEMBERSHIP_NOTI_RESPONSE:\r\n return {\r\n ...state, hasSeenMembershipNotification: true, bffDashboardData: { ...state.bffDashboardData, membershipNotification: null }\r\n }\r\n //case types.DCJ_SELF_ORDER_FAILURE:\r\n // return { ...state, dcjSelfOrderSuccess: false, dcjSelfOrderPending: false, dcjSelfOrderFailure: true };\r\n //case types.DCJ_SELF_ORDER_PENDING:\r\n // return { ...state, dcjSelfOrderSuccess: false, dcjSelfOrderPending: true };\r\n //case types.DCJ_SELF_ORDER_SUCCESS:\r\n // return { ...state, dcjSelfOrderSuccess: true, dcjSelfOrderPending: false, dcjSelfOrderFailure: false };\r\n\r\n\r\n //case types.DCJ_SELF_ORDER_OPTOUT_FAILURE:\r\n // return { ...state, dcjSelfOrderOptOutSuccess: false, dcjSelfOrderOptOutPending: false, dcjSelfOrderOptOutFailure: true };\r\n //case types.DCJ_SELF_ORDER_OPTOUT_PENDING:\r\n // return { ...state, dcjSelfOrderOptOutSuccess: false, dcjSelfOrderOptOutPending: true };\r\n //case types.DCJ_SELF_ORDER_OPTOUT_SUCCESS:\r\n // return { ...state, dcjSelfOrderOptOutSuccess: true, dcjSelfOrderOptOutPending: false, dcjSelfOrderOptOutFailure: false, dcjSelfOrderOptOutConfirm: true };\r\n //case types.UPDATE_DCJ_SELF_ORDER_OPTOUT_CONFIRM:\r\n // return { ...state, dcjSelfOrderOptOutConfirm: action.confirm };\r\n case types.GET_VIDEO_VISIT_LINK:\r\n let videoVisitLinks = state.videoVisitLinks ? state.videoVisitLinks : [];\r\n if (action && action.csn) {\r\n videoVisitLinks[action.csn] = {\r\n waitingOnVideoVisitLink: true\r\n }\r\n }\r\n return { ...state, videoVisitLinks };\r\n case types.GET_VIDEO_VISIT_LINK_SUCCESS:\r\n let tempVideoVisitLinks = state.videoVisitLinks;\r\n if (action && action.videoVisitLink && action.videoVisitLink.csn) {\r\n tempVideoVisitLinks[action.videoVisitLink.csn] = {\r\n ...action.videoVisitLink, waitingOnVideoVisitLink: false\r\n };\r\n }\r\n return { ...state, videoVisitLinks: tempVideoVisitLinks};\r\n case types.GET_VIDEO_VISIT_LINK_FAILURE:\r\n let tempvideoVisitLinksError = state.videoVisitLinks;\r\n if (action && action.csn) {\r\n tempvideoVisitLinksError[action.csn] = {\r\n ...action.error, waitingOnVideoVisitLink: false\r\n }\r\n }\r\n return { ...state, videoVisitLinks: tempvideoVisitLinksError};\r\n case types.GET_VIDEO_VISIT_LINK_RESET:\r\n return { ...state, videoVisitLinks: null };\r\n case types.LOAD_DASHBOARD_SEE_ALL_VIEW:\r\n return { ...state, isShowAllUsers: true };\r\n case types.RESET_DASHBOARD_SEE_ALL_VIEW:\r\n return { ...state, isShowAllUsers: false };\r\n case types.INITIAL_STATE_DASHBOARD_SEE_ALL_VIEW:\r\n return { ...state, isShowAllUsers: null };\r\n case types.DISCOVER_TILE_DISMISS_SUCCESS:\r\n console.info(`dashboardReducer DISCOVER_TILE_DISMISS_SUCCESS state, action`, state, action);\r\n const tile = action.tile;\r\n let tiles = [...state.bffDashboardData.data.userAppTiles.tiles];\r\n let tileIdx = tiles.map(t => { return t.tileId; }).indexOf(tile.tileId);\r\n tiles.splice(tileIdx, 1);\r\n //const newtiles = tiles.filter(t => { return t.itemId != tile.tileId });\r\n const returnState = {\r\n ...state, bffDashboardData: {\r\n ...state.bffDashboardData, data: {\r\n ...state.bffDashboardData.data, userAppTiles: {\r\n ...state.bffDashboardData.data.userAppTiles, tiles: tiles\r\n }\r\n }\r\n }\r\n };\r\n return {...returnState}\r\n default:\r\n return { ...state };\r\n\r\n }\r\n}","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const directSchedulingInitialState = {\r\n providerList: [],\r\n providerNpiList: [],\r\n providerNpiListStr: '',\r\n providerListFailure: false,\r\n providerListSuccess: false,\r\n providerListPending: false\r\n};\r\n\r\nexport default function directSchedulingReducer(state = directSchedulingInitialState, action) {\r\n switch (action.type) {\r\n case types.DIRECT_SCHEDULING_PROVIDER_LIST:\r\n return { ...state, providerListFailure: false, providerListPending: true, providerListSuccess: false };\r\n case types.DIRECT_SCHEDULING_PROVIDER_LIST_SUCCESS:\r\n // pull a list of NPIs from the returned model...what I wouldn't give for linq right now...\r\n //debugger;\r\n let npiList = action && action.providers && action.providers.map?action.providers.map((p, i) => {\r\n let ids = p.ProviderIds.filter(id => id.IdType === \"PROVIDER NPI\");\r\n return ids && ids.length > 0 ? ids[0].Id : \"\";\r\n }).filter(id => id !== \"\"):\"\";\r\n const providerNpiListStr = npiList ? npiList.toString() : '';\r\n return { ...state, providerList: action.providers, providerNpiList: npiList, providerNpiListStr: providerNpiListStr, providerListFailure: false, providerListSuccess: true, providerListPending: false };\r\n case types.DIRECT_SCHEDULING_PROVIDER_LIST_FAILURE:\r\n return { ...state, providerList: [], providerListFailure: true, providerListSuccess: false, providerListPending: false, providerNpiListStr: '' };\r\n case types.LOGOUT:\r\n return directSchedulingInitialState;\r\n default:\r\n return { ...state };\r\n }\r\n}\r\n","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const docsDataInitialState = {\r\n};\r\n\r\nexport default function docsReducer(state = docsDataInitialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_DOCS_DATA:\r\n return { ...state, docId: action.payload.docId, localization: action.payload.localization, error: false, isFetching: true };\r\n case types.LOAD_DOCS_DATA_SUCCESS:\r\n return { ...state, docsData: action.docsData, isFetching: false };\r\n case types.GET_PRIVACY_HEALTHPLAN_TEXT:\r\n return { ...state, healthPlanPrivacydata: { featureId: action.featureId, token: action.token, text: null, error: false, isFetching: true } };\r\n case types.GET_PRIVACY_HEALTHPLAN_TEXT_SUCCESS:\r\n return { ...state, healthPlanPrivacydata: { featureId: null, token: null, text: getTextToDisplay(action, 'healthPlanPrivacydata'), error: responseHasError(action, 'healthPlanPrivacydata'), isFetching: false } };\r\n case types.GET_PRIVACY_HEALTHPLAN_TEXT_FAILURE:\r\n return { ...state, healthPlanPrivacydata: { featureId: null, token: null, text: null, error: true, isFetching: false } };\r\n case types.GET_PRIVACY_MYBSWH_TEXT:\r\n return { ...state, isBSWHPrivacyAccepted: false, bswhPrivacydata: { featureId: action.featureId, token: action.token, text: null, error: false, isFetching: true } };\r\n case types.GET_PRIVACY_MYBSWH_TEXT_SUCCESS:\r\n return { ...state, isBSWHPrivacyAccepted: isAcceptedPrivacyData(action, 'bswhPrivacydata'), bswhPrivacydata: { featureId: null, token: null, text: getTextToDisplay(action, 'bswhPrivacydata'), error: responseHasError(action, 'bswhPrivacydata'), isFetching: false } };\r\n case types.UPDATE_PRIVACY_MYBSWH_ACCEPTED:\r\n return { ...state, isBSWHPrivacyAccepted: true };\r\n case types.GET_PRIVACY_MYBSWH_TEXT_FAILURE:\r\n return { ...state, isBSWHPrivacyAccepted: false, bswhPrivacydata: { featureId: null, token: null, text: null, error: true, isFetching: false } };\r\n case types.GET_PRIVACY_MYCHART_TEXT:\r\n return { ...state, myChartPrivacyData: { featureId: action.featureId, token: action.token, text: null, error: false, isFetching: true } };\r\n case types.GET_PRIVACY_MYCHART_TEXT_SUCCESS:\r\n return { ...state, myChartPrivacyData: { featureId: null, token: null, text: getTextToDisplay(action, 'myChartPrivacyData'), error: responseHasError(action, 'myChartPrivacyData'), isFetching: false } };\r\n case types.GET_PRIVACY_MYCHART_TEXT_FAILURE:\r\n return { ...state, myChartPrivacyData: { featureId: null, token: null, text: null, error: true, isFetching: false } }\r\n case types.FAQ:\r\n return { ...state, faq: { waiting: true, list: null, error: null } };\r\n case types.FAQ_SUCCESS:\r\n return { ...state, faq: { waiting: false, list: action.faq, error: null } };\r\n case types.FAQ_FAILURE:\r\n return { ...state, faq: { waiting: false, list: null, error: action.error } };\r\n default:\r\n return { ...state };\r\n }\r\n}\r\n\r\nfunction getTextToDisplay(action, privacyType) {\r\n let textToDisplay = \"\";\r\n try {\r\n if (action && action[privacyType] && action[privacyType].message && JSON.parse(action[privacyType].message) && JSON.parse(action[privacyType].message)[0] && JSON.parse(action[privacyType].message)[0].textToDisplay) {\r\n textToDisplay = JSON.parse(action[privacyType].message)[0].textToDisplay;\r\n }\r\n }\r\n catch (Exception) { \r\n //Json.Parse error\r\n console.log(Exception);\r\n }\r\n return textToDisplay;\r\n}\r\n\r\nfunction isAcceptedPrivacyData(action, privacyType) {\r\n let isAccepted = false;\r\n try {\r\n if (action && action[privacyType] && action[privacyType].message && JSON.parse(action[privacyType].message) && JSON.parse(action[privacyType].message)[0] && JSON.parse(action[privacyType].message)[0].isAccepted) {\r\n isAccepted = JSON.parse(action[privacyType].message)[0].isAccepted;\r\n }\r\n }\r\n catch (Exception) {\r\n //Json.Parse error\r\n console.log(Exception);\r\n }\r\n return isAccepted;\r\n}\r\n\r\nfunction responseHasError(action, privacyType){\r\n let hasError = false;\r\n try {\r\n if (action && action[privacyType] && typeof action[privacyType] !== 'undefined') {\r\n hasError = action[privacyType].isSuccessful?false:true;\r\n }\r\n } \r\n catch (Exception) { \r\n console.log(Exception);\r\n }\r\n return hasError;\r\n}","import * as types from \"../constants/actionTypes\";\r\nimport * as txt from \"../constants/textConstants\";\r\nimport * as msgs from \"../constants/textConstants\";\r\nimport * as features from \"../constants/MembershipFeatures\";\r\nimport Cookies from \"cookies-js\";\r\nimport { getDomain } from \"../helpers/Tools\";\r\nimport * as Tools from \"../helpers/Tools\";\r\nimport { v4 as uuidv4 } from 'uuid';\r\n\r\n\r\n// IMPORTANT!!! -->> do not forget to add any fields in this model to the serverside model, otherwise the properties are stripped on serverside render\r\nexport function domainInitialState()\r\n{\r\n var dLastReduced = new Date();\r\n dLastReduced.setDate(dLastReduced.getDate() - 1);\r\n\r\n //debugger;\r\n var oRet = \r\n {\r\n ds: null, // ds = Date saved\r\n li: false, // li = logged In\r\n lom: null, // lom = log out message\r\n hm: false, // hm = has MyChart\r\n ru: null, // ru = redirect URL\r\n //hp: false, // hp = has Pharmacy ***DEPRECATED\r\n hh: false, // hh = has HealthPlan\r\n rt: null, // rt = refresh token\r\n un: null, // un = healthsource UserName\r\n mc: null, // mc = MyChart ID\r\n amc: null, //amc = auto MyChart ID\r\n ei: null, // ei = Employee ID\r\n hi: null, // hi = HealthPlan ID\r\n ls: null, // ls = login status\r\n t: null, // t = token\r\n cu: null, // cu = current user\r\n pu: null, // pu = primary user\r\n pl: null, // pl = proxy list\r\n nc: null, // nc = networkcode\r\n e: null, // e = email, \r\n eid: null, // eid = EPID (from HealthSource API), \r\n tk: null, // tk = token key\r\n ct: false, // ct = Can access thrive\r\n ie: false, // ie = is employee\r\n cpu: null, // cpu = current pharmacy user\r\n dto: null, // dto = datetime offset (gathered initially on the client and then passsed up to the server to make time adjustments on postbacks),\r\n ip: false, // ip = Is Proxy\r\n z: null, // z = zipc ode\r\n c: Cookies.get(\"bsw-CorrelationId\") || uuidv4(), //c = correlationId\r\n s: Cookies.get(\"bsw-SessionId\") || uuidv4(), // s = sessionId\r\n fc: false, // Flu Consent\r\n ui: null, // ui = HealthSource UserID (guid)\r\n mq: false, // mq = Mobile per query string\r\n sb: false, // show custom graphics banner\r\n aal: false, // aal = has AAL\r\n aaal: false, //aaal = auto-aal\r\n lt: null, // latitude\r\n ln: null, // longitude\r\n aaai: null, // AA auto ID\r\n aai: null, // AA actual ID\r\n age: null,\r\n qp: null, // Redirect query params\r\n ix: false, //user has role Xealth_Member\r\n cm: null, //current proxy managers\r\n hri: null, // HealthRulesID\r\n hhri: false, // Has HealthRulesID\r\n hpid: null, // HCID (new healthplan username for Austin user database)\r\n l: null, // logins\r\n pre: null, // Health Plan Prefix\r\n hpp: false, // hpp is user payer\r\n sx: false, // show pharmacy\r\n lr: dLastReduced, // last reduced,\r\n dmc: false, // Dashboard Menu Collapsed\r\n };\r\n //debugger;\r\n return oRet;\r\n};\r\n\r\nexport const proxyListUser = {\r\n dn: null, // displayName\r\n ei: null, // externalId\r\n ii: null, // internalId\r\n mi: null, // myChartId\r\n eid: null, // eid\r\n ri: null, // relationshipId\r\n i: -1, // index\r\n ay: null, // age years\r\n dob: null, // birthDate\r\n im: false, // isMinor\r\n epi: null, //epi\r\n ed: null, //expire to-date,\r\n wprid: null //WPRINTERNAL ID\r\n};\r\n\r\n\r\nexport const pharmacyProxyUser = {\r\n fn: null, // first name\r\n ln: null, // last name\r\n id: null, // pharmacy patient id\r\n i: null // index\r\n};\r\n\r\n// IMPORTANT!!! -->> do not forget to add any fields in this model to the serverside model, otherwise the properties are stripped on serverside render\r\n\r\nexport function compressProxyUser(pu) {\r\n if (pu && pu.displayName) { \r\n return {\r\n dn: pu.displayName,\r\n ei: pu.externalId,\r\n ii: pu.internalId ? pu.internalId.trim() : null,\r\n mi: pu.myChartId + \"\",\r\n eid: pu.eid,\r\n ri: pu.relationshipId,\r\n i: pu.index,\r\n ay: pu.ageYears,\r\n dob: pu.dob,\r\n im: pu.isMinor,\r\n epi: pu.epi,\r\n ed: pu.expireDate ? pu.expireDate : null,\r\n wprid: pu.wprInternalID ? pu.wprInternalID : null\r\n };\r\n }\r\n return null;\r\n}\r\n\r\nexport function hydrateProxyUser(cu) {\r\n if (cu && cu.dn) { \r\n return {\r\n displayName: cu.dn,\r\n externalId: cu.ei,\r\n internalId: cu.ii,\r\n myChartId: cu.mi + \"\",\r\n eid: cu.eid,\r\n relationshipId: cu.ri,\r\n index: cu.i,\r\n ageYears: cu.ay,\r\n dob: cu.dob,\r\n isMinor: cu.im,\r\n epi: cu.epi,\r\n ed: cu.ed,\r\n wprInternalID: cu.wprid ? cu.wprid : null\r\n };\r\n }\r\n return null;\r\n}\r\n\r\nexport function compressPharmacyUser(pu) {\r\n if (pu && pu.pharmacyPatientId) {\r\n return {\r\n fn: pu.firstName,\r\n ln: pu.lastName,\r\n id: pu.pharmacyPatientId,\r\n i: pu.index\r\n };\r\n }\r\n}\r\n\r\nexport function hydratePharmacyUser(cu) {\r\n if (cu && cu.id) {\r\n return {\r\n firstName: cu.fn,\r\n lastName: cu.ln,\r\n pharmacyPatientId: cu.id,\r\n index: cu.i\r\n };\r\n }\r\n}\r\n\r\n\r\n\r\nexport default function domainReducer(state = domainInitialState(), action) {\r\n var myDomain = getDomain();\r\n var oRet;\r\n const isServerSide = typeof window === \"undefined\";\r\n switch (action.type) {\r\n case types.UPDATE_TOKEN_AND_REFRESH_TOKEN:\r\n //debugger;\r\n if (action.isLoggedIn) {\r\n //debugger;\r\n }\r\n return {\r\n ...state,\r\n t: action.token,\r\n rt: action.refreshToken,\r\n li: action.isLoggedIn\r\n };\r\n\r\n case types.LOGIN_FORM_SUCCESS:\r\n oRet = {\r\n ...state,\r\n lr: new Date(),\r\n s: uuidv4()\r\n };\r\n //debugger;\r\n Cookies.set(\"bsw-SessionId\", oRet.s, { path: '/', domain: myDomain });\r\n return oRet;\r\n\r\n case types.LOGIN:\r\n return {\r\n ...state,\r\n lr: new Date(),\r\n //s: uuidv4()\r\n };\r\n\r\n case types.CLEAR_USERLOGGEDOUT_MESSAGE:\r\n var sNewMessage = state.lom;\r\n if (sNewMessage === msgs.UserInitiatedLogoutMessage) {\r\n sNewMessage = null;\r\n }\r\n return {\r\n ...state,\r\n lr: new Date(),\r\n lom: sNewMessage\r\n };\r\n\r\n case types.LOGOUT_COMPLETED:\r\n //debugger;\r\n if (typeof window !== \"undefined\") {\r\n try { window.appInsights.clearAuthenticatedUserContext(); } catch (e) { }\r\n }\r\n //Cookies.set('authToken', \"\", { path: '/', domain: myDomain });\r\n //Cookies.set('refreshToken', \"\", { path: '/', domain: myDomain });\r\n if (typeof window !== \"undefined\") {\r\n window.currentUserName = null;\r\n }\r\n return {\r\n //...state,\r\n ...domainInitialState(),\r\n lr: new Date(),\r\n lom: state.lom,\r\n ru: action.DontClearRedirectURL ? state.ru : null,\r\n };\r\n case types.SET_HP_PREFIX:\r\n return {\r\n ...state,\r\n pre: action.prefix,\r\n lr: new Date()\r\n };\r\n case types.USER_LOGGED_OUT:\r\n //debugger;\r\n if (typeof window !== \"undefined\") {\r\n try { window.appInsights.clearAuthenticatedUserContext(); } catch (e) { }\r\n\r\n }\r\n let oLogoutState = {\r\n ...state,\r\n lom: action.logoutMessage || state.lom,\r\n ru: action.DontClearRedirectURL ? state.ru : null,\r\n s: uuidv4(),\r\n lr: new Date()\r\n };\r\n //debugger;\r\n Cookies.set(\"bsw-SessionId\", oLogoutState.s, { path: '/', domain: myDomain });\r\n return oLogoutState;\r\n\r\n case types.GRAPHIC_BANNER_UPDATE:\r\n return {\r\n ...state,\r\n sb: false,\r\n lr: new Date()\r\n };\r\n\r\n case types.MEMBERSHIP_GET_SUCCESS:\r\n try {\r\n var profileList = Tools.getProfileListFromMembershipData(action.data);\r\n\r\n var Proxies = [];\r\n // Overwrite existing proxy list\r\n var newProxyList = Tools.convertProfileListToProxyList(profileList);\r\n\r\n var currPrimUser = state.pu ? hydrateProxyUser(state.pu) : newProxyList[ 0]; // preserve current primary and add missing values (then replace in the array)\r\n\r\n newProxyList.forEach((c, index, arr) => {\r\n\r\n if (currPrimUser) {\r\n //debugger;\r\n if (currPrimUser.myChartId && c.myChartId && currPrimUser.myChartId.toUpperCase() === c.myChartId.toUpperCase()) {\r\n //debugger;\r\n currPrimUser.externalId = c.externalId;\r\n currPrimUser.internalId = c.internalId;\r\n currPrimUser.eid = c.eid;\r\n currPrimUser.myChartId = c.myChartId; // this corrects the casing differences\r\n currPrimUser.relationshipId = c.relationshipId;\r\n currPrimUser.eVisit = c.eVisit;\r\n currPrimUser.ageYears = c.ageYears;\r\n currPrimUser.dob = c.dob;\r\n currPrimUser.isMinor = c.isMinor;\r\n currPrimUser.epi = c.epi;\r\n currPrimUser.wprInternalID = c.wprInternalID;\r\n c = currPrimUser;\r\n }\r\n }\r\n Proxies.push(compressProxyUser(c));\r\n });\r\n var currCurrentUser = hydrateProxyUser(state.cu);\r\n if (!currCurrentUser) {\r\n currCurrentUser = currPrimUser;\r\n }\r\n\r\n //debugger;\r\n\r\n return {\r\n ...state,\r\n pl: Proxies,\r\n pu: compressProxyUser(currPrimUser),\r\n cu: compressProxyUser(currCurrentUser),\r\n hm: Tools.hasMyChart(action.data),\r\n mc: Tools.getMyChartID(action.data),\r\n //hp: Tools.hasFeature(action.data, features.RXModule) && Tools.getFeature(action.data, features.RXModule).active, // DEPRECATED\r\n sx: Tools.hasFeature(action.data, features.RXModule),\r\n lr: new Date()\r\n };\r\n\r\n }\r\n catch (ex) {\r\n console.error(ex);\r\n //debugger;\r\n throw ex;\r\n }\r\n\r\n case types.USER_AUTHENTICATE_FAILURE:\r\n if (typeof window !== \"undefined\") {\r\n try { window.appInsights.clearAuthenticatedUserContext(); } catch (e) { }\r\n }\r\n return {\r\n ...state,\r\n ls: action.type,\r\n lr: new Date()\r\n };\r\n\r\n case types.USER_AUTHENTICATE:\r\n return {\r\n ...state,\r\n lom: null,\r\n ls: action.type,\r\n //s: uuidv4(),\r\n lr: new Date()\r\n };\r\n case types.USER_AUTHENTICATE_ISLOGGEDIN:\r\n if (action.userData && action.userData.access_token)\r\n {\r\n //debugger;\r\n }\r\n return {\r\n ...state,\r\n li: action.userData && action.userData.access_token ? true : false,\r\n lr: new Date()\r\n };\r\n case types.USER_AUTHENTICATE_SUCCESS:\r\n //debugger;\r\n const userData = action.userData;\r\n const displayName = (userData.Givenname || userData.GivenName) + ' ' + userData.Surname;\r\n const epid = userData.EPID;\r\n const mychart = userData.MyChartID;\r\n //Cookies.set('authToken', action.userData.access_token, { path: '/', domain: myDomain });\r\n //Cookies.set('refreshToken', action.userData.refresh_token, { path: '/', domain: myDomain });\r\n if (typeof window !== \"undefined\") {\r\n window.currentUserName = action.userData.userName; // we write this down here so anyone anywhere in any javascript can grab the value and run with it\r\n if (window.appInsights) {\r\n try {\r\n window.appInsights.setAuthenticatedUserContext(window.currentUserName);\r\n }\r\n catch (eee) {\r\n console.error(eee);\r\n }\r\n }\r\n\r\n }\r\n\r\n // Parse Consents\r\n var bFluConsent = false;\r\n var sConsents = userData.Consents;\r\n if (sConsents) {\r\n var sParts = sConsents.split(\";\");\r\n for (var i = 0; i < sParts.length; i++) {\r\n if (sParts[i] !== \"\") {\r\n var sParts2 = sParts[i].split(\"=\");\r\n if (sParts2.length > 1) {\r\n if (sParts2[0] === window.serverData.data.currentFluKey) {\r\n bFluConsent = (sParts2[1] === \"1\");\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n \r\n //debugger;\r\n oRet = {\r\n ...state,\r\n t: action.userData.access_token,\r\n rt: action.userData.refresh_token,\r\n hm: action.userData.Logins && action.userData.Logins.toLowerCase().indexOf(\"mychart\") !== -1, // moved to memberships\r\n //hp: action.userData.Logins && action.userData.Logins.toLowerCase().indexOf(\"pharmacy\") !== -1 , //DEPRECATED\r\n hh: action.userData.Logins ? action.userData.Logins.toLowerCase().indexOf(\"healthplan\") !== -1 : false,\r\n ls: action.type,\r\n pu: compressProxyUser({ displayName: displayName, epid: epid, myChartId: (mychart ? mychart : \"\") }),\r\n un: action.userData.userName,\r\n mc: state.mc,\r\n ei: action.userData.EmpID,\r\n hi: action.userData.HealthPlanID,\r\n nc: action.userData.HealthPlanNetworkCode,\r\n e: action.userData.Email,\r\n eid: action.userData.EPID,\r\n tk: action.userData.TokenKey,\r\n z: action.userData.Zipcode,\r\n fc: bFluConsent,\r\n ie: action.userData.EmpID !== null && action.userData.EmpID !== \"\",\r\n ui: action.userData.Id,\r\n aal: action.userData.Logins ? action.userData.Logins.split(\",\").map(item => item.toLowerCase()).indexOf('aal') !== -1 : false,\r\n aaal: action.userData.Logins ? action.userData.Logins.split(\",\").map(item => item.toLowerCase()).indexOf('auto-aal') !== -1 : false,\r\n aaai: action.userData.AUTO_AAL,\r\n aai: action.userData.AAL,\r\n hri: action.userData.HealthRulesID,\r\n sb: true,\r\n age: action.userData.Age,\r\n amc: action.userData.AUTO_MyChartID ? action.userData.AUTO_MyChartID : null,\r\n ix: action.userData.Roles ? action.userData.Roles.toLowerCase().indexOf(\"xealth_member\") !== -1 : false,\r\n hhri: action.userData.HealthRulesID !== null && action.userData.HealthRulesID !== \"\",\r\n hpid: action.userData.hpUserIdentity,\r\n l: action.userData.Logins,\r\n lr: new Date()\r\n //s: uuidv4()\r\n };\r\n //debugger;\r\n //Cookies.set(\"bsw-SessionId\", oRet.s, { path: '/', domain: myDomain });\r\n return oRet;\r\n\r\n case types.HP_AMI_ISUSERPAYER_SUCCESS:\r\n return {\r\n ...state,\r\n hpp: action.isUserPayer,\r\n lr: new Date()\r\n };\r\n\r\n case types.HP_USERDATA_SUCCESS:\r\n return {\r\n ...state,\r\n hpid: action.hpUserIdentity.username,\r\n lr: new Date()\r\n };\r\n\r\n case types.SET_REDIRECT_URL:\r\n // at no point do we want the redirect url to become either login or acceptterms\r\n //debugger;\r\n let newURL = state.ru;\r\n let passedURL = action.URL;\r\n let params = '';\r\n if (action.params) {\r\n params = action.params;\r\n }\r\n if (passedURL && passedURL !== \"/login\" && passedURL !== \"/onboarding/acceptterms\") {\r\n newURL = passedURL;\r\n }\r\n window.redirectURL = newURL;\r\n return {\r\n ...state,\r\n ru: newURL,\r\n qp: params,\r\n lr: new Date()\r\n };\r\n\r\n case types.CLEAR_REDIRECT_URL:\r\n //debugger;\r\n window.redirectURL = null;\r\n return {\r\n ...state,\r\n ru: null,\r\n qp: null,\r\n lr: new Date()\r\n };\r\n\r\n case types.SWITCH_USER_REDUCER:\r\n let au = action.user;\r\n let isProxyUser = !Tools.usersAreTheSame(hydrateProxyUser(state.pu), au);\r\n return {\r\n ...state,\r\n cu: compressProxyUser(au),\r\n ip: isProxyUser,\r\n lr: new Date()\r\n };\r\n\r\n case types.SWITCH_TO_PHARMACY_USER:\r\n return {\r\n ...state,\r\n cpu: compressPharmacyUser(action.pharmacyUser),\r\n lr: new Date()\r\n };\r\n\r\n case types.THRIVE:\r\n return {\r\n ...state,\r\n ct: action.thrive.canVisitThrive,\r\n //ie: action.thrive.employeeLoggedIn,\r\n lr: new Date()\r\n };\r\n\r\n case types.GEOLOCATION_SUCCESS:\r\n return {\r\n ...state,\r\n lt: action.latitude,\r\n ln: action.longitude,\r\n lr: new Date()\r\n };\r\n case types.COOKIE_BSWPROXY_START:\r\n return {\r\n ...state,\r\n bswProxySwithcing: true,\r\n lr: new Date()\r\n };\r\n case types.COOKIE_BSWPROXY_SUCCESS:\r\n return {\r\n ...state,\r\n bswProxySwithcing: false,\r\n lr: new Date()\r\n };\r\n case types.LOAD_CURRENT_MANAGERS_SUCCESS:\r\n {\r\n const currManagerList = [];\r\n action.currManagerList.forEach((c, index, arr) => {\r\n currManagerList.push(compressProxyUser(c));\r\n }); \r\n \r\n return {\r\n ...state,\r\n cm: currManagerList,\r\n managerListFailure: false,\r\n lr: new Date()\r\n };\r\n }\r\n case types.LOAD_CURRENT_MANAGERS_FAILURE:\r\n return {\r\n ...state,\r\n cm: [],\r\n managerListFailure: true,\r\n lr: new Date()\r\n };\r\n case types.DASHBOARD_MENU_COLLAPSIBLE_STATE_CHANGE:\r\n return {\r\n ...state,\r\n dmc: action.isDashboardMenuCollapsed\r\n }\r\n default:\r\n let c = state.c;\r\n if (c === null) {\r\n //debugger;\r\n c = uuidv4();\r\n }\r\n return {\r\n ...state,\r\n dto: isServerSide ? state.dto : new Date().getTimezoneOffset(),\r\n c: c,\r\n lr: new Date()\r\n };\r\n\r\n }\r\n}","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const epicInitialState = {\r\n proxyRelationshipTypesPending: false,\r\n proxyRelationshipTypesSuccess: false,\r\n proxyRelationshipTypes: [],\r\n proxyRelationshipSetPending: false,\r\n proxyRelationshipSetSuccess: false,\r\n proxyRelationshipSetResult: null,\r\n proxyRelationshipGrantPending: false,\r\n proxyRelationshipGrantSuccess: false,\r\n proxyRelationshipGrantResult: null,\r\n proxyRelationshipGrantFailure:false,\r\n proxyRelationshipAcceptPending: false,\r\n proxyRelationshipAcceptSuccess: false,\r\n proxyRelationshipAcceptResult: null,\r\n proxyRelationshipDelete: null,\r\n eCheckInStatus: {},\r\n eCheckInStatusSuccess: false,\r\n eCheckInStatusPending: false,\r\n eCheckInStatusFailure: false,\r\n encryptCSN: null,\r\n encryptCSNSuccess: false,\r\n encryptCSNPending: false,\r\n encryptCSNFailure: false,\r\n};\r\n\r\nexport default function epicReducer(state = epicInitialState, action) {\r\n switch (action.type) {\r\n\r\n /*case types.PROXY_RELATIONSHIP_TYPES_PENDING:\r\n return { ...state, proxyRelationshipTypesPending: true };\r\n case types.PROXY_RELATIONSHIP_TYPES_SUCCESS:\r\n return { ...state, proxyRelationTypesPending: false, relationTypes: action.relationTypes, proxyRelationTypesFailure: false };\r\n case types.PROXY_RELATIONSHIP_TYPES_FAILURE:\r\n return { ...state, proxyRelationshipTypesPending: false, proxyRelationshipTypesSuccess: false, relationTypes: action.relationTypes };\r\n */\r\n case types.PROXY_RELATIONSHIP_SET_PENDING:\r\n return { ...state, proxyRelationshipSetPending: true };\r\n case types.PROXY_RELATIONSHIP_SET_SUCCESS:\r\n return { ...state, proxyRelationshipSetPending: false, proxyRelationshipSetSuccess: true, proxyRelationshipSetResult: action.result };\r\n case types.PROXY_RELATIONSHIP_SET_FAILURE:\r\n return { ...state, proxyRelationshipSetPending: false, proxyRelationshipSetSuccess: false, proxyRelationshipSetResult: null };\r\n\r\n case types.PROXY_RELATIONSHIP_GRANT_PENDING:\r\n return { ...state, proxyRelationshipGrantPending: true, proxyRelationshipGrantFailure: false, proxyRelationshipGrantSuccess: false };\r\n case types.PROXY_RELATIONSHIP_GRANT_SUCCESS:\r\n return { ...state, proxyRelationshipGrantPending: false, proxyRelationshipGrantSuccess: true, proxyRelationshipGrantResult: action.result };\r\n case types.PROXY_RELATIONSHIP_GRANT_FAILURE:\r\n return { ...state, proxyRelationshipGrantPending: false, proxyRelationshipGrantSuccess: false, proxyRelationshipGrantFailure: true, proxyRelationshipGrantResult: null, proxyRelationshipGrantFailureMsg: action.result };\r\n\r\n case types.PROXY_RELATIONSHIP_ACCEPT_PENDING:\r\n return { ...state, proxyRelationshipAcceptPending: true };\r\n case types.PROXY_RELATIONSHIP_ACCEPT_SUCCESS:\r\n return { ...state, proxyRelationshipAcceptPending: false, proxyRelationshipAcceptSuccess: true, proxyRelationshipAcceptResult: action.result };\r\n case types.PROXY_RELATIONSHIP_ACCEPT_FAILURE:\r\n return { ...state, proxyRelationshipAcceptPending: false, proxyRelationshipAcceptSuccess: false, proxyRelationshipAcceptResult: null, proxyRelationshipAcceptFailure: action.result ? action.result : \"We are not able to complete your request.\"};\r\n\r\n case types.PROXY_RELATIONSHIP_DELETE_PENDING:\r\n return { ...state, proxyRelationshipDelete: { waiting: true, resut: null, error: null } };\r\n case types.PROXY_RELATIONSHIP_DELETE_SUCCESS:\r\n return { ...state, proxyRelationshipDelete: { waiting: false, result: action.result, error: null } };\r\n case types.PROXY_RELATIONSHIP_DELETE_FAILURE:\r\n return { ...state, proxyRelationshipDelete: { waiting: false, result: null, error: action.error } };\r\n case types.GET_SPECIFIC_XEALTH_MESSAGE_PENDING:\r\n return { ...state, getXealthMessage: { waiting: true, messageUrl:null, error: null, conversationUrl: null}};\r\n case types.GET_SPECIFIC_XEALTH_MESSAGE_SUCCESS:\r\n return { ...state, getXealthMessage: { waiting: false, messageUrl: action.messageUrl, error: null, conversationUrl: action.conversationUrl } };\r\n case types.GET_SPECIFIC_XEALTH_MESSAGE_FAILURE:\r\n return { ...state, getXealthMessage: { waiting: false, messageUrl: null, error: true, conversationUrl: null, errorCode: action.errorCode } };\r\n\r\n case types.GET_ECHECKIN_STATUS_PENDING:\r\n return { ...state, eCheckInStatusSuccess: false, eCheckInStatusPending: true, eCheckInStatusFailure: false };\r\n case types.GET_ECHECKIN_STATUS_FAILURE:\r\n return { ...state, eCheckInStatusSuccess: false, eCheckInStatusPending: false, eCheckInStatusFailure: true };\r\n case types.GET_ECHECKIN_STATUS_SUCCESS:\r\n return { ...state, eCheckInStatus: action.eCheckInStatus, eCheckInStatusSuccess: true, eCheckInStatusPending: false, eCheckInStatusFailure: false };\r\n\r\n case types.GET_EPIC_ENCRYPT_CSN_PENDING:\r\n return { ...state, encryptCSNSuccess: false, encryptCSNPending: true, encryptCSNFailure: false };\r\n case types.GET_EPIC_ENCRYPT_CSN_SUCCESS:\r\n return { ...state, encryptCSN: action.encryptCSN, encryptCSNSuccess: true, encryptCSNPending: false, encryptCSNFailure: false };\r\n case types.GET_EPIC_ENCRYPT_CSN_FAILURE:\r\n return { ...state, encryptCSNSuccess: false, encryptCSNPending: false, encryptCSNFailure: true };\r\n \r\n\r\n default: return { ...state };\r\n }\r\n}\r\n","import * as types from \"../constants/actionTypes\";\r\n\r\n\r\nexport const errorInitialState = {\r\n};\r\n\r\nexport default function errorReducer(state = errorInitialState, action) {\r\n switch (action.type) {\r\n case types.APPLICATION_ERROR:\r\n return { ...state, componentErrors: [...state.componentErrors, action.error] };\r\n default:\r\n return { ...state };\r\n\r\n\r\n }\r\n}\r\n","import * as types from \"../constants/actionTypes\";\r\nimport * as Tools from \"../helpers/Tools\";\r\n\r\nexport function headerInitialState() {\r\n return {\r\n nonLoggedInNotices: null,\r\n loggedInNotices: null,\r\n loginStatus: null,\r\n thrive: null,\r\n error: null,\r\n forgotPassword: {},\r\n resetPassword: {},\r\n changeEmailError: false,\r\n changeEmailErrorText: null,\r\n changeEmailSuccessMessage: false,\r\n userNameResponse: null,\r\n userNameChangeIsWaiting: false,\r\n userNameUpdateError: null,\r\n apiUserNameErrorMessage: null,\r\n passwordChangeIsWaiting: false,\r\n passwordUpdateResponse: null,\r\n passwordUpdateError: null,\r\n apiPasswordErrorMessage: null,\r\n normalAppUpdateShow: true,\r\n isHeaderShrinked: false,\r\n }\r\n};\r\n\r\nexport default function headerReducer(state = headerInitialState(), action) {\r\n switch (action.type) {\r\n case types.NOTICES_NON_LOGGED_IN:\r\n return { \r\n ...state,\r\n nonLoggedInNotices: action.notices\r\n };\r\n case types.NOTICES_LOGGED_IN:\r\n return {\r\n ...state,\r\n loggedInNotices: action.notices\r\n };\r\n case types.NOTICES_NON_LOGGED_IN_HIDE:\r\n return {\r\n ...state,\r\n nonLoggedInNotices: null\r\n };\r\n case types.NOTICES_LOGGED_IN_HIDE:\r\n return {\r\n ...state,\r\n loggedInNotices: null\r\n };\r\n case types.THRIVE:\r\n return {\r\n ...state,\r\n thrive: action.thrive\r\n };\r\n case types.ZIPNOSIS_EVISIT_URL:\r\n return {\r\n ...state,\r\n zipnosis: { loading: true, request: action, url: null, errorMessage: null, hasError: false }\r\n };\r\n case types.ZIPNOSIS_EVISIT_URL_SUCCESS:\r\n return {\r\n ...state,\r\n zipnosis: { ...state.zipnosis, loading: false, url: action.url, errorMessage: null }\r\n };\r\n case types.ZIPNOSIS_EVISIT_URL_FAILURE:\r\n return {\r\n ...state,\r\n zipnosis: { ...state.zipnosis, loading: false, url: null, errorMessage: action.errorMessage, errorMessageName: action.errorMessageName, hasError: true }\r\n };\r\n case types.ZIPNOSIS_EVISIT_CLEAR:\r\n return {\r\n ...state,\r\n zipnosis: { loading: false, request: null, url: null, errorMessage: null, hasError: false }\r\n };\r\n case types.USER_AUTHENTICATE_SUCCESS:\r\n return {\r\n ...state,\r\n loginStatus: action.type\r\n };\r\n case types.LOGOUT_COMPLETED:\r\n return {\r\n ...headerInitialState(),\r\n };\r\n case types.LOGOUT:\r\n case types.USER_AUTHENTICATE:\r\n case types.USER_AUTHENTICATE_FAILURE:\r\n return {\r\n ...state,\r\n loginStatus: action.type,\r\n error: action.errorCode\r\n };\r\n case types.USER_LOGGED_OUT: return {\r\n ...headerInitialState(),\r\n loginStatus: action.type\r\n };\r\n\r\n case types.CHANGE_USERNAME:\r\n return {\r\n ...state,\r\n userNames: action.userNames,\r\n userNameChangeIsWaiting: true\r\n };\r\n case types.CHANGE_USERNAME_SUCCESS:\r\n return {\r\n ...state,\r\n userNameResponse: action.userNameUpdateResponse,\r\n userNameChangeIsWaiting: false,\r\n userNameUpdateError: null,\r\n apiUserNameErrorMessage: null\r\n };\r\n case types.CHANGE_USERNAME_FAILURE:\r\n return {\r\n ...state,\r\n userNameUpdateError: action.userNameError,\r\n userNameResponse: null,\r\n apiUserNameErrorMessage: action.apiErrorMessage,\r\n userNameChangeIsWaiting: false\r\n };\r\n case types.CHANGE_USERNAME_CLEAR:\r\n return {\r\n ...state,\r\n userNameUpdateError: null,\r\n userNameResponse: null,\r\n apiUserNameErrorMessage: null,\r\n userNameChangeIsWaiting: false\r\n };\r\n\r\n case types.CHANGE_PASSWORD:\r\n return {\r\n ...state,\r\n passwordData: action.passwordData,\r\n passwordChangeIsWaiting: true\r\n };\r\n case types.CHANGE_PASSWORD_SUCCESS:\r\n return {\r\n ...state,\r\n passwordUpdateResponse: action.passwordUpdateResponse,\r\n passwordChangeIsWaiting: false,\r\n passwordUpdateError: null,\r\n apiPasswordErrorMessage: null\r\n };\r\n case types.CHANGE_PASSWORD_FAILURE:\r\n return {\r\n ...state,\r\n passwordUpdateError: action.passwordError,\r\n passwordUpdateResponse: null,\r\n apiPasswordErrorMessage: action.apiErrorMessage,\r\n passwordChangeIsWaiting: false\r\n };\r\n case types.CHANGE_PASSWORD_CLEAR:\r\n return {\r\n ...state,\r\n passwordUpdateResponse: null,\r\n passwordUpdateError: null,\r\n apiPasswordErrorMessage: null,\r\n passwordChangeIsWaiting: false\r\n };\r\n\r\n case types.FORGOT_PASSWORD_START:\r\n return {\r\n ...state,\r\n forgotPassword: { ...state.forgotPassword, inProcess: true, success: null, failure: null }\r\n };\r\n case types.FORGOT_PASSWORD_FAILURE:\r\n return {\r\n ...state,\r\n forgotPassword: { ...state.forgotPassword, inProcess: false, failure: action.failure }\r\n };\r\n case types.FORGOT_PASSWORD_SUCCESS:\r\n return {\r\n ...state,\r\n forgotPassword: { ...state.forgotPassword, inProcess: false, success: action.success }\r\n };\r\n case types.FORGOT_PASSWORD_CLEAR:\r\n return {\r\n ...state,\r\n forgotPassword: { ...state.forgotPassword, inProcess: false, success: null, failure: null }\r\n };\r\n\r\n case types.RESET_PASSWORD_START:\r\n return {\r\n ...state,\r\n resetPassword: { ...state.resetPassword, inProcess: true, success: null, failure: null }\r\n };\r\n case types.RESET_PASSWORD_FAILURE:\r\n return {\r\n ...state,\r\n resetPassword: { ...state.resetPassword, inProcess: false, failure: action.failure }\r\n };\r\n case types.RESET_PASSWORD_SUCCESS:\r\n return {\r\n ...state,\r\n resetPassword: { ...state.resetPassword, inProcess: false, success: action.success }\r\n };\r\n\r\n case types.FORGOT_USERNAME_START:\r\n return {\r\n ...state,\r\n forgotUserNameWaiting: true,\r\n forgotUserNameError: false\r\n };\r\n case types.FORGOT_USERNAME_SUCCESS:\r\n return {\r\n ...state,\r\n forgotUserNameWaiting: false,\r\n forgotUserNameError: false,\r\n forgotUserNameSuccessMessage: action.forgotUserNameSuccessMessage,\r\n forgotUserNameFailureMessage: null\r\n };\r\n case types.FORGOT_USERNAME_FAILURE:\r\n return {\r\n ...state,\r\n forgotUserNameWaiting: false,\r\n forgotUserNameError: true,\r\n forgotUserNameFailureMessage: action.forgotUserNameFailureMessage,\r\n forgotUserNameSuccessMessage: null\r\n };\r\n case types.FORGOT_USERNAME_CLEAR:\r\n return {\r\n ...state,\r\n forgotUserNameWaiting: false,\r\n forgotUserNameError: null,\r\n forgotUserNameFailureMessage: null,\r\n forgotUserNameSuccessMessage: null\r\n };\r\n\r\n case types.RESET_LOGIN_SETTINGS_DATA:\r\n return {\r\n ...state,\r\n passwordUpdateError: false,\r\n passwordUpdateResponse: true,\r\n apiPasswordErrorMessage: false,\r\n userNameUpdateError: false,\r\n userNameResponse: true,\r\n apiUserNameErrorMessage: false\r\n };\r\n\r\n case types.CHANGE_EMAIL_START:\r\n return {\r\n ...state,\r\n changeEmailWaiting: true,\r\n changeEmailError: false\r\n };\r\n case types.CHANGE_EMAIL_SUCCESS:\r\n return {\r\n ...state,\r\n changeEmailWaiting: false,\r\n changeEmailError: false,\r\n changeEmailSuccessMessage: action.changeEmailSuccessMessage\r\n };\r\n case types.CHANGE_EMAIL_FAILURE:\r\n return {\r\n ...state,\r\n changeEmailWaiting: false,\r\n changeEmailError: action.changeEmailFailureMessage,\r\n changeEmailSuccessMessage: false,\r\n changeEmailErrorText: action.changeEmailErrorText\r\n };\r\n case types.CHANGE_EMAIL_CLEAR_MESSAGE:\r\n return {\r\n ...state,\r\n changeEmailError: null,\r\n changeEmailSuccessMessage: null,\r\n changeEmailErrorText: null\r\n };\r\n\r\n case types.GET_USER_PHONE_NUMBER_START:\r\n return {\r\n ...state,\r\n getPhoneNumberWaiting: true,\r\n getPhoneNumberError: false,\r\n getPhoneNumbererrorText: '',\r\n addOrUpdateSuccess: ''\r\n };\r\n\r\n case types.GET_USER_PHONE_NUMBER_SUCCESS:\r\n return {\r\n ...state,\r\n getUserPhoneNumberResponse: action.getUserPhoneNumberResponse,\r\n getPhoneNumberWaiting: false,\r\n getPhoneNumberError: false,\r\n getPhoneNumbererrorText: '',\r\n addOrUpdateSuccess: ''\r\n };\r\n\r\n case types.GET_USER_PHONE_NUMBER_FAILURE:\r\n return {\r\n ...state,\r\n getPhoneNumberWaiting: false,\r\n getPhoneNumberError: true,\r\n getPhoneNumbererrorText: action.getUserPhoneNumberErrorText\r\n };\r\n\r\n case types.ADD_OR_UPDATE_USER_PHONE_NUMBER_START:\r\n return {\r\n ...state,\r\n addOrUpdateSuccess: false,\r\n IsUpdateEror: false,\r\n statusMessage: \"Please wait...\"\r\n };\r\n\r\n case types.ADD_OR_UPDATE_USER_PHONE_NUMBER_SUCCESS:\r\n return {\r\n ...state,\r\n addOrUpdateSuccess: true,\r\n IsUpdateEror: false,\r\n statusMessage: action.addUpdateUserPhoneNumberSuccessText\r\n };\r\n\r\n case types.HIDE_NORMAL_APP_UPDATE:\r\n return {\r\n ...state,\r\n normalAppUpdateShow: false\r\n };\r\n\r\n case types.IS_HEADER_SHRINKED:\r\n return {\r\n ...state,\r\n isHeaderShrinked: action.isClassVisible,\r\n }\r\n\r\n default: return { ...state };\r\n\r\n }\r\n}","import * as types from \"../constants/actionTypes\";\r\n\r\n\r\nexport const healthplanInitialState = {\r\n countOfLinkAAError: 0\r\n};\r\n\r\nexport default function healthPlanReducer(state = healthplanInitialState, action) {\r\n switch (action.type) {\r\n case types.LOAD_HEALTHPLANDASHBOARD_START:\r\n return { ...state, error: false, isHealthPlanSuccess: false, isHealthPlanFailure: false, isFetching: true };\r\n case types.LOAD_HEALTHPLANDASHBOARD_SUCCESS:\r\n return { ...state, isFetching: action.isWaiting, isHealthPlanSuccess: true, healthPlanDashboardDetails: action.healthPlanDashboardData };\r\n case types.LOAD_HEALTHPLAN_DATA_START:\r\n return { ...state, healthPlanDataError: false, isHealthPlanDataPending: true, isHealthPlanDataSuccess: false, isHealthPlanDataFailed: false };\r\n case types.LOAD_HEALTHPLAN_DATA_SUCCESS:\r\n return { ...state, isHealthPlanDataPending: false, isHealthPlanDataSuccess: true, isHealthPlanDataFailed: false, healthPlanTileData: action.HealthPlanTileData, healthPlanDataError: false };\r\n case types.LOAD_HEALTHPLAN_DATA_FAILURE:\r\n return { ...state, isHealthPlanDataPending: false, isHealthPlanDataSuccess: false, isHealthPlanDataFailed: true, healthPlanTileData: null, healthPlanDataError: action.healthPlanDataError };\r\n case types.LINK_AUTO_HP_ACCOUNT_START:\r\n return { ...state, isAutoHPLinking: true, linkAutoHPSuccess: null, linkAutoHPError: false };\r\n case types.LINK_AUTO_HP_ACCOUNT_SUCCESS:\r\n return { ...state, isAutoHPLinking: false, linkAutoHPSuccess: \"We've successfully linked your account.\", linkAutoHPError: false };\r\n case types.LINK_AUTO_HP_ACCOUNT_FAILURE:\r\n return { ...state, isAutoHPLinking: false, linkAutoHPSuccess: null, linkAutoHPError: action.linkError };\r\n case types.LINK_AUTO_HP_ACCOUNT_CLEAR_MESSAGE:\r\n return { ...state, linkAutoHPSuccess: null, linkAutoHPError: null };\r\n\r\n\r\n case types.LINK_HEALTHPLAN_ACCOUNT:\r\n return { ...state, linkHP: { linking: true, success: false, error: null } };\r\n case types.LINK_HEALTHPLAN_ACCOUNT_SUCCESS:\r\n return { ...state, linkHP: { ...state.linkHP, linking: false, dob: action.dob, success: true, data: action.membershipProfile, successMessage: \"We have successfully linked your account!\", error: null } };\r\n case types.LINK_HEALTHPLAN_ACCOUNT_FAILURE:\r\n return { ...state, linkHP: { ...state.linkHP, linking: false, dob: action.dob, success: false, error: action.error } };\r\n case types.LINK_HEALTHPLAN_CLEAR_MESSAGE:\r\n return { ...state, linkHP: { linking: false, success: false, error: null } };\r\n\r\n case types.UNLINK_HEALTHPLAN_ACCOUNT:\r\n return { ...state, unlinkHP: { unlinking: true, success: false, error: null } };\r\n case types.UNLINK_HEALTHPLAN_ACCOUNT_SUCCESS:\r\n return { ...state, unlinkHP: { ...state.unlinkHP, unlinking: true, dob: action.dob, success: true, data: action.membershipProfile, successMessage: \"We have successfully unlinked your account!\", error: null } };\r\n case types.UNLINK_HEALTHPLAN_ACCOUNT_FAILURE:\r\n return { ...state, unlinkHP: { ...state.unlinkHP, unlinking: false, dob: action.dob, success: false, error: action.error } };\r\n case types.UNLINK_HEALTHPLAN_CLEAR_MESSAGE:\r\n return { ...state, unlinkHP: { unlinking: false, success: false, error: null } };\r\n\r\n case types.LINK_AA_ACCOUNT_START:\r\n return { ...state, linkAAError: false, linkAASuccess: null, isAALLinking: true };\r\n case types.LINK_AA_ACCOUNT_SUCCESS:\r\n return { ...state, isAALLinking: false, linkAASuccess: \"We've successfully linked your account.\", linkAAError: false, aalId: action.memberId || null };\r\n case types.LINK_AA_ACCOUNT_FAILURE:\r\n return { ...state, isAALLinking: false, linkAASuccess: null, linkAAError: action.linkError };\r\n case types.LINK_AA_ACCOUNT_ERROR_COUNT:\r\n if (action.countOfLinkAAError)\r\n return { ...state, countOfLinkAAError: 0 };\r\n else\r\n return { ...state, countOfLinkAAError: state.countOfLinkAAError + 1 };\r\n case types.LINK_AA_ACCOUNT_CLEAR_MESSAGE:\r\n return { ...state, linkAASuccess: null, linkAAError: null };\r\n\r\n case types.UNLINK_AA_ACCOUNT_START:\r\n return { ...state, unLinkAAError: false, unLinkAASuccess: null, isAALUnLinking: true };\r\n case types.UNLINK_AA_ACCOUNT_SUCCESS:\r\n return { ...state, isAALUnLinking: false, unLinkAASuccess: \"We've successfully unlinked your account.\", unLinkAAError: false };\r\n case types.UNLINK_AA_ACCOUNT_FAILURE:\r\n return { ...state, isAALUnLinking: false, unLinkAASuccess: null, unLinkAAError: action.unLinkAAError };\r\n case types.UNLINK_AA_ACCOUNT_CLEAR_MESSAGE:\r\n return { ...state, unLinkAASuccess: null, unLinkAAError: null };\r\n\r\n case types.LINK_FIRST_CARE_ACCOUNT:\r\n return { ...state, linkFirstCare: { linking: true, dob: action.dob, memberId: action.memberId, success: false, error: null } };\r\n case types.LINK_FIRST_CARE_ACCOUNT_SUCCESS:\r\n return { ...state, linkFirstCare: { ...state.linkFirstCare, linking: false, success: true, data: action.membershipProfile, successMessage: \"We have successfully linked your account!\", error: null } };\r\n case types.LINK_FIRST_CARE_ACCOUNT_FAILURE:\r\n return { ...state, linkFirstCare: { ...state.linkFirstCare, linking: false, success: false, error: action.error } };\r\n case types.LINK_FIRST_CARE_ACCOUNT_CLEAR:\r\n return { ...state, linkFirstCare: { linking: false, success: false, error: null } };\r\n\r\n case types.UNLINK_FIRST_CARE_ACCOUNT:\r\n return { ...state, unlinkFirstCare: { unlinking: true, memberId: action.memberId, success: false, error: null } };\r\n case types.UNLINK_FIRST_CARE_ACCOUNT_SUCCESS:\r\n return { ...state, unlinkFirstCare: { ...state.unlinkFirstCare, unlinking: false, success: true, data: action.membershipProfile, successMessage: \"We have successfully unlinked your account!\", error: null } };\r\n case types.UNLINK_FIRST_CARE_ACCOUNT_FAILURE:\r\n return { ...state, unlinkFirstCare: { ...state.unlinkFirstCare, unlinking: false, success: false, error: action.error } };\r\n case types.UNLINK_FIRST_CARE_ACCOUNT_CLEAR:\r\n return { ...state, unlinkFirstCare: { unlinking: false, success: false, error: null } };\r\n\r\n case types.LINK_DART_ACCOUNT:\r\n return { ...state, linkDart: { linking: true, dob: action.dob, success: false, error: null } };\r\n case types.LINK_DART_ACCOUNT_SUCCESS:\r\n return { ...state, linkDart: { ...state.linkDart, linking: false, success: true, data: action.data, successMessage: \"We have successfully linked your account!\", error: null } };\r\n case types.LINK_DART_ACCOUNT_FAILURE:\r\n return { ...state, linkDart: { ...state.linkDart, linking: false, success: false, error: action.error } };\r\n case types.LINK_DART_ACCOUNT_CLEAR:\r\n return { ...state, linkDart: { linking: false, success: false, error: null } };\r\n\r\n case types.UNLINK_DART_ACCOUNT:\r\n return { ...state, unlinkDart: { unlinking: true, success: false, error: null } };\r\n case types.UNLINK_DART_ACCOUNT_SUCCESS:\r\n return { ...state, unlinkDart: { ...state.unlinkDart, unlinking: false, success: true, data: action.data, successMessage: \"We've successfully unlinked your account.\", error: null } };\r\n case types.UNLINK_DART_ACCOUNT_FAILURE:\r\n return { ...state, unlinkDart: { ...state.unlinkDart, unlinking: false, success: false, error: action.error } };\r\n case types.UNLINK_DART_ACCOUNT_CLEAR:\r\n return { ...state, unlinkDart: { unlinking: false, success: false, error: null } };\r\n\r\n case types.LINK_WACO_ACCOUNT:\r\n return { ...state, linkWaco: { linking: true, dob: action.dob, success: false, error: null } };\r\n case types.LINK_WACO_ACCOUNT_SUCCESS:\r\n return { ...state, linkWaco: { ...state.linkWaco, linking: false, success: true, data: action.data, successMessage: \"We have successfully linked your account!\", error: null } };\r\n case types.LINK_WACO_ACCOUNT_FAILURE:\r\n return { ...state, linkWaco: { ...state.linkWaco, linking: false, success: false, error: action.error } };\r\n case types.LINK_WACO_ACCOUNT_CLEAR:\r\n return { ...state, linkWaco: { linking: false, success: false, error: null } };\r\n\r\n case types.UNLINK_WACO_ACCOUNT:\r\n return { ...state, unlinkWaco: { unlinking: true, success: false, error: null } };\r\n case types.UNLINK_WACO_ACCOUNT_SUCCESS:\r\n return { ...state, unlinkWaco: { ...state.unlinkWaco, unlinking: false, success: true, data: action.data, successMessage: \"We've successfully unlinked your account.\", error: null } };\r\n case types.UNLINK_WACO_ACCOUNT_FAILURE:\r\n return { ...state, unlinkWaco: { ...state.unlinkWaco, unlinking: false, success: false, error: action.error } };\r\n case types.UNLINK_WACO_ACCOUNT_CLEAR:\r\n return { ...state, unlinkWaco: { unlinking: false, success: false, error: null } };\r\n\r\n case types.AJAX_CALL_ERROR:\r\n return { ...state, isFetching: false, error: action.healthPlanError, isHealthPlanFailure: true };\r\n case types.USER_LOGGED_OUT:\r\n return { ...healthplanInitialState, error: action.errorCode };\r\n default:\r\n return { ...state };\r\n }\r\n}","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const healthPlanServicesState = {\r\n isFetching: false,\r\n isEOBAvailableFetching: false,\r\n claims: null,\r\n error: \"\"\r\n};\r\n\r\nexport default function healthPlanServicesReducer(state = healthPlanServicesState, action) {\r\n switch (action.type) {\r\n case types.LOGOUT:\r\n return {\r\n ...state, claims: null, usageDetails: null, claimDetail: null, idCardPdf: null, idCardImage: null, membersList: null, currentMemberId: null, planDetail: null, userProfile: null, eobDocument: null,\r\n docs: null, authorizations: null, authorizationDetail: null, authorizationApprovalLetter: null, invoices: null, invoiceDetails: null, docDetails: null, docName: null,\r\n invoicePDF: null, invoicePDFName: null, invoiceAdjustments: null, benefitPlans: null, requestedNewCard: null, subscription: null, crmMessages: null, crmSendMessageResponse: null,\r\n otherCoverage: null, otherCoverageRequestNumber: null, form: null, notificationPreferences: null, updateAddressResponse: null, paperDocument: null, corrEmailAddress: \"placeholder\"\r\n };\r\n\r\n case types.HP_GET_ACCUMULATOR_DATA_START:\r\n return { ...state, isFetching: true, usageDetails: null, error: null };\r\n case types.HP_GET_ACCUMULATOR_DATA_SUCCESS:\r\n return { ...state, usageDetails: action.usage, isFetching: false};\r\n case types.HP_GET_ACCUMULATOR_DATA_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_SERVICE_CATEGORIES_START:\r\n return { ...state, isFetching: true, serviceCategories: null, error: null };\r\n case types.HP_GET_SERVICE_CATEGORIES_SUCCESS:\r\n return { ...state, serviceCategories: action.serviceCategories, isFetching: false };\r\n case types.HP_GET_SERVICE_CATEGORIES_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_BENEFIT_PLANS_START:\r\n return { ...state, isFetching: true, benefitPlans: null, error: null };\r\n case types.HP_GET_BENEFIT_PLANS_SUCCESS:\r\n return { ...state, benefitPlans: action.benefitPlans, isFetching: false };\r\n case types.HP_GET_BENEFIT_PLANS_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_BENEFIT_DOCUMENTS_START:\r\n return { ...state, isFetching: true, benefitDocuments: null, error: null };\r\n case types.HP_GET_BENEFIT_DOCUMENTS_SUCCESS:\r\n return { ...state, benefitDocuments: action.benefitDocuments, isFetching: false };\r\n case types.HP_GET_BENEFIT_DOCUMENTS_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_BENEFIT_DOCUMENT_START:\r\n return { ...state, isFetching: true, benefitDocumentData: null, error: null };\r\n case types.HP_GET_BENEFIT_DOCUMENT_SUCCESS:\r\n return { ...state, benefitDocumentData: action.benefitDocumentData, isFetching: false };\r\n case types.HP_GET_BENEFIT_DOCUMENT_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_AUTHORIZATIONS_LIST_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_GET_AUTHORIZATIONS_LIST_SUCCESS:\r\n return { ...state, authorizations: action.authorizations, isFetching: false };\r\n case types.HP_GET_AUTHORIZATIONS_LIST_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_AUTHORIZATION_DETAIL_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_GET_AUTHORIZATION_DETAIL_SUCCESS:\r\n return { ...state, authorizationDetail: action.authorizationDetail, isFetching: false };\r\n case types.HP_GET_AUTHORIZATION_DETAIL_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_AUTHORIZATION_APPROVAL_LETTER_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_GET_AUTHORIZATION_APPROVAL_LETTER_SUCCESS:\r\n return { ...state, authorizationApprovalLetter: action.authorizationApprovalLetter, isFetching: false };\r\n case types.HP_GET_AUTHORIZATION_APPROVAL_LETTER_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_CLAIMS_LIST_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_GET_CLAIMS_LIST_SUCCESS:\r\n return { ...state, claims: action.claims, isFetching: false };\r\n case types.HP_GET_CLAIMS_LIST_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_CLAIM_DETAIL_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_GET_CLAIM_DETAIL_SUCCESS:\r\n return { ...state, claimDetail: action.claimDetail, isFetching: false };\r\n case types.HP_GET_CLAIM_DETAIL_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_OTHER_COVERAGE_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_GET_OTHER_COVERAGE_SUCCESS:\r\n return { ...state, otherCoverage: action.otherCoverage, isFetching: false };\r\n case types.HP_GET_OTHER_COVERAGE_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_UPDATE_OTHER_COVERAGE_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_UPDATE_OTHER_COVERAGE_SUCCESS:\r\n return { ...state, otherCoverageRequestNumber: action.otherCoverageRequestNumber, isFetching: false };\r\n case types.HP_UPDATE_OTHER_COVERAGE_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_NOTIFICATION_PREFERENCES_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_GET_NOTIFICATION_PREFERENCES_SUCCESS:\r\n return { ...state, notificationPreferences: action.notificationPreferences, isFetching: false };\r\n case types.HP_GET_NOTIFICATION_PREFERENCES_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_UPDATE_NOTIFICATION_PREFERENCES_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_UPDATE_NOTIFICATION_PREFERENCES_SUCCESS:\r\n return { ...state, notificationPreferences: action.notificationPreferences, isFetching: false };\r\n case types.HP_UPDATE_NOTIFICATION_PREFERENCES_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_TRIGGER_PAPER_DOCUMENT_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_TRIGGER_PAPER_DOCUMENT_SUCCESS:\r\n return { ...state, paperDocument: action.triggerPaperDocument, isFetching: false };\r\n case types.HP_TRIGGER_PAPER_DOCUMENT_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_SUBMIT_CLAIM_APPEAL_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_SUBMIT_CLAIM_APPEAL_SUCCESS:\r\n return { ...state, appealSubmitStatus: action.success, appealIssueId: action.issueId, isFetching: false };\r\n case types.HP_SUBMIT_CLAIM_APPEAL_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_IDCARD_START:\r\n return { ...state, idCardPdf: null, error: null, isFetching: true };\r\n case types.HP_GET_IDCARD_SUCCESS:\r\n return { ...state, idCardPdf: action.idCardPdf, downloading: action.downloading, isFetching: false };\r\n case types.HP_GET_IDCARD_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_IDCARD_IMAGE_START:\r\n return { ...state, idCardImage: null, error: null, isFetching: true };\r\n case types.HP_GET_IDCARD_IMAGE_SUCCESS:\r\n return { ...state, idCardImage: action.idCardImage, isFetching: false };\r\n case types.HP_GET_IDCARD_IMAGE_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_REQUEST_NEW_IDCARD_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_REQUEST_NEW_IDCARD_SUCCESS:\r\n return { ...state, requestedNewCard: action.response, isFetching: false };\r\n case types.HP_REQUEST_NEW_IDCARD_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_MEMBERS_LIST_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_GET_MEMBERS_LIST_SUCCESS:\r\n return { ...state, membersList: action.membersList, currentMemberId: action.currentMemberId, isFetching: false };\r\n case types.HP_GET_MEMBERS_LIST_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_CRM_MEMBER_MESSAGES_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_GET_CRM_MEMBER_MESSAGES_SUCCESS:\r\n return { ...state, crmMessages: action.crmMessages, isFetching: false };\r\n case types.HP_GET_CRM_MEMBER_MESSAGES_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_SEND_CRM_MESSAGE_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_SEND_CRM_MESSAGE_SUCCESS:\r\n return { ...state, isFetching: false, crmMessages: action.crmMessages };\r\n case types.HP_SEND_CRM_MESSAGE_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_CREATE_CRM_TICKET_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_CREATE_CRM_TICKET_SUCCESS:\r\n return { ...state, isFetching: false, crmSendMessageResponse: action.crmSendMessageResponse };\r\n case types.HP_CREATE_CRM_TICKET_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_BENEFIT_PLAN_DETAIL_START:\r\n return { ...state, isFetching: true, planDetail: null, error: null };\r\n case types.HP_GET_BENEFIT_PLAN_DETAIL_SUCCESS:\r\n return { ...state, planDetail: action.planDetail, isFetching: false };\r\n case types.HP_GET_BENEFIT_PLAN_DETAIL_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_IS_MEMBER_DPC_START:\r\n return { ...state, isFetching: true, isMemberDPC: null, error: null };\r\n case types.HP_GET_IS_MEMBER_DPC_SUCCESS:\r\n return { ...state, isMemberDPC: action.isMemberDPC, isFetching: false };\r\n case types.HP_GET_IS_MEMBER_DPC_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_PROFILE_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_GET_PROFILE_SUCCESS:\r\n return { ...state, userProfile: action.userProfile, isFetching: false };\r\n case types.HP_GET_PROFILE_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_UPDATE_MEMBER_ADDRESS_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_UPDATE_MEMBER_ADDRESS_SUCCESS:\r\n return { ...state, updateAddressResponse: action.updateAddressResponse, isFetching: false };\r\n case types.HP_UPDATE_MEMBER_ADDRESS_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_CORR_EMAIL_ADDRESS_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_GET_CORR_EMAIL_ADDRESS_SUCCESS:\r\n return { ...state, corrEmailAddress: action.corrEmailAddress, isFetching: false };\r\n case types.HP_GET_CORR_EMAIL_ADDRESS_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_EOB_DOCUMENT_START:\r\n return { ...state, isFetching: true, error: null };\r\n case types.HP_GET_EOB_DOCUMENT_SUCCESS:\r\n return { ...state, eobDocument: action.eobDocument, isFetching: false };\r\n case types.HP_GET_EOB_DOCUMENT_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_DOCUMENTS_LIST_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_DOCUMENTS_LIST_SUCCESS:\r\n return { ...state, docs: action.docs, isFetching: false };\r\n case types.HP_GET_DOCUMENTS_LIST_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_DOCUMENT_DETAIL_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_DOCUMENT_DETAIL_SUCCESS:\r\n return { ...state, docDetails: action.docDetails, docName: action.docName, isFetching: false };\r\n case types.HP_GET_DOCUMENT_DETAIL_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_INVOICES_LIST_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_INVOICES_LIST_SUCCESS:\r\n return { ...state, invoices: action.invoices, isFetching: false };\r\n case types.HP_GET_INVOICES_LIST_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_INVOICE_DETAIL_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_INVOICE_DETAIL_SUCCESS:\r\n return { ...state, invoiceDetails: action.invoiceDetails, isFetching: false };\r\n case types.HP_GET_INVOICE_DETAIL_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_INVOICE_ADJUSTMENTS_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_INVOICE_ADJUSTMENTS_SUCCESS:\r\n return { ...state, invoiceAdjustments: action.invoiceAdjustments, isFetching: false };\r\n case types.HP_GET_INVOICE_ADJUSTMENTS_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_INVOICE_PDF_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_INVOICE_PDF_SUCCESS:\r\n return { ...state, invoicePDF: action.invoicePDF, invoicePDFName: action.invoicePDFName, isFetching: false, error: null };\r\n case types.HP_GET_INVOICE_PDF_FAILURE:\r\n return { ...state, isFetching: false, error: action.error, invoicePDF: null, invoicePDFName: null };\r\n\r\n case types.HP_GET_FORM_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_FORM_SUCCESS:\r\n return { ...state, form: action.form, isFetching: false, error: null };\r\n case types.HP_GET_FORM_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_SUBSCRIPTION_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_SUBSCRIPTION_SUCCESS:\r\n return { ...state, subscription: action.subscription, isFetching: false, error: null };\r\n case types.HP_GET_SUBSCRIPTION_FAILURE:\r\n return { ...state, isFetching: false, error: action.error, subscription: null };\r\n\r\n case types.HP_GET_DENTAL_INVOICE_DETAIL_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_DENTAL_INVOICE_DETAIL_SUCCESS:\r\n return { ...state, dentalInvoiceDetails: action.dentalInvoiceDetails, isFetching: false, error: null };\r\n case types.HP_GET_DENTAL_INVOICE_DETAIL_FAILURE:\r\n return { ...state, isFetching: false, error: action.error, subscription: null };\r\n\r\n case types.HP_GET_GROUPED_PROCEDURES_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_GROUPED_PROCEDURES_SUCCESS:\r\n return { ...state, groupedProcedures: action.groupedProcedures, isFetching: false, error: null };\r\n case types.HP_GET_GROUPED_PROCEDURES_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_GROUPED_PROCEDURES_BY_CPT_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_GROUPED_PROCEDURES_BY_CPT_SUCCESS:\r\n return { ...state, cptProcedures: action.cptProcedures, isFetching: false, error: null };\r\n case types.HP_GET_GROUPED_PROCEDURES_BY_CPT_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n\r\n case types.HP_GET_PROCEDURE_COST_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_PROCEDURE_COST_SUCCESS:\r\n return { ...state, procedureCost: action.procedureCost, isFetching: false, error: null };\r\n case types.HP_GET_PROCEDURE_COST_FAILURE:\r\n return { ...state, isFetching: false, error: action.error };\r\n case types.HP_GET_PROCEDURE_COST_CLEAR:\r\n return { ...state, procedureCost: null, error: null };\r\n\r\n case types.HP_GET_TAX_DOCUMENT_LIST_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_TAX_DOCUMENT_LIST_SUCCESS:\r\n return { ...state, taxDocumentsList: action.taxDocumentsList, isFetching: false, error: null };\r\n case types.HP_GET_TAX_DOCUMENT_LIST_FAILURE:\r\n return { ...state, taxDocumentsList: null, error: null };\r\n\r\n case types.HP_GET_TAX_DOCUMENT_URL_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_TAX_DOCUMENT_URL_SUCCESS:\r\n return { ...state, taxDocumentUrl: action.taxDocumentUrl, isFetching: false, error: null };\r\n case types.HP_GET_TAX_DOCUMENT_URL_FAILURE:\r\n return { ...state, taxDocumentUrl: null, error: null };\r\n\r\n case types.HP_GET_SUPPORT_NOTIFICATION_START:\r\n return { ...state, isFetching: true };\r\n case types.HP_GET_SUPPORT_NOTIFICATION_SUCCESS:\r\n return { ...state, supportNoteMessage: action.supportMessage, isFetching: false, error: null };\r\n case types.HP_GET_SUPPORT_NOTIFICATION_FAILURE:\r\n return { ...state, supportNoteMessage: null, error: null };\r\n\r\n\r\n default:\r\n return { ...state };\r\n }\r\n}\r\n","import * as types from \"../constants/actionTypes\";\r\nimport * as tools from \"../helpers/Tools\";\r\n\r\nexport const healthsourceInitialState = {\r\n linkEmployeeFailureMessage: null,\r\n linkEmployeeSuccessMessage: null,\r\n linkEmployeeInProcess: false,\r\n unlinkEmployeeFailureMessage: null,\r\n unlinkEmployeeSuccessMessage: null,\r\n unlinkEmployeeInProcess: false,\r\n linkMyChartFailureMessage: null,\r\n linkMyChartSuccessMessage: null,\r\n linkMyChartInProcess: false,\r\n unlinkMyChartFailureMessage: null,\r\n unlinkMyChartSuccessMessage: null,\r\n unlinkMyChartInProcess: false,\r\n linkHealthPlanFailureMessage: null,\r\n linkHealthPlanSuccessMessage: null,\r\n linkHealthPlanInProcess: false,\r\n unlinkHealthPlanFailureMessage: null,\r\n unlinkHealthPlanSuccessMessage: null,\r\n unlinkHealthPlanInProcess: false,\r\n ProviderDetailNPIList: null,\r\n favoriteProviders: null,\r\n favoriteProvidersCards: null,\r\n fetchingFavoriteProviders: false,\r\n careTeamProviders: null,\r\n careTeamProvidersCards: null,\r\n fetchingCareTeamProviders: false,\r\n arrayFavoriteNPIs: [],\r\n arrayCareTeamNPIs: [],\r\n userAddress: null,\r\n fetchingLatLong: false,\r\n fetchingUserAddress: false,\r\n isFetchingUserAddressToLatLngFailure: false,\r\n countOfLinkMyChartError: 0,\r\n autolinkMyChartSuccess: null,\r\n recentVisitedDoctors: { response: null, success: false, failure: false, waiting: false }\r\n};\r\n\r\nfunction trimResultMessage(sMessage) {\r\n if (sMessage) {\r\n sMessage = sMessage.replace(/\"/g, \"\");\r\n\r\n //Commenting this code due to corelated issue with other api error message.\r\n //let iPeriod = sMessage.indexOf(\".\");\r\n //if (iPeriod > 0) {\r\n // return sMessage.substring(0, iPeriod + 1);\r\n //}\r\n //else {\r\n // return sMessage;\r\n //}\r\n\r\n return sMessage;\r\n }\r\n}\r\n\r\n\r\nfunction getErrorMsg(errorMsg) {\r\n const matchedPhoneNumber = errorMsg && errorMsg.match(/.*(\\d{3}\\.\\d{3}\\.\\d{4}).*/) && errorMsg.match(/.*(\\d{3}\\.\\d{3}\\.\\d{4}).*/)[1]; \r\n if (errorMsg && matchedPhoneNumber) {\r\n const phoneNumber = `
${matchedPhoneNumber} `;\r\n return { __html: `${trimResultMessage(errorMsg.replace(matchedPhoneNumber, phoneNumber))}` };\r\n } else {\r\n return {\r\n __html: `${trimResultMessage(errorMsg)}`\r\n };\r\n }\r\n}\r\n\r\nexport default function healthSourceReducer(state = healthsourceInitialState, action) { \r\n switch (action.type) {\r\n \r\n case types.LINK_EMPLOYEE_ACCOUNT_START:\r\n return { ...state, linkEmployeeFailureMessage: null, linkEmployeeSuccessMessage: null, linkEmployeeInProcess: true };\r\n\r\n case types.LINK_EMPLOYEE_ACCOUNT_FAILURE:\r\n return { ...state, linkEmployeeFailureMessage: getErrorMsg(action.errorText), linkEmployeeSuccessMessage: null, linkEmployeeInProcess: false };\r\n\r\n case types.LINK_EMPLOYEE_CLEAR_MESSAGE:\r\n return { ...state, linkEmployeeFailureMessage: null, linkEmployeeSuccessMessage: null };\r\n\r\n case types.LINK_EMPLOYEE_ACCOUNT_SUCCESS:\r\n return { ...state, linkEmployeeFailureMessage: null, linkEmployeeSuccessMessage: trimResultMessage(action.successText), linkEmployeeInProcess: false };\r\n\r\n\r\n case types.UNLINK_EMPLOYEE_ACCOUNT_START:\r\n return { ...state, unlinkEmployeeFailureMessage: null, unlinkEmployeeSuccessMessage: null, unlinkEmployeeInProcess: true };\r\n\r\n case types.UNLINK_EMPLOYEE_ACCOUNT_FAILURE:\r\n return { ...state, unlinkEmployeeFailureMessage: getErrorMsg(action.errorText), unlinkEmployeeSuccessMessage: null, unlinkEmployeeInProcess: false };\r\n\r\n case types.UNLINK_EMPLOYEE_CLEAR_MESSAGE:\r\n return { ...state, unlinkEmployeeFailureMessage: null, unlinkEmployeeSuccessMessage: null };\r\n\r\n case types.UNLINK_EMPLOYEE_ACCOUNT_SUCCESS:\r\n return { ...state, unlinkEmployeeFailureMessage: null, unlinkEmployeeSuccessMessage: trimResultMessage(action.successText), unlinkEmployeeInProcess: false };\r\n\r\n\r\n case types.LINK_MYCHART_ACCOUNT_START:\r\n return { ...state, linkMyChartFailureMessage: null, linkMyChartSuccessMessage: null, linkMyChartInProcess: true };\r\n\r\n case types.LINK_MYCHART_ACCOUNT_FAILURE:\r\n return { ...state, linkMyChartFailureMessage: getErrorMsg(action.errorText), linkMyChartSuccessMessage: null, linkMyChartInProcess: false };\r\n\r\n case types.LINK_MYCHART_CLEAR_MESSAGE:\r\n return { ...state, linkMyChartFailureMessage: null, linkMyChartSuccessMessage: null };\r\n\r\n case types.LINK_MYCHART_ACCOUNT_SUCCESS:\r\n return { ...state, linkMyChartFailureMessage: null, linkMyChartSuccessMessage: trimResultMessage(action.successText), linkMyChartInProcess: false };\r\n\r\n case types.UNLINK_MYCHART_ACCOUNT_START:\r\n return { ...state, unlinkMyChartFailureMessage: null, unlinkMyChartSuccessMessage: null, unlinkMyChartInProcess: true };\r\n\r\n case types.UNLINK_MYCHART_ACCOUNT_FAILURE:\r\n return { ...state, unlinkMyChartFailureMessage: getErrorMsg(action.errorText), unlinkMyChartSuccessMessage: null, unlinkMyChartInProcess: false };\r\n\r\n case types.UNLINK_MYCHART_CLEAR_MESSAGE:\r\n return { ...state, unlinkMyChartFailureMessage: null, unlinkMyChartSuccessMessage: null };\r\n\r\n case types.UNLINK_MYCHART_ACCOUNT_SUCCESS:\r\n return { ...state, unlinkMyChartFailureMessage: null, unlinkMyChartSuccessMessage: trimResultMessage(action.successText), unlinkMyChartInProcess: false };\r\n\r\n case types.LOAD_MYCHART_TERMS_DATA_START:\r\n return { ...state, myChartTermsFailureMessage: null, myChartTermsSuccessMessage: null, myChartTermsInProcess: true };\r\n\r\n case types.LOAD_MYCHART_TERMS_DATA_FAILURE:\r\n return { ...state, myChartTermsFailureMessage: action.errorText, myChartTermsSuccessMessage: null, myChartTermsInProcess: false };\r\n\r\n case types.LOAD_MYCHART_TERMS_DATA_SUCCESS:\r\n return { ...state, myChartTermsFailureMessage: null, myChartTermsSuccessMessage: action.successText, myChartTermsInProcess: false };\r\n\r\n case types.LOAD_HEALTHSOURCEDASHBOARD_START:\r\n return { ...state, error: false, isFetching: true };\r\n case types.LOAD_HEALTHSOURCEDASHBOARD_SUCCESS:\r\n var oNewData = [];\r\n action.healthSourceDashboardData.forEach(function (old, index) {\r\n oNewData.push({\r\n Name: old.Name,\r\n ActionLink: old.ActionLink,\r\n ImageURL: old.ImageURL,\r\n FeatureName: old.FeatureName,\r\n Title: old.Title,\r\n TileId: old.TileId,\r\n Tags: old.Tags \r\n });\r\n });\r\n return { ...state, isFetching: action.isWaiting, healthSourceDashboardDetails: oNewData };\r\n case types.AJAX_CALL_ERROR:\r\n return { ...state, isFetching: false, healthSourceError: action.healthSourceError };\r\n case types.USER_LOGGED_OUT:\r\n return { ...healthsourceInitialState, error: action.errorCode };\r\n\r\n case types.GET_FAVORITE_PROVIDERS_START:\r\n return { ...state, fetchingFavoriteProviders: true };\r\n case types.GET_FAVORITE_PROVIDERS_SUCCESS:\r\n return { ...state, fetchingFavoriteProviders: false, fetchingCareTeamProviders: false };\r\n case types.GET_FAVORITE_PROVIDERS_FAILURE:\r\n return { ...state, fetchingFavoriteProviders: false, fetchingCareTeamProviders: false };\r\n\r\n //case types.GET_CARETEAM_PROVIDERS_START:\r\n // return { ...state, fetchingCareTeamProviders: true };\r\n //case types.GET_CARETEAM_PROVIDERS_SUCCESS:\r\n // //debugger;\r\n // oDisplayList = tools.splitIntoRowsOf(action.providerList, 2);\r\n // return { ...state, careTeamProviders: action.providerList, careTeamProvidersCards: oDisplayList, fetchingCareTeamProviders: false };\r\n //case types.GET_CARETEAM_PROVIDERS_FAILURE:\r\n // return { ...state, careTeamProviders: null, careTeamProvidersCards: null, fetchingCareTeamProviders: false };\r\n\r\n\r\n case types.ADD_FAVORITE_PROVIDER_SUCCESS:\r\n //let oAddedList = state.favoriteProviders;\r\n //action.newFavorite.forEach((old, index) => {\r\n // oAddedList.push(old);\r\n //});\r\n return {\r\n ...state,\r\n //favoriteProviders: oAddedList,\r\n //favoriteProvidersCards: tools.splitIntoRowsOf(oAddedList, 2),\r\n fetchingFavoriteProviders: false\r\n };\r\n\r\n case types.REMOVE_FAVORITE_PROVIDER_SUCCESS:\r\n // Just reduce out the removed provider rather than refetch\r\n //let oCurrentList = state.favoriteProviders;\r\n //let oNewList = [];\r\n //oCurrentList.forEach(function (old, index) {\r\n // if (old.NPI !== action.npi) {\r\n // oNewList.push(old);\r\n // }\r\n //});\r\n return {\r\n ...state,\r\n //favoriteProviders: oNewList,\r\n //favoriteProvidersCards: tools.splitIntoRowsOf(oNewList, 2),\r\n fetchingFavoriteProviders: false\r\n };\r\n\r\n case types.SET_PROVIDER_DETAILS_NPI_LISTS:\r\n return { ...state, arrayFavoriteNPIs: action.arrayFavoriteNPIs, arrayCareTeamNPIs: action.arrayCareTeamNPIs };\r\n\r\n case types.SET_PARSED_PROVIDER_DETAILS_LISTS:\r\n let sorted = action.arrayFavorites && action.arrayFavorites.length > 0 ?\r\n action.arrayFavorites.sort((a, b) => a.lastName < b.lastName ? -1 : 0) :\r\n [];\r\n return {\r\n ...state,\r\n favoriteProvidersCards: tools.splitIntoRowsOf(sorted, 2), // we only need the reduced copies now (since we have the master ProviderDetailList and NPI string arrays)\r\n careTeamProvidersCards: tools.splitIntoRowsOf(action.arrayCareTeam, 2)\r\n };\r\n\r\n case types.GET_USER_ADDRESS_START:\r\n return { ...state, fetchingUserAddress: true };\r\n case types.GET_USER_ADDRESS_SUCCESS:\r\n return { ...state, userAddress: action.getUserAddressResponse, fetchingUserAddress: false };\r\n case types.GET_USER_ADDRESS_FAILURE:\r\n return { ...state, userAddress: null, fetchingUserAddress: false };\r\n case types.GET_LAT_LNG_USER_ADDRESS_START:\r\n return { ...state, fetchingLatLong: true, isFetchingUserAddressToLatLngFailure: false };\r\n case types.GET_LAT_LNG_USER_ADDRESS_SUCCESS:\r\n return { ...state, userLocation: { lat: action.getLatLongResponse && action.getLatLongResponse.lat ? action.getLatLongResponse.lat : null, lng: action.getLatLongResponse && action.getLatLongResponse.lng ? action.getLatLongResponse.lng : null }, fetchingLatLong: false, isFetchingUserAddressToLatLngFailure: false };\r\n case types.GET_LAT_LNG_USER_ADDRESS_FAILURE:\r\n return {\r\n ...state, userLocation: null, fetchingLatLong: false, isFetchingUserAddressToLatLngFailure: true\r\n }; \r\n case types.AUTOLINK_MYCHART:\r\n return { ...state, isAutoLinkMyChartWaiting: true};\r\n case types.AUTOLINK_MYCHART_FAILURE:\r\n return { ...state, autolinkMyChartSuccess: null, isAutoLinkMyChartWaiting: false, autolinkMyChartFailure: action.autolinkMyChartFailure };\r\n case types.AUTOLINK_MYCHART_SUCCESS:\r\n return { ...state, autolinkMyChartSuccess: action.autolinkMyChartSuccess, isAutoLinkMyChartWaiting: false };\r\n case types.AUTOLINK_MYCHART_ERROR_COUNT: \r\n return { ...state, countOfLinkMyChartError: action.payload ? action.payload.countOfLinkMyChartError : state.countOfLinkMyChartError + 1 };\r\n case types.AUTOLINK_MYCHART_CLEAR_MESSAGE:\r\n return { ...state, autolinkMyChartSuccess: null, autolinkMyChartFailure: null };\r\n case types.GET_RECENT_VISITED_DOCTORS_START:\r\n return { ...state, recentVisitedDoctors: { response: null, success: false, failure: false, waiting: true } };\r\n case types.GET_RECENT_VISITED_DOCTORS_SUCCESS:\r\n return { ...state, recentVisitedDoctors: { response: action.recentVisitedDoctors, success: true, failure: false, waiting: false } };\r\n case types.GET_RECENT_VISITED_DOCTORS_FAILURE:\r\n return { ...state, recentVisitedDoctors: { response: null, success: false, failure: true, waiting: false } };\r\n default:\r\n return { ...state };\r\n }\r\n}","import * as types from \"../constants/actionTypes\";\r\nimport { cloneDeep, isEqual } from \"lodash\";\r\n\r\nexport const inHomeInitialState = function () {\r\n return {\r\n selectedUsers: [],\r\n prefilledDataPending: null,\r\n prefilledData: null,\r\n prefilledCities: null,\r\n serviceLocationContactInfo: null,\r\n getVaccinePending: null,\r\n getVaccineResult: null, // result ex {data: '', success: true, errorMsg: null}\r\n selectedVaccines: null,\r\n getEligibilityQPending: null,\r\n getEligibilityQResult: null,\r\n eligibilityResponses: null,\r\n getAvailableApptsPending: null,\r\n getAvailableApptsResult: null,\r\n selectedDateTime: null,\r\n bookApptPending: null,\r\n bookApptResult: null,\r\n finalConfirmationDetails: null, \r\n getCovidQuestionnaireQResult: null,\r\n covidServiceResults: null,\r\n validateZipCodeResult: null,\r\n validateZipCodeResultPending: null,\r\n vaccineNudgeClicked: null\r\n }\r\n};\r\n\r\nexport default function inHomeReducer(state = inHomeInitialState(), action) {\r\n switch (action.type) {\r\n\r\n //every time users is set, clear data that is later in the scheduling flow\r\n case types.SET_SELECTED_USERS:\r\n return { ...state, selectedUsers: action.selectedUsers, };\r\n\r\n case types.GET_INHOME_PREFILL:\r\n return { ...state, prefilledDataPending: true, }\r\n\r\n case types.GET_INHOME_PREFILL_RESULT:\r\n return { ...state, prefilledData: action.data, prefilledCities: action.data.cities, serviceLocationContactInfo: null, prefilledDataPending: false }\r\n\r\n //every time loc is set, and it is different than before, clear data that is later in the scheduling flow\r\n case types.SET_INHOME_LOCATION:\r\n if (!isEqual(state.serviceLocationContactInfo, action.address)) {\r\n return {\r\n ...state, serviceLocationContactInfo: action.address,\r\n getVaccinePending: null,\r\n getVaccineResult: null, // result ex {data: '', success: true, errorMsg: null}\r\n selectedVaccines: null,\r\n getEligibilityQPending: null,\r\n getEligibilityQResult: null,\r\n eligibilityResponses: null,\r\n getAvailableApptsPending: null,\r\n getAvailableApptsResult: null,\r\n selectedDateTime: null,\r\n bookApptPending: null,\r\n bookApptResult: null,\r\n finalConfirmationDetails: null\r\n }\r\n } else return { ...state }\r\n\r\n case types.GET_INHOME_VACCINES:\r\n return { ...state, getVaccinePending: true, getVaccineResult: null }\r\n\r\n case types.GET_INHOME_VACCINES_RESULT:\r\n return { ...state, getVaccineResult: action.data, getVaccinePending: false }\r\n\r\n //every time vaccines is set, and it is different than before, clear data that is later in the scheduling flow\r\n case types.SET_INHOME_VACCINES:\r\n if (!isEqual(state.selectedVaccines, action.data)) {\r\n return {\r\n ...state, selectedVaccines: action.data,\r\n getEligibilityQPending: null,\r\n getEligibilityQResult: null,\r\n eligibilityResponses: null,\r\n getAvailableApptsPending: null,\r\n getAvailableApptsResult: null,\r\n selectedDateTime: null,\r\n bookApptPending: null,\r\n bookApptResult: null,\r\n finalConfirmationDetails: null\r\n }\r\n } else return { ...state }\r\n\r\n case types.GET_INHOME_ELIGIBILITY_Q:\r\n return { ...state, getEligibilityQResult: null, getEligibilityQPending: true, }\r\n\r\n case types.GET_INHOME_ELIGIBILITY_Q_RESULT:\r\n return { ...state, getEligibilityQResult: action.data, getEligibilityQPending: false }\r\n\r\n case types.GET_INHOME_ELIGIBILITY_COVID_Q:\r\n return { ...state, getCovidQuestionnaireQResult: null, getEligibilityQPending: true, }\r\n\r\n case types.GET_INHOME_ELIGIBILITY_COVID_Q_RESULT:\r\n return { ...state, getCovidQuestionnaireQResult: action.data, getEligibilityQPending: false }\r\n\r\n //Validate Zip Codes on InHomeWhich page\r\n case types.VALIDATE_INHOME_ZIPCODE:\r\n return { ...state, validateZipCodeResult: null, validateZipCodeResultPending: true }\r\n\r\n case types.SET_VALIDATE_INHOME_ZIPCODE_RESULT:\r\n return { ...state, validateZipCodeResult: action.data, validateZipCodeResultPending: false }\r\n //End Validate Zip Codes on InHomeWhich page\r\n\r\n case types.REMOVE_VACCINE: {\r\n let newSelectedVaccines = state.selectedVaccines.map((user) => {\r\n if (user.mrn === action.userMrn) {\r\n user.vaccines_groups.map(group => {\r\n group.vaccines.map((vacc) => {\r\n if (vacc.display_name === action.vaccineName) {\r\n vacc.isChecked = false;\r\n }\r\n })\r\n })\r\n }\r\n return user\r\n })\r\n\r\n return { ...state, selectedVaccines: newSelectedVaccines }\r\n }\r\n\r\n //every time eligibility is set, and it is different than before, clear data that is later in the scheduling flow\r\n case types.SEND_INHOME_ELIGIBILITY_RESPONSES:\r\n if (!isEqual(state.eligibilityResponses, action.response)) {\r\n return {\r\n ...state, eligibilityResponses: action.response,\r\n getAvailableApptsPending: null,\r\n getAvailableApptsResult: null,\r\n selectedDateTime: null,\r\n bookApptPending: null,\r\n bookApptResult: null,\r\n finalConfirmationDetails: null\r\n }\r\n } else return { ...state }\r\n\r\n case types.GET_INHOME_APPTS:\r\n return { ...state, getAvailableApptsPending: action.secret ? false : true }\r\n\r\n case types.GET_INHOME_APPTS_RESULT:\r\n return { ...state, getAvailableApptsPending: false, getAvailableApptsResult: action.data }\r\n\r\n //every time appt time is set, and it is different than before, clear data that is later in the scheduling flow\r\n case types.SET_INHOME_DATETIME:\r\n if (!isEqual(state.selectedDateTime, action.selectedDateTime)) {\r\n return {\r\n ...state, selectedDateTime: action.selectedDateTime,\r\n bookApptPending: null,\r\n bookApptResult: null,\r\n finalConfirmationDetails: null\r\n }\r\n } else return { ...state }\r\n\r\n case types.BOOK_INHOME_APPT:\r\n return { ...state, bookApptPending: true }\r\n\r\n case types.BOOK_INHOME_APPT_RESULT:\r\n // if booking the appt was successful, clear out state (after cloning into a separate section for confirmation details)\r\n if (action.data.success) {\r\n let finalConfirmationDetails = {\r\n serviceLocationContactInfo: cloneDeep(state.serviceLocationContactInfo),\r\n selectedDateTime: cloneDeep(state.selectedDateTime),\r\n selectedVaccines: cloneDeep(state.selectedVaccines)\r\n }\r\n return { ...inHomeInitialState(), bookApptPending: false, bookApptResult: action.data, finalConfirmationDetails, prefilledCities: cloneDeep(state.prefilledCities) }\r\n }\r\n else {\r\n return { ...state, bookApptPending: false, bookApptResult: action.data }\r\n }\r\n\r\n case types.SAVE_COVID_SERVICE_RESULTS:\r\n console.log(\"In InHomeReducer...saving CovidServiceResults \", action.covidServiceResults);\r\n return { ...state, covidServiceResults: action.covidServiceResults }\r\n\r\n case types.RESET_COVID_DATA:\r\n let updatedState = action.resetOnlyCovidQData ? { getCovidQuestionnaireQResult: null } : { getCovidQuestionnaireQResult: null, covidServiceResults: null }\r\n return {\r\n ...state, ...updatedState\r\n }\r\n case types.INHOME_NUDGE_MODAL_VIEWED:\r\n return { ...state, vaccineNudgeClicked: true }\r\n \r\n\r\n case types.LOGOUT_COMPLETED:\r\n return inHomeInitialState();\r\n\r\n case types.CANCEL_INHOME_BOOKING:\r\n return inHomeInitialState();\r\n\r\n\r\n default:\r\n return { ...state };\r\n }\r\n}\r\n\r\n","import * as types from \"../constants/actionTypes\";\r\nimport * as tools from \"../helpers/Tools\";\r\n\r\nexport const inMemoryReducerInitialState = function () {\r\n return {\r\n waiting: false,\r\n success: true,\r\n response: null,\r\n hideBannerOnCrash: false,\r\n stayOnIncompleteForm: false,\r\n rxDown: window.serverData && window.serverData.data ? window.serverData.data.rxDown : false,\r\n aalDown: window.serverData && window.serverData.data ? window.serverData.data.aalDown : false,\r\n swhpDown: window.serverData && window.serverData.data ? window.serverData.data.swhpDown : false,\r\n epicEHRDown: window.serverData && window.serverData.data ? window.serverData.data.epicEHRDown : false,\r\n appVersion: \"1.1.1.1\",\r\n minAppVersion: \"1.1.1.1\",\r\n siteOutage: false,\r\n loginNotice: window.data && window.data.serverData ? window.data.serverData.loginNotice : null,\r\n headerMessage: window.data && window.data.serverData ? window.data.serverData.headerMessage : null,\r\n error: null,\r\n careGapAttachments: null\r\n };\r\n};\r\n\r\nexport default function inMemoryReducer(state = inMemoryReducerInitialState(), action) {\r\n const type = action.type;\r\n\r\n if (type == types.GOT_APP_UPDATE) {\r\n if (action.success) {\r\n //debugger;\r\n state = {\r\n ...state,\r\n waiting: false,\r\n success: true,\r\n rxDown: action.data.rxDown,\r\n aalDown: action.data.aalDown,\r\n swhpDown: action.data.swhpDown,\r\n epicEHRDown: action.data.epicEHRDown,\r\n appVersion: action.data.appVersion,\r\n minAppVersion: action.data.minappversion, \r\n siteOutage: action.data.siteoutage,\r\n loginNotice: action.data.loginNotice,\r\n headerMessage: action.data.headerMessage,\r\n\r\n error: null\r\n };\r\n }\r\n else if (action.failure) {\r\n state = {\r\n ...state,\r\n waiting: false,\r\n success: false,\r\n response: null,\r\n error: action.error\r\n };\r\n }\r\n //else {\r\n // state = {\r\n // waiting: true,\r\n // request: action.data\r\n // };\r\n //}\r\n\r\n // this comes from passing initial window object\r\n //if (action.data !== undefined) {\r\n // return {\r\n // ...state,\r\n // rxDown: action.data.rxDown,\r\n // aalDown: action.data.aalDown,\r\n // swhpDown: action.data.swhpDown,\r\n // epicEHRDown: action.data.epicEHRDown\r\n // };\r\n //}\r\n }\r\n if (type == types.GET_CAREGAP_FILE_ATTACHMENTS) {\r\n state = {\r\n ...state,\r\n careGapAttachments: action.files\r\n }\r\n }\r\n return state;\r\n}\r\n","import { combineReducers } from \"redux\";\r\nimport cookiePersistConfig from \"../store/cookieStore\";\r\nimport { persistReducer } from \"redux-persist\";\r\nimport providers from \"./searchProvidersReducer\";\r\nimport locations from \"./searchLocationsReducer\";\r\nimport session from \"./sessionReducer\";\r\nimport header from \"./headerReducer\";\r\nimport sso from \"./ssoReducer\";\r\nimport dashboard from \"./dashboardReducer\";\r\nimport pharmacy from \"./pharmacyReducer\";\r\nimport healthPlan from \"./healthPlanReducer\";\r\nimport healthSource from \"./healthSourceReducer\";\r\nimport mapEvents from \"./mapEventsReducer\";\r\nimport error from \"./errorReducer\";\r\nimport openScheduling from \"./openSchedulingReducer\";\r\nimport domain from \"./domainReducer\";\r\nimport docs from \"./docsReducer\";\r\nimport localCache from \"./localCacheReducer\";\r\nimport common from \"./commonReducer\";\r\nimport directScheduling from \"./directSchedulingReducer\";\r\nimport profileTools from \"./profileToolsReducer\";\r\nimport portal from \"./portalReducer\";\r\nimport thrive from \"./thriveReducer\";\r\nimport healthPlanServices from \"./healthPlanServicesReducer\";\r\nimport epic from \"./epicReducer\";\r\nimport videoVisitScheduling from './videovisitSchedulingReducer';\r\n//import dcjInbox from \"./dcjInboxReducer\";\r\nimport pricing from \"./pricingReducer\";\r\nimport memberships from \"./membershipsReducer\";\r\nimport marketingEmailOptIn from \"./marketingEmailOptInReducer\";\r\nimport inMemory from \"./inMemoryReducer\";\r\nimport prayerFeature from \"./prayerFeatureReducer\";\r\nimport inHome from \"./inHomeReducer\";\r\nimport myChartDataTile from \"./myChartDataTileReducer\";\r\nimport localStorage from \"./localStorageReducer\";\r\nimport careGap from \"./careGapReducer\";\r\n\r\nlet rootReducer = combineReducers({\r\n domain,\r\n localCache,\r\n sso,\r\n localStorage,\r\n providers,\r\n locations,\r\n session,\r\n header,\r\n dashboard,\r\n pharmacy,\r\n healthPlan,\r\n healthSource,\r\n mapEvents,\r\n error,\r\n openScheduling,\r\n docs,\r\n common,\r\n directScheduling,\r\n profileTools, \r\n portal,\r\n thrive,\r\n epic,\r\n videoVisitScheduling,\r\n healthPlanServices,\r\n //dcjInbox,\r\n pricing,\r\n memberships,\r\n marketingEmailOptIn,\r\n inMemory,\r\n prayerFeature,\r\n inHome,\r\n careGap,\r\n myChartDataTile\r\n});\r\nrootReducer.cookiesObject = null;\r\n\r\nexport default rootReducer;\r\n","import * as types from \"../constants/actionTypes\";\r\nimport * as tools from \"../helpers/Tools\";\r\n\r\n\r\n\r\nexport const localCacheInitialState = {\r\n ProviderDetailList: null,\r\n};\r\n\r\nexport default function localCacheReducer(state = localCacheInitialState, action) {\r\n switch (action.type) {\r\n case types.SET_PROVIDER_DETAILS_FROM_NPI_LIST:\r\n return { ...state, ProviderDetailList: action.arrayProviders };\r\n default:\r\n return { ...state };\r\n\r\n }\r\n};\r\n","import * as types from \"../constants/actionTypes\";\r\n\r\n\r\nexport const localStorageReducerInitialState = function () {\r\n //debugger;\r\n var sRoot = window.localStorage.getItem(\"root\");\r\n if (sRoot) {\r\n var oRoot = JSON.parse(sRoot);\r\n if (oRoot.localStorage) {\r\n //debugger;\r\n var oRet;\r\n try {\r\n oRet = JSON.parse(oRoot.localStorage);\r\n return oRet;\r\n }\r\n catch (e) {\r\n //debugger;\r\n //console.error(e);\r\n }\r\n }\r\n }\r\n return {\r\n isLoggedIn: false,\r\n token: null,\r\n refreshToken: null,\r\n tokenLoaded: null,\r\n tokenExpires: null,\r\n tokenExpiresIn: null,\r\n lastLoaded: null,\r\n appInstanceID: window.serverData.data.appInstanceID\r\n };\r\n};\r\n\r\nexport default function localStorageReducer(state = localStorageReducerInitialState(), action) {\r\n const type = action.type;\r\n var thisDate = new Date();\r\n\r\n switch (type) {\r\n case types.USER_AUTHENTICATE_SUCCESS:\r\n //debugger;\r\n state = {\r\n ...state,\r\n isLoggedIn: true,\r\n token: action.userData.access_token,\r\n refreshToken: action.userData.refresh_token,\r\n tokenLoaded: action.userData.dateLoaded,\r\n tokenExpires: action.userData.expiresDate,\r\n tokenExpiresIn: action.userData.expires_in,\r\n lastLoaded: thisDate,\r\n appInstanceID: window.serverData.data.appInstanceID\r\n };\r\n //debugger;\r\n break;\r\n\r\n case types.LOGOUT_COMPLETED:\r\n state = {\r\n ...state,\r\n isLoggedIn: false,\r\n token: null,\r\n refreshToken: null,\r\n tokenLoaded: null, \r\n tokenExpires: null,\r\n tokenExpiresIn: null,\r\n lastLoaded: null,\r\n appInstanceID: window.serverData.data.appInstanceID\r\n };\r\n break;\r\n\r\n }\r\n\r\n\r\n return state;\r\n}\r\n","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const googleMapsInitialState = {\r\n selectedMarker: null,\r\n showMapModalWindow: false,\r\n closeMapInfoWindow: true,\r\n selectedItem: null,\r\n currentLocationZipCode:null\r\n};\r\n\r\nexport default function mapEventsReducer(state = googleMapsInitialState, action) {\r\n switch (action.type) {\r\n case types.MAP__OPEN_MODAL_WINDOW:\r\n return { ...state, selectedMarker: action.payload.selectedItem, selectedItem: action.payload.selectedItem, showMapModalWindow: true, closeMapInfoWindow:false };\r\n case types.MAP__CLOSE_MODAL_WINDOW:\r\n return { ...state, selectedMarker: null, showMapModalWindow: false, closeMapInfoWindow : true };\r\n case types.MAP__CLOSE_INFO_WINDOW:\r\n return { ...state, selectedMarker: null, showMapModalWindow: false, closeMapInfoWindow: true };\r\n case types.RESET_SELECTED_MAPS_VALUE:\r\n return { ...state, selectedMarker: null, selectedItem: null, showMapModalWindow: false, closeMapInfoWindow: true };\r\n case types.CURRENT_LOCATION_ZIPCODE:\r\n return { ...state, currentLocationZipCode: action.payload.currentLocationZipCode };\r\n default:\r\n return { ...state };\r\n }\r\n}","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const marketingEmailOptInReducerInitialState = {\r\n waiting: null,\r\n success: null,\r\n error: null,\r\n scrubbingIn: {\r\n waiting: null,\r\n success: null,\r\n error: null,\r\n errorRsp: null\r\n }\r\n};\r\n\r\nexport default function marketingEmailOptInReducer(state = marketingEmailOptInReducerInitialState, action) {\r\n switch (action.type) {\r\n case types.SET_MARKETING_EMAIL_OPT_IN:\r\n return { ...state, waiting: true };\r\n case types.SET_MARKETING_EMAIL_OPT_IN_SUCCESS:\r\n return { ...state, waiting: false, success: true };\r\n case types.SET_MARKETING_EMAIL_OPT_IN_FAILURE:\r\n return { ...state, waiting: false, success: false, error: action.error };\r\n case types.SET_SCRUBBING_IN_EMAIL_OPT_IN:\r\n return {\r\n ...state, scrubbingIn: { waiting: true, success: null, error: null, errorRsp: null } };\r\n case types.SET_SCRUBBING_IN_EMAIL_OPT_IN_SUCCESS:\r\n return { ...state, scrubbingIn: { waiting: false, success: true, error: false, errorRsp: null } };\r\n case types.SET_SCRUBBING_IN_EMAIL_OPT_IN_FAILURE:\r\n return { ...state, scrubbingIn: { waiting: false, success: false, error: true, errorRsp: action.error } };\r\n case types.LOGOUT:\r\n return marketingEmailOptInReducerInitialState\r\n default:\r\n return { ...state };\r\n }\r\n}\r\n","import * as types from \"../constants/actionTypes\";\r\nimport * as IDTypes from \"../constants/PatientIDTypes\";\r\nimport * as tools from \"../helpers/Tools\";\r\nimport * as features from \"../constants/MembershipFeatures\";\r\n\r\nexport const membershipInitialState = {\r\n isError: false,\r\n isLoading: false,\r\n membershipData: null,\r\n featureRX: false,\r\n hasMyChartAccount: false,\r\n myChartID: null,\r\n hasProfileData: false,\r\n profileList: null,\r\n activeProfile: null,\r\n activeProfileIndex: null,\r\n logins: null, // we carry over token logins here to short circuit some membership switches (thrive and healthplan)\r\n proxyList: null,\r\n proxyListLoading: false,\r\n primaryUser: null,\r\n currentUser: null,\r\n proxyListFailure: false,\r\n proxyListLoaded: true,\r\n switchingProxyUser: false,\r\n switchUserPayload: null,\r\n eVisitsFromProxy: null,\r\n currentUserEVisit: null,\r\n isProxySwitchForMychartDeepLink: false,\r\n isProxyFound: false,\r\n membershipBranding: {\r\n insuranceLogo: '',\r\n insuranceLogoAltText: '',\r\n insuranceLogoClass: ''\r\n },\r\n isActiveFeatureAnyone_InHomeVaccine: false,\r\n ...getDefaultStateForFeatures(),\r\n\r\n};\r\n\r\n/**\r\n * @returns {object} the AuthorizedFeatures array as an object\r\n */\r\nexport function getEpicAuthorizedFeatures(epic) {\r\n const authorizedFeatures = epic && epic.patient && epic.patient.AuthorizedFeatures;\r\n if (!authorizedFeatures || authorizedFeatures.length === 0) {\r\n return null;\r\n }\r\n const epicAuthorizedFeatures = {};\r\n authorizedFeatures.forEach(feature => epicAuthorizedFeatures[feature] = true);\r\n return epicAuthorizedFeatures;\r\n}\r\n\r\nexport function enableCareCompanion(authorizedFeatures) {\r\n if (!authorizedFeatures) {\r\n return false;\r\n }\r\n\r\n const careCompanionAuthorizedFeatures = window.serverData && window.serverData.data && window.serverData.data.careCompanionAuthorizedFeatures;\r\n if (!careCompanionAuthorizedFeatures) {\r\n return true;\r\n }\r\n\r\n const list = careCompanionAuthorizedFeatures.split('|');\r\n for (let i = 0; list.length; i++) {\r\n if (authorizedFeatures[list[i]]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport default function membershipReducer(state = membershipInitialState, action) {\r\n try {\r\n switch (action.type) {\r\n case types.MEMBERSHIP_GET_FAILURE:\r\n return {\r\n ...state,\r\n isError: true,\r\n isLoading: false,\r\n membershipData: null,\r\n featureRX: false,\r\n hasMyChartAccount: false,\r\n myChartID: null,\r\n proxyListFailure: true,\r\n ...getDefaultStateForFeatures()\r\n };\r\n case types.USER_AUTHENTICATE_SUCCESS:\r\n var oNewProps;\r\n if (state.activeProfile || state.profileList) {\r\n var currProfile = state.activeProfile;\r\n var activeProfileIndex = state.activeProfileIndex;\r\n if (currProfile === undefined || currProfile == null) {\r\n currProfile = profileList.length > 0 ? profileList[0] : null;\r\n activeProfileIndex = currProfile ? 0 : null;\r\n }\r\n oNewProps = getStateFromFeatures(\r\n action.userData.Logins,\r\n currProfile);\r\n }\r\n return {\r\n ...state,\r\n ...oNewProps,\r\n activeProfileIndex,\r\n logins: action.userData.Logins,\r\n\r\n };\r\n case types.MEMBERSHIP_GET_START:\r\n return {\r\n ...state, proxyListLoading: true, proxyListFailure: false, proxyListLoaded: false,\r\n }\r\n case types.MEMBERSHIP_GET_SUCCESS:\r\n try {\r\n var profileList = tools.getProfileListFromMembershipData(action.data);\r\n let activeProfileIndex = state.activeProfileIndex;\r\n let currProfile = null;\r\n if (activeProfileIndex >= 0) {\r\n currProfile = profileList[state.activeProfileIndex];\r\n }\r\n if (currProfile === undefined || currProfile == null) {\r\n currProfile = profileList.length > 0 ? profileList[0] : null;\r\n activeProfileIndex = currProfile ? 0 : null\r\n }\r\n let oNewProps;\r\n if (state.logins !== null) {\r\n oNewProps = getStateFromFeatures(\r\n state.logins,\r\n currProfile);\r\n }\r\n const oBrandingData = getBrandingData(currProfile, state);\r\n const anyProxyHasInHome = profileList.find((prof) => { return tools.getFeature(prof, features.InHomeVaccine) })\r\n\r\n let currPrimUser = state.primaryUser;\r\n\r\n // Overwrite existing proxy list\r\n var newProxyList = tools.convertProfileListToProxyList(profileList);\r\n if (!currPrimUser) {\r\n currPrimUser = newProxyList && newProxyList.length > 0 ? newProxyList[0] : null;\r\n }\r\n let currCurrentUser = state.currentUser;\r\n if (!currCurrentUser) {\r\n currCurrentUser = currPrimUser;\r\n }\r\n const epicAuthorizedFeatures = getEpicAuthorizedFeatures(action.data.epic);\r\n var oRet = {\r\n ...state,\r\n isError: false,\r\n isLoading: false,\r\n membershipData: action.data,\r\n membershipBranding: oBrandingData,\r\n hasMyChartAccount: tools.hasMyChart(action.data),\r\n myChartID: tools.getMyChartID(action.data),\r\n hasProfileData: true,\r\n profileList: profileList,\r\n activeProfile: currProfile,\r\n activeProfileIndex,\r\n proxyList: newProxyList,\r\n primaryUser: currPrimUser,\r\n currentUser: currCurrentUser,\r\n isProxyFound: newProxyList && newProxyList.length > 1 ? true : false,\r\n proxyListLoading: false,\r\n proxyListFailure: false,\r\n proxyListLoaded: true,\r\n isActiveFeatureAnyone_InHomeVaccine: !!anyProxyHasInHome,\r\n epicAuthorizedFeatures,\r\n //enableCareCompanion: enableCareCompanion(epicAuthorizedFeatures),\r\n ...oNewProps,\r\n };\r\n return oRet;\r\n }\r\n catch (ex) {\r\n console.error(\"types.MEMBERSHIP_GET_SUCCESS\", ex);\r\n //debugger;\r\n throw ex;\r\n }\r\n case types.MEMBERSHIP_CARE_COMPANION:\r\n return { ...state, enableCareCompanion: action.enabled };\r\n case types.RESET_USER_VALUE:\r\n return { ...state, currentUser: null, primaryUser: null };\r\n\r\n case types.SWITCH_USER_SAGA:\r\n return { ...state, switchingProxyUser: true, switchUserPayload: action };\r\n\r\n case types.SWITCH_USER_REDUCER:\r\n // don't like doing this, but faster than reducing the same list into multiple reducers\r\n // ultimately we should collapse these reducers\r\n try {\r\n if (state.profileList) {\r\n const currProfile = state.profileList[action.index];\r\n\r\n let oNewProps = getStateFromFeatures(\r\n state.logins,\r\n currProfile);\r\n const user = {\r\n ...action.user\r\n };\r\n\r\n\r\n const currentUserEVisit = state.eVisitsFromProxy?.find((e) => {\r\n return e.externalId === user.externalId\r\n })\r\n let oRet = {\r\n ...state,\r\n ...oNewProps,\r\n activeProfile: currProfile,\r\n activeProfileIndex: action.index,\r\n currentUser: user,\r\n zipnosis: null,\r\n switchingProxyUser: false,\r\n currentUserEVisit,\r\n switchUserPayload: null\r\n };\r\n return oRet;\r\n }\r\n else {\r\n return { ...state };\r\n }\r\n }\r\n catch (ex) {\r\n console.error(\"types.SWITCH_USER_REDUCER\", ex);\r\n throw ex;\r\n }\r\n\r\n case types.LOGOUT_COMPLETED:\r\n return membershipInitialState;\r\n case types.USER_AUTHENTICATE:\r\n case types.USER_AUTHENTICATE_FAILURE:\r\n return {\r\n ...state,\r\n proxyList: null\r\n };\r\n case types.EVISIT_GET_SUCCESS:\r\n const currentUserEVisit = action.eVisit.find((e) => {\r\n if (state.currentUser) {\r\n return e.externalId === state.currentUser.externalId\r\n }\r\n return null;\r\n })\r\n return { ...state, eVisitsFromProxy: action.eVisit, currentUserEVisit: currentUserEVisit, proxyListFailure: false };\r\n case types.EVISIT_GET_FAILURE:\r\n return { ...state, eVisitsFromProxy: action.eVisit, proxyListFailure: true };\r\n\r\n case types.IS_PROXY_SWITCH_FOR_MYCHART_DEEPLINK:\r\n return { ...state, isProxySwitchForMychartDeepLink: action.isProxySwitchForMychartDeepLink };\r\n\r\n default:\r\n return { ...state };\r\n }\r\n }\r\n catch (Ex) {\r\n console.error(Ex);\r\n //debugger;\r\n //throw Ex; // we don't actually want to crash anything here\r\n }\r\n}\r\n\r\nfunction getBrandingData(currProfile, state) {\r\n if (currProfile?.memberships && currProfile.memberships.length > 0 && currProfile.memberships[0].branding) {\r\n let membershipBranding = {\r\n insuranceLogo: currProfile.memberships[0].branding.webLogo,\r\n insuranceLogoAltText: currProfile.memberships[0].branding.text,\r\n insuranceLogoClass: getInsuranceLogoClass(currProfile.memberships[0].membershipKey)\r\n };\r\n return membershipBranding;\r\n } else {\r\n return {\r\n insuranceLogo: state.membershipBranding.insuranceLogo,\r\n insuranceLogoAltText: state.membershipBranding.insuranceLogoAltText,\r\n insuranceLogoClass: state.membershipBranding.insuranceLogoClass\r\n };\r\n }\r\n}\r\n\r\nfunction getInsuranceLogoClass(membershipKey) {\r\n let logoClass = '';\r\n switch (membershipKey) {\r\n case membershipKeys.proto:\r\n case membershipKeys.default:\r\n case membershipKeys.swnt:\r\n case membershipKeys.swct:\r\n logoClass = 'hidden-logo';\r\n break;\r\n case membershipKeys.swhp:\r\n case membershipKeys.hrswhp:\r\n logoClass = 'swhp-logo';\r\n break;\r\n case membershipKeys.hrfc:\r\n logoClass = 'firstcare-logo';\r\n break;\r\n case membershipKeys.dart:\r\n logoClass = 'dart-logo';\r\n break;\r\n case membershipKeys.waco:\r\n logoClass = 'cow-logo';\r\n break;\r\n case membershipKeys.aa:\r\n logoClass = 'aal-logo';\r\n break;\r\n default: ''\r\n }\r\n return logoClass;\r\n}\r\n\r\n\r\nconst membershipKeys = Object.freeze({\r\n proto: 'PROTO',\r\n default: 'DEFAULT',\r\n aa: 'AA',\r\n waco: 'WACO',\r\n dart: 'DART',\r\n swhp: 'SWHP',\r\n swnt: 'SWNT',\r\n hrswhp: 'HR-SWHP',\r\n hrfc: 'HR-FC',\r\n swct: 'SWCT',\r\n});\r\n\r\nfunction getStateFromFeatures(\r\n logins,\r\n currProfile) {\r\n\r\n if (logins == null) {\r\n return null;\r\n }\r\n\r\n try {\r\n const featureSDCVisit = tools.getFeature(currProfile, features.SDCVideoVisit);\r\n const featureAmbulatoryVisit = tools.getFeature(currProfile, features.AmbulatoryVideoVisit);\r\n const featureLyra = tools.getFeature(currProfile, features.Lyra);\r\n const featurePharmacy = tools.getFeature(currProfile, features.RXModule);\r\n const featureEVisit = tools.getFeature(currProfile, features.EVisit);\r\n const featureInsuranceModule = tools.getFeature(currProfile, features.InsuranceModule);\r\n const featureOnlineAppointmentScheduling = tools.getFeature(currProfile, features.OnlineAppointmentScheduling);\r\n const featureWellness = tools.getFeature(currProfile, features.Wellness);\r\n const featureChatBot = tools.getFeature(currProfile, features.ChatBot);\r\n const featureFluShot = tools.getFeature(currProfile, features.FluShot);\r\n const featureAmity = tools.getFeature(currProfile, features.Amity);\r\n const featureInHomeVaccine = tools.getFeature(currProfile, features.InHomeVaccine);\r\n const membershipDart = tools.getMembership(currProfile, membershipKeys.dart);\r\n const membershipWaco = tools.getMembership(currProfile, membershipKeys.waco);\r\n const membershipAA = tools.getMembership(currProfile, membershipKeys.aa);\r\n const membershipHRSWHP = tools.getMembership(currProfile, membershipKeys.hrswhp);\r\n const membershipAmiSWHP = tools.getMembership(currProfile, membershipKeys.swhp);\r\n const membershipFC = tools.getMembership(currProfile, membershipKeys.hrfc);\r\n\r\n const membershipSWNT = tools.getMembership(currProfile, membershipKeys.swnt);\r\n\r\n // var loginsHealthPlan = (logins.toLowerCase().indexOf(\"aal\") !== -1) ||\r\n // (logins.toLowerCase().indexOf(\"healthplan\") !== -1) ||\r\n // (logins.toLowerCase().indexOf(\"hr-fc\") !== -1) ||\r\n // (logins.toLowerCase().indexOf(\"hr-swhp\") !== -1) ? true : false;\r\n\r\n // var SDCCostLabel = (logins.toLowerCase().indexOf(\"aal\") !== -1) ? \"$10\" :\r\n // (logins.toLowerCase().indexOf(\"hr-fc\") !== -1) ? \"standard office visit copay\" :\r\n // (logins.toLowerCase().indexOf(\"healthplan\") !== -1) || (logins.toLowerCase().indexOf(\"hr-swhp\") !== -1) ? \"$0\" :\r\n // \"standard office visit copay\";\r\n\r\n var ActiveFeatures = {};\r\n currProfile.features.forEach((feature) => {\r\n if (feature) {\r\n if (feature.key.toLowerCase() === features.RXModule.toLowerCase()) {\r\n if (feature.active) {\r\n ActiveFeatures[feature.key] = feature.key;\r\n }\r\n } else {\r\n ActiveFeatures[feature.key] = feature.key;\r\n }\r\n }\r\n });\r\n\r\n return {\r\n //TODO: refactor this to be prettier\r\n\r\n isActiveFeature_SDCVideoVisit: featureSDCVisit ? true : false,\r\n SDCCostLabel: featureSDCVisit ? featureSDCVisit.costLabel : null,\r\n\r\n isActiveFeature_AmbulatoryVideoVisit: featureAmbulatoryVisit ? true : false,\r\n AmbulatoryCostLabel: featureAmbulatoryVisit ? featureAmbulatoryVisit.costLabel : null,\r\n\r\n hasPharmacyFeature: featurePharmacy ? true : false,\r\n isActiveFeature_Pharmacy: featurePharmacy && featurePharmacy.active ? true : false,\r\n\r\n isActiveFeature_EVisit: featureEVisit ? true : false,\r\n eVisitCostLabel: featureEVisit ? featureEVisit.costLabel : null,\r\n eVisitZipGroupId: featureEVisit?.zipGroupId,\r\n eVisitExternalId: tools.getPatientID(currProfile.patient.PatientIds, IDTypes.EXTERNAL),\r\n\r\n outOfStateOptionsForEVisit: featureEVisit && featureEVisit.outOfStateOptions,\r\n outOfStateOptionsForSdc: featureSDCVisit && featureSDCVisit.outOfStateOptions,\r\n\r\n isActiveFeature_InsuranceModule: featureInsuranceModule ? true : false,\r\n insuranceTabText: featureInsuranceModule?.tabText ?? \"Deductible\", // just give us a default in case of tragedy\r\n\r\n hasAuthorizedFeatureSameDayVideo: currProfile?.patient?.HasAuthorizedFeature_SAMEDAYVIDEO || false,\r\n hasAuthorizedFeatureSchedCovidVax: currProfile?.patient?.HasAuthorizedFeature_SCHDCOVIDVAX || false,\r\n hasAuthorizedFeatureMyConditions: currProfile?.patient?.HasAuthorizedFeature_MYCONDITIONS || false,\r\n hasAuthorizedFeatureMedicalAdvice: currProfile?.patient?.HasAuthorizedFeature_MEDICALADVICE || false,\r\n\r\n isActiveFeature_OnlineAppointmentScheduling: !!featureOnlineAppointmentScheduling,\r\n\r\n isActiveFeature_Wellness: !!featureWellness,\r\n isActiveFeature_ChatBot: !!featureChatBot,\r\n isActiveFeature_FluShot: !!featureFluShot,\r\n\r\n isActiveFeature_InHomeVaccine: !!featureInHomeVaccine,\r\n inHomeVaccineCostLabel: featureInHomeVaccine?.costLabel || \"Same As In Office\",\r\n\r\n hasDART: membershipDart ? true : false,\r\n dartMembershipId: membershipDart?.memberId || '',\r\n hasWACO: membershipWaco ? true : false,\r\n wacoMembershipId: membershipWaco?.memberId || '',\r\n hasAA: membershipAA ? true : false,\r\n aaMembershipId: membershipAA?.memberId || '',\r\n hasFC: membershipFC ? true : false,\r\n fcMembershipId: membershipFC?.memberId || '',\r\n hasHRSWHP: membershipHRSWHP ? true : false,\r\n hrswhpMembershipId: membershipHRSWHP?.memberId || '',\r\n hasAmiSWHP: membershipAmiSWHP ? true : false,\r\n amiSWHPMembershipId: membershipAmiSWHP?.memberId || '',\r\n hasAnySWHP: membershipHRSWHP || membershipAmiSWHP ? true : false,\r\n anySWHPMembershipId: membershipHRSWHP?.memberId || membershipAmiSWHP?.memberId || '',\r\n\r\n // employee memberships\r\n employeeID: membershipSWNT?.employeeId || '',\r\n\r\n activeFeatures: ActiveFeatures,\r\n featureAmity,\r\n isActiveFeature_Lyra: featureLyra ? true : false,\r\n featureLyra\r\n };\r\n\r\n }\r\n catch (ex) {\r\n //debugger;\r\n console.error(ex);\r\n // returning a null object from this function is effectively a \"no change\" operation\r\n }\r\n}\r\nfunction getDefaultStateForFeatures() {\r\n return {\r\n //hasSDCVisitFeature: false,\r\n isActiveFeature_SDCVideoVisit: false,\r\n SDCCostLabel: null,\r\n\r\n //hasAmbulatoryVisitFeature: false,\r\n isActiveFeature_AmbulatoryVideoVisit: false,\r\n AmbulatoryCostLabel: null,\r\n\r\n hasPharmacyFeature: false,\r\n isActiveFeature_Pharmacy: false,\r\n\r\n //hasEVisitFeature: false,\r\n isActiveFeature_EVisit: false,\r\n eVisitCostLabel: null,\r\n eVisitZipGroupId: null,\r\n eVisitExternalId: null,\r\n\r\n outOfStateOptionsForEVisit: null,\r\n outOfStateOptionsForSdc: null,\r\n\r\n isActiveFeature_InsuranceModule: false,\r\n insuranceTabText: 'Deductible', //Most insurance plans use 'Deductible', only AA uses 'Usage'\r\n\r\n hasAuthorizedFeatureSameDayVideo: false,\r\n hasAuthorizedFeatureSchedCovidVax: false,\r\n hasAuthorizedFeatureMyConditions: false,\r\n hasAuthorizedFeatureMedicalAdvice: false,\r\n\r\n isActiveFeature_OnlineAppointmentScheduling: false,\r\n\r\n hasDART: false,\r\n dartMembershipId: '',\r\n hasWACO: false,\r\n wacoMembershipId: '',\r\n hasAA: false,\r\n aaMembershipId: '',\r\n hasFC: false,\r\n fcMembershipId: '',\r\n hasHRSWHP: false,\r\n hrswhpMembershipId: '',\r\n hasAmiSWHP: false,\r\n amiSWHPMembershipId: '',\r\n hasAnySWHP: false,\r\n anySWHPMembershipId: '',\r\n\r\n employeeID: '',\r\n\r\n activeFeatures: [],\r\n epicAuthorizedFeatures: null,\r\n enableCareCompanion: false\r\n }\r\n}","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const myChartDataTileInitialState = {\r\n touched: false,\r\n myChartPreLoaded: false,\r\n myChartDatatileLang: null\r\n};\r\n\r\nexport default function myChartDataTileReducer(state = myChartDataTileInitialState, action) {\r\n switch (action.type) {\r\n case types.MYCHART_DATA_TILE_TOUCHED_SUCCESS:\r\n console.info(`myChartDataTileReducer`,action);\r\n return { ...state, touched: action.data.data.touched };\r\n case types.MYCHART_DEMOGRAPHICS_COMPLETED:\r\n return { ...state, myChartPreLoaded: true };\r\n case types.MYCHART_DATATILE_LANG_UPDATE:\r\n return {\r\n ...state, myChartDatatileLang: action.language\r\n }\r\n default:\r\n return { ...state };\r\n }\r\n}","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const schedulingInitialState = {\r\n monthlyAvailability: null,\r\n providerSchedule: null,\r\n providerList: null,\r\n schedule: null,\r\n earliestSchedule: null,\r\n mammogramQuestions:null,\r\n mammogramAnswers:null,\r\n mammogramQuestionsResponse:null,\r\n arrivalTimeSchedule:null,\r\n visitTypeAndLocation: null,\r\n createdPatient: null,\r\n searchRunning: false,\r\n success: false,\r\n error: false,\r\n visitTypeAndLocationFailed: false,\r\n scheduleAppointmentSuccess: false,\r\n scheduleAppointmentFailed: false,\r\n scheduleAppointmentPending: false,\r\n mammogramAnswersWaiting:false,\r\n mammogramQuestionsResponseWaiting:false,\r\n mammogramAnswersError:false,\r\n mammogramQuestionsResponseError:false,\r\n mammogramQuestionsWaiting:false,\r\n mammogramQuestionsError:false,\r\n response:null,\r\n arrivalTimeScheduleWaiting:false,\r\n createPatientSuccess: false,\r\n createPatientFailed: false,\r\n getSchedulePending: false,\r\n createPatientIds: [],\r\n getScheduleError: false,\r\n byPassProxyAndInfo: false,\r\n arrivalTimeScheduleError: false,\r\n};\r\n\r\nexport default function openSchedulingReducer(state = schedulingInitialState, action) {\r\n switch (action.type) {\r\n\r\n case types.OPEN_SCHEDULE_CLEAR_REDUX_STATE:\r\n return schedulingInitialState;\r\n\r\n case types.OPEN_SCHEDULE_VISIT_TYPE_LOCATION_RUNNING:\r\n return { ...state, searchRunning: true, success: false, error: false, visitTypeAndLocationPending:true, visitTypeAndLocationSuccess:false, visitTypeAndLocationFailed: false };\r\n\r\n case types.OPEN_SCHEDULE_VISIT_TYPE_LOCATION_SUCCESS:\r\n\r\n // failed calls will sometimes return 200 with an empty model: need to return failure when that happens.\r\n if (!action.visits || !action.visits.visitTypes || action.visits.visitTypes.length <= 0) {\r\n return { ...state, visitTypeAndLocation: null, searchRunning: false, success: false, error: false, visitTypeAndLocationPending: false, visitTypeAndLocationSuccess: false, visitTypeAndLocationFailed: true };\r\n }\r\n else {\r\n return { ...state, visitTypeAndLocation: action.visits, searchRunning: false, success: true, error: false, visitTypeAndLocationPending: false, visitTypeAndLocationSuccess: true, visitTypeAndLocationFailed: false };\r\n }\r\n\r\n case types.OPEN_SCHEDULE_VISIT_TYPE_LOCATION_FAILED:\r\n return { ...state, visitTypeAndLocation: null, searchRunning: false, success: false, error: true, visitTypeAndLocationPending: false, visitTypeAndLocationSuccess: false, visitTypeAndLocationFailed: true };\r\n\r\n case types.OPEN_SCHEDULE_EARLIEST:\r\n return { ...state, earliestScheduleWaiting: true, earliestScheduleError: null };\r\n case types.OPEN_SCHEDULE_EARLIEST_SUCCESS:\r\n return { ...state, earliestSchedule: action.schedule, /*searchRunning: false,*/ success: true, error: false, earliestScheduleWaiting: false, earliestScheduleError: null };\r\n case types.OPEN_SCHEDULE_EARLIEST_FAILURE:\r\n return { ...state, earliestScheduleWaiting: false, earliestScheduleError: action.error };\r\n \r\n case types.OPEN_SCHEDULE_ARRIVAL_TIME:\r\n return { ...state, arrivalTimeScheduleWaiting: true,arrivalTimeScheduleError: null };\r\n case types.OPEN_SCHEDULE_ARRIVAL_TIME_SUCCESS:\r\n return { ...state, arrivalTimeSchedule: action.schedule, searchRunning: false,success: true, error: false, arrivalTimeScheduleWaiting: false, arrivalTimeScheduleError: null };\r\n case types.OPEN_SCHEDULE_ARRIVAL_TIME_FAILURE:\r\n return { ...state, arrivalTimeScheduleWaiting: false, arrivalTimeScheduleError: action.error };\r\n \r\n case types.OPEN_SCHEDULE_PROVIDER_LIST_SUCCESS:\r\n return { ...state, providerList: action.providers, searchRunning: false, success: true, error: false };\r\n\r\n case types.OPEN_SCHEDULE_AVAILABILITY_SUCCESS:\r\n return { ...state, monthlyAvailability: action.schedule, searchRunning: false, success: true, error: false };\r\n\r\n case types.OPEN_SCHEDULE_PROVIDER:\r\n return { ...state, searchRunning: true, success: false, error: false, getSchedulePending: true, scheduleDaysAvailable: null };\r\n\r\n case types.OPEN_SCHEDULE_PROVIDER_PENDING:\r\n return { ...state, searchRunning: true, success: false, error: false, getSchedulePending: true, scheduleDaysAvailable: null };\r\n\r\n case types.OPEN_SCHEDULE_PROVIDER_SUCCESS:\r\n\r\n // check for an empty model from the api, even if we get a 200 response.\r\n if (!action.provider) {\r\n return { ...state, providerSchedule: null, searchRunning: false, success: false, error: true, getSchedulePending: false, getScheduleError: false, scheduleDaysAvailable: false };\r\n }\r\n else {\r\n return { ...state, providerSchedule: action.provider, searchRunning: false, success: true, error: false, getSchedulePending: false, getScheduleError: false, scheduleDaysAvailable: action.scheduleDaysAvailable };\r\n }\r\n\r\n case types.OPEN_SCHEDULE_PROVIDER_FAILED:\r\n return { ...state, providerSchedule: null, searchRunning: false, success: false, error: true, getSchedulePending: false, getScheduleError: true };\r\n\r\n case types.OPEN_SCHEDULE_SCHEDULE_SUCCESS:\r\n if (action.schedule && action.schedule.date) {\r\n return { ...state, schedule: action.schedule, searchRunning: false, success: true, error: false, scheduleAppointmentPending: false, scheduleAppointmentSuccess: true, scheduleAppointmentFailed: false };\r\n }\r\n else {\r\n // return value is NOT the successful state...\r\n return { ...state, schedule: null, searchRunning: false, success: false, error: true, scheduleAppointmentPending: false, scheduleAppointmentSuccess: false, scheduleAppointmentFailed: true };\r\n }\r\n\r\n case types.OPEN_SCHEDULE_SCHEDULE_FAILED:\r\n return { ...state, searchRunning: false, success: false, error: true, scheduleAppointmentPending: false, scheduleAppointmentSuccess: false, scheduleAppointmentFailed: true, scheduleAppointmentError: action.error };\r\n\r\n case types.OPEN_SCHEDULE_SCHEDULE_PENDING:\r\n return { ...state, scheduleAppointmentPending: true, scheduleAppointmentSuccess: false, scheduleAppointmentFailed: false, createPatientSuccess: false, createPatientFailed: false };\r\n\r\n case types.OPEN_SCHEDULE_CREATE_PATIENT_SUCCESS:\r\n return { ...state, createdPatient: action.patient, searchRunning: false, success: true, error: false, createPatientSuccess: true, createPatientFailed: false, createPatientIds: action.patient.ids };\r\n\r\n case types.OPEN_SCHEDULE_CREATE_PATIENT_FAILED:\r\n return { ...state, createdPatient: null, searchRunning: false, success: false, error: true, scheduleAppointmentPending: false, createPatientSuccess: false, createPatientFailed: true };\r\n\r\n case types.LOGOUT:\r\n return schedulingInitialState;\r\n\r\n case types.UPDATE_BYPASS_PROXY_AND_INFO:\r\n return {...state, byPassProxyAndInfo: action.payload};\r\n\r\n\r\n case types.OPEN_SCHEDULE_MAMMOGRAM_QUESTIONS:\r\n return { ...state, mammogramQuestionsWaiting: true, mammogramQuestionsError: null };\r\n case types.OPEN_SCHEDULE_MAMMOGRAM_QUESTIONS_SUCCESS:\r\n return { ...state, mammogramQuestions: action.questions, searchRunning: false, mammogramAnswersError:false, success: true, error: false, mammogramQuestionsWaiting: false, mammogramQuestionsError: null };\r\n case types.OPEN_SCHEDULE_MAMMOGRAM_QUESTIONS_FAILURE:\r\n return { ...state, mammogramQuestionsWaiting: false, mammogramQuestions: {}, mammogramQuestionsError: true, mammogramAnswersError: true };\r\n \r\n case types.OPEN_SCHEDULE_MAMMOGRAM_ANSWERS:\r\n return { ...state, mammogramAnswersWaiting: true, mammogramAnswersError: null };\r\n case types.OPEN_SCHEDULE_MAMMOGRAM_ANSWERS_SUCCESS:\r\n return { ...state, mammogramAnswers: action.answers, searchRunning: false, success: true, error: false, mammogramAnswersError:false, mammogramAnswersWaiting: false, mammogramAnswersError: null };\r\n case types.OPEN_SCHEDULE_MAMMOGRAM_ANSWERS_FAILURE:\r\n return { ...state, mammogramAnswersWaiting: false, mammogramAnswers: {}, mammogramQuestions: {}, mammogramAnswersError: true, mammogramQuestionsError: true};\r\n\r\n case types.OPEN_SCHEDULE_QUESTIONS_RESPONSE:\r\n return { ...state, mammogramQuestionsResponseWaiting: true, mammogramQuestionsResponseError: null };\r\n case types.OPEN_SCHEDULE_QUESTIONS_RESPONSE_SUCCESS:\r\n return { ...state, mammogramQuestionsResponse: action.response, searchRunning: false, success: true, error: false, mammogramQuestionsResponseWaiting: false, mammogramQuestionsResponseError: null };\r\n case types.OPEN_SCHEDULE_QUESTIONS_RESPONSE_FAILURE:\r\n return { ...state, mammogramQuestionsResponseWaiting: false, mammogramQuestionsResponseError: action.error };\r\n\r\n case types.OPEN_SCHEDULE_RESET_MAMMOGRAM_QUESTION_CURRENT_RESPONSE:\r\n return { ...state, mammogramAnswersWaiting: true, mammogramAnswersError: null, mammogramAnswersError: false, mammogramQuestionsError: null };\r\n case types.OPEN_SCHEDULE_RESET_MAMMOGRAM_QUESTION_CURRENT_RESPONSE_COMPLETED:\r\n return { ...state, mammogramAnswers: action.answers, searchRunning: false, success: true, error: false, mammogramAnswersWaiting: false, mammogramAnswersError: false, mammogramQuestionsError: null };\r\n default:\r\n return { ...state, searchRunning: false, success: false, error: false };\r\n }\r\n}\r\n","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const pharmacyInitialState = {\r\n ReadyForPickUpCount: 0,\r\n pharmacyDashboardDetails: null,\r\n defaultPharmacy: null,\r\n waitingOnPharmacy: false,\r\n waitingOnUnLinkedRxTransfer: false,\r\n pharmacyError: null,\r\n isFetching: false,\r\n locationLoad: false,\r\n pharmacyDashboardLoaded: false,\r\n isPharmacyListWaiting: false,\r\n isArchiveOrUnArchiveSuccess: false,\r\n RXTransferData: null,\r\n pharmaciesList: null,\r\n selectedPharmacy: null,\r\n transferError: false,\r\n isLinkDialogOpen: false\r\n};\r\n\r\nexport default function pharmacyReducer(state = pharmacyInitialState, action) {\r\n switch (action.type) {\r\n case types.AJAX_CALL_ERROR: return {\r\n ...state, isFetching: false, pharmacyError: action.pharmacyError\r\n };\r\n\r\n case types.LOAD_PHARMACYDASHBOARD_START:\r\n return {\r\n ...state, pharmacyError: null, waitingOnPharmacy: true, locationLoad: true, pharmacyDashboardLoaded: false,\r\n waitingOnReadyForPickup: true, waitingOnReadyForRefill: true\r\n };\r\n case types.LOAD_PHARMACYDASHBOARD_SUCCESS:\r\n let response = { ...state, waitingOnPharmacy: false, pharmacyDashboardDetails: action.pharmacyDashboardData, pharmacyDashboardLoaded: true, defaultPharmacyLoaded: true };\r\n if (action.defaultPharmacyData) response.defaultPharmacy = action.defaultPharmacyData;\r\n if (action.closestPharmacy) response.closestPharmacy = action.closestPharmacy;\r\n return response;\r\n case types.LOAD_PHARMACYDASHBOARD_FAILURE:\r\n return { ...state, pharmacyError: action.error, waitingOnPharmacy: false, pharmacyDashboardLoaded: false, waitingOnReadyForPickup: false, waitingOnReadyForRefill: false };\r\n case types.RX_DEFAULT_PHARMACY_FAILURE: return { ...state, defaultPharmacyError: action.defaultPharmacyError, waitingOnPharmacy: false };\r\n\r\n case types.CLOSEST_PHARMACY_SUCCESS: return { ...state, closestPharmacy: action.closestPharmacy };\r\n case types.LINK_PHARMACY_DIALOG_OPEN: return { ...state, isLinking: false, linkedAccount: null, linkPharmacyError: null, isLinkDialogOpen: true };\r\n case types.LINK_PHARMACY_DIALOG_CLOSE: return { ...state, isLinkDialogOpen: false };\r\n case types.LINK_PHARMACY: return { ...state, accountToLink: action.accountToLink, isLinking: true, linkedAccount: null, linkPharmacyError: null };\r\n case types.LINK_PHARMACY_SUCCESS: return { ...state, linkedAccount: action.linkedAccount, isLinking: false, refreshTokenIsGood: action.refreshTokenIsGood };\r\n case types.LINK_PHARMACY_FAILURE:\r\n response = { ...state, linkPharmacyError: action.error, isLinking: false };\r\n if (action.refreshTokenIsGood) {\r\n response.refreshTokenIsGood = action.refreshTokenIsGood;\r\n }\r\n return response;\r\n case types.USER_LOGGED_OUT: return { ...pharmacyInitialState, error: action.errorCode };\r\n\r\n case types.RX_READY_FOR_PICKUP: return { ...state, waitingOnReadyForPickup: true, readyForPickupError: null };\r\n case types.RX_READY_FOR_PICKUP_SUCCESS:\r\n const readyForPickupResponse = { ...state, waitingOnReadyForPickup: false };\r\n if (action.readyForPickup) readyForPickupResponse.readyForPickup = action.readyForPickup;\r\n else {\r\n readyForPickupResponse.readyForPickupPharmacy = action.readyForPickupPharmacy;\r\n readyForPickupResponse.readyForPickupList = action.readyForPickupList;\r\n readyForPickupResponse.readyForPickupTotalCost = action.readyForPickupTotalCost;\r\n }\r\n return readyForPickupResponse;\r\n case types.RX_READY_FOR_PICKUP_FAILURE: return { ...state, readyForPickupError: action.error, waitingOnReadyForPickup: false };\r\n case types.RX_READY_FOR_REFILL_SUCCESS: return { ...state, readyForRefill: action.readyForRefill, waitingOnReadyForRefill: false };\r\n case types.RX_READY_FOR_REFILL_FAILURE: return { ...state, readyForRefillError: action.error, waitingOnReadyForRefill: false };\r\n\r\n case types.EXTERNAL_RX_TRANSFER_START: return { ...state, transferExternal: { request: action.request, waiting: true, result: null, error: null } };\r\n case types.EXTERNAL_RX_TRANSFER_SUCCESS: return { ...state, transferExternal: { ...state.transferExternal, waiting: false, result: action.serviceResponse } };\r\n case types.EXTERNAL_RX_TRANSFER_FAILURE: return { ...state, transferExternal: { ...state.transferExternal, waiting: false, error: action.error } };\r\n\r\n case types.PHARMACY_LIST_START: return { ...state, isPharmacyListWaiting: true, pharmacyListLoaded: false, city: action.payload.cityData, zip: action.payload.zipData };\r\n case types.PHARMACY_LIST_COMPLETED: return {\r\n ...state, isPharmacyListWaiting: false, pharmacyList: action.pharmacyList,\r\n recentPharmaciesList: action.recentPharmacies, pharmacyListLoaded: true\r\n };\r\n\r\n case types.RECENTPHARMACY_LIST_START: return { ...state, isPharmacyListWaiting: true, pharmacyListLoaded: false };\r\n case types.RECENTPHARMACY_LIST_COMPLETED: return {\r\n ...state, isPharmacyListWaiting: false, recentPharmaciesList: action.recentPharmaciesList, pharmacyCitiesList: action.pharmacyCitiesList, pharmacyListLoaded: true\r\n };\r\n\r\n case types.CITY_ZIP_LIST: return { ...state, waitingOnCityZipList: true, cityZipList: null, cityZipListError: null };\r\n case types.CITY_ZIP_LIST_SUCCESS: return { ...state, waitingOnCityZipList: false, cityZipList: action.cityZipList };\r\n case types.CITY_ZIP_LIST_FAILURE: return { ...state, waitingOnCityZipList: false, cityZipListError: action.cityZipListError };\r\n\r\n case types.LOAD_RX_LIST_START: return {\r\n ...state, isActiveRxListWaiting: true, isArchiveOrUnArchiveSuccess: false, isArchivedRxListWaiting: true, activeRxListLoaded: false, archivedRxListLoaded: false\r\n };\r\n case types.LOAD_RX_LIST_COMPLETED: return {\r\n ...state, isActiveRxListWaiting: false, activeRxList: action.activeRxList, rxListError: null, activeRxListLoaded: true\r\n };\r\n case types.RX_List_FAILURE: return { ...state, isActiveRxListWaiting: false, rxListError: action.error };\r\n\r\n case types.LOAD_ARCHIVED_RX_LIST_COMPLETED: return { ...state, isArchivedRxListWaiting: false, isArchiveOrUnArchiveSuccess: false, archivedRxList: action.archivedRxList, archivedRxListError: null, archivedRxListLoaded: true };\r\n case types.RX_ARCHIVED_List_FAILURE: return { ...state, isArchivedRxListWaiting: false, archivedRxListError: action.error, isArchiveOrUnArchiveSuccess: false };\r\n\r\n case types.ARCHIVE_UNARCHIVE_RX_START: return { ...state, rxArchivingOrUnarchiving: true, isArchiveOrUnArchiveSuccess: false, rxNumber: action.payload.rxNumber, storeNumber: action.payload.storeNumber, archive: action.payload.archive, proxyId: action.payload.proxyId };\r\n case types.ARCHIVE_UNARCHIVE_RX_SUCCESS: return { ...state, rxArchivingOrUnarchiving: false, isArchiveOrUnArchiveSuccess: true, archiveResult: action.serviceResponse, rxDetailLoaded: null };\r\n case types.ARCHIVE_UNARCHIVE_RX_FAILURE: return { ...state, rxArchivingOrUnarchiving: false, archiveUnarchiveError: action.archiveUnarchiveError, rxDetailLoaded: null };\r\n\r\n case types.RX_DETAIL: return { ...state, waitingOnRxDetail: true, rxNumber: action.rxNumber, storeNumber: action.storeNumber, isExternalRx: action.isExternalRx, rxDetailError: null };\r\n case types.RX_DETAIL_SUCCESS: return { ...state, waitingOnRxDetail: false, rxDetail: action.rxDetail, rxDetailLoaded: action.rxNumber + action.storeNumber, rxDetailError: null };\r\n case types.RX_DETAIL_FAILURE: return { ...state, waitingOnRxDetail: false, rxDetailError: action.error };\r\n case types.RX_HISTORY: return { ...state, waitingOnRxHistory: true, rxNumber: action.rxNumber, storeNumber: action.storeNumber, rxHistoryError: null };\r\n case types.RX_HISTORY_SUCCESS: return { ...state, waitingOnRxHistory: false, rxHistory: action.rxHistory, rxHistoryError: null };\r\n case types.RX_HISTORY_FAILURE: return { ...state, waitingOnRxHistory: false, rxHistoryError: action.error };\r\n\r\n case types.UNLINK_RX_TRANSFER_START: return { ...state, proxyId: action.payload.proxyId, waitingOnUnLinkedRxTransfer: true };\r\n case types.UNLINK_RX_TRANSFER_SUCCESS: return { ...state, unLinkedRxTransfer: action.serviceResponse, waitingOnUnLinkedRxTransfer: false };\r\n case types.UNLINK_RX_TRANSFER_FAILURE: return { ...state, unlinkedTransferError: action.unlinkedTransferError, isFetching: false, waitingOnUnLinkedRxTransfer: false };\r\n\r\n case types.LOAD_ORDERREFILLS_LIST_START:\r\n return {\r\n ...state, orderRefill: {\r\n storeNumberTargetting: action.payload.storeNumber,\r\n proxyId: action.payload.proxyId,\r\n waiting: true, error: null, list: null,\r\n submitOrderResult: null\r\n }, transfer: null\r\n };\r\n case types.LOAD_ORDERREFILLS_LIST_COMPLETED:\r\n return { ...state, orderRefill: { ...state.orderRefill, waiting: false, list: action.serviceResponse } };\r\n case types.LOAD_ORDERREFILLS_LIST_FAILURE:\r\n return { ...state, orderRefill: { ...state.orderRefill, waiting: false, error: action.error } };\r\n case types.ORDER_REFILL_LIST_UPDATE:\r\n return { ...state, orderRefill: action.orderRefill };\r\n\r\n case types.LOAD_PICKUP_HOURS_START:\r\n return { ...state, isPickupHoursWaiting: true, storeNumber: action.payload.storeNumber, proxyId: action.payload.proxyId, isPickupHoursError: false, pickupHoursError: null };\r\n case types.LOAD_PICKUP_HOURS_COMPLETED:\r\n return { ...state, isPickupHoursWaiting: false, pickupHours: action.serviceResponse, pickupDates: action.pickupDates, isPickupHoursError: false, pickupHoursError: null };\r\n case types.LOAD_PICKUP_HOURS_FAILURE: return { ...state, isPickupHoursWaiting: false, isPickupHoursError: true, isFetching: false, pickupHoursError: action.pickupHoursError };\r\n\r\n case types.SUBMIT_IVR_START: return { ...state, RxOrderRefillData: action.payload.RxOrderRefillData, selectedPrescriptions: action.payload.selectedPrescriptions, OrderRefillErrorStatus: undefined };\r\n case types.SUBMIT_IVR_ORDER_REQUEST: return { ...state, isSubmitIvrOrderRequest: true };\r\n case types.SUBMIT_IVR_ORDER_COMPLETED: return { ...state, isSubmitIvrOrderRequest: false, submitOrderResult: action.serviceResponse, OrderRefillErrorStatus: false };\r\n\r\n case types.GET_PHARMACY_BY_STORENUMBER_START: return { ...state, selectedPharmacyDetailsFetchingWaiting: true, selectedOrderedStoreNumber: action.payload.storeNumber };\r\n case types.GET_PHARMACY_BY_STORENUMBER_COMPLETED: return { ...state, selectedPharmacyDetailsFetchingWaiting: false, selectedPharmacyDetails: action.pharmacyByStoreNumber };\r\n\r\n case types.INTERNAL_RX_TRANSFER_START:\r\n return {\r\n ...state, transfer: {\r\n sourceStoreNumber: action.payload.sourceStoreNumber,\r\n destinationStoreNumber: action.payload.destinationStoreNumber,\r\n prescriptions: action.payload.prescriptions,\r\n waiting: true, error: null, result: null\r\n }\r\n };\r\n case types.INTERNAL_RX_TRANSFER_COMPLETED:\r\n return { ...state, transfer: { ...state.transfer, waiting: false, result: action.serviceResponse } };\r\n case types.INTERNAL_RX_TRANSFER_FAILURE:\r\n return { ...state, transfer: { ...state.transfer, waiting: false, error: action.error } };\r\n\r\n case types.SET_FAVOURITE_PHARMACY_START: return { ...state, isSettingFavouritePharmacy: true, storeNumber: action.payload.storeNumber, proxyId: action.payload.proxyId, defaultPharmacyStoreNumber: null };\r\n case types.SET_FAVOURITE_PHARMACY_SUCCESS: return { ...state, isSettingFavouritePharmacy: false, defaultPharmacyStoreNumber: action.defaultPharmacyStoreNumber, pharmacyListLoaded: false, defaultPharmacyLoaded: false };\r\n\r\n case types.SET_FAVOURITE_PHARMACY_FAILURE: return { ...state, isSettingFavouritePharmacy: false, setDefaultPharmacyError: action.error, isFetching: false };\r\n case types.RXTRANSFER_FAILURE: return { ...state, submitRxTransferErrorStatus: true, isFetching: false, isTransferingRXRequest: false, apiErrorMessage: action.apiErrorMessage };\r\n case types.GET_PHARMACY_BY_STORENUMBER_FAILURE: return { ...state, pharmacyByStoreError: action.pharmacyByStoreError, isFetching: false };\r\n case types.SUBMIT_IVR_ORDER_FAILURE: return { ...state, OrderRefillErrorStatus: true, isSubmitIvrOrderRequest: false, isFetching: false };\r\n\r\n case types.RECENTPHARMACY_LIST_FAILURE: return { ...state, recentPharmacyError: action.recentPharmacyError, isFetching: false };\r\n case types.CITIES_LIST_FAILURE: return { ...state, citiesPharmacyError: action.citiesPharmacyError, isFetching: false };\r\n\r\n case types.SET_PROGRESS_FORWARD: return { ...state, isRefillProgressForward: action.payload.isRefillProgressForward, isTransferProgressForward: action.payload.isTransferProgressForward, isNonBswTransferProgressForward: action.payload.isNonBswTransferProgressForward };\r\n\r\n case types.ARCHIVE_UNLINKED_RX_TRANSFER_START: return { ...state, archivingUnlinkedRxTransfer: true, archivedUnlinkedRxResponse: false };\r\n case types.ARCHIVE_UNLINKED_RX_TRANSFER_SUCCESS: return { ...state, archivingUnlinkedRxTransfer: false, archivedUnlinkedRxResponse: true, archivingUnlinkedRxTransferSuccess: true, unLinkedRxTransfer: null };\r\n case types.ARCHIVE_UNLINKED_RX_TRANSFER_FAILURE: return { ...state, archivingUnlinkedRxTransfer: false, archivingUnlinkedRxTransferError: action.error };\r\n\r\n default: return { ...state };\r\n }\r\n}","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const portalInitialState = {\r\n searching: false,\r\n searchSuccess: false,\r\n searchFailure: false,\r\n searchError: null,\r\n searchResults: null, // will be an array after searching\r\n epicFluRecords: [],\r\n epicFluRecordsSuccess: false,\r\n epicFluRecordsPending: false,\r\n hasCurrentFluVaccine: false,\r\n peopleSoftFluRecordsSuccess: false,\r\n peopleSoftFluRecordsPending: false,\r\n peopleSoftFluRecords: [],\r\n fluStatusSummary: null,\r\n fluStatusPending: false,\r\n fluStatusFailure: false,\r\n hideFluVaccineTile: null,\r\n roomStatuses: [],\r\n consumerJWT: null,\r\n providerJWT: null,\r\n consumerJWTPending: false,\r\n providerJWTPending: false,\r\n consumerJWTFailure: false,\r\n providerJWTFailure: false,\r\n revokeHpFhirGrantSuccess: false,\r\n revokeHpFhirGrantFailure: false,\r\n videoVisitShareLinkTerms: {\r\n isWaiting: false, terms: null, isSuccess: false, isFailure: false\r\n },\r\n shareLinkTermsStatus: {\r\n isWaiting: false, hasAccepted: false\r\n },\r\n acceptVideoVisitShareLinkTerms: {\r\n isWaiting: false, isSuccess: false, isFailure: false\r\n },\r\n showOnBoardingPhaseOneToolTipWeb: false,\r\n showLinkMedicalRecordPhaseOneToolTip: false,\r\n showOnBoardingPhaseTwoToolTipWeb: false,\r\n showOnBoardingPhaseThreeToolTipWeb: false,\r\n showOnBoardingPhaseFourToolTipWeb: false,\r\n acceptPrivacyPolicyText: {\r\n isWaiting: false, rsp: null, isSuccess: false, isFailure: false\r\n }\r\n};\r\n\r\nexport default function portalReducer(state = portalInitialState, action) {\r\n switch (action.type) {\r\n case types.SITE_SEARCH_START:\r\n //debugger;\r\n return { ...state, searching: true, searchSuccess: false, searchFailure: false, searchError: null, searchResults: null, searchLastTerm: action.searchPhrase };\r\n\r\n case types.SITE_SEARCH_SUCCESS:\r\n return { ...state, searching: false, searchSuccess: true, searchFailure: false, searchError: null, searchResults: action.searchResults };\r\n\r\n case types.SITE_SEARCH_FAILURE:\r\n return { ...state, searching: false, searchSuccess: false, searchFailure: true, searchError: action.searchError, searchResults: null };\r\n\r\n case types.PATIENT_PHOTO_START: return { ...state, patientPhoto: { ...state.patientPhoto, inProcess: true } };\r\n case types.PATIENT_PHOTO_SUCCESS: return { ...state, patientPhoto: { ...state.patientPhoto, inProcess: false, response: action.response, error: null } };\r\n case types.PATIENT_PHOTO_FAILURE: return { ...state, patientPhoto: { ...state.patientPhoto, inProcess: false, response: null, error: action.error } };\r\n\r\n case types.GET_COMPLETE_FLU_STATUS_PENDING:\r\n return { ...state, fluStatusPending: true, fluStatusFailure: false };\r\n\r\n case types.GET_COMPLETE_FLU_STATUS_SUCCESS:\r\n return { ...state, fluStatusSummary: action.results, fluStatusPending: false, fluStatusFailure: false };\r\n\r\n case types.GET_COMPLETE_FLU_STATUS_FAILURE:\r\n return { ...state, fluStatusSummary: action.results, fluStatusPending: false, fluStatusFailure: true };\r\n\r\n case types.DISABLE_FLU:\r\n return { ...state, epicFluRecordsPending: false, peopleSoftFluRecordsPending: false, fluStatusPending: false, fluStatusFailure: false, epicFluRecords: [], peopleSoftFluRecords: [], fluStatusSummary: {} };\r\n\r\n case types.GET_ROOM_STATUSES_SUCCESS:\r\n return { ...state, roomStatuses: action.statuses.statuses };\r\n\r\n case types.GET_CONSUMER_JWT_PENDING:\r\n return { ...state, consumerJWTPending: true, consumerJWTFailure: false };\r\n\r\n case types.GET_CONSUMER_JWT_SUCCESS:\r\n return { ...state, consumerJWT: action.consumerToken, consumerJWTPending: false, consumerJWTFailure: false };\r\n\r\n case types.GET_CONSUMER_JWT_FAILURE:\r\n return { ...state, consumerJWTPending: false, consumerJWTFailure: true };\r\n\r\n case types.GET_PROVIDER_JWT_PENDING:\r\n return { ...state, providerJWTPending: true, consumerJWTFailure: false };\r\n\r\n case types.GET_PROVIDER_JWT_SUCCESS:\r\n return { ...state, providerJWT: action.providerToken, providerJWTPending: false, providerJWTFailure: false };\r\n\r\n case types.GET_PROVIDER_JWT_FAILURE:\r\n return { ...state, providerJWTPending: false, providerJWTFailure: true };\r\n\r\n case types.GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_PENDING:\r\n return {\r\n ...state,\r\n videoVisitShareLinkTerms: {\r\n isWaiting: true,\r\n terms: null, isSuccess: false, isFailure: false\r\n }\r\n };\r\n\r\n case types.GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_SUCCESS:\r\n return {\r\n ...state,\r\n videoVisitShareLinkTerms: {\r\n isWaiting: false, terms: action.terms, isSuccess: true, isFailure: false\r\n }\r\n };\r\n\r\n case types.GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_FAILURE:\r\n return {\r\n ...state,\r\n videoVisitShareLinkTerms: {\r\n isWaiting: false, terms: null, isSuccess: false, isFailure: true\r\n }\r\n };\r\n\r\n case types.GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK_PENDING:\r\n return {\r\n ...state,\r\n shareLinkTermsStatus: {\r\n isWaiting: true, hasAccepted: false\r\n }\r\n };\r\n\r\n case types.GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK_SUCCESS:\r\n return {\r\n ...state,\r\n shareLinkTermsStatus: {\r\n isWaiting: false, hasAccepted: action.response ? action.response.hasAccepted : false\r\n }\r\n };\r\n\r\n case types.GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK_FAILURE:\r\n return {\r\n ...state,\r\n shareLinkTermsStatus: {\r\n isWaiting: false, hasAccepted: false\r\n }\r\n };\r\n\r\n case types.ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK_PENDING:\r\n return {\r\n ...state,\r\n acceptVideoVisitShareLinkTerms: {\r\n isWaiting: true, isSuccess: false, isFailure: false\r\n }\r\n };\r\n\r\n case types.ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK_SUCCESS:\r\n return {\r\n ...state,\r\n acceptVideoVisitShareLinkTerms: {\r\n isWaiting: false, isSuccess: true, isFailure: false\r\n }\r\n };\r\n\r\n case types.ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK_FAILURE:\r\n return {\r\n ...state,\r\n acceptVideoVisitShareLinkTerms: {\r\n isWaiting: false, isSuccess: false, isFailure: true\r\n }\r\n };\r\n\r\n case types.HIDE_FLU_VACCINE_TILE:\r\n return {\r\n ...state,\r\n hideFluVaccineTile: action.hideFluVaccineTile\r\n };\r\n\r\n case types.SHOW_ONBOARDING_PHASEONE_TOOLTIP:\r\n return {\r\n ...state,\r\n showOnBoardingPhaseOneToolTipWeb: action.showOnBoardingPhaseOneToolTipWeb\r\n };\r\n\r\n case types.SHOW_ONBOARDING_PHASETWO_TOOLTIP:\r\n return {\r\n ...state,\r\n showOnBoardingPhaseTwoToolTipWeb: action.showOnBoardingPhaseTwoToolTipWeb\r\n };\r\n case types.SHOW_ONBOARDING_PHASETHREE_TOOLTIP:\r\n return {\r\n ...state,\r\n showOnBoardingPhaseThreeToolTipWeb: action.showOnBoardingPhaseThreeToolTipWeb\r\n };\r\n case types.SHOW_ONBOARDING_PHASEFOUR_TOOLTIP:\r\n return {\r\n ...state,\r\n showOnBoardingPhaseFourToolTipWeb: action.showOnBoardingPhaseFourToolTipWeb\r\n };\r\n\r\n case types.SHOW_LINK_MEDICALRECORD_PHASEONE_TOOLTIP:\r\n return {\r\n ...state,\r\n showLinkMedicalRecordPhaseOneToolTip: action.showLinkMedicalRecordPhaseOneToolTip\r\n };\r\n\r\n case types.REVOKE_HP_FHIR_GRANT_PENDING:\r\n return {\r\n ...state,\r\n revokeHpFhirGrantSuccess: false, revokeHpFhirGrantFailure: false, revokeHpFhirGrantPending: true,\r\n };\r\n\r\n case types.REVOKE_HP_FHIR_GRANT_SUCCESS:\r\n return {\r\n ...state,\r\n revokeHpFhirGrantSuccess: true, revokeHpFhirGrantFailure: false, revokeHpFhirGrantPending: false,\r\n };\r\n\r\n case types.REVOKE_HP_FHIR_GRANT_FAILURE:\r\n return {\r\n ...state,\r\n revokeHpFhirGrantSuccess: false, revokeHpFhirGrantFailure: true, revokeHpFhirGrantPending: false,\r\n };\r\n case types.ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_PENDING:\r\n return {\r\n ...state,\r\n acceptPrivacyPolicyText: {\r\n isWaiting: true, rsp: null, isSuccess: false, isFailure: false\r\n }\r\n };\r\n\r\n case types.ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_SUCCESS:\r\n return {\r\n ...state,\r\n acceptPrivacyPolicyText: {\r\n isWaiting: false, rsp: action.response, isSuccess: true, isFailure: false\r\n }\r\n };\r\n\r\n case types.ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_FAILURE:\r\n return {\r\n ...state,\r\n acceptPrivacyPolicyText: {\r\n isWaiting: false, rsp: null, isSuccess: false, isFailure: true\r\n }\r\n };\r\n case types.LOGOUT:\r\n return portalInitialState;\r\n default:\r\n return { ...state };\r\n }\r\n}\r\n","import * as types from \"../constants/prayerFeatureActionTypes\";\r\nimport { logUI } from \"../api/andyliticsApi\";\r\nimport * as Tools from \"../helpers/Tools\";\r\n\r\nexport const prayerFeatureInitialState = {\r\n token: null, userRole: null, memberId: null, connectionState: null, updating: null,\r\n livePrayers: null, liveMyPrayers: null, prayers: null, myPrayers: null, allComments: {}, comments: {},\r\n activeTab: '1', lastLoadTime: new Date(), error: null, hasError: false, hasPostError: false, hasBanWord: false\r\n};\r\n\r\nexport default function prayerFeatureReducer(state = prayerFeatureInitialState, action) {\r\n let activityParam2 = null, activityStartTime = null;\r\n switch (action.type) {\r\n case types.SETUP_AMITY_USER_SESSION:\r\n state = { ...state, token: null };\r\n break;\r\n case types.SETUP_AMITY_USER_SESSION_SUCCESS:\r\n state = { ...state, token: action.token, memberId: action.memberId, error: null };\r\n break;\r\n case types.SETUP_AMITY_USER_SESSION_FAILURE:\r\n state = { ...state, error: action.error };\r\n break;\r\n case types.RESET_PRAYER_FEATURE:\r\n state = prayerFeatureInitialState;\r\n break;\r\n case types.AMITY_CONNECTION_CHANGED:\r\n state = { ...state, connectionState: action.connectionState };\r\n break;\r\n case types.UPDATE_AMITY_USER_ROLE:\r\n state = { ...state, userRole: action.userRole };\r\n break;\r\n case types.PRAYER_WALL_TAB_CHANGED:\r\n state = { ...state, activeTab: action.activeTab };\r\n break;\r\n case types.GET_PRAYER_OF_THE_WEEK:\r\n state = { ...state, updatingPrayerOfTheWeek: true };\r\n break;\r\n case types.GET_PRAYER_OF_THE_WEEK_SUCCESS:\r\n state = { ...state, prayerOfTheWeek: action.prayers ? action.prayers[0] : null, livePrayerOfTheWeek: action.livePrayers, updatingPrayerOfTheWeek: false, prayerOfTheWeekHasError: false };\r\n break;\r\n case types.GET_PRAYER_OF_THE_WEEK_FAILURE:\r\n state = { ...state, prayerOfTheWeek: null, updatingPrayerOfTheWeek: false, prayerOfTheWeekHasError: true };\r\n break; case types.GET_ALL_PRAYERS:\r\n state = { ...state, updating: true };\r\n break;\r\n case types.GET_ALL_PRAYERS_SUCCESS:\r\n state = { ...state, prayers: action.allPrayers, livePrayers: action.livePrayers, updating: false, hasError: false };\r\n if (action.sessionStartTime) {\r\n activityStartTime = action.sessionStartTime;\r\n delete action.sessionStartTime;\r\n }\r\n delete action.prayers; // dont' want to include it in kusto logs\r\n break;\r\n case types.UPDATE_LAST_LOAD_TIME:\r\n state = { ...state, lastLoadTime: new Date() };\r\n break;\r\n case types.GET_ALL_PRAYERS_FAILURE:\r\n state = { ...state, prayers: null, updating: false, hasError: true };\r\n break;\r\n case types.GET_MY_PRAYERS:\r\n state = { ...state, updatingMyPrayers: true };\r\n break;\r\n case types.GET_MY_PRAYERS_SUCCESS:\r\n state = { ...state, myPrayers: action.prayers, liveMyPrayers: action.livePrayers, updatingMyPrayers: false, myPrayersHasError: false };\r\n break;\r\n case types.GET_MY_PRAYERS_FAILURE:\r\n state = { ...state, myPrayers: null, updatingMyPrayers: false, myPrayersHasError: true };\r\n break;\r\n case types.POST_PRAYER:\r\n state = { ...state, updating: true, myRecentPrayerPostId: null, hasBanWord: false, hasPostError: false };\r\n break;\r\n case types.POST_PRAYER_SUCCESS:\r\n state = { ...state, updating: false, hasPostError: false, myRecentPrayerPostId: action.myRecentPrayerPostId, hasBanWord: false };\r\n activityParam2 = action.topic;\r\n break;\r\n case types.POST_PRAYER_FAILURE:\r\n state = { ...state, updating: false, hasPostError: true, hasBanWord: action.hasBanWord };\r\n break;\r\n case types.EDIT_PRAYER_SUCCESS:\r\n state = { ...state, myEditPrayerPostId: action.myEditPrayerPostId, textInput: action.textInput, hasBanWord: false, hasEditPrayerError: false };\r\n break;\r\n case types.EDIT_PRAYER_FAILURE:\r\n state = { ...state, hasEditPrayerError: true, hasBanWord: action.hasBanWord };\r\n break;\r\n case types.DELETE_PRAYER_SUCCESS:\r\n state = { ...state, isPrayerDeleted: true, deletedPrayer: action.prayer };\r\n activityParam2 = action.myEditPrayerPostId;\r\n break;\r\n case types.DELETE_PRAYER_FAILURE:\r\n state = { ...state, isPrayerDeleted: false };\r\n break;\r\n case types.GET_COMMENT_SUCCESS:\r\n state.comments[action.commentId] = true;\r\n break;\r\n case types.GET_COMMENT_FAILURE:\r\n state.comments[action.commentId] = 'error';\r\n break;\r\n case types.GET_COMMENTS_SUCCESS:\r\n state.allComments[action.postId] = true;\r\n break;\r\n case types.GET_COMMENTS_FAILURE:\r\n state.allComments[action.postId] = 'error';\r\n break;\r\n case types.ADD_COMMENT_SUCCESS:\r\n state = { ...state, updating: false, commentHasError: false, myRecentComment: action.comment, commentHasBanWord: false };\r\n activityParam2 = action.comment.referenceId;\r\n break;\r\n case types.ADD_COMMENT_FAILURE:\r\n state = { ...state, updating: false, commentHasError: true, commentHasBanWord: action.commentHasBanWord };\r\n break;\r\n case types.EDIT_COMMENT_SUCCESS:\r\n state = { ...state, textInput: action.textInput, myRecentComment: action.comment, hasEditCommentError: false, hasBanWord: false };\r\n activityParam2 = action.comment.referenceId;\r\n break;\r\n case types.EDIT_COMMENT_FAILURE:\r\n state = { ...state, hasEditCommentError: true, hasBanWord: action.hasBanWord };\r\n break;\r\n case types.DELETE_COMMENT_SUCCESS:\r\n state = { ...state, isCommentDeleted: true, deletedComment: action.comment };\r\n activityParam2 = action.comment.referenceId;\r\n break;\r\n case types.DELETE_COMMENT_FAILURE:\r\n state = { ...state, isCommentDeleted: false };\r\n break;\r\n case types.GET_NOTIFICATION_BADGE_SUCCESS:\r\n state = { ...state, showBadge: action.showBadge, errorReadingBadge: null };\r\n break;\r\n case types.GET_NOTIFICATION_BADGE_FAILURE:\r\n state = { ...state, errorReadingBadge: action.error || 'error reading badge' };\r\n break;\r\n case types.POST_NOTIFICATION_BADGE_ASREAD_SUCCESS:\r\n state = { ...state, badgeResetResult: action.response, errorResetingBadge: null };\r\n break;\r\n case types.POST_NOTIFICATION_BADGE_ASREAD_FAILURE:\r\n state = { ...state, errorResetinggBadge: action.error || 'error resetting badge' };\r\n break;\r\n case types.ADD_PRAYER_REACTION_SUCCESS: case types.REMOVE_PRAYER_REACTION_SUCCESS:\r\n case types.ADD_COMMENT_REACTION_SUCCESS: case types.REMOVE_COMMENT_REACTION_SUCCESS:\r\n activityParam2 = action.postId;\r\n delete action.postId;\r\n break;\r\n case types.PRAYER_WALL_ENTERED:\r\n activityParam2 = action.timestamp;\r\n delete action.timestamp;\r\n break;\r\n case types.PRAYER_WALL_LEFT:\r\n activityParam2 = action.sessionDurationInMinutes;\r\n delete action.sessionDurationInMinutes;\r\n break;\r\n case types.GET_NEXT_PRAYERS:\r\n state = { ...state, loadingMore: true };\r\n break;\r\n case types.GET_NEXT_PRAYERS_COMPLETED:\r\n state = { ...state, loadingMore: action.gotMore ? state.loadingMore : false };\r\n break;\r\n case types.GET_DELETED_POSTS_SUCCESS:\r\n state = { ...state, showDeleteAlert: true, deletedPost: action.deletedPost };\r\n break;\r\n case types.GET_DELETED_POSTS_FAILURE:\r\n state = { ...state, showDeleteAlert: false, deletedPost: null };\r\n break;\r\n case types.MARK_DELETED_POST_ASREAD_SUCCESS:\r\n state = { ...state, showDeleteAlert: false };\r\n break;\r\n case types.MARK_DELETED_POST_ASREAD_FAILURE:\r\n state = { ...state, showDeleteAlert: true };\r\n break;\r\n case types.REFRESH_ALL_PRAYERS: case types.REFRESH_MY_PRAYERS:\r\n case types.EDIT_PRAYER: case types.DELETE_PRAYER:\r\n case types.GET_COMMENT: case types.GET_COMMENTS: case types.ADD_COMMENT: case types.EDIT_COMMENT: case types.DELETE_COMMENT:\r\n case types.ADD_PRAYER_REACTION: case types.ADD_PRAYER_REACTION_FAILURE:\r\n case types.REMOVE_PRAYER_REACTION: case types.REMOVE_PRAYER_REACTION_FAILURE:\r\n case types.ADD_COMMENT_REACTION: case types.ADD_COMMENT_REACTION_FAILURE:\r\n case types.REMOVE_COMMENT_REACTION: case types.REMOVE_COMMENT_REACTION_FAILURE:\r\n case types.GET_NOTIFICATION_BADGE: case types.POST_NOTIFICATION_BADGE_ASREAD:\r\n break;\r\n default:\r\n return state;\r\n }\r\n\r\n //const { ['type']: typeNotNeeded, ['callback']: callbackNotNeeded, ...restOfAction } = action;\r\n //let logData = JSON.stringify(restOfAction);\r\n //if (logData === JSON.stringify({})) {\r\n // logData = null;\r\n //}\r\n //const memberId = sessionStorage['root'] ? JSON.parse(JSON.parse(sessionStorage['root']).prayerFeature).memberId : null;\r\n //logUI('MBHWeb.PrayerWall.' + action.type, activityStartTime || new Date(), Tools.getURLPath(), logData, memberId, activityParam2);\r\n\r\n return state;\r\n}","import * as types from \"../constants/actionTypes\";\r\n\r\n\r\nexport const pricingInitialState = {\r\n quote: {},\r\n benefitDetails: [],\r\n appointments: [],\r\n appointmentsLoaded: false,\r\n selectedAppointment: {},\r\n selectedProxy: {},\r\n redirect: '',\r\n status:'',\r\n accessList: [],\r\n pdf: null,\r\n estimateDetailsTileMessageDetials: false\r\n};\r\n\r\nexport default function pricingReducer(state = pricingInitialState, action) {\r\n switch (action.type) {\r\n case types.ESTIMATE_DETAILS_SCROLL_TO_BOTTOM_SUCCESS:\r\n return {...state };\r\n case types.ESTIMATE_DETAILS_TILE_MESSAGE_DETAILS_SUCCESS:\r\n return { ...state, estimateDetailsTileMessageDetials:action.isShown};\r\n case types.PRICING_USERSQUOTE_ESTIMATE_PDF_SUCCESS:\r\n return { ...state, pdf: action.pdf };\r\n case types.PRICING_USER_PROXY_SELECTED_INITIAL_STATE:\r\n return { ...state, redirect: '',benefitDetails:pricingInitialState.benefitDetails,quote:pricingInitialState.quote,selectedAppointment:pricingInitialState.selectedAppointment,accessList:pricingInitialState.accessList}\r\n case types.PRICING_USER_PROXY_SUCCESS:\r\n return { ...state, selectedProxy: action.prxy, redirect: '' };\r\n case types.PRICING_USERQUOTE_PROXYLIST_SUCCESS:\r\n return { ...state, accessList: action.accessList };\r\n case types.PRICING_USERSQUOTE_BENEFITDETAILS_SUCCESS:\r\n if (action.qt) {\r\n return { ...state, benefitDetails: action.ben, quote: action.qt, redirect: '' };\r\n } else {\r\n return { ...state,isDataLoaded: true, benefitDetails: action.ben, redirect: '' };\r\n }\r\n case types.PRICING_USERQUOTE_APPOINTMENTS_LOADING:\r\n return {\r\n ...state,\r\n appointments: [],\r\n appointmentsLoaded: false,\r\n redirect: ''\r\n }\r\n case types.PRICING_USERSQUOTE_APPOINTMENTS_SUCCESS:\r\n \r\n return {\r\n ...state,\r\n appointments: action.apts,\r\n appointmentsLoaded: true,\r\n redirect: ''\r\n };\r\n case types.PRICING_USERQUOTE_APPOINTMENTS_ERROR:\r\n console.error(`pricingReducer PRICING_USERQUOTE_APPOINTMENTS_ERROR `,state);\r\n return {...state,appointmentsLoaded: true}\r\n case types.PRICING_USERSQUOTE_QUOTE_CLEAR_SUCCESS:\r\n return pricingInitialState;\r\n default:\r\n return { ...state, redirect: ''};\r\n }\r\n}\r\n\r\n","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const profileToolsInitialState = {\r\n fluConsent: null,\r\n fluPending: false,\r\n fluSuccess: false,\r\n consentPending: false,\r\n consentGetSuccess: false,\r\n consentSetSuccess: false,\r\n consentList: [],\r\n consentType: null,\r\n consentTypeList: null,\r\n consentTypePending: false,\r\n consentTypeSuccess: false,\r\n consentTypeFailure: false\r\n};\r\n\r\nexport default function profileToolsReducer(state = profileToolsInitialState, action) {\r\n switch (action.type) {\r\n case types.CONSENT_GET_PENDING:\r\n return { ...state, consentPending: true };\r\n case types.CONSENT_FLU_PENDING:\r\n return { ...state, fluPending: true };\r\n case types.CONSENT_FLU_SUCCESS:\r\n return { ...state, fluConsent: action.consent, fluSuccess: true, fluPending: false };\r\n case types.CONSENT_FLU_FAILURE:\r\n return { ...state, fluConsent: null, fluSuccess: false, fluPending: false };\r\n case types.CONSENT_GET_SUCCESS:\r\n return { ...state, fluConsent: action.consent, consentPending: false, consentGetSuccess: true };\r\n case types.CONSENT_GET_FAILURE:\r\n return { ...state, fluConsent: null, consentPending: false, consentGetSuccess: false };\r\n case types.CONSENT_SET_SUCCESS:\r\n return { ...state, fluConsent: action.consent, consentPending: false, consentSetSuccess: true };\r\n case types.CONSENT_SET_FAILURE:\r\n return { ...state, consentPending: false, consentSetSuccess: false };\r\n case types.CONSENT_GET_LIST_SUCCESS:\r\n return { ...state, consentList: action.consent.results && action.consent.results.length > 0 ? action.consent.results : [], consentPending: false, consentGetSuccess: true };\r\n case types.CONSENT_GET_LIST_FAILURE:\r\n return { ...state, consentList: [], consentPending: false, consentGetSuccess: false };\r\n case types.CONSENT_TYPE_PENDING:\r\n case types.CONSENT_TYPE_LIST_PENDING:\r\n return { ...state, consentTypePending: true, consentTypeFailure: false };\r\n case types.CONSENT_TYPE_SUCCESS:\r\n return { ...state, consentType: action.consent, consentTypePending: false, consentTypeSuccess: true };\r\n case types.CONSENT_TYPE_FAILURE:\r\n return { ...state, consentType: null, consentTypePending: false, consentTypeSuccess: true };\r\n case types.CONSENT_TYPE_LIST_SUCCESS:\r\n return { ...state, consentTypeList: action.consent ? action.consent.results : [], consentTypePending: false, consentTypeSuccess: true, consentTypeFailure: false };\r\n case types.CONSENT_TYPE_LIST_FAILURE:\r\n return { ...state, consentTypeList: [], consentTypePending: false, consentTypeSuccess: false, consentTypeFailure: true };\r\n case types.LOGOUT:\r\n return profileToolsInitialState;\r\n default:\r\n return { ...state };\r\n }\r\n}\r\n","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const searchLocationsInitialState = {\r\n locations: [],\r\n totalLocations: 0,\r\n //equipment: [],\r\n locationType: '',\r\n perks: '',\r\n services: '',\r\n specialties: '',\r\n success: false,\r\n searchRunning: false,\r\n error: false,\r\n updateFacets: false,\r\n searchModel: null\r\n};\r\n\r\nexport default function searchLocationsReducer(state = searchLocationsInitialState, action) {\r\n switch (action.type) {\r\n\r\n case types.UPDATE_FACETS:\r\n return { ...state, updateFacets: action.updateFacets };\r\n\r\n case types.CLEAR_LOCATIONS:\r\n return { searchLocationsInitialState };\r\n\r\n case types.CLEAR_LOCATIONS_RESULTS:\r\n return { ...state, locations: [], totalLocations: 0, locationType: '', perks: '', services: '', specialties: '' };\r\n\r\n case types.SEARCH_LOCATION_CLEAR:\r\n return { ...state, success: false, locations: [], totalLocations: 0 };\r\n case types.SEARCH_LOCATION:\r\n return { ...state, searchModel: action.searchModel, success: true, searchRunning: true, error: false };\r\n case types.SEARCH_LOCATION_SUCCESS:\r\n // api returned an http 200 with a null response body.\r\n if (action === null || action.locations === null) {\r\n return {\r\n ...state,\r\n locations: [],\r\n totalLocations: 0,\r\n //equipment: [],\r\n locationType: '',\r\n perks: '',\r\n services: '',\r\n specialties: '',\r\n success: false,\r\n searchRunning: false,\r\n error: true\r\n };\r\n }\r\n else {\r\n // successful response.\r\n return {\r\n ...state,\r\n locations: action.locations.locationResults,\r\n totalLocations: action.locations.locationCount,\r\n locationType: action.locations.aggregations && action.locations.aggregations.locationtypefacet,\r\n perks: action.locations.aggregations && action.locations.aggregations.perksfacet,\r\n services: action.locations.aggregations && action.locations.aggregations.servicesandequipmentfacet,\r\n specialties: action.locations.aggregations && action.locations.aggregations.specialtiesfacet,\r\n success: true,\r\n searchRunning: false,\r\n error: false,\r\n updateFacets: false,\r\n appliedRules: action && action.locations && action.locations.appliedRules ? action.locations.appliedRules : []\r\n };\r\n }\r\n case types.SEARCH_LOCATION_ERROR:\r\n return { ...state, success: false, searchRunning: false, error: true };\r\n case types.GET_LOCATION_TYPES_SUCCESS:\r\n return { ...state, locationTypes: action.locTypes, success: true, searchRunning: false, error: false };\r\n case types.GEOLOCATION:\r\n return { ...state, waitingOnGeolocation: true, latitude: null, longitude: null, geolocationError: \"\" }; //Task 34261, reset lat & lng also as it is causing update issues in UI.\r\n case types.GEOLOCATION_SUCCESS:\r\n return { ...state, latitude: action.latitude, longitude: action.longitude, waitingOnGeolocation: false, geolocationError: \"\", isCurrentLocation: action.isCurrentLocation };\r\n case types.GEOLOCATION_FAILURE:\r\n return { ...state, waitingOnGeolocation: false, latitude: null, longitude: null, geolocationError: action.geolocationError, isCurrentLocation: action.isCurrentLocation };\r\n case types.GEOADDRESS:\r\n return { ...state, waitingOnGeoAddress: true, geolocationError: \"\" }; \r\n case types.GEOADDRESS_SUCCESS:\r\n return { ...state, city: action.city, state: action.state, geoAddressError: \"\", waitingOnGeoAddress: false };\r\n case types.GEOADDRESS_FAILURE:\r\n return { ...state, geoAddressError: action.geoAddressError, waitingOnGeoAddress: false };\r\n case types.LOGOUT:\r\n return searchLocationsInitialState;\r\n default:\r\n return { ...state };\r\n }\r\n}","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const searchprovidersInitialState = {\r\n providers: [],\r\n providerData: [],\r\n success: false,\r\n searchRunning: false,\r\n error: false,\r\n specialties: [],\r\n languages: [],\r\n ageGroups: [],\r\n visitTypes: [],\r\n providerDetails: [],\r\n updateFacets: false,\r\n searchModel: null,\r\n usesMyBSWHealth: null,\r\n detailsPending: false,\r\n earliestScheduleSuccess: false,\r\n earliestScheduleWaiting: false,\r\n earliestScheduleError: false,\r\n earliestScheduleProvider: null,\r\n isSlotAvailable: null,\r\n isSlotAvailableUnderRadius: null,\r\n searchForVaxSlotAvailRunning: false,\r\n searchForVaxSlotAvailSuccess: false,\r\n searchForVaxSlotAvailError: false,\r\n earliestDirectVVSchedule: null,\r\n providerListByVisitTypeSuccess: false,\r\n providerListByVisitTypeWaiting: false,\r\n providerListByVisitTypeError: false\r\n\r\n\r\n};\r\n\r\nexport default function searchProvidersReducer(state = searchprovidersInitialState, action) {\r\n switch (action.type) {\r\n\r\n case types.UPDATE_FACETS:\r\n return { ...state, updateFacets: action.updateFacets };\r\n case types.SEARCH_PROVIDER_CLEAR:\r\n return { ...state, clearSearch: true, success: false, providers: [], totalProviders: 0 };\r\n case types.SEARCH_PROVIDER:\r\n return { ...state, clearSearch: false, searchModel: action.searchModel, success: true, searchRunning: true, error: false };\r\n case types.PROVIDER_DETAIL:\r\n return { ...state, success: true, searchRunning: true, error: false, detailsPending: true };\r\n case types.LOAD_PROVIDERS_SUCCESS:\r\n\r\n // phynd service returned a 200 with a null response...\r\n if (action === null || action.providers === null) {\r\n return {\r\n ...state,\r\n providers: [],\r\n specialties: [],\r\n languages: [],\r\n ageGroups: [],\r\n visitTypes: [],\r\n providerDetails: [],\r\n smartResponseResults: null,\r\n success: false,\r\n searchRunning: false,\r\n error: false\r\n };\r\n }\r\n else {\r\n // successful response.\r\n return {\r\n ...state, providers: action.providers.providerResults,\r\n totalProviders: action.providers.totalProviders,\r\n success: true,\r\n searchRunning: false,\r\n error: false,\r\n specialties: action && action.providers.aggregation && action.providers.aggregation.specialtyfacet ? action.providers.aggregation.specialtyfacet.items : state.specialties,\r\n languages: state.updateFacets === true && action && action.providers.aggregation && action.providers.aggregation.languagesfacet ? action.providers.aggregation.languagesfacet.items : state.languages,\r\n ageGroups: state.updateFacets === true && action && action.providers.aggregation && action.providers.aggregation.patientAgeGroupfacet ? action.providers.aggregation.patientAgeGroupfacet.items : state.ageGroups,\r\n visitTypes: state.updateFacets === true && action && action.providers.aggregation && action.providers.aggregation.visitTypefacet ? action.providers.aggregation.visitTypefacet.items : state.visitTypes,\r\n updateFacets: false,\r\n appliedRules: action && action.providers && action.providers.appliedRules ? action.providers.appliedRules : [],\r\n smartResponseResults: action.providers.smartResponseResults.newProviderCount > 0 ? action.providers.smartResponseResults : null\r\n };\r\n }\r\n case types.LOAD_PROVIDER_DETAIL_SUCCESS:\r\n const results = action.providers.length > 0 ? action.providers : null;\r\n return { ...state, providerDetails: results, success: true, searchRunning: false, error: false, detailsPending: false };\r\n case types.CLEAR_PROVIDERS:\r\n return {\r\n ...state, providers: [], providerDetails: [], totalProviders: 0, specialties: [], languages: [],\r\n ageGroups: [], visitTypes: [], success: true, searchRunning: false, error: false, detailsPending: false,\r\n };\r\n case types.CLEAR_PROVIDER_DETAIL:\r\n return {\r\n ...state, providerDetails: [], detailsPending: false\r\n };\r\n case types.SEARCH_PROVIDER_ERROR:\r\n return { ...state, success: false, searchRunning: false, error: true, detailsPending: false };\r\n case types.SAVE_PROVIDER_SEARCH_MODEL:\r\n return {\r\n ...state, searchModel: action && action.payload && action.payload.searchModel ? action.payload.searchModel : null\r\n };\r\n case types.LOGOUT:\r\n return searchprovidersInitialState;\r\n case types.UPDATE_USEMYBSWHEALTH_FILTER:\r\n return {\r\n ...state, usesMyBSWHealth: action.usesMyBSWHealth\r\n };\r\n case types.FIND_CARE_FILTERS_OPEN:\r\n return { ...state, findCareFiltersOpen: action.isOpen };\r\n case types.GET_PROVIDER_WITH_EARLIESTSCHEDULE:\r\n return { ...state, earliestScheduleSearchModel: action.searchModel, earliestScheduleSuccess: true, earliestScheduleWaiting: true, earliestScheduleError: false };\r\n\r\n case types.GET_PROVIDERS_LIST_VISITTYPE:\r\n return { ...state, providerListByVisitTypeSuccess: false, providerListByVisitTypeWaiting: true, providerListByVisitTypeError: false };\r\n case types.GET_PROVIDERS_LIST_VISITTYPE_SUCCESS:\r\n return { ...state, providerData: action.providers, providerListByVisitTypeSuccess: true, providerListByVisitTypeWaiting: false, providerListByVisitTypeError: false };\r\n case types.GET_PROVIDERS_LIST_VISITTYPE_FAILURE:\r\n return { ...state, providerData: action.providers, providerListByVisitTypeSuccess: false, providerListByVisitTypeWaiting: false, providerListByVisitTypeError: true };\r\n case types.GET_PROVIDERS_LIST_VISITTYPE_PENDING:\r\n return { ...state, providerData: action.providers, providerListByVisitTypeSuccess: false, providerListByVisitTypeWaiting: true, providerListByVisitTypeError: true };\r\n\r\n case types.GET_PROVIDERS_LIST_BY_VISITTYPE:\r\n return { ...state, earliestScheduleSuccess: false, earliestScheduleWaiting: true, earliestScheduleError: false };\r\n case types.GET_PROVIDER_WITH_EARLIESTSCHEDULE_SUCCESS:\r\n\r\n // phynd service returned a 200 with a null response...\r\n if (action === null || action.providers === null) {\r\n return {\r\n ...state,\r\n earliestScheduleSuccess: false,\r\n earliestScheduleWaiting: false,\r\n earliestScheduleError: false,\r\n earliestScheduleProvider: null\r\n };\r\n }\r\n else {\r\n // successful response.\r\n return {\r\n ...state, \r\n earliestScheduleProvider: action.providers,\r\n earliestScheduleSuccess: true,\r\n earliestScheduleWaiting: false,\r\n earliestScheduleError: false\r\n };\r\n }\r\n case types.GET_PROVIDER_WITH_EARLIESTSCHEDULE_ERROR:\r\n return { ...state, earliestScheduleSuccess: false, earliestScheduleWaiting: false, earliestScheduleError: true };\r\n\r\n case types.SEARCH_FOR_GENERIC_PROVIDER:\r\n return { ...state, clearSearch: false, searchModel: action.searchModel, success: true, searchRunning: true, error: false };\r\n case types.SEARCH_FOR_GENERIC_PROVIDER_SUCCESS:\r\n {\r\n // phynd service returned a 200 with a null response...\r\n if (action === null || action.providers === null) {\r\n return {\r\n ...state,\r\n providers: [],\r\n specialties: [],\r\n languages: [],\r\n ageGroups: [],\r\n visitTypes: [],\r\n providerDetails: [],\r\n success: false,\r\n searchRunning: false,\r\n error: false\r\n };\r\n }\r\n else {\r\n // successful response. \r\n return {\r\n ...state,\r\n providers: action.providers.providerResults,\r\n totalProviders: action.providers.totalProviders,\r\n success: true,\r\n searchRunning: false,\r\n error: false,\r\n specialties: state.updateFacets === true && action && action.providers.aggregation && action.providers.aggregation.specialtyfacet ? action.providers.aggregation.specialtyfacet.items : state.specialties,\r\n languages: state.updateFacets === true && action && action.providers.aggregation && action.providers.aggregation.languagesfacet ? action.providers.aggregation.languagesfacet.items : state.languages,\r\n ageGroups: state.updateFacets === true && action && action.providers.aggregation && action.providers.aggregation.patientAgeGroupfacet ? action.providers.aggregation.patientAgeGroupfacet.items : state.ageGroups,\r\n visitTypes: state.updateFacets === true && action && action.providers.aggregation && action.providers.aggregation.visitTypefacet ? action.providers.aggregation.visitTypefacet.items : state.visitTypes,\r\n updateFacets: false,\r\n appliedRules: action && action.providers && action.providers.appliedRules ? action.providers.appliedRules : []\r\n };\r\n }\r\n }\r\n case types.SEARCH_FOR_GENERIC_PROVIDER_FAILURE:\r\n return { ...state, success: false, searchRunning: false, error: true, detailsPending: false };\r\n case types.SEARCH_FOR_GENERIC_PROVIDER_SLOT_AVAILABILITY:\r\n return { ...state, searchForVaxSlotAvailRunning: true, searchForVaxSlotAvailSuccess: false, searchForVaxSlotAvailError: false, isSlotAvailable: null, isSlotAvailableUnderRadius: null };\r\n case types.SEARCH_FOR_GENERIC_PROVIDER_SLOT_AVAILABILITY_SUCCESS:\r\n {\r\n // phynd service returned a 200 with a null response...\r\n if (action === null || action.providers === null) {\r\n return {\r\n ...state,\r\n searchForVaxSlotAvailSuccess: false,\r\n searchForVaxSlotAvailRunning: false,\r\n searchForVaxSlotAvailError: false,\r\n isSlotAvailable: false,\r\n isSlotAvailableUnderRadius: false\r\n };\r\n }\r\n else {\r\n // successful response.\r\n let isSlotAvailable = false;\r\n let isSlotAvailableUnderRadius = false;\r\n const vaccineSearchRadius = window.serverData && window.serverData.data ? window.serverData.data.CovidVaccineSearchRadius : 25;\r\n if (action.providers && action.providers.providerResults && action.providers.providerResults.length > 0) {\r\n for (let prov = 0; prov < action.providers.providerResults.length; prov++) {\r\n const providerObj = action.providers.providerResults[prov];\r\n if (providerObj && providerObj.provider && providerObj.provider.locations) {\r\n for (let loc = 0; loc < providerObj.provider.locations.length; loc++) {\r\n const locObj = providerObj.provider.locations[loc];\r\n if (locObj && typeof locObj.distance !== 'undefined' && locObj.distance !== null && locObj.distance !== '' &&\r\n vaccineSearchRadius >= locObj.distance) {\r\n isSlotAvailableUnderRadius = true;\r\n }\r\n if (locObj.openSchedules && locObj.openSchedules.dateAndTimes && locObj.openSchedules.dateAndTimes.length > 0) {\r\n isSlotAvailable = true;\r\n }\r\n if (isSlotAvailable && isSlotAvailableUnderRadius) break;\r\n }\r\n }\r\n if (isSlotAvailable && isSlotAvailableUnderRadius) break;\r\n }\r\n }\r\n\r\n return {\r\n ...state,\r\n searchForVaxSlotAvailSuccess: true,\r\n searchForVaxSlotAvailRunning: false,\r\n searchForVaxSlotAvailError: false,\r\n isSlotAvailable: isSlotAvailable,\r\n isSlotAvailableUnderRadius: isSlotAvailableUnderRadius\r\n };\r\n }\r\n }\r\n case types.SEARCH_FOR_GENERIC_PROVIDER_SLOT_AVAILABILITY_FAILURE:\r\n return { ...state, searchForVaxSlotAvailSuccess: false, searchForVaxSlotAvailRunning: false, searchForVaxSlotAvailError: true, isSlotAvailable: false, isSlotAvailableUnderRadius: false };\r\n\r\n default:\r\n return { ...state };\r\n }\r\n}","import * as types from \"../constants/actionTypes\";\r\nimport * as msgs from \"../constants/textConstants\";\r\nimport * as patientIDs from \"../constants/PatientIDTypes\";\r\n\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport * as Tools from \"../helpers/Tools\";\r\n\r\nconst convert = function (value) {\r\n if (typeof value === 'string') {\r\n const stringValue = value.toLowerCase();\r\n if (stringValue === 'true') value = true;\r\n else if (stringValue === 'false') value = false;\r\n }\r\n return value;\r\n}\r\n\r\nexport const sessionInitialState = function () {\r\n return {\r\n terms: null,\r\n userHasAccepted: false,\r\n reloadKey: uuidv4(),\r\n hideTutorialPrompt: true,\r\n showAutoHPLinkModal: false,\r\n showInsuranceForm: false,\r\n showAutoLinkMyChart: false,\r\n showVideoVisitToolTip: false,\r\n healthPlanUserProfile: null,\r\n healthPlanUserToken: null,\r\n currentHealthPlanInfo: null,\r\n hasSWHP: false,\r\n hasAAL: false,\r\n networkCode: null,\r\n insuranceName: null,\r\n healthPlans: null,\r\n hpId: null, //Health Plan Id\r\n aaId: null, //AA Id\r\n fcId: null, //First Care Id\r\n hasFirstCare: false, // This value needs to be mapped from GetHealthPlans Call. After 9/1 will remove reference from domain reducer. \r\n hasADental: false,\r\n useOnboardingLayout: false,\r\n loginNotice: window.data && window.data.serverData ? window.data.serverData.loginNotice : null,\r\n headerMessage: window.data && window.data.serverData ? window.data.serverData.headerMessage : null,\r\n masterSpinnerOn: false,\r\n hasSeenScheduleCareTooltip: false,\r\n newProxySuggestionList: null,\r\n selectedProxySuggestionUsers: [],\r\n profileDataLoaded: false\r\n };\r\n};\r\n\r\nexport default function sessionReducer(state = sessionInitialState(), action) {\r\n switch (action.type) {\r\n case types.INIT_SESSION:\r\n // TODO: use with asp-prerender-data to set initial state from the server.\r\n return state;\r\n case types.PROFILE_DATA_LOADED:\r\n return { ...state, profileDataLoaded: true };\r\n case types.SET_SERVER_DATA:\r\n return { ...state, serverData: action.serverData };\r\n case types.SET_HISTORY_OBJECT:\r\n return { ...state, history: action.history };\r\n case types.SET_TERMS_AND_CONDITIONS:\r\n return { ...state, terms: action.terms || state.terms, version: action.version || state.version, userHasAccepted: action.HasAccepted || state.userHasAccepted };\r\n case types.LOGOUT:\r\n return {\r\n ...state,\r\n userHasAccepted: false,\r\n healthPlanUserProfile: null,\r\n healthPlanUserToken: null,\r\n profileDataLoaded: false,\r\n };\r\n case types.LOGOUT_COMPLETED:\r\n return {\r\n ...state,\r\n currentHealthPlanInfo: null,\r\n hasSWHP: false,\r\n hasAAL: false,\r\n hasFirstCare: false,\r\n insuranceName: null,\r\n networkCode: null,\r\n healthPlans: null,\r\n hpId: null,\r\n aaId: null,\r\n fcId: null,\r\n profileDataLoaded: false,\r\n selectedProxySuggestionUsers: [], hasSelectedProxySuggestionUsers: false, newProxySuggestionList: [], hasProxySuggestions: false\r\n };\r\n case types.SET_USER_PREFERENCES:\r\n const userPreferences = {};\r\n if (action.userPreferences && action.userPreferences.length > 0) {\r\n action.userPreferences.forEach(p => {\r\n let value = convert(p.PreferenceValue);\r\n userPreferences[p.PreferenceName] = value;\r\n });\r\n }\r\n return { ...state, userPreferences };\r\n case types.GET_USER_PREFERENCE_SUCCESS:\r\n case types.UPDATE_USER_PREFERENCE_SUCCESS:\r\n if (!state.userPreferences) {\r\n state.userPreferences = {};\r\n }\r\n state.userPreferences[action.PreferenceName] = convert(action.PreferenceValue);\r\n return state;\r\n case types.GET_USER_PREFERENCE_FAILURE:\r\n case types.UPDATE_USER_PREFERENCE_FAILURE:\r\n if (!state.userPreferences) {\r\n state.userPreferences = {};\r\n }\r\n state.userPreferences[action.PreferenceName] = null;\r\n return state;\r\n case types.SET_HIDE_TUTORIAL:\r\n return { ...state, hideTutorialPrompt: action.hideTutorialPrompt };\r\n case types.SET_HIDE_AUTO_HP_LINKMODAL:\r\n return { ...state, showAutoHPLinkModal: action.showAutoHPLinkModal };\r\n case types.SHOW_INSURANCE_FORM:\r\n return { ...state, showInsuranceForm: action.showInsuranceForm };\r\n case types.SHOW_ADD_DEPENDENT_PROXY_FORM:\r\n return { ...state, showDependentProxyForm: action.showDependentProxyForm };\r\n case types.SHOW_AUTOLINK_MYCHART:\r\n return { ...state, showAutoLinkMyChart: action.showAutoLinkMyChart };\r\n case types.SHOW_VIDEO_VISIT_TOOLTIP:\r\n return { ...state, showVideoVisitToolTip: action.showVideoVisitToolTip };\r\n case types.SAVE_PROXY_REQUESTEE_INFO:\r\n return { ...state, proxyRequesteeInfo: action.proxyRequesteeInfo };\r\n case types.RELOAD_KEY:\r\n return { ...state, reloadKey: uuidv4() };\r\n case types.HP_USERDATA_SUCCESS:\r\n return { ...state, healthPlanUserProfile: action.hpUserIdentity };\r\n //case types.HP_USERDATA_STORETOKEN:\r\n // return { ...state, healthPlanUserToken: action.token };\r\n case types.SHOW_GET_CARE_TOOLTIP:\r\n return { ...state, showGetCareToolTip: action.showGetCareToolTip };\r\n case types.SHOW_FAMILY_MANAGEMENT_TOOLTIP:\r\n return { ...state, showFamilyManagementToolTip: action.showFamilyManagementToolTip, hasRedirect: action.hasRedirect };\r\n //case types.SHOW_DCJ_SELF_ENROLL_TOOLTIP:\r\n // return { ...state, showDCJSelfEnrollToolTip: action.showDCJSelfEnrollToolTip };\r\n case types.SHOW_MARKETING_EMAIL_OPT_IN:\r\n return { ...state, showEmailOptIn: action.showEmailOptIn };\r\n case types.SHOW_FAMILYMEMBERS_SCREEN:\r\n return { ...state, showFamilyMembersScreen: action.showFamilyMembersScreen };\r\n case types.SHOW_ONBOARDING_MODAL:\r\n return { ...state, showOnboardingModal: action.showOnboardingModal };\r\n case types.SHOW_NOTIFICATIONS_SCREEN:\r\n return { ...state, showNotificationsScreen: action.showNotificationsScreen };\r\n case types.SHOW_SCHEDULE_CARE_TOOLTIP:\r\n return { ...state, showScheduleCareTooltip: action.showScheduleCareTooltip };\r\n case types.HAS_COMPLETED_ONBOARDING:\r\n return { ...state, hasCompletedOnboarding: action.hasCompletedOnboarding };\r\n case types.SET_USE_ONBOARDING_LAYOUT:\r\n return { ...state, useOnboardingLayout: action.useOnboardingLayout };\r\n //case types.CARECOACH_JOURNEY_PREFERENCE:\r\n // return { ...state, noActiveDCJEids: action.noActiveDCJEids };\r\n\r\n case types.SET_HEALTHPLAN_INFO:\r\n //As discussed added healthplan roles in session reducer, after 9/1 will remove from domain reducer references.\r\n const loginProvider = action.healthPlanInfo && action.healthPlanInfo.LoginProvider ?\r\n action.healthPlanInfo.LoginProvider.toLowerCase() : '';\r\n const insuranceName = action.healthPlanInfo && action.healthPlanInfo.FullName ?\r\n action.healthPlanInfo.FullName : '';\r\n const networkCode = action.healthPlanInfo && action.healthPlanInfo.NetworkCode ?\r\n action.healthPlanInfo.NetworkCode : null;\r\n const providerKey = action.healthPlanInfo && action.healthPlanInfo.ProviderKey ?\r\n action.healthPlanInfo.ProviderKey : null;\r\n const hasSWHP = loginProvider === msgs.LOGIN_PROVIDER_SWHP || loginProvider === msgs.LOGIN_PROVIDER_HR_SWHP;\r\n const hasAAL = loginProvider === msgs.LOGIN_PROVIDER_AAL;\r\n const hasFirstCare = loginProvider === msgs.LOGIN_PROVIDER_FIRSTCARE;\r\n const hpId = hasSWHP ? providerKey : null;\r\n const aaId = hasAAL ? providerKey : null;\r\n const fcId = hasFirstCare ? providerKey : null;\r\n return {\r\n ...state,\r\n currentHealthPlanInfo: action.healthPlanInfo,\r\n hasSWHP: hasSWHP,\r\n hasAAL: hasAAL,\r\n hpId: hpId,\r\n aaId: aaId,\r\n fcId: fcId,\r\n hasFirstCare: hasFirstCare,\r\n insuranceName: insuranceName,\r\n networkCode: networkCode,\r\n healthPlans: action.healthPlans,\r\n hasADental: action.hasADental,\r\n //maintenanceEvents: action.maintenanceEvents,\r\n };\r\n\r\n case types.SET_HEALTHPLAN_MAINTENANCE_EVENTS:\r\n return {\r\n ...state,\r\n maintenanceEvents: action.maintenanceEvents,\r\n };\r\n\r\n // we add this here because some values where pulling from Session.ServerData\r\n // which is only loaded once at startup. We want the banner bar at the top to show\r\n // and hide as values are changed on the server, so we overwrite the corresponding serverdata\r\n case types.GOT_APP_UPDATE:\r\n if (action.success) {\r\n //debugger;\r\n return {\r\n ...state, serverData: {\r\n ...state.serverData,\r\n \"rxDown\": action.data.rxDown,\r\n \"aalDown\": action.data.aalDown,\r\n \"swhpDown\": action.data.swhpDown,\r\n \"epicEHRDown\": action.data.epicEHRDown,\r\n \"siteOutage\": action.data.siteoutage,\r\n \"loginNotice\": action.data.loginNotice,\r\n \"headerMessage\": action.data.headerMessage,\r\n }\r\n };\r\n\r\n }\r\n else {\r\n return { ...state };\r\n }\r\n case types.SHOW_CARE_COACH_MODAL:\r\n return {\r\n ...state, showCareCoachModal: action.showCareCoachModal\r\n };\r\n case types.MASTER_SPINNER_ON:\r\n return {\r\n ...state,\r\n masterSpinnerOn: true\r\n };\r\n case types.MASTER_SPINNER_OFF:\r\n return {\r\n ...state,\r\n masterSpinnerOn: false\r\n };\r\n case types.SHOW_THRIVE_TOOLTIP:\r\n return {\r\n ...state, showThriveTooltip: action.showThriveTooltip\r\n };\r\n case types.HAS_SEEN_SCHEDULE_CARE_TOOLTIP:\r\n return {\r\n ...state, hasSeenScheduleCareTooltip: action.hasSeenScheduleCareTooltip\r\n }\r\n case types.GET_PROXY_SUGGESTION_LIST:\r\n let hasProxySuggestions = false;\r\n let proxySuggestionUsers = [];\r\n if (action.payload && action.payload.success) {\r\n proxySuggestionUsers = action.payload?.data?.proxySuggestions;\r\n hasProxySuggestions = proxySuggestionUsers?.length > 0 || action.payload?.data?.hasProxySuggestions ? true : false;\r\n\r\n if (hasProxySuggestions) {\r\n //Add new properties to each user in this list, i.e. id, isChecked, isCompleted, hasError, errorMessage\r\n proxySuggestionUsers = proxySuggestionUsers.map((user, index) => {\r\n return { ...user, id: uuidv4(), isChecked: false, isCompleted: false, hasError: false, errorMessage: null };\r\n })\r\n }\r\n\r\n }\r\n return {\r\n ...state, newProxySuggestionList: proxySuggestionUsers, hasProxySuggestions: hasProxySuggestions\r\n }\r\n\r\n case types.SET_PROXY_SELECTED_USERS:\r\n let hasSelectedProxySuggestionUsers = action.selectedProxySuggestionUsers?.length > 0;\r\n return {\r\n ...state, selectedProxySuggestionUsers: action.selectedProxySuggestionUsers, hasSelectedProxySuggestionUsers\r\n }\r\n case types.CLEAR_PROXY_SELECTED_USERS:\r\n return {\r\n ...state, selectedProxySuggestionUsers: [], hasSelectedProxySuggestionUsers: false, newProxySuggestionList: [], hasProxySuggestions: false\r\n }\r\n\r\n default:\r\n return { ...state };\r\n }\r\n}\r\n\r\n\r\n\r\n //rxDown: action.data.rxDown,\r\n // aalDown: action.data.aalDown,\r\n // swhpDown: action.data.swhpDown,\r\n // epicEHRDown: action.data.epicEHRDown,\r\n // appVersion: action.data.appVersion,\r\n // minAppVersion: action.data.minappversion,\r\n // siteOutage: action.data.siteoutage,\r\n\r\n\r\n\r\n //bool rxDown = Model.UseSystemValues ? Model.SystemValues.RXIsDown.Value : SharedTools.Tools.GetConfigBool(\"RxDown\", false, false);\r\n //bool aalDown = Model.UseSystemValues ? Model.SystemValues.AALIsDown.Value : SharedTools.Tools.GetConfigBool(\"AALDown\", false, false);\r\n //bool swhpDown = Model.UseSystemValues ? Model.SystemValues.SWHPIsDown.Value : SharedTools.Tools.GetConfigBool(\"SWHPDown\", false, false);\r\n //bool epicEHRDown ","import * as types from \"../constants/actionTypes\";\r\n\r\nimport { REHYDRATE } from 'redux-persist';\r\nimport Cookies from \"cookies-js\";\r\nimport { getDomain } from \"../helpers/Tools\";\r\n//import { BrowserRouter } from \"react-router-dom\";\r\n\r\nexport const ssoInitialState = function () {\r\n return {\r\n userDetails: {},\r\n userName: \"\",\r\n userEmail: \"\",\r\n isLoggedIn: false,\r\n verifiedLogin: false,\r\n isLoggingIn: false,\r\n hpConsentList: []\r\n };\r\n};\r\n\r\n\r\nexport default function ssoReducer(state = ssoInitialState(), action) {\r\n var myDomain = getDomain();\r\n switch (action.type) {\r\n case types.HP_CONSENT_LIST:\r\n //debugger;\r\n return {\r\n ...state,\r\n hpConsentList: action.consentList\r\n };\r\n case types.REVOKE_HP_FHIR_GRANT_SUCCESS:\r\n let hpConsentList = state.hpConsentList;\r\n let newHpConsentList = hpConsentList.filter(listItem => {\r\n return listItem.key !== action.consent.key\r\n })\r\n return {\r\n ...state,\r\n hpConsentList: newHpConsentList\r\n };\r\n case types.USER_AUTHENTICATE_ISLOGGEDIN:\r\n return {\r\n ...state,\r\n isFetching: false\r\n }\r\n case types.USER_AUTHENTICATE:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n isLogginedIn: true,\r\n };\r\n\r\n\r\n case types.UPDATE_TOKEN_AND_REFRESH_TOKEN:\r\n //debugger;\r\n return {\r\n ...state, \r\n userDetails: { ...state.userDetails,\r\n expires_in: action.tokenExpiresIn,\r\n expiresDate: action.tokenExpires,\r\n dateLoaded: action.tokenLoaded\r\n }\r\n };\r\n case types.USER_AUTHENTICATE_SUCCESS:\r\n const userData = action.userData;\r\n const displayName = (userData.Givenname || userData.GivenName) + ' ' + userData.Surname;\r\n const epid = userData.EPID;\r\n const mychart = userData.MyChartID;\r\n //debugger;\r\n return {\r\n ...state,\r\n userDetails: userData,\r\n LogoutMessage: null,\r\n isLoggedIn: userData !== null && userData.access_token !== null,\r\n loginError: action.responseError,\r\n isFetching: action.isWaiting,\r\n primaryUser: { displayName: displayName, epid: epid, myChartId: \"\" + mychart },\r\n isLoggingIn: false,\r\n };\r\n //case types.USER_AUTHENTICATE_REFRESH:\r\n // debugger;\r\n // return { ...state, isFetching: true };\r\n case types.VERIFY_LOGIN_COMPLETED:\r\n //debugger;\r\n return { ...state, verifiedLogin: true };\r\n case types.LOGOUT:\r\n //debugger;\r\n return {\r\n ...ssoInitialState(),\r\n LogoutMessage: null,\r\n verifiedLogin: state.verifiedLogin\r\n };\r\n case types.AJAX_CALL_ERROR:\r\n return { ...state, isFetching: false, error: action.error };\r\n case types.USER_AUTHENTICATE_FAILURE:\r\n return {\r\n ...state,\r\n isLoggedIn: false,\r\n userDetails: {},\r\n LogoutMessage: null,\r\n loginError: action.responseError,\r\n errorCode: action.errorCode,\r\n userErrorMessage: action.userErrorMessage,\r\n isFetching: false,\r\n isLoggingIn: false,\r\n };\r\n case types.SET_REDIRECT_URL:\r\n return { ...state, reDirectURL: action.URL };\r\n case types.UPDATE_PATIENT_IDS:\r\n const primaryUser = state.primaryUser;\r\n primaryUser.externalId = action;\r\n return { ...state, primaryUser: primaryUser };\r\n case REHYDRATE:\r\n //console.log(\"SSO Rehydrating... state = \" + JSON.stringify( state) + \" action = \" + JSON.stringify( action));\r\n //let oRet = action.payload && action.payload.sso ? action.payload.sso : state;\r\n //console.log(\"SSO Rehydrating... returning = \" + JSON.stringify( oRet)) ;\r\n return { ...state };\r\n //return oRet ;\r\n default:\r\n return { ...state };\r\n }\r\n}\r\n","import * as types from \"../constants/actionTypes\";\r\n\r\nexport const thriveInitialState = {\r\n card: null,\r\n report: null,\r\n cardPending: false,\r\n reportPending: false,\r\n cardSuccess: false,\r\n reportSuccess: false,\r\n wellBeingReport: null,\r\n wellBeingReportPending: false,\r\n wellBeingReportSuccess: false,\r\n wellBeingReportFailure: false,\r\n error: \"\"\r\n};\r\n\r\nexport default function thriveReducer(state = thriveInitialState, action) {\r\n switch (action.type) {\r\n\r\n case types.THRIVE_GET_CARD_PENDING:\r\n return { ...state, cardPending: true };\r\n case types.THRIVE_GET_CARD_SUCCESS:\r\n return { ...state, card: action.card, cardPending: false, cardSuccess: true, error: null };\r\n case types.THRIVE_GET_CARD_FAILURE:\r\n return { ...state, card: null, cardPending: false, cardSuccess: false, error: action.error };\r\n\r\n case types.THRIVE_GET_REPORT_PENDING:\r\n return { ...state, report: null, reportPending: true };\r\n case types.THRIVE_GET_REPORT_SUCCESS:\r\n return { ...state, report: action.report, reportPending: false, reportSuccess: true, reportError: null };\r\n case types.THRIVE_GET_REPORT_FAILURE:\r\n return { ...state, report: null, reportPending: false, reportSuccess: false, reportError: action.error };\r\n case types.GET_WELLBEING_REPORT_PENDING:\r\n return { ...state, wellBeingReportPending: true };\r\n case types.GET_WELLBEING_REPORT_SUCCESS:\r\n return { ...state, wellBeingReport: action.report, wellBeingReportSuccess: true, wellBeingReportFailure: false, wellBeingReportPending: false }\r\n case types.GET_WELLBEING_REPORT_FAILURE:\r\n return { ...state, wellBeingReport: null, wellBeingReportSuccess: false, wellBeingReportFailure: true, wellBeingReportPending: false }\r\n default:\r\n return { ...state };\r\n }\r\n}\r\n\r\n","import * as types from \"../constants/actionTypes\";\r\nimport moment from 'moment-timezone';\r\nimport * as Tools from '../helpers/Tools';\r\nexport const videoVisitSchedulingInitialState = {\r\n\r\n};\r\n\r\n\r\nexport default function videoVisitSchedulingReducer(state = videoVisitSchedulingInitialState, action) {\r\n switch (action.type) {\r\n case types.GET_VIDEO_VISIT_CONDITIONS_PENDING:\r\n return {\r\n ...state,\r\n videoVisitConditions: {\r\n isWaiting: true\r\n }\r\n };\r\n case types.GET_VIDEO_VISIT_CONDITIONS_SUCCESS:\r\n return {\r\n ...state,\r\n videoVisitConditions: {\r\n isWaiting: false, conditions: action.conditions, isSuccess: true, isError: null\r\n }\r\n };\r\n case types.GET_VIDEO_VISIT_CONDITIONS_FAILURE:\r\n return {\r\n ...state,\r\n videoVisitConditions: {\r\n isWaiting: false, conditions: null, isSuccess: false, isError: true\r\n }\r\n };\r\n case types.GET_VIDEO_VISIT_TIME_SLOTS_PENDING:\r\n return {\r\n ...state,\r\n videoVisitTimeSlots: {\r\n isWaiting: true, isSuccess: false\r\n }\r\n };\r\n case types.GET_VIDEO_VISIT_TIME_SLOTS_SUCCESS:\r\n return {\r\n ...state,\r\n videoVisitTimeSlots: {\r\n isWaiting: false, timeslots: getTimeSlots(action.timeslots), isSuccess: true, isError: null\r\n }\r\n };\r\n case types.GET_VIDEO_VISIT_TIME_SLOTS_FAILURE:\r\n return {\r\n ...state,\r\n videoVisitTimeSlots: {\r\n isWaiting: false, timeslots: null, isSuccess: false, isError: true\r\n }\r\n };\r\n case types.SCHEDULE_VIDEO_VISIT_REQUEST_PENDING:\r\n return {\r\n ...state,\r\n videoVisit: {\r\n isWaiting: true\r\n }\r\n };\r\n case types.SCHEDULE_VIDEO_VISIT_REQUEST_SUCCESS:\r\n return {\r\n ...state,\r\n videoVisit: {\r\n isWaiting: false,\r\n isSuccess: true,\r\n isError: null,\r\n response: action.response\r\n }\r\n };\r\n case types.SCHEDULE_VIDEO_VISIT_REQUEST_FAILURE:\r\n return {\r\n ...state,\r\n videoVisit: {\r\n isWaiting: false,\r\n isSuccess: false,\r\n isError: true,\r\n response: null\r\n }\r\n };\r\n case types.AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_PENDING:\r\n return {\r\n ...state,\r\n videoSurvey: { isWaiting: true, isSuccess: false, isFailure: false }\r\n };\r\n case types.AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_SUCCESS:\r\n return {\r\n ...state,\r\n videoSurvey: { isWaiting: false, isSuccess: true, isFailure: false }\r\n };\r\n case types.AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_FAILURE:\r\n return {\r\n ...state,\r\n videoSurvey: { isWaiting: false, isSuccess: false, isFailure: true }\r\n };\r\n case types.GET_VIDEO_VISIT_TERMS_PENDING:\r\n return {\r\n ...state,\r\n videoVisitTerms: {\r\n isWaiting: true\r\n }\r\n };\r\n case types.GET_VIDEO_VISIT_TERMS_SUCCESS:\r\n return {\r\n ...state,\r\n videoVisitTerms: {\r\n isWaiting: false, terms: action.terms, isSuccess: true, isError: null\r\n }\r\n }\r\n case types.GET_VIDEO_VISIT_TERMS_FAILURE:\r\n return {\r\n ...state,\r\n videoVisitTerms: {\r\n isWaiting: false, terms: null, isSuccess: false, isError: action.error\r\n }\r\n };\r\n case types.ACCEPT_VIDEO_VISIT_CONDITIONS_PENDING:\r\n return {\r\n ...state,\r\n acceptVideoVisitTerms: {\r\n isWaiting: true\r\n }\r\n }\r\n case types.ACCEPT_VIDEO_VISIT_CONDITIONS_SUCCESS:\r\n return {\r\n ...state,\r\n acceptVideoVisitTerms: {\r\n isWaiting: false, isSuccess: true, isError: null\r\n }\r\n }\r\n case types.ACCEPT_VIDEO_VISIT_CONDITIONS_FAILURE:\r\n return {\r\n ...state,\r\n acceptVideoVisitTerms: {\r\n isWaiting: false, isSuccess: false, isError: action.error\r\n }\r\n }\r\n\r\n default:\r\n return { ...state };\r\n\r\n }\r\n}\r\n\r\nfunction getTimeSlots(timeslots) {\r\n let timeChunks = [];\r\n const today = Tools.getCurDateInCentralTz(); //moment().startOf('date').tz('America/Chicago');\r\n const todayDate = today.format('YYYY-MM-DDT00:00:00');\r\n const tomorrowDate = today.add(1, 'days').format('YYYY-MM-DDT00:00:00');\r\n const availableTimes = [\r\n {\r\n dateInUtc: `${todayDate}Z`,\r\n dateInDallas: `${todayDate}`,\r\n dateLabel: \"TODAY\",\r\n morning: [],\r\n afternoon: [],\r\n evening: []\r\n },\r\n {\r\n dateInUtc: `${tomorrowDate}Z`,\r\n dateInDallas: `${tomorrowDate}`,\r\n dateLabel: \"TOMORROW\",\r\n morning: [],\r\n afternoon: [],\r\n evening: []\r\n }\r\n ];\r\n //// Get all available timechunks\r\n timeslots && timeslots.availableTimes && timeslots.availableTimes.length > 0\r\n && timeslots.availableTimes.forEach(item => {\r\n timeChunks = timeChunks.concat(item.timeChunks);\r\n });\r\n // Sort all timechunks according to dateTimeInDallas\r\n timeChunks = timeChunks.sort((initialChunk, currChunk) => {\r\n const aTime = moment(initialChunk.dateTimeInDallas);\r\n if (aTime.isBefore(currChunk.dateTimeInDallas)) {\r\n return -1;\r\n } else {\r\n return aTime.isAfter(currChunk.dateTimeInDallas) ? 1 : 0;\r\n }\r\n });\r\n timeChunks.forEach(timeChunk => {\r\n const timeDate = moment(timeChunk.dateTimeInDallas);\r\n const dayIndex = timeDate.isSame(todayDate, 'day') ? 0 : timeDate.isSame(tomorrowDate, 'day') ? 1 : null;\r\n if (dayIndex !== null) {\r\n switch (timeChunk.timeChunkLabel) {\r\n case \"Morning\":\r\n availableTimes[dayIndex].morning.push(timeChunk);\r\n break;\r\n case \"Afternoon\":\r\n availableTimes[dayIndex].afternoon.push(timeChunk);\r\n break;\r\n case \"Evening\":\r\n availableTimes[dayIndex].evening.push(timeChunk);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n });\r\n return availableTimes;\r\n}","import { put, call, takeLatest, all, select } from \"redux-saga/effects\";\r\nimport {\r\n search, getPatientPhoto, getRoomStatuses, getConsumerJWT, getTwilioConsumerJWT,\r\n getEpicFluRecords, getCompleteFluStatus, getPeopleSoftFluStatus, copyFluStatusToPS, getVideoVisitTermsAndConditionsForShareLink, getVideoVisitTCStatusForShareLink, acceptVideoVisitShareLinkTC, deleteConsent,\r\n acceptDigitalPrivacyPolicy\r\n} from \"../api/portalApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\n\r\nexport default function* profileToolsSaga() {\r\n yield takeLatest(types.SITE_SEARCH_START, handleSiteSearch);\r\n yield takeLatest(types.PATIENT_PHOTO_START, handlePatientPhoto);\r\n yield takeLatest(types.GET_CONSUMER_JWT, handleGetConsumerJWT);\r\n yield takeLatest(types.GET_PROVIDER_JWT, handleGetProviderJWT);\r\n yield takeLatest(types.REVOKE_HP_FHIR_GRANT, handleRevokeHPFHIRGrant);\r\n\r\n if (window.serverData.data.enableFluVaccine) {\r\n yield takeLatest(types.GET_COMPLETE_FLU_STATUS, handleCompleteFluStatus);\r\n // yield takeLatest(types.USER_AUTHENTICATE_SUCCESS, handleGetRoomStatuses);\r\n }\r\n else {\r\n yield put({ type: types.DISABLE_FLU });\r\n }\r\n\r\n yield takeLatest([types.GET_TERMS_FOR_VIDEO_VISIT_SHARELINK], getTermsForVideoVisitShareLink);\r\n\r\n yield takeLatest([types.GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK], getStatusOfTermsForVideoVisitShareLink);\r\n\r\n yield takeLatest([types.ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK], acceptTermsForVideoVisitShareLink);\r\n\r\n yield takeLatest([types.ACCEPT_BSW_DIGITAL_PRIVACY_POLICY], acceptDigitalPrivacyPolicyText);\r\n}\r\n\r\nexport function* handleSiteSearch(payload) {\r\n const start = new Date();\r\n\r\n try {\r\n //debugger;\r\n const resultsObject = yield call(search, payload.searchPhrase, payload.token);\r\n if (resultsObject.fetchSuccessful) {\r\n yield put({ type: types.SITE_SEARCH_SUCCESS, searchResults: resultsObject.results });\r\n logAPI(\"MBHWeb.Saga.Portal.SiteSearch\", start, null);\r\n }\r\n else {\r\n yield put({ type: types.SITE_SEARCH_FAILURE, searchError: resultsObject.actualError || resultsObject.displayError });\r\n logAPI(\"MBHWeb.Saga.Portal.SiteSearch.Failure\", start, null);\r\n\r\n }\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Portal.SiteSearch.Failure\", start, null);\r\n yield all([\r\n put({ type: types.SITE_SEARCH_SUCCESS, searchError: error }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n\r\n}\r\n\r\nexport function* handlePatientPhoto() {\r\n const start = new Date();\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n\r\n if (!domainData || !domainData.t) {\r\n yield put({ type: types.PATIENT_PHOTO_FAILURE, error: 'Sorry, it appears your not logged in.' });\r\n logAPI(\"MBHWeb.Saga.Portal.PatientPhoto.Failure\", start, null);\r\n return;\r\n }\r\n\r\n if (!domainData.cu || !domainData.cu.ei) {\r\n yield put({ type: types.PATIENT_PHOTO_FAILURE, error: 'Sorry, it appears the patient has no external id.' });\r\n logAPI(\"MBHWeb.Saga.Portal.PatientPhoto.Failure\", start, null);\r\n return;\r\n }\r\n\r\n const response = yield call(getPatientPhoto, domainData.t, domainData.cu.ei, 'External');\r\n if (response.isPhotoPresent) {\r\n yield put({ type: types.PATIENT_PHOTO_SUCCESS, response: response.photo });\r\n logAPI(\"MBHWeb.Saga.Portal.PatientPhoto\", start, null);\r\n }\r\n else {\r\n yield put({ type: types.PATIENT_PHOTO_FAILURE, error: 'No photo found.' });\r\n logAPI(\"MBHWeb.Saga.Portal.PatientPhoto.Failure\", start, null);\r\n }\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Portal.PatientPhoto.Failure\", start, null);\r\n yield all([\r\n put({ type: types.PATIENT_PHOTO_FAILURE, error }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n}\r\n\r\n/*export function* handleEpicFluRecord() {\r\n const start = new Date();\r\n\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n const primaryUser = domain.pu ? domain.pu.mi.toLowerCase() : \"\";\r\n const currentUser = domain.cu ? domain.cu.mi.toLowerCase() : \"\";\r\n const isPrimary = (primaryUser !== \"\" && currentUser === \"\") || primaryUser === currentUser;\r\n\r\n if (isPrimary) {\r\n yield put({ type: types.GET_EPIC_FLU_RECORD_PENDING });\r\n\r\n const response = yield call(getEpicFluRecords, domain.t);\r\n if (response.fetchSuccessful) {\r\n yield put({ type: types.GET_EPIC_FLU_RECORD_SUCCESS, results: response.results });\r\n logAPI(\"MBHWeb.Saga.Portal.EpicFlu\", start, null);\r\n }\r\n else {\r\n yield put({ type: types.GET_EPIC_FLU_RECORD_FAILURE, searchError: error });\r\n logAPI(\"MBHWeb.Saga.Portal.EpicFlu.Failure\", start, null);\r\n }\r\n }\r\n else {\r\n console.log(\"can't get flu status for non-primary user\");\r\n }\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Portal.EpicFlu.Failure\", start, null);\r\n yield all([\r\n put({ type: types.GET_EPIC_FLU_RECORD_FAILURE, searchError: error }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n}\r\n\r\nexport function* handlePeopleSoftFluRecord() {\r\n const start = new Date();\r\n\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n const primaryUser = domain.pu ? domain.pu.mi.toLowerCase() : \"\";\r\n const currentUser = domain.cu ? domain.cu.mi.toLowerCase() : \"\";\r\n const isPrimary = (primaryUser !== \"\" && currentUser === \"\") || primaryUser === currentUser;\r\n\r\n if (isPrimary) {\r\n yield put({ type: types.GET_PEOPLESOFT_FLU_RECORD_PENDING });\r\n\r\n const response = yield call(getPeoplePlaceFluRecords, domain.t);\r\n if (response.fetchSuccessful) {\r\n yield put({ type: types.GET_PEOPLESOFT_FLU_RECORD_SUCCESS, results: response.results });\r\n logAPI(\"MBHWeb.Saga.Portal.PeopleSoftFlu\", start, null);\r\n }\r\n else {\r\n yield put({ type: types.GET_PEOPLESOFT_FLU_RECORD_FAILURE });\r\n logAPI(\"MBHWeb.Saga.Portal.PeopleSoftFlu.Failure\", start, null);\r\n }\r\n }\r\n else {\r\n console.log(\"Can't get flu status for non-primary user.\");\r\n }\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Portal.PeopleSoftFlu.Failure\", start, null);\r\n yield all([\r\n put({ type: types.GET_PEOPLESOFT_FLU_RECORD_FAILURE, searchError: error }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n}\r\n*/\r\nexport function* handleCompleteFluStatus() {\r\n const start = new Date();\r\n\r\n try {\r\n yield put({ type: types.GET_COMPLETE_FLU_STATUS_PENDING });\r\n const domain = yield select((state) => state.domain);\r\n const isPrimary = !domain.ip\r\n const hasEmployee = domain && domain.ie ? true : false;\r\n if (isPrimary && hasEmployee) {\r\n let response = null;\r\n response = yield call(getCompleteFluStatus, domain.t);\r\n\r\n if (response.fetchSuccessful) {\r\n yield put({ type: types.GET_COMPLETE_FLU_STATUS_SUCCESS, results: response });\r\n logAPI(\"MBHWeb.Saga.Portal.CompleteFluStatus\", start, null);\r\n }\r\n else {\r\n yield put({ type: types.GET_COMPLETE_FLU_STATUS_FAILURE });\r\n logAPI(\"MBHWeb.Saga.Portal.CompleteFluStatus.Failure\", start, null);\r\n }\r\n }\r\n else {\r\n yield put({ type: types.GET_COMPLETE_FLU_STATUS_FAILURE });\r\n console.log(\"Can't get flu status for non-primary user.\");\r\n }\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Portal.CompleteFluStatus.Failure\", start, null);\r\n yield all([\r\n put({ type: types.GET_COMPLETE_FLU_STATUS_FAILURE, searchError: error }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n}\r\n\r\nexport function* handleGetRoomStatuses() {\r\n const start = new Date();\r\n\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n const statuses = yield call(getRoomStatuses, domain.t);\r\n yield put({ type: types.GET_ROOM_STATUSES_SUCCESS, statuses });\r\n logAPI(\"MBHWeb.Saga.Portal.GetRoomStatuses\", start, null);\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Portal.GetRoomStatuses.Failure\", start, null);\r\n yield put({ type: types.GET_ROOM_STATUSES_FAILURE });\r\n }\r\n}\r\n\r\nexport function* handleGetConsumerJWT(payload) {\r\n const start = new Date();\r\n\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n yield put({ type: types.GET_CONSUMER_JWT_PENDING });\r\n const consumerToken = yield call(getTwilioConsumerJWT, domain.t, payload.participantExternalId, payload.participantName, payload.csnId, payload.epicExternalProviderId);\r\n yield put({ type: types.GET_CONSUMER_JWT_SUCCESS, consumerToken });\r\n logAPI(\"MBHWeb.Saga.Portal.GetConsumerJWT\", start, null);\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Portal.GetConsumerJWT.Failure\", start, null);\r\n }\r\n}\r\n\r\nexport function* handleGetProviderJWT(payload) {\r\n const start = new Date();\r\n\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n yield put({ type: types.GET_CONSUMER_JWT_PENDING });\r\n const providerToken = yield call(getConsumerJWT, domain.t, payload.participantExternalId, payload.participantName, payload.roomId);\r\n yield put({ type: types.GET_CONSUMER_JWT_SUCCESS, providerToken });\r\n logAPI(\"MBHWeb.Saga.Portal.GetConsumerJWT\", start, null);\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Portal.GetConsumerJWT.Failure\", start, null);\r\n }\r\n}\r\n\r\nexport function* getTermsForVideoVisitShareLink(payload) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n yield put({ type: types.GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_PENDING });\r\n const response = yield call(getVideoVisitTermsAndConditionsForShareLink, domain.t, payload.featureId);\r\n if (response && response.isSuccessful) {\r\n logAPI(\"MBHWeb.Saga.Portal.VideoVisitShareLink.GetTerms.Success\", start, null, { shareLinkCode: payload.shareLinkCode, response });\r\n yield put({ type: types.GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_SUCCESS, terms: response });\r\n } else {\r\n logAPI(\"MBHWeb.Saga.Portal.VideoVisitShareLink.GetTerms.Failure\", start, null, { shareLinkCode: payload.shareLinkCode, response });\r\n yield put({ type: types.GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_FAILURE });\r\n }\r\n }\r\n catch (err) {\r\n yield put({ type: types.GET_TERMS_FOR_VIDEO_VISIT_SHARELINK_FAILURE });\r\n console.error(err);\r\n logAPI(\"MBHWeb.Saga.Portal.VideoVisitShareLink.GetTerms.Failure\", start, null, { shareLinkCode: payload.shareLinkCode, err });\r\n }\r\n}\r\n\r\nexport function* getStatusOfTermsForVideoVisitShareLink(payload) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n yield put({ type: types.GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK_PENDING });\r\n const response = yield call(getVideoVisitTCStatusForShareLink, domain.t, payload.shareLinkCode);\r\n logAPI(\"MBHWeb.Saga.Portal.VideoVisitShareLink.GetTermsStatus.Success\", start, null, { shareLinkCode: payload.shareLinkCode, response });\r\n yield put({ type: types.GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK_SUCCESS, response: response });\r\n if (payload.callback) {\r\n payload.callback(response);\r\n }\r\n }\r\n catch (err) {\r\n yield put({ type: types.GET_TERMS_STATUS_FOR_VIDEO_VISIT_SHARELINK_FAILURE });\r\n if (payload.callback) {\r\n payload.callback(null);\r\n }\r\n console.error(err);\r\n logAPI(\"MBHWeb.Saga.Portal.VideoVisitShareLink.GetTermsStatus.Failure\", start, null, { shareLinkCode: payload.shareLinkCode, err });\r\n }\r\n}\r\n\r\nexport function* acceptTermsForVideoVisitShareLink(payload) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n yield put({ type: types.ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK_PENDING });\r\n const response = yield call(acceptVideoVisitShareLinkTC, domain.t, payload.termsAndConditions, payload.shareLinkCode);\r\n if (response && response.httpResponse && response.httpResponse.isSuccessStatusCode) {\r\n yield put({ type: types.ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK_SUCCESS, response: response });\r\n logAPI(\"MBHWeb.Saga.Portal.VideoVisitShareLink.AcceptTerms.Success\", start, null, { shareLinkCode: payload.shareLinkCode, response });\r\n } else {\r\n throw response;\r\n }\r\n if (payload.callback) {\r\n payload.callback(response);\r\n }\r\n }\r\n catch (err) {\r\n yield put({ type: types.ACCEPT_TERMS_FOR_VIDEO_VISIT_SHARELINK_FAILURE });\r\n if (payload.callback) {\r\n payload.callback(null);\r\n }\r\n logAPI(\"MBHWeb.Saga.Portal.VideoVisitShareLink.AcceptTerms.Failure\", start, null, { shareLinkCode: payload.shareLinkCode, err });\r\n }\r\n}\r\n\r\nexport function* handleRevokeHPFHIRGrant(payload) {\r\n const start = new Date();\r\n yield put({ type: types.REVOKE_HP_FHIR_GRANT_PENDING });\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n const consentBody = {\r\n ClientName: payload.data.consent.clientName || '',\r\n ClientDesc: payload.data.consent.clientDesc || '',\r\n ClientId: payload.data.consent.clientId || '',\r\n Data: payload.data.consent.data || '',\r\n Description: payload.data.consent.description || '',\r\n Key: payload.data.consent.key || '',\r\n SessionId: payload.data.consent.sessionId || '',\r\n SubjectId: payload.data.consent.subjectId || '',\r\n Type: payload.data.consent.type || ''\r\n }\r\n\r\n const response = yield call(deleteConsent, domain.t, consentBody);\r\n if (response && response.isSuccessful) {\r\n logAPI(\"MBHWeb.Saga.Portal.RevokeConsent.Success\", start, null, { consentKey: payload.data.consent.key, response });\r\n yield put({ type: types.REVOKE_HP_FHIR_GRANT_SUCCESS, consent: payload.data.consent });\r\n if (payload.callback) {\r\n payload.callback(response);\r\n }\r\n } else {\r\n yield put({ type: types.REVOKE_HP_FHIR_GRANT_FAILURE });\r\n if (payload.callback) {\r\n payload.callback(null);\r\n }\r\n console.error(err);\r\n logAPI(\"MBHWeb.Saga.Portal.RevokeConsent.Failure\", start, null, { consentKey: payload.consent, err: response.Error });\r\n }\r\n }\r\n catch (err) {\r\n yield put({ type: types.REVOKE_HP_FHIR_GRANT_FAILURE });\r\n if (payload.callback) {\r\n payload.callback(null);\r\n }\r\n console.error(err);\r\n logAPI(\"MBHWeb.Saga.Portal.RevokeConsent.Failure\", start, null, { consentKey: payload.consent, err });\r\n }\r\n}\r\n\r\nexport function* acceptDigitalPrivacyPolicyText(payload) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n yield put({ type: types.ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_PENDING });\r\n const response = yield call(acceptDigitalPrivacyPolicy, domain.t, domain.un, payload.versionId);\r\n if (response && response.isSuccessful) {\r\n yield put({ type: types.ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_SUCCESS, response: response });\r\n logAPI(\"MBHWeb.Saga.Portal.BSWH.Privacy.Accept.Success\", start, null, { response });\r\n } else {\r\n yield put({ type: types.ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_FAILURE });\r\n logAPI(\"MBHWeb.Saga.Portal.BSWH.Privacy.Accept.Failure\", start, null, { response });\r\n }\r\n }\r\n catch (err) {\r\n yield put({ type: types.ACCEPT_BSW_DIGITAL_PRIVACY_POLICY_FAILURE });\r\n logAPI(\"MBHWeb.Saga.Portal.BSWH.Privacy.Accept.Failure\", start, null, { err });\r\n }\r\n}","import { put, call, takeLatest, takeEvery, fork, all } from \"redux-saga/effects\";\r\nimport { getConsent, postConsent, getConsentList, getConsentType, getConsentTypeList } from \"../api/profileToolsApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { log, logAPI } from \"../api/andyliticsApi\";\r\nimport * as Tools from \"../helpers/Tools\";\r\n\r\nexport default function* profileToolsSaga() {\r\n yield takeLatest(types.CONSENT_GET_FLU, handleGetConsent);\r\n yield takeLatest(types.CONSENT_SET_FLU, handlePostConsent);\r\n yield takeLatest(types.CONSENT_GET_LIST, handleGetConsentList);\r\n yield takeLatest(types.CONSENT_TYPE_GET, handleGetConsentType);\r\n yield takeLatest(types.CONSENT_TYPE_LIST_GET, handleGetConsentTypeList);\r\n}\r\n\r\nexport function* handleGetConsent(payload) {\r\n const start = new Date();\r\n\r\n try {\r\n yield put({ type: types.CONSENT_GET_PENDING });\r\n\r\n const consent = yield call(getConsent, payload.key, payload.token);\r\n yield put({ type: types.CONSENT_GET_SUCCESS, consent });\r\n logAPI(\"MBHWeb.Saga.Profile.GetConsent\", start, null);\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Profile.GetConsent.Failure\", start, null);\r\n yield all([\r\n put({ type: types.CONSENT_GET_FAILURE }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n}\r\n\r\n\r\nexport function* handlePostConsent(payload) {\r\n const start = new Date();\r\n\r\n try {\r\n yield put({ type: types.CONSENT_SET_PENDING });\r\n yield put({ type: types.GET_COMPLETE_FLU_STATUS_PENDING });\r\n if (payload.key === window.serverData.data.currentFluKey) {\r\n yield put({ type: types.CONSENT_FLU_PENDING });\r\n }\r\n\r\n const consent = yield call(postConsent, payload.key, payload.approved, payload.token);\r\n if (consent.fetchSuccessful === false) {\r\n yield all([\r\n put({ type: types.CONSENT_SET_FAILURE }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.Profile.PostConsent.Failure\", start, null);\r\n }\r\n else {\r\n yield all([\r\n put({ type: types.REFRESH_TOKEN }),\r\n put({ type: types.CONSENT_SET_SUCCESS, consent }),\r\n put({ type: types.GET_COMPLETE_FLU_STATUS_SUCCESS, results: consent })\r\n ]);\r\n if (payload.key === window.serverData.data.currentFluKey) {\r\n yield put({ type: types.CONSENT_FLU_SUCCESS, consent });\r\n }\r\n logAPI(\"MBHWeb.Saga.Profile.PostConsent\", start, null);\r\n }\r\n }\r\n catch (error) {\r\n if (payload.key === window.serverData.data.currentFluKey) {\r\n yield put({ type: types.CONSENT_FLU_FAILURE });\r\n }\r\n yield all([\r\n put({ type: types.CONSENT_SET_FAILURE }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.Profile.PostConsent.Failure\", start, null);\r\n }\r\n}\r\n\r\nexport function* handleGetConsentList(payload) {\r\n const start = new Date();\r\n\r\n try {\r\n yield put({ type: types.CONSENT_GET_PENDING });\r\n const consent = yield call(getConsentList, payload.token);\r\n\r\n yield all([\r\n put({ type: types.CONSENT_GET_LIST_SUCCESS, consent })\r\n ]);\r\n\r\n logAPI(\"MBHWeb.Saga.Profile.GetConsentList\", start, null);\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Profile.GetConsentList.Failure\", start, null);\r\n yield all([\r\n put({ type: types.CONSENT_GET_LIST_FAILURE }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n}\r\n\r\nexport function* handleGetConsentType(payload) {\r\n const start = new Date();\r\n\r\n try {\r\n yield put({ type: types.CONSENT_TYPE_PENDING });\r\n const consent = yield call(getConsentType, payload.token, payload.key);\r\n\r\n yield all([\r\n put({ type: types.CONSENT_TYPE_SUCCESS, consent })\r\n ]);\r\n\r\n\r\n logAPI(\"MBHWeb.Saga.Profile.GetConsentType\", start, null);\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Profile.GetConsentType.Failure\", start, null);\r\n yield all([\r\n put({ type: types.CONSENT_TYPE_FAILURE }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n}\r\n\r\nexport function* handleGetConsentTypeList(payload) {\r\n const start = new Date();\r\n\r\n try {\r\n yield put({ type: types.CONSENT_TYPE_LIST_PENDING });\r\n const consent = yield call(getConsentTypeList, payload.token);\r\n\r\n yield all([\r\n put({ type: types.CONSENT_TYPE_LIST_SUCCESS, consent })\r\n ]);\r\n\r\n logAPI(\"MBHWeb.Saga.Profile.GetConsentTypeList\", start, null);\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Profile.GetConsentTypeList.Failure\", start, null);\r\n yield all([\r\n put({ type: types.CONSENT_TYPE_LIST_FAILURE }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n}","import * as careGapsAPI from \"../api/careGapsApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { call, put, select, takeLatest, all } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\n\r\nexport default function* careGapsSaga() {\r\n yield takeLatest(types.GET_PATIENT_SCHEDULING_PERMISSIONS_START, getPatientSchedulingPermissions);\r\n}\r\n\r\nexport function* getPatientSchedulingPermissions(params) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n \r\n if (stateData && params) {\r\n const { token, body, successCb, failCb } = params;\r\n try {\r\n const response = yield call(careGapsAPI.getPatientSchedulingPermissions, token, body);\r\n\r\n logAPI(\"MBHWeb.Saga.CareGaps.GetPatientSchedulingPermissions.Get\", start, null);\r\n yield all([put({ type: types.GET_PATIENT_SCHEDULING_PERMISSIONS_SUCCESS, schedulingPermissions: response })]);\r\n if (successCb) {\r\n successCb();\r\n }\r\n }\r\n catch (err) {\r\n yield put({ type: types.GET_PATIENT_SCHEDULING_PERMISSIONS_FAILURE, error: err });\r\n logAPI(\"MBHWeb.Saga.CareGaps.GetPatientSchedulingPermissions.Failure\", start, null, err);\r\n if (failCb) {\r\n failCb();\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"MBHWeb.Saga.CareGaps: REDUX_DOWN\");\r\n }\r\n}\r\n","import { takeLatest, select, call, apply, put } from 'redux-saga/effects';\r\nimport * as types from '../constants/actionTypes';\r\nimport * as account from '../api/accountApi';\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\nimport * as portalApi from \"../api/portalApi\";\r\n\r\nexport default function* commonSaga() {\r\n yield takeLatest(types.GET_USER_NOTIFICATION_PREFERENCE, handleNotificationPreference,\r\n account.getNotificationPreference, 'MBHWeb.Saga.Notifications.GetUserNotificationPreference');\r\n yield takeLatest(types.PHARMACY_NOTIFICATION_PREFERENCE_SAVE, handleNotificationPreference,\r\n account.saveNotificationPreference, 'MBHWeb.Saga.Rx.Notifications.UpdateCommunicationPreference');\r\n //yield takeLatest(types.CARE_COACH_NOTIFICATION_PREFERENCE_SAVE, handleNotificationPreference,\r\n // account.saveNotificationPreference, 'MBHWeb.Saga.CareCoach.Notifications.UpdateCommunicationPreference');\r\n yield takeLatest(types.GENERAL_NOTIFICATION_PREFERENCE_SAVE, handleNotificationPreference,\r\n account.saveNotificationPreference, 'MBHWeb.Saga.General.Notifications.UpdateCommunicationPreference');\r\n yield takeLatest(types.GET_APP_UPDATE, handleAppUpdates);\r\n}\r\n\r\nfunction* handleNotificationPreference(apiCall, andyliticsLogName, action) {\r\n const type = action.type;\r\n const domainData = yield select((state) => state.domain);\r\n\r\n try {\r\n if (!action.success && !action.error) {\r\n if (type === types.GET_USER_NOTIFICATION_PREFERENCE) { // to clear previous error state (if any)\r\n yield put({ type: types.PHARMACY_NOTIFICATION_PREFERENCE_SAVE, success: true, data: null });\r\n //yield put({ type: types.CARE_COACH_NOTIFICATION_PREFERENCE_SAVE, success: true, data: null });\r\n yield put({ type: types.GENERAL_NOTIFICATION_PREFERENCE_SAVE, success: true, data: null });\r\n }\r\n yield call(handle, apiCall, domainData.t, andyliticsLogName, action);\r\n }\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n}\r\n\r\nexport function* handle(apiCall, authToken, andyliticsLogName, action) {\r\n const type = action.type;\r\n const start = new Date();\r\n const data = action.data;\r\n\r\n try {\r\n let response = null;\r\n if (typeof data === 'object') {\r\n const args = [authToken];\r\n for (let i in data) {\r\n args.push(data[i]);\r\n }\r\n response = yield apply(null, apiCall, args);\r\n }\r\n else {\r\n response = yield call(apiCall, authToken, data);\r\n }\r\n\r\n if (andyliticsLogName) {\r\n logAPI(andyliticsLogName, start, null, response && response.ProxyRequestId ? JSON.parse(JSON.stringify({ ProxyRequestId: response.ProxyRequestId })) : \"\");\r\n }\r\n\r\n //optional Callback if needed\r\n if (action && action.callback) {\r\n action.callback(\"success\", response);\r\n }\r\n\r\n yield put({\r\n type: type,\r\n success: true,\r\n data: response\r\n });\r\n\r\n }\r\n catch (error) {\r\n console.error(error);\r\n\r\n if (andyliticsLogName) {\r\n logAPI(andyliticsLogName + '.Failure', start, null, error);\r\n }\r\n\r\n //optional Callback if needed\r\n if (action && action.callback) {\r\n action.callback(\"failure\", error ? error : null);\r\n }\r\n\r\n if (error !== null && error.status !== 401) {\r\n yield put({ type: type, failure: true, error: error });\r\n }\r\n\r\n }\r\n}\r\n\r\nfunction* handleAppUpdates() {\r\n const domainData = yield select((state) => state.domain);\r\n\r\n try {\r\n var result = yield call(handle,\r\n portalApi.getAppUpdate,\r\n domainData.t,\r\n 'MBHWeb.Saga.GetAppUpdate',\r\n { type: types.GOT_APP_UPDATE });\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n}","import { getEpicDashboardData, getLetters, getBffDashboard, dcjSelfOrderApi, dcjSelfOrderOptOut } from \"../api/epicApi\";\r\nimport { setMembershipNotificationResponse } from \"../api/membershipsApi\";\r\nimport { getVideoVisitUrl } from \"../api/portalApi\";\r\nimport { dismissDiscoveryTile, unDismissDiscoveryTiles} from \"../api/healthSourceApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { call, put, select, takeLatest } from \"redux-saga/effects\";\r\nimport { indexOf } from 'lodash';\r\nimport * as d from \"../reducers/domainReducer\";\r\nimport Cookies from \"cookies-js\";\r\nimport { getDomain } from \"../helpers/Tools\";\r\nimport { log, logAPI } from \"../api/andyliticsApi\";\r\nimport * as Tools from \"../helpers/Tools\";\r\n\r\nexport default function* dashboardSaga() {\r\n yield takeLatest([types.LOAD_DASHBOARD_START], handleDashStart);\r\n yield takeLatest([types.USER_AUTHENTICATE_SUCCESS], handleUserAuthenticateSuccess);\r\n yield takeLatest([types.LOAD_BFF_DASHBOARD_START], loadBffDashboard);\r\n yield takeLatest(types.SWITCH_USER_SAGA, handleUserSwitch);\r\n yield takeLatest([types.GET_EPIC_LETTERS], getEpicLetters);\r\n //yield takeLatest([types.DCJ_SELF_ORDER], dcjSelfOrder);\r\n //yield takeLatest([types.DCJ_SELF_ORDER_OPTOUT], handleDcjSelfOrderOptOut);\r\n yield takeLatest([types.SET_MEMBERSHIP_NOTI_RESPONSE], setMembershipNotiResponse);\r\n yield takeLatest([types.DISCOVER_TILE_DISMISS], handleDismissDiscoverTile);\r\n yield takeLatest([types.DISCOVER_TILE_UNDISMISS], handleUnDismissAllDiscoverTiles);\r\n}\r\n\r\nfunction* handleUnDismissAllDiscoverTiles(payload) {\r\n const token = payload.token;\r\n yield call(unDismissDiscoveryTiles, token);\r\n}\r\n\r\nfunction* handleDismissDiscoverTile(payload) {\r\n const tile = payload.tile;\r\n const token = payload.token;\r\n console.info(`dashboardSaga handleDismissDiscoverTile`, token, tile);\r\n yield call(dismissDiscoveryTile, token, tile);\r\n yield put({ type: types.DISCOVER_TILE_DISMISS_SUCCESS, tile: tile });\r\n\r\n}\r\n\r\nfunction* handleDashStart(payload) {\r\n const start = new Date();\r\n try {\r\n //debugger;\r\n yield handleCommonResponse(payload);\r\n yield loadBffDashboard(payload);\r\n //yield put({\r\n // type: types.GET_EPIC_LETTERS\r\n //});\r\n logAPI(\"MBHWeb.Saga.Dashboard.Get\", start, null);\r\n }\r\n catch (err) {\r\n console.error(err);\r\n logAPI(\"MBHWeb.Saga.Dashboard.Get.Failure\", start, null, err);\r\n //debugger;\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (err && (err.status === 401 || err.message === 'TypeMismatchError')) {\r\n console.log(\"VERIFY_LOGIN\");\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n }\r\n else {\r\n yield put({ type: types.AJAX_CALL_ERROR, error: err });\r\n yield put({ type: types.LOAD_DASHBOARD_ERROR, error: err });\r\n }\r\n if (payload.callback) {\r\n payload.callback(null);\r\n }\r\n }\r\n}\r\n\r\nfunction* handleUserAuthenticateSuccess(payload) {\r\n const start = new Date();\r\n try {\r\n try {\r\n // yield handleCommonResponse(payload);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n // yield loadBffDashboard();\r\n //yield put({\r\n // type: types.GET_EPIC_LETTERS\r\n //});\r\n //debugger;\r\n if (Cookies.get(\"BSWPROXY\") === null) {\r\n //debugger;\r\n Cookies.set('BSWPROXY', \"\", { path: '/', domain: sDomain });\r\n }\r\n }\r\n catch (err) {\r\n console.error(err);\r\n }\r\n}\r\n\r\nfunction* handleUserSwitch(payload) {\r\n const start = new Date();\r\n try {\r\n\r\n //debugger;\r\n const currentUser = payload.user;\r\n const memberships = yield select((state) => state.memberships);\r\n try {\r\n //debugger;\r\n if (currentUser) {\r\n const sDomain = getDomain();\r\n console.log('dashboadrdSaga: setting cookie BSWPROXY... old:', Cookies.get('BSWPROXY'), 'new:', currentUser.relationshipId);\r\n yield put({ type: types.COOKIE_BSWPROXY_START });\r\n if (currentUser.relationshipId) {\r\n Cookies.set('BSWPROXY', currentUser.relationshipId, { path: '/', domain: sDomain });\r\n }\r\n else {\r\n Cookies.set('BSWPROXY', \"\", { path: '/', domain: sDomain });\r\n }\r\n //yield put({\r\n // type: types.GET_EPIC_LETTERS, user: currentUser\r\n //});\r\n yield put({ type: types.COOKIE_BSWPROXY_SUCCESS });\r\n }\r\n }\r\n catch (E) {\r\n //debugger;\r\n console.error(e);\r\n }\r\n\r\n yield handleCommonResponse(payload);\r\n yield loadBffDashboard(payload);\r\n\r\n if (payload && payload.isSeeAllSelected) {\r\n yield put({ type: types.LOAD_DASHBOARD_SEE_ALL_VIEW });\r\n } else if (payload && payload.isSeeAllSelected === false) {\r\n yield put({ type: types.RESET_DASHBOARD_SEE_ALL_VIEW });\r\n } else {\r\n yield put({ type: types.RESET_DASHBOARD_SEE_ALL_VIEW });\r\n }\r\n\r\n if (window && window.serverData.data.enablePatientPhoto && currentUser.myChartId) {\r\n yield put({ type: types.PATIENT_PHOTO_START });\r\n }\r\n\r\n if (memberships.switchingProxyUser && memberships.switchUserPayload) {\r\n let newPayload = { ...memberships.switchUserPayload }\r\n newPayload.type = types.SWITCH_USER_REDUCER\r\n yield put(newPayload);\r\n }\r\n\r\n }\r\n catch (err) {\r\n console.error(err);\r\n }\r\n}\r\n\r\n\r\nfunction* handleCommonResponse(payload) {\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n const memberships = yield select((state) => state.memberships);\r\n const currentUser = payload && payload.user ? payload.user : null;\r\n const externalId = currentUser ? currentUser.externalId : domain.cu && domain.cu.ei ? domain.cu.ei : null;\r\n if (domain && domain.un && domain.hm) {\r\n let response = null;\r\n // the check here fixes bug# 38507; the issue happens when we:\r\n // switch user from myChartUser1 to pharmacyUser1, and then to myChartUser2,\r\n // dashboard was loaded twice - 1st time for myChartUser2, and 2nd time for myChartUser1 (which is avoided by the check here)\r\n if (payload.type !== 'LOAD_DASHBOARD_START' || !memberships.switchingProxyUser) {\r\n response = yield call(getEpicDashboardData, domain.un, domain.t, externalId);\r\n yield put({ type: types.LOAD_DASHBOARD_SUCCESS, dashBoardData: response, isWaiting: false });\r\n }\r\n\r\n if (payload.callback) {\r\n payload.callback(response);\r\n }\r\n }\r\n }\r\n catch (err) {\r\n console.error(err);\r\n throw err;\r\n }\r\n}\r\n\r\nfunction* getEpicLetters(payload) {\r\n const start = new Date();\r\n\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n const memberships = yield select((state) => state.memberships);\r\n const currentUser = payload && payload.user ? payload.user : null;\r\n const externalId = currentUser ? currentUser.externalId : domain.cu && domain.cu.ei ? domain.cu.ei : null;\r\n if (domain && domain.un && domain.hm) {\r\n const lettersData = yield call(getLetters, domain.un, domain.t, domain.mc, externalId);\r\n logAPI(\"MBHWeb.Saga.DashBoard.GetLetters.Success\", start, null);\r\n yield put({ type: types.GET_EPIC_LETTERS_SUCCESS, letters: lettersData });\r\n\r\n }\r\n } catch (err) {\r\n yield put({ type: types.GET_EPIC_LETTERS_FAILURE });\r\n console.error(err);\r\n logAPI(\"MBHWeb.Saga.DashBoard.GetLetters.Failure\", start, null, JSON.stringify(err));\r\n }\r\n}\r\n\r\n\r\n//loadBffDashboard to handle video visit appointment info, xealthmessages, and membership change notifications \r\nfunction* loadBffDashboard(payload) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n const currentUser = payload && payload.user ? payload.user : domain && domain.cu ? domain.cu : null;\r\n const memberships = yield select((state) => state.memberships);\r\n const session = yield select((state) => state.session);\r\n const dashboard = yield select((state) => state.dashboard);\r\n\r\n if (domain && domain.pl && domain.pl.length === 0) {\r\n yield put({ type: types.RESET_DASHBOARD_SEE_ALL_VIEW });\r\n }\r\n\r\n let dashboardShowActCode = payload && payload.isSeeAllSelected ? \"MBHWeb.Saga.Dashboard.Show.SeeAllView\" : \"MBHWeb.Saga.Dashboard.Show.CurrentUser\";\r\n logAPI(dashboardShowActCode, start, null, currentUser);\r\n\r\n if (domain && domain.t && domain.hm) {\r\n yield put({ type: types.LOAD_BFF_DASHBOARD_PENDING });\r\n //Reset Video Visit links.\r\n yield put({ type: types.GET_VIDEO_VISIT_LINK_RESET });\r\n //BffDashboard has xealthMessages and videovisit appointment info for primary user and its proxies. \r\n const dashboardResponse = yield Tools.safeCall(getBffDashboard, domain.t);\r\n\r\n let response = null;\r\n\r\n //debugger;\r\n if (dashboardResponse && dashboardResponse.err) {\r\n yield put({ type: types.LOAD_BFF_DASHBOARD_FAILURE, bffDashboardData: null });\r\n logAPI(\"MBHWeb.Saga.DashBoard.BffDashboard.Failure\", start, null, JSON.stringify(dashboardResponse));\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.DashBoard.BffDashboard.Success\", start, null, dashboardResponse);\r\n response = dashboardResponse && dashboardResponse.result ? dashboardResponse.result : null;\r\n\r\n if (response) {\r\n response.isMyChartInActive = response && response.myChartStatus && response.myChartStatus.myChartStatusText ? (response.myChartStatus.myChartStatusText.toLowerCase() === \"inactivated\" || response.myChartStatus.myChartStatusText.toLowerCase() === \"patient_declined\") ? true : false : false;\r\n\r\n if (session.serverData?.enableV2MembershipLinking) {\r\n response.filteredMembershipNotifications = null;\r\n if (response.membershipNotifications && response.membershipNotifications.length > 0) {\r\n let filteredMsgs = response.membershipNotifications.reduce((acc, noti) => {\r\n if (!noti.userResponseDateTimeUtc) {\r\n let notiMessage = {\r\n subject: noti.subject,\r\n message: noti.message,\r\n responseOne: noti.responseOptions[0],\r\n id: noti.id\r\n }\r\n acc.push(notiMessage);\r\n }\r\n return acc;\r\n }, [])\r\n\r\n if (filteredMsgs.length > 0) {\r\n response.filteredMembershipNotifications = filteredMsgs[0];\r\n }\r\n }\r\n }\r\n\r\n response.visits = [];//payload && payload.isAllSelected ? response.visits : response.visits.filter(visit => (currentUser && currentUser.epi && visit.patientExternalId === currentUser.epi));\r\n response.currentUser = null;\r\n response.showCareCompanion = false;\r\n response.avs = [];\r\n if (response.patients) {\r\n const currentUserExternalId = currentUser ? currentUser.ei ? currentUser.ei : currentUser.externalId ? currentUser.externalId : null : null;\r\n\r\n response.patients = response.patients.map(pat => {\r\n const patientId = pat.patientIds.find((v, i) => { return v.idType && v.idType.toLowerCase() === \"external\" })\r\n pat.patientExternalId = '';\r\n if (patientId) {\r\n pat.patientExternalId = patientId.id;\r\n }\r\n return pat;\r\n });\r\n\r\n for (let i = 0; i < response.patients.length; i++) {\r\n let patientInfo = response.patients[i];\r\n //check carecarecompanion for seeallview, if any one of the patients found carecompanion.\r\n if (patientInfo && patientInfo.careCompanion && patientInfo.careCompanion.isCareCompanion) {\r\n response.showCareCompanion = true;\r\n }\r\n\r\n //Load Visits and AVS\r\n if (((payload && payload.isSeeAllSelected) || (currentUserExternalId && currentUserExternalId === patientInfo.patientExternalId))) {\r\n //Load Visits\r\n if (patientInfo.visits && patientInfo.visits.visits && patientInfo.visits.visits.length > 0) {\r\n patientInfo.visits.visits.sort((a, b) => {\r\n const dtA = new Date(a.appointmentDateTime);\r\n const dtB = new Date(b.appointmentDateTime);\r\n return dtA > dtB ? 1 : -1;\r\n });\r\n let visit = patientInfo.visits.visits[0];\r\n visit.patientName = patientInfo.patientName;\r\n response.visits.push(visit);\r\n }\r\n\r\n //Load AVS\r\n if (patientInfo.pastAppointments && patientInfo.pastAppointments.appointments && patientInfo.pastAppointments.appointments.length > 0) {\r\n let currentAvs = patientInfo.pastAppointments.appointments[0];\r\n currentAvs.patientName = patientInfo.patientName;\r\n currentAvs.patientExternalId = patientInfo && patientInfo.patientExternalId ? patientInfo.patientExternalId : '';\r\n response.avs.push(currentAvs);\r\n }\r\n\r\n }\r\n if (currentUserExternalId && currentUserExternalId === patientInfo.patientExternalId) {\r\n response.currentUser = patientInfo\r\n }\r\n }\r\n }\r\n yield put({ type: types.LOAD_BFF_DASHBOARD_SUCCESS, bffDashboardData: response });\r\n } else {\r\n yield put({ type: types.LOAD_BFF_DASHBOARD_FAILURE, bffDashboardData: null });\r\n }\r\n }\r\n\r\n if (typeof payload !== 'undefined' && payload && payload.callback) {\r\n payload.callback(response);\r\n }\r\n\r\n\r\n //Don't wait for dashboard to load, added this section here.\r\n if (response && response.visits && session && session.serverData?.visitTypesForMsTeams) {\r\n for (let j = 0; j < response.visits.length; j++) {\r\n const visit = response.visits[j];\r\n const visitTypeIDs = visit ? visit.visitTypeIDs.filter(id => id.idType && id.idType.toLowerCase() === 'internal') : null;\r\n const visitTypeID = visitTypeIDs && visitTypeIDs.length > -1 ? visitTypeIDs[0].id : null;\r\n const visitTypesForMsTeams = session.serverData?.visitTypesForMsTeams.replace(/ /g, '').split(',');\r\n if (visit && visit.csnIdOfAppointment && visitTypeID && visitTypesForMsTeams && visitTypesForMsTeams.indexOf(visitTypeID.trim()) != -1 && visit.eCheckInStatus.toUpperCase() === 'COMPLETED') {\r\n const csnIdOfAppointment = visit.csnIdOfAppointment;\r\n yield put({ type: types.GET_VIDEO_VISIT_LINK, csn: csnIdOfAppointment });\r\n try {\r\n let videoVisitLink = yield call(getVideoVisitUrl, domain.t, domain.un, csnIdOfAppointment);\r\n videoVisitLink.csn = csnIdOfAppointment;\r\n logAPI(\"MBHWeb.Saga.DashBoard.GetVideoVisitLink.Success\", start, null, videoVisitLink);\r\n yield put({ type: types.GET_VIDEO_VISIT_LINK_SUCCESS, videoVisitLink });\r\n } catch (error) {\r\n yield put({ type: types.GET_VIDEO_VISIT_LINK_FAILURE, error, csnIdOfAppointment });\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.DashBoard.GetVideoVisitLink.Failure\", start, null, JSON.stringify(error));\r\n }\r\n }\r\n }\r\n } else {\r\n yield put({ type: types.GET_VIDEO_VISIT_LINK_RESET });\r\n }\r\n }\r\n\r\n if (memberships.switchingProxyUser && memberships.switchUserPayload) {\r\n let newPayload = { ...memberships.switchUserPayload }\r\n newPayload.type = types.SWITCH_USER_REDUCER\r\n yield put(newPayload);\r\n }\r\n }\r\n catch (err) {\r\n yield put({ type: types.LOAD_BFF_DASHBOARD_FAILURE });\r\n try {\r\n const memberships = yield select((state) => state.memberships);\r\n if (memberships.switchingProxyUser && memberships.switchUserPayload) {\r\n let newPayload = { ...memberships.switchUserPayload }\r\n newPayload.type = types.SWITCH_USER_REDUCER\r\n yield put(newPayload);\r\n }\r\n if (payload && payload.callback) {\r\n payload.callback(err);\r\n }\r\n } catch (err1) {\r\n console.log(err1);\r\n }\r\n console.error(err);\r\n logAPI(\"MBHWeb.Saga.DashBoard.BffDashboard.Failure\", start, null, JSON.stringify(err));\r\n }\r\n}\r\n\r\nfunction* setMembershipNotiResponse(payload, callBack = null) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n const sso = yield select((state) => state.sso);\r\n let body = {\r\n response: payload.response,\r\n id: payload.id\r\n };\r\n yield call(setMembershipNotificationResponse, domain.t, body);\r\n logAPI(\"MBHWeb.Saga.DashBoard.SetMembershipNotiResponse.Success\", start, null);\r\n if (callBack) {\r\n callback();\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n logAPI(\"MBHWeb.Saga.DashBoard.SetMembershipNotiResponse.Failure\", start, null, JSON.stringify(err));\r\n }\r\n}\r\n\r\n\r\n//function* dcjSelfOrder(payload) {\r\n// const start = new Date();\r\n// try {\r\n// const { token, myChartId, goalProgramId } = payload;\r\n// if (token && myChartId && goalProgramId) {\r\n// yield put({ type: types.DCJ_SELF_ORDER_PENDING });\r\n// const response = yield call(dcjSelfOrderApi, token, myChartId, goalProgramId);\r\n\r\n// if (response >= 200 && response < 300) { // there's some confusion over whether to expect a 200 or a 204. Just accept anything 2xx.\r\n// logAPI(\"MBHWeb.Saga.Dashboard.DcjSelfOrder.Success\", start, null);\r\n// yield put({ type: types.DCJ_SELF_ORDER_SUCCESS });\r\n// yield loadBffDashboard();\r\n// }\r\n// else {\r\n// yield put({ type: types.DCJ_SELF_ORDER_FAILURE });\r\n// logAPI(\"MBHWeb.Saga.Dashboard.DcjSelfOrder.Failure\", start, null, response);\r\n// }\r\n// }\r\n// } catch (err) {\r\n// yield put({ type: types.DCJ_SELF_ORDER_FAILURE });\r\n// logAPI(\"MBHWeb.Saga.Dashboard.DcjSelfOrder.Failure\", start, null, JSON.stringify(err));\r\n// }\r\n//}\r\n\r\n//function* handleDcjSelfOrderOptOut(payload) {\r\n// const start = new Date();\r\n// try {\r\n// const { token, myChartId, goalProgramId } = payload;\r\n// if (token && myChartId && goalProgramId) {\r\n// yield put({ type: types.DCJ_SELF_ORDER_OPTOUT_PENDING });\r\n// const response = yield call(dcjSelfOrderOptOut, token, myChartId, goalProgramId);\r\n// if (response === 204) {\r\n// logAPI(\"MBHWeb.Saga.Dashboard.DcjSelfOrderOptOut.Success\", start, null);\r\n// yield put({ type: types.DCJ_SELF_ORDER_OPTOUT_SUCCESS });\r\n// yield loadBffDashboard();\r\n// }\r\n// else {\r\n// yield put({ type: types.DCJ_SELF_ORDER_OPTOUT_FAILURE });\r\n// //yield put({ type: types.DCJ_SELF_ORDER_OPTOUT_SUCCESS });\r\n\r\n// logAPI(\"MBHWeb.Saga.Dashboard.DcjSelfOrderOptOut.Failure\", start, null, response);\r\n// }\r\n// }\r\n// } catch (err) {\r\n// yield put({ type: types.DCJ_SELF_ORDER_OPTOUT_FAILURE });\r\n// // yield put({ type: types.DCJ_SELF_ORDER_OPTOUT_SUCCESS });\r\n// logAPI(\"MBHWeb.Saga.Dashboard.DcjSelfOrderOptOut.Failure\", start, null, JSON.stringify(err));\r\n// }\r\n//}\r\n\r\n//function* handleDashAction(payload) {\r\n// const start = new Date();\r\n// try {\r\n// const domain = yield select((state) => state.domain);\r\n// //const userDetails = yield select((state) => state.sso.userDetails);\r\n\r\n// if (domain && domain.un && domain.hm) {\r\n// //debugger;\r\n// const currentUser = d.hydrateProxyUser(yield select(state => state.domain.cu));\r\n// ////try {\r\n// //// if (currentUser) {\r\n// //// console.log('dashboadrdSaga: setting cookie BSWPROXY... old:', Cookies.get('BSWPROXY'), 'new:', currentUser.relationshipId);\r\n// //// const sDomain = getDomain();\r\n// //// yield put({ type: types.COOKIE_BSWPROXY_START });\r\n// //// if (currentUser.relationshipId) {\r\n// //// Cookies.set('BSWPROXY', currentUser.relationshipId, { path: '/', domain: sDomain });\r\n// //// }\r\n// //// else {\r\n// //// Cookies.set('BSWPROXY', \"\", { path: '/', domain: sDomain });\r\n// //// }\r\n// //// yield put({ type: types.COOKIE_BSWPROXY_SUCCESS });\r\n// //// }\r\n// ////}\r\n// ////catch (E) {\r\n// //// //debugger;\r\n// //// console.error(e);\r\n// ////}\r\n\r\n// const response = yield call(getEpicDashboardData, domain.un, domain.t, currentUser ? currentUser.externalId : null);\r\n// yield put({ type: types.LOAD_DASHBOARD_SUCCESS, dashBoardData: response, isWaiting: false });\r\n// logAPI(\"MBHWeb.Saga.Dashboard.Get\", start, null);\r\n// if (payload.callback) {\r\n// payload.callback(response);\r\n// }\r\n// }\r\n// if (payload.type === types.SWITCH_USER_SAGA) {\r\n// payload.type = types.SWITCH_USER_REDUCER;\r\n// yield put(payload);\r\n// }\r\n// }\r\n// catch (response) {\r\n// console.error(response);\r\n// logAPI(\"MBHWeb.Saga.Dashboard.Get.Failure\", start, null, response);\r\n// //debugger;\r\n// // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n// if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n// console.log(\"VERIFY_LOGIN\");\r\n// yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n// }\r\n// else {\r\n// yield put({ type: types.AJAX_CALL_ERROR, error: response });\r\n// yield put({ type: types.LOAD_DASHBOARD_ERROR, error: response });\r\n// }\r\n// if (payload.callback) {\r\n// payload.callback(null);\r\n// }\r\n// }\r\n//}\r\n","import { put, call, takeLatest, takeEvery, fork, all, select } from \"redux-saga/effects\";\r\nimport { getProvidersList } from \"../api/directSchedulingApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { log, logAPI } from \"../api/andyliticsApi\";\r\n\r\nexport default function* directSchedulingSaga() {\r\n yield takeLatest(types.DIRECT_SCHEDULING_PROVIDER_LIST, handleProviderList);\r\n yield takeLatest(types.SWITCH_USER_SAGA, handleProviderList);\r\n}\r\n\r\nexport function* handleProviderList(payload) {\r\n const start = new Date();\r\n try {\r\n //debugger;\r\n let providers = [];\r\n if (window.serverData.data.enableDirectScheduling === true) {\r\n let searchModel = {};\r\n const domain = yield select((state) => state.domain);\r\n if (payload && payload.searchModel) {\r\n if (!payload.searchModel.proxyPatientId) {\r\n payload.searchModel.proxyPatientId = domain.cu && domain.cu.ei ? domain.cu.ei : null;\r\n }\r\n searchModel = payload.searchModel;\r\n } else {\r\n //Handle for proxies or if search model not found.\r\n const currentUser = payload && payload.user ? payload.user : null;\r\n const externalId = currentUser && currentUser.externalId ? currentUser.externalId : domain.cu && domain.cu.ei ? domain.cu.ei : null;\r\n searchModel = { loginId: domain.un, proxyPatientId: externalId };\r\n }\r\n\r\n if (searchModel && searchModel.proxyPatientId) {\r\n providers = yield call(getProvidersList, searchModel, payload.token ? payload.token : domain.t);\r\n } else {\r\n logAPI(\"MBHWeb.Saga.DirectScheduling.ProviderList.NotLoaded\", start, null);\r\n }\r\n }\r\n\r\n yield all([\r\n put({ type: types.DIRECT_SCHEDULING_PROVIDER_LIST_SUCCESS, providers })\r\n ]);\r\n\r\n if (window.serverData.data.enableDirectScheduling === true) {\r\n logAPI(\"MBHWeb.Saga.DirectScheduling.ProviderList\", start, null);\r\n }\r\n }\r\n catch (error) {\r\n yield all([\r\n put({ type: types.DIRECT_SCHEDULING_PROVIDER_LIST_FAILURE, error })\r\n ]);\r\n let errorRspMsg = null;\r\n let errorStatus = null;\r\n if (error && error.status) {\r\n try {\r\n errorStatus = error.status;\r\n errorRspMsg = yield call(parseRspMsg, error);\r\n } catch (err) { };\r\n }\r\n logAPI(\"MBHWeb.Saga.DirectScheduling.ProviderList.Failure\", start, null, { status: errorStatus, errorRsp: errorRspMsg });\r\n\r\n }\r\n}\r\n\r\nfunction parseRspMsg(rspMsg) {\r\n try {\r\n return rspMsg.json().then(data => {\r\n return data;\r\n });\r\n }\r\n catch (e) {\r\n return {};\r\n }\r\n}\r\n","import { put, call, takeLatest } from \"redux-saga/effects\";\r\nimport { getMyCharDocsData, getFAQ, getPrivacyHealthPlanData, getPrivacyMyBswhData, getPrivacyMyChartData } from \"../api/docsApi\";\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\n\r\nexport default function* docsSaga() {\r\n yield takeLatest(types.LOAD_DOCS_DATA, handleDocs);\r\n yield takeLatest(types.GET_PRIVACY_HEALTHPLAN_TEXT, handlePrivacyHealthPlanText);\r\n yield takeLatest(types.GET_PRIVACY_MYBSWH_TEXT, handlePrivacyMyBswhText);\r\n yield takeLatest(types.GET_PRIVACY_MYCHART_TEXT, handlePrivacyMyChartText);\r\n yield call(loadFAQ);\r\n}\r\n\r\nfunction* loadFAQ() {\r\n const start = new Date();\r\n try {\r\n let faq = yield call(getFAQ);\r\n faq = JSON.parse(faq);\r\n if (faq && faq.length > 0) {\r\n faq.forEach(item => item.questionText = item.questionText.trim());\r\n }\r\n yield put({ type: types.FAQ_SUCCESS, faq });\r\n logAPI(\"MBHWeb.Saga.SSO.LoadFAQ\", start, null);\r\n }\r\n catch (error) {\r\n yield put({ type: types.FAQ_FAILURE, error });\r\n logAPI(\"MBHWeb.Saga.SSO.LoadFAQ.Failure\", start, null, JSON.stringify(error));\r\n }\r\n}\r\n\r\nexport function* handleDocs(payload) {\r\n try {\r\n const docsData = yield call(getMyCharDocsData, payload.payload.docId, payload.payload.localization);\r\n yield put({ type: types.LOAD_DOCS_DATA_SUCCESS, docsData });\r\n }\r\n catch (error) {\r\n console.error(error);\r\n yield put({ type: types.LOAD_DOCS_DATA_FAILURE, error });\r\n }\r\n}\r\n\r\nexport function* handlePrivacyHealthPlanText(payload) {\r\n const start = new Date();\r\n try {\r\n const healthPlanPrivacydata = yield call(getPrivacyHealthPlanData, payload);\r\n yield put({ type: types.GET_PRIVACY_HEALTHPLAN_TEXT_SUCCESS, healthPlanPrivacydata });\r\n logAPI(\"MBHWeb.Saga.Docs.HealthPlan.Privacy.Success\", start, null, healthPlanPrivacydata);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Docs.HealthPlan.Privacy.Failure\", start, null, JSON.stringify(error));\r\n yield put({ type: types.GET_PRIVACY_HEALTHPLAN_TEXT_FAILURE, error });\r\n }\r\n}\r\n\r\nexport function* handlePrivacyMyBswhText(payload) {\r\n const start = new Date();\r\n try {\r\n const bswhPrivacydata = yield call(getPrivacyMyBswhData, payload);\r\n yield put({ type: types.GET_PRIVACY_MYBSWH_TEXT_SUCCESS, bswhPrivacydata });\r\n logAPI(\"MBHWeb.Saga.Docs.BSWH.Privacy.Success\", start, null, bswhPrivacydata);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n yield put({ type: types.GET_PRIVACY_MYBSWH_TEXT_FAILURE, error });\r\n logAPI(\"MBHWeb.Saga.Docs.BSWH.Privacy.Failure\", start, null, JSON.stringify(error));\r\n }\r\n}\r\n\r\nexport function* handlePrivacyMyChartText(payload) {\r\n const start = new Date();\r\n try {\r\n const myChartPrivacyData = yield call(getPrivacyMyChartData, payload);\r\n yield put({ type: types.GET_PRIVACY_MYCHART_TEXT_SUCCESS, myChartPrivacyData });\r\n logAPI(\"MBHWeb.Saga.Docs.Mychart.Privacy.Success\", start, null, myChartPrivacyData);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n yield put({ type: types.GET_PRIVACY_MYCHART_TEXT_FAILURE, error });\r\n logAPI(\"MBHWeb.Saga.Docs.Mychart.Privacy.Failure\", start, null, JSON.stringify(error));\r\n }\r\n}","import { put, call, select, takeLatest, all } from \"redux-saga/effects\";\r\nimport { getProxyRelationshipTypes, setProxyRelationship, acceptProxyRelationship, grantProxyRelationship, deleteProxyRelationship, getXealthMessage, eCheckInStatus, encryptCSN } from \"../api/epicApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\nimport * as Tools from \"../helpers/Tools\";\r\n\r\n\r\nexport default function* epicSaga() {\r\n //yield takeLatest(types.PROXY_RELATIONSHIP_TYPES, handleProxyRelationshipTypes);\r\n yield takeLatest(types.PROXY_RELATIONSHIP_SET, handleSetProxyRelationship);\r\n yield takeLatest(types.PROXY_RELATIONSHIP_ACCEPT, handleAcceptProxyRelationship);\r\n yield takeLatest(types.PROXY_RELATIONSHIP_GRANT, handleGrantProxyRelationship);\r\n yield takeLatest(types.PROXY_RELATIONSHIP_DELETE, handleDeleteProxyRelationship);\r\n yield takeLatest([types.GET_SPECIFIC_XEALTH_MESSAGE], getSpecificXealthMessage);\r\n yield takeLatest(types.GET_ECHECKIN_STATUS, getECheckInStatus);\r\n yield takeLatest(types.GET_EPIC_ENCRYPT_CSN, handleEncryptCSN);\r\n}\r\n//Not using this method, since we moved centralized proxy system.\r\n//export function* handleProxyRelationshipTypes(payload) {\r\n// const start = new Date();\r\n// const stateData = yield select((state) => state.common);\r\n\r\n// if (stateData && stateData.epicEHRDown === false) {\r\n// try {\r\n// yield put({ type: types.PROXY_RELATIONSHIP_TYPES_PENDING });\r\n// const relationTypes = yield call(getProxyRelationshipTypes, payload.token);\r\n// yield put({ type: types.PROXY_RELATIONSHIP_TYPES_SUCCESS, types: relationTypes });\r\n// logAPI(\"MBHWeb.Saga.Proxy.GetProxyRelationshipTypes\", start, null);\r\n// }\r\n// catch (error) {\r\n// console.error(error);\r\n// logAPI(\"MBHWeb.Saga.Proxy.GetProxyRelationshipTypes.Failure\", start, null, error);\r\n// yield all([\r\n// put({ type: types.PROXY_RELATIONSHIP_TYPES_FAILURE }),\r\n// put({ type: types.AJAX_CALL_ERROR, error })\r\n// ]);\r\n// }\r\n// }\r\n// else {\r\n// console.log(\"epicSaga: epicEHRDown\");\r\n// }\r\n//}\r\n\r\nexport function* handleSetProxyRelationship(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n yield put({ type: types.PROXY_RELATIONSHIP_SET_PENDING });\r\n const { token, patientId, patientIdType, proxyId, proxyIdType, relation, fromDate, toDate, comments } = payload;\r\n const result = yield call(setProxyRelationship, token, patientId, patientIdType, proxyId, proxyIdType, relation, fromDate, toDate, comments);\r\n yield put({ type: types.PROXY_RELATIONSHIP_SET_SUCCESS, result });\r\n logAPI(\"MBHWeb.Saga.Proxy.SetProxyRelationship\", start, null);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Proxy.SetProxyRelationship.Failure\", start, null, error);\r\n yield all([\r\n put({ type: types.PROXY_RELATIONSHIP_SET_FAILURE }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n }\r\n else {\r\n console.log(\"epicSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleAcceptProxyRelationship(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n yield put({ type: types.PROXY_RELATIONSHIP_ACCEPT_PENDING });\r\n const { token, GrantorId, GrantorDob } = payload.data;\r\n const result = yield call(acceptProxyRelationship, token, GrantorId, GrantorDob);\r\n yield put({ type: types.PROXY_RELATIONSHIP_ACCEPT_SUCCESS, result });\r\n logAPI(\"MBHWeb.Saga.Proxy.AcceptProxyRelationship\", start, null);\r\n if (payload.callback) //load proxy information after success\r\n payload.callback();\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Proxy.AcceptProxyRelationship.Failure\", start, null, error);\r\n yield all([\r\n put({ type: types.PROXY_RELATIONSHIP_ACCEPT_FAILURE, result: error }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n }\r\n else {\r\n console.log(\"epicSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleGrantProxyRelationship(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n yield put({ type: types.PROXY_RELATIONSHIP_GRANT_PENDING });\r\n const { token, AccessorName, AccessorEmail, type } = payload.data;\r\n const result = yield call(grantProxyRelationship, token, AccessorName, AccessorEmail, type);\r\n if (result === true)\r\n yield put({ type: types.PROXY_RELATIONSHIP_GRANT_SUCCESS, result });\r\n else\r\n yield put({ type: types.PROXY_RELATIONSHIP_GRANT_FAILURE, result });\r\n logAPI(\"MBHWeb.Saga.Proxy.GrantProxyRelationship\", start, null);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Proxy.GrantProxyRelationship.Failure\", start, null, error);\r\n yield all([\r\n put({ type: types.PROXY_RELATIONSHIP_GRANT_FAILURE }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n }\r\n else {\r\n console.log(\"epicSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleDeleteProxyRelationship(payload) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n yield put({ type: types.PROXY_RELATIONSHIP_DELETE_PENDING });\r\n const { patientId, patientIdType } = payload;\r\n const result = yield call(deleteProxyRelationship, domainData.t, patientId, patientIdType);\r\n yield put({ type: types.PROXY_RELATIONSHIP_DELETE_SUCCESS, result });\r\n yield put({ type: types.REFRESH_PROXY_LIST });\r\n logAPI(\"MBHWeb.Saga.Proxy.DeleteProxyRelationship\", start, null);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Proxy.DeleteProxyRelationship.Failure\", start, null, error);\r\n yield all([\r\n put({ type: types.PROXY_RELATIONSHIP_DELETE_FAILURE, error }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n }\r\n else {\r\n console.log(\"epicSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nfunction* getSpecificXealthMessage(payload) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n if (domain.t && payload.messageId) {\r\n yield put({ type: types.GET_SPECIFIC_XEALTH_MESSAGE_PENDING });\r\n const response = yield call(getXealthMessage, domain.t, payload.messageId);\r\n let message = null;\r\n if (response && response.twistleMessage) {\r\n //Added this condition to manage old api reponse.\r\n if (response.twistleMessage.messages) {\r\n message = response.twistleMessage.messages.length > 0 && response.twistleMessage.messages.find(message => message.messageId === payload.messageId);\r\n } else {\r\n message = response.twistleMessage;\r\n }\r\n }\r\n logAPI(\"MBHWeb.Saga.Epic.GetSpecificXealthMessage.Success\", start, null);\r\n yield put({ type: types.GET_SPECIFIC_XEALTH_MESSAGE_SUCCESS, messageUrl: message && message.originalContent && message.originalContent.url ? message.originalContent.url : null, conversationUrl: message && message.originalContent && message.originalContent.conversation_url ? message.originalContent.conversation_url : null });\r\n }\r\n }\r\n catch (err) {\r\n yield put({ type: types.GET_SPECIFIC_XEALTH_MESSAGE_FAILURE, errorCode: err && err.status ? err.status : null });\r\n console.error(err);\r\n logAPI(\"MBHWeb.Saga.Epic.GetSpecificXealthMessage.Failure\", start, null, JSON.stringify(err));\r\n }\r\n}\r\n\r\nfunction* getECheckInStatus(payload) {\r\n const start = new Date();\r\n\r\n try {\r\n yield put({ type: types.GET_ECHECKIN_STATUS_PENDING });\r\n const status = yield call(eCheckInStatus, payload.userName, payload.csnId, payload.token);\r\n const statusObj = { userName: payload.userName, csnId: payload.csnId, status: status };\r\n logAPI(\"MBHWeb.Saga.Epic.GetECheckInStatus\", start, null);\r\n yield put({ type: types.GET_ECHECKIN_STATUS_SUCCESS, eCheckInStatus: status });\r\n }\r\n catch (err) {\r\n logAPI(\"MBHWeb.Saga.Epic.GetECheckInStatus.Failure\", start, null, JSON.stringify(err));\r\n yield put({ type: types.GET_ECHECKIN_STATUS_FAILURE });\r\n }\r\n}\r\n\r\n\r\nfunction* handleEncryptCSN(payload) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n yield put({ type: types.GET_EPIC_ENCRYPT_CSN_PENDING });\r\n if (domain.t && payload.csnId) {\r\n const response = yield call(encryptCSN, payload.csnId, domain.t);\r\n const statusObj = { payloadCsnId: payload.csnId, response };\r\n logAPI(\"MBHWeb.Saga.Epic.EncryptCSN\", start, null, statusObj);\r\n yield put({ type: types.GET_EPIC_ENCRYPT_CSN_SUCCESS, encryptCSN: response });\r\n } else {\r\n logAPI(\"MBHWeb.Saga.Epic.EncryptCSN.Failure\", start, null);\r\n yield put({ type: types.GET_EPIC_ENCRYPT_CSN_FAILURE });\r\n }\r\n }\r\n catch (err) {\r\n logAPI(\"MBHWeb.Saga.Epic.EncryptCSN.Failure\", start, null, JSON.stringify(err));\r\n yield put({ type: types.GET_EPIC_ENCRYPT_CSN_FAILURE });\r\n }\r\n}\r\n","import { call, put, takeLatest } from \"redux-saga/effects\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\n\r\nexport default function* errorSaga() {\r\n yield takeLatest([types.APPLICATION_ERROR], handleAction);\r\n}\r\n\r\nfunction* handleAction(data) {\r\n switch (data.type) {\r\n case types.APPLICATION_ERROR:\r\n logAPI(\"MBHWeb.Saga.Error\", new Date(), null, data);\r\n //yield put({type: types.APPLICATION_ERROR, error: data}); <-- uncomment here to start endless loop :)\r\n break;\r\n }\r\n}","import { call, put, takeLatest, select } from 'redux-saga/effects';\r\nimport * as types from '../constants/actionTypes';\r\nimport { getNotices } from '../api/portalApi';\r\nimport { forgotPassword, resetPassword, changePassword, changeUserName, forgotUserName, changeEmail } from '../api/accountApi';\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\n\r\nexport default function* headerSaga() {\r\n try {\r\n const notices = yield call(getNotices);\r\n if (notices) {\r\n yield put({ type: types.NOTICES_NON_LOGGED_IN, notices: notices });\r\n }\r\n }\r\n catch (getNoticesError) {\r\n console.error(getNoticesError);\r\n }\r\n yield takeLatest([types.LOGOUT], handleAction);\r\n yield takeLatest([types.NOTICES_NON_LOGGED_IN_HIDE], handleAction);\r\n yield takeLatest([types.NOTICES_LOGGED_IN_HIDE], handleAction);\r\n yield takeLatest([types.USER_AUTHENTICATE_SUCCESS], handleAction);\r\n yield takeLatest([types.CHANGE_USERNAME], handleAction);\r\n yield takeLatest([types.CHANGE_PASSWORD], handleAction);\r\n yield takeLatest([types.FORGOT_PASSWORD_START], handleAction);\r\n yield takeLatest([types.RESET_PASSWORD_START], handleAction);\r\n yield takeLatest([types.FORGOT_USERNAME_START], handleAction);\r\n yield takeLatest([types.CHANGE_EMAIL_START], handleAction);\r\n}\r\n\r\nfunction* handleAction(data) {\r\n const domainData = yield select((state) => state.domain);\r\n const start = new Date();\r\n\r\n switch (data.type) {\r\n //case types.USER_AUTHENTICATE_SUCCESS:\r\n //case types.SWITCH_USER:\r\n // //set cookie and set property for my chart proxyid..... jball\r\n // debugger;\r\n // yield put({ type: types.LOAD_DASHBOARD_START });\r\n // break;\r\n case types.NOTICES_NON_LOGGED_IN_HIDE:\r\n case types.NOTICES_LOGGED_IN_HIDE:\r\n data.notices.forEach(notice => localStorage.setItem('notice_' + notice.id, 'true'));\r\n break;\r\n\r\n case types.CHANGE_USERNAME:\r\n try {\r\n //debugger;\r\n const response = yield call(changeUserName, domainData.t, data.OldUserName, data.NewUserName);\r\n //debugger;\r\n if (response === \"OK\") {\r\n logAPI(\"MBHWeb.Saga.Account.ChangeUserName\", start, null);\r\n yield put({ type: types.CHANGE_USERNAME_SUCCESS, userNameUpdateResponse: response, isWaiting: false });\r\n yield put({ type: types.REFRESH_TOKEN });\r\n if (data.successCallback) {\r\n data.successCallback();\r\n }\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.Account.ChangeUserName.Failure\", start, null, response);\r\n yield put({ type: types.CHANGE_USERNAME_FAILURE, userNameUpdateResponse: response, apiErrorMessage: response, isWaiting: false });\r\n if (data.failureCallback) {\r\n data.failureCallback();\r\n }\r\n }\r\n }\r\n catch (changeUserNameError) {\r\n console.error(changeUserNameError);\r\n logAPI(\"MBHWeb.Saga.Account.ChangeUserName.Failure\", start, null, changeUserNameError);\r\n if (changeUserNameError && changeUserNameError.status && changeUserNameError.status === 404) {\r\n const errorMessage = yield call(getErrorMessage, changeUserNameError);\r\n yield put({ type: types.CHANGE_USERNAME_FAILURE, userNameError: changeUserNameError.statusText, apiErrorMessage: errorMessage, isWaiting: false });\r\n }\r\n else {\r\n yield put({ type: types.CHANGE_USERNAME_FAILURE, userNameError: changeUserNameError.statusText, apiErrorMessage: null, isWaiting: false });\r\n }\r\n if (data.failureCallback) {\r\n data.failureCallback();\r\n }\r\n }\r\n break;\r\n\r\n case types.CHANGE_PASSWORD:\r\n try {\r\n //debugger;\r\n const response = yield call(changePassword, domainData.t, data.Email, data.OldPassword, data.NewPassword, data.ConfirmPassword);\r\n //debugger;\r\n if (response === \"OK\") {\r\n logAPI(\"MBHWeb.Saga.Account.ChangePassword\", start, null);\r\n yield put({ type: types.CHANGE_PASSWORD_SUCCESS, passwordUpdateResponse: response, isWaiting: false });\r\n if (data.successCallback) {\r\n data.successCallback();\r\n }\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.Account.ChangePassword.Failure\", start, null, response);\r\n yield put({ type: types.CHANGE_PASSWORD_FAILURE, passwordError: response, apiErrorMessage: response, isWaiting: false });\r\n if (data.failureCallback) {\r\n data.failureCallback();\r\n }\r\n }\r\n }\r\n catch (changePasswordError) {\r\n console.error(changePasswordError);\r\n logAPI(\"MBHWeb.Saga.Account.ChangePassword.Failure\", start, null, changePasswordError);\r\n if (changePasswordError && changePasswordError.status && (changePasswordError.status === 404 || changePasswordError.status === 400)) {\r\n const errorMessage = yield call(getErrorMessage, changePasswordError);\r\n yield put({ type: types.CHANGE_PASSWORD_FAILURE, passwordError: changePasswordError.statusText, apiErrorMessage: errorMessage, isWaiting: false });\r\n }\r\n else {\r\n yield put({ type: types.CHANGE_PASSWORD_FAILURE, passwordError: changePasswordError.statusText, apiErrorMessage: null, isWaiting: false });\r\n }\r\n if (data.failureCallback) {\r\n data.failureCallback();\r\n }\r\n }\r\n break;\r\n\r\n case types.FORGOT_PASSWORD_START:\r\n try {\r\n const response = yield call(forgotPassword, null, data.UserName, data.DOB, data.ZipCode);\r\n if (response.isSuccessful) {\r\n logAPI(\"MBHWeb.Saga.Account.ForgotPassword\", start, null);\r\n yield put({\r\n type: types.FORGOT_PASSWORD_SUCCESS,\r\n success: { ...response, message: \"You will receive an email that contains instructions on how to reset your password.\" }\r\n });\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.Account.ForgotPassword.Failure\", start, null, response);\r\n yield put({ type: types.FORGOT_PASSWORD_FAILURE, failure: response });\r\n }\r\n }\r\n catch (forgotPasswordError) {\r\n console.error(forgotPasswordError);\r\n logAPI(\"MBHWeb.Saga.Account.ForgotPassword.Failure\", start, null, forgotPasswordError);\r\n const failure = !forgotPasswordError || !forgotPasswordError.statusText\r\n ? { message: 'Sorry, we are unable to process your request. Please try again later.' }\r\n : { ...failure, message: forgotPasswordError.statusText };\r\n yield put({ type: types.FORGOT_PASSWORD_FAILURE, failure });\r\n }\r\n break;\r\n\r\n case types.RESET_PASSWORD_START:\r\n try {\r\n const response = yield call(resetPassword, data.token, data.userId, data.password);\r\n if (response.isSuccessful) {\r\n logAPI(\"MBHWeb.Saga.Account.ResetPassword\", start, null);\r\n yield put({ type: types.RESET_PASSWORD_SUCCESS, success: response });\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.Account.ResetPassword.Failure\", start, null, response);\r\n yield put({ type: types.RESET_PASSWORD_FAILURE, failure: response });\r\n }\r\n }\r\n catch (resetPasswordError) {\r\n console.error(resetPasswordError);\r\n logAPI(\"MBHWeb.Saga.Account.ResetPassword.Failure\", start, null, resetPasswordError);\r\n const failure = !resetPasswordError ? { message: 'Sorry, we are unable to process your request. Please try again later.' } : resetPasswordError.message ? resetPasswordError\r\n : { ...resetPassword, message: resetPasswordError.statusText ? resetPassword.statusText : '' };\r\n yield put({ type: types.RESET_PASSWORD_FAILURE, failure });\r\n }\r\n break;\r\n\r\n case types.FORGOT_USERNAME_START:\r\n try {\r\n let oResult = yield call(forgotUserName, null, data.Email, data.DOB, data.FirstName, data.LastName, data.ZipCode, true);\r\n if (oResult.isSuccessful) {\r\n logAPI(\"MBHWeb.Saga.Account.ForgotUserName\", start, null);\r\n yield put({ type: types.FORGOT_USERNAME_SUCCESS, forgotUserNameSuccessMessage: \"You will receive an email that contains your username.\" });\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.Account.ForgotUserName.Failure\", start, null, oResult);\r\n yield put({ type: types.FORGOT_USERNAME_FAILURE, forgotUserNameFailureMessage: \"Failed to process your request. \" + oResult.message });\r\n }\r\n }\r\n catch (exception) {\r\n console.error(exception);\r\n logAPI(\"MBHWeb.Saga.Account.ForgotUserName.Failure\", start, null, exception);\r\n if (exception && exception.status && exception.status === 404) {\r\n yield put({ type: types.FORGOT_USERNAME_FAILURE, forgotUserNameFailureMessage: \"Account not found. For technical assistance, please call the MyBSWHealth Technical Help Desk at 855-691-0180\" });\r\n }\r\n else {\r\n yield put({ type: types.FORGOT_USERNAME_FAILURE, forgotUserNameFailureMessage: exception && exception.statusText ? exception.statusText : \"Failed to process.\" });\r\n }\r\n }\r\n break;\r\n\r\n case types.CHANGE_EMAIL_START:\r\n try {\r\n const result = yield call(changeEmail, domainData.t, data.Username, data.NewEmail, data.ConfirmEmail);\r\n if (result === \"OK\") {\r\n logAPI(\"MBHWeb.Saga.Account.ChangeEmail\", start, null);\r\n yield put({ type: types.CHANGE_EMAIL_SUCCESS, changeEmailSuccessMessage: \"Your email has been updated.\", changeEmailFailureMessage: false });\r\n yield put({ type: types.REFRESH_TOKEN });\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.Account.ChangeEmail.Failure\", start, null, result);\r\n yield put({ type: types.CHANGE_EMAIL_FAILURE, changeEmailFailureMessage: result.Message, changeEmailSuccessMessage: false });\r\n }\r\n }\r\n catch (changeEmailError) {\r\n console.error(changeEmailError);\r\n let errorText = null;\r\n if (changeEmailError && changeEmailError.status && changeEmailError.status === 400) {\r\n const errorMessage = yield call(getErrorMessage, changeEmailError);\r\n errorText = errorMessage;\r\n yield put({ type: types.CHANGE_EMAIL_FAILURE, changeEmailErrorText: null, changeEmailFailureMessage: errorMessage, changeEmailSuccessMessage: false });\r\n }\r\n else if (changeEmailError && changeEmailError.status && changeEmailError.status === 404) {\r\n errorText = 'None entered';\r\n yield put({ type: types.CHANGE_EMAIL_FAILURE, changeEmailErrorText: errorText, changeEmailFailureMessage: null, changeEmailSuccessMessage: false });\r\n }\r\n else {\r\n errorText = 'We are unable to display your email.';\r\n yield put({ type: types.CHANGE_EMAIL_FAILURE, changeEmailErrorText: errorText, changeEmailSuccessMessage: false });\r\n }\r\n\r\n logAPI(\"MBHWeb.Saga.Account.ChangeEmail.Failure\", start, null, errorText);\r\n }\r\n break;\r\n }\r\n}\r\n\r\nfunction getErrorMessage(changeUserNameError) {\r\n return changeUserNameError.json().then(data => {\r\n\r\n return data.Message;\r\n });\r\n}","import { call, put, select, takeLatest, all } from 'redux-saga/effects';\r\nimport * as types from '../constants/actionTypes';\r\nimport * as healthPlan from '../api/healthPlanApi';\r\nimport { log, logAPI } from \"../api/andyliticsApi\";\r\n\r\nconst technicalHelpDeskNumber = window.serverData ? window.serverData.data.technicalHelpDeskNumber : \"855.691.0180\";\r\nconst technicalHelpDeskHours = window.serverData ? window.serverData.data.technicalHelpDeskHours : \"\";\r\nconst phoneNumber = \"
800.784.5473 \";\r\nconst phoneNumber2 = `
${technicalHelpDeskNumber} `;\r\n\r\nexport default function* healthPlanSaga() {\r\n yield takeLatest([types.USER_AUTHENTICATE_SUCCESS], handleHealthPlanAction);\r\n yield takeLatest([types.LOAD_HEALTHPLANDASHBOARD_START], handleHealthPlanAction);\r\n yield takeLatest([types.LOAD_HEALTHPLAN_DATA_START], loadHealthPlanTileAction);\r\n yield takeLatest([types.LINK_HEALTHPLAN_ACCOUNT], handleLinkHealthPlanAccount);\r\n yield takeLatest([types.LINK_HEALTHPLAN_ACCOUNT_SUCCESS], handleLinkHealthPlanAccount);\r\n yield takeLatest([types.UNLINK_HEALTHPLAN_ACCOUNT], handleUnlinkHealthPlanAccount);\r\n yield takeLatest([types.UNLINK_HEALTHPLAN_ACCOUNT_SUCCESS], handleUnlinkHealthPlanAccount);\r\n yield takeLatest([types.LINK_AUTO_HP_ACCOUNT_START], linkAAAcountAction);\r\n yield takeLatest([types.LINK_AA_ACCOUNT_START], linkAAAcountAction);\r\n yield takeLatest([types.LINK_AA_ACCOUNT_SUCCESS], linkAAAcountAction);\r\n yield takeLatest([types.LINK_AA_ACCOUNT_FAILURE], linkAAAcountAction);\r\n yield takeLatest([types.LINK_AA_ACCOUNT_UPDATE_TOKEN_SUCCESS], linkAAAcountAction);\r\n yield takeLatest([types.UNLINK_AA_ACCOUNT_START], unLinkAAAcountAction);\r\n yield takeLatest([types.UNLINK_AA_ACCOUNT_SUCCESS], unLinkAAAcountAction);\r\n yield takeLatest([types.UNLINK_AA_ACCOUNT_FAILURE], unLinkAAAcountAction);\r\n yield takeLatest([types.UNLINK_AA_ACCOUNT_UPDATE_TOKEN_SUCCESS], unLinkAAAcountAction);\r\n yield takeLatest([types.LINK_FIRST_CARE_ACCOUNT], linkFirstCareAccountAction);\r\n yield takeLatest([types.UNLINK_FIRST_CARE_ACCOUNT], unlinkFirstCareAccountAction);\r\n yield takeLatest([types.LINK_DART_ACCOUNT], linkDartAccountAction);\r\n yield takeLatest([types.UNLINK_DART_ACCOUNT], unlinkDartAccountAction);\r\n yield takeLatest([types.LINK_WACO_ACCOUNT], linkWACOAccountAction);\r\n yield takeLatest([types.UNLINK_WACO_ACCOUNT], unlinkWacoAccountAction);\r\n}\r\n\r\nfunction* handleHealthPlanAction(data) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n const enableNewHealthPlan = window && window.serverData.data.enableNewHealthPlan;\r\n //If new health plan is enabled then not required to call this API.\r\n if (typeof enableNewHealthPlan !== 'undefined' && !enableNewHealthPlan) {\r\n if (stateData && stateData.swhpDown === false) {\r\n try {\r\n const userDetails = yield select((state) => state.sso.userDetails);\r\n const hasHealthPlan = userDetails.Logins.indexOf('HealthPlan') > -1;\r\n if (userDetails && hasHealthPlan) {\r\n const response = yield call(healthPlan.getHealthPlanData, userDetails.access_token);\r\n yield put({ type: types.LOAD_HEALTHPLANDASHBOARD_SUCCESS, healthPlanDashboardData: response, isWaiting: false });\r\n logAPI(\"MBHWeb.HealthPlan.Dashboard.GetPlanData\", start, null);\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n if (response && response.status && response.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: response.status });\r\n logAPI(\"MMBHWeb.HealthPlan.Dashboard.GetPlanData.Failure.Login\", start, null, response);\r\n }\r\n else {\r\n yield put({ type: types.AJAX_CALL_ERROR, healthPlanError: response });\r\n logAPI(\"MBHWeb.HealthPlan.Dashboard.GetPlanData.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"healthPlanSaga: swhpDown\");\r\n }\r\n }\r\n}\r\n\r\nfunction* loadHealthPlanTileAction() {\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n const start = new Date();\r\n\r\n let healthPlanName = \"\";\r\n if (sessionData) {\r\n if (sessionData.hasSWHP)\r\n healthPlanName = 'SWHP';\r\n else if (sessionData.hasFirstCare)\r\n healthPlanName = 'FC';\r\n else if (sessionData.hasAAL)\r\n healthPlanName = 'AA';\r\n }\r\n try {\r\n if (domainData) {\r\n let isHealthPlanDown = false;\r\n if (domainData.hi || domainData.hri) {\r\n if (stateData && stateData.swhpDown === true) {\r\n isHealthPlanDown = true;\r\n console.log(\"healthPlanSaga: swhpDown\");\r\n }\r\n }\r\n else if (domainData.aal) {\r\n if (stateData && stateData.aalDown === true) {\r\n isHealthPlanDown = true;\r\n console.log(\"healthPlanSaga: aalDown\");\r\n }\r\n }\r\n if (domainData.t && !isHealthPlanDown && domainData.un) {\r\n const response = yield call(healthPlan.getHealthPlanTileData, domainData.t, domainData.un, healthPlanName);\r\n yield put({ type: types.LOAD_HEALTHPLAN_DATA_SUCCESS, HealthPlanTileData: response });\r\n logAPI(`MBHWeb.Saga.${healthPlanName}.DataTile.Success`, start, null);\r\n }\r\n }\r\n\r\n }\r\n catch (response) {\r\n console.error(response);\r\n if (response && response.status && response.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: response.status });\r\n logAPI(`MBHWeb.Saga.${healthPlanName}.DataTile.Failure.Login`, start, null, response);\r\n }\r\n else {\r\n yield put({ type: types.LOAD_HEALTHPLAN_DATA_FAILURE, healthPlanDataError: response });\r\n logAPI(`MBHWeb.Saga.${healthPlanName}.DataTile.Failure`, start, null, response);\r\n }\r\n }\r\n}\r\n\r\nfunction* handleLinkHealthPlanAccount(data) {\r\n const stateData = yield select((state) => state.common);\r\n const start = new Date();\r\n\r\n if (stateData && stateData.swhpDown === false) {\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n switch (data.type) {\r\n case types.LINK_HEALTHPLAN_ACCOUNT:\r\n let response = yield call(healthPlan.linkHPAccount, domainData.t, data.memberId, domainData.un, data.dob, data.ssn);\r\n if (response && response.MembershipProfile) {\r\n logAPI(\"MBHWeb.Saga.SWHP.Link.Success\", start, null, { payload: data, response });\r\n yield put({ type: types.LINK_HEALTHPLAN_ACCOUNT_SUCCESS, membershipProfile: response.MembershipProfile, isStandalone: data.isFromMobile ? true : false });\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.SWHP.Link.Failure\", start, null, { payload: data, response });\r\n yield put({ type: types.LINK_HEALTHPLAN_ACCOUNT_FAILURE, error: response && typeof response === 'string' ? response : response && response.Errors && response.Errors[0] && response.Errors[0].DisplayMessage ? response.Errors[0].DisplayMessage : \"We're unable to link your account.\"});\r\n }\r\n break;\r\n case types.LINK_HEALTHPLAN_ACCOUNT_SUCCESS:\r\n yield put({ type: types.REFRESH_TOKEN });\r\n yield put({ type: types.MEMBERSHIP_GET_SUCCESS, data: data.membershipProfile});\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.LINK_HEALTHPLAN_CLEAR_MESSAGE });\r\n }, 10000);\r\n }\r\n break;\r\n }\r\n }\r\n catch (exception) {\r\n console.error(exception);\r\n logAPI(\"MBHWeb.Saga.SWHP.Link.Failure\", start, null, { payload: data, error: exception });\r\n yield put({ type: types.LINK_HEALTHPLAN_ACCOUNT_FAILURE, error: exception && exception.message ? exception.message : \"Failed to link employee account.\" });\r\n }\r\n }\r\n else {\r\n console.log(\"healthSourceSaga: swhpDown\");\r\n }\r\n}\r\n\r\n\r\nfunction* handleUnlinkHealthPlanAccount(data) {\r\n const stateData = yield select((state) => state.common);\r\n const start = new Date();\r\n\r\n if (stateData && stateData.swhpDown === false) {\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n const memberId = data.MemberId ? data.MemberId : null;\r\n switch (data.type) {\r\n case types.UNLINK_HEALTHPLAN_ACCOUNT:\r\n let response = yield call(healthPlan.unLinkHPAccount, domainData.t, memberId, domainData.un);\r\n if (response?.MembershipProfile) {\r\n logAPI(\"MBHWeb.Saga.SWHP.UnLink.Success\", start, null, { response });\r\n yield put({ type: types.UNLINK_HEALTHPLAN_ACCOUNT_SUCCESS, membershipProfile: response.MembershipProfile, isStandalone: data.isFromMobile ? true : false });\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.SWHP.UnLink.Failure\", start, null, { response });\r\n yield put({ type: types.UNLINK_HEALTHPLAN_ACCOUNT_FAILURE, error: response && typeof response === 'string' ? response : response && response.Errors && response.Errors[0] && response.Errors[0].DisplayMessage ? response.Errors[0].DisplayMessage : \"We're unable to unlink your account.\" });\r\n }\r\n break;\r\n case types.UNLINK_HEALTHPLAN_ACCOUNT_SUCCESS:\r\n yield put({ type: types.MEMBERSHIP_GET_SUCCESS, data: data.membershipProfile });\r\n yield put({ type: types.REFRESH_TOKEN }); // this picks up the refresh token from domain now\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.UNLINK_HEALTHPLAN_CLEAR_MESSAGE });\r\n }, 10000);\r\n }\r\n\r\n break;\r\n\r\n }\r\n }\r\n catch (exception) {\r\n console.error(exception);\r\n logAPI(\"MBHWeb.Saga.SWHP.UnLink.Failure\", start, null, exception);\r\n yield put({ type: types.UNLINK_HEALTHPLAN_ACCOUNT_FAILURE, error: exception && exception.message ? exception.message : \"Failed to unlink health plan account.\" });\r\n }\r\n }\r\n else {\r\n console.log(\"healthSourceSaga: swhpDown\");\r\n }\r\n}\r\n\r\n\r\n\r\nfunction* linkAAAcountAction(data) {\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const start = new Date();\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n switch (data.type) {\r\n case types.LINK_AUTO_HP_ACCOUNT_START:\r\n if (domainData && domainData.t) {\r\n const userRole = data.payload.userRole ? data.payload.userRole : \"SWHP\";\r\n const response = yield call(healthPlan.linkAutoHPAccount, domainData.t, data.payload.providerKey, domainData.un, data.payload.loginProvider, userRole);\r\n if (response.status === 200) {\r\n yield put({ type: types.REFRESH_TOKEN });\r\n yield put({ type: types.LINK_AUTO_HP_ACCOUNT_SUCCESS });\r\n logAPI(`MBHWeb.Saga.${userRole}.AutoLink.Success`, start, null, { \"LoginProvider\": data.payload.loginProvider });\r\n }\r\n else {\r\n yield put({ type: types.LINK_AUTO_HP_ACCOUNT_FAILURE, linkError: response });\r\n let errorJson = { \"LoginProvider\": data.payload.loginProvider, \"error\": response };\r\n logAPI(`MBHWeb.Saga.${userRole}.AutoLink.Failure`, start, null, errorJson);\r\n }\r\n }\r\n break;\r\n case types.LINK_AA_ACCOUNT_START:\r\n if (domainData && domainData.t) {\r\n const logPayloadData = { ...data.payload, ssn: \"\" };\r\n try {\r\n const response = yield call(healthPlan.linkAAAccount, domainData.t, data.payload.memberId, domainData.un, data.payload.dob, data.payload.ssn);\r\n if (response?.MembershipProfile) {\r\n yield put({\r\n type: types.LINK_AA_ACCOUNT_UPDATE_TOKEN_SUCCESS, membershipProfile: response.MembershipProfile, isStandalone: data.payload.isStandalone || data.payload.isFromMobile ? true : false,\r\n memberId: response && response.memberNumber ? response.memberNumber : null\r\n });\r\n logAPI(\"MBHWeb.Saga.AA.Link.Success\", start, null, { payload: logPayloadData, response: response });\r\n } else if (response && response.Errors && response.Errors.length > 0) {\r\n const error = getLinkAAError(response.Errors[0]);\r\n yield put({ type: types.LINK_AA_ACCOUNT_FAILURE, linkError: error });\r\n yield put({ type: types.LINK_AA_ACCOUNT_ERROR_COUNT });\r\n logAPI(\"MBHWeb.Saga.AA.Link.Failure\", start, null, { payload: logPayloadData, response: response });\r\n }\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.AA.Link.Failure\", start, null, { payload: logPayloadData, error: error });\r\n }\r\n }\r\n break;\r\n case types.LINK_AA_ACCOUNT_UPDATE_TOKEN_SUCCESS:\r\n try {\r\n logAPI(\"MBHWeb.Saga.AA.Link.Tokenupdate\", start, null);\r\n yield put({ type: types.MEMBERSHIP_GET_SUCCESS, data: data.membershipProfile });\r\n yield put({ type: types.REFRESH_TOKEN });\r\n yield put({ type: types.LINK_AA_ACCOUNT_SUCCESS, memberId: data.memberId });\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.LINK_AA_ACCOUNT_CLEAR_MESSAGE });\r\n }, 10000);\r\n }\r\n } catch (error1) {\r\n console.log(error1);\r\n logAPI(\"MBHWeb.Saga.AA.Link.Tokenupdate.Error\", start, null, error1);\r\n }\r\n break;\r\n }\r\n }\r\n catch (response) {\r\n if (response && response.status && response.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: response.status });\r\n logAPI(\"MBHWeb.Saga.AA.Link.Failure.Login\", start, null, response);\r\n }\r\n else {\r\n yield put({ type: types.LINK_AA_ACCOUNT_FAILURE });\r\n logAPI(\"MBHWeb.Saga.AA.Link.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"healthPlanSaga: aalDown\");\r\n }\r\n}\r\n\r\nfunction* unLinkAAAcountAction(data) {\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const start = new Date();\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n switch (data.type) {\r\n case types.UNLINK_AA_ACCOUNT_START:\r\n if (domainData && domainData.t) {\r\n const response = yield call(healthPlan.unLinkAAAccount, domainData.t, data.payload.memberId, domainData.un);\r\n if (response?.MembershipProfile) {\r\n yield put({ type: types.UNLINK_AA_ACCOUNT_UPDATE_TOKEN_SUCCESS, membershipProfile: response.MembershipProfile, isFromMobile: data.payload.isFromMobile ? true : false });\r\n logAPI(\"MBHWeb.Saga.AA.UnLink.Success\", start, null);\r\n }\r\n else {\r\n if (response && response.Errors && response.Errors.length > 0) {\r\n const error = getUnLinkAAError(response.Errors[0]);\r\n yield put({ type: types.UNLINK_AA_ACCOUNT_FAILURE, unLinkAAError: error });\r\n }\r\n logAPI(\"MBHWeb.Saga.AA.UnLink.Failure\", start, null, response);\r\n }\r\n }\r\n break;\r\n case types.UNLINK_AA_ACCOUNT_UPDATE_TOKEN_SUCCESS:\r\n try {\r\n logAPI(\"MBHWeb.Saga.AA.UnLink.Tokenupdate\", start, null);\r\n yield put({ type: types.MEMBERSHIP_GET_SUCCESS, data: data.membershipProfile });\r\n yield put({ type: types.REFRESH_TOKEN });\r\n yield put({ type: types.UNLINK_AA_ACCOUNT_SUCCESS });\r\n if (!data.isFromMobile) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.UNLINK_AA_ACCOUNT_CLEAR_MESSAGE });\r\n }, 10000);\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n logAPI(\"MBHWeb.Saga.AA.UnLink.Tokenupdate.Error\", start, null, error);\r\n }\r\n break;\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n if (response && response.status && response.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: response.status });\r\n logAPI(\"MBHWeb.Saga.AA.UnLink.Failure.Login\", start, null, response);\r\n }\r\n else {\r\n yield put({ type: types.UNLINK_AA_ACCOUNT_FAILURE, unLinkAAError: getUnLinkAAError(null) });\r\n logAPI(\"MBHWeb.Saga.AA.UnLink.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"healthPlanSaga: aalDown\");\r\n }\r\n}\r\n\r\nfunction getLinkAAError(error) {\r\n if (error && error.Code) {\r\n switch (error.Code) {\r\n case \"data_mismatch\":\r\n case \"no_records_match\":\r\n return { __html: `We could not find a matching account. Please verify your information and try again. For assistance, call the DFW ConnectedCare Center at ${phoneNumber} and press 1.` };\r\n case \"multiple_records_match\":\r\n return { __html: `We could not find that account. For assistance, call the DFW ConnectedCare Center at ${phoneNumber} and press 1.` };\r\n case \"username_not_found\":\r\n return { __html: `${error.DisplayMessage}. Please try again or for assistance, call the DFW ConnectedCare Center at ${phoneNumber} and press 1.` };\r\n case \"memberid_not_found\":\r\n case \"member_not_found\":\r\n return { __html: `The member ID was not found. Please try again or for assistance, call the DFW ConnectedCare Center at ${phoneNumber} and press 1.` };\r\n case \"account_linking_failed\":\r\n case \"unhandled_exception\":\r\n return { __html: `We were unable to link your account. For assistance, call the DFW ConnectedCare Center at ${phoneNumber} and press 1.` };\r\n case \"login_already_exists\":\r\n return { __html: `You may have duplicate accounts. Call the MyBSWHealth technical help desk ${technicalHelpDeskHours} at ${phoneNumber2} to correct this.` };\r\n default:\r\n return {\r\n __html: `We were unable to link your account. For assistance, call the DFW ConnectedCare Center at ${phoneNumber} and press 1.`\r\n };\r\n }\r\n\r\n }\r\n}\r\n\r\nfunction getUnLinkAAError(error) {\r\n if (error && error.Code) {\r\n switch (error.Code) {\r\n case \"username_not_found\":\r\n case \"account_unlinking_failed\":\r\n case \"unhandled_exception\":\r\n return {\r\n __html: `We were unable to unlink your account. For assistance, call the DFW ConnectedCare Center at ${phoneNumber} and press 1.`\r\n };\r\n default:\r\n return {\r\n __html: `We were unable to unlink your account. For assistance, call the DFW ConnectedCare Center at ${phoneNumber} and press 1.`\r\n };\r\n }\r\n }\r\n return {\r\n __html: `We were unable to unlink your account.`\r\n };\r\n}\r\n\r\nfunction* linkFirstCareAccountAction(data) {\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const start = new Date();\r\n\r\n if (stateData) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(healthPlan.linkFirstCareAccount, domainData.t, domainData.un, data.dob, data.memberId);\r\n if (response && response.MembershipProfile) {\r\n try {\r\n yield put({ type: types.LINK_FIRST_CARE_ACCOUNT_SUCCESS });\r\n logAPI(\"MBHWeb.Saga.FirstCare.Link.Success\", new Date(), data);\r\n yield put({ type: types.MEMBERSHIP_GET_SUCCESS, data: response.MembershipProfile });\r\n yield put({ type: types.REFRESH_TOKEN });\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.LINK_FIRST_CARE_ACCOUNT_CLEAR });\r\n }, 10000);\r\n }\r\n }\r\n catch (error) {\r\n yield call(linkFirstCareAccountFailure, error, data);\r\n }\r\n }\r\n else {\r\n yield call(linkFirstCareAccountFailure, response, data);\r\n }\r\n }\r\n }\r\n catch (response) {\r\n if (response && response.status && response.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: response.status });\r\n logAPI(\"MBHWeb.Saga.FirstCare.Link.Failure.Login\", start, null, response);\r\n }\r\n else {\r\n yield call(linkFirstCareAccountFailure, response, data);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"firstCare link failed\");\r\n }\r\n}\r\n\r\nfunction* linkFirstCareAccountFailure(error, data = {}) {\r\n yield put({\r\n type: types.LINK_FIRST_CARE_ACCOUNT_FAILURE,\r\n error: error && typeof error === 'string' ? error : error && error.Errors && error.Errors[0] && error.Errors[0].DisplayMessage ? error.Errors[0].DisplayMessage : \"We're unable to link your account.\"\r\n });\r\n logAPI(\"MBHWeb.Saga.FirstCare.Link.Failure\", new Date(), null, { payload: data, error: error });\r\n}\r\n\r\nfunction* unlinkFirstCareAccountAction(data) {\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const start = new Date();\r\n\r\n if (stateData) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(healthPlan.unlinkFirstCareAccount, domainData.t, domainData.un, data.memberId);\r\n if (response && response.MembershipProfile) {\r\n try {\r\n yield put({ type: types.UNLINK_FIRST_CARE_ACCOUNT_SUCCESS });\r\n logAPI(\"MBHWeb.Saga.FirstCare.Unlink.Success\", new Date(), data);\r\n yield put({ type: types.MEMBERSHIP_GET_SUCCESS, data: response.MembershipProfile });\r\n yield put({ type: types.REFRESH_TOKEN });\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.UNLINK_FIRST_CARE_ACCOUNT_CLEAR });\r\n }, 10000);\r\n }\r\n }\r\n catch (error) {\r\n yield call(unlinkFirstCareAccountFailure, error);\r\n }\r\n }\r\n else {\r\n yield call(unlinkFirstCareAccountFailure, response);\r\n }\r\n }\r\n }\r\n catch (response) {\r\n if (response && response.status && response.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: response.status });\r\n logAPI(\"MBHWeb.Saga.FirstCare.Unlink.Failure.Login\", start, null, response);\r\n }\r\n else {\r\n yield call(unlinkFirstCareAccountFailure, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"firstCare unlink failed\");\r\n }\r\n}\r\n\r\nfunction* unlinkFirstCareAccountFailure(error) {\r\n yield put({\r\n type: types.UNLINK_FIRST_CARE_ACCOUNT_FAILURE,\r\n error: error && typeof error === 'string' ? error : error && error.Errors && error.Errors[0] && error.Errors[0].DisplayMessage ? error.Errors[0].DisplayMessage : \"We're unable to unlink your account.\"\r\n });\r\n logAPI(\"MBHWeb.Saga.FirstCare.Unlink.Failure\", new Date(), null, error);\r\n}\r\n\r\nfunction* linkDartAccountAction(action) {\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const start = new Date();\r\n const data = action.data;\r\n if (stateData) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(healthPlan.linkDartAccount, domainData.t, domainData.un, data.dob);\r\n if (response && response.MembershipProfile) {\r\n try {\r\n yield all([\r\n put({ type: types.LINK_DART_ACCOUNT_SUCCESS, data: response.MembershipProfile }),\r\n put({ type: types.MEMBERSHIP_GET_SUCCESS, data: response.MembershipProfile })\r\n ]);\r\n\r\n logAPI(\"MBHWeb.Saga.Dart.Link.Success\", new Date(), data);\r\n yield put({ type: types.REFRESH_TOKEN });\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.LINK_DART_ACCOUNT_CLEAR });\r\n }, 10000);\r\n }\r\n //optional Callback if needed\r\n if (action && action.callback) {\r\n action.callback(\"success\", response.MembershipProfile);\r\n }\r\n }\r\n catch (error) {\r\n yield call(linkDartAccountFailure, error, data);\r\n }\r\n }\r\n else {\r\n yield call(linkDartAccountFailure, response, data);\r\n }\r\n }\r\n }\r\n catch (response) {\r\n if (response && response.status && response.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: response.status });\r\n logAPI(\"MBHWeb.Saga.Dart.Link.Failure.Login\", start, null, response);\r\n }\r\n else {\r\n yield call(linkDartAccountFailure, response, data);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"dart link failed\");\r\n }\r\n}\r\n\r\nfunction* linkDartAccountFailure(error, data = {}) {\r\n yield put({\r\n type: types.LINK_DART_ACCOUNT_FAILURE,\r\n error: error && typeof error === 'string' ? error : error && error.Errors && error.Errors[0] && error.Errors[0].DisplayMessage ? error.Errors[0].DisplayMessage : \"We're unable to link your account.\"\r\n });\r\n logAPI(\"MBHWeb.Saga.Dart.Link.Failure\", new Date(), null, { payload: data, error: error });\r\n}\r\n\r\nfunction* linkWACOAccountAction(action) {\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const start = new Date();\r\n const data = action.data;\r\n if (stateData) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(healthPlan.linkWACOAccount, domainData.t, domainData.un, data.dob);\r\n if (response && response.MembershipProfile) {\r\n try {\r\n yield all([\r\n put({ type: types.LINK_WACO_ACCOUNT_SUCCESS, data: response.MembershipProfile }),\r\n put({ type: types.MEMBERSHIP_GET_SUCCESS, data: response.MembershipProfile })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.WACO.Link.Success\", new Date(), data);\r\n yield put({ type: types.REFRESH_TOKEN });\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.LINK_WACO_ACCOUNT_CLEAR });\r\n }, 10000);\r\n }\r\n //optional Callback if needed\r\n if (action && action.callback) {\r\n action.callback(\"success\", response.MembershipProfile);\r\n }\r\n }\r\n catch (error) {\r\n yield call(linkWACOAccountFailure, error, data);\r\n }\r\n }\r\n else {\r\n yield call(linkWACOAccountFailure, response, data);\r\n }\r\n }\r\n }\r\n catch (response) {\r\n if (response && response.status && response.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: response.status });\r\n logAPI(\"MBHWeb.Saga.WACO.Link.Failure.Login\", start, null, response);\r\n }\r\n else {\r\n yield call(linkWACOAccountFailure, response, data);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"WACO link failed\");\r\n }\r\n}\r\n\r\nfunction* linkWACOAccountFailure(error, data = {}) {\r\n yield put({\r\n type: types.LINK_WACO_ACCOUNT_FAILURE,\r\n error: error && typeof error === 'string' ? error : error && error.Errors && error.Errors[0] && error.Errors[0].DisplayMessage ? error.Errors[0].DisplayMessage : \"We're unable to link your account.\"\r\n });\r\n logAPI(\"MBHWeb.Saga.WACO.Link.Failure\", new Date(), null, { payload: data, error: error });\r\n}\r\n\r\nfunction* unlinkDartAccountAction(data) {\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const start = new Date();\r\n\r\n if (stateData) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(healthPlan.unlinkDartAccount, domainData.t, domainData.un);\r\n if (response && response.MembershipProfile) {\r\n try {\r\n yield all([\r\n put({ type: types.UNLINK_DART_ACCOUNT_SUCCESS, data: response.MembershipProfile }),\r\n put({ type: types.MEMBERSHIP_GET_SUCCESS, data: response.MembershipProfile })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.Dart.Unlink.Success\", new Date(), data);\r\n yield put({ type: types.REFRESH_TOKEN });\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.UNLINK_DART_ACCOUNT_CLEAR });\r\n }, 10000);\r\n }\r\n }\r\n catch (error) {\r\n yield call(unlinkDartAccountFailure, error);\r\n }\r\n }\r\n else {\r\n yield call(unlinkDartAccountFailure, response);\r\n }\r\n }\r\n }\r\n catch (response) {\r\n if (response && response.status && response.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: response.status });\r\n logAPI(\"MBHWeb.Saga.Dart.Unlink.Failure.Login\", start, null, response);\r\n }\r\n else {\r\n yield call(unlinkDartAccountFailure, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"Dart unlink failed\");\r\n }\r\n}\r\n\r\nfunction* unlinkDartAccountFailure(error) {\r\n yield put({\r\n type: types.UNLINK_DART_ACCOUNT_FAILURE,\r\n error: error && typeof error === 'string' ? error : error && error.Errors && error.Errors[0] && error.Errors[0].DisplayMessage ? error.Errors[0].DisplayMessage : \"We're unable to unlink your account.\"\r\n });\r\n logAPI(\"MBHWeb.Saga.Dart.Unlink.Failure\", new Date(), null, error);\r\n}\r\n\r\nfunction* unlinkWacoAccountAction(data) {\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const start = new Date();\r\n\r\n if (stateData) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(healthPlan.unlinkWacoAccount, domainData.t, domainData.un);\r\n if (response && response.MembershipProfile) {\r\n try {\r\n yield all([\r\n put({ type: types.UNLINK_WACO_ACCOUNT_SUCCESS, data: response.MembershipProfile }),\r\n put({ type: types.MEMBERSHIP_GET_SUCCESS, data: response.MembershipProfile })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.Waco.Unlink.Success\", new Date(), data);\r\n yield put({ type: types.REFRESH_TOKEN });\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.UNLINK_WACO_ACCOUNT_CLEAR });\r\n }, 10000);\r\n }\r\n }\r\n catch (error) {\r\n yield call(unlinkWacoAccountFailure, error);\r\n }\r\n }\r\n else {\r\n yield call(unlinkWacoAccountFailure, response);\r\n }\r\n }\r\n }\r\n catch (response) {\r\n if (response && response.status && response.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: response.status });\r\n logAPI(\"MBHWeb.Saga.Waco.Unlink.Failure.Login\", start, null, response);\r\n }\r\n else {\r\n yield call(unlinkWacoAccountFailure, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"Waco unlink failed\");\r\n }\r\n}\r\n\r\nfunction* unlinkWacoAccountFailure(error) {\r\n yield put({\r\n type: types.UNLINK_WACO_ACCOUNT_FAILURE,\r\n error: error && typeof error === 'string' ? error : error && error.Errors && error.Errors[0] && error.Errors[0].DisplayMessage ? error.Errors[0].DisplayMessage : \"We're unable to unlink your account.\"\r\n });\r\n logAPI(\"MBHWeb.Saga.Waco.Unlink.Failure\", new Date(), null, error);\r\n}","import * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* getAuthorizations(params) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n const domainData = yield select((state) => state.domain);\r\n const memid = domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.AuthorizationsApi.getAuthorizationsList, domainData.t, memid, params.startDate, params.endDate); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Authorizations.GetAuthorizationsList.Get\", start, null);\r\n yield put({ type: types.HP_GET_AUTHORIZATIONS_LIST_SUCCESS, authorizations: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Authorizations.GetAuthorizationsList.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_AUTHORIZATIONS_LIST_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Authorizations.GetAuthorizationsList.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getAuthorizationDetails(params) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n const domainData = yield select((state) => state.domain);\r\n const memid = domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.AuthorizationsApi.getAuthorizationDetail, domainData.t, memid, params.authorizationHccId); //t = access token, aai = American \r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Authorizations.GetAuthorizationDetail.Get\", start, null);\r\n yield put({ type: types.HP_GET_AUTHORIZATION_DETAIL_SUCCESS, authorizationDetail: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Authorizations.GetAuthorizationDetail.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_AUTHORIZATION_DETAIL_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Authorizations.GetAuthorizationDetail.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}","import * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* getUsage(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n let memberId = params.memberId;\r\n let asOfDate = params.asOfDate || new Date();\r\n let includeAll = params.includeAll || false;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData.t && memberId) {//Bug-34585\r\n const response = yield call(hpServicesApi.BenefitsApi.getAccumulators, domainData.t, memberId, asOfDate, includeAll); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetUsage\", start, null);\r\n yield put({ type: types.HP_GET_ACCUMULATOR_DATA_SUCCESS, usage: response, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetUsage.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_ACCUMULATOR_DATA_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetUsage.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getServiceCategories(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n let memberId = params.memberId || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n let asOfDate = params.asOfDate || new Date();\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData.t && memberId) {//Bug-34585\r\n const response = yield call(hpServicesApi.BenefitsApi.getServiceCategories, domainData.t, memberId, asOfDate); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetServiceCategories\", start, null);\r\n yield put({ type: types.HP_GET_SERVICE_CATEGORIES_SUCCESS, serviceCategories: response, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetServiceCategories.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_SERVICE_CATEGORIES_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetServiceCategories.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getBenefitPlans(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n let memberId = params.memberId || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData.t && memberId) {//Bug-34585\r\n const response = yield call(hpServicesApi.BenefitsApi.getBenefitPlans, domainData.t, memberId); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetBenefitPlans\", start, null);\r\n yield put({ type: types.HP_GET_BENEFIT_PLANS_SUCCESS, benefitPlans: response, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.HP_GET_BENEFIT_PLANS_FAILURE, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetBenefitPlans.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_BENEFIT_PLANS_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetBenefitPlans.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getBenefitPlanDetail(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(hpServicesApi.BenefitsApi.getPlanDetails, domainData.t, params.memId); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetPlanDetail\", start, null);\r\n yield put({ type: types.HP_GET_BENEFIT_PLAN_DETAIL_SUCCESS, planDetail: response, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetPlanDetail.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_BENEFIT_PLAN_DETAIL_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetPlanDetail.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getIsMemberDPCFlag(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(hpServicesApi.BenefitsApi.getIsMemberDPCFlag, domainData.t, params.memberId); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetPlanDetail\", start, null);\r\n yield put({ type: types.HP_GET_IS_MEMBER_DPC_SUCCESS, isMemberDPC: response, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetPlanDetail.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_IS_MEMBER_DPC_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetPlanDetail.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n","import * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* getClaims(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n const memid = domainData.aai || domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.ClaimsApi.getClaimsList, domainData.t, memid, params.startDate, params.endDate); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Claims.GetClaimsList.Get\", start, null);\r\n yield put({ type: types.HP_GET_CLAIMS_LIST_SUCCESS, claims: response, isFetching: false });\r\n\r\n //if (domainData && !domainData.hpt && domainData.t && domainData.aai) {\r\n // const response = yield call(getClaimsList, domainData.t, domainData.aai); //t = access token, aai = American Airlines id\r\n // logAPI(\"MBHWeb.Saga.WebTPA.Claims.GetClaimsList.Get\", start, null);\r\n // yield put({ type: types.HP_GET_CLAIMS_LIST_SUCCESS, claims: response, isFetching: false });\r\n //} else if (domainData && domainData.hpt && domainData.hpid) {\r\n\r\n //}\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Claims.GetClaimsList.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_CLAIMS_LIST_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Claims.GetClaimsList.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getClaimDetails(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n const memid = domainData.aai || domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n //if (domainData && domainData.t && domainData.aai) {\r\n //const response = yield call(getClaimDetail, domainData.t, domainData.aai, params.claimId); //t = access token, aai = American Airlines id\r\n const response = yield call(hpServicesApi.ClaimsApi.getClaimDetail, domainData.t, memid, params.claimId); //t = access token, aai = American \r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Claims.GetClaimDetail.Get\", start, null);\r\n yield put({ type: types.HP_GET_CLAIM_DETAIL_SUCCESS, claimDetail: response, isFetching: false });\r\n //}\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Claims.GetClaimDetail.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_CLAIM_DETAIL_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Claims.GetClaimDetail.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* submitClaimAppeal(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData && domainData.t) {//Bug-34585\r\n const response = yield call(hpServicesApi.ClaimsApi.submitClaimAppeal, domainData.t, params.relatedClaims, params.relatedMembers, params.relatedUserAccountName, params.description); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Claims.SubmitClaimAppeal.Get\", start, null);\r\n yield put({ type: types.HP_SUBMIT_CLAIM_APPEAL_SUCCESS, success: response.success, issueId: response.issueId, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Claims.SubmitClaimAppeal.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_SUBMIT_CLAIM_APPEAL_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Claims.SubmitClaimAppeal.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}","import * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* getGroupedProcedures(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.EstimatorApi.getGroupedProcedures, domainData.t, params.MemberNumber);\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Estimator.GetGroupedProcedures.Get\", start, null);\r\n yield put({ type: types.HP_GET_GROUPED_PROCEDURES_SUCCESS, groupedProcedures: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Estimator.GetGroupedProcedures.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_GROUPED_PROCEDURES_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Estimator.GetGroupedProcedures.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\nexport function* getGroupedProceduresByCPT(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.EstimatorApi.getGroupedProceduresByCPT, domainData.t, params.MemberNumber);\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Estimator.GetGroupedProceduresByCPT.Get\", start, null);\r\n yield put({ type: types.HP_GET_GROUPED_PROCEDURES_BY_CPT_SUCCESS, cptProcedures: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Estimator.GetGroupedProcedures.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_GROUPED_PROCEDURES_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Estimator.GetGroupedProcedures.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getProcedureCost(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n let response;\r\n response = yield call(hpServicesApi.EstimatorApi.getProcedureCostValues2, domainData.t, params.MemberNumber,\r\n params.GroupDescript);\r\n \r\n \r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Estimator.GetProceduresCost.Get\", start, null);\r\n\r\n let groupDescript = params.GroupDescript?.group_descript;\r\n console.log(groupDescript);\r\n let codes = groupDescript.split('|');\r\n let cptCode = null;\r\n if (codes.length > 1) {\r\n groupDescript = codes[0];\r\n cptCode = codes[1].trim();\r\n console.log(groupDescript);\r\n console.log(cptCode);\r\n }\r\n const copayValue = response.COPAY == undefined ? response.copay : response.COPAY;\r\n const coinsuranceValue = response.COINSURANCE == undefined ? response.coinsurance : response.COINSURANCE;\r\n const hasDeductibleValue = response.HAS_DEDUCTIBLE == undefined ? response.haS_DEDUCTIBLE : response.HAS_DEDUCTIBLE;\r\n const deductibleRemainingValue = response.DEDUCTIBLE_REMAINING == undefined ? response.deductiblE_REMAINING : response.DEDUCTIBLE_REMAINING ;\r\n const oopRemainingValue = response.OOP_REMAINING == undefined ? response.ooP_REMAINING : response.OOP_REMAINING;\r\n\r\n const costResponse = yield call(hpServicesApi.EstimatorApi.getProceduresCost, domainData.t, params.ProcedureId,\r\n params.GroupDescript?.group_descript, cptCode, copayValue, coinsuranceValue, hasDeductibleValue, deductibleRemainingValue,\r\n oopRemainingValue);\r\n yield put({ type: types.HP_GET_PROCEDURE_COST_SUCCESS, procedureCost: costResponse, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Estimator.GetGroupedProcedures.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_PROCEDURE_COST_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Estimator.GetGroupedProcedures.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}","import * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* getDocumentDetail(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.DocumentsApi.getDocumentDetails, domainData.t, params.fileId); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Documents.GetDocumentDetails.Get\", start, null);\r\n yield put({ type: types.HP_GET_DOCUMENT_DETAIL_SUCCESS, docDetails: response, docName: params.fileName, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Documents.GetDocumentDetails.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_DOCUMENT_DETAIL_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Documents.GetDocumentDetails.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getBenefitDocuments(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData.t && params.planId) {//Bug-34585\r\n const response = yield call(hpServicesApi.DocumentsApi.getBenefitDocuments, domainData.t, params.planId, params.memId); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetBenefitDocuments\", start, null);\r\n yield put({ type: types.HP_GET_BENEFIT_DOCUMENTS_SUCCESS, benefitDocuments: response, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.HP_GET_BENEFIT_DOCUMENTS_FAILURE, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetBenefitDocuments.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_BENEFIT_DOCUMENTS_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetBenefitDocuments.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getBenefitDocument(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData.t && params.documentName) {//Bug-34585\r\n const response = yield call(hpServicesApi.DocumentsApi.getBenefitDocument, domainData.t, params.documentName); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetBenefitDocument\", start, null);\r\n yield put({ type: types.HP_GET_BENEFIT_DOCUMENT_SUCCESS, benefitDocumentData: response, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.HP_GET_BENEFIT_DOCUMENT_FAILURE, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetBenefitDocument.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_BENEFIT_DOCUMENT_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Benefits.GetBenefitDocument.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getAuthorizationApprovalLetter(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.DocumentsApi.getAuthorizationApprovalLetterUrl, domainData.t, params.authorizationHccId); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServicesSaga.Authorizations.GetAuthorizationApprovalLetterUrl.Get\", start, null);\r\n yield put({ type: types.HP_GET_AUTHORIZATION_APPROVAL_LETTER_SUCCESS, authorizationApprovalLetter: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Authorizations.GetAuthorizationApprovalLetterUrl.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_EOB_DOCUMENT_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Authorizations.GetAuthorizationApprovalLetterUrl.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getDocuments() {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.DocumentsApi.getDocumentsList, domainData.t); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Documents.GetDocumentsList.Get\", start, null);\r\n yield put({ type: types.HP_GET_DOCUMENTS_LIST_SUCCESS, docs: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Documents.GetDocumentsList.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_DOCUMENTS_LIST_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Documents.GetDocumentsList.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getInvoicePDF(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.DocumentsApi.getInvoicePDF, domainData.t, params.MemberId, params.InvoiceNumber); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Documents.GetInvoicePDF.Get\", start, null);\r\n yield put({ type: types.HP_GET_INVOICE_PDF_SUCCESS, invoicePDF: response, invoicePDFName: params.InvoiceNumber, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Documents.GetInvoicePDF.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_INVOICE_PDF_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Documents.GetInvoicePDF.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\n\r\n\r\nexport function* requestNewIdCard(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.DocumentsApi.requestIdCard, domainData.t, params.memberId); //t = access token\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.IdCard.RequestNewIdCard.Post\", start, null);\r\n yield put({ type: types.HP_REQUEST_NEW_IDCARD_SUCCESS, response: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.IdCard.RequestNewIdCard.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_REQUEST_NEW_IDCARD_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.IdCard.RequestNewIdCard.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getEob(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.DocumentsApi.getEobDocument, domainData.t, params.memId, params.claimId); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServicesSaga.Claims.GetEobDocument.Get\", start, null);\r\n yield put({ type: types.HP_GET_EOB_DOCUMENT_SUCCESS, eobDocument: response, isFetching: false });\r\n\r\n //if (domainData && domainData.t && domainData.aai && params.claimId) {\r\n // const response = yield call(getEobDocument, domainData.t, domainData.aai, params.claimId); //t = access token, aai = American Airlines id\r\n // logAPI(\"MBHWeb.Saga.HealthPlanServices.Claims.GetEobDocument.Get\", start, null);\r\n // yield put({ type: types.HP_GET_EOB_DOCUMENT_SUCCESS, eobDocument: response, isFetching: false });\r\n //}\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Claims.GetEobDocument.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_EOB_DOCUMENT_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Claims.GetEobDocument.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getIdCardPdf(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n let memberId = params.memberId || domainData.aai;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData && domainData.t && memberId) {\r\n const response = yield call(hpServicesApi.DocumentsApi.getIdCardPdf, domainData.t, memberId);\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.IdCard.GetIdCardPdf.Get\", start, null);\r\n yield put({ type: types.HP_GET_IDCARD_SUCCESS, idCardPdf: response, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.IdCard.GetIdCardPdf.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_IDCARD_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.IdCard.GetIdCardPdf.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getIdCardImages(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n let memberId = params.memberId || domainData.aai;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData && domainData.t && memberId) {\r\n const response = yield call(hpServicesApi.DocumentsApi.getIdCardImage, domainData.t, memberId);\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.IdCard.GetIdCardImages.Get\", start, null);\r\n yield put({ type: types.HP_GET_IDCARD_IMAGE_SUCCESS, idCardImage: response, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.IdCard.GetIdCardImages.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_IDCARD_IMAGE_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.IdCard.GetIdCardImages.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getForm(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.DocumentsApi.getForm, domainData.t, params.formName); //t = access token\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Documents.GetForm.Get\", start, null);\r\n yield put({ type: types.HP_GET_FORM_SUCCESS, form: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Documents.GetForm.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_FORM_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Documents.GetFORM.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}","import * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* getInvoices(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n const memid = domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.subscriptionHccId;\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.InvoiceApi.getInvoicesList, domainData.t, memid, params.startDate, params.endDate);\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Invoices.GetInvoices.Get\", start, null);\r\n yield put({ type: types.HP_GET_INVOICES_LIST_SUCCESS, invoices: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Invoices.GetInvoices.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_INVOICES_LIST_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Invoices.GetInvoices.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getInvoiceDetails(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n //const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.InvoiceApi.getInvoiceDetails, domainData.t, params.invoiceId);\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Invoices.GetInvoicesDetails.Get\", start, null);\r\n yield put({ type: types.HP_GET_INVOICE_DETAIL_SUCCESS, invoiceDetails: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Invoices.GetInvoicesDetails.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_INVOICE_DETAIL_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Invoices.GetInvoicesDetails.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getInvoiceAdjustments(params) {\r\n\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n const domainData = yield select((state) => state.domain);\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.InvoiceApi.getInvoiceAdjustments, domainData.t, params.invoiceId);\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Invoices.GetInvoicesAdjustments.Get\", start, null);\r\n yield put({ type: types.HP_GET_INVOICE_ADJUSTMENTS_SUCCESS, invoiceAdjustments: response, isFetching: false });\r\n }\r\n catch (response) {\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.WebTPA.Invoices.GetInvoicesAdjustments.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_INVOICE_DETAIL_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.WebTPA.Invoices.GetInvoicesAdjustments.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getDentalInvoiceDetails(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n //const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.InvoiceApi.getDentalInvoiceDetails, domainData.t, params.memberId);\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Invoices.GetDentalInvoiceDetails.Get\", start, null);\r\n yield put({ type: types.HP_GET_DENTAL_INVOICE_DETAIL_SUCCESS, dentalInvoiceDetails: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Invoices.GetDentalInvoiceDetails.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else if (response.status === 417) {\r\n yield put({ type: types.HP_GET_DENTAL_INVOICE_DETAIL_FAILURE, error: \"Member Has No Dental Contract\" });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Invoices.DetDentalInvoiceDetails.Failure\", start, null, response); }\r\n else {\r\n yield put({ type: types.HP_GET_DENTAL_INVOICE_DETAIL_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Invoices.DetDentalInvoiceDetails.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}","import * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* getMembers() {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n const memid = domainData.aai || domainData.hi || (sessionData.healthPlanUserProfile ? sessionData.healthPlanUserProfile.memberUserClaims.memberHccId : null);\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(hpServicesApi.MemberApi.getListOfMembers, domainData.t, memid); //t = access token, aai = American Airlines id\r\n //response.map((member) => {\r\n // //if (member.TermDate) {\r\n // // //If current time is between Effective and Term then active, else if before then pending, else if not between or before then terminated\r\n // // member.Status = moment().startOf('day').isBetween(moment(member.EffectiveDate, \"YYYY-MM-DD\").startOf('day'), moment(member.TermDate, \"YYYY-MM-DD\").endOf('day')) ? \"Active\"\r\n // // : moment().isBefore(moment(member.EffectiveDate).startOf('day')) ? \"Pending\" : \"Terminated\";\r\n // //} else {\r\n // // //If current time is before Effective then pending, else if not before and no term date then active\r\n // // member.Status = moment().startOf('day').isBefore(moment(member.EffectiveDate, \"YYYY-MM-DD\").startOf('day')) ? \"Pending\" : \"Active\";\r\n // //}\r\n // member.Status = \"Active\"; //remove when status is added to API\r\n // return member;\r\n //})\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.GetMembersList.Get\", start, null);\r\n yield put({ type: types.HP_GET_MEMBERS_LIST_SUCCESS, membersList: response, currentMemberId: memid, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.GetMembersList.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_MEMBERS_LIST_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.GetMembersList.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getUserProfile(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const memid = params.memberId || domainData.aai || domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(hpServicesApi.MemberApi.getMemberProfile, domainData.t, memid); //t = access token\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.GetMembersProfile.Get\", start, null);\r\n yield put({ type: types.HP_GET_PROFILE_SUCCESS, userProfile: response, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.GetMembersProfile.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_PROFILE_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.GetMembersProfile.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getSubscription() {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n const memid = domainData.aai || domainData.hi ||sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(hpServicesApi.MemberApi.getSubscription, domainData.t, memid); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.GetSubscription.Get\", start, null);\r\n yield put({ type: types.HP_GET_SUBSCRIPTION_SUCCESS, subscription: response, currentMemberId: memid, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.GetSubscription.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_SUBSCRIPTION_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.GetSubscription.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* updateMemberAddress(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n const memid = domainData.aai || domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(hpServicesApi.MemberApi.updateMemberAddress, domainData.t, memid, params.email, params.address1, params.address2, params.city, params.state, params.zip, params.phone); //t = access token\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.UpdateMemberAddress.Get\", start, null);\r\n yield put({ type: types.HP_UPDATE_MEMBER_ADDRESS_SUCCESS, updateAddressResponse: response, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.UpdateMemberAddress.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_UPDATE_MEMBER_ADDRESS_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.UpdateMemberAddress.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getCorrespondenceEmailAddress(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n const memid = domainData.aai || domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(hpServicesApi.MemberApi.getCorrespondenceEmailAddress, domainData.t, memid); //t = access token\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.GetCorrespondenceEmailAddress.Get\", start, null);\r\n yield put({ type: types.HP_GET_CORR_EMAIL_ADDRESS_SUCCESS, corrEmailAddress: response, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.GetCorrespondenceEmailAddress.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_CORR_EMAIL_ADDRESS_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Members.GetCorrespondenceEmailAddress.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}","import * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* getUserAccountSettings() {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n //if (domainData && domainData.t && domainData.aai) {\r\n const response = yield call(hpServicesApi.NotificationPreferencesApi.getUserAccountSettings, domainData.t); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.NotificationPreferences.GetUserAccountSettings.Get\", start, null);\r\n yield put({ type: types.HP_GET_NOTIFICATION_PREFERENCES_SUCCESS, notificationPreferences: response, isFetching: false });\r\n //}\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.NotificationPreferences.GetUserAccountSettings.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_NOTIFICATION_PREFERENCES_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.NotificationPreferences.GetUserAccountSettings.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* updateUserAccountSettings(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n //if (domainData && domainData.t && domainData.aai) {\r\n const response = yield call(hpServicesApi.NotificationPreferencesApi.updateUserAccountSettings, domainData.t, params.requestBody); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.NotificationPreferences.UpdateUserAccountSettings.Update\", start, null);\r\n yield put({ type: types.HP_UPDATE_NOTIFICATION_PREFERENCES_SUCCESS, notificationPreferences: response, isFetching: false });\r\n //}\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.NotificationPreferences.UpdateUserAccountSettings.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_UPDATE_NOTIFICATION_PREFERENCES_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.NotificationPreferences.UpdateUserAccountSettings.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* triggerPaperDocumentPrint(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n //if (domainData && domainData.t && domainData.aai) {\r\n const response = yield call(hpServicesApi.NotificationPreferencesApi.triggerPaperDocumentPrint, domainData.t, params.correspondenceTypeId, params.memberId, params.username, params.requestDate); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.NotificationPreferences.TriggerPaperDocumentPrint.Update\", start, null);\r\n yield put({ type: types.HP_TRIGGER_PAPER_DOCUMENT_SUCCESS, triggerPaperDocument: response, isFetching: false });\r\n //}\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.NotificationPreferences.TriggerPaperDocumentPrint.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_TRIGGER_PAPER_DOCUMENT_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.NotificationPreferences.TriggerPaperDocumentPrint.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}","import * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* getOtherCoverage(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n let memberId = domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n //if (domainData && domainData.t && domainData.aai) {\r\n const response = yield call(hpServicesApi.OtherCoverageApi.getOtherCoverage, domainData.t, memberId); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.OtherCoverage.GetOtherCoverage.Get\", start, null);\r\n yield put({ type: types.HP_GET_OTHER_COVERAGE_SUCCESS, otherCoverage: response, isFetching: false });\r\n //}\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.OtherCoverage.GetOtherCoverage.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_OTHER_COVERAGE_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.OtherCoverage.GetOtherCoverage.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\n\r\nexport function* updateOtherCoverage(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n let memberId = domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n //if (domainData && domainData.t && domainData.aai) {\r\n const response = yield call(hpServicesApi.OtherCoverageApi.updateOtherCoverage, domainData.t, memberId, params.subName, params.subBirthDate, params.subGender, params.rltpToSub, params.policyType, params.mbi, params.coverageType,\r\n params.planName, params.altPolicyNum, params.groupName, params.groupNumber, params.priority, params.isCourtOrdered, params.isRetiree, params.companyName, params.address, params.address2, params.city, params.state, params.zip, params.area, params.phoneNumber, params.extension, params.startDate, params.policyId); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.OtherCoverage.UpdateOtherCoverage.Post\", start, null);\r\n yield put({ type: types.HP_UPDATE_OTHER_COVERAGE_SUCCESS, otherCoverageRequestNumber: response, isFetching: false });\r\n //}\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.OtherCoverage.UpdateOtherCoverage.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_UPDATE_OTHER_COVERAGE_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.OtherCoverage.UpdateOtherCoverage.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}","//getSupportNoticeEvents\r\nimport * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* getSupportNotifications(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n if (domainData && domainData.t) {\r\n const response = yield call(hpServicesApi.ProcessControlEventsApi.getSupportNoticeEvents, domainData.t, params.memberId);\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.ProcessControl.GetSupportNotifications\", start, null);\r\n yield put({ type: types.HP_GET_SUPPORT_NOTIFICATION_SUCCESS, supportMessage: response[0].InProgressMessage, isFetching: false });\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.ProcessControl.GetSupportNotifications.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_SUPPORT_NOTIFICATION_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.ProcessControl.GetSupportNotifications.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}","import * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* ssoPharmacyBenefits() {\r\n const sessionData = yield select((state) => state.session);\r\n const swhp = yield select((state) => state.domain.hi);\r\n\r\n if ((sessionData.healthPlanUserProfile && sessionData.healthPlanUserProfile.roles.includes(hpServicesApi.SsoApi.PortalRoles.optumRXSsoUsers))) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.optumRX, false);\r\n } else if (sessionData.healthPlanUserProfile && sessionData.healthPlanUserProfile.roles.includes(hpServicesApi.SsoApi.PortalRoles.navitusSsoUsers)) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.navitus, false);\r\n }\r\n else if (swhp) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.optumRX, true);\r\n }\r\n}\r\n\r\nexport function* ssoFirstCarePlus() {\r\n const sessionData = yield select((state) => state.session);\r\n const swhp = yield select((state) => state.domain.hi);\r\n if (sessionData.healthPlanUserProfile) {\r\n console.log(\"healthPlanUserProfile.roles:\");\r\n console.log(sessionData.healthPlanUserProfile.roles);\r\n if (sessionData.healthPlanUserProfile.roles.includes(hpServicesApi.SsoApi.PortalRoles.alereSsoUsers)) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.alere, false);\r\n } else if (sessionData.healthPlanUserProfile.roles.includes(hpServicesApi.SsoApi.PortalRoles.webMDSsoUsers)) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.webMD, false);\r\n }\r\n }\r\n else if (swhp) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.webMD, true);\r\n }\r\n}\r\n\r\nexport function* ssoNaturallySlim() {\r\n const sessionData = yield select((state) => state.session);\r\n const swhp = yield select((state) => state.domain.hi);\r\n\r\n if ((sessionData.healthPlanUserProfile && sessionData.healthPlanUserProfile.roles.includes(hpServicesApi.SsoApi.PortalRoles.naturallySlimSsoUsers))) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.naturallySlim, false);\r\n }\r\n else if (swhp) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.naturallySlim, true);\r\n }\r\n}\r\n\r\nexport function* ssoThrive() {\r\n const sessionData = yield select((state) => state.session);\r\n const swhp = yield select((state) => state.domain.hi);\r\n const healthPlanNetworkCode = yield select((state) => state.domain.nc);\r\n\r\n if (swhp && (healthPlanNetworkCode && healthPlanNetworkCode.includes(\"BSWE\"))) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.thrive, true);\r\n }\r\n}\r\n\r\nexport function* ssoInvoicesandPayments(params) {\r\n const sessionData = yield select((state) => state.session);\r\n const swhp = yield select((state) => state.domain.hi);\r\n\r\n if ((sessionData.healthPlanUserProfile && sessionData.healthPlanUserProfile.roles.includes(hpServicesApi.SsoApi.PortalRoles.invoicePaymentSsoUsers))) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.invoicePayments, false);\r\n }\r\n else if (swhp) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.boa, true, params.contractNumber);\r\n }\r\n}\r\n\r\nexport function* ssoTelemedicine() {\r\n const sessionData = yield select((state) => state.session);\r\n const swhp = yield select((state) => state.domain.hi);\r\n\r\n if ((sessionData.healthPlanUserProfile && sessionData.healthPlanUserProfile.roles.includes(hpServicesApi.SsoApi.PortalRoles.telemedicineSsoUsers))) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.telemedicine, false);\r\n }\r\n else if (swhp) {\r\n yield call(ssoToTarget, hpServicesApi.SsoApi.SsoTargets.mdLive, true);\r\n }\r\n}\r\n\r\nfunction* ssoToTarget(ssoTarget, isAmisys, contractNo) {\r\n const start = new Date();\r\n\r\n try {\r\n const response = yield call(hpServicesApi.SsoApi.startSso, ssoTarget, isAmisys, contractNo);\r\n console.log(response);\r\n if (ssoTarget.includes(hpServicesApi.SsoApi.SsoTargets.optumRX)) {\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.SSO.Optum\", start, null);\r\n }\r\n if (ssoTarget.includes(hpServicesApi.SsoApi.SsoTargets.navitus)) {\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.SSO.Navitus\", start, null);\r\n }\r\n yield put({ type: types.HP_SSO_PHARMACY_SUCCESS, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.SSO.Optum.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_SSO_PHARMACY_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.SSO.Optum.Failure\", start, null, response);\r\n }\r\n }\r\n}\r\n\r\n","import * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* getCrmMemberMessages(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n let memberId = domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.SupportApi.getCrmMemberMessages, domainData.t, domainData.c, domainData.s, domainData.hi, memberId, params.startDate, params.endDate, params.hpSourceSystem); //t = access token, c = correlation id, s = session id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Support.GetCrmMemberMessages.Get\", start, null);\r\n yield put({ type: types.HP_GET_CRM_MEMBER_MESSAGES_SUCCESS, crmMessages: response });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Support.GetCrmMemberMessages.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_CRM_MEMBER_MESSAGES_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Support.GetCrmMemberMessages.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* sendCrmMessage(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n let memberId = domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.SupportApi.sendCrmMessage, domainData.t, domainData.c, domainData.s, domainData.hi, memberId, params.msgType, params.msgDesc, params.fileName, params.attachment, params.caseid, params.title, params.mimetype, params.hpSourceSystem); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Support.SendCrmMessage.Send\", start, null);\r\n yield put({ type: types.HP_SEND_CRM_MESSAGE_SUCCESS, isFetching: false, crmMessages: response });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Support.SendCrmMessage.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_SEND_CRM_MESSAGE_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Support.SendCrmMessage.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* createCrmTicket(params) {\r\n\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n const sessionData = yield select((state) => state.session);\r\n let memberId = domainData.hi || sessionData.healthPlanUserProfile.memberUserClaims.memberHccId;\r\n\r\n if (stateData && stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.SupportApi.createCrmTicket, domainData.t, domainData.c, domainData.s, domainData.hi, memberId, params.msgType, params.msgDesc, params.fileName, params.attachment, params.title, params.mimetype, params.hpSourceSystem); //t = access token, aai = American Airlines id\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Support.CreateCrmTicket.Send\", start, null);\r\n yield put({ type: types.HP_CREATE_CRM_TICKET_SUCCESS, isFetching: false, crmSendMessageResponse: response });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Support.CreateCrmTicket.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_CREATE_CRM_TICKET_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.Support.CreateCrmTicket.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}","import * as hpServicesApi from \"../../api/healthPlanServicesApi\";\r\nimport * as types from \"../../constants/actionTypes\";\r\nimport { call, put, select } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../../api/andyliticsApi\";\r\n\r\nexport function* getTaxDocumentsList(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.TaxFormsApi.getTaxFormsList, domainData.t, params.MemberNumber);\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.TaxForms.GetTaxDocumentsList.Get\", start, null);\r\n yield put({ type: types.HP_GET_TAX_DOCUMENT_LIST_SUCCESS, taxDocumentsList: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.TaxForms.GetTaxDocumentsList.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_TAX_DOCUMENT_LIST_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.TaxForms.GetTaxDocumentsList.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}\r\n\r\nexport function* getTaxDocumentUrl(params) {\r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain);\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData.aalDown === false) {\r\n try {\r\n const response = yield call(hpServicesApi.TaxFormsApi.getTaxFormUrl, domainData.t, params.DocumentInfo, params.MemberNumber);\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.TaxForms.GetTaxDocumentUrl.Get\", start, null);\r\n yield put({ type: types.HP_GET_TAX_DOCUMENT_URL_SUCCESS, taxDocumentUrl: response, isFetching: false });\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.TaxForms.GetTaxDocumentUrl.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.HP_GET_TAX_DOCUMENT_URL_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.HealthPlanServices.TaxForms.GetTaxDocumentUrl.Failure\", start, null, response);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"webTPASaga: aalDown\");\r\n }\r\n}","import * as types from \"../constants/actionTypes\";\r\nimport { takeLatest } from \"redux-saga/effects\";\r\nimport * as authorizationsSaga from \"./healthPlanServices/authorizationsSaga\";\r\nimport * as benefitsSaga from \"./healthPlanServices/benefitsSaga\";\r\nimport * as claimsSaga from \"./healthPlanServices/claimsSaga\";\r\nimport * as documentsSaga from \"./healthPlanServices/documentsSaga\";\r\nimport * as invoiceSaga from \"./healthPlanServices/invoiceSaga\";\r\nimport * as memberSaga from \"./healthPlanServices/memberSaga\";\r\nimport * as supportSaga from \"./healthPlanServices/supportSaga\";\r\nimport * as ssoSaga from \"./healthPlanServices/ssoSaga\";\r\nimport * as taxFormsSaga from \"./healthPlanServices/taxFormsSaga\";\r\nimport * as otherCoverageSaga from \"./healthPlanServices/otherCoverageSaga\";\r\nimport * as notificationPreferencesSaga from \"./healthPlanServices/notificationPreferencesSaga\";\r\nimport * as costEstimateSaga from \"./healthPlanServices/costEstimateSaga\";\r\nimport * as processControlSaga from \"./healthPlanServices/processControlSaga\";\r\n\r\nexport default function* healthPlanServicesSaga() {\r\n //yield takeLatest([types.LOAD_DASHBOARD_START], handleAction);\r\n //yield takeLatest([types.USER_AUTHENTICATE_SUCCESS], handleAction);\r\n //yield takeLatest([types.PROXY_LIST_LOADED], handleAction);\r\n yield takeLatest([types.HP_GET_AUTHORIZATIONS_LIST_START], authorizationsSaga.getAuthorizations);\r\n yield takeLatest([types.HP_GET_AUTHORIZATION_DETAIL_START], authorizationsSaga.getAuthorizationDetails);\r\n yield takeLatest([types.HP_GET_ACCUMULATOR_DATA_START], benefitsSaga.getUsage);\r\n yield takeLatest([types.HP_GET_BENEFIT_PLANS_START], benefitsSaga.getBenefitPlans);\r\n yield takeLatest([types.HP_GET_BENEFIT_PLAN_DETAIL_START], benefitsSaga.getBenefitPlanDetail);\r\n //yield takeLatest([types.HP_GET_AA_BENEFIT_PLAN_DETAIL_START], benefitsSaga.getAABenefitPlanDetail);\r\n yield takeLatest([types.HP_GET_SERVICE_CATEGORIES_START], benefitsSaga.getServiceCategories);\r\n yield takeLatest([types.HP_GET_CLAIMS_LIST_START], claimsSaga.getClaims);\r\n yield takeLatest([types.HP_GET_CLAIM_DETAIL_START], claimsSaga.getClaimDetails);\r\n yield takeLatest([types.HP_SUBMIT_CLAIM_APPEAL_START], claimsSaga.submitClaimAppeal);\r\n yield takeLatest([types.HP_GET_IS_MEMBER_DPC_START], benefitsSaga.getIsMemberDPCFlag);\r\n yield takeLatest([types.HP_GET_DOCUMENT_DETAIL_START], documentsSaga.getDocumentDetail);\r\n yield takeLatest([types.HP_GET_BENEFIT_DOCUMENTS_START], documentsSaga.getBenefitDocuments);\r\n yield takeLatest([types.HP_GET_BENEFIT_DOCUMENT_START], documentsSaga.getBenefitDocument);\r\n yield takeLatest([types.HP_GET_INVOICE_PDF_START], documentsSaga.getInvoicePDF);\r\n yield takeLatest([types.HP_GET_FORM_START], documentsSaga.getForm);\r\n yield takeLatest([types.HP_GET_AUTHORIZATION_APPROVAL_LETTER_START], documentsSaga.getAuthorizationApprovalLetter);\r\n yield takeLatest([types.HP_REQUEST_NEW_IDCARD_START], documentsSaga.requestNewIdCard);\r\n yield takeLatest([types.HP_GET_EOB_DOCUMENT_START], documentsSaga.getEob);\r\n yield takeLatest([types.HP_GET_DOCUMENTS_LIST_START], documentsSaga.getDocuments);\r\n yield takeLatest([types.HP_GET_IDCARD_START], documentsSaga.getIdCardPdf);\r\n yield takeLatest([types.HP_GET_IDCARD_IMAGE_START], documentsSaga.getIdCardImages);\r\n\r\n yield takeLatest([types.HP_GET_INVOICES_LIST_START], invoiceSaga.getInvoices);\r\n yield takeLatest([types.HP_GET_INVOICE_DETAIL_START], invoiceSaga.getInvoiceDetails);\r\n yield takeLatest([types.HP_GET_INVOICE_ADJUSTMENTS_START], invoiceSaga.getInvoiceAdjustments);\r\n yield takeLatest([types.HP_GET_MEMBERS_LIST_START], memberSaga.getMembers);\r\n yield takeLatest([types.HP_GET_PROFILE_START], memberSaga.getUserProfile);\r\n yield takeLatest([types.HP_UPDATE_MEMBER_ADDRESS_START], memberSaga.updateMemberAddress);\r\n yield takeLatest([types.HP_GET_CORR_EMAIL_ADDRESS_START], memberSaga.getCorrespondenceEmailAddress);\r\n yield takeLatest([types.HP_GET_SUBSCRIPTION_START], memberSaga.getSubscription);\r\n yield takeLatest([types.HP_GET_CRM_MEMBER_MESSAGES_START], supportSaga.getCrmMemberMessages);\r\n yield takeLatest([types.HP_SEND_CRM_MESSAGE_START], supportSaga.sendCrmMessage);\r\n yield takeLatest([types.HP_CREATE_CRM_TICKET_START], supportSaga.createCrmTicket);\r\n yield takeLatest([types.HP_SSO_PHARMACY_START], ssoSaga.ssoPharmacyBenefits);\r\n yield takeLatest([types.HP_SSO_FIRSTCAREPLUS_START], ssoSaga.ssoFirstCarePlus);\r\n yield takeLatest([types.HP_SSO_THRIVE_START], ssoSaga.ssoThrive);\r\n yield takeLatest([types.HP_SSO_NATURALLYSLIM_START], ssoSaga.ssoNaturallySlim);\r\n yield takeLatest([types.HP_SSO_INVOICESANDPAYMENTS_START], ssoSaga.ssoInvoicesandPayments);\r\n yield takeLatest([types.HP_SSO_TELEMEDICINE_START], ssoSaga.ssoTelemedicine);\r\n yield takeLatest([types.HP_GET_OTHER_COVERAGE_START], otherCoverageSaga.getOtherCoverage);\r\n yield takeLatest([types.HP_UPDATE_OTHER_COVERAGE_START], otherCoverageSaga.updateOtherCoverage);\r\n yield takeLatest([types.HP_GET_NOTIFICATION_PREFERENCES_START], notificationPreferencesSaga.getUserAccountSettings);\r\n yield takeLatest([types.HP_UPDATE_NOTIFICATION_PREFERENCES_START], notificationPreferencesSaga.updateUserAccountSettings);\r\n yield takeLatest([types.HP_TRIGGER_PAPER_DOCUMENT_START], notificationPreferencesSaga.triggerPaperDocumentPrint);\r\n yield takeLatest([types.HP_GET_DENTAL_INVOICE_DETAIL_START], invoiceSaga.getDentalInvoiceDetails);\r\n yield takeLatest([types.HP_GET_GROUPED_PROCEDURES_START], costEstimateSaga.getGroupedProcedures);\r\n yield takeLatest([types.HP_GET_GROUPED_PROCEDURES_BY_CPT_START], costEstimateSaga.getGroupedProceduresByCPT);\r\n yield takeLatest([types.HP_GET_PROCEDURE_COST_START], costEstimateSaga.getProcedureCost);\r\n yield takeLatest([types.HP_GET_TAX_DOCUMENT_LIST_START], taxFormsSaga.getTaxDocumentsList);\r\n yield takeLatest([types.HP_GET_TAX_DOCUMENT_URL_START], taxFormsSaga.getTaxDocumentUrl);\r\n yield takeLatest([types.HP_GET_SUPPORT_NOTIFICATION_START], processControlSaga.getSupportNotifications);\r\n}","import { all, call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport * as types from '../constants/actionTypes';\r\nimport * as healthSource from '../api/healthSourceApi';\r\nimport * as d from \"../reducers/domainReducer\";\r\nimport * as account from '../api/accountApi';\r\nimport * as provider from \"../api/providerApi\";\r\nimport * as portal from \"../api/portalApi\";\r\nimport * as Tools from \"../helpers/Tools\";\r\nimport { logUI, logAPI } from \"../api/andyliticsApi\";\r\nimport * as constants from '../constants/textConstants';\r\n\r\nconst phoneNumber = `
${window.serverData.data.technicalHelpDeskNumber} `;\r\nconst technicalHelpDeskHours = window.serverData ? window.serverData.data.technicalHelpDeskHours : \"\";\r\n\r\nexport default function* healthSourceSaga() {\r\n yield takeLatest([types.LOAD_HEALTHSOURCEDASHBOARD_START], handleHealthSourceAction);\r\n yield takeLatest([types.USER_AUTHENTICATE_SUCCESS], handleHealthSourceAction);\r\n yield takeLatest([types.REMOVE_SLIDE], handleHealthSourceAction);\r\n yield takeLatest([types.LOAD_MYCHART_TERMS_DATA_START], handleHealthSourceAction);\r\n yield takeLatest([types.UPDATE_INSURANCE_PREFERENCE], handleHealthSourceAction);\r\n yield takeLatest([types.UPDATE_FAMILYMEMBERS_SCREEN_PREFERENCE], handleHealthSourceAction);\r\n yield takeLatest([types.UPDATE_NOTIFICATIONS_SCREEN_PREFERENCE], handleHealthSourceAction);\r\n yield takeLatest([types.UPDATE_SCHEDULE_CARE_TOOLTIP_PREFERENCE], handleHealthSourceAction);\r\n yield takeLatest([types.INITIALIZE_ONBOARDING_PREFERENCES], handleHealthSourceAction);\r\n yield takeLatest([types.UPDATE_CARE_COACH_MODAL_PREFERENCE], handleHealthSourceAction);\r\n\r\n yield takeLatest([types.UPDATE_AUTOLINK_MYCHART_PREFERENCE], handleHealthSourceAction);\r\n yield takeLatest([types.AUTOLINK_MYCHART], handleHealthSourceAction);\r\n yield takeLatest([types.AUTOLINK_MYCHART_UPDATE_TOKEN_SUCCESS], handleHealthSourceAction);\r\n yield takeLatest([types.UPDATE_ADD_DEPENDENT_PROXY_PREFERENCE], handleHealthSourceAction);\r\n yield takeLatest([types.UPDATE_VIDEO_VISIT_TOOLTIP_PREFERENCE], handleHealthSourceAction);\r\n yield takeLatest([types.UPDATE_PROXY_REQUESTEE_INFO], handleHealthSourceAction);\r\n yield takeLatest([types.UPDATE_GETCARE_TOOLTIP_PREFERENCE], handleHealthSourceAction);\r\n yield takeLatest([types.UPDATE_THRIVE_TOOLTIP_PREFERENCE], handleHealthSourceAction);\r\n yield takeLatest([types.UPDATE_FAMILY_MANAGEMENT_TOOLTIP_PREFERENCE], handleHealthSourceAction);\r\n //yield takeLatest([types.UPDATE_DCJ_SELF_ENROLL_TOOLTIP_PREFERENCE], handleHealthSourceAction);\r\n //yield takeLatest([types.UPDATE_CARECOACH_JOURNEY_PREFERENCE], handleHealthSourceAction);\r\n yield takeLatest([types.UPDATE_SEEN_MARKETING_EMAIL_OPT_IN], handleHealthSourceAction);\r\n yield takeLatest([types.DISMISS_FLU_TILE], handleHealthSourceAction);\r\n\r\n yield takeLatest([types.LINK_EMPLOYEE_ACCOUNT_START], handleLinkEmployeeAccount);\r\n yield takeLatest([types.LINK_EMPLOYEE_ACCOUNT_SUCCESS], handleLinkEmployeeAccount);\r\n yield takeLatest([types.UNLINK_EMPLOYEE_ACCOUNT_START], handleUnlinkEmployeeAccount);\r\n yield takeLatest([types.UNLINK_EMPLOYEE_ACCOUNT_SUCCESS], handleUnlinkEmployeeAccount);\r\n\r\n yield takeLatest([types.LINK_MYCHART_ACCOUNT_START], handleLinkMyChartAccount);\r\n yield takeLatest([types.LINK_MYCHART_ACCOUNT_SUCCESS], handleLinkMyChartAccount);\r\n yield takeLatest([types.UNLINK_MYCHART_ACCOUNT_START], handleUnlinkMyChartAccount);\r\n yield takeLatest([types.UNLINK_MYCHART_ACCOUNT_SUCCESS], handleUnlinkMyChartAccount);\r\n\r\n yield takeLatest([types.GET_FAVORITE_PROVIDERS_START], handleGetFavoriteProviders);\r\n yield takeLatest([types.REMOVE_FAVORITE_PROVIDER_START], handleRemoveFavoriteProvider);\r\n\r\n yield takeLatest([types.ADD_FAVORITE_PROVIDER_START], handleAddFavoriteProvider);\r\n yield takeLatest([types.GET_USER_PHONE_NUMBER_START], handleAction);\r\n yield takeLatest([types.ADD_OR_UPDATE_USER_PHONE_NUMBER_START], handleAction);\r\n yield takeLatest([types.GET_USER_ADDRESS_START], handleAction);\r\n\r\n yield takeLatest([types.GET_LAT_LNG_USER_ADDRESS_START], handleAction);\r\n\r\n yield takeLatest([types.DISMISS_ONBOARDING_PHASEONE_TOOLTIP], handleHealthSourceAction); \r\n yield takeLatest([types.DISMISS_ONBOARDING_PHASETWO_TOOLTIP], handleHealthSourceAction); \r\n yield takeLatest([types.DISMISS_ONBOARDING_PHASETHREE_TOOLTIP], handleHealthSourceAction); \r\n yield takeLatest([types.DISMISS_ONBOARDING_PHASEFOUR_TOOLTIP], handleHealthSourceAction); \r\n yield takeLatest([types.DISMISS_LINK_MEDICALRECORD_PHASEONE_TOOLTIP], handleHealthSourceAction); \r\n yield takeLatest([types.GET_RECENT_VISITED_DOCTORS_START], handleGetRecentVisitedDoctors);\r\n\r\n //yield takeLatest([types.GET_CARETEAM_PROVIDERS_START], handleGetCareTeam);\r\n\r\n\r\n}\r\n\r\nfunction* handleAction(data) {\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n switch (data.type) {\r\n case types.GET_USER_PHONE_NUMBER_START:\r\n try {\r\n let response = yield call(account.getUserPhoneNumber, domainData.t, data.userName);\r\n if (response) {\r\n yield put({ type: types.GET_USER_PHONE_NUMBER_SUCCESS, getUserPhoneNumberResponse: response, getUserPhoneNumberErrorText: null });\r\n }\r\n else {\r\n yield put({ type: types.GET_USER_PHONE_NUMBER_FAILURE, getUserPhoneNumberErrorText: \"We are unable to display your phone number\" });\r\n }\r\n }\r\n catch (getUserPhoneError) {\r\n if (getUserPhoneError && getUserPhoneError.status && getUserPhoneError.status === 404) {\r\n yield put({ type: types.GET_USER_PHONE_NUMBER_SUCCESS, getUserPhoneNumberResponse: \"None entered\", getUserPhoneNumberErrorText: null });\r\n }\r\n else {\r\n yield put({ type: types.GET_USER_PHONE_NUMBER_FAILURE, getUserPhoneNumberErrorText: \"We are unable to display your phone number\" });\r\n }\r\n }\r\n break;\r\n\r\n case types.ADD_OR_UPDATE_USER_PHONE_NUMBER_START:\r\n try {\r\n let response = yield call(account.addOrUpdateUserPhoneNumber, domainData.t, data.userName, data.AreaCode, data.PhoneNumber, data.userId, data.newUser);\r\n yield put({ type: types.ADD_OR_UPDATE_USER_PHONE_NUMBER_SUCCESS, addUpdateUserPhoneNumberSuccessText: \"Your phone number has been updated.\" });\r\n }\r\n catch (addUpdateUserPhoneError) {\r\n if (addUpdateUserPhoneError && addUpdateUserPhoneError.status && addUpdateUserPhoneError.status === 404) {\r\n yield put({ type: types.ADD_OR_UPDATE_USER_PHONE_NUMBER_FAILURE, addUpdateUserPhoneNumberErrorText: \"Error while updating phone number. Please try again later\" });\r\n }\r\n else {\r\n yield put({ type: types.ADD_OR_UPDATE_USER_PHONE_NUMBER_FAILURE, addUpdateUserPhoneNumberErrorText: \"Error while updating phone number. Please try again later\" });\r\n }\r\n }\r\n break;\r\n\r\n case types.GET_USER_ADDRESS_START:\r\n try {\r\n let response = yield call(account.getUserAddresses, domainData.t, data.userName);\r\n yield put({ type: types.GET_USER_ADDRESS_SUCCESS, getUserAddressResponse: response });\r\n }\r\n catch (exception) {\r\n yield put({ type: types.GET_USER_ADDRESS_FAILURE, getUserAddressResponse: null });\r\n }\r\n break;\r\n\r\n case types.GET_LAT_LNG_USER_ADDRESS_START:\r\n try {\r\n let response = yield call(portal.getLatLongFromAddress, domainData.t, data.address);\r\n yield put({ type: types.GET_LAT_LNG_USER_ADDRESS_SUCCESS, getLatLongResponse: response });\r\n }\r\n catch (exception) {\r\n yield put({ type: types.GET_LAT_LNG_USER_ADDRESS_FAILURE, getLatLongResponse: null });\r\n }\r\n break;\r\n }\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n}\r\n\r\n\r\nfunction* syncProviderDetailLists(arrayFavoriteNPIs, arrayCareTeamNPIs) {\r\n const start = new Date();\r\n try {\r\n // First... update the NPI lists\r\n const localCacheData = yield select((state) => state.localCache);\r\n const healthSourceData = yield select((state) => state.healthSource);\r\n const domainData = yield select((state) => state.domain);\r\n arrayFavoriteNPIs = arrayFavoriteNPIs || healthSourceData.arrayFavoriteNPIs || [];\r\n arrayCareTeamNPIs = arrayCareTeamNPIs || healthSourceData.arrayCareTeamNPIs || [];\r\n\r\n yield put({ type: types.SET_PROVIDER_DETAILS_NPI_LISTS, arrayFavoriteNPIs: arrayFavoriteNPIs, arrayCareTeamNPIs: arrayCareTeamNPIs }); // we write these down for easily modifying later\r\n\r\n // Then... load any new provider details\r\n let oNPIArray = Tools.mergeArrays(arrayFavoriteNPIs, arrayCareTeamNPIs);\r\n let oProviderDetailList = localCacheData.ProviderDetailList || [];\r\n let oNPIsToLoad = Tools.getUnhydratedProviderNPIs(oNPIArray, oProviderDetailList);\r\n if (oNPIsToLoad.length > 0) {\r\n let oNewDetailList = [];\r\n oNewDetailList = yield call(provider.getProviderDetailLiteV2, domainData.t, oNPIsToLoad.join(\"|\"), domainData.nc, true);\r\n //debugger;\r\n oProviderDetailList = oProviderDetailList.concat(oNewDetailList);\r\n yield put({ type: types.SET_PROVIDER_DETAILS_FROM_NPI_LIST, arrayProviders: oProviderDetailList }); // we write these down for easily modifying later\r\n }\r\n\r\n // Then... parse the details back into separate arrays\r\n //debugger;\r\n let oFavoriteProviders = oProviderDetailList.filter(function (provider) { return arrayFavoriteNPIs.indexOf(provider.npi) > -1; });\r\n let oCareTeamProviders = oProviderDetailList.filter(function (provider) { return arrayCareTeamNPIs.indexOf(provider.npi) > -1 && arrayFavoriteNPIs.indexOf(provider.npi) < 0; });\r\n //debugger;\r\n yield put({ type: types.SET_PARSED_PROVIDER_DETAILS_LISTS, arrayFavorites: oFavoriteProviders, arrayCareTeam: oCareTeamProviders }); // we write these down for easily modifying later\r\n\r\n }\r\n catch (wasAGoodTry) {\r\n console.error(wasAGoodTry);\r\n logAPI(\"MBHWeb.Saga.HealthSource.SyncProviderDetails.Failure\", start, null, wasAGoodTry);\r\n //logUI(\"syncProviderDetails.Err\", wasAGoodTry);\r\n }\r\n\r\n\r\n}\r\n\r\nfunction* handleGetFavoriteProviders(data) {\r\n const start = new Date();\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n switch (data.type) {\r\n case types.GET_FAVORITE_PROVIDERS_START:\r\n\r\n // Get both lists simultaneously\r\n let oResultFavs = [];\r\n let oResultCareTeam = [];\r\n if (domainData && domainData.cu && domainData.cu.eid) {\r\n [oResultFavs, oResultCareTeam] = yield all([\r\n call(healthSource.getProviderFavorites, domainData.un, domainData.t),\r\n call(healthSource.getCareTeam, domainData.t, domainData.un, domainData.cu.eid)\r\n ]);\r\n }\r\n else {\r\n oResultFavs = yield call(healthSource.getProviderFavorites, domainData.un, domainData.t);\r\n }\r\n\r\n // Get Favs\r\n //let oResultFavs = yield call(healthSource.getProviderFavorites, domainData.un, domainData.t);\r\n // Get Care Team\r\n //let oResultCareTeam = yield call(healthSource.getCareTeam, domainData.t, domainData.un, domainData.eid);\r\n //debugger;\r\n yield syncProviderDetailLists(oResultFavs, oResultCareTeam);\r\n\r\n yield put({ type: types.GET_FAVORITE_PROVIDERS_SUCCESS });\r\n yield put({ type: types.GET_CARETEAM_PROVIDERS_SUCCESS });\r\n\r\n break;\r\n\r\n }\r\n }\r\n catch (exception) {\r\n //debugger;\r\n //logUI(\"getFavorites.Err\", exception);\r\n logAPI(\"MBHWeb.Saga.HealthSource.GetFavorites.Failure\", start, null, exception);\r\n yield put({ type: types.SET_PROVIDER_DETAILS_NPI_LISTS, arrayFavoriteNPIs: null, arrayCareTeamNPIs: null }); // clear these out in event of failure\r\n yield put({ type: types.SET_PARSED_PROVIDER_DETAILS_LISTS, arrayFavorites: null, arrayCareTeam: null }); // clear these out in event of failure\r\n yield put({ type: types.GET_FAVORITE_PROVIDERS_FAILURE, errorText: exception && exception.message ? exception.message : \"Failed to load favorite providers.\" });\r\n yield put({ type: types.GET_CARETEAM_PROVIDERS_FAILURE, errorText: exception && exception.message ? exception.message : \"Failed to load careteam providers.\" });\r\n console.error(exception);\r\n }\r\n}\r\n\r\n\r\nfunction* handleGetRecentVisitedDoctors(data) {\r\n const start = new Date();\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n const recentVisitedDoctors = yield Tools.safeCall(healthSource.getRecentVisitedDoctors, domainData.t);\r\n if (recentVisitedDoctors && recentVisitedDoctors.err) {\r\n yield put({ type: types.GET_RECENT_VISITED_DOCTORS_FAILURE });\r\n logAPI(\"MBHWeb.Saga.HealthSource.GetRecentVisitedDoctors.Failure\", start, null, recentVisitedDoctors);\r\n } else {\r\n let response = recentVisitedDoctors && recentVisitedDoctors.result ? recentVisitedDoctors.result : null;\r\n yield put({ type: types.GET_RECENT_VISITED_DOCTORS_SUCCESS, recentVisitedDoctors: response });\r\n logAPI(\"MBHWeb.Saga.HealthSource.GetRecentVisitedDoctors.Success\", start, null, recentVisitedDoctors);\r\n }\r\n }\r\n catch (exception) {\r\n yield put({ type: types.GET_RECENT_VISITED_DOCTORS_FAILURE });\r\n logAPI(\"MBHWeb.Saga.HealthSource.GetRecentVisitedDoctors.Failure\", start, null, exception);\r\n console.error(exception);\r\n }\r\n}\r\n\r\nfunction* handleAddFavoriteProvider(data) {\r\n const { completionCallback } = data;\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n const healthSourceData = yield select((state) => state.healthSource);\r\n switch (data.type) {\r\n case types.ADD_FAVORITE_PROVIDER_START:\r\n\r\n let oResult = yield call(healthSource.addProviderToFavorites, domainData.t, domainData.un, data.npi);\r\n\r\n //debugger;\r\n if (oResult.UserProvider && oResult.UserProvider.IsFavorited) {\r\n yield syncProviderDetailLists(healthSourceData.arrayFavoriteNPIs.concat(data.npi), null);\r\n\r\n //let oNew = yield call(provider.getProviderDetailV1, domainData.t, data.npi, domainData.nc, true);\r\n //yield handleGetFavoriteProviders({ type: types.GET_FAVORITE_PROVIDERS_START }); // shortcut to refetch the list synchronously\r\n yield put({ type: types.ADD_FAVORITE_PROVIDER_SUCCESS, npi: data.npi });\r\n }\r\n else {\r\n yield put({ type: types.ADD_FAVORITE_PROVIDER_FAILURE, npi: data.npi });\r\n }\r\n\r\n if (completionCallback) {\r\n completionCallback();\r\n }\r\n break;\r\n\r\n }\r\n }\r\n catch (exception) {\r\n //debugger;\r\n yield put({ type: types.ADD_FAVORITE_PROVIDER_FAILURE, errorText: exception && exception.message ? exception.message : \"Failed to add to favorite providers.\" });\r\n console.error(exception);\r\n if (completionCallback) {\r\n completionCallback();\r\n }\r\n }\r\n}\r\n\r\n\r\nfunction* handleRemoveFavoriteProvider(data) {\r\n const { completionCallback } = data;\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n const healthSourceData = yield select((state) => state.healthSource);\r\n switch (data.type) {\r\n case types.REMOVE_FAVORITE_PROVIDER_START:\r\n let oResult = yield call(healthSource.removeProviderFromFavorites, domainData.t, domainData.un, data.npi);\r\n //debugger;\r\n if (oResult.IsHidden || !oResult.IsFavorited) {\r\n yield syncProviderDetailLists(healthSourceData.arrayFavoriteNPIs.filter(function (npi) { return npi !== data.npi; }), null);\r\n yield put({ type: types.REMOVE_FAVORITE_PROVIDER_SUCCESS, npi: data.npi });\r\n }\r\n else {\r\n yield put({ type: types.REMOVE_FAVORITE_PROVIDER_FAILURE, npi: data.npi });\r\n }\r\n\r\n if (completionCallback) {\r\n completionCallback();\r\n }\r\n break;\r\n\r\n }\r\n }\r\n catch (exception) {\r\n //debugger;\r\n yield put({ type: types.REMOVE_FAVORITE_PROVIDER_FAILURE, errorText: exception && exception.message ? exception.message : \"Failed to remove favorite provider.\" });\r\n console.error(exception);\r\n if (completionCallback) {\r\n completionCallback();\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\nfunction* handleLinkEmployeeAccount(data) {\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n switch (data.type) {\r\n case types.LINK_EMPLOYEE_ACCOUNT_START:\r\n //debugger;\r\n let oResult = yield call(account.linkEmployeeAccount, domainData.t, data.lanId, data.password, true, domainData.un);\r\n //debugger;\r\n if (oResult.isSuccessful) {\r\n yield put({ type: types.LINK_EMPLOYEE_ACCOUNT_SUCCESS, successText: oResult.responseMessage, isStandalone: data.isFromMobile ? true : false });\r\n }\r\n else {\r\n yield put({ type: types.LINK_EMPLOYEE_ACCOUNT_FAILURE, errorText: oResult.responseMessage });\r\n }\r\n //debugger;\r\n break;\r\n case types.LINK_EMPLOYEE_ACCOUNT_SUCCESS:\r\n //debugger;\r\n yield put({ type: types.REFRESH_TOKEN });\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.LINK_EMPLOYEE_CLEAR_MESSAGE });\r\n }, 10000);\r\n }\r\n break;\r\n }\r\n }\r\n catch (exception) {\r\n console.error(exception);\r\n\r\n // not sure how I want to record these yet\r\n //debugger;\r\n yield put({ type: types.LINK_EMPLOYEE_ACCOUNT_FAILURE, errorText: exception && exception.message ? exception.message : \"Failed to link employee account.\" });\r\n }\r\n}\r\n\r\n\r\nfunction* handleUnlinkEmployeeAccount(data) {\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n switch (data.type) {\r\n case types.UNLINK_EMPLOYEE_ACCOUNT_START:\r\n //debugger;\r\n let oResult = yield call(account.unlinkEmployeeAccount, domainData.t, true, domainData.un);\r\n //debugger;\r\n if (oResult.isSuccessful) {\r\n yield put({ type: types.UNLINK_EMPLOYEE_ACCOUNT_SUCCESS, successText: oResult.responseMessage, isStandalone: data.isFromMobile ? true : false });\r\n }\r\n else {\r\n yield put({ type: types.UNLINK_EMPLOYEE_ACCOUNT_FAILURE, errorText: oResult.responseMessage });\r\n }\r\n //debugger;\r\n break;\r\n case types.UNLINK_EMPLOYEE_ACCOUNT_SUCCESS:\r\n //debugger;\r\n yield put({ type: types.REFRESH_TOKEN }); // this picks up the refresh token from domain now\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.UNLINK_EMPLOYEE_CLEAR_MESSAGE });\r\n }, 10000);\r\n }\r\n\r\n break;\r\n\r\n }\r\n }\r\n catch (exception) {\r\n console.error(exception);\r\n\r\n // not sure how I want to record these yet\r\n //debugger;\r\n yield put({ type: types.UNLINK_EMPLOYEE_ACCOUNT_FAILURE, errorText: exception && exception.message ? exception.message : \"Failed to unlink employee account.\" });\r\n }\r\n}\r\n\r\n\r\nfunction* handleLinkMyChartAccount(data) {\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n switch (data.type) {\r\n case types.LINK_MYCHART_ACCOUNT_START:\r\n //debugger; \r\n let oResult = yield call(account.linkMyChartAccount, domainData.t, data.MyChartUserName, data.MyChartPassword, domainData.hm, domainData.un);\r\n //debugger;\r\n if (oResult.isSuccessful) {\r\n yield put({ type: types.LINK_MYCHART_ACCOUNT_SUCCESS, successText: oResult.responseMessage, isStandalone: data.isFromMobile ? true : false });\r\n }\r\n else {\r\n yield put({ type: types.LINK_MYCHART_ACCOUNT_FAILURE, errorText: oResult.responseMessage });\r\n }\r\n //debugger;\r\n break;\r\n case types.LINK_MYCHART_ACCOUNT_SUCCESS:\r\n //debugger;\r\n //Moving from ssosaga to here.\r\n yield put({\r\n type: types.RESET_USER_VALUE\r\n });\r\n yield put({ type: types.REFRESH_TOKEN });\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.LINK_MYCHART_CLEAR_MESSAGE });\r\n }, 10000);\r\n }\r\n break;\r\n }\r\n }\r\n catch (exception) {\r\n console.error(exception);\r\n\r\n // not sure how I want to record these yet\r\n //debugger;\r\n yield put({ type: types.LINK_MYCHART_ACCOUNT_FAILURE, errorText: exception && exception.message ? exception.message : \"Failed to link mychart account.\" });\r\n }\r\n }\r\n else {\r\n console.log(\"healthSourceSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\n\r\nfunction* handleUnlinkMyChartAccount(data) {\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n switch (data.type) {\r\n case types.UNLINK_MYCHART_ACCOUNT_START:\r\n //debugger;\r\n let oResult = yield call(account.unlinkMyChartAccount, domainData.t, domainData.hm, domainData.un);\r\n //debugger;\r\n if (oResult.isSuccessful) {\r\n yield put({ type: types.UNLINK_MYCHART_ACCOUNT_SUCCESS, successText: oResult.responseMessage, isStandalone: data.isFromMobile ? true : false });\r\n }\r\n else {\r\n yield put({ type: types.UNLINK_MYCHART_ACCOUNT_FAILURE, errorText: oResult.responseMessage });\r\n }\r\n //debugger;\r\n break;\r\n case types.UNLINK_MYCHART_ACCOUNT_SUCCESS:\r\n //debugger;\r\n //Moving from ssosaga to here.\r\n yield put({\r\n type: types.RESET_USER_VALUE\r\n });\r\n yield put({ type: types.REFRESH_TOKEN }); // this picks up the refresh token from domain now\r\n if (!data.isStandalone) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.UNLINK_MYCHART_CLEAR_MESSAGE });\r\n }, 10000);\r\n }\r\n\r\n break;\r\n\r\n }\r\n }\r\n catch (exception) {\r\n console.error(exception);\r\n\r\n // not sure how I want to record these yet\r\n //debugger;\r\n yield put({ type: types.UNLINK_MYCHART_ACCOUNT_FAILURE, errorText: exception && exception.message ? exception.message : \"Failed to unlink mychart account.\" });\r\n }\r\n }\r\n else {\r\n console.log(\"healthSourceSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nfunction* handleHealthSourceAction(data) {\r\n const start = new Date();\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n let userAge = domainData.pu?.ay || domainData.age;\r\n let isUserMinor = userAge && userAge < 18;\r\n let hasMyChart = domainData.hm;\r\n\r\n //Below calls required user token expect autolink mychart update token.\r\n if (domainData && (domainData.t || (data && data.type && data.type === types.AUTOLINK_MYCHART_UPDATE_TOKEN_SUCCESS))) {\r\n switch (data.type) {\r\n //case types.USER_AUTHENTICATE_SUCCESS:\r\n case types.LOAD_HEALTHSOURCEDASHBOARD_START:\r\n const response = yield call(healthSource.getUserTilesByClientData, domainData.t);\r\n yield put({ type: types.LOAD_HEALTHSOURCEDASHBOARD_SUCCESS, healthSourceDashboardData: response, isWaiting: false });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.Get\", start, null, data);\r\n break;\r\n case types.REMOVE_SLIDE:\r\n const removeResponse = yield call(healthSource.removeSlideTile, data.tileId, domainData.t);\r\n if (removeResponse) {\r\n const refreshresponse = yield call(healthSource.getUserTilesByClientData, domainData.t);\r\n yield put({ type: types.LOAD_HEALTHSOURCEDASHBOARD_SUCCESS, healthSourceDashboardData: refreshresponse, isWaiting: false });\r\n }\r\n break;\r\n case types.UPDATE_INSURANCE_PREFERENCE:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"ShowCaptureInsuranceForm\", false);\r\n yield put({\r\n type: types.SHOW_INSURANCE_FORM, showInsuranceForm: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetInsurancePreference\", start, null, data);\r\n break;\r\n case types.UPDATE_ADD_DEPENDENT_PROXY_PREFERENCE:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"DontPromptToAddProxies\", true);\r\n yield put({\r\n type: types.SHOW_ADD_DEPENDENT_PROXY_FORM, showDependentProxyForm: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetAddDependentProxyPreference\", start, null, data);\r\n break;\r\n case types.UPDATE_AUTOLINK_MYCHART_PREFERENCE:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"DeclinedMyChart\", true);\r\n yield put({\r\n type: types.SHOW_AUTOLINK_MYCHART, showAutoLinkMyChart: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetMyChartPreference\", start, null, data);\r\n break;\r\n case types.UPDATE_VIDEO_VISIT_TOOLTIP_PREFERENCE:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"HideVideoVisitToolTipForWeb\", true);\r\n yield put({\r\n type: types.SHOW_VIDEO_VISIT_TOOLTIP, showVideoVisitToolTip: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetVideoVisitToolTipPreference\", start, null, data);\r\n break;\r\n case types.UPDATE_PROXY_REQUESTEE_INFO:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"MapProxyRequesteeInfo\", null);\r\n yield put({\r\n type: types.SAVE_PROXY_REQUESTEE_INFO, proxyRequesteeInfo: null\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetProxyRequesteePreference\", start, null, data);\r\n break;\r\n case types.UPDATE_GETCARE_TOOLTIP_PREFERENCE:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, constants.HideGetCareToolTip, true);\r\n yield put({\r\n type: types.SHOW_GET_CARE_TOOLTIP, showGetCareToolTip: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetGetCareToolTipPreference\", start, null, data);\r\n break;\r\n case types.UPDATE_FAMILY_MANAGEMENT_TOOLTIP_PREFERENCE:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, constants.ShowFamilyManagementToolTip, false);\r\n yield put({\r\n type: types.SHOW_FAMILY_MANAGEMENT_TOOLTIP, showFamilyManagementToolTip: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetHideFamilyManagementToolTipPreference\", start, null, data);\r\n break;\r\n case types.UPDATE_THRIVE_TOOLTIP_PREFERENCE:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, constants.ShowThriveTooltip, false);\r\n yield put({\r\n type: types.SHOW_THRIVE_TOOLTIP, showThriveTooltip: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetHideThriveTooltipPreference\", start, null, data);\r\n break;\r\n //case types.UPDATE_DCJ_SELF_ENROLL_TOOLTIP_PREFERENCE:\r\n // yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"HideDCJSelfEnrollToolTip\", true);\r\n // yield put({\r\n // type: types.SHOW_DCJ_SELF_ENROLL_TOOLTIP, showDCJSelfEnrollToolTip: false\r\n // });\r\n // logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetDCJSelfEnrollToolTipPreference\", start, null, data);\r\n // break;\r\n //case types.UPDATE_CARECOACH_JOURNEY_PREFERENCE:\r\n // yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"WebDePrioritizeDCJEIds\", data.noActiveDCJEids);\r\n // yield put({\r\n // type: types.CARECOACH_JOURNEY_PREFERENCE, noActiveDCJEids: data.noActiveDCJEids\r\n // });\r\n // logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetWebDePrioritizeDCJEIdsPreference\", start, null, data);\r\n // break;\r\n case types.UPDATE_SEEN_MARKETING_EMAIL_OPT_IN:\r\n const updateMarketingEmailOptIn = yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"HasSeenEmailOptIn\", true);\r\n yield put({\r\n type: types.SHOW_MARKETING_EMAIL_OPT_IN, showEmailOptIn: false\r\n });\r\n if (updateMarketingEmailOptIn && updateMarketingEmailOptIn.result && updateMarketingEmailOptIn.result.isSuccessful) {\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetWebHasSeenEmailOptIn\", start, null, updateMarketingEmailOptIn);\r\n } else {\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetWebHasSeenEmailOptIn.Failure\", start, null, updateMarketingEmailOptIn);\r\n }\r\n break;\r\n case types.UPDATE_FAMILYMEMBERS_SCREEN_PREFERENCE:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, 'ShowFamilyMembersScreen', false);\r\n yield put({\r\n type: types.SHOW_FAMILYMEMBERS_SCREEN, showFamilyMembersScreen: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetShowFamilyMembersScreenPreference\", start, null, data);\r\n break;\r\n //case types.UPDATE_CARE_COACH_MODAL_PREFERENCE:\r\n // yield Tools.safeCall(account.resetUserPreferences2, domainData.t, 'ShowCareCoachModal', false);\r\n // yield put({\r\n // type: types.SHOW_CARE_COACH_MODAL, showCareCoachModal: false\r\n // });\r\n // logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetShowCareCoachModalPreference\", start, null, data);\r\n // break;\r\n case types.UPDATE_NOTIFICATIONS_SCREEN_PREFERENCE:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, 'ShowNotificationsScreen', false);\r\n yield put({\r\n type: types.SHOW_NOTIFICATIONS_SCREEN, showNotificationsScreen: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetShowNotificationsScreenPreference\", start, null, data);\r\n break;\r\n case types.UPDATE_SCHEDULE_CARE_TOOLTIP_PREFERENCE:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, 'ShowScheduleCareTooltip', false);\r\n yield put({\r\n type: types.SHOW_SCHEDULE_CARE_TOOLTIP, showScheduleCareTooltip: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetShowScheduleCareTooltipPreference\", start, null, data);\r\n break;\r\n case types.INITIALIZE_ONBOARDING_PREFERENCES:\r\n if (!isUserMinor && hasMyChart)\r\n {\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"ShowCaptureInsuranceForm\", true);\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, 'ShowFamilyMembersScreen', true);\r\n }\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, 'ShowNotificationsScreen', true); \r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, 'ShowScheduleCareTooltip', true); \r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetShowScheduleCareTooltipPreference\", start, null, data);\r\n break;\r\n case types.DISMISS_FLU_TILE:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"HideFluTile2021\", true);\r\n yield put({\r\n type: types.HIDE_FLU_VACCINE_TILE, hideFluVaccineTile: true\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetWebHideFluTile2021Preference\", start, null, data);\r\n break;\r\n case types.DISMISS_ONBOARDING_PHASEONE_TOOLTIP:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"ShowOnBoardingPhaseOneToolTipWeb\", false);\r\n yield put({\r\n type: types.SHOW_ONBOARDING_PHASEONE_TOOLTIP, showOnBoardingPhaseOneToolTipWeb: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetOnBoardingPhaseOneToolTipWeb\", start, null, data);\r\n break;\r\n case types.DISMISS_ONBOARDING_PHASETWO_TOOLTIP:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"ShowOnBoardingPhaseTwoToolTipWeb\", false);\r\n yield put({\r\n type: types.SHOW_ONBOARDING_PHASETWO_TOOLTIP, showOnBoardingPhaseTwoToolTipWeb: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetOnBoardingPhaseTwoToolTipWeb\", start, null, data);\r\n break;\r\n case types.DISMISS_ONBOARDING_PHASETHREE_TOOLTIP:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"ShowOnBoardingPhaseThreeToolTipWeb\", false);\r\n yield put({\r\n type: types.SHOW_ONBOARDING_PHASETHREE_TOOLTIP, showOnBoardingPhaseThreeToolTipWeb: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetOnBoardingPhaseThreeToolTipWeb\", start, null, data);\r\n break;\r\n case types.DISMISS_ONBOARDING_PHASEFOUR_TOOLTIP:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"ShowOnBoardingPhaseFourToolTipWeb\", false);\r\n yield put({\r\n type: types.SHOW_ONBOARDING_PHASEFOUR_TOOLTIP, showOnBoardingPhaseFourToolTipWeb: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetOnBoardingPhaseFourToolTipWeb\", start, null, data);\r\n break;\r\n case types.DISMISS_LINK_MEDICALRECORD_PHASEONE_TOOLTIP:\r\n yield Tools.safeCall(account.resetUserPreferences2, domainData.t, \"ShowLinkMedicalRecord\", false);\r\n yield put({\r\n type: types.SHOW_LINK_MEDICALRECORD_PHASEONE_TOOLTIP, showLinkMedicalRecordPhaseOneToolTip: false\r\n });\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.ResetLinkMedicalRecordPhaseOneToolTip\", start, null, data);\r\n break;\r\n case types.AUTOLINK_MYCHART:\r\n if (domainData && domainData.t) {\r\n try {\r\n const response = yield call(healthSource.autolinkMyChart, domainData.t, domainData.un, data.dob);\r\n if (response && response.status === 200) {\r\n yield put({ type: types.AUTOLINK_MYCHART_UPDATE_TOKEN_SUCCESS });\r\n logAPI(\"MBHWeb.Saga.AutoLink.MyChart.Success\", start, null);\r\n }\r\n else if (response && response.Errors && response.Errors.length > 0) {\r\n const error = getLinkError(response.Errors[0]);\r\n yield put({ type: types.AUTOLINK_MYCHART_FAILURE, autolinkMyChartSuccess: null, isAutoLinkMyChartWaiting: false, autolinkMyChartFailure: error || \"We were unable to link your account.\" });\r\n if (response.Errors[0] && response.Errors[0].Code && response.Errors[0].Code === 'patient_not_found') {\r\n yield put({ type: types.AUTOLINK_MYCHART_ERROR_COUNT });\r\n } else {\r\n yield put({ type: types.AUTOLINK_MYCHART_ERROR_COUNT, payload: { countOfLinkMyChartError: 3 } });\r\n }\r\n logAPI(\"MBHWeb.Saga.AutoLink.MyChart.Failure\", start, null, response.Errors);\r\n }\r\n }\r\n catch (err) {\r\n logAPI(\"MBHWeb.Saga.AutoLink.MyChart.Failure\", start, null, err);\r\n }\r\n }\r\n break;\r\n case types.AUTOLINK_MYCHART_UPDATE_TOKEN_SUCCESS:\r\n try {\r\n logAPI(\"MBHWeb.Saga.AutoLink.MyChart.Tokenupdate\", start, null);\r\n yield put({ type: types.REFRESH_TOKEN });\r\n yield put({ type: types.AUTOLINK_MYCHART_SUCCESS, autolinkMyChartSuccess: \"We have successfully linked your account.\", isAutoLinkMyChartWaiting: false });\r\n } catch (error) {\r\n logAPI(\"MBHWeb.Saga.AutoLink.MyChart.Tokenupdate.Error\", start, null, error1);\r\n }\r\n break;\r\n //case types.LOAD_MYCHART_TERMS_DATA_START:\r\n // try {\r\n // const response = yield call(healthSource.myChartTerms, domainData.t, domainData.un); \r\n // if (response && response.exceptionMessage === null) { \r\n // yield put({ type: types.LOAD_MYCHART_TERMS_DATA_SUCCESS, successText: response.textToDisplay, errorText: null, myChartTermsInProcess:false });\r\n // }\r\n // else {\r\n // yield put({ type: types.LOAD_MYCHART_TERMS_DATA_FAILURE, errorText: response.exceptionMessage, successText: null, myChartTermsInProcess:false });\r\n // }\r\n\r\n // }\r\n // catch (loadMyChartTermsError) {\r\n // if (loadMyChartTermsError && loadMyChartTermsError.status && (loadMyChartTermsError.status === 404 || loadMyChartTermsError.status === 400)) {\r\n // yield put({ type: types.LOAD_MYCHART_TERMS_DATA_FAILURE, errorText: loadMyChartTermsError.statusText, myChartTermsInProcess: false });\r\n // }\r\n // }\r\n // break;\r\n\r\n }\r\n }\r\n\r\n }\r\n catch (response) {\r\n console.error(response);\r\n logAPI(\"MBHWeb.Saga.HealthSourceDashboard.Get.Failure\", start, null, response);\r\n if (response && response.status && response.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: response.status });\r\n }\r\n else {\r\n yield put({ type: types.AJAX_CALL_ERROR, healthSourceError: response });\r\n }\r\n }\r\n}\r\n\r\nfunction getLinkError(error) {\r\n\r\n const helpDeskMessage = `For technical assistance, call the MyBSWHealth technical help desk ${technicalHelpDeskHours} at ${phoneNumber}.`;\r\n if (error && error.Code) {\r\n switch (error.Code) {\r\n case \"patient_not_found\":\r\n return `The date of birth doesn't match what is on file.`;\r\n case \"multiple_records_match\":\r\n return `We could not find that account. ` + helpDeskMessage;\r\n case \"username_not_found\":\r\n return `${error.DisplayMessage}. ` + helpDeskMessage;\r\n case \"memberid_not_found\":\r\n case \"member_not_found\":\r\n return `The member ID was not found. ` + helpDeskMessage;\r\n case \"account_linking_failed\":\r\n case \"unhandled_exception\":\r\n return `We were unable to link your account. ` + helpDeskMessage;\r\n case \"login_already_exists\":\r\n return `You may have duplicate accounts. ` + helpDeskMessage;\r\n default:\r\n return `We were unable to link your account. ` + helpDeskMessage;\r\n }\r\n }\r\n}","import { put, call, select, takeLatest } from \"redux-saga/effects\";\r\nimport { getAvailableVaccines, getPrefilledData, getAvailableDateTimes, bookInhomeAppointment, getVaccineQuestionnaires, getCovidVaccineQuestionnaires, putVaccineQuestionnaires, validateZipCode } from \"../api/inHomeApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport * as Tools from \"../helpers/Tools\"\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\nimport { isEqual, valuesIn } from 'lodash';\r\n\r\nexport default function* inHomeSaga() {\r\n yield takeLatest(types.CHECK_GET_INHOME_PREFILL, getPrefillData);\r\n yield takeLatest(types.VALIDATE_INHOME_ZIPCODE, validateInHomeZipCode);\r\n yield takeLatest(types.GET_INHOME_VACCINES, getInHomeVaccines);\r\n yield takeLatest(types.GET_INHOME_APPTS, getInHomeApptDateTimes);\r\n yield takeLatest(types.BOOK_INHOME_APPT, bookAppointment);\r\n yield takeLatest(types.GET_INHOME_ELIGIBILITY_Q, getQuestionnaires);\r\n yield takeLatest(types.GET_INHOME_ELIGIBILITY_COVID_Q, getCovidQuestionnaires);\r\n yield takeLatest(types.SEND_INHOME_ELIGIBILITY_RESPONSES, sendQuestionnaires);\r\n}\r\n\r\nexport function* getPrefillData(data) {\r\n let mrn = null;\r\n const start = new Date()\r\n // old default value was [{ label: \"Dallas\", value: \"dallas\" }, { label: \"Forth Worth\", value: \"fort worth\" }, { label: \"Irving\", value: \"irving\" }, { label: \"Plano\", value: \"plano\" }]\r\n const inHomeCitiesDefault = window.serverData?.data?.inHomeCitiesDefault ? window.serverData.data.inHomeCitiesDefault.split(\",\").map(city => { return { label: city, value: city.toLowerCase() } }) : [];\r\n try {\r\n const previouslySelectedUsers = yield select((state) => state.inHome.selectedUsers)\r\n const domain = yield select((state) => state.domain);\r\n const selectedUsers = data.selectedUsers;\r\n\r\n \r\n if (selectedUsers?.length > 0) {\r\n mrn = selectedUsers[0].patient?.AMRN;\r\n\r\n if (mrn) {\r\n yield put({ type: types.GET_INHOME_PREFILL })\r\n const prefillResponse = yield call(getPrefilledData, mrn, domain.t);\r\n const address = prefillResponse.addresses && prefillResponse.addresses[0] || {};\r\n const cities = prefillResponse.cities && prefillResponse.cities.length ? prefillResponse.cities.map(city => { return { label: city, value: city.toLowerCase() } }) : inHomeCitiesDefault\r\n const insurance_types = prefillResponse.insurance_types && prefillResponse.insurance_types.length ? prefillResponse.insurance_types.map(insuranceType => { return { label: insuranceType, value: insuranceType } }) : {}\r\n const prefillData = {\r\n address1: address.address1 || '',\r\n address2: address.address2 || '',\r\n city: address.city,\r\n state: address.state || 'TX',\r\n zipCode: address.zip_code,\r\n email: prefillResponse.email,\r\n mobilePhone: prefillResponse.mobile_phone ? Tools.ciReplace(prefillResponse.mobile_phone, \"-\", \".\") : '', //mobile phone comes in with dashes\r\n languages: prefillResponse.languages || [{ key: \"en\", value: \"English\" }, { key: \"ko\", value: \"Korean\" }, { key: \"es\", value: \"Spanish\" }],\r\n cities: cities,\r\n preferredLanugage: prefillResponse.preferred_language || \"en\",\r\n insurance_types: insurance_types\r\n }\r\n if (data) {\r\n logAPI(\"MBHWeb.Saga.InHome.GetPrefill\", start, null);\r\n yield put({ type: types.GET_INHOME_PREFILL_RESULT, data: prefillData })\r\n } else {\r\n logAPI(\"MBHWeb.Saga.InHome.GetPrefill.Failure\", start, null);\r\n let prefillData = {\r\n address1: '',\r\n address2: '',\r\n city: '',\r\n state: 'TX',\r\n zipCode: '',\r\n email: '',\r\n mobilePhone: '',\r\n languages: [{ key: \"en\", value: \"English\" }, { key: \"ko\", value: \"Korean\" }, { key: \"es\", value: \"Spanish\" }],\r\n preferredLanugage: \"en\",\r\n cities: inHomeCitiesDefault\r\n }\r\n yield put({ type: types.GET_INHOME_PREFILL_RESULT, data: prefillData })\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n let prefillData = {\r\n address1: '',\r\n address2: '',\r\n city: '',\r\n state: 'TX',\r\n zipCode: '',\r\n email: '',\r\n mobilePhone: '',\r\n languages: [{ key: \"en\", value: \"English\" }, { key: \"ko\", value: \"Korean\" }, { key: \"es\", value: \"Spanish\" }],\r\n preferredLanugage: \"en\",\r\n cities: inHomeCitiesDefault\r\n }\r\n yield put({ type: types.GET_INHOME_PREFILL_RESULT, data: prefillData })\r\n logAPI(\"MBHWeb.Saga.InHome.GetPrefill.Failure\", start, null, err);\r\n }\r\n}\r\n\r\n\r\nexport function* getInHomeVaccines(data) {\r\n const start = new Date()\r\n let result = { data: null, success: false, errorMsg: null }\r\n\r\n try {\r\n const inHomeState = yield select((state) => state.inHome)\r\n const serviceLocation = inHomeState.serviceLocationContactInfo;\r\n const users = inHomeState.selectedUsers;\r\n const domain = yield select((state) => state.domain);\r\n const mrnList = users.reduce((acc, curr) => {\r\n acc.push({'patient_mrn':curr.mrn,'patient_insurance':curr.insurance})\r\n return acc\r\n }, [])\r\n const body = {\r\n city: serviceLocation.city,\r\n state_code: serviceLocation.state,\r\n zip_code: serviceLocation.zipCode,\r\n userid: domain.ui,\r\n patients: mrnList\r\n }\r\n const response = yield call(getAvailableVaccines, body, domain.t);\r\n\r\n if (response) {\r\n //create standard js response in camelCase\r\n let users = []\r\n response.map((user) => {\r\n return {\r\n ...user,\r\n mrn: user.mrn,\r\n firstName: user.first_name,\r\n lastName: user.last_name,\r\n dob: user.dob,\r\n vaccines: user.vaccines?.map((vacc) => {\r\n return {\r\n axleName: vacc.name,\r\n displayName: vacc.display_name,\r\n axleServiceId: vacc.axle_service_id\r\n\r\n }\r\n })\r\n\r\n }\r\n })\r\n result.data = response;\r\n result.success = true;\r\n yield put({ type: types.GET_INHOME_VACCINES_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.GetVaccines\", start, null);\r\n } else {\r\n result.errorMsg = 'error';\r\n result.success = false;\r\n yield put({ type: types.GET_INHOME_VACCINES_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.GetVaccines.Failure\", start, null);\r\n }\r\n\r\n } catch (err) {\r\n console.log(err);\r\n result.errorMsg = err.message;\r\n result.success = false;\r\n yield put({ type: types.GET_INHOME_VACCINES_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.GetVaccines.Failure\", start, null, err);\r\n }\r\n}\r\n\r\n\r\nexport function* validateInHomeZipCode(payload) {\r\n const start = new Date()\r\n let result = { data: null, success: false, errorMsg: null }\r\n\r\n try {\r\n const inHomeState = yield select((state) => state.inHome)\r\n const serviceLocation = inHomeState.serviceLocationContactInfo;\r\n \r\n const domain = yield select((state) => state.domain);\r\n \r\n const body = {\r\n city: serviceLocation.city,\r\n state_code: serviceLocation.state,\r\n zip_code: payload.zipCode || serviceLocation.zipCode \r\n }\r\n const response = yield call(validateZipCode, body, domain.t);\r\n\r\n if (typeof response !== 'object' && response !== null) {\r\n \r\n result.data = response;\r\n result.success = true;\r\n yield put({ type: types.SET_VALIDATE_INHOME_ZIPCODE_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.ValidateInHomeZipCode\", start, null);\r\n } else {\r\n result.errorMsg = 'error';\r\n result.success = false;\r\n yield put({ type: types.SET_VALIDATE_INHOME_ZIPCODE_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.ValidateInHomeZipCode.Failure\", start, null);\r\n }\r\n\r\n } catch (err) {\r\n console.log(err);\r\n result.errorMsg = err.message;\r\n result.success = false;\r\n yield put({ type: types.SET_VALIDATE_INHOME_ZIPCODE_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.ValidateInHomeZipCode.Failure\", start, null, err);\r\n }\r\n}\r\n\r\n\r\nexport function* getInHomeApptDateTimes() {\r\n const start = new Date()\r\n let result = { data: null, success: false, errorMsg: null }\r\n\r\n try {\r\n const inHomeState = yield select((state) => state.inHome)\r\n const serviceLocation = inHomeState.serviceLocationContactInfo || {};\r\n const selectedVaccines = inHomeState.selectedVaccines;\r\n const covidServiceResults = inHomeState.covidServiceResults; //conatins covid questionnaire results, axle_service_names etc\r\n const vaccineServiceIds = [];\r\n selectedVaccines.forEach((user) => {\r\n user.vaccines_groups.forEach((group) => {\r\n group.vaccines.forEach((vaccine) => {\r\n if (vaccine.isChecked && !vaccine.name.toLowerCase().includes('covid')) //push only non-covid vaccine service ids. For covid we need to provide axle-service-names\r\n { vaccineServiceIds.push(vaccine.axle_id) }\r\n else if (vaccine.isChecked && vaccine.name.toLowerCase().includes('covid')) { \r\n let userCovidResult = covidServiceResults?.find(covResult => covResult.mrn === user.mrn);\r\n if (userCovidResult)\r\n vaccineServiceIds.push(userCovidResult?.axle_service_name);\r\n }\r\n })\r\n })\r\n })\r\n /*covidServiceResults?.forEach((covidResult) => {\r\n //push the axle service names for covid vaccine, instead of the axle-service-ids\r\n if (covidResult) vaccineServiceIds.push(covidResult?.axle_service_name); \r\n \r\n })*/\r\n\r\n console.log(\"In InHome Sage, request body for Appointment Slots \", vaccineServiceIds);\r\n const domain = yield select((state) => state.domain);\r\n const body = {\r\n zip_code: serviceLocation.zipCode,\r\n service_ids: vaccineServiceIds || []\r\n }\r\n const response = yield call(getAvailableDateTimes, body, domain.t);\r\n\r\n\r\n if (response) {\r\n // this is saved as is into state\r\n // shape of response = { availability: [ { date: \"YYY-MM-DD\", slots: [\"YYYY-MM-DDTHH:MM:SS-06:00\"] } ] }\r\n\r\n result.data = response.availability;\r\n result.success = true;\r\n yield put({ type: types.GET_INHOME_APPTS_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.GetVaccineApptTimes\", start, null);\r\n } else {\r\n result.errorMsg = 'error';\r\n result.success = false;\r\n yield put({ type: types.GET_INHOME_APPTS_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.GetVaccineApptTimes.Failure\", start, null);\r\n }\r\n\r\n } catch (err) {\r\n console.log(err);\r\n result.errorMsg = err.message;\r\n result.success = false;\r\n yield put({ type: types.GET_INHOME_APPTS_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.GetVaccineApptTimes.Failure\", start, null, err);\r\n }\r\n}\r\n\r\nexport function* bookAppointment() {\r\n const start = new Date()\r\n let result = { data: null, success: false, errorMsg: null }\r\n\r\n try {\r\n const inHomeState = yield select((state) => state.inHome)\r\n const serviceLocation = inHomeState.serviceLocationContactInfo || {};\r\n const selectedVaccines = inHomeState.selectedVaccines;\r\n const selectedDateTime = inHomeState.selectedDateTime;\r\n const covidServiceResults = inHomeState.covidServiceResults; //conatins covid questionnaire results, axle_service_names etc\r\n const domain = yield select((state) => state.domain);\r\n\r\n const extractFirstUser = selectedVaccines.find((user) => !!user.vaccines_groups.find(group => !!group.vaccines.find(vaccines => !!vaccines.isChecked)))\r\n\r\n const vaccineList = [];\r\n extractFirstUser.vaccines_groups.forEach((group) => {\r\n group.vaccines.forEach((curr) => {\r\n if (curr.isChecked && !curr.name.toLowerCase().includes('covid')) //push only non-covid vaccine service ids. For covid we need to provide axle-service-names\r\n vaccineList.push({ axle_service_id: curr.axle_id, axle_vaccine_name: curr.name });\r\n\r\n else if (curr.isChecked && curr.name.toLowerCase().includes('covid')) {\r\n //check if primary user has selected a covid vaccine\r\n let primaryUserCovidResult = covidServiceResults?.find(covResult => covResult.mrn === extractFirstUser.mrn);\r\n if (primaryUserCovidResult)\r\n vaccineList.push({ axle_service_id: primaryUserCovidResult?.axle_service_name, axle_vaccine_name: primaryUserCovidResult?.axle_service_name, questionnaire_id: primaryUserCovidResult?.questionnaire_id });\r\n }\r\n })\r\n\r\n })\r\n\r\n\r\n\r\n let updatedMobilePhone = serviceLocation.mobilePhone.replaceAll(\".\", \"-\");\r\n\r\n const primary_visit = {\r\n \"mrn\": extractFirstUser.mrn,\r\n \"address1\": serviceLocation.address1,\r\n \"address2\": serviceLocation.address2,\r\n \"city\": serviceLocation.city,\r\n \"state\": serviceLocation.state,\r\n \"zip_code\": serviceLocation.zipCode,\r\n \"mobile_phone\": updatedMobilePhone,\r\n \"email\": serviceLocation.email,\r\n \"preferred_language\": serviceLocation.language,\r\n \"visit_datetime\": selectedDateTime,\r\n \"provider_notes\": serviceLocation.extraNote,\r\n \"is_self_pay\": true,\r\n \"vaccines\": vaccineList\r\n }\r\n\r\n const additional_patients = [];\r\n selectedVaccines.forEach((item) => {\r\n if (item.mrn !== extractFirstUser.mrn) {\r\n let vaccineList = [];\r\n item.vaccines_groups.forEach((group) => {\r\n group.vaccines.forEach((curr) => {\r\n if (curr.isChecked && !curr.name.toLowerCase().includes('covid')) //push only non-covid vaccine service ids. For covid we need to provide axle-service-names)\r\n vaccineList.push({ axle_service_id: curr.axle_id, axle_vaccine_name: curr.name })\r\n else if (curr.isChecked && curr.name.toLowerCase().includes('covid')) {\r\n //check if each user has selected a covid vaccine\r\n let additionalUserCovidResult = covidServiceResults?.find(covResult => covResult.mrn === item.mrn);\r\n if (additionalUserCovidResult)\r\n vaccineList.push({ axle_service_id: additionalUserCovidResult?.axle_service_name, axle_vaccine_name: additionalUserCovidResult?.axle_service_name, questionnaire_id: additionalUserCovidResult?.questionnaire_id });\r\n\r\n }\r\n })\r\n })\r\n\r\n\r\n if (vaccineList.length > 0) additional_patients.push({ mrn: item.mrn, vaccines: vaccineList })\r\n }\r\n })\r\n\r\n const body = { primary_visit: primary_visit, additional_patients: additional_patients }\r\n console.log(\"Inn Inhome Saga, BookAppointment request payload is \", body);\r\n\r\n const response = yield call(bookInhomeAppointment, body, domain.t);\r\n //let response = {};\r\n\r\n if (response) {\r\n result.data = response;\r\n result.success = true;\r\n yield put({ type: types.BOOK_INHOME_APPT_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.BookAppointment\", start, null);\r\n } else {\r\n result.errorMsg = \"error\";\r\n result.success = false;\r\n yield put({ type: types.BOOK_INHOME_APPT_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.BookAppointment.Failure\", start, null);\r\n }\r\n\r\n } catch (err) {\r\n console.log(err);\r\n result.success = false;\r\n result.errorMsg = err.message\r\n logAPI(\"MBHWeb.Saga.InHome.BookAppointment.Failure\", start, null, err);\r\n yield put({ type: types.BOOK_INHOME_APPT_RESULT, data: result })\r\n }\r\n}\r\n\r\n\r\nexport function* getCovidQuestionnaires(payload) {\r\n //console.log(\"In saga getCovidQuestionnaires, payload \", payload);\r\n const start = new Date()\r\n let result = { data: null, success: false, errorMsg: null }\r\n\r\n try {\r\n const inHomeState = yield select((state) => state.inHome)\r\n const selectedVaccines = inHomeState.selectedVaccines;\r\n const selectedUsers = inHomeState.selectedUsers; \r\n const domain = yield select((state) => state.domain);\r\n\r\n const response = yield call(getCovidVaccineQuestionnaires, payload.covidQuestionnaireUrl, domain.t);\r\n\r\n //console.log(\"In InHomeSaga...getCovidQuestionnaire...response\", response);\r\n\r\n if (response) {\r\n\r\n let processedData = response; \r\n\r\n result.data = processedData;\r\n result.success = true;\r\n yield put({ type: types.GET_INHOME_ELIGIBILITY_COVID_Q_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.GetCovidQuestionnaires\", start, null);\r\n } else {\r\n result.errorMsg = 'error';\r\n result.success = false;\r\n yield put({ type: types.GET_INHOME_ELIGIBILITY_COVID_Q_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.GetCovidQuestionnaires.Failure\", start, null);\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n result.errorMsg = err.message;\r\n result.success = false;\r\n yield put({ type: types.GET_INHOME_ELIGIBILITY_COVID_Q_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.GetCovidQuestionnaires.Failure\", start, null, err);\r\n }\r\n}\r\n\r\nexport function* getQuestionnaires() {\r\n const start = new Date()\r\n let result = { data: null, success: false, errorMsg: null }\r\n\r\n try {\r\n const inHomeState = yield select((state) => state.inHome)\r\n const selectedVaccines = inHomeState.selectedVaccines;\r\n const selectedUsers = inHomeState.selectedUsers;\r\n const domain = yield select((state) => state.domain);\r\n\r\n const allPatients = [];\r\n\r\n selectedVaccines.forEach((user) => {\r\n let selectedVax = [];\r\n user.vaccines_groups.forEach((group) => {\r\n group.vaccines.forEach((vaccine) => {\r\n if (vaccine.isChecked) { selectedVax.push(vaccine.name) }\r\n })\r\n })\r\n\r\n if (!selectedVax.length) return\r\n\r\n let extractUser = selectedUsers.find((vax) => {\r\n return vax.mrn === user.mrn\r\n })\r\n\r\n let patient = {}\r\n\r\n patient.patient_first_name = extractUser.firstName;\r\n patient.patient_last_name = extractUser.lastName;\r\n patient.patient_dob = extractUser.dob;\r\n patient.patient_mrn = extractUser.mrn;\r\n patient.vaccine_names = selectedVax;\r\n\r\n allPatients.push(patient)\r\n })\r\n\r\n const body = [...allPatients];\r\n const response = yield call(getVaccineQuestionnaires, body, domain.t);\r\n\r\n if (response) {\r\n //create standard js response in camelCase\r\n let processedData = response.map((pt) => {\r\n return {\r\n dictionary: pt.dictionary,\r\n patient: {\r\n dob: pt.patient.dob,\r\n mrn: pt.patient.mrn,\r\n firstName: pt.patient.first_name,\r\n lastName: pt.patient.last_name,\r\n },\r\n questions: pt.questions.map((q) => {\r\n return {\r\n items: q.items,\r\n vaccineName: q.vaccine_name\r\n }\r\n })\r\n }\r\n })\r\n\r\n result.data = processedData;\r\n result.success = true;\r\n yield put({ type: types.GET_INHOME_ELIGIBILITY_Q_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.GetVaccineQuestionnaires\", start, null);\r\n } else {\r\n result.errorMsg = 'error';\r\n result.success = false;\r\n yield put({ type: types.GET_INHOME_ELIGIBILITY_Q_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.GetVaccineQuestionnaires.Failure\", start, null);\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n result.errorMsg = err.message;\r\n result.success = false;\r\n yield put({ type: types.GET_INHOME_ELIGIBILITY_Q_RESULT, data: result })\r\n logAPI(\"MBHWeb.Saga.InHome.GetVaccineQuestionnaires.Failure\", start, null, err);\r\n }\r\n}\r\n\r\n\r\nexport function* sendQuestionnaires(data) {\r\n const start = new Date()\r\n let result = { data: null, success: false, errorMsg: null }\r\n\r\n try {\r\n const inHomeState = yield select((state) => state.inHome)\r\n const selectedUsers = inHomeState.selectedUsers;\r\n const domain = yield select((state) => state.domain);\r\n\r\n if (!data.response?.length) return;\r\n const body = data.response.map((obj) => {\r\n let pt = selectedUsers.find(u => u.mrn === obj.mrn)\r\n\r\n return {\r\n \"patient_mrn\": pt?.mrn,\r\n \"patient_first_name\": pt?.firstName,\r\n \"patient_last_name\": pt?.lastName,\r\n \"patient_dob\": pt?.dob,\r\n \"questionnaire_name\": obj.vaccineName,\r\n \"questionnaire_responses\": obj.vaccineResponses\r\n }\r\n })\r\n\r\n if (!body.length) return\r\n const response = yield call(putVaccineQuestionnaires, domain.t, body);\r\n if (response) {\r\n logAPI(\"MBHWeb.Saga.InHome.SetVaccineQuestionnaires\", start, null);\r\n } else {\r\n logAPI(\"MBHWeb.Saga.InHome.SetVaccineQuestionnaires.Failure\", start, null);\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n logAPI(\"MBHWeb.Saga.InHome.SetVaccineQuestionnaires.Failure\", start, null, err);\r\n }\r\n}","import \"regenerator-runtime/runtime\";\r\nimport { all, fork } from \"redux-saga/effects\";\r\nimport searchProvidersSaga from \"./providerSaga\";\r\nimport * as ssoSaga from \"./ssoSaga\";\r\nimport headerSaga from \"./headerSaga\";\r\nimport dashboardSaga from \"./dashboardSaga\";\r\nimport todosSaga from \"./todosSaga\";\r\nimport pharmacySaga from \"./pharmacySaga\";\r\nimport pharmacyProxySaga from \"./pharmacyProxySaga\";\r\nimport healthPlanSaga from \"./healthPlanSaga\";\r\nimport healthSourceSaga from \"./healthSourceSaga\";\r\nimport membershipsSaga from \"./membershipsSaga\";\r\nimport errorSaga from \"./errorSaga\";\r\nimport searchLocationsSaga from \"./locationSaga\";\r\nimport openSchedulingSaga from \"./openSchedulingSaga\";\r\nimport docsSaga from \"./docsSaga\";\r\nimport commonSaga from \"./commonSaga\";\r\nimport directSchedulingSaga from \"./directSchedulingSaga\";\r\nimport profileToolsSaga from \"./ProfileToolsSaga\";\r\nimport portalSaga from \"./PortalSaga\";\r\nimport thriveSaga from \"./thriveSaga\";\r\nimport healthPlanServicesSaga from \"./healthPlanServicesSaga\";\r\nimport mychartProxySaga from \"./mychartProxySaga\";\r\nimport epicSaga from \"./epicSaga\";\r\nimport proxySaga from './proxySaga';\r\nimport videoVisitSchedulingSaga from './videoVisitSchedulingSaga';\r\n//import dcjInboxSaga from \"./dcjInboxSaga\";\r\nimport pricingSaga from \"./pricingSaga\";\r\nimport myChartDataTileSaga from \"./myChartDataTileSaga\";\r\nimport marketingEmailOptInSaga from \"./marketingEmailOptInSaga\";\r\nimport prayerFeatureSaga from \"./prayerFeatureSaga\";\r\nimport inHomeSaga from \"./inHomeSaga\";\r\nimport careGapsSaga from './careGapsSaga';\r\n\r\n// register watcher saga(s) and export a single generator function as the root saga.\r\nexport default function* startForeman() {\r\n let bundle = \"mybswhealth\";\r\n\r\n if (typeof window !== 'undefined') {\r\n bundle = window.serverData.data.bundle;\r\n }\r\n\r\n // sagas needed by all bundles\r\n let watchers = [\r\n fork(searchProvidersSaga),\r\n fork(searchLocationsSaga),\r\n fork(ssoSaga.watchUserAuthenticate),\r\n fork(headerSaga),\r\n fork(pharmacySaga),\r\n fork(pharmacyProxySaga),\r\n fork(membershipsSaga),\r\n fork(errorSaga),\r\n fork(openSchedulingSaga),\r\n fork(docsSaga),\r\n fork(commonSaga),\r\n fork(directSchedulingSaga),\r\n fork(profileToolsSaga),\r\n fork(portalSaga),\r\n fork(thriveSaga),\r\n fork(healthPlanServicesSaga), \r\n fork(mychartProxySaga),\r\n fork(dashboardSaga),\r\n fork(todosSaga),\r\n fork(healthPlanSaga),\r\n fork(healthSourceSaga),\r\n fork(epicSaga),\r\n fork(proxySaga),\r\n fork(videoVisitSchedulingSaga),\r\n //fork(dcjInboxSaga),\r\n fork(pricingSaga),\r\n fork(myChartDataTileSaga),\r\n fork(marketingEmailOptInSaga),\r\n fork(prayerFeatureSaga),\r\n fork(inHomeSaga),\r\n fork(careGapsSaga)\r\n ];\r\n\r\n // nice idea, but it sure made Salah's day harder...\r\n /*\r\n // sagas needed by the portal\r\n if (bundle === \"mybswhealth\") {\r\n watchers.push(fork(dashboardSaga));\r\n watchers.push(fork(todosSaga));\r\n watchers.push(fork(healthPlanSaga));\r\n watchers.push(fork(healthSourceSaga));\r\n }\r\n */\r\n\r\n try {\r\n yield all(watchers);\r\n }\r\n catch (err) {\r\n //debugger;\r\n console.error(err);\r\n }\r\n}","import { put, call, takeLatest, takeEvery, fork, all, select } from \"redux-saga/effects\";\r\nimport { getLocations, getLocationTypes, getMappedFacilityTypes } from \"../api/locationApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { log, logAPI } from \"../api/andyliticsApi\";\r\nimport * as Google from \"../api/googleApi\";\r\nimport * as portal from \"../api/portalApi\";\r\nimport Cookies from \"cookies-js\";\r\nimport * as Tools from \"../helpers/Tools\";\r\nconst USE_CURRENT_LOCATION = 'Current Location';\r\n\r\nexport default function* searchLocationsSaga() {\r\n yield takeLatest(types.SEARCH_LOCATION, handleSearch);\r\n yield takeLatest(types.GET_LOCATION_TYPES, handleLocationTypes);\r\n yield takeLatest(types.GET_FACILITY_TYPES, handleFacilityTypes);\r\n yield takeLatest(types.GEOLOCATION, getGeolocation);\r\n yield takeLatest(types.GEOADDRESS, getGeolocationAddress);\r\n}\r\n\r\nexport function* handleSearch(payload) {\r\n const start = new Date();\r\n try {\r\n const locations = yield call(getLocations, payload.searchModel);\r\n\r\n yield all([\r\n put({ type: types.SEARCH_LOCATION_SUCCESS, locations }),\r\n\r\n ]);\r\n\r\n \r\n logAPI(\"MBHWeb.Saga.Location.Get\", start, null);\r\n\r\n if (payload.callback) {\r\n payload.callback(locations);\r\n }\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Location.Get.Failure\", start, null, error);\r\n yield put({ type: types.AJAX_CALL_ERROR, error });\r\n yield put({ type: types.SEARCH_LOCATION_ERROR });\r\n if (payload.callback) {\r\n payload.callback(null);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleLocationTypes(payload) {\r\n const start = new Date();\r\n try {\r\n const locTypes = yield call(getLocationTypes, payload.searchModel);\r\n\r\n yield all([\r\n put({ type: types.GET_LOCATION_TYPES_SUCCESS, locTypes })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.Location.Get\", start, null);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Location.Get.Failure\", start, null, error);\r\n yield put({ type: types.AJAX_CALL_ERROR, error });\r\n }\r\n}\r\n\r\nexport function* handleFacilityTypes(payload) {\r\n const start = new Date();\r\n try {\r\n const facTypes = yield call(getMappedFacilityTypes, payload.searchModel);\r\n\r\n yield all([\r\n put({ type: types.GET_FACILITY_TYPES_SUCCESS, facTypes })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.Location.FacilityTypes.Get\", start, null);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Location.FacilityTypes.Get.Failure\", start, null, error);\r\n yield put({ type: types.AJAX_CALL_ERROR, error });\r\n }\r\n}\r\n\r\nexport function* getGeolocation(payload) {\r\n const start = new Date();\r\n const domain = yield select((state) => state.domain);\r\n //if usecurrentlocation is true then ask for current location.\r\n if (payload && payload.useCurrentLocation) {\r\n try {\r\n const position = yield call(getCurrentPosition);\r\n yield put({\r\n type: types.GEOLOCATION_SUCCESS,\r\n latitude: position.coords.latitude,\r\n longitude: position.coords.longitude,\r\n isCurrentLocation: true\r\n });\r\n logAPI(\"MBHWeb.Saga.Location.GetCurrentPosition.Success\", start, null);\r\n }\r\n catch (error) {\r\n // show geocode error.\r\n console.log(\"show geocode error\");\r\n logAPI(\"MBHWeb.Saga.Location.GetGeoLocation.Failure\", start, null, error);\r\n if (typeof window !== \"undefined\" && typeof Cookies.get('location_' + domain.un) !== \"undefined\" && Cookies.get('location_' + domain.un) && Cookies.get('location_' + domain.un) === USE_CURRENT_LOCATION) {\r\n Cookies.expire('location_' + domain.un, { domain: Tools.getDomain(location.href) });\r\n }\r\n yield put({ type: types.GEOLOCATION_FAILURE, geolocationError: getErrorMessage(error), isCurrentLocation: true});\r\n }\r\n } else {\r\n // Fall back to Google Here and check domain reducer if we already have lat and lng.\r\n if (typeof domain.lt !== 'undefined' && domain.lt !== null && domain.lt !== 0) {\r\n yield put({\r\n type: types.GEOLOCATION_SUCCESS,\r\n latitude: domain.lt,\r\n longitude: domain.ln,\r\n isCurrentLocation: false\r\n });\r\n return; // we don't need to re-run the call this session\r\n } else {\r\n // Fall back to Google Here\r\n try {\r\n const positionGoogle = yield call(Google.getGeoLocation);\r\n //debugger;\r\n if (positionGoogle && positionGoogle.location && positionGoogle.location.lat !== null && positionGoogle.location.lat > 0) {\r\n yield put({\r\n type: types.GEOLOCATION_SUCCESS,\r\n latitude: positionGoogle.location.lat,\r\n longitude: positionGoogle.location.lng,\r\n isCurrentLocation: false\r\n }); \r\n yield put({ type: types.GEOADDRESS, location: positionGoogle.location}); \r\n logAPI(\"MBHWeb.Saga.Location.GetGeoLocation\", start, null);\r\n }\r\n else {\r\n yield put({ type: types.GEOLOCATION_FAILURE, geolocationError: \"Geolocation is not enabled on this browser.\", isCurrentLocation: false });\r\n }\r\n\r\n }\r\n catch (error2) {\r\n console.error(error2);\r\n logAPI(\"MBHWeb.Saga.Location.GetGeoLocation.Failure\", start, null, error2);\r\n yield put({ type: types.GEOLOCATION_FAILURE, geolocationError: getErrorMessage(error2), isCurrentLocation: false });\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function* getGeolocationAddress(payload) { \r\n const start = new Date();\r\n const domainData = yield select((state) => state.domain); \r\n if (domainData && domainData.t && payload && payload.location && payload.location.lat && payload.location.lng) {\r\n try { \r\n const position = yield call(portal.getAddressFromLatLong, domainData.t, payload.location.lat, payload.location.lng); \r\n yield put({\r\n type: types.GEOADDRESS_SUCCESS,\r\n city: position.find((element) => element.types[0] === \"locality\").long_name,\r\n state: position.find((element) => element.types[0] === \"administrative_area_level_1\").short_name\r\n }); \r\n logAPI(\"MBHWeb.Saga.Location.getGeolocationAddress.Success\", start, null);\r\n }\r\n catch (error) { \r\n // show geocode error. \r\n console.log(\"show geocode error\");\r\n logAPI(\"MBHWeb.Saga.Location.getGeolocationAddress.Failure\", start, null, error);\r\n yield put({ type: types.GEOADDRESS_FAILURE, geoAddressError: getErrorMessage(error) });\r\n }\r\n }\r\n}\r\n\r\nfunction getCurrentPosition() {\r\n const start = new Date();\r\n if (typeof navigator !== 'undefined' && navigator.geolocation) {\r\n logAPI(\"MBHWeb.Saga.Location.GetCurrentPosition\", start, null);\r\n return new Promise((resolve, reject) =>\r\n navigator.geolocation.getCurrentPosition(resolve, reject)\r\n );\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.Location.GetCurrentPosition.Failure\", start, null);\r\n return new Promise((resolve, reject) =>\r\n reject({ message: 'Geolocation is not supported.' })\r\n );\r\n }\r\n}\r\n\r\nfunction getErrorMessage(error) { \r\n switch (error.code) {\r\n case error.PERMISSION_DENIED:\r\n return \"Geolocation is not enabled on this browser.\";\r\n break;\r\n case error.POSITION_UNAVAILABLE:\r\n return \"Your location information is not available.\";\r\n break;\r\n case error.TIMEOUT:\r\n return \"The location request has timed out.\";\r\n break;\r\n case error.UNKNOWN_ERROR:\r\n return \"We're not able to obtain your location.\";\r\n break;\r\n default: return \"\";\r\n }\r\n}","import { takeLatest, select, call, apply, put } from 'redux-saga/effects';\r\nimport * as types from '../constants/actionTypes';\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\nimport { setMarketingEmailOptIn, setScrubbingInEmailOptIn } from \"../api/mybswBFFApi\";\r\n\r\nexport default function* marketingEmailOptInSaga() {\r\n yield takeLatest(types.SET_MARKETING_EMAIL_OPT_IN, handleMarketingEmailOptIn, setMarketingEmailOptIn, 'MBHWeb.Saga.SetMarketingEmailOptIn');\r\n yield takeLatest(types.SET_SCRUBBING_IN_EMAIL_OPT_IN, handleScrubbingInEmailOptIn);\r\n}\r\n\r\nfunction* handleMarketingEmailOptIn(apiCall, andyliticsLogName, action) {\r\n const domainData = yield select((state) => state.domain);\r\n const type = action.type;\r\n const start = new Date();\r\n const data = action.data;\r\n\r\n try {\r\n if (!action.success && !action.error) {\r\n let response = null;\r\n response = yield call(apiCall, domainData.t, data);\r\n\r\n if (andyliticsLogName) {\r\n logAPI(andyliticsLogName, start, null, \"\");\r\n }\r\n\r\n yield put({\r\n type: types.SET_MARKETING_EMAIL_OPT_IN_SUCCESS\r\n });\r\n yield put({\r\n type: types.UPDATE_SEEN_MARKETING_EMAIL_OPT_IN\r\n });\r\n }\r\n }\r\n\r\n catch (error) {\r\n if (andyliticsLogName) {\r\n logAPI(andyliticsLogName + '.Failure', start, null, error);\r\n }\r\n\r\n if (error !== null && error.status !== 401) {\r\n yield put({ type: types.SET_MARKETING_EMAIL_OPT_IN_FAILURE, error: error });\r\n }\r\n }\r\n}\r\n\r\nfunction* handleScrubbingInEmailOptIn(payload) {\r\n const domainData = yield select((state) => state.domain);\r\n const start = new Date();\r\n const data = payload && payload.data ? payload.data : null;\r\n\r\n try {\r\n if (data) {\r\n let response = null;\r\n response = yield call(setScrubbingInEmailOptIn, domainData.t, data);\r\n if (response && response.addLead && response.addLead.success) {\r\n logAPI('MBHWeb.Saga.ScrubbingInEmailOptIn.Success', start, null, response);\r\n yield put({\r\n type: types.SET_SCRUBBING_IN_EMAIL_OPT_IN_SUCCESS, response: response\r\n });\r\n } else {\r\n logAPI('MBHWeb.Saga.ScrubbingInEmailOptIn.Failure', start, null, response);\r\n yield put({ type: types.SET_SCRUBBING_IN_EMAIL_OPT_IN_FAILURE, error: response });\r\n }\r\n } else {\r\n logAPI('MBHWeb.Saga.ScrubbingInEmailOptIn.Failure', start, null, {error: \"No Body\"});\r\n yield put({ type: types.SET_SCRUBBING_IN_EMAIL_OPT_IN_FAILURE, error: { error: \"No Body\" } });\r\n }\r\n }\r\n catch (error) {\r\n logAPI('MBHWeb.Saga.ScrubbingInEmailOptIn.Failure', start, null, error);\r\n yield put({ type: types.SET_SCRUBBING_IN_EMAIL_OPT_IN_FAILURE, error: error });\r\n }\r\n}","import { put, call, fork, all, select, takeLatest } from \"redux-saga/effects\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport * as Tools from \"../helpers/Tools\";\r\nimport { log, logAPI } from \"../api/andyliticsApi\";\r\nimport { recompileProfile } from \"../api/portalApi\";\r\n\r\nexport default function* membershipsSaga() {\r\n yield takeLatest([types.MEMBERSHIP_RECOMPILE_START], rebuildProfileData);\r\n}\r\n\r\nexport function* rebuildProfileData(data) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n var memberData = null;\r\n var token = data.t || domain.t;\r\n if (token) {\r\n memberData = yield Tools.safeCall(recompileProfile, token);\r\n }\r\n if (memberData === null || memberData?.result && !memberData.result.isSuccessful || memberData?.result && memberData?.result?.statusCode !== 200) {\r\n logAPI(\"MBHWeb.Saga.Membership.RecompileProfile.Failure\", start, null, data);\r\n }\r\n else {\r\n\r\n let parsedContent = JSON.parse(memberData.result?.responseContent);\r\n yield put({ type: types.MEMBERSHIP_GET_SUCCESS, data: parsedContent });\r\n }\r\n logAPI(\"MBHWeb.Saga.Membership.RecompileProfile\", start, null, data);\r\n }\r\n catch (ex) {\r\n if (data && data.callback) {\r\n data.callback(ex, false);\r\n }\r\n logAPI(\"MBHWeb.Saga.Membership.RecompileProfile.Failure\", start, null, data);\r\n console.error(ex);\r\n }\r\n}\r\n","import { put, call, takeLatest, all, select } from \"redux-saga/effects\";\r\nimport * as Pricing from \"../api/pricingApi\";\r\nimport { proxyInfo } from \"../api/epicApi\";//, getEvisitEligibility, getZipnosisEvisitUrl\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { logAPI, logUI } from \"../api/andyliticsApi\";\r\nimport * as tools from '../helpers/Tools';\r\n\r\n\r\n\r\nexport default function* myChartDataTileSaga() {\r\n yield takeLatest(types.MYCHART_DATA_TILE_TOUCHED, handleDataTileTouched);\r\n yield takeLatest(types.MYCHART_DEMOGRAPHICS_COMPLETE, handleDemoComplete);\r\n}\r\n\r\nfunction* handleDemoComplete(data) {\r\n try {\r\n console.info('myChartDataTileSaga handleDemoComplete');\r\n yield put({ type: types.MYCHART_DEMOGRAPHICS_COMPLETED });\r\n } catch (e) { console.info(`myChartDataTileSaga failed to toggle preLoad`);}\r\n}\r\n\r\nfunction* handleDataTileTouched(data) {\r\n try {\r\n console.info(`myChartDataTileSaga handleDataTileTouched `,data);\r\n yield put({ type: types.MYCHART_DATA_TILE_TOUCHED_SUCCESS, data });\r\n } catch (e) {\r\n logAPI(\"MBHWeb.Saga.myChartDataTile.handleDataTileTouched.Failure\", new Date(), null, e);\r\n }\r\n}\r\n\r\n","import { takeLatest, select, call, put } from 'redux-saga/effects';\r\nimport * as types from '../constants/actionTypes';\r\nimport * as proxy from '../api/mychartProxyAPI';\r\nimport * as common from './commonSaga';\r\n\r\nexport default function* mychartProxySaga() {\r\n yield takeLatest(types.MYCHART_PROXY_REQUEST, handle, proxy.requestAccess, 'MBHWeb.Saga.MyChart.Proxy.RequestProxyAccess');\r\n}\r\n\r\nfunction* handle(apiCall, andyliticsLogName, action) {\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n if (action.success && !action.error) {\r\n yield call(common.handle, apiCall, domainData.t, andyliticsLogName, action);\r\n }\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n}","import { put, call, takeLatest, all, select } from \"redux-saga/effects\";\r\nimport { getScheduleForProvider, getVisitTypeAndLocationForProvider, getArrivalTime,saveQuestionsResponse,loadQuestionByVisitType, getEarliestScheduleForProvider, getProvidersList, getMonthlyAvailability, scheduleAppointment, createPatient, getResponseForMammoQuestions } from \"../api/openSchedulingApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\nimport * as Tools from \"../helpers/Tools\";\r\n\r\nexport default function* openSchedulingSaga() {\r\n yield takeLatest(types.OPEN_SCHEDULE_PROVIDER, handleOpenScheduleProvider);\r\n yield takeLatest(types.OPEN_SCHEDULE_VISIT_TYPE_LOCATION, handleVisitTypeLocation);\r\n yield takeLatest(types.OPEN_SCHEDULE_MAMMOGRAM_QUESTIONS, handleLoadQuestionByVisitType);\r\n yield takeLatest(types.OPEN_SCHEDULE_MAMMOGRAM_ANSWERS, handleMammogramAnswers);\r\n yield takeLatest(types.OPEN_SCHEDULE_RESET_MAMMOGRAM_QUESTION_CURRENT_RESPONSE, resetMammogramQuestionsCurrentResponse);\r\n yield takeLatest(types.OPEN_SCHEDULE_QUESTIONS_RESPONSE, handleMammogramQuestionsResponse);\r\n yield takeLatest(types.OPEN_SCHEDULE_EARLIEST, handleEarliestForProvider);\r\n yield takeLatest(types.OPEN_SCHEDULE_ARRIVAL_TIME, handleArrivalTimeForProvider);\r\n yield takeLatest(types.OPEN_SCHEDULE_PROVIDER_LIST, handleProviderList);\r\n yield takeLatest(types.OPEN_SCHEDULE_SCHEDULE, handleSchedule);\r\n yield takeLatest(types.OPEN_SCHEDULE_CREATE_PATIENT, handleCreate);\r\n yield takeLatest(types.OPEN_SCHEDULE_CREATE_AND_SCHEDULE, handleCreateAndSchedule); \r\n}\r\n\r\nexport function* handleVisitTypeLocation(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n yield put({ type: types.OPEN_SCHEDULE_VISIT_TYPE_LOCATION_RUNNING });\r\n const visits = yield call(getVisitTypeAndLocationForProvider, payload.searchModel, payload.enableNewProviderSchedulingWorkflow, payload.enableNewVideoVisitFlow);\r\n yield put({ type: types.OPEN_SCHEDULE_VISIT_TYPE_LOCATION_SUCCESS, visits });\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.GetVisitTypeAndLocationForProvider\", start, null);\r\n if (payload.callback) {\r\n payload.callback(true, visits);\r\n }\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.GetVisitTypeAndLocationForProvider.Failure\", start, null, error);\r\n yield all([\r\n put({ type: types.OPEN_SCHEDULE_VISIT_TYPE_LOCATION_FAILED }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n if (payload.callback) {\r\n payload.callback(false, error);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleMammogramAnswers(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n const answers = yield call(getResponseForMammoQuestions, payload.searchModel, payload.token);\r\n yield put({ type: types.OPEN_SCHEDULE_MAMMOGRAM_ANSWERS_SUCCESS, answers });\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.getResponseForMammoQuestions\", start, null);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n yield put({ type: types.OPEN_SCHEDULE_MAMMOGRAM_ANSWERS_FAILURE});\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.getResponseForMammoQuestions.Failure\", start, null, error);\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* resetMammogramQuestionsCurrentResponse() {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n const answers = null;\r\n yield put({ type: types.OPEN_SCHEDULE_RESET_MAMMOGRAM_QUESTION_CURRENT_RESPONSE_COMPLETED, answers });\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.resetMammogramQuestionsCurrentResponse\", start, null);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.resetMammogramQuestionsCurrentResponse.Failure\", start, null, error);\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleMammogramQuestionsResponse(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n const response = yield call(saveQuestionsResponse, payload.searchModel, payload.token);\r\n yield put({ type: types.OPEN_SCHEDULE_QUESTIONS_RESPONSE_SUCCESS, response });\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.saveQuestionsResponse\", start, null);\r\n if (payload.callback) {\r\n payload.callback(true, response);\r\n }\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.saveQuestionsResponse.Failure\", start, null, error);\r\n if (payload.callback) {\r\n payload.callback(false, error);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleLoadQuestionByVisitType(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n const questions = yield call(loadQuestionByVisitType, payload.searchModel);\r\n yield put({ type: types.OPEN_SCHEDULE_MAMMOGRAM_QUESTIONS_SUCCESS, questions });\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.loadQuestionByVisitType\", start, null);\r\n if (payload.callback) {\r\n payload.callback(true, questions);\r\n }\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.loadQuestionByVisitType.Failure\", start, null, error);\r\n yield all([\r\n put({ type: types.OPEN_SCHEDULE_MAMMOGRAM_QUESTIONS_FAILURE }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n if (payload.callback) {\r\n payload.callback(false, error);\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleOpenScheduleProvider(payload) {\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n if (payload.searchModel.getEarliestSchedule) {\r\n // request earliest on all get schedule calls, to enable/disable calendar month navigation...\r\n // update: to unnecessarily call earliest schedule, the decision to call it or not is made at the component level thru this flag of getEarliesSchedule;\r\n // for example, it's not necessary to make that call while the user is moving from one month to another.\r\n\r\n const earliestModel = {\r\n departmentId: payload.searchModel.departmentId,\r\n providerId: payload.searchModel.providerId,\r\n providerIdType: payload.searchModel.providerIdType,\r\n scheduleType: payload.searchModel.scheduleType,\r\n visitTypeId: payload.searchModel.visitTypeId\r\n };\r\n\r\n if (payload.searchModel.scheduleType === \"DirectSchedule\") {\r\n earliestModel.loginId = payload.searchModel.loginId;\r\n earliestModel.patientId = payload.searchModel.patientId;\r\n earliestModel.patientIdType = payload.searchModel.patientIdType;\r\n earliestModel.authorization = payload.searchModel.authorization;\r\n }\r\n\r\n // parallelly make calls of provider schedule and earliest schedule.\r\n yield all([\r\n call(getSchedule, payload, payload.isMammogramSchedule),\r\n put({ type: types.OPEN_SCHEDULE_EARLIEST, searchModel: earliestModel, callback: payload.callbackOfEarliesSchedule })\r\n ]);\r\n }\r\n else {\r\n // only call provider schedule; do not call ealiest schedule.\r\n yield call(getSchedule, payload, payload.isMammogramSchedule);\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* getSchedule(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n // use a copy, since we're updating properties...\r\n const payloadWork = { ...payload };\r\n const allowStepForward = payload.searchModel.allowStepForward === undefined ? true : payload.searchModel.allowStepForward; // allow client code to specifically disable the while loop below (default to true)\r\n\r\n try {\r\n let provider = yield call(getScheduleForProvider, payloadWork.searchModel, payload.isMammogramSchedule);\r\n let iCountdown = allowStepForward ? 5 : 0;\r\n //let iCountdown = 5;\r\n\r\n while ((provider.scheduleDays === null || provider.scheduleDays.length === 0) && iCountdown > 0 && !payload.isMammogramSchedule) {\r\n let dThisDate = Tools.toJSDate(payloadWork.searchModel.start, Tools.getDateFormats());\r\n let dNextDate = Tools.addMonths(dThisDate, 1);\r\n // set the start date to 1, since we're requesting a new month...\r\n dNextDate.setDate(1);\r\n let dNextEnd = Tools.addMonths(dNextDate, 1);\r\n dNextEnd = Tools.addDays(dNextEnd, -1);\r\n payloadWork.searchModel.start = Tools.dateSimpleFormat(dNextDate);\r\n payloadWork.searchModel.end = Tools.dateSimpleFormat(dNextEnd);\r\n provider = yield call(getScheduleForProvider, payloadWork.searchModel);\r\n iCountdown--;\r\n }\r\n\r\n //if (provider.scheduleDays === null || provider.scheduleDays.length === 0) {\r\n // yield put({ type: types.OPEN_SCHEDULE_PROVIDER_FAILED });\r\n //}\r\n //else {\r\n yield put({ type: types.OPEN_SCHEDULE_PROVIDER_SUCCESS, provider, scheduleDaysAvailable: provider.scheduleDays !== null && provider.scheduleDays.length > 0 });\r\n //}\r\n\r\n if (payload.callback) {\r\n payload.callback(provider.scheduleDays, null, payload.searchModel.getEarliestSchedule, provider);\r\n }\r\n\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.GetScheduleForProvider\", start, null);\r\n }\r\n catch (error) {\r\n if (payload.callback) {\r\n payload.callback(null, error, payload.searchModel.getEarliestSchedule, null);\r\n }\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.GetScheduleForProvider.Failure\", start, null, error);\r\n yield put({ type: types.OPEN_SCHEDULE_PROVIDER_FAILED });\r\n yield put({ type: types.AJAX_CALL_ERROR, error });\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleEarliestForProvider(payload) {\r\n console.log(\"earliestPayload\", payload);\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n const schedule = yield call(getEarliestScheduleForProvider, payload.searchModel);\r\n yield put({ type: types.OPEN_SCHEDULE_EARLIEST_SUCCESS, schedule });\r\n if (payload.callback) {\r\n payload.callback(schedule, null);\r\n }\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.GetEarliestScheduleForProvider\", start, null);\r\n }\r\n catch (error) {\r\n if (payload.callback) {\r\n payload.callback(null, error);\r\n }\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.GetEarliestScheduleForProvider.Failure\", start, null, error);\r\n yield put({ type: types.OPEN_SCHEDULE_EARLIEST_FAILURE, error });\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleArrivalTimeForProvider(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n const schedule = yield call(getArrivalTime, payload.searchModel);\r\n yield put({ type: types.OPEN_SCHEDULE_ARRIVAL_TIME_SUCCESS, schedule });\r\n if (payload.callback) {\r\n payload.callback(schedule, null);\r\n }\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.GetArrivalTime\", start, null);\r\n }\r\n catch (error) {\r\n if (payload.callback) {\r\n payload.callback(null, error);\r\n }\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.GetArrivalTime.Failure\", start, null, error);\r\n yield put({ type: types.OPEN_SCHEDULE_ARRIVAL_TIME_FAILURE, error });\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleProviderList(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n const providers = yield call(getProvidersList, payload.searchModel);\r\n\r\n yield all([\r\n put({ type: types.OPEN_SCHEDULE_PROVIDER_LIST_SUCCESS, providers })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.GetProviderList\", start, null);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.GetProviderList.Failure\", start, null, error);\r\n yield put({ type: types.AJAX_CALL_ERROR, error });\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleMonthly(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n const schedule = yield call(getMonthlyAvailability, payload.searchModel);\r\n yield put({ type: types.OPEN_SCHEDULE_AVAILABILITY_SUCCESS, schedule });\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.GetMonthlyAvailability\", start, null);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.GetMonthlyAvailability.Failure\", start, null, error);\r\n yield put({ type: types.AJAX_CALL_ERROR, error });\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleSchedule(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n const scheduleCampaignReferrer = payload.model.scheduleCampaignReferrer;\r\n const scheduleCampaignActivity = scheduleCampaignReferrer ? { scheduleCampaignReferrer: scheduleCampaignReferrer } : {};\r\n try {\r\n yield put({ type: types.OPEN_SCHEDULE_SCHEDULE_PENDING });\r\n const schedule = yield call(scheduleAppointment, payload.model, payload.token, payload.isVaccineSearch, payload.isMammogramSchedule);\r\n // c'mon folks, check that 200 :)\r\n if (schedule.date) {\r\n yield put({ type: types.OPEN_SCHEDULE_SCHEDULE_SUCCESS, schedule });\r\n if (payload.callBack) {\r\n payload.callBack(true, \"\");\r\n }\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.ScheduleAppointment.Success\", start, null, { response: schedule, ...scheduleCampaignActivity});\r\n }\r\n else {\r\n // only God and special people will know what the actual error message was\r\n throw schedule;\r\n }\r\n\r\n }\r\n catch (error) { \r\n console.error(error);\r\n if (payload.callBack) {\r\n payload.callBack(false, error);\r\n }\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.ScheduleAppointment.Failure\", start, null, { error: error, ...scheduleCampaignActivity});\r\n yield put({ type: types.AJAX_CALL_ERROR, error });\r\n yield put({ type: types.OPEN_SCHEDULE_SCHEDULE_FAILED, error: error});\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleCreate(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n const patient = yield call(createPatient, payload.model, payload.token);\r\n yield put({ type: types.OPEN_SCHEDULE_CREATE_PATIENT_SUCCESS, patient });\r\n }\r\n catch (error) {\r\n console.error(error);\r\n yield all([\r\n put({ type: types.OPEN_SCHEDULE_CREATE_PATIENT_FAILED }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n\r\nexport function* handleCreateAndSchedule(payload) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n if (stateData && stateData.epicEHRDown === false) {\r\n try {\r\n yield put({ type: types.OPEN_SCHEDULE_SCHEDULE_PENDING });\r\n\r\n const created = yield call(createPatient, payload.patient, payload.token);\r\n //We need to validate the ID before calling Schedule Appointement \r\n if (created && created.ids) {\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.CreateAndScheduleAppointment.Create\", start, null);\r\n yield put({ type: types.OPEN_SCHEDULE_CREATE_PATIENT_SUCCESS, patient: created });\r\n // add ids from createPatient to schedule...\r\n let ids = created.ids;\r\n let scheduleModel = payload.schedule;\r\n if (ids && ids.length > 0) {\r\n let id = ids[0].id;\r\n let idType = ids[0].type;\r\n\r\n // per Utsab, prefer EPI, if present:\r\n let epi = ids.filter(item => item.type === \"EPI\");\r\n if (epi) {\r\n id = epi[0].id;\r\n idType = epi[0].type;\r\n }\r\n\r\n scheduleModel.proxyPatientId = id;\r\n scheduleModel.proxyPatientIdType = idType;\r\n \r\n const schedule = yield call(scheduleAppointment, scheduleModel, payload.token, payload.isVaccineSearch, payload.isMammogramSchedule);\r\n if (schedule.date) {\r\n if (payload.callBack) {\r\n payload.callBack(true, \"\");\r\n }\r\n\r\n yield all([\r\n put({ type: types.OPEN_SCHEDULE_SCHEDULE_SUCCESS, schedule })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.CreateAndScheduleAppointment.Schedule\", start, null);\r\n }\r\n else {\r\n throw new Error(\"Failed to schedule appointment.\"); // only God and special people know what the actual error message is.\r\n }\r\n }\r\n else {\r\n yield all([\r\n put({ type: types.OPEN_SCHEDULE_CREATE_PATIENT_FAILED }),\r\n put({ type: types.OPEN_SCHEDULE_SCHEDULE_FAILED }),\r\n put({ type: types.AJAX_CALL_ERROR, created })\r\n ]);\r\n //debugger;\r\n if (payload.callBack) {\r\n payload.callBack(false, \"Failed to create patient\");\r\n }\r\n }\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.CreateAndScheduleAppointment.Create.Failure\", start, null);\r\n //error is not defined so change the value reference\r\n yield all([\r\n put({ type: types.OPEN_SCHEDULE_CREATE_PATIENT_FAILED }),\r\n put({ type: types.OPEN_SCHEDULE_SCHEDULE_FAILED }),\r\n put({ type: types.AJAX_CALL_ERROR, created })\r\n ]);\r\n //debugger;\r\n if (payload.callBack) {\r\n payload.callBack(false, \"Failed to create patient\");\r\n }\r\n }\r\n }\r\n catch (error) {\r\n console.error(error);\r\n //debugger;\r\n if (payload.callBack) {\r\n payload.callBack(false, error);\r\n }\r\n logAPI(\"MBHWeb.Saga.OpenScheduling.CreateAndScheduleAppointment.Schedule.Failure\", start, null, error);\r\n yield all([\r\n put({ type: types.OPEN_SCHEDULE_SCHEDULE_FAILED }),\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n }\r\n else {\r\n console.log(\"openScheduingSaga: epicEHRDown\");\r\n }\r\n}\r\n","import { takeLatest, select, call, put } from 'redux-saga/effects';\r\nimport * as types from '../constants/actionTypes';\r\nimport * as proxy from '../api/pharmacyProxyApi';\r\nimport * as common from './commonSaga';\r\n\r\n//Not using this all methods, since we moved centralized proxy system. Please refer proxySaga.js\r\nexport default function* pharmacyProxySaga() {\r\n yield takeLatest(types.PHARMACY_PROXY_INFO, handle, proxy.getProxiesInfo, 'MBHWeb.Saga.Rx.Proxy.GetProxyInfo');\r\n yield takeLatest(types.PHARMACY_PROXY_REQUEST, handle, proxy.requestAccess, 'MBHWeb.Saga.Rx.Proxy.RequestProxyAccess');\r\n yield takeLatest(types.PHARMACY_PROXY_RESEND_REQUEST, handle, proxy.resendRequest, 'MBHWeb.Saga.Rx.Proxy.ResendProxyAccessRequest');\r\n yield takeLatest(types.PHARMACY_PROXY_REMOVE, handle, proxy.removeAccess, 'MBHWeb.Saga.Rx.Proxy.CancelProxyRequest');\r\n yield takeLatest(types.PHARMACY_PROXY_APPROVE, handle, proxy.approveRequest, 'MBHWeb.Saga.Rx.Proxy.ApproveProxyRequest');\r\n yield takeLatest(types.PHARMACY_PROXY_DECLINE, handle, proxy.declineRequest, 'MBHWeb.Saga.Rx.Proxy.DeclineProxyRequest');\r\n yield takeLatest(types.PHARMACY_PROXY_ACCESS_LIST, handle, proxy.getAccessList, null); // proxy.getAccessList is implemented around proxy.getProxiesInfo\r\n yield takeLatest(types.PHARMACY_PROXY_GRANT, handle, proxy.grantAccess, 'MBHWeb.Saga.Rx.Proxy.GrantProxyAccess');\r\n yield takeLatest(types.HEALTH_RECORD_PROXY_REQUEST, handle, proxy.requestHealthRecordAccess, 'MBHWeb.Saga.Rx.Proxy.RequestHealthRecordProxyAccess');\r\n}\r\n\r\nfunction* handle(apiCall, andyliticsLogName, action) {\r\n try {\r\n const type = action.type;\r\n const domainData = yield select((state) => state.domain);\r\n if (action.success) { \r\n if (((type === types.PHARMACY_PROXY_REQUEST || type === types.HEALTH_RECORD_PROXY_REQUEST) && action.data && action.data.Status === 'Approved')\r\n || type === types.PHARMACY_PROXY_REMOVE) {\r\n yield put({ type: types.PHARMACY_PROXY_ACCESS_LIST });\r\n if (type === types.PHARMACY_PROXY_REQUEST) yield put({ type: types.PHARMACY_PROXY_REQUEST_DATA, pData: {} });\r\n if (type === types.HEALTH_RECORD_PROXY_REQUEST || type === types.PHARMACY_PROXY_REQUEST) {\r\n yield put({ type: types.PROXY_REQUEST_DATA, pData: {} }); \r\n }\r\n }\r\n if (type === types.PHARMACY_PROXY_RESEND_REQUEST ||\r\n type === types.PHARMACY_PROXY_REMOVE ||\r\n type === types.PHARMACY_PROXY_APPROVE ||\r\n type === types.PHARMACY_PROXY_DECLINE) {\r\n yield put({ type: types.PHARMACY_PROXY_INFO });\r\n }\r\n }\r\n else if (!action.error) {\r\n //if (type === types.PHARMACY_PROXY_INFO) {\r\n // yield put({ type: types.PHARMACY_PROXY_REQUEST, success: true, data: null });\r\n //} \r\n yield call(common.handle, apiCall, domainData.t, andyliticsLogName, action);\r\n }\r\n }\r\n catch (e) {\r\n //debugger;\r\n console.error(e);\r\n }\r\n}\r\n","import { call, put, select, takeLatest } from 'redux-saga/effects';\r\nimport Cookies from \"cookies-js\";\r\nimport * as types from '../constants/actionTypes';\r\nimport * as pharmacy from '../api/pharmacyApi';\r\nimport { linkPharmacyAccount } from '../api/healthSourceApi';\r\nimport { userRefresh } from \"../api/ssoApi\";\r\nimport { getCityOrZip } from \"../api/typeaheadApi\";\r\nimport * as d from \"../reducers/domainReducer\";\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\nimport { getDomain } from \"../helpers/Tools\";\r\n\r\nexport default function* pharmacySaga() {\r\n yield takeLatest([types.ARCHIVE_UNARCHIVE_RX_START], handlePharmacyAction);\r\n yield takeLatest([types.GET_PHARMACY_BY_STORENUMBER_START], handlePharmacyAction);\r\n yield takeLatest([types.LINK_PHARMACY], handlePharmacyAction);\r\n yield takeLatest([types.LOAD_ARCHIVED_RX_LIST_START], handlePharmacyAction);\r\n yield takeLatest([types.LOAD_ORDERREFILLS_LIST_START], handlePharmacyAction);\r\n yield takeLatest([types.LOAD_PHARMACYDASHBOARD_START], handlePharmacyAction);\r\n yield takeLatest(types.CLOSEST_PHARMACY, handlePharmacyAction);\r\n yield takeLatest([types.LOAD_PICKUP_HOURS_START], handlePharmacyAction);\r\n yield takeLatest([types.LOAD_RX_LIST_START], handlePharmacyAction);\r\n yield takeLatest([types.PHARMACY_LIST_START], handlePharmacyAction);\r\n yield takeLatest([types.RECENTPHARMACY_LIST_START], handlePharmacyAction);\r\n yield takeLatest([types.RX_DETAIL], handlePharmacyAction);\r\n yield takeLatest([types.RX_READY_FOR_PICKUP], handlePharmacyAction);\r\n yield takeLatest([types.SET_FAVOURITE_PHARMACY_START], handlePharmacyAction);\r\n yield takeLatest([types.SUBMIT_IVR_ORDER_REQUEST], handlePharmacyAction);\r\n yield takeLatest([types.INTERNAL_RX_TRANSFER_START], handlePharmacyAction);\r\n yield takeLatest([types.EXTERNAL_RX_TRANSFER_START], handlePharmacyAction);\r\n yield takeLatest([types.UNLINK_RX_TRANSFER_START], handlePharmacyAction);\r\n yield takeLatest([types.USER_AUTHENTICATE_SUCCESS], handlePharmacyAction);\r\n yield takeLatest(types.CITY_ZIP_LIST, handlePharmacyAction);\r\n yield takeLatest(types.ARCHIVE_UNLINKED_RX_TRANSFER_START, handlePharmacyAction);\r\n //yield takeLatest([types.SWITCH_USER_SAGA], handleUserSwitch); //<--- putting it off as it's causing for the dashboard not to load\r\n}\r\n\r\nfunction* handlePharmacyAction(data) {\r\n const start = new Date();\r\n const stateData = yield select((state) => state.common);\r\n\r\n if (stateData && !stateData.rxDown) {\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n const membershipData = yield select((state) => state.memberships);\r\n\r\n //const userDetails = yield select((state) => state.sso.userDetails); // <-- this makes assumptions about state a saga can't make (because it's not tied into the state lifecycle)\r\n const userDetails = data.userDetails || data.userData || (data.payload ? data.payload.userDetails || data.payload.userData : null);\r\n\r\n let authToken = domainData.t;\r\n let refreshToken = domainData.rt;\r\n\r\n //retrive pharmacy proxy id from domain data \r\n const currentPharmacyUser = d.hydratePharmacyUser(domainData.cpu);\r\n let pharmacyProxyId = currentPharmacyUser && currentPharmacyUser.pharmacyPatientId ? currentPharmacyUser.pharmacyPatientId : \"\";\r\n\r\n const locations = yield select((state) => state.locations);\r\n\r\n //if (userDetails && userDetails.access_token) {\r\n let defaultPharmacy;\r\n let citiesList;\r\n let thisType = \"\";\r\n try {\r\n thisType = data.type;\r\n }\r\n catch (err) {\r\n //console.log(err);\r\n }\r\n switch (thisType) {\r\n case types.LOAD_PHARMACYDASHBOARD_START:\r\n case types.USER_AUTHENTICATE_SUCCESS:\r\n try {\r\n if (domainData.lt === null || domainData.lt === 0) {\r\n yield put({ type: types.GEOLOCATION });\r\n } else if (!(locations && locations.city && locations.state)) {\r\n yield put({ type: types.GEOADDRESS, location: { lat: domainData.lt, lng: domainData.ln } });\r\n }\r\n } catch (locationerr) {\r\n //console.log(locationerr);\r\n }\r\n if (!membershipData.isActiveFeature_Pharmacy && !pharmacyProxyId) {\r\n break;\r\n }\r\n try {\r\n const pharmacyDashBoardData = yield call(pharmacy.getPharmacyDashBoardData, pharmacyProxyId, authToken);\r\n logAPI(\"MBHWeb.Saga.Rx.Dashboard.Get\", start, null);\r\n try {\r\n defaultPharmacy = yield call(pharmacy.getDefaultPharmacyData, null, pharmacyProxyId, authToken);\r\n logAPI(\"MBHWeb.Saga.Rx.DefaultPharmacy.Get\", start, null);\r\n }\r\n catch (defaultPharmacyError) {\r\n logAPI(\"MBHWeb.Saga.Rx.DefaultPharmacy.Get.Failure\", start, null, defaultPharmacyError);\r\n yield put({ type: types.RX_DEFAULT_PHARMACY_FAILURE, defaultPharmacyError: defaultPharmacyError });\r\n }\r\n yield put({ type: types.LOAD_PHARMACYDASHBOARD_SUCCESS, pharmacyDashboardData: pharmacyDashBoardData, defaultPharmacyData: defaultPharmacy });\r\n if (typeof data.loadPickups === \"undefined\" || data.loadPickups) {\r\n try {\r\n yield call(onReadyForPickup, pharmacyProxyId, authToken);\r\n }\r\n catch (readyForPickupError) {\r\n logAPI(\"MBHWeb.Saga.Rx.ReadyForPickup.Get.Failure\", start, null, readyForPickupError);\r\n yield put({ type: types.RX_READY_FOR_PICKUP_FAILURE, error: readyForRefillError });\r\n }\r\n }\r\n if (typeof data.loadRefills === \"undefined\" || data.loadRefills) {\r\n try {\r\n const readyForRefill = yield call(pharmacy.getReadyForRefill, pharmacyProxyId, authToken);\r\n yield put({ type: types.RX_READY_FOR_REFILL_SUCCESS, readyForRefill: readyForRefill });\r\n logAPI(\"MBHWeb.Saga.Rx.ReadyForRefill.Get\", start, null);\r\n }\r\n catch (readyForRefillError) {\r\n logAPI(\"MBHWeb.Saga.Rx.ReadyForRefill.Get.Failure\", start, null, readyForRefillError);\r\n yield put({ type: types.RX_READY_FOR_REFILL_FAILURE, error: readyForRefillError });\r\n }\r\n }\r\n }\r\n catch (pharmacyDashboardError) {\r\n yield put({ type: types.LOAD_PHARMACYDASHBOARD_FAILURE, error: pharmacyDashboardError });\r\n logAPI(\"MBHWeb.Saga.Rx.Dashboard.Get.Failure\", start, null, pharmacyDashboardError);\r\n }\r\n break;\r\n case types.CLOSEST_PHARMACY:\r\n try {\r\n let closestPharmacy = null;\r\n const response = yield call(pharmacy.getClosestPharmacy, data.latitude, data.longitude, authToken);\r\n if (response && response.length > 0) {\r\n closestPharmacy = response[0];\r\n }\r\n yield put({ type: types.CLOSEST_PHARMACY_SUCCESS, closestPharmacy: closestPharmacy });\r\n logAPI(\"MBHWeb.Saga.Rx.GetClosest.Get\", start, null);\r\n }\r\n catch (closestPharmacyError) {\r\n yield put({ type: types.CLOSEST_PHARMACY_FAILURE, error: closestPharmacyError });\r\n logAPI(\"MBHWeb.Saga.Rx.GetClosest.Get.Failure\", start, null, closestPharmacyError);\r\n }\r\n break;\r\n case types.LINK_PHARMACY:\r\n const accountToLink = yield select((state) => state.pharmacy.accountToLink);\r\n try {\r\n const linkedAccount = yield call(linkPharmacyAccount, authToken, accountToLink);\r\n const token = yield call(userRefresh, { refresh_token: refreshToken });\r\n if (token && token.access_token) {\r\n authToken = token.access_token;\r\n yield put({ type: types.LINK_PHARMACY_SUCCESS, linkedAccount: linkedAccount, refreshTokenIsGood: true });\r\n yield put({ type: types.MEMBERSHIP_GET_SUCCESS, data: linkedAccount.Profile})\r\n yield put({ type: types.USER_AUTHENTICATE_SUCCESS, userData: token, responseError: null, isWaiting: false });\r\n logAPI(\"MBHWeb.Saga.Rx.LinkAccount.Get\", start, null, { response: linkedAccount ? linkedAccount : null });\r\n }\r\n else {\r\n yield put({ type: types.LINK_PHARMACY_SUCCESS, linkedAccount: linkedAccount, refreshTokenIsGood: false });\r\n logAPI(\"MBHWeb.Saga.Rx.LinkAccount.Get.Failure\", start, null, { error: 'Unable to link because refresh token is no more usable.' });\r\n }\r\n\r\n if (data.callback) {\r\n data.callback(linkedAccount);\r\n }\r\n }\r\n catch (linkError) {\r\n if (linkError && linkError.status && linkError.status === 409) {\r\n const token2 = yield call(userRefresh, { refresh_token: refreshToken });\r\n if (token2 && token2.access_token) {\r\n authToken = token2.access_token;\r\n yield put({ type: types.LINK_PHARMACY_FAILURE, error: linkError, refreshTokenIsGood: true });\r\n yield put({ type: types.USER_AUTHENTICATE_SUCCESS, userData: token2, responseError: null, isWaiting: false });\r\n }\r\n else {\r\n yield put({ type: types.LINK_PHARMACY_FAILURE, error: linkError, refreshTokenIsGood: false });\r\n }\r\n }\r\n else {\r\n yield put({ type: types.LINK_PHARMACY_FAILURE, error: linkError });\r\n }\r\n let linkErrorDetails = null;\r\n try {\r\n if (linkError) {\r\n linkErrorDetails = yield call(parseRspMsg, linkError);\r\n }\r\n } catch (err) { };\r\n logAPI(\"MBHWeb.Saga.Rx.LinkAccount.Get.Failure\", start, null, {\r\n response: {\r\n requestData: accountToLink ? accountToLink : null,\r\n statusCode: linkError && linkError.status ? linkError.status : null,\r\n statusText: linkError && linkError.statusText ? linkError.statusText : null,\r\n rspMsg: linkErrorDetails\r\n }});\r\n }\r\n break;\r\n case types.EXTERNAL_RX_TRANSFER_START:\r\n try {\r\n var requestData = data ? data.request : '';\r\n const externalRxTransferResponse = yield call(pharmacy.submitExternalRxTransfer, requestData, authToken, pharmacyProxyId);\r\n if (externalRxTransferResponse) {\r\n yield put({ type: types.EXTERNAL_RX_TRANSFER_SUCCESS, serviceResponse: externalRxTransferResponse });\r\n logAPI(\"MBHWeb.Saga.Rx.RxTransfer.Get\", start, null);\r\n }\r\n if (data.callback) {\r\n data.callback(externalRxTransferResponse, null);\r\n }\r\n }\r\n catch (submitError) {\r\n if (submitError && submitError.status && submitError.status === 400) {\r\n const errorMessage = yield call(getErrorMessage, submitError);\r\n yield put({ type: types.EXTERNAL_RX_TRANSFER_FAILURE, error: submitError, apiErrorMessage: errorMessage });\r\n }\r\n else {\r\n yield put({ type: types.EXTERNAL_RX_TRANSFER_FAILURE, error: submitError, serviceWaiaitng: false });\r\n }\r\n if (data.callback) {\r\n data.callback(null, submitError);\r\n }\r\n logAPI(\"MBHWeb.Saga.PharmacyRx.Transfer.Get.Failure\", start, null, submitError);\r\n }\r\n break;\r\n case types.PHARMACY_LIST_START:\r\n try {\r\n const pharmacyListDetails = yield call(pharmacy.getPharmacyList, data.payload, pharmacyProxyId, authToken);\r\n //try {\r\n // citiesList = yield call(pharmacy.getCities, authToken);\r\n //}\r\n //catch (citiesPharmacyError) {\r\n // if (citiesPharmacyError && citiesPharmacyError.status && citiesPharmacyError.status !== 401) {\r\n // yield put({ type: types.CITIES_LIST_FAILURE, citiesPharmacyError: citiesPharmacyError });\r\n // }\r\n //}\r\n yield put({ type: types.PHARMACY_LIST_COMPLETED, pharmacyList: pharmacyListDetails, /*pharmacyCitiesList: citiesList,*/ isWaiting: false });\r\n logAPI(\"MBHWeb.Saga.Rx.List.Get\", start, null);\r\n }\r\n catch (pharmacyListError) {\r\n logAPI(\"MBHWeb.Saga.Rx.List.Get.Failure\", start, null, pharmacyListError);\r\n }\r\n break;\r\n case types.RECENTPHARMACY_LIST_START:\r\n const recentPharmaciesList = yield call(pharmacy.getRecentlyUsedPharmacies, authToken, pharmacyProxyId);\r\n try {\r\n citiesList = yield call(pharmacy.getCities, authToken);\r\n logAPI(\"MBHWeb.Saga.Rx.ListRecent.Get\", start, null);\r\n }\r\n catch (recentPharmacyError) {\r\n yield put({ type: types.RECENTPHARMACY_LIST_FAILURE, recentPharmacyError: recentPharmacyError });\r\n logAPI(\"MBHWeb.Saga.Rx.ListRecent.Get.Failure\", start, null, recentPharmacyError);\r\n }\r\n yield put({ type: types.RECENTPHARMACY_LIST_COMPLETED, recentPharmaciesList: recentPharmaciesList, pharmacyCitiesList: citiesList, isWaiting: false });\r\n break;\r\n case types.CITY_ZIP_LIST:\r\n try {\r\n const cityZipList = yield call(getCityOrZip, data.searchModel);\r\n yield put({ type: types.CITY_ZIP_LIST_SUCCESS, cityZipList: cityZipList.results });\r\n logAPI(\"MBHWeb.Saga.Rx.CityZip.Get\", start, null);\r\n }\r\n catch (cityZipListError) {\r\n yield put({ type: types.CITY_ZIP_LIST_FAILURE, cityZipListError });\r\n logAPI(\"MBHWeb.Saga.Rx.CityZip.Get.Failure\", start, null, cityZipListError);\r\n }\r\n break;\r\n case types.LOAD_RX_LIST_START:\r\n try {\r\n const activeRxList = yield call(pharmacy.getActivePrescriptionList, pharmacyProxyId, authToken);\r\n yield put({ type: types.LOAD_RX_LIST_COMPLETED, activeRxList: activeRxList });\r\n logAPI(\"MBHWeb.Saga.Rx.ActivePrescriptionList.Get\", start, null, activeRxList);\r\n }\r\n catch (rxListError) {\r\n yield put({ type: types.RX_List_FAILURE, error: rxListError });\r\n logAPI(\"MBHWeb.Saga.Rx.ActivePrescriptionList.Get.Failure\", start, null, rxListError);\r\n }\r\n break;\r\n case types.LOAD_ARCHIVED_RX_LIST_START:\r\n try {\r\n const archivedRxList = yield call(pharmacy.getArchivedPrescriptionList, pharmacyProxyId, authToken);\r\n yield put({ type: types.LOAD_ARCHIVED_RX_LIST_COMPLETED, archivedRxList: archivedRxList });\r\n logAPI(\"MBHWeb.Saga.Rx.ArchivedPrescriptionList.Get\", start, null);\r\n }\r\n catch (archivedRxListError) {\r\n yield put({ type: types.RX_ARCHIVED_List_FAILURE, error: archivedRxListError });\r\n logAPI(\"MBHWeb.Saga.Rx.ArchivedPrescriptionList.Get.Failure\", start, null, archivedRxListError);\r\n }\r\n break;\r\n case types.ARCHIVE_UNARCHIVE_RX_START:\r\n try {\r\n const activeRxResponse = yield call(pharmacy.archivePrescription, data.payload.rxNumber ? data.payload.rxNumber : '', data.payload.storeNumber ? data.payload.storeNumber : '', data.payload.archive, pharmacyProxyId, authToken);\r\n yield put({ type: types.ARCHIVE_UNARCHIVE_RX_SUCCESS, serviceResponse: activeRxResponse, isWaiting: false });\r\n logAPI(\"MBHWeb.Saga.Rx.ArchivePrescription.Get\", start, null);\r\n }\r\n catch (archiveUnarchiveError) {\r\n yield put({ type: types.ARCHIVE_UNARCHIVE_RX_FAILURE, archiveUnarchiveError: archiveUnarchiveError });\r\n logAPI(\"MBHWeb.Saga.Rx.ArchivePrescription.Get.Failure\", start, null, archiveUnarchiveError);\r\n }\r\n break;\r\n case types.RX_DETAIL:\r\n try {\r\n const rxDetail = yield call(pharmacy.getRxDetail, authToken, data.rxNumber, data.storeNumber, data.isExternalRx ? data.isExternalRx : false, pharmacyProxyId);\r\n yield put({ type: types.RX_DETAIL_SUCCESS, rxDetail: rxDetail, rxNumber: data.rxNumber, storeNumber: data.storeNumber });\r\n try {\r\n const rxHistory = yield call(pharmacy.getRxHistory, authToken, data.rxNumber, data.storeNumber, pharmacyProxyId);\r\n yield put({ type: types.RX_HISTORY_SUCCESS, rxHistory: rxHistory });\r\n logAPI(\"MBHWeb.Saga.Rx.RxDetail.Get\", start, null);\r\n }\r\n catch (rxHistoryError) {\r\n yield put({ type: types.RX_HISTORY_FAILURE, error: rxHistoryError });\r\n logAPI(\"MBHWeb.Saga.Rx.RxDetail.Get.Failure\", start, null, rxHistoryError);\r\n }\r\n\r\n }\r\n catch (rxDetailError) {\r\n yield put({ type: types.RX_DETAIL_FAILURE, error: rxDetailError });\r\n logAPI(\"MBHWeb.Saga.Rx.RxDetail.Get.Failure\", start, null, rxDetailError);\r\n }\r\n break;\r\n case types.RX_READY_FOR_PICKUP:\r\n try {\r\n yield call(onReadyForPickup, pharmacyProxyId, authToken, data.storeNumber);\r\n logAPI(\"MBHWeb.Saga.Rx.ReadyForPickup.Get\", start, null);\r\n }\r\n catch (readyForPickupError) {\r\n logAPI(\"MBHWeb.Saga.Rx.ReadyForPickup.Get.Failure\", start, null, readyForPickupError);\r\n }\r\n break;\r\n case types.UNLINK_RX_TRANSFER_START:\r\n try {\r\n const unlinkedTranfer = yield call(pharmacy.unlinkedRxTransfers, pharmacyProxyId, authToken);\r\n if (unlinkedTranfer && unlinkedTranfer.status && unlinkedTranfer.status === 204) {\r\n let unlinkedTranferRspMsg = null;\r\n try {\r\n unlinkedTranferRspMsg = yield call(parseRspMsg, unlinkedTranfer);\r\n } catch (err) { }; //Keep the default unLinked transfer tile. when doesn't have body content and its fall into catch block.\r\n yield put({ type: types.UNLINK_RX_TRANSFER_SUCCESS, serviceResponse: unlinkedTranferRspMsg ? unlinkedTranferRspMsg : null }); \r\n logAPI(\"MBHWeb.Saga.Rx.UnlinkedRxTransfer.Get\", start, null, { response: { statusCode: unlinkedTranfer.status, statusText: unlinkedTranfer.statusText, rspMsg: unlinkedTranferRspMsg } });\r\n } else {\r\n yield put({ type: types.UNLINK_RX_TRANSFER_SUCCESS, serviceResponse: unlinkedTranfer });\r\n logAPI(\"MBHWeb.Saga.Rx.UnlinkedRxTransfer.Get\", start, null, { response: unlinkedTranfer });\r\n }\r\n }\r\n catch (unlinkedTransferError) {\r\n //if (unlinkedTransferError && unlinkedTransferError.status && unlinkedTransferError.status !== 401) {\r\n yield put({ type: types.UNLINK_RX_TRANSFER_FAILURE, unlinkedTransferError: unlinkedTransferError });\r\n //}\r\n //else { // added this to handle SyntaxError from API \r\n // yield put({ type: types.AJAX_CALL_ERROR, pharmacyError: unlinkedTransferError, waitingOnUnLinkedRxTransfer: false });\r\n //}\r\n logAPI(\"MBHWeb.Saga.Rx.UnlinkedRxTransfer.Get.Failure\", start, null, unlinkedTransferError);\r\n }\r\n break;\r\n case types.LOAD_ORDERREFILLS_LIST_START:\r\n try {\r\n const orderRefills = yield call(pharmacy.getOrderRefills, data.payload.storeNumber ? data.payload.storeNumber : '', pharmacyProxyId, authToken);\r\n yield put({ type: types.LOAD_ORDERREFILLS_LIST_COMPLETED, serviceResponse: orderRefills, isWaiting: false });\r\n if (data.callback) {\r\n data.callback(orderRefills);\r\n }\r\n logAPI(\"MBHWeb.Saga.Rx.OrderRefills.Get\", start, null);\r\n }\r\n catch (orderRefillsListError) {\r\n yield put({ type: types.LOAD_ORDERREFILLS_LIST_FAILURE, error: orderRefillsListError });\r\n logAPI(\"MBHWeb.Saga.Rx.OrderRefills.Get.Failure\", start, null, orderRefillsListError);\r\n if (data.callback) {\r\n data.callback({ error: orderRefillsListError });\r\n }\r\n }\r\n break;\r\n case types.LOAD_PICKUP_HOURS_START:\r\n try {\r\n const pickupHours = yield call(pharmacy.getPickupHours, data.payload.storeNumber ? data.payload.storeNumber : '', authToken);\r\n var pickupDates = pickupHours.map((e, index) => {\r\n return { value: index, label: e.LongDisplayDate };\r\n });\r\n yield put({ type: types.LOAD_PICKUP_HOURS_COMPLETED, serviceResponse: pickupHours, pickupDates: pickupDates, isWaiting: false });\r\n logAPI(\"MBHWeb.Saga.Rx.PickupHours.Get\", start, null);\r\n if (data.callback) {\r\n data.callback(pickupHours, null);\r\n }\r\n }\r\n catch (pickupHoursError) {\r\n yield put({ type: types.LOAD_PICKUP_HOURS_FAILURE, pickupHoursError });\r\n logAPI(\"MBHWeb.Saga.Rx.PickupHours.Get.Failure\", start, null, pickupHoursError);\r\n if (data.callback) {\r\n data.callback(null, pickupHoursError);\r\n }\r\n }\r\n break;\r\n case types.SUBMIT_IVR_ORDER_REQUEST:\r\n try {\r\n var orderRefill = data ? data.payload.RxOrderRefillData : '';\r\n const subimittedResponse = yield call(pharmacy.submitIVROrder, orderRefill, pharmacyProxyId, authToken);\r\n if (subimittedResponse) {\r\n yield put({ type: types.SUBMIT_IVR_ORDER_COMPLETED, serviceResponse: subimittedResponse, isWaiting: false });\r\n logAPI(\"MBHWeb.Saga.Rx.SubmitIVROrder.Get\", start, null);\r\n }\r\n if (data.callback) {\r\n data.callback(subimittedResponse, null);\r\n }\r\n }\r\n catch (submitIvrOrderError) {\r\n yield put({ type: types.SUBMIT_IVR_ORDER_FAILURE, isWaiting: false });\r\n logAPI(\"MBHWeb.Saga.Rx.SubmitIVROrder.Get.Failure\", start, null, submitIvrOrderError);\r\n if (data.callback) {\r\n data.callback(null, submitIvrOrderError);\r\n }\r\n }\r\n break;\r\n case types.GET_PHARMACY_BY_STORENUMBER_START:\r\n try {\r\n const selectedPharmacyDetails = yield call(pharmacy.getDefaultPharmacyData, data.payload.storeNumber ? data.payload.storeNumber : '', pharmacyProxyId, authToken);\r\n yield put({ type: types.GET_PHARMACY_BY_STORENUMBER_COMPLETED, pharmacyByStoreNumber: selectedPharmacyDetails });\r\n logAPI(\"MBHWeb.Saga.Rx.DefaultData.Get\", start, null);\r\n }\r\n catch (pharmacyByStoreError) {\r\n yield put({ type: types.GET_PHARMACY_BY_STORENUMBER_FAILURE, pharmacyByStoreError: pharmacyByStoreError });\r\n logAPI(\"MBHWeb.Saga.Rx.DefaultData.Get.Failure\", start, null, pharmacyByStoreError);\r\n }\r\n break;\r\n case types.INTERNAL_RX_TRANSFER_START:\r\n try {\r\n requestData = data ? data.payload : '';\r\n const submittedResponse = yield call(pharmacy.submitRxTransfer, requestData, authToken, pharmacyProxyId);\r\n if (submittedResponse) {\r\n yield put({ type: types.INTERNAL_RX_TRANSFER_COMPLETED, serviceResponse: submittedResponse });\r\n logAPI(\"MBHWeb.Saga.Rx.SubmitRxTransfer.Get\", start, null);\r\n }\r\n if (data.callback) {\r\n data.callback(submittedResponse, null);\r\n }\r\n }\r\n catch (submitError) {\r\n yield put({ type: types.INTERNAL_RX_TRANSFER_FAILURE, error: submitError });\r\n logAPI(\"MBHWeb.Saga.Rx.SubmitRxTransfer.Get.Failure\", start, null, submitError);\r\n if (data.callback) {\r\n data.callback(null, submitError);\r\n }\r\n }\r\n break;\r\n case types.SET_FAVOURITE_PHARMACY_START:\r\n try {\r\n const response = yield call(pharmacy.setFavouritePharmacy, data.payload.storeNumber ? data.payload.storeNumber : '', pharmacyProxyId, authToken);\r\n if (response === 'success') {\r\n yield put({ type: types.SET_FAVOURITE_PHARMACY_SUCCESS, defaultPharmacyStoreNumber: data.payload.storeNumber });\r\n logAPI(\"MBHWeb.Saga.Rx.SetFavorite.Get\", start, null);\r\n }\r\n else {\r\n yield put({ type: types.SET_FAVOURITE_PHARMACY_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.Rx.SetFavorite.Get.Failure\", start, null);\r\n }\r\n }\r\n catch (pharmacyError) {\r\n yield put({ type: types.SET_FAVOURITE_PHARMACY_FAILURE, error: pharmacyError });\r\n logAPI(\"MBHWeb.Saga.Rx.SetFavorite.Get.Failure\", start, null, pharmacyError);\r\n }\r\n break;\r\n case types.ARCHIVE_UNLINKED_RX_TRANSFER_START:\r\n try {\r\n const response = yield call(pharmacy.archiveUnlinkedRxTransfers, authToken);\r\n if (response) {\r\n yield put({ type: types.ARCHIVE_UNLINKED_RX_TRANSFER_SUCCESS, archivedUnlinkedRxResponse: response });\r\n logAPI(\"MBHWeb.Saga.Rx.ArchiveUnlinkedRxTransfers.Get\", start, null);\r\n }\r\n else {\r\n yield put({ type: types.ARCHIVE_UNLINKED_RX_TRANSFER_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.Rx.ArchiveUnlinkedRxTransfers.Get.Failure\", start, null);\r\n }\r\n }\r\n catch (pharmacyError) {\r\n yield put({ type: types.ARCHIVE_UNLINKED_RX_TRANSFER_FAILURE, error: pharmacyError });\r\n logAPI(\"MBHWeb.Saga.Rx.ArchiveUnlinkedRxTransfers.Get.Failure\", start, null, pharmacyError);\r\n }\r\n break;\r\n }\r\n }\r\n catch (errObject) {\r\n console.error(errObject);\r\n if (errObject && errObject.status && errObject.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN });\r\n }\r\n else {\r\n try {\r\n const sessionData = yield select((state) => state.session);\r\n if (sessionData && sessionData.serverData && sessionData.serverData.developerDebug) {\r\n //debugger;\r\n }\r\n }\r\n catch (e) { }\r\n yield put({ type: types.AJAX_CALL_ERROR, pharmacyError: errObject });\r\n }\r\n }\r\n }\r\n else {\r\n console.log(\"pharmacySaga: rxDown\");\r\n }\r\n}\r\n\r\nfunction* onReadyForPickup(pharmacyProxyId, token, storeNumber) {\r\n const start = new Date();\r\n try {\r\n const readyForPickup = yield call(pharmacy.getReadyForPickup, pharmacyProxyId, token);\r\n if (storeNumber) {\r\n let totalCost = 0;\r\n let rxList = readyForPickup.filter(item => item.storeNumber === storeNumber);\r\n const pharmacyInfo = yield call(pharmacy.getDefaultPharmacyData, storeNumber, pharmacyProxyId, token);\r\n if (typeof rxList.length === 'undefined') {\r\n yield call(getRxDetail, token, rxList);\r\n totalCost += Number.parseFloat(rxList.patientPay);\r\n rxList = { rxList };\r\n }\r\n else {\r\n for (let i = 0; i < rxList.length; i++) {\r\n yield call(getRxDetail, token, rxList[i]);\r\n totalCost += Number.parseFloat(rxList[i].patientPay);\r\n }\r\n }\r\n yield put({ type: types.RX_READY_FOR_PICKUP_SUCCESS, readyForPickupPharmacy: pharmacyInfo, readyForPickupList: rxList, readyForPickupTotalCost: totalCost });\r\n logAPI(\"MBHWeb.Saga.Rx.ReadyForPickup.Get\", start, null);\r\n }\r\n else {\r\n yield put({ type: types.RX_READY_FOR_PICKUP_SUCCESS, readyForPickup: readyForPickup });\r\n logAPI(\"MBHWeb.Saga.Rx.ReadyForPickup.Get\", start, null);\r\n }\r\n }\r\n catch (readyForPickupError) {\r\n yield put({ type: types.RX_READY_FOR_PICKUP_FAILURE, error: readyForPickupError });\r\n logAPI(\"MBHWeb.Saga.Rx.ReadyForPickup.Get.Failure\", start, null, readyForPickupError);\r\n }\r\n}\r\n\r\nfunction* getRxDetail(token, rx) {\r\n const start = new Date();\r\n try {\r\n const rxDetail = yield call(pharmacy.getRxDetail, token, rx.rxNumber, rx.storeNumber);\r\n logAPI(\"MBHWeb.Saga.Rx.RxDetail.Get\", start, null);\r\n rx.NDCImageURL = rxDetail.NDCImageURL;\r\n rx.RefillsUntilExpiry = rxDetail.RefillsUntilExpiry;\r\n rx.RefillsRemaining = rxDetail.RefillsRemaining;\r\n rx.RefillsAuthorized = rxDetail.RefillsAuthorized;\r\n rx.PrescriberName = rxDetail.PrescriberName;\r\n rx.PrescriberContactNumber = rxDetail.PrescriberContactNumber;\r\n rx.RxSig = rxDetail.RxSig;\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Rx.RxDetail.Get.Failure\", start, null, error);\r\n console.error(error);\r\n }\r\n}\r\n\r\nfunction getErrorMessage(changeUserNameError) {\r\n return changeUserNameError.json().then(data => {\r\n\r\n return data.Message;\r\n });\r\n}\r\n\r\nfunction* handleUserSwitch(payload) {\r\n try {\r\n //debugger;\r\n const currentUser = payload.user;\r\n try {\r\n if (currentUser) {\r\n const sDomain = getDomain();\r\n yield put({ type: types.COOKIE_BSWPROXY_START });\r\n if (currentUser.relationshipId) {\r\n Cookies.set('BSWPROXY', currentUser.relationshipId, { path: '/', domain: sDomain });\r\n }\r\n else {\r\n Cookies.set('BSWPROXY', \"\", { path: '/', domain: sDomain });\r\n }\r\n yield put({ type: types.COOKIE_BSWPROXY_SUCCESS });\r\n }\r\n }\r\n catch (e) {\r\n //debugger;\r\n console.error(e);\r\n }\r\n\r\n if (payload.callback) {\r\n payload.callback();\r\n }\r\n\r\n // Forward it on\r\n payload.type = types.SWITCH_USER_REDUCER;\r\n yield put(payload);\r\n }\r\n catch (err) {\r\n console.error(err);\r\n }\r\n}\r\n\r\nfunction parseRspMsg(rspMsg) {\r\n try\r\n {\r\n return rspMsg.json().then(data => {\r\n return data;\r\n });\r\n }\r\n catch(e) {\r\n return {};\r\n }\r\n}","import { put, call, takeLatest, select } from \"redux-saga/effects\";\r\nimport * as types from \"../constants/prayerFeatureActionTypes\";\r\nimport * as commonTypes from \"../constants/actionTypes\";\r\nimport * as consts from \"../constants/prayerFeatureConstants\";\r\nimport {\r\n client, registerSession, joinCommunity, getAmityToken, getNotificationBadge, markNotificationBadgeAsRead, linkAmityAccount,\r\n queryAllPosts, queryPrayerOfTheWeek, queryMyPosts, postPrayer, editPost, deletePrayer, addReaction, removeReaction,\r\n queryAllComments, getComment, addComment, deleteComment, editComment, addCommentReaction, removeCommentReaction,\r\n getDeletedPosts, markDeletedPostsAsRead\r\n} from \"../api/prayerFeatureApi\";\r\nimport * as accountApi from \"../api/accountApi\";\r\nimport { ErrorCode } from '@amityco/js-sdk';\r\nimport { refresh } from \"./ssoSaga\";\r\nimport * as features from \"../constants/MembershipFeatures\";\r\nimport * as tools from \"../helpers/Tools\";\r\nimport { logUI } from \"../api/andyliticsApi\";\r\n\r\nexport default function* prayerFeatureSaga() {\r\n yield takeLatest(types.SETUP_AMITY_USER_SESSION, setupUserSession);\r\n yield takeLatest(types.GET_PRAYER_OF_THE_WEEK, handlePrayerOfTheWeek);\r\n yield takeLatest(types.GET_ALL_PRAYERS, handleQueryAllPosts);\r\n yield takeLatest(types.GET_ALL_PRAYERS_SUCCESS, handleQueryAllPostsSuccess);\r\n yield takeLatest(types.GET_MY_PRAYERS, handleQueryMyPosts);\r\n yield takeLatest(types.REFRESH_ALL_PRAYERS, handleRefreshAllPrayers);\r\n yield takeLatest(types.REFRESH_MY_PRAYERS, handleRefreshMyPrayers);\r\n yield takeLatest(types.GET_NEXT_PRAYERS, handleNextPrayers);\r\n yield takeLatest(types.POST_PRAYER, handlePostPrayer);\r\n yield takeLatest(types.EDIT_PRAYER, handleEditPrayer);\r\n yield takeLatest(types.DELETE_PRAYER, handleDeletePrayer);\r\n yield takeLatest(types.ADD_PRAYER_REACTION, handleAddReaction);\r\n yield takeLatest(types.REMOVE_PRAYER_REACTION, handleRemoveReaction);\r\n yield takeLatest(types.GET_COMMENTS, handleGetComments);\r\n yield takeLatest(types.GET_COMMENT, handleGetComment);\r\n yield takeLatest(types.ADD_COMMENT, handleAddComment);\r\n yield takeLatest(types.EDIT_COMMENT, handleEditComment);\r\n yield takeLatest(types.DELETE_COMMENT, handleDeleteComment);\r\n yield takeLatest(types.ADD_COMMENT_REACTION, handleAddCommentReaction);\r\n yield takeLatest(types.REMOVE_COMMENT_REACTION, handleRemoveCommentReaction);\r\n yield takeLatest(types.GET_NOTIFICATION_BADGE, handleGetNotificationBadge);\r\n yield takeLatest(types.POST_NOTIFICATION_BADGE_ASREAD, handlePostMarkNotificationBadgeAsRead);\r\n yield takeLatest(types.GET_DELETED_POSTS, handleGetDeletedPosts);\r\n yield takeLatest(types.MARK_DELETED_POST_ASREAD, handleMarkDeletedPostsAsRead);\r\n yield takeLatest(commonTypes.GET_USER_PREFERENCE, handleGetUserPreference);\r\n yield takeLatest(commonTypes.UPDATE_USER_PREFERENCE, handleUpdateUserPreference);\r\n}\r\n\r\nfunction* isConnected() {\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n const { connectionState, livePrayers } = prayerFeature;\r\n return !window.isOffline && (connectionState === 'connected' || (connectionState === null && livePrayers && livePrayers.loadingStatus !== 'error'));\r\n};\r\n\r\nexport function* setupUserSession(payload) {\r\n let response = null;\r\n let error = null;\r\n let memberId = payload.memberId;\r\n try {\r\n const domain = yield select(state => state.domain);\r\n logUI('MBHWeb.PrayerWall.' + types.SETUP_AMITY_USER_SESSION, new Date(), tools.getURLPath(), null, memberId);\r\n let accessToken = domain.t;\r\n if (!memberId) {\r\n const linkedAccount = yield call(linkAmityAccount, accessToken, domain.un);\r\n const featureAmity = tools.getFeature(linkedAccount, features.Amity);\r\n memberId = featureAmity && featureAmity.memberId;\r\n const refreshedAccount = yield call(refresh, { refresh_token: domain.rt });\r\n accessToken = refreshedAccount && refreshedAccount.access_token;\r\n }\r\n\r\n let token = yield call(getAmityToken, accessToken);\r\n if (token && typeof token === 'string') {\r\n //token = token.replace(/\\\"/g, '');\r\n response = yield call(registerSession, memberId, token);\r\n const communityHasBeenJoined = yield call(joinCommunity);\r\n console.log('communityHasBeenJoined', communityHasBeenJoined);\r\n\r\n // the user preference can be obtained directly from session.userPreferences\r\n const session = yield select(state => state.session);\r\n response[consts.HIDE_PRAYER_WALL_TOOLTIP] = session.userPreferences[consts.HIDE_PRAYER_WALL_TOOLTIP];\r\n\r\n // **** no need to call getUserPreference\r\n //const prayerFeature = yield select(state => state.prayerFeature);\r\n //if (prayerFeature[consts.HIDE_PRAYER_WALL_TOOLTIP] === undefined) {\r\n // const preference = yield call(getUserPreference, consts.HIDE_PRAYER_WALL_TOOLTIP);\r\n // const hidePrayerWallTooltip = preference && preference.length && preference[0].PreferenceValue;\r\n // response[consts.HIDE_PRAYER_WALL_TOOLTIP] = hidePrayerWallTooltip === 'true';\r\n //}\r\n //else {\r\n // response[consts.HIDE_PRAYER_WALL_TOOLTIP] = prayerFeature[consts.HIDE_PRAYER_WALL_TOOLTIP].value;\r\n //}\r\n\r\n yield put({ type: types.SETUP_AMITY_USER_SESSION_SUCCESS, token, memberId });\r\n logUI('MBHWeb.PrayerWall.' + types.SETUP_AMITY_USER_SESSION_SUCCESS, new Date(), tools.getURLPath(), { token }, memberId);\r\n }\r\n else {\r\n error = 'empty or unknown token';\r\n yield put({ type: types.SETUP_AMITY_USER_SESSION_FAILURE, error });\r\n logUI('MBHWeb.PrayerWall.' + types.SETUP_AMITY_USER_SESSION_FAILURE, new Date(), tools.getURLPath(), { error }, memberId);\r\n }\r\n }\r\n catch (err) {\r\n error = err ? err : 'failed to get token';\r\n yield put({ type: types.SETUP_AMITY_USER_SESSION_FAILURE, error });\r\n logUI('MBHWeb.PrayerWall.' + types.SETUP_AMITY_USER_SESSION_FAILURE, new Date(), tools.getURLPath(), { error }, memberId);\r\n }\r\n finally {\r\n if (payload.callback) {\r\n payload.callback(response, error);\r\n }\r\n }\r\n}\r\n\r\nfunction resetLiveObject(liveObject) {\r\n if (liveObject) {\r\n liveObject.loadingStatus = undefined;\r\n if (liveObject.resetPage) {\r\n liveObject.resetPage();\r\n }\r\n }\r\n}\r\n\r\nfunction onOnline() {\r\n window.isOffline = false;\r\n // const prayerFeature = sessionStorage['root'] ? JSON.parse(JSON.parse(sessionStorage['root']).prayerFeature) : window.store.getState();\r\n // const { livePrayers, liveMyPrayers } = prayerFeature;\r\n // resetLiveObject(livePrayers);\r\n // resetLiveObject(liveMyPrayers);\r\n}\r\n\r\nfunction onOffline() {\r\n window.isOffline = true;\r\n}\r\n\r\nwindow.addEventListener('online', onOnline);\r\nwindow.addEventListener('offline', onOffline);\r\n\r\nexport function* cleanupUserSession() {\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n if (prayerFeature.livePrayers) {\r\n prayerFeature.livePrayers.removeAllListeners('dataUpdated');\r\n prayerFeature.livePrayers.dispose();\r\n }\r\n if (prayerFeature.liveMyPrayers) {\r\n prayerFeature.liveMyPrayers.removeAllListeners('dataUpdated');\r\n prayerFeature.liveMyPrayers.dispose();\r\n }\r\n client.unregisterSession();\r\n client.removeAllListeners('connectionStatusChanged');\r\n window.removeEventListener('online', onOnline);\r\n window.removeEventListener('offline', onOffline);\r\n yield put({ type: types.RESET_PRAYER_FEATURE });\r\n logUI('MBHWeb.PrayerWall.' + types.RESET_PRAYER_FEATURE, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n}\r\n\r\nexport function* handleQueryAllPosts(data) {\r\n let response = null;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n logUI('MBHWeb.PrayerWall.' + types.GET_ALL_PRAYERS, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n response = yield call(queryAllPosts);\r\n }\r\n catch (error) {\r\n yield put({ type: types.GET_ALL_PRAYERS_FAILURE });\r\n console.log(error);\r\n logUI('MBHWeb.PrayerWall.' + types.GET_ALL_PRAYERS_FAILURE, new Date(), tools.getURLPath(), { error }, prayerFeature.memberId);\r\n }\r\n finally {\r\n if (data && data.callback) {\r\n data.callback(response);\r\n }\r\n }\r\n}\r\n\r\nexport function* handlePrayerOfTheWeek(data) {\r\n let response = null;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n logUI(types.GET_PRAYER_OF_THE_WEEK, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n response = yield call(queryPrayerOfTheWeek);\r\n }\r\n catch (error) {\r\n yield put({ type: types.GET_PRAYER_OF_THE_WEEK_FAILURE });\r\n console.log(error);\r\n logUI(types.GET_PRAYER_OF_THE_WEEK_FAILURE, new Date(), tools.getURLPath(), { error }, prayerFeature.memberId);\r\n }\r\n finally {\r\n if (data && data.callback) {\r\n data.callback(response);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleQueryAllPostsSuccess(data) {\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n const prayers = data && data.allPrayers;\r\n const gotNewPost = prayers && prayers.length > 0 && prayers[0].createdAt > prayerFeature.lastLoadTime;\r\n yield put({ type: types.UPDATE_LAST_LOAD_TIME });\r\n logUI('MBHWeb.PrayerWall.' + types.UPDATE_LAST_LOAD_TIME, new Date(), tools.getURLPath(), { gotNewPost }, prayerFeature.memberId);\r\n if (data && data.callback) {\r\n data.callback(gotNewPost);\r\n }\r\n}\r\n\r\nexport function* handleQueryMyPosts(data) {\r\n let response = null;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n logUI('MBHWeb.PrayerWall.' + types.GET_MY_PRAYERS, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n response = yield call(queryMyPosts, prayerFeature.memberId);\r\n }\r\n catch (error) {\r\n yield put({ type: types.GET_MY_PRAYERS_FAILURE });\r\n logUI('MBHWeb.PrayerWall.' + types.GET_MY_PRAYERS_FAILURE, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n console.log(error);\r\n }\r\n finally {\r\n if (data && data.callback) {\r\n data.callback(response);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleRefreshAllPrayers() {\r\n if (yield isConnected()) {\r\n yield call(handleQueryAllPosts);\r\n }\r\n}\r\n\r\nexport function* handleRefreshMyPrayers(data) {\r\n if (yield isConnected()) {\r\n yield call(handleQueryMyPosts, data);\r\n }\r\n}\r\n\r\nexport function* handleNextPrayers(data) {\r\n let gotMore = false;\r\n let error = null;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n if (yield isConnected()) {\r\n const { activeTab, liveMyPrayers } = prayerFeature;\r\n const livePrayers = (activeTab === '1' && prayerFeature.livePrayers) || (activeTab === '2' && liveMyPrayers) || null;\r\n if (livePrayers && livePrayers.hasMore && livePrayers.loadingStatus === 'loaded') {\r\n livePrayers.nextPage();\r\n gotMore = true;\r\n }\r\n }\r\n else {\r\n error = 'not connected';\r\n }\r\n }\r\n catch (e) {\r\n error = e || 'got error';\r\n }\r\n finally {\r\n logUI('MBHWeb.PrayerWall.' + types.GET_NEXT_PRAYERS + (error ? \".Failure\" : \".Success\"), new Date(), tools.getURLPath(), { gotMore, error }, prayerFeature.memberId);\r\n yield put({ type: types.GET_NEXT_PRAYERS_COMPLETED, gotMore });\r\n if (data.callback) {\r\n data.callback(gotMore, error);\r\n }\r\n }\r\n}\r\n\r\nexport function* handlePostPrayer(payload) {\r\n let response = null;\r\n let success = false;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n const post = payload.prayer;\r\n try {\r\n logUI('MBHWeb.PrayerWall.' + types.POST_PRAYER, new Date(), tools.getURLPath(), post, prayerFeature.memberId, post.topics[0]);\r\n response = yield call(postPrayer, post, payload.memberId);\r\n success = true;\r\n yield put({ type: types.POST_PRAYER_SUCCESS, myRecentPrayerPostId: response.postId, topic: post.topics[0] });\r\n\r\n // the user preference can be obtained directly from session.userPreferences\r\n const session = yield select(state => state.session);\r\n response[consts.HIDE_PRAYER_CARD_TOOLTIP] = session.userPreferences[consts.HIDE_PRAYER_CARD_TOOLTIP];\r\n\r\n // **** no need to call getUserPreference\r\n //if (prayerFeature[consts.HIDE_PRAYER_CARD_TOOLTIP] === undefined) {\r\n //const preference = yield call(getUserPreference, consts.HIDE_PRAYER_CARD_TOOLTIP);\r\n //const hidePrayerCardTooltip = preference && preference.length && preference[0].PreferenceValue\r\n //response[consts.HIDE_PRAYER_CARD_TOOLTIP] = hidePrayerCardTooltip === 'true';\r\n //}\r\n //else {\r\n // response[consts.HIDE_PRAYER_CARD_TOOLTIP] = prayerFeature[consts.HIDE_PRAYER_CARD_TOOLTIP].value;\r\n //}\r\n\r\n logUI('MBHWeb.PrayerWall.' + types.POST_PRAYER_SUCCESS, new Date(), tools.getURLPath(), response, prayerFeature.memberId, post.topics[0]);\r\n }\r\n catch (error) {\r\n console.log('post prayer error:', error);\r\n yield put({ type: types.POST_PRAYER_FAILURE, error: error ?? 'failed to post prayer', hasBanWord: error.code === ErrorCode.BanWordFound });\r\n logUI('MBHWeb.PrayerWall.' + types.POST_PRAYER_FAILURE, new Date(), tools.getURLPath(), { ...post, hasBanWord: error.code === ErrorCode.BanWordFound }, prayerFeature.memberId, post.topics[0]);\r\n }\r\n finally {\r\n if (payload.callback) {\r\n payload.callback(response, !success);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleEditPrayer(payload) {\r\n let response = null;\r\n let success = false;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n logUI('MBHWeb.PrayerWall.' + types.EDIT_PRAYER, new Date(), tools.getURLPath(), payload, prayerFeature.memberId, payload.postId);\r\n response = yield call(editPost, payload.postId, payload.textInput, payload.memberId);\r\n success = true;\r\n console.log('edit prayer response:', response);\r\n yield put({ type: types.EDIT_PRAYER_SUCCESS, myEditPrayerPostId: response.postId, textInput: response.textInput });\r\n logUI('MBHWeb.PrayerWall.' + types.EDIT_PRAYER_SUCCESS, new Date(), tools.getURLPath(), response, prayerFeature.memberId, response.postId);\r\n }\r\n catch (error) {\r\n console.log('edit prayer error:', error);\r\n yield put({ type: types.EDIT_PRAYER_FAILURE, error: error ?? 'failed to edit prayer', hasBanWord: error.code === ErrorCode.BanWordFound });\r\n logUI('MBHWeb.PrayerWall.' + types.EDIT_PRAYER_FAILURE, new Date(), tools.getURLPath(), { ...payload, hasBanWord: error.code === ErrorCode.BanWordFound }, prayerFeature.memberId, payload.postId);\r\n }\r\n finally {\r\n if (payload.callback) {\r\n payload.callback(response, !success);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleDeletePrayer(payload) {\r\n let success = false;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n const post = payload.prayer;\r\n try {\r\n logUI('MBHWeb.PrayerWall.' + types.DELETE_PRAYER, new Date(), tools.getURLPath(), null, prayerFeature.memberId, post.postId);\r\n success = yield call(deletePrayer, post.postId);\r\n if (success) {\r\n yield put({ type: types.DELETE_PRAYER_SUCCESS, prayer: post });\r\n } else {\r\n yield put({ type: types.DELETE_PRAYER_FAILURE });\r\n }\r\n logUI('MBHWeb.PrayerWall.' + (success ? types.DELETE_PRAYER_SUCCESS : types.DELETE_PRAYER_FAILURE), new Date(), tools.getURLPath(), null, prayerFeature.memberId, post.postId);\r\n }\r\n catch (error) {\r\n yield put({ type: types.DELETE_PRAYER_FAILURE, error });\r\n logUI('MBHWeb.PrayerWall.' + types.DELETE_PRAYER_FAILURE, new Date(), tools.getURLPath(), error, prayerFeature.memberId, post.postId);\r\n }\r\n finally {\r\n if (payload.callback) {\r\n payload.callback(success);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleAddReaction(payload) {\r\n let success = false;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n logUI('MBHWeb.PrayerWall.' + types.ADD_PRAYER_REACTION, new Date(), tools.getURLPath(), null, prayerFeature.memberId, payload.postId);\r\n success = yield call(addReaction, payload.postId);\r\n yield put({ type: types.ADD_PRAYER_REACTION_SUCCESS, success: success, postId: payload.postId });\r\n logUI('MBHWeb.PrayerWall.' + (success ? types.ADD_PRAYER_REACTION_SUCCESS : types.ADD_PRAYER_REACTION_FAILURE), new Date(), tools.getURLPath(), null, prayerFeature.memberId, payload.postId);\r\n }\r\n catch (error) {\r\n yield put({ type: types.ADD_PRAYER_REACTION_FAILURE, error });\r\n console.log('add prayer reaction failed', error);\r\n logUI('MBHWeb.PrayerWall.' + types.ADD_PRAYER_REACTION_FAILURE, new Date(), tools.getURLPath(), payload, prayerFeature.memberId);\r\n }\r\n finally {\r\n if (payload.callback) {\r\n payload.callback(success);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleRemoveReaction(payload) {\r\n let success = false;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n logUI('MBHWeb.PrayerWall.' + types.REMOVE_PRAYER_REACTION, new Date(), tools.getURLPath(), null, prayerFeature.memberId, payload.postId);\r\n success = yield call(removeReaction, payload.postId);\r\n yield put({ type: types.REMOVE_PRAYER_REACTION_SUCCESS, success: success, postId: payload.postId });\r\n logUI('MBHWeb.PrayerWall.' + (success ? types.REMOVE_PRAYER_REACTION_SUCCESS : types.REMOVE_PRAYER_REACTION_FAILURE), new Date(), tools.getURLPath(), null, prayerFeature.memberId, payload.postId);\r\n }\r\n catch (error) {\r\n yield put({ type: types.REMOVE_PRAYER_REACTION_FAILURE, error });\r\n console.log('remove prayer reaction failed', error);\r\n logUI('MBHWeb.PrayerWall.' + types.REMOVE_PRAYER_REACTION_FAILURE, new Date(), tools.getURLPath(), payload, prayerFeature.memberId);\r\n }\r\n finally {\r\n if (payload.callback) {\r\n payload.callback(success);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleGetComments(payload) {\r\n try {\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n logUI('MBHWeb.PrayerWall.' + types.GET_COMMENTS, new Date(), tools.getURLPath(), null, prayerFeature.memberId, payload.postId);\r\n const liveObject = yield call(queryAllComments, payload.postId);\r\n yield put({ type: types.GET_COMMENTS_SUCCESS, postId: payload.postId });\r\n logUI('MBHWeb.PrayerWall.' + types.GET_COMMENTS_SUCCESS, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n payload.callback(liveObject);\r\n }\r\n catch (error) {\r\n yield put({ type: types.GET_COMMENTS_FAILURE, error });\r\n logUI('MBHWeb.PrayerWall.' + types.GET_COMMENTS_FAILURE, new Date(), tools.getURLPath(), { error, payload }, prayerFeature.memberId);\r\n }\r\n}\r\n\r\nexport function* handleGetComment(payload) {\r\n try {\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n logUI('MBHWeb.PrayerWall.' + types.GET_COMMENT, new Date(), tools.getURLPath(), payload, prayerFeature.memberId, payload.commentId);\r\n const liveObject = yield call(getComment, payload.commentId);\r\n yield put({ type: types.GET_COMMENT_SUCCESS, commentId: payload.commentId });\r\n logUI('MBHWeb.PrayerWall.' + types.GET_COMMENT_SUCCESS, new Date(), tools.getURLPath(), payload, prayerFeature.memberId);\r\n payload.callback(liveObject);\r\n }\r\n catch (error) {\r\n yield put({ type: types.GET_COMMENT_FAILURE, error });\r\n logUI('MBHWeb.PrayerWall.' + types.GET_COMMENT_FAILURE, new Date(), tools.getURLPath(), { error, payload }, prayerFeature.memberId);\r\n }\r\n}\r\n\r\nexport function* handleAddComment(payload) {\r\n let response = null;\r\n let success = false;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n logUI('MBHWeb.PrayerWall.' + types.ADD_COMMENT, new Date(), tools.getURLPath(), payload, prayerFeature.memberId, payload.postId);\r\n response = yield call(addComment, payload.comment, payload.postId, payload.postUserId);\r\n success = true;\r\n yield put({ type: types.ADD_COMMENT_SUCCESS, comment: response });\r\n logUI('MBHWeb.PrayerWall.' + types.ADD_COMMENT_SUCCESS, new Date(), tools.getURLPath(), response, prayerFeature.memberId, payload.postId);\r\n }\r\n catch (error) {\r\n yield put({ type: types.ADD_COMMENT_FAILURE, error: error, commentHasBanWord: error.code === ErrorCode.BanWordFound });\r\n logUI('MBHWeb.PrayerWall.' + types.ADD_COMMENT_FAILURE, new Date(), tools.getURLPath(), { ...payload, hasBanWor: error.code === ErrorCode.BanWordFound }, prayerFeature.memberId);\r\n }\r\n finally {\r\n if (payload.callback) {\r\n payload.callback(response, !success);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleEditComment(payload) {\r\n let response = null;\r\n let success = false;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n logUI('MBHWeb.PrayerWall.' + types.EDIT_COMMENT, new Date(), tools.getURLPath(), payload, prayerFeature.memberId);\r\n response = yield call(editComment, payload.commentId, payload.textInput);\r\n success = true;\r\n yield put({ type: types.EDIT_COMMENT_SUCCESS, comment: response });\r\n logUI('MBHWeb.PrayerWall.' + types.EDIT_COMMENT_SUCCESS, new Date(), tools.getURLPath(), response, prayerFeature.memberId);\r\n }\r\n catch (error) {\r\n console.log(error);\r\n yield put({ type: types.EDIT_COMMENT_FAILURE, error: error ?? 'failed to edit comment', hasBanWord: error.code === ErrorCode.BanWordFound });\r\n logUI('MBHWeb.PrayerWall.' + types.EDIT_COMMENT_FAILURE, new Date(), tools.getURLPath(), { ...payload, hasBanWor: error.code === ErrorCode.BanWordFound }, prayerFeature.memberId);\r\n }\r\n finally {\r\n if (payload.callback) {\r\n payload.callback(response, !success);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleDeleteComment(payload) {\r\n let success = false;\r\n const comment = payload.comment;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n logUI('MBHWeb.PrayerWall.' + types.DELETE_COMMENT, new Date(), tools.getURLPath(), comment, prayerFeature.memberId, comment.referenceId);\r\n success = yield call(deleteComment, comment.commentId);\r\n console.log('delete comment result: ', success);\r\n if (success) {\r\n yield put({ type: types.DELETE_COMMENT_SUCCESS, comment });\r\n } else {\r\n yield put({ type: types.DELETE_COMMENT_FAILURE });\r\n }\r\n logUI('MBHWeb.PrayerWall.' + (success ? types.DELETE_COMMENT_SUCCESS : types.DELETE_COMMENT_FAILURE), new Date(), tools.getURLPath(), comment, prayerFeature.memberId, comment.referenceId);\r\n }\r\n catch (error) {\r\n console.log('delete comment error: ', error);\r\n yield put({ type: types.DELETE_COMMENT_FAILURE, error });\r\n logUI('MBHWeb.PrayerWall.' + types.DELETE_COMMENT_FAILURE, new Date(), tools.getURLPath(), { payload, error }, prayerFeature.memberId, comment.referenceId);\r\n }\r\n finally {\r\n if (payload.callback) {\r\n payload.callback(success);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleAddCommentReaction(payload) {\r\n let success = false;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n logUI('MBHWeb.PrayerWall.' + types.ADD_COMMENT_REACTION, new Date(), tools.getURLPath(), payload, prayerFeature.memberId, payload.postId);\r\n success = yield call(addCommentReaction, payload.commentId);\r\n yield put({ type: types.ADD_COMMENT_REACTION_SUCCESS, success: success, postId: payload.postId });\r\n logUI('MBHWeb.PrayerWall.' + types.ADD_COMMENT_REACTION_SUCCESS, new Date(), tools.getURLPath(), { ...payload, success }, prayerFeature.memberId, payload.postId);\r\n }\r\n catch (error) {\r\n yield put({ type: types.ADD_COMMENT_REACTION_FAILURE, error });\r\n console.log('add comment reaction failed', error);\r\n logUI('MBHWeb.PrayerWall.' + types.ADD_COMMENT_REACTION_FAILURE, new Date(), tools.getURLPath(), { ...payload, error }, prayerFeature.memberId);\r\n }\r\n finally {\r\n if (payload.callback) {\r\n payload.callback(success);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleRemoveCommentReaction(payload) {\r\n let success = false;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n logUI('MBHWeb.PrayerWall.' + types.REMOVE_COMMENT_REACTION, new Date(), tools.getURLPath(), payload, prayerFeature.memberId, payload.postId);\r\n success = yield call(removeCommentReaction, payload.commentId);\r\n yield put({ type: types.REMOVE_COMMENT_REACTION_SUCCESS, success: success, postId: payload.postId });\r\n logUI('MBHWeb.PrayerWall.' + types.REMOVE_COMMENT_REACTION_SUCCESS, new Date(), tools.getURLPath(), { ...payload, success }, prayerFeature.memberId, payload.postId);\r\n }\r\n catch (error) {\r\n yield put({ type: types.REMOVE_COMMENT_REACTION_FAILURE, error });\r\n console.log('remove comment reaction failed', error);\r\n logUI('MBHWeb.PrayerWall.' + types.REMOVE_COMMENT_REACTION_FAILURE, new Date(), tools.getURLPath(), { ...payload, error }, prayerFeature.memberId);\r\n }\r\n finally {\r\n if (payload.callback) {\r\n payload.callback(success);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleGetNotificationBadge() {\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n const domain = yield select(state => state.domain);\r\n logUI('MBHWeb.PrayerWall.' + types.GET_NOTIFICATION_BADGE, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n const response = yield call(getNotificationBadge, domain.t);\r\n yield put({ type: types.GET_NOTIFICATION_BADGE_SUCCESS, showBadge: response });\r\n logUI('MBHWeb.PrayerWall.' + types.GET_NOTIFICATION_BADGE_SUCCESS, new Date(), tools.getURLPath(), response, prayerFeature.memberId);\r\n }\r\n catch (error) {\r\n yield put({ type: types.GET_NOTIFICATION_BADGE_FAILURE, error });\r\n logUI('MBHWeb.PrayerWall.' + types.GET_NOTIFICATION_BADGE_FAILURE, new Date(), tools.getURLPath(), error, prayerFeature.memberId);\r\n }\r\n}\r\n\r\nexport function* handlePostMarkNotificationBadgeAsRead() {\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n const domain = yield select(state => state.domain);\r\n const response = yield call(markNotificationBadgeAsRead, domain.t);\r\n if (response === 'Success') {\r\n logUI('MBHWeb.PrayerWall.' + types.POST_NOTIFICATION_BADGE_ASREAD, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n yield put({ type: types.POST_NOTIFICATION_BADGE_ASREAD_SUCCESS, response });\r\n yield put({ type: types.GET_NOTIFICATION_BADGE });\r\n logUI('MBHWeb.PrayerWall.' + types.POST_NOTIFICATION_BADGE_ASREAD_SUCCESS, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n }\r\n else {\r\n yield put({ type: types.POST_NOTIFICATION_BADGE_ASREAD_FAILURE, error: 'not successful' });\r\n logUI('MBHWeb.PrayerWall.' + types.POST_NOTIFICATION_BADGE_ASREAD_FAILURE, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n }\r\n }\r\n catch (error) {\r\n yield put({ type: types.POST_NOTIFICATION_BADGE_ASREAD_FAILURE, error });\r\n console.log(error);\r\n logUI('MBHWeb.PrayerWall.' + types.POST_NOTIFICATION_BADGE_ASREAD_FAILURE, new Date(), tools.getURLPath(), error, prayerFeature.memberId);\r\n }\r\n}\r\n\r\nexport function* handleGetUserPreference(payload) {\r\n if (payload && payload.preferenceName) {\r\n yield call(getUserPreference, payload.preferenceName);\r\n }\r\n}\r\n\r\nexport function* getUserPreference(PreferenceName) {\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n const domain = yield select(state => state.domain);\r\n logUI('MBHWeb.PrayerWall.' + commonTypes.GET_USER_PREFERENCE, new Date(), tools.getURLPath(), { PreferenceName }, prayerFeature.memberId);\r\n const preference = yield call(accountApi.getUserPreferences2, domain.t, PreferenceName);\r\n yield put({ type: commonTypes.GET_USER_PREFERENCE_SUCCESS, PreferenceName, PreferenceValue: preference && preference.length && preference[0].PreferenceValue }); // <- to be removed\r\n yield put({ type: commonTypes.GET_USER_PREFERENCE_SUCCESS, PreferenceName, PreferenceValue: preference && preference.length && preference[0].PreferenceValue });\r\n logUI('MBHWeb.PrayerWall.' + commonTypes.GET_USER_PREFERENCE_SUCCESS, new Date(), tools.getURLPath(), preference, prayerFeature.memberId);\r\n return preference;\r\n }\r\n catch (error) {\r\n yield put({ type: commonTypes.GET_USER_PREFERENCE_FAILURE, PreferenceName: payload.PreferenceName, error: error || 'error getting user preference' }); // <- to be removed\r\n yield put({ type: commonTypes.GET_USER_PREFERENCE_FAILURE, PreferenceName: payload.PreferenceName, error: error || 'error getting user preference' });\r\n logUI('MBHWeb.PrayerWall.' + commonTypes.GET_USER_PREFERENCE_FAILURE, new Date(), tools.getURLPath(), error, prayerFeature.memberId);\r\n }\r\n}\r\n\r\nexport function* handleUpdateUserPreference(payload) {\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n const domain = yield select(state => state.domain);\r\n logUI('MBHWeb.PrayerWall.' + commonTypes.UPDATE_USER_PREFERENCE, new Date(), tools.getURLPath(), payload, prayerFeature.memberId);\r\n const preference = yield call(accountApi.resetUserPreferences2, domain.t, payload.PreferenceName, payload.PreferenceValue);\r\n yield put({ type: commonTypes.UPDATE_USER_PREFERENCE_SUCCESS, PreferenceName: payload.PreferenceName, PreferenceValue: preference && preference.PreferenceValue });\r\n logUI('MBHWeb.PrayerWall.' + commonTypes.UPDATE_USER_PREFERENCE_SUCCESS, new Date(), tools.getURLPath(), preference, prayerFeature.memberId);\r\n }\r\n catch (error) {\r\n yield put({ type: commonTypes.UPDATE_USER_PREFERENCE_FAILURE, PreferenceName: payload.PreferenceName, error: error || 'error updating user preference' });\r\n logUI('MBHWeb.PrayerWall.' + commonTypes.UPDATE_USER_PREFERENCE_FAILURE, new Date(), tools.getURLPath(), error, prayerFeature.memberId);\r\n }\r\n}\r\n\r\nexport function* handleGetDeletedPosts(data) {\r\n let response = null;\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n const domain = yield select(state => state.domain);\r\n logUI('MBHWeb.PrayerWall.' + types.GET_DELETED_POSTS, new Date(), tools.getURLPath(), data, prayerFeature.memberId);\r\n response = yield call(getDeletedPosts, domain.t);\r\n yield put({ type: types.GET_DELETED_POSTS_SUCCESS, deletedPost: response });\r\n logUI('MBHWeb.PrayerWall.' + types.GET_DELETED_POSTS_SUCCESS, new Date(), tools.getURLPath(), response, prayerFeature.memberId);\r\n }\r\n catch (error) {\r\n yield put({ type: types.GET_DELETED_POSTS_FAILURE });\r\n logUI('MBHWeb.PrayerWall.' + types.GET_DELETED_POSTS_FAILURE, new Date(), tools.getURLPath(), error, prayerFeature.memberId);\r\n }\r\n finally {\r\n if (data && data.callback) {\r\n data.callback(response);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleMarkDeletedPostsAsRead() {\r\n const prayerFeature = yield select(state => state.prayerFeature);\r\n try {\r\n const domain = yield select(state => state.domain);\r\n logUI('MBHWeb.PrayerWall.' + types.MARK_DELETED_POST_ASREAD, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n const response = yield call(markDeletedPostsAsRead, domain.t);\r\n if (response === 'Success') {\r\n yield put({ type: types.MARK_DELETED_POST_ASREAD_SUCCESS });\r\n logUI('MBHWeb.PrayerWall.' + types.MARK_DELETED_POST_ASREAD_SUCCESS, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n }\r\n else {\r\n yield put({ type: types.MARK_DELETED_POST_ASREAD_FAILURE });\r\n logUI('MBHWeb.PrayerWall.' + types.MARK_DELETED_POST_ASREAD_FAILURE, new Date(), tools.getURLPath(), null, prayerFeature.memberId);\r\n }\r\n }\r\n catch (error) {\r\n console.log(error);\r\n logUI('MBHWeb.PrayerWall.' + types.MARK_DELETED_POST_ASREAD_FAILURE, new Date(), tools.getURLPath(), error, prayerFeature.memberId);\r\n }\r\n}","import { put, call, takeLatest, all, select } from \"redux-saga/effects\";\r\nimport * as Pricing from \"../api/pricingApi\";\r\nimport { proxyInfo } from \"../api/epicApi\";//, getEvisitEligibility, getZipnosisEvisitUrl\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { logAPI, logUI } from \"../api/andyliticsApi\";\r\nimport * as tools from '../helpers/Tools';\r\n\r\n\r\nconst getMRN = (currentUser) => {\r\n //const { patient, proxySubjects } = epic;\r\n let amrn = null;\r\n /*if (currentUser.eid !== patient.EID) {\r\n for (let i = 0; i < proxySubjects.length; i++) {\r\n const prxy = proxySubjects[i];\r\n if (prxy.patient.EID === currentUser.eid) {\r\n amrn = prxy.patient.AMRN;\r\n }\r\n }\r\n } else {\r\n amrn = patient.AMRN;\r\n }*/\r\n amrn = currentUser.AMRN;\r\n return amrn;\r\n}\r\n\r\nexport default function* pricingSaga() {\r\n yield takeLatest(types.PRICING_USERSQUOTE_BENEFITDETAILS, handleGetBenefitDetails);\r\n yield takeLatest(types.PRICING_USERSQUOTE_APPOINTMENTS, handleGetAppointments);\r\n yield takeLatest(types.PRICING_USERSQUOTE_QUOTE_CLEAR, clearPricing);\r\n yield takeLatest(types.PRICING_USERSQUOTE_ESTIMATE_PDF, handleEstimateDownLoadURL);\r\n yield takeLatest(types.ESTIMATE_DETAILS_TILE_MESSAGE_DETAILS, toggleShowMessageDetails);\r\n}\r\n\r\nfunction* clearPricing() {\r\n try {\r\n yield put({ type: types.PRICING_USERSQUOTE_QUOTE_CLEAR_SUCCESS });\r\n } catch (e) {\r\n logAPI(\"MBHWeb.Saga.Pricing.clearPricing.Failure\", new Date(), null, e);\r\n }\r\n}\r\n\r\nfunction* toggleShowMessageDetails(data) {\r\n const start = new Date();\r\n const isShown = !data.data.show;\r\n try {\r\n yield put({ type: types.ESTIMATE_DETAILS_TILE_MESSAGE_DETAILS_SUCCESS, isShown });\r\n } catch (e) {\r\n logAPI(\"MBHWeb.Saga.Pricing.toggleShowMessageDetails.Failure\", start, null, e);\r\n }\r\n}\r\n//header.membershipData.epic.patient.AMRN\r\n//header.membershipData.epic.patient.proxySubjects[].patient.AMRN\r\nfunction* handleEstimateDownLoadURL(data) {\r\n const start = new Date();\r\n const token = data.data.token;\r\n const { currentUser } = data.data;\r\n const csnId = data.data.csnId;\r\n const patientId = getMRN(currentUser);\r\n const url = tools.buildUrl(window.serverData.data.pricingAPIURL, `/UsersQuote/EstimateCopyPDF?patientId=${patientId}&csnId=${csnId}`);\r\n try {\r\n if (patientId) {\r\n const pdf = yield call(Pricing.downLoadEstimate, token, url);\r\n yield put({ type: types.PRICING_USERSQUOTE_ESTIMATE_PDF_SUCCESS, pdf });\r\n logAPI(\"MBHWeb.Saga.Pricing.handleEstimateDownLoadURL\", start, null, null, \"pdf download\");\r\n }\r\n } catch (e) {\r\n logAPI(\"MBHWeb.Saga.Pricing.handleEstimateDownLoadURL.Failure\", start, null, e);\r\n }\r\n}\r\n//header.membershipData.epic.patient.AMRN\r\n//header.membershipData.epic.patient.proxySubjects[].patient.AMRN\r\nfunction* handleGetBenefitDetails(data) {\r\n const start = new Date();\r\n try {\r\n //const token = data.data.token;\r\n const userDetails = yield select((state) => state.sso.userDetails);\r\n const { currentUser} = data.data;\r\n const { access_token } = userDetails;\r\n const csnId = data.data.csnIdOfAppointment;\r\n const amrn = getMRN( currentUser);\r\n\r\n if (amrn) {\r\n yield put({ type: types.PRICING_USERQUOTE_APPOINTMENTS_LOADING });\r\n logAPI(\"MBHWeb.Saga.Pricing.GetBenefitDetails\", start, null,null,null,\"Call Api\");\r\n const ben = yield call(Pricing.getBenefitDetails, access_token, amrn, csnId);\r\n logAPI(\"MBHWeb.Saga.Pricing.GetBenefitDetails\", start, `estimateDetails/${csnId}`, ben, \"Page View\", \"Finish Api\");\r\n logUI(\"MBHWeb.Saga.Pricing.estimateDetails\", start, `estimateDetails/${csnId}`,ben,\"Page View\",csnId);\r\n yield put({ type: types.PRICING_USERSQUOTE_BENEFITDETAILS_SUCCESS, ben });\r\n }\r\n\r\n }\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Pricing.GetBenefitDetails.Failure\", start, null,error);\r\n yield all([\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n }\r\n}\r\n\r\n\r\n\r\nfunction* handleGetAppointments(data) {\r\n //retry = retry ? retry : 'yes';\r\n const start = new Date();\r\n try {\r\n yield put({ type: types.PRICING_USERQUOTE_APPOINTMENTS_LOADING });\r\n const { currentUser } = data.data;\r\n const order = data.data.order ? data.data.order : \"desc\";\r\n const userDetails = yield select((state) => state.sso.userDetails);\r\n const { access_token } = userDetails;\r\n const amrn = getMRN(currentUser);\r\n\r\n if (amrn) {\r\n yield put({ type: types.PRICING_USERQUOTE_APPOINTMENTS_LOADING });\r\n let apts = [];\r\n const response = yield call(Pricing.getAppointments, access_token, amrn, false);\r\n if (response.statusText && response.statusText.toLowerCase() === \"bad request\") {\r\n console.error(`pricingSaga handleGetAppointments bad request`, response);\r\n } else if (response.status && response.status >= 300) { \r\n console.error(`pricingSaga handleGetAppointments server error`, response);\r\n } else {\r\n apts = response; \r\n }\r\n if (!Array.isArray(apts)) {//if something causes apts to get here and it is not an array then it does not matter\r\n apts = [];\r\n }\r\n if (order === \"desc\") {\r\n apts.sort((a, b) => { return (new Date(b.dateOfService)) - (new Date(a.dateOfService)); });\r\n } else {\r\n apts.sort((a, b) => { return (new Date(a.dateOfService)) - (new Date(b.dateOfService)); });\r\n }\r\n yield put({ type: types.PRICING_USERSQUOTE_APPOINTMENTS_SUCCESS, apts });\r\n \r\n }\r\n } catch (error) {\r\n\r\n console.error(`pricingSaga handleGetAppointments error`, error, data);\r\n logAPI(\"MBHWeb.Saga.Pricing.GetAppointments.Failure\", start, null);\r\n yield all([\r\n put({ type: types.AJAX_CALL_ERROR, error })\r\n ]);\r\n\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import { put, call, takeLatest, takeEvery, fork, all, select} from \"redux-saga/effects\";\r\nimport { searchForAllProviders, searchForAllProvidersByLocationAndDistance, searchForAllProvidersByName, getProviderDetail,\r\n getProvidersListByVisitType,getMyDoctorDirectVideoVisitSchedules, getProviderWithEarliestSchedule, searchForGenericProvider } from \"../api/providerApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { log, logAPI } from \"../api/andyliticsApi\";\r\n\r\nexport default function* searchProvidersSaga() {\r\n yield takeLatest(types.SEARCH_PROVIDER, handleSearch);\r\n yield takeLatest(types.SEARCH_PROVIDER_BY_LOCAION, handleLocationSearch);\r\n yield takeLatest(types.SEARCH_PROVIDER_BY_NAME, handleNameSearch);\r\n yield takeLatest(types.PROVIDER_DETAIL, handleProviderDetail);\r\n yield takeLatest(types.GET_PROVIDERS_LIST_BY_VISITTYPE, handleProvidersListByVisitType);\r\n yield takeLatest(types.GET_PROVIDER_WITH_EARLIESTSCHEDULE, handleProviderEarliestSchedule);\r\n yield takeLatest(types.SEARCH_FOR_GENERIC_PROVIDER, handleGenericProviderSearch);\r\n yield takeLatest(types.SEARCH_FOR_GENERIC_PROVIDER_SLOT_AVAILABILITY, handleGenericProviderSearchForSlotAvailability);\r\n yield takeLatest (types.GET_PROVIDERS_LIST_VISITTYPE, handleProvidersListVisitType)\r\n\r\n}\r\n\r\n\r\nexport function* handleSearch(payload) {\r\n const start = new Date();\r\n try {\r\n const providers = yield call(searchForAllProviders, payload.searchModel, payload.isLatestCall);\r\n yield all([\r\n put({ type: types.SAVE_PROVIDER_SEARCH_MODEL, payload }),\r\n put({ type: types.LOAD_PROVIDERS_SUCCESS, providers })\r\n ]);\r\n\r\n logAPI(\"MBHWeb.Saga.Provider.SearchAll\", start, null);\r\n\r\n //debugger;\r\n if (payload.callback) {\r\n payload.callback(providers);\r\n }\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Provider.SearchAll.Failure\", start, null, error);\r\n yield all([\r\n put({ type: types.AJAX_CALL_ERROR, error }),\r\n put({ type: types.SEARCH_PROVIDER_ERROR })\r\n ]);\r\n if (payload.callback) {\r\n payload.callback(null);\r\n }\r\n }\r\n}\r\n\r\nexport function* handleLocationSearch(payload) {\r\n const start = new Date();\r\n try {\r\n const providers = yield call(searchForAllProvidersByLocationAndDistance, payload);\r\n //const updateFacets = payload.updateFacets;\r\n\r\n yield all([\r\n //put({ type: types.UPDATE_FACETS, updateFacets }),\r\n put({ type: types.LOAD_PROVIDERS_SUCCESS, providers })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.Provider.SearchAll\", start, null);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Provider.SearchAll.Failure\", start, null, error);\r\n yield put({ type: types.AJAX_CALL_ERROR, error });\r\n }\r\n}\r\n\r\n\r\nexport function* handleNameSearch(payload) {\r\n const start = new Date();\r\n try {\r\n const providers = yield call(searchForAllProvidersByName, payload);\r\n\r\n yield all([\r\n put({ type: types.LOAD_PROVIDERS_SUCCESS, providers })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.Provider.SearchName\", start, null);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Provider.SearchName.Failure\", start, null, error);\r\n yield put({ type: types.AJAX_CALL_ERROR, error });\r\n }\r\n}\r\n\r\nexport function* handleProviderDetail(payload) {\r\n const start = new Date();\r\n try {\r\n const providers = yield call(getProviderDetail, payload.searchModel);\r\n\r\n yield all([\r\n put({ type: types.LOAD_PROVIDER_DETAIL_SUCCESS, providers })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.Provider.Detail\", start, null);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Provider.Detail.Failure\", start, null, error);\r\n yield put({ type: types.AJAX_CALL_ERROR, error });\r\n }\r\n}\r\n\r\nexport function* handleProvidersListVisitType(payload) {\r\n const start = new Date();\r\n try {\r\n const providers = yield call(getProvidersListByVisitType, payload.searchModel, payload.token); \r\n\r\n yield all([\r\n put({ type: types.GET_PROVIDERS_LIST_VISITTYPE_SUCCESS, providers })\r\n ]);\r\n\r\n logAPI(\"MBHWeb.Saga.Provider.ProvidersListVisitType\", start, null);\r\n\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Provider.ProvidersListVisitType.Failure\", start, null, error);\r\n yield all([\r\n put({ type: types.AJAX_CALL_ERROR, error }),\r\n ]); \r\n }\r\n}\r\n\r\nexport function* handleProvidersListByVisitType(payload) {\r\n const start = new Date();\r\n try {\r\n let searchProviderModel = {\r\n proxyPatientId: payload.searchModel.proxyPatientId,\r\n loginId: payload.searchModel.loginId\r\n };\r\n\r\n let providerList = yield call(getMyDoctorDirectVideoVisitSchedules, searchProviderModel, payload.token,payload.enableNewVideoVisitFlow);\r\n const providerSlots = providerList && providerList.scheduleDays && providerList.scheduleDays.length > 0 ?\r\n providerList.scheduleDays[0] : null;\r\n\r\n const providers = providerList && providerList.provider ? providerList.provider : null;\r\n if (providerSlots && providers) {\r\n //const currentProvId = providerSlots.provider && providerSlots.provider.id ? providerSlots.provider.id : null;\r\n const providerInfo = providers ? providers : null;\r\n // const providerInfo = providers.length > 0 ? providers.find((v, i) => { return v.epicId === currentProvId }) : null;\r\n providerList.providerInfo = providerInfo;\r\n }\r\n yield all([\r\n put({ type: types.GET_PROVIDER_WITH_EARLIESTSCHEDULE_SUCCESS, providers: providerList })\r\n ]);\r\n\r\n logAPI(\"MBHWeb.Saga.ProvidersList.VisitType\", start, null);\r\n\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.ProvidersList.VisitType.Failure\", start, null, error);\r\n yield all([\r\n put({ type: types.AJAX_CALL_ERROR, error }),\r\n put({ type: types.GET_PROVIDER_WITH_EARLIESTSCHEDULE_ERROR })\r\n ]);\r\n }\r\n}\r\n\r\nexport function* handleProviderEarliestSchedule(payload) {\r\n const start = new Date();\r\n try {\r\n const providers = yield call(getProviderWithEarliestSchedule, payload.searchModel); \r\n\r\n yield all([\r\n put({ type: types.GET_PROVIDER_WITH_EARLIESTSCHEDULE_SUCCESS, providers })\r\n ]);\r\n\r\n logAPI(\"MBHWeb.Saga.Provider.EarliestSchedule\", start, null);\r\n\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Provider.EarliestSchedule.Failure\", start, null, error);\r\n yield all([\r\n put({ type: types.AJAX_CALL_ERROR, error }),\r\n put({ type: types.GET_PROVIDER_WITH_EARLIESTSCHEDULE_ERROR })\r\n ]); \r\n }\r\n}\r\n\r\nexport function* handleGenericProviderSearch(payload) {\r\n const start = new Date();\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n const { location, radius, sortBy, visitTypeId, page, perPage, startDate, endDate } = payload.searchModel;\r\n const providers = yield call(searchForGenericProvider, domainData.t, location, radius, sortBy, visitTypeId, page, perPage, startDate, endDate);\r\n yield put({ type: types.SEARCH_FOR_GENERIC_PROVIDER_SUCCESS, providers });\r\n logAPI(\"MBHWeb.Saga.Provider.SearchForGenericProvider.Success\", start, null);\r\n if (payload.callback) {\r\n payload.callback(providers);\r\n }\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Provider.SearchForGenericProvider.Failure\", start, null, error);\r\n yield put({ type: types.SEARCH_FOR_GENERIC_PROVIDER_FAILURE, error });\r\n }\r\n}\r\n\r\nexport function* handleGenericProviderSearchForSlotAvailability(payload) {\r\n const start = new Date();\r\n try {\r\n const domainData = yield select((state) => state.domain);\r\n const { location, radius, sortBy, visitTypeId, page, perPage, startDate, endDate } = payload.searchModel;\r\n const providers = yield call(searchForGenericProvider, domainData.t, location, radius, sortBy, visitTypeId, page, perPage, startDate, endDate);\r\n yield put({ type: types.SEARCH_FOR_GENERIC_PROVIDER_SLOT_AVAILABILITY_SUCCESS, providers });\r\n logAPI(\"MBHWeb.Saga.Provider.SearchForGenericProvider.SlotAvailability.Success\", start, null);\r\n if (payload.callback) {\r\n payload.callback(providers);\r\n }\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.Provider.SearchForGenericProvider.SlotAvailability.Failure\", start, null, error);\r\n yield put({ type: types.SEARCH_FOR_GENERIC_PROVIDER_SLOT_AVAILABILITY_FAILURE, error });\r\n }\r\n}\r\n","import { takeLatest, select, call, put, all } from 'redux-saga/effects';\r\nimport * as types from '../constants/actionTypes';\r\nimport * as proxy from '../api/proxyApi';\r\nimport * as common from './commonSaga';\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\nimport * as Tools from \"../helpers/Tools\";\r\nimport { PROXY_APPROVED, PROXY_DECLINED, PROXY_PENDING } from \"../constants/textConstants\";\r\n\r\n\r\nexport default function* proxySaga() {\r\n //Keeping Pharamcy proxy activity codes which we have already.\r\n yield takeLatest(types.REQUEST_PROXY_INFO, handle, proxy.getProxiesInfo, null);\r\n yield takeLatest(types.REQUEST_PROXY_CHANGE_STATUS, handle, proxy.changeRequestStatus, null);\r\n yield takeLatest(types.REQUEST_PROXY_ACCESS_LIST, handle, proxy.getAccessList, null);\r\n yield takeLatest(types.REQUEST_PROXY_FAMILY_MEMBERS_LIST, handle, proxy.getFamilyMembersList, null);\r\n yield takeLatest(types.REQUEST_PROXY_RESEND, handle, proxy.resendProxyAccess, 'Resend');\r\n yield takeLatest(types.REQUEST_PROXY_CANCEL, handle, proxy.changeRequestStatus, 'Cancel'); \r\n yield takeLatest(types.VERIFY_REQUESTOR_DOB, handle, proxy.verifyRequestorDateOfBirth, null);\r\n yield takeLatest(types.INITIATE_PROXY_RX_REQUEST, handle, proxy.initiateProxy, 'MBHWeb.Saga.Rx.Proxy.RequestProxyAccess');\r\n yield takeLatest(types.INITIATE_PROXY_EPIC_REQUEST, handle, proxy.initiateProxy, 'MBHWeb.Saga.Proxy.Epic.Request');\r\n //yield takeLatest(types.PROXY_RELATIONSHIP_TYPES, handle, null, 'MBHWeb.Saga.Proxy.GetProxyRelationshipTypes');\r\n yield takeLatest(types.INITIATE_PROXY_EPIC_GRANT, handle, proxy.initiateProxy, 'MBHWeb.Saga.Proxy.Epic.GrantInvite'); \r\n yield takeLatest(types.INITIATE_PROXY_RX_GRANT, handle, proxy.initiateProxy, 'MBHWeb.Saga.Proxy.Rx.GrantInvite'); \r\n yield takeLatest(types.PROXY_STATUS, handle, proxy.proxyStatusInLogoutMode, 'MBHWeb.Saga.Proxy.ProxyStatus'); \r\n yield takeLatest(types.PROXY_TERMS_AND_CONDITIONS, handle, proxy.getProxyTermsAndConditions, null);\r\n yield takeLatest(types.ACCEPT_PROXY_TERMS_AND_CONDITIONS, handle, proxy.acceptProxyTermsAndConditions, null);\r\n yield takeLatest(types.PROXY_DETAILS, handle, proxy.proxyDetails, 'MBHWeb.Saga.Proxy.ProxyDetails');\r\n yield takeLatest(types.REQUEST_PROXY_SUGGESTION_LIST, fetchProxySuggestionList);\r\n yield takeLatest(types.POST_MAMMOGRAPHY_FLOW_DATA, postMammographyFlowData);\r\n yield takeLatest(types.POST_CAREGAP_FLOW_DATA, postCareGapFlowData);\r\n yield takeLatest(types.POST_CAREGAP_SETUP_DATA, postCareGapSetupData);\r\n}\r\n\r\nfunction* postMammographyFlowData() {\r\n const mammographyFlowFormInputs = yield select((state) => state.careGap.mammographyFlowFormInputs);\r\n const mammographyNoReason = yield select((state) => state.careGap.selectedNoMammographyReason);\r\n const mammographyOption = yield select((state) => state.careGap.selectedMammographyOption);\r\n const careGapAttachments = yield select((state) => state.inMemory.careGapAttachments);\r\n const domain = yield select((state) => state.domain);\r\n const token = domain.t;\r\n const start = new Date();\r\n const payload = mammographyFlowFormInputs ? { mammographyOption, ...mammographyFlowFormInputs, careGapAttachments } : { mammographyOption, ...mammographyNoReason };\r\n logAPI(\"MBHWeb.Saga.ProxySaga.MammographyFlow.Start\", start, null, { payload: payload });\r\n try {\r\n yield put({ type: types.GET_MAMMOGRAPHY_FLOW_DATA })\r\n\r\n let result = yield call(proxy.submitCareGapInfo, token, mammographyFlowFormInputs, mammographyNoReason, mammographyOption, careGapAttachments);\r\n if (result.success === true) {\r\n //dispatch one action for success\r\n yield put({ type: types.POST_MAMMOGRAPHY_FLOW_DATA_STATUS, result})\r\n logAPI(\"MBHWeb.Saga.ProxySaga.MammographyFlow.Success\", start, null, result);\r\n } else {\r\n //dispatch one action for failure\r\n yield put({ type: types.POST_MAMMOGRAPHY_FLOW_DATA_STATUS, result })\r\n logAPI(\"MBHWeb.Saga.ProxySaga.MammographyFlow.Failure\", start, null, result);\r\n }\r\n } catch (err) {\r\n yield put({ type: types.POST_MAMMOGRAPHY_FLOW_DATA_STATUS, err })\r\n logAPI(\"MBHWeb.Saga.ProxySaga.MammographyFlow.Failure\", start, null, result);\r\n }\r\n\r\n}\r\nfunction* postCareGapFlowData(careGapPayload) {\r\n const careGapFlowFormInputs = yield select((state) => state.careGap.careGapFlowFormInputs);\r\n const careGapNoReason = yield select((state) => state.careGap.selectedNoCareGapReason);\r\n const careGapSelectedOption = yield select((state) => state.careGap.selectedCareGapOption);\r\n const careGapProcedureType = careGapPayload.procedureType; // yield select((state) => state.careGap.careGapProcedureType) \r\n const careGapAttachments = yield select((state) => state.inMemory.careGapAttachments);\r\n const careGapsSessionId = yield select((state) => state.careGap.careGapsSessionId);\r\n const domain = yield select((state) => state.domain);\r\n const token = domain.t;\r\n const start = new Date();\r\n const payload = careGapFlowFormInputs ? { careGapSelectedOption, ...careGapFlowFormInputs, careGapAttachments, careGapsSessionId } : { careGapSelectedOption, ...careGapNoReason, careGapsSessionId };\r\n logAPI(`MBHWeb.Saga.ProxySaga.${careGapProcedureType}Flow.Start`, start, null, { payload: payload });\r\n try {\r\n yield put({ type: types.GET_CAREGAP_FLOW_DATA })\r\n\r\n let result = yield call(proxy.submitCareGapData, token, careGapFlowFormInputs, careGapNoReason, careGapSelectedOption, careGapProcedureType, careGapAttachments, careGapsSessionId);\r\n if (result.success === true) {\r\n //dispatch one action for success\r\n yield put({ type: types.POST_CAREGAP_FLOW_DATA_STATUS, result })\r\n logAPI(`MBHWeb.Saga.ProxySaga.${careGapProcedureType}Flow.Success`, start, null, result);\r\n } else {\r\n //dispatch one action for failure\r\n yield put({ type: types.POST_CAREGAP_FLOW_DATA_STATUS, result })\r\n logAPI(`MBHWeb.Saga.ProxySaga.${careGapProcedureType}Flow.Failure`, start, null, result);\r\n }\r\n } catch (err) {\r\n yield put({ type: types.POST_CAREGAP_FLOW_DATA_STATUS, err })\r\n logAPI(`MBHWeb.Saga.ProxySaga.${careGapProcedureType}Flow.Failure`, start, null, err);\r\n }\r\n}\r\n\r\nfunction* postCareGapSetupData() {\r\n const careGapFlowFormInputs = yield select((state) => state.careGap.careGapFlowFormInputs);\r\n const careGapSelectedOption = yield select((state) => state.careGap.selectedCareGapOption);\r\n const careGapProcedureType = yield select((state) => state.careGap.careGapProcedureType);\r\n const careGapsSessionId = yield select((state) => state.careGap.careGapsSessionId);\r\n const currentUserInfo = yield select((state) => state.memberships?.currentUser?.externalId);\r\n const domain = yield select((state) => state.domain);\r\n const token = domain.t;\r\n const start = new Date();\r\n const payload = careGapFlowFormInputs ? { careGapSelectedOption, ...careGapFlowFormInputs, careGapsSessionId } : { careGapSelectedOption, careGapsSessionId };\r\n logAPI(`MBHWeb.Saga.ProxySaga.${careGapProcedureType}Flow.Start`, start, null, { payload: payload });\r\n console.log(\"hello\", currentUserInfo);\r\n try {\r\n yield put({ type: types.GET_CAREGAP_FLOW_DATA })\r\n\r\n let result = yield call(proxy.submitCareGapSetupData, token, careGapFlowFormInputs, careGapSelectedOption, careGapProcedureType, careGapsSessionId, currentUserInfo);\r\n console.log(result);\r\n if (result.success === true) {\r\n //dispatch one action for success\r\n yield put({ type: types.POST_CAREGAP_FLOW_DATA_STATUS, result })\r\n logAPI(`MBHWeb.Saga.ProxySaga.${careGapProcedureType}Flow.Success`, start, null, result);\r\n } else {\r\n //dispatch one action for failure\r\n yield put({ type: types.POST_CAREGAP_FLOW_DATA_STATUS, result })\r\n logAPI(`MBHWeb.Saga.ProxySaga.${careGapProcedureType}Flow.Failure`, start, null, result);\r\n }\r\n } catch (err) {\r\n console.log(err);\r\n yield put({ type: types.POST_CAREGAP_FLOW_DATA_STATUS, err })\r\n logAPI(`MBHWeb.Saga.ProxySaga.${careGapProcedureType}Flow.Failure`, start, null, err);\r\n }\r\n}\r\n\r\nfunction* fetchProxySuggestionList() {\r\n let result = { data: null, success: false, errorMsg: null }\r\n const start = new Date();\r\n logAPI(\"MBHWeb.Saga.ProxySaga.ProxySuggestions.Get.Start\", start, null, null);\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n const token = domain.t;\r\n const data = yield call(proxy.getProxySuggestion, token);\r\n\r\n if (data) {\r\n result.data = data;\r\n result.success = true; \r\n logAPI(\"MBHWeb.Saga.ProxySaga.ProxySuggestions.Get.Success\", start, null, result);\r\n } \r\n yield put({ type: types.GET_PROXY_SUGGESTION_LIST, payload: result })\r\n } catch (e) {\r\n result.error = e;\r\n result.success = false\r\n logAPI(\"MBHWeb.Saga.ProxySaga.ProxySuggestions.Get.Failure\", start, null, result);\r\n yield put({ type: types.GET_PROXY_SUGGESTION_LIST, payload: result })\r\n }\r\n\r\n}\r\n\r\nfunction* handle(apiCall, andyliticsLogName, action) {\r\n const start = new Date();\r\n const REQUEST = \"request\";\r\n const REQUESTV2 = \"request.v2\";\r\n const GRANT = \"grant\";\r\n const session = yield select((state) => state.session);\r\n const useOnboardingLayout = session?.useOnboardingLayout ? \".OnboardingFlow\" : \"\";\r\n andyliticsLogName = andyliticsLogName && `${andyliticsLogName}${useOnboardingLayout}`;\r\n try {\r\n const type = action.type;\r\n const domainData = yield select((state) => state.domain);\r\n if (domainData) {\r\n if (action.success) {\r\n //do something here \r\n if (type === types.REQUEST_PROXY_CHANGE_STATUS || type === types.REQUEST_PROXY_RESEND || type === types.REQUEST_PROXY_CANCEL) {\r\n let proxySource = \"Rx\";\r\n if (domainData.hm) {\r\n proxySource = \"Rx,Epic\";\r\n }\r\n\r\n if (type === types.REQUEST_PROXY_CHANGE_STATUS) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.CLEAR_PROXY_MESSAGE });\r\n }, 10000);\r\n }\r\n\r\n if (type === types.REQUEST_PROXY_CANCEL || type === types.INITIATE_PROXY_RX_REQUEST || (type === types.REQUEST_PROXY_CHANGE_STATUS && action.data === \"Approved\")) {\r\n yield put({ type: types.REQUEST_PROXY_ACCESS_LIST, data: { userId: domainData.un, proxySource } });\r\n if (domainData.hm) {\r\n yield put({ type: types.MEMBERSHIP_RECOMPILE_START });\r\n }\r\n } \r\n\r\n if (type === types.REQUEST_PROXY_CANCEL || type === types.INITIATE_PROXY_RX_REQUEST || (type === types.REQUEST_PROXY_CHANGE_STATUS && action.data === \"Approved\")) {\r\n yield put({ type: types.REQUEST_PROXY_FAMILY_MEMBERS_LIST, data: { userId: domainData.un, proxySource } });\r\n if (domainData.hm) {\r\n yield put({ type: types.MEMBERSHIP_RECOMPILE_START });\r\n }\r\n } \r\n //Skip Proxy Info Call for certain conditions - anonymous proxy request.\r\n if (domainData.t) {\r\n yield put({ type: types.REQUEST_PROXY_INFO, data: { userId: domainData.un, proxySource }, changeProxyStatus: true });\r\n }\r\n }\r\n }\r\n else if (!action.error) {\r\n const proxySource = action && action.data && action.data.proxySource ? action.data.proxySource : \"\";\r\n const requestType = action && action.data && action.data.requestType ? action.data.requestType === GRANT ? \"Grant\" : action.data.requestType === REQUEST ? \"Request\" : (action.data.requestType === REQUESTV2 ? \"Request.V2\" : \"\") : \"\";\r\n if (type === types.REQUEST_PROXY_CHANGE_STATUS) {\r\n if (action.data.status === PROXY_DECLINED) {\r\n apiCall = domainData.t ? proxy.changeRequestStatus : proxy.declineProxyInLogoutMode;\r\n } \r\n andyliticsLogName = (action.data.status === PROXY_APPROVED) ? `MBHWeb.Saga.${proxySource}.Proxy.ApproveProxy${requestType}` :\r\n (action.data.status === PROXY_PENDING) ? `MBHWeb.Saga.${proxySource}.Proxy.LinkProxy${requestType}` : `MBHWeb.Saga.${proxySource}.Proxy.DeclineProxy${requestType}`;\r\n }\r\n if (type === types.REQUEST_PROXY_INFO) {\r\n andyliticsLogName = domainData.hm ? \"MBHWeb.Saga.RxAndEpic.Proxy.GetProxyInfo\" : \"MBHWeb.Saga.Rx.Proxy.GetProxyInfo\";\r\n }\r\n if (andyliticsLogName === \"Resend\") { andyliticsLogName = `MBHWeb.Saga.${proxySource}.Proxy.ResendProxyAccessRequest`; }\r\n if (andyliticsLogName === \"Cancel\") { andyliticsLogName = `MBHWeb.Saga.${proxySource}.Proxy.CancelProxy${requestType}`; }\r\n \r\n yield call(common.handle, apiCall, domainData.t, andyliticsLogName, action);\r\n }\r\n else {\r\n if (type === types.REQUEST_PROXY_CHANGE_STATUS) {\r\n window.setTimeout(() => {\r\n window.store.dispatch({ type: types.CLEAR_PROXY_MESSAGE });\r\n }, 10000);\r\n }\r\n if (type === types.INITIATE_PROXY_RX_REQUEST) {\r\n let error = action.error;\r\n if (error && error.status && error.status === 409) {\r\n const errorMessage = yield call(getErrorMsg, error);\r\n yield put({ type: types.INITIATE_PROXY_RX_REQUEST_FAILURE, errorCode: error.status ? error.status : error, errorMessage: errorMessage ? errorMessage : null });\r\n } else {\r\n yield put({ type: types.INITIATE_PROXY_RX_REQUEST_FAILURE, errorCode: error.status ? error.status : error });\r\n }\r\n }\r\n if (type === types.INITIATE_PROXY_EPIC_GRANT) {\r\n let error = action.error;\r\n let errorMessage = null, errorCode = null;\r\n if (typeof error !== 'string') {\r\n if (error.status || error.errorCode || error.statusCode) {\r\n errorMessage = error.errorMessage; //yield call(getErrorMsg, error);\r\n errorCode = error.status || error.errorCode || error.statusCode;\r\n } \r\n }\r\n else {\r\n errorMessage = errorCode = error;\r\n }\r\n yield put({ type: types.INITIATE_PROXY_EPIC_GRANT_FAILURE, errorMessage: errorMessage ? errorMessage : null, errorCode: errorCode });\r\n }\r\n if (type === types.INITIATE_PROXY_RX_GRANT) {\r\n let error = action.error;\r\n let errorMessage = null, errorCode = null;\r\n if (typeof error !== 'string') {\r\n if (error.status || error.errorCode || error.statusCode ) {\r\n errorMessage = error.errorMessage; //yield call(getErrorMsg, error);\r\n errorCode = error.status || error.errorCode || error.statusCode;\r\n }\r\n }\r\n else {\r\n errorMessage = errorCode = error;\r\n }\r\n yield put({ type: types.INITIATE_PROXY_RX_GRANT_FAILURE, errorMessage: errorMessage ? errorMessage : null, errorCode: errorCode });\r\n }\r\n if (type === types.VERIFY_REQUESTOR_DOB) {\r\n let error = action.error;\r\n let errorMessage = null;\r\n if (error && error.status && error.status === 409) {\r\n errorMessage = yield call(getErrorMsg, error);\r\n }\r\n yield put({ type: types.VERIFY_REQUESTOR_DOB_FAILURE, error: error });\r\n }\r\n \r\n }\r\n }\r\n }\r\n catch (e) {\r\n //debugger;\r\n console.error(e);\r\n logAPI(\"MBHWeb.Saga.ProxySaga.Get.Failure\", start, null, response);\r\n if (response && response.status && response.status === 401) {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: response.status });\r\n }\r\n else {\r\n yield put({ type: types.AJAX_CALL_ERROR, proxyError: response });\r\n }\r\n }\r\n}\r\n\r\nfunction getErrorMsg(errMsg) {\r\n return errMsg.json().then(data => {\r\n return data;\r\n });\r\n}\r\n\r\n\r\n","import { spawn, put, call, fork, all, select, takeLatest } from \"redux-saga/effects\";\r\nimport { delay } from 'redux-saga/effects';\r\nimport { userAuthenticate, userRefresh, isLoggedInPost2 } from \"../api/ssoApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport * as msgs from \"../constants/textConstants\";\r\nimport { proxyInfo, getEvisitEligibility, getZipnosisEvisitUrl, getMyChartStatus, getCareCompanionEnrollStatus } from '../api/epicApi';\r\nimport { getNotices, getConsents } from '../api/portalApi';\r\nimport { logToAndylitics } from \"../api/andyliticsApi\";\r\nimport * as portalAPI from \"../api/portalApi\";\r\nimport * as account from \"../api/accountApi\";\r\nimport * as Tools from \"../helpers/Tools\";\r\nconst Interactive_InApp_Tutorial = 'InteractiveInAppTutorial'; //cookie name for Interactive In App Site Tour\r\nimport Cookies from \"cookies-js\";\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\nimport { getThrive } from \"../api/portalApi\";\r\nimport { getDomain } from \"../helpers/Tools\";\r\nimport { convertZipnosisErrorMessage } from \"../helpers/data\";\r\nimport { getEpicWhoCanManageYou } from '../api/proxyApi';\r\nimport { getFCHPUserData, getUserPayerData } from \"../api/healthPlanServicesApi\";\r\nimport { getHealthPlans } from \"../api/healthPlanApi\";\r\nimport * as hpServicesApi from \"../api/healthPlanServicesApi\";\r\nimport { getMembershipData, refreshProfile } from \"../api/mybswBFFApi\";\r\nimport * as todosSaga from \"./todosSaga\";\r\nimport * as prayerFeatureSaga from \"./prayerFeatureSaga\";\r\nimport { RecompileProfile } from \"../api/membershipsApi\";\r\n\r\n\r\n\r\nconst AALinkModalExpire = '_aalinkingmodalexpire';\r\n\r\nexport function* watchUserAuthenticate() {\r\n yield takeLatest([types.USER_AUTHENTICATE], authorize);\r\n yield takeLatest([types.USER_AUTHENTICATE_REFRESH], refresh);\r\n yield takeLatest([types.ON_USER_AUTHENTICATE_SUCCESS], onUserAuthenticateSuccess)\r\n yield takeLatest([types.VERIFY_LOGIN], verifyLogin);\r\n yield takeLatest([types.LOGOUT], logoutRedirect);\r\n yield takeLatest([types.LOGIN_FORM_SUCCESS], loginSuccess);\r\n yield takeLatest([types.REFRESH_TOKEN], refreshToken);\r\n yield takeLatest([types.LOAD_TERMS_AND_CONDITIONS], loadTermsAndConditions);\r\n yield takeLatest([types.ACCEPT_TERMS_AND_CONDITIONS], acceptTermsAndConditions);\r\n yield takeLatest([types.SAVE_HIDE_TUTORIAL], saveShowTutorial);\r\n yield takeLatest([types.ZIPNOSIS_EVISIT_URL], zipnosisEvisitUrl);\r\n yield takeLatest([types.REFRESH_PROXY_LIST], refreshProxyList);\r\n yield takeLatest(types.SWITCH_USER_SAGA, handleUserSwitch);\r\n yield takeLatest([types.MEMBERSHIP_GET_START], refreshProfileData);\r\n yield takeLatest([types.MEMBERSHIP_TIMER_START], startMembershipTimer);\r\n yield takeLatest([types.REFRESH_FAMILY_MANAGEMENT_TOOLTIP], refreshFamilyManagementTooltip);\r\n}\r\n\r\n\r\n\r\nexport function* refreshProfileData(data) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n var memberData = null;\r\n var token = data.t || domain.t;\r\n if (token) {\r\n memberData = yield Tools.safeCall(getMembershipData, token);\r\n }\r\n logAPI(\"MBHWeb.Saga.SSO.GotProfile\", start, null, memberData);\r\n if (memberData === null || memberData && memberData.err) {\r\n yield put({ type: types.MEMBERSHIP_GET_FAILURE, error: memberData && memberData.err ? memberData.err : null });\r\n\r\n if (window.serverData.data.replaceProxyInfoWithMemberships) {\r\n yield todosSaga.handleAction({ type: types.PROXY_LIST_FAILURE, error: \"Failed proxy from memberships\" });\r\n }\r\n if (data && data.callback) {\r\n data.callback(memberData, false);\r\n }\r\n\r\n window.store.dispatch({ \r\n type: types.GET_PATIENT_SCHEDULING_PERMISSIONS_SUCCESS,\r\n schedulingPermissions: {\r\n loadedSchedulingPermissions: true,\r\n isFetching: false,\r\n error: null\r\n }\r\n });\r\n }\r\n else {\r\n //debugger;\r\n yield put({ type: types.MEMBERSHIP_GET_SUCCESS, data: memberData.result });\r\n yield todosSaga.handleAction({ type: types.PROXY_LIST_LOADED });\r\n\r\n if (data && data.callback) {\r\n data.callback(memberData, true);\r\n }\r\n }\r\n logAPI(\"MBHWeb.Saga.SSO.RefreshProfile\", start, null, data);\r\n }\r\n catch (ex) {\r\n if (data && data.callback) {\r\n data.callback(ex, false);\r\n }\r\n logAPI(\"MBHWeb.Saga.SSO.RefreshProfile.Failure\", start, null, data);\r\n console.error(ex);\r\n }\r\n}\r\n\r\n// the profile is fetched every x seconds (time set by slot config)\r\nexport function* startMembershipTimer(data) {\r\n try {\r\n let currentProfile = yield select((state) => state.memberships);\r\n const domain = yield select((state) => state.domain);\r\n let time = window.serverData.data.membershipRefreshInSeconds;\r\n\r\n Tools.safeCall(refreshProfile, domain.t), // this is the /login call that triggers the full rediscovery... fast async acknowledgement and return\r\n\r\n yield spawn(recompileRetryLoop, domain.t, time);\r\n\r\n //yield call(refreshProfileData, domain.t);\r\n yield delay(time * 1000);\r\n yield call(refreshProfileData, domain.t); // this line is in here on a timer to pick up possible discovery from new user registrations that weren't completed at the time they first click in from the registration page\r\n\r\n }\r\n catch (e) {\r\n console.log(e);\r\n }\r\n}\r\n\r\nexport function* recompileRetryLoop(token, waitTime) {\r\n var iCurr = 0;\r\n try {\r\n while (iCurr < 5) { // we'll repeat the try up to 5 times if there is an error\r\n var results = yield Tools.safeCall(RecompileProfile, token); // this is the synchronous /recompile\r\n if (results && !results.err && results.result) {\r\n yield put({ type: types.MEMBERSHIP_GET_SUCCESS, data: results.result });\r\n yield todosSaga.handleAction({ type: types.PROXY_LIST_LOADED });\r\n break;\r\n }\r\n else {\r\n yield delay(time * 1000);\r\n }\r\n iCurr++;\r\n }\r\n\r\n }\r\n catch (e) {\r\n console.error(e);\r\n }\r\n\r\n}\r\n\r\nexport function* saveShowTutorial(data) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n\r\n yield Tools.safeCall(account.setHideTutorial, domain.t);\r\n logAPI(\"MBHWeb.Saga.SSO.ShowTutorial.Save\", start, null, data);\r\n }\r\n catch (ex) {\r\n console.error(ex);\r\n logAPI(\"MBHWeb.Saga.SSO.ShowTutorial.Save.Failure\", start, null, data);\r\n }\r\n}\r\n\r\nexport function* loadTermsAndConditions() {\r\n const start = new Date();\r\n try {\r\n const terms = yield Tools.safeCall(portalAPI.getTermsAndConditions);\r\n\r\n if (!terms.err && terms.result && terms.result.isSuccessful) {\r\n yield put({ type: types.SET_TERMS_AND_CONDITIONS, terms: terms.result.textToDisplay, version: terms.result.versionId });\r\n let andyliticResponse = JSON.parse(JSON.stringify(terms));\r\n if (andyliticResponse && andyliticResponse.result && andyliticResponse.result.textToDisplay) {\r\n andyliticResponse.result.textToDisplay = '';\r\n }\r\n logAPI(\"MBHWeb.Saga.SSO.TermsAndConditions.Get\", start, null, andyliticResponse);\r\n }\r\n\r\n\r\n }\r\n catch (e) {\r\n console.error(e);\r\n logAPI(\"MBHWeb.Saga.SSO.TermsAndConditions.Get.Failure\", start, null);\r\n }\r\n\r\n}\r\n\r\nexport function* handleRedirect(reDirectURL) {\r\n const start = new Date();\r\n const history = yield select((state) => state.session.history);\r\n var domain = yield select((state) => state.domain);\r\n if (typeof window !== 'undefined') {\r\n if (reDirectURL && window.location.pathname !== reDirectURL) {\r\n\r\n //alert(\"Redirecting to redir url: \" + reDirectURL);\r\n const reDirectURLWithQP = domain.qp ? reDirectURL + domain.qp : reDirectURL;\r\n\r\n yield put({ type: types.CLEAR_REDIRECT_URL });\r\n\r\n domain = yield select((state) => state.domain);\r\n if (history) { history.push(reDirectURLWithQP) };\r\n logAPI(\"MBHWeb.Saga.SSO.Redirect\", start, null, reDirectURLWithQP);\r\n }\r\n yield put({ type: types.CLEAR_REDIRECT_URL });\r\n\r\n }\r\n\r\n}\r\n\r\nexport function* acceptTermsAndConditions(data) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n\r\n if (domain.li) {\r\n const accept = yield call(portalAPI.acceptTermsAndConditions, domain.t, domain.un, data.VersionID);\r\n const reDirectURL = window.redirectURL;\r\n\r\n yield put({ type: types.SET_TERMS_AND_CONDITIONS, HasAccepted: true });\r\n\r\n\r\n yield handleRedirect(reDirectURL);\r\n logAPI(\"MBHWeb.Saga.SSO.TermsAndConditions.Accept\", start, null, JSON.stringify(accept));\r\n }\r\n }\r\n catch (ex) {\r\n\r\n console.error(ex);\r\n logAPI(\"MBHWeb.Saga.SSO.TermsAndConditions.Accept.Failure\", start, null, null);\r\n }\r\n}\r\n\r\n\r\nexport function* refreshToken() {\r\n const start = new Date();\r\n\r\n const domainData = yield select((state) => state.domain);\r\n\r\n if (domainData.rt) {\r\n yield put({ type: types.USER_AUTHENTICATE_REFRESH, refresh_token: domainData.rt });\r\n logAPI(\"MBHWeb.Saga.SSO.RefreshToken.Get\", start, null);\r\n } else {\r\n //Adding more log to validate mobile issue for linking\r\n logAPI(\"MBHWeb.Saga.SSO.RefreshToken.Error.NoRefreshToken\", start, null);\r\n }\r\n}\r\n\r\n\r\nexport function* loginSuccess(paylog) {\r\n\r\n try {\r\n const sDomain = getDomain();\r\n Cookies.set('BSWPROXY', \"\", { path: '/', domain: sDomain });\r\n }\r\n catch (err) {\r\n console.error(err);\r\n }\r\n\r\n}\r\n\r\n\r\nexport function* authorize(payload) {\r\n const start = new Date();\r\n try {\r\n //debugger;\r\n const response = yield call(userAuthenticate, payload);\r\n\r\n //debugger;\r\n yield onUserAuthenticateSuccess(response);\r\n if (response && response.access_token) {\r\n //debugger;\r\n\r\n yield put({ type: types.LOGIN_FORM_SUCCESS, error: null, isWaiting: false });\r\n logAPI(\"MBHWeb.Saga.SSO.Authenticate.Login\", start, null);\r\n }\r\n else {\r\n //debugger;\r\n logAPI(\"MBHWeb.Saga.SSO.Authenticate.Login.Failure\", start, null, response);\r\n }\r\n }\r\n catch (error) {\r\n //debugger;\r\n //console.error(error);\r\n //console.log(JSON.stringify(error));\r\n logAPI(\"MBHWeb.Saga.SSO.Authenticate.Login.Failure\", start, null, error);\r\n yield put({ type: types.AJAX_CALL_ERROR, error: error, isWaiting: false });\r\n yield put({ type: types.USER_AUTHENTICATE_FAILURE, errorCode: error.message, userErrorMessage: error.message, responseError: error.message, isWaiting: false });\r\n }\r\n}\r\n\r\nexport function* CallIsLoggedIn(payload) {\r\n const start = new Date();\r\n try {\r\n //debugger;\r\n const domain = yield select((state) => state.domain);\r\n\r\n const response = yield call(isLoggedInPost2, domain.t);\r\n\r\n yield onUserAuthenticateSuccess(response);\r\n logAPI(\"MBHWeb.Saga.SSO.IsLoggedIn\", start, null, response);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n logAPI(\"MBHWeb.Saga.SSO.IsLoggedIn.Failure\", start, null, null);\r\n yield put({ type: types.AJAX_CALL_ERROR, error: error, isWaiting: false });\r\n }\r\n}\r\n\r\n\r\n\r\nvar bInRefresh = false;\r\n\r\nexport function* refresh(payload) {\r\n const start = new Date();\r\n try {\r\n const response = yield call(userRefresh, payload);\r\n\r\n if (response && response.access_token) {\r\n //debugger;\r\n yield onUserAuthenticateSuccess(response);\r\n logAPI(\"MBHWeb.Saga.SSO.Refresh\", start, null);\r\n }\r\n else {\r\n yield put({ type: types.REFRESH_TOKEN_FAILURE, userData: response, responseError: response.error, isWaiting: false });\r\n logAPI(\"MBHWeb.Saga.SSO.Refresh.Failure\", start, null);\r\n }\r\n if (response && !response.IsLoggedIn) {\r\n yield put({ type: types.VERIFY_LOGIN, error: null, isWaiting: false });\r\n logAPI(\"MBHWeb.Saga.SSO.Refresh.Failure\", start, null);\r\n }\r\n return response;\r\n }\r\n catch (error) {\r\n console.error(error);\r\n bInRefresh = false;\r\n logAPI(\"MBHWeb.Saga.SSO.Refresh.Failure\", start, null, null);\r\n yield put({ type: types.AJAX_CALL_ERROR, error: error, isWaiting: false });\r\n }\r\n\r\n}\r\n\r\n\r\nexport function* loadHealthPlanMaintenanceEvents(token, memberId) {\r\n var hrMaintenanceEvents = yield call(hpServicesApi.ProcessControlEventsApi.getProcessControlEvents, token, memberId);\r\n yield put({ type: types.SET_HEALTHPLAN_MAINTENANCE_EVENTS, maintenanceEvents: hrMaintenanceEvents });\r\n}\r\n\r\nexport function* onUserAuthenticateSuccess(response) {\r\n const session = yield select((state) => state.session);\r\n const start = new Date();\r\n try {\r\n if (response && response.access_token) {\r\n var iInstanceID = Math.floor(Math.random() * 1000);\r\n //debugger;\r\n const hasMyChart = response.Logins.indexOf('MyChart') > -1;\r\n const hasAutoMyChart = response && response.AUTO_MyChartID ? true : false;\r\n const enableAutoMyChartLink = typeof window !== 'undefined' && window.serverData.data.enableMyChartAutoLink;\r\n const showAccessAndProxiesList = typeof window !== 'undefined' && window.serverData.data.ShowAccessAndProxiesList;\r\n //const enableDCJSelfEnrollForWellness = typeof window !== 'undefined' && window.serverData.data.enableDCJSelfEnrollForWellness;\r\n const enableFluVaccine = typeof window !== 'undefined' && window.serverData.data.enableFluVaccine;\r\n const useRegistrationForUserPrefs = typeof window !== 'undefined' && window.serverData.data.useRegistrationForUserPrefs;\r\n const token = response.access_token;\r\n const userName = response.userName;\r\n const isEmployee = response.Logins.indexOf('Employee') > -1;\r\n const reDirectURL = window.redirectURL;\r\n\r\n // This dispatch loads the domain data but does not turn off the login spinner\r\n yield put({\r\n type: types.USER_AUTHENTICATE_SUCCESS,\r\n userData: response,\r\n responseError: response.error,\r\n isWaiting: true\r\n });\r\n\r\n\r\n yield put({ type: types.VERIFY_LOGIN_COMPLETED }); // turn on flag to do BYE page on next Login page\r\n\r\n //Get Health Plans\r\n const consentList = yield Tools.safeCall(getConsents, token);\r\n //debugger;\r\n if (!consentList.err && consentList.result.isSuccessful) {\r\n consentList.result.consentList.forEach((consent, index) => {\r\n consent.data = JSON.parse(consent.data);\r\n });\r\n yield put({ type: types.HP_CONSENT_LIST, consentList: consentList.result.consentList });\r\n }\r\n const healthPlans = yield Tools.safeCall(getHealthPlans, token);\r\n let currentHealthPlan = null;\r\n if (healthPlans && !healthPlans.err && healthPlans.result) {\r\n logAPI(\"MBHWeb.Saga.SSO.GetHealthPlans.Success\", start, null, null);\r\n if (healthPlans.result.length > 0) {\r\n try {\r\n if (healthPlans.result.length === 1) {\r\n currentHealthPlan = healthPlans.result[0];\r\n } else {\r\n //If more health plans linked. Then Priority is AAL, else SWHP, First Care.\r\n //Check for AAL.\r\n currentHealthPlan = Tools.getHealthPlanByProviderKey(healthPlans.result, msgs.LOGIN_PROVIDER_AAL);\r\n //Check for SWHP if we didn't find AAL.\r\n if (currentHealthPlan === null) {\r\n currentHealthPlan = Tools.getHealthPlanByProviderKey(healthPlans.result, msgs.LOGIN_PROVIDER_SWHP);\r\n }\r\n //Check for HR-SWHP if we didn't find above one.\r\n if (currentHealthPlan === null) {\r\n currentHealthPlan = Tools.getHealthPlanByProviderKey(healthPlans.result, msgs.LOGIN_PROVIDER_HR_SWHP);\r\n }\r\n //Check for FirstCare if we didn't find above one.\r\n if (currentHealthPlan === null) {\r\n currentHealthPlan = Tools.getHealthPlanByProviderKey(healthPlans.result, msgs.LOGIN_PROVIDER_FIRSTCARE);\r\n }\r\n //Take default one.\r\n if (currentHealthPlan === null) {\r\n currentHealthPlan = healthPlans.result[0];\r\n }\r\n }\r\n let hasAMIDental = false;\r\n var APIprefix = currentHealthPlan && currentHealthPlan.APIPrefix ? currentHealthPlan.APIPrefix : null;\r\n\r\n if (APIprefix && APIprefix === \"AMI\") {\r\n try {\r\n //check first if is AMISYS user\r\n const MemberId = currentHealthPlan && currentHealthPlan.ProviderKey ?\r\n currentHealthPlan.ProviderKey : null;\r\n const hasDentalPlan = yield call(hpServicesApi.InvoiceApi.getDentalInvoiceDetails, token, MemberId);\r\n if (hasDentalPlan) {\r\n hasAMIDental = true;\r\n }\r\n\r\n }\r\n catch (e) {\r\n console.log(e); //Call fails, user doesn't have a dental plan\r\n }\r\n }\r\n\r\n let hrMaintenanceEvents = [];\r\n try {\r\n const MemberId = currentHealthPlan && currentHealthPlan.ProviderKey ?\r\n currentHealthPlan.ProviderKey : null;\r\n //Get Process Control Events\r\n yield spawn(loadHealthPlanMaintenanceEvents, token, MemberId);\r\n //hrMaintenanceEvents = yield call(hpServicesApi.ProcessControlEventsApi.getProcessControlEvents, token, MemberId);\r\n }\r\n catch (e) {\r\n console.info(e)\r\n //assume no process Control Events\r\n }\r\n\r\n logAPI(\"MBHWeb.Saga.SSO.GetHealthPlans.Plan.Found\", start, null, { \"LoginProvider\": currentHealthPlan && currentHealthPlan.LoginProvider ? currentHealthPlan.LoginProvider : null });\r\n yield put({ type: types.SET_HEALTHPLAN_INFO, healthPlanInfo: currentHealthPlan, healthPlans: healthPlans.result, hasADental: hasAMIDental });\r\n } catch (e) {\r\n console.log(e);\r\n yield put({ type: types.SET_HEALTHPLAN_INFO, healthPlanInfo: currentHealthPlan, healthPlans: null, hasADental: false, maintenanceEvents: [] });\r\n logAPI(\"MBHWeb.Saga.SSO.GetHealthPlans.Failure\", start, null, null);\r\n }\r\n } else {\r\n yield put({ type: types.SET_HEALTHPLAN_INFO, healthPlanInfo: currentHealthPlan, healthPlans: null, hasADental: false, maintenanceEvents: [] });\r\n }\r\n } else {\r\n logAPI(\"MBHWeb.Saga.SSO.GetHealthPlans.Failure\", start, null, null);\r\n yield put({ type: types.SET_HEALTHPLAN_INFO, healthPlanInfo: currentHealthPlan, healthPlans: null, hasADental: false, maintenanceEvents: [] });\r\n }\r\n\r\n const hpLoginProvider = currentHealthPlan && currentHealthPlan.LoginProvider ? currentHealthPlan.LoginProvider.toLowerCase() : '';\r\n const hasHealthPlan = hpLoginProvider && (hpLoginProvider === msgs.LOGIN_PROVIDER_SWHP ||\r\n hpLoginProvider === msgs.LOGIN_PROVIDER_HR_SWHP);\r\n\r\n yield put({\r\n type: types.GET_PRIVACY_MYBSWH_TEXT, featureId: msgs.Privacy_MyBswh,\r\n token: token }); // get digital privacy policy status.\r\n\r\n // check for all preferences of the user\r\n //debugger;\r\n const allPreferences = yield Tools.safeCall(account.getAllUserPreferences2, token);\r\n //debugger;\r\n const isAllPreferenceSuccess = allPreferences && !allPreferences.err && allPreferences.result; // && allPreferences.result.isSuccessful;\r\n const userPreferenceList = isAllPreferenceSuccess && allPreferences.result ? allPreferences.result : [];\r\n if (isAllPreferenceSuccess) {\r\n yield put({ type: types.SET_USER_PREFERENCES, userPreferences: userPreferenceList });\r\n logAPI(\"MBHWeb.Saga.SSO.GetAllUserPreferences.Get\", start, null, JSON.parse(JSON.stringify(allPreferences)));\r\n }\r\n else {\r\n yield put({ type: types.SET_USER_PREFERENCES, userPreferences: null });\r\n logAPI(\"MBHWeb.Saga.SSO.GetAllUserPreferences.Get.Failure\", start, null, allPreferences);\r\n }\r\n\r\n\r\n // For Auto-MyChart users validating preference to show Auto Link MyChart Popup\r\n if (!hasMyChart && hasAutoMyChart && enableAutoMyChartLink) {\r\n if (isAllPreferenceSuccess) {\r\n const indexAutoMyChartPref = userPreferenceList.findIndex(preference => preference.PreferenceName === \"DeclinedMyChart\");\r\n if (indexAutoMyChartPref >= 0) {\r\n if (userPreferenceList[indexAutoMyChartPref].PreferenceValue === \"true\") {\r\n yield put({\r\n type: types.SHOW_AUTOLINK_MYCHART, showAutoLinkMyChart: false\r\n });\r\n }\r\n else {\r\n yield put({\r\n type: types.SHOW_AUTOLINK_MYCHART, showAutoLinkMyChart: true\r\n });\r\n }\r\n logAPI(\"MBHWeb.Saga.SSO.AutoLink.MyChart.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList[indexAutoMyChartPref])));\r\n }\r\n else {\r\n //preference not found in the list of Preferences so we are showing mychart auto linking modal.\r\n yield put({\r\n type: types.SHOW_AUTOLINK_MYCHART, showAutoLinkMyChart: true\r\n });\r\n }\r\n }\r\n }\r\n\r\n // For Add-Dependents Proxy Form \r\n if (isAllPreferenceSuccess) {\r\n const indexAddProxiesPref = userPreferenceList.findIndex(preference => preference.PreferenceName === \"DontPromptToAddProxies\");\r\n if (indexAddProxiesPref >= 0) {\r\n if (userPreferenceList[indexAddProxiesPref].PreferenceValue === \"true\") {\r\n yield put({\r\n type: types.SHOW_ADD_DEPENDENT_PROXY_FORM, showDependentProxyForm: false\r\n });\r\n }\r\n else {\r\n yield put({\r\n type: types.SHOW_ADD_DEPENDENT_PROXY_FORM, showDependentProxyForm: true\r\n });\r\n }\r\n logAPI(\"MBHWeb.Saga.SSO.AddDependents.Proxy.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList[indexAddProxiesPref])));\r\n }\r\n //preference not found in the list of Preferences so we are showing add dependent proxy form.\r\n else {\r\n yield put({\r\n type: types.SHOW_ADD_DEPENDENT_PROXY_FORM, showDependentProxyForm: true\r\n });\r\n }\r\n }\r\n\r\n // For VideoVisit ToolTip Preference \r\n if (isAllPreferenceSuccess) {\r\n const indexVideoToolTipPref = userPreferenceList.findIndex(preference => preference.PreferenceName === \"HideVideoVisitToolTipForWeb\");\r\n //debugger;\r\n if (indexVideoToolTipPref >= 0) {\r\n if (userPreferenceList[indexVideoToolTipPref].PreferenceValue === \"true\") {\r\n yield put({\r\n type: types.SHOW_VIDEO_VISIT_TOOLTIP, showVideoVisitToolTip: false\r\n });\r\n }\r\n else {\r\n yield put({\r\n type: types.SHOW_VIDEO_VISIT_TOOLTIP, showVideoVisitToolTip: true\r\n });\r\n }\r\n logAPI(\"MBHWeb.Saga.SSO.VideoVisitToolTip.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList[indexVideoToolTipPref])));\r\n }\r\n //preference not found in the list of Preferences so we are showing videoVisitTooltip.\r\n else {\r\n yield put({\r\n type: types.SHOW_VIDEO_VISIT_TOOLTIP, showVideoVisitToolTip: true\r\n });\r\n }\r\n }\r\n\r\n // For MapProxyRequesteeInfo Preference - New user registered and Requesting Pharmacy Access\r\n if (isAllPreferenceSuccess) {\r\n const indexProxyRequesteePref = userPreferenceList.findIndex(preference => preference.PreferenceName === \"MapProxyRequesteeInfo\");\r\n if (indexProxyRequesteePref >= 0) {\r\n if (userPreferenceList[indexProxyRequesteePref].PreferenceValue && userPreferenceList[indexProxyRequesteePref].PreferenceValue !== \"null\") {\r\n yield put({\r\n type: types.SAVE_PROXY_REQUESTEE_INFO, proxyRequesteeInfo: userPreferenceList[indexProxyRequesteePref].PreferenceValue\r\n });\r\n }\r\n else {\r\n yield put({\r\n type: types.SAVE_PROXY_REQUESTEE_INFO, proxyRequesteeInfo: null\r\n });\r\n }\r\n logAPI(\"MBHWeb.Saga.SSO.MapProxyRequesteeInfo.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList[indexProxyRequesteePref])));\r\n }\r\n //preference not found in the list of Preferences so we are setting null for proxyRequesteeInfo.\r\n else {\r\n yield put({\r\n type: types.SAVE_PROXY_REQUESTEE_INFO, proxyRequesteeInfo: null\r\n });\r\n }\r\n }\r\n\r\n let showGetCareToolTip = null;\r\n // For GetCareToolTip Preference \r\n if (isAllPreferenceSuccess) {\r\n const indexGetCareToolTipPref = userPreferenceList.findIndex(preference => preference.PreferenceName === msgs.HideGetCareToolTip);\r\n if (indexGetCareToolTipPref >= 0) {\r\n if (userPreferenceList[indexGetCareToolTipPref].PreferenceValue === \"true\") {\r\n showGetCareToolTip = false;\r\n yield put({\r\n type: types.SHOW_GET_CARE_TOOLTIP, showGetCareToolTip\r\n });\r\n }\r\n else {\r\n //showGetCareToolTip = true;\r\n yield put({\r\n type: types.SHOW_GET_CARE_TOOLTIP, showGetCareToolTip: false //Disabling Tooltip\r\n });\r\n }\r\n logAPI(\"MBHWeb.Saga.SSO.GetCareToolTip.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList[indexGetCareToolTipPref])));\r\n }\r\n //preference not found in the list of Preferences so we are showing GetCareToolTip.\r\n else {\r\n //showGetCareToolTip = true;\r\n yield put({\r\n type: types.SHOW_GET_CARE_TOOLTIP, showGetCareToolTip: false //Disabling Tooltip\r\n });\r\n }\r\n }\r\n\r\n // For Family Management Preference \r\n if (isAllPreferenceSuccess) {\r\n const indexFamilyManagementToolTipPref = userPreferenceList.findIndex(preference => preference.PreferenceName === msgs.ShowFamilyManagementToolTip);\r\n //debugger;\r\n //if preference not found in the list of Preferences we are showing FamilyManagementToolTip.\r\n const showFamMgmtTooltip = indexFamilyManagementToolTipPref >= 0 ? userPreferenceList[indexFamilyManagementToolTipPref].PreferenceValue === \"true\" : true;\r\n const hasRedirect = reDirectURL ? reDirectURL !== '/' : false;\r\n if (showFamMgmtTooltip && !hasRedirect) {\r\n yield put({\r\n type: types.SHOW_FAMILY_MANAGEMENT_TOOLTIP, showFamilyManagementToolTip: false, hasRedirect //Disabling tooltip\r\n });\r\n }\r\n else {\r\n yield put({\r\n type: types.SHOW_FAMILY_MANAGEMENT_TOOLTIP, showFamilyManagementToolTip: false, hasRedirect\r\n });\r\n }\r\n if (indexFamilyManagementToolTipPref >= 0) {\r\n logAPI(\"MBHWeb.Saga.SSO.FamilyManagementToolTip.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList[indexFamilyManagementToolTipPref])));\r\n }\r\n }\r\n\r\n // For DCJSelfEnrollToolTip Preference \r\n //if (enableDCJSelfEnrollForWellness && isEmployee && isAllPreferenceSuccess) {\r\n // const indexDCJSelfEnrollPref = userPreferenceList.findIndex(preference => preference.PreferenceName === \"HideDCJSelfEnrollToolTip\");\r\n // if (indexDCJSelfEnrollPref >= 0) {\r\n // if (userPreferenceList[indexDCJSelfEnrollPref].PreferenceValue === \"true\") {\r\n // yield put({\r\n // type: types.SHOW_DCJ_SELF_ENROLL_TOOLTIP, showDCJSelfEnrollToolTip: false\r\n // });\r\n // }\r\n // else {\r\n // yield put({\r\n // type: types.SHOW_DCJ_SELF_ENROLL_TOOLTIP, showDCJSelfEnrollToolTip: true\r\n // });\r\n // }\r\n // logAPI(\"MBHWeb.Saga.SSO.DCJSelfEnrollToolTip.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList[indexDCJSelfEnrollPref])));\r\n // }\r\n // //preference not found in the list of Preferences so we are showing DCJSelfEnrollToolTip.\r\n // else {\r\n // yield put({\r\n // type: types.SHOW_DCJ_SELF_ENROLL_TOOLTIP, showDCJSelfEnrollToolTip: true\r\n // });\r\n // }\r\n //}\r\n\r\n // For dismissable when complete flu vaccine tile\r\n // Update every year\r\n let hideFluVaccineTile = false;\r\n if (enableFluVaccine) {\r\n if (isAllPreferenceSuccess) {\r\n const indexHideFluVaccineTile = userPreferenceList.findIndex(preference => preference.PreferenceName === \"HideFluTile2021\");\r\n if (indexHideFluVaccineTile >= 0 && userPreferenceList[indexHideFluVaccineTile].PreferenceValue === \"true\") {\r\n hideFluVaccineTile = true;\r\n logAPI(\"MBHWeb.Saga.SSO.HideFluVaccineTile.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList[indexHideFluVaccineTile])));\r\n }\r\n yield put({\r\n type: types.HIDE_FLU_VACCINE_TILE, hideFluVaccineTile: hideFluVaccineTile\r\n });\r\n } else {\r\n yield put({\r\n type: types.HIDE_FLU_VACCINE_TILE, hideFluVaccineTile: hideFluVaccineTile\r\n });\r\n }\r\n }\r\n\r\n let hidePhase1toPhase4ToolTips = false;\r\n if (isAllPreferenceSuccess) {\r\n const indexForHidePhase1toPhase4ToolTips = userPreferenceList.findIndex(preference => preference.PreferenceName === \"HidePhase1toPhase4ToolTips\");\r\n if (indexForHidePhase1toPhase4ToolTips >= 0 && userPreferenceList[indexForHidePhase1toPhase4ToolTips].PreferenceValue === \"true\") {\r\n hidePhase1toPhase4ToolTips = true;\r\n logAPI(\"MBHWeb.Saga.SSO.HidePhase1toPhase4ToolTips.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList)));\r\n }\r\n }\r\n\r\n let showOnBoardingPhaseOneToolTipWeb = false; //When a new patient registers in after Refresh Phase 2 has been released the onboarding tool tips for Phase 1 &2 on Web and Mobile are hidden.\r\n if (isAllPreferenceSuccess) {\r\n const indexOnBoardingPhaseOneToolTipWeb = userPreferenceList.findIndex(preference => preference.PreferenceName === \"ShowOnBoardingPhaseOneToolTipWeb\");\r\n if (indexOnBoardingPhaseOneToolTipWeb < 0 || (indexOnBoardingPhaseOneToolTipWeb >= 0 && userPreferenceList[indexOnBoardingPhaseOneToolTipWeb].PreferenceValue === \"true\")) {\r\n if (hidePhase1toPhase4ToolTips) { //For New net users need to suppress Phase 1 tool tip.\r\n yield put({ type: types.DISMISS_ONBOARDING_PHASEONE_TOOLTIP });\r\n } else {\r\n showOnBoardingPhaseOneToolTipWeb = true;\r\n logAPI(\"MBHWeb.Saga.SSO.ShowOnBoardingPhaseOneToolTipWeb.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList)));\r\n }\r\n }\r\n yield put({\r\n type: types.SHOW_ONBOARDING_PHASEONE_TOOLTIP, showOnBoardingPhaseOneToolTipWeb: showOnBoardingPhaseOneToolTipWeb\r\n });\r\n } else {\r\n yield put({\r\n type: types.SHOW_ONBOARDING_PHASEONE_TOOLTIP, showOnBoardingPhaseOneToolTipWeb: showOnBoardingPhaseOneToolTipWeb\r\n });\r\n }\r\n\r\n let showOnBoardingPhaseTwoToolTipWeb = false;\r\n if (isAllPreferenceSuccess) {\r\n const indexOnBoardingPhaseTwoToolTipWeb = userPreferenceList.findIndex(preference => preference.PreferenceName === \"ShowOnBoardingPhaseTwoToolTipWeb\");\r\n if (indexOnBoardingPhaseTwoToolTipWeb < 0 || (indexOnBoardingPhaseTwoToolTipWeb >= 0 && userPreferenceList[indexOnBoardingPhaseTwoToolTipWeb].PreferenceValue === \"true\")) {\r\n if (hidePhase1toPhase4ToolTips) { //For New net users need to suppress Phase 2 tool tip.\r\n yield put({ type: types.DISMISS_ONBOARDING_PHASETWO_TOOLTIP });\r\n } else {\r\n showOnBoardingPhaseTwoToolTipWeb = true;\r\n logAPI(\"MBHWeb.Saga.SSO.ShowOnBoardingPhaseTwoToolTipWeb.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList)));\r\n }\r\n }\r\n yield put({\r\n type: types.SHOW_ONBOARDING_PHASETWO_TOOLTIP, showOnBoardingPhaseTwoToolTipWeb: showOnBoardingPhaseTwoToolTipWeb\r\n });\r\n } else {\r\n yield put({\r\n type: types.SHOW_ONBOARDING_PHASETWO_TOOLTIP, showOnBoardingPhaseTwoToolTipWeb: showOnBoardingPhaseTwoToolTipWeb\r\n });\r\n }\r\n\r\n let showOnBoardingPhaseThreeToolTipWeb = false;\r\n if (isAllPreferenceSuccess) {\r\n const indexOnBoardingPhaseThreeToolTipWeb = userPreferenceList.findIndex(preference => preference.PreferenceName === \"ShowOnBoardingPhaseThreeToolTipWeb\");\r\n if (indexOnBoardingPhaseThreeToolTipWeb < 0 || (indexOnBoardingPhaseThreeToolTipWeb >= 0 && userPreferenceList[indexOnBoardingPhaseThreeToolTipWeb].PreferenceValue === \"true\")) {\r\n if (hidePhase1toPhase4ToolTips) { //For New net users need to suppress Phase 3 tool tip.\r\n yield put({ type: types.DISMISS_ONBOARDING_PHASETHREE_TOOLTIP });\r\n } else {\r\n showOnBoardingPhaseThreeToolTipWeb = true;\r\n logAPI(\"MBHWeb.Saga.SSO.ShowOnBoardingPhaseThreeToolTipWeb.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList)));\r\n }\r\n }\r\n yield put({\r\n type: types.SHOW_ONBOARDING_PHASETHREE_TOOLTIP, showOnBoardingPhaseThreeToolTipWeb: showOnBoardingPhaseThreeToolTipWeb\r\n });\r\n } else {\r\n yield put({\r\n type: types.SHOW_ONBOARDING_PHASETHREE_TOOLTIP, showOnBoardingPhaseThreeToolTipWeb: showOnBoardingPhaseThreeToolTipWeb\r\n });\r\n }\r\n\r\n let showOnBoardingPhaseFourToolTipWeb = false;\r\n if (isAllPreferenceSuccess) {\r\n const indexOnBoardingPhaseFourToolTipWeb = userPreferenceList.findIndex(preference => preference.PreferenceName === \"ShowOnBoardingPhaseFourToolTipWeb\");\r\n if (indexOnBoardingPhaseFourToolTipWeb < 0 || (indexOnBoardingPhaseFourToolTipWeb >= 0 && userPreferenceList[indexOnBoardingPhaseFourToolTipWeb].PreferenceValue === \"true\")) {\r\n if (hidePhase1toPhase4ToolTips) { //For New net users need to suppress Phase 4 tool tip.\r\n yield put({ type: types.DISMISS_ONBOARDING_PHASEFOUR_TOOLTIP });\r\n } else {\r\n showOnBoardingPhaseFourToolTipWeb = true;\r\n logAPI(\"MBHWeb.Saga.SSO.ShowOnBoardingPhaseFourToolTipWeb.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList)));\r\n }\r\n }\r\n yield put({\r\n type: types.SHOW_ONBOARDING_PHASEFOUR_TOOLTIP, showOnBoardingPhaseFourToolTipWeb: showOnBoardingPhaseFourToolTipWeb\r\n });\r\n } else {\r\n yield put({\r\n type: types.SHOW_ONBOARDING_PHASEFOUR_TOOLTIP, showOnBoardingPhaseFourToolTipWeb: showOnBoardingPhaseFourToolTipWeb\r\n });\r\n }\r\n\r\n let showLinkMedicalRecordPhaseOneToolTip = false;\r\n if (!hasMyChart && isAllPreferenceSuccess) {\r\n const indexLinkMedicalRecordPhaseOneToolTip = userPreferenceList.findIndex(preference => preference.PreferenceName === \"ShowLinkMedicalRecord\");\r\n if (indexLinkMedicalRecordPhaseOneToolTip < 0 || (indexLinkMedicalRecordPhaseOneToolTip >= 0 && userPreferenceList[indexLinkMedicalRecordPhaseOneToolTip].PreferenceValue === \"true\")) {\r\n showLinkMedicalRecordPhaseOneToolTip = true;\r\n logAPI(\"MBHWeb.Saga.SSO.ShowLinkMedicalRecordPhaseOneToolTip.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList)));\r\n }\r\n yield put({\r\n type: types.SHOW_LINK_MEDICALRECORD_PHASEONE_TOOLTIP, showLinkMedicalRecordPhaseOneToolTip: showLinkMedicalRecordPhaseOneToolTip\r\n });\r\n } else {\r\n yield put({\r\n type: types.SHOW_LINK_MEDICALRECORD_PHASEONE_TOOLTIP, showLinkMedicalRecordPhaseOneToolTip: showLinkMedicalRecordPhaseOneToolTip\r\n });\r\n }\r\n\r\n let termsAccepted = true; //default set to 'true' to avoid any error/exceptions from the Terms API\r\n const terms = yield Tools.safeCall(portalAPI.getTermsAndConditions, userName, token); // in the event of Terms and Conditions failures, continue to allow the user into the site \r\n //debugger;\r\n if (!terms.err && terms.result && terms.result.isSuccessful) {\r\n termsAccepted = terms.result.isAccepted;\r\n yield put({ type: types.SET_TERMS_AND_CONDITIONS, terms: terms.result.textToDisplay, version: terms.result.versionId, HasAccepted: terms.result.isAccepted });\r\n let andyliticResponse = JSON.parse(JSON.stringify(terms));\r\n if (andyliticResponse && andyliticResponse.result && andyliticResponse.result.textToDisplay) {\r\n andyliticResponse.result.textToDisplay = '';\r\n }\r\n logAPI(\"MBHWeb.Saga.SSO.TermsAndConditions.Get\", start, null, andyliticResponse);\r\n }\r\n\r\n\r\n // Get user preferences\r\n //HideMyBSWHealth2Tutorial\r\n //const prefs = yield Tools.safeCall(account.getHideTutorial, token);\r\n var getHideIndex = userPreferenceList.findIndex(preference => preference.PreferenceName === \"HideMyBSWHealth2Tutorial\");\r\n if (getHideIndex > -1) { //!prefs.err && prefs.result && prefs.result.length > 0 && prefs.result[0].isSuccessful) {\r\n //debugger;\r\n yield put({ type: types.SET_HIDE_TUTORIAL, hideTutorialPrompt: true });\r\n // nahh... cookies would block the banner for other users on the same box\r\n //const expiration = new Date(new Date().getTime() + parseInt(InteractiveInAppTutorialExpirationInDays) * 1000 * 60 * 60 * 24);\r\n //Cookies.set(Interactive_InApp_Tutorial, true, { path: '/', 'expires': expiration });\r\n\r\n }\r\n else {\r\n //debugger;\r\n // Check Cookie\r\n const cookieCheck = Cookies.get(Interactive_InApp_Tutorial);\r\n if (cookieCheck && cookieCheck === \"true\") {\r\n yield Tools.safeCall(account.setHideTutorial, token);\r\n yield put({ type: types.SET_HIDE_TUTORIAL, hideTutorialPrompt: true });\r\n }\r\n else {\r\n yield put({ type: types.SET_HIDE_TUTORIAL, hideTutorialPrompt: false });\r\n }\r\n }\r\n\r\n // Trigger bff to do an async profile rediscovery and recompile\r\n //yield Tools.safeCall(refreshProfile, token);\r\n\r\n\r\n // Start timer to refresh profile\r\n if (session == null || !session.profileDataLoaded) {\r\n\r\n yield put({ type: types.PROFILE_DATA_LOADED });\r\n\r\n // Get most recent profile\r\n const memberData = yield Tools.safeCall(getMembershipData, token);\r\n\r\n logAPI(\"MBHWeb.Saga.SSO.GotProfile\", start, null, memberData);\r\n if (memberData == null || memberData && memberData.err) {\r\n yield put({ type: types.MEMBERSHIP_GET_FAILURE, error: memberData && memberData.err ? memberData.err : null });\r\n }\r\n else {\r\n yield put({ type: types.MEMBERSHIP_GET_SUCCESS, data: memberData.result });\r\n }\r\n\r\n yield spawn(startMembershipTimer, token);\r\n\r\n }\r\n\r\n\r\n // call getProxyInformation for eVisit info and load todo tile.\r\n if (hasMyChart) {\r\n const proxyInfoResult = yield Tools.safeCall(proxyInfo, userName, token);\r\n if (!proxyInfoResult.err && proxyInfoResult.result) {\r\n\r\n yield put({ type: types.INITIATE_TODOS }); //Load Todo tile.\r\n\r\n let eVisitResults = []\r\n if (proxyInfoResult.result.AccessList) {\r\n eVisitResults = proxyInfoResult.result.AccessList.map((res) => {\r\n let obj = Tools.extractEVisitInfo(res);\r\n obj.patientId = res.PatientIds.find(id => id.IDType === 'EXTERNAL');\r\n obj.externalId = obj.patientId ? obj.patientId.ID.trim() : null\r\n\r\n return obj\r\n })\r\n }\r\n\r\n yield put({ type: types.EVISIT_GET_SUCCESS, eVisit: eVisitResults })\r\n let andyliticResponse = JSON.parse(JSON.stringify(proxyInfoResult));\r\n if (andyliticResponse && andyliticResponse.result && andyliticResponse.result.textToDisplay) {\r\n andyliticResponse.result.textToDisplay = '';\r\n }\r\n logAPI(\"MBHWeb.Saga.SSO.LoadProxyList\", start, null, andyliticResponse);\r\n } else {\r\n yield put({ type: types.INITIATE_TODOS });\r\n yield put({ type: types.EVISIT_GET_FAILURE, eVisit: [] });\r\n logAPI(\"MBHWeb.Saga.SSO.LoadProxyList.Failure\", start, null);\r\n }\r\n } else {\r\n yield put({ type: types.EVISIT_GET_SUCCESS, eVisit: [] })\r\n }\r\n\r\n\r\n\r\n let domain = yield select((state) => state.domain);\r\n\r\n if (window && window.serverData.data.enablePatientPhoto && domain.pl && domain.pl.length > 0) {\r\n yield put({ type: types.PATIENT_PHOTO_START });\r\n }\r\n\r\n //console.log(\"CARECOACH TILE DATA REQUEST FROM SSO SAGA\");\r\n const currentUser = domain && domain.cu;\r\n if (currentUser && currentUser.ei) {\r\n yield call(careCompanion, currentUser.ei);\r\n }\r\n\r\n //yield put({ type: types.LOAD_BFF_DASHBOARD_START });\r\n\r\n if (!window?.serverData?.data?.enableV2MembershipLinking) {\r\n if (currentHealthPlan && currentHealthPlan.Auto) {\r\n const modalAutoHPExpireKey = currentHealthPlan.LoginProvider && currentHealthPlan.LoginProvider.toLowerCase().indexOf('auto-aal') > -1 ?\r\n AALinkModalExpire : \"_\" + currentHealthPlan.LoginProvider + \"_\" + msgs.LinkModalExpire;\r\n const cookieCheck = Cookies.get(response.userName + modalAutoHPExpireKey);\r\n if (!cookieCheck || cookieCheck === false) {\r\n logAPI(\"MBHWeb.Saga.SSO.HealthPlan.AutoLink.Show\", start, null);\r\n yield put({ type: types.SET_HIDE_AUTO_HP_LINKMODAL, showAutoHPLinkModal: true });\r\n } else {\r\n logAPI(\"MBHWeb.Saga.SSO.HealthPlan.AutoLink.Hide\", start, null);\r\n yield put({ type: types.SET_HIDE_AUTO_HP_LINKMODAL, showAutoHPLinkModal: false });\r\n }\r\n }\r\n }\r\n\r\n if (domain.lt === null || domain.lt === 0) {\r\n yield put({ type: types.GEOLOCATION });\r\n }\r\n\r\n const history = yield select((state) => state.session.history);\r\n //const reDirectURL = window.redirectURL;\r\n\r\n var isMobile = false;\r\n try {\r\n isMobile = domain.mq;\r\n\r\n }\r\n catch (EE) {\r\n\r\n }\r\n\r\n //Determine if user has completed Onboarding \r\n let userHasInsuranceOnFile = true; //keep this default to 'true' to avoid unnecessary showing of Insurance screen, incase of GetCoverage API failure\r\n let hasPendingSteps = false;\r\n let hasCompletedAnyStep = true; //assume user has completed atleast one step of the onboarding flow\r\n let showInsuranceForm = false;\r\n let showFamilyMembersScreen = false;\r\n let showNotificationsScreen = false;\r\n let showScheduleCareTooltip = false;\r\n let userAge = domain.pu?.ay || domain.age;\r\n let isUserMinor = userAge && userAge < 18;\r\n let isProxyUser = domain.ip;\r\n let hasRedirect = reDirectURL ? reDirectURL !== '/' : false;\r\n let isMyChartStatusActive = false;\r\n logAPI(\"MBHWeb.Saga.SSO.Onboarding.IsUserMinor\", start, null, isUserMinor);\r\n logAPI(\"MBHWeb.Saga.SSO.Onboarding.IsProxyUser\", start, null, isProxyUser);\r\n logAPI(\"MBHWeb.Saga.SSO.Onboarding.HasRedirect\", start, null, hasRedirect);\r\n\r\n //Get userInsuranceInfo from API\r\n const patientId = currentUser ? currentUser.epi : null;\r\n const userInsuranceInfo = patientId && (yield Tools.safeCall(account.getUserInsuranceInfo, token, patientId));\r\n logAPI(\"MBHWeb.Saga.SSO.GetUserInsuranceInfo\", start, null, { patientId, userInsuranceInfo });\r\n\r\n if (userInsuranceInfo && !userInsuranceInfo.err && userInsuranceInfo.result) {\r\n userHasInsuranceOnFile = userInsuranceInfo.result.Coverage && userInsuranceInfo.result.Coverage.length > 0 && userInsuranceInfo.result.Coverage.some(coverage => coverage.Status.toUpperCase() === 'ACTIVE');\r\n }\r\n\r\n\r\n //get current active user patient profile from membership profile\r\n const activePatientProfile = yield select((state) => state.memberships.activeProfile?.patient);\r\n const isUserNonPatientProxy = activePatientProfile && (activePatientProfile.AMRN === null || !activePatientProfile.AMRN); //if AMRN is null or undefined, user is a non-patient proxy\r\n\r\n //Validate Mychart Status before loading capture insurance.\r\n if (hasMyChart && !isUserMinor && !userHasInsuranceOnFile && !isUserNonPatientProxy && activePatientProfile && isAllPreferenceSuccess && userPreferenceList) {\r\n const userHasTodoCaptureInsuranceIndex = userPreferenceList.findIndex(preference => preference.PreferenceName.toUpperCase() === \"SHOWCAPTUREINSURANCEFORM\");\r\n const userHasTodoCaptureInsurance = userHasTodoCaptureInsuranceIndex > -1 ? userPreferenceList[userHasTodoCaptureInsuranceIndex].PreferenceValue === \"true\" : false;\r\n const mychartIdRsp = activePatientProfile.PatientIds.filter(id => id.IDType === 'MYCHARTLOGIN');\r\n const myChartID = mychartIdRsp && mychartIdRsp.length ? mychartIdRsp[0].ID.trim() : '';\r\n if (myChartID && token && userHasTodoCaptureInsurance) {\r\n const myChartStatusResponse = yield Tools.safeCall(checkMyChartStatus, myChartID, 'MYCHARTLOGIN', token);\r\n isMyChartStatusActive = myChartStatusResponse && myChartStatusResponse.result && myChartStatusResponse.result.result && myChartStatusResponse.result.result.MyChartStatusText\r\n && myChartStatusResponse.result.result.MyChartStatusText.toLowerCase() === 'activated' ? true : false;\r\n }\r\n }\r\n\r\n if (isAllPreferenceSuccess && !hasRedirect && !isProxyUser) {\r\n try {\r\n\r\n const onBoardingSteps = ['SHOWCAPTUREINSURANCEFORM', 'SHOWFAMILYMEMBERSSCREEN', 'SHOWNOTIFICATIONSSCREEN', 'SHOWSCHEDULECARETOOLTIP'];\r\n\r\n const foundAtleastOneKey = userPreferenceList.some(prefObj => onBoardingSteps.includes(prefObj.PreferenceName.toUpperCase()));\r\n let pendingSteps = userPreferenceList.filter(prefObj => onBoardingSteps.includes(prefObj.PreferenceName.toUpperCase()) && prefObj.PreferenceValue.toUpperCase() === 'TRUE');\r\n pendingSteps = pendingSteps && pendingSteps.map(prefObj => prefObj.PreferenceName.toUpperCase());\r\n\r\n let completedSteps = userPreferenceList.filter(prefObj => (onBoardingSteps.includes(prefObj.PreferenceName.toUpperCase()) && prefObj.PreferenceValue.toUpperCase() === 'FALSE')\r\n || (prefObj.PreferenceName.toUpperCase() === \"HASSEENEMAILOPTIN\" && prefObj.PreferenceValue.toUpperCase() === 'TRUE'));\r\n completedSteps = completedSteps && completedSteps.map(prefObj => prefObj.PreferenceName.toUpperCase());\r\n logAPI(\"MBHWeb.Saga.SSO.Onboarding.CompletedSteps\", start, null, completedSteps);\r\n logAPI(\"MBHWeb.Saga.SSO.Onboarding.PendingSteps\", start, null, pendingSteps);\r\n\r\n //some user accounts were created even before the 'CaptureInsuranceForm' preference key was created.\r\n //For such users, consider them to have completed atleast one step of the onboarding flow, if this Pref Key is not available\r\n let userWasCreatedBeforeInsurancePref = userPreferenceList.findIndex(preference => preference.PreferenceName.toUpperCase() === \"SHOWCAPTUREINSURANCEFORM\") < 0;\r\n\r\n hasPendingSteps = foundAtleastOneKey && (pendingSteps && pendingSteps.length > 0);\r\n hasCompletedAnyStep = (completedSteps && completedSteps.length > 0) || (userWasCreatedBeforeInsurancePref);\r\n\r\n if (hasPendingSteps) {\r\n showInsuranceForm = pendingSteps.includes('SHOWCAPTUREINSURANCEFORM') && hasMyChart && !isUserMinor && !userHasInsuranceOnFile && !isUserNonPatientProxy;\r\n showFamilyMembersScreen = pendingSteps.includes('SHOWFAMILYMEMBERSSCREEN') && hasMyChart && !isUserMinor;\r\n showNotificationsScreen = pendingSteps.includes('SHOWNOTIFICATIONSSCREEN');\r\n showScheduleCareTooltip = pendingSteps.includes('SHOWSCHEDULECARETOOLTIP') ? false : false;//Disabling Tooltip\r\n let showOnboardingModal = false;\r\n\r\n //show the onboarding modal only if the Terms call is successful and the user has accepted the terms\r\n //do not show the onboarding modal if there is only one pending step and that is the 'ScheduleCareTooltip' step\r\n if (!terms.err && terms.result && terms.result.isSuccessful)\r\n showOnboardingModal = terms.result.isAccepted && !(pendingSteps.length === 1 && showScheduleCareTooltip) ? true : false;\r\n\r\n\r\n yield put({ type: types.SHOW_ONBOARDING_MODAL, showOnboardingModal: showOnboardingModal });\r\n yield put({ type: types.SHOW_INSURANCE_FORM, showInsuranceForm: showInsuranceForm });\r\n yield put({ type: types.SHOW_FAMILYMEMBERS_SCREEN, showFamilyMembersScreen: showFamilyMembersScreen });\r\n yield put({ type: types.SHOW_NOTIFICATIONS_SCREEN, showNotificationsScreen: showNotificationsScreen });\r\n yield put({ type: types.SHOW_SCHEDULE_CARE_TOOLTIP, showScheduleCareTooltip: showScheduleCareTooltip });\r\n logAPI(\"MBHWeb.Saga.SSO.Onboarding.ShowSteps\", start, null, { showInsuranceForm, showFamilyMembersScreen, showNotificationsScreen, showScheduleCareTooltip });\r\n }\r\n yield put({ type: types.HAS_COMPLETED_ONBOARDING, hasCompletedOnboarding: !hasPendingSteps });\r\n }\r\n catch (e) {\r\n logAPI(\"MBHWeb.Saga.SSO.Onboarding.Exception\", start, null, e);\r\n\r\n }\r\n }\r\n\r\n // We separate this call out because this is what handles the ui update after logging in.\r\n // we need token and membership data before we switch the domain.li flag to true\r\n // this also turns off the login spinner\r\n\r\n // moved this to after the new onboarding logic as it was causing a delay in between setting the user as logged in and the redirect to '/'\r\n domain = yield select((state) => state.domain);\r\n var localStorage = yield select((state) => state.localStorage);\r\n //debugger;\r\n if (domain.li || true) // we actually have the ability to end up hear, while being logged out from somewhere else... this was causing a re-login without performing this check\r\n {\r\n yield put({\r\n type: types.USER_AUTHENTICATE_ISLOGGEDIN,\r\n userData: response,\r\n });\r\n }\r\n else {\r\n //return;\r\n }\r\n\r\n\r\n // For Thrive Preference \r\n let showThriveTooltip = false;\r\n if (isAllPreferenceSuccess) {\r\n const indexThrivePref = userPreferenceList.findIndex(preference => preference.PreferenceName === msgs.ShowThriveTooltip);\r\n if (indexThrivePref >= 0) {\r\n if (userPreferenceList[indexThrivePref].PreferenceValue === \"true\") {\r\n showThriveTooltip = true;\r\n yield put({\r\n type: types.SHOW_THRIVE_TOOLTIP, showThriveTooltip\r\n });\r\n }\r\n else {\r\n showThriveTooltip = false;\r\n yield put({\r\n type: types.SHOW_THRIVE_TOOLTIP, showThriveTooltip\r\n });\r\n }\r\n logAPI(\"MBHWeb.Saga.SSO.showThriveTooltip.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList[indexThrivePref])));\r\n }\r\n //preference not found in the list of Preferences so we are showing ThriveTooltip.\r\n else {\r\n showThriveTooltip = true;\r\n yield put({\r\n type: types.SHOW_THRIVE_TOOLTIP, showThriveTooltip\r\n });\r\n }\r\n }\r\n\r\n // We can also route from here to terms and conditions, the marketing email opt in page, or capture insurance page\r\n if (typeof window !== 'undefined') {\r\n if (!terms.err && terms.result && terms.result.isSuccessful) {\r\n if (!termsAccepted && !isMobile) { /*** Begin Terms Not Accepted **/\r\n\r\n //If the user has not yet accepted the Terms, and not completed atleast one step of onboarding flow, consider them as a brand new user\r\n //And, set all Onboarding V2 preferences to be true, so that the entire V2 Onboarding screens/tooltips are shown\r\n //The sequence for the V2 Onboarding flow is --> 1. Accept terms, 2. Capture Insurance, 3. Family Members, 4. Notifications\r\n if (!useRegistrationForUserPrefs) {\r\n if (isAllPreferenceSuccess && !hasCompletedAnyStep) {\r\n if (!hasRedirect && !isProxyUser) {\r\n //new user is considered to not have completed any onboarding steps\r\n showInsuranceForm = hasMyChart && !isUserMinor && !userHasInsuranceOnFile && !isUserNonPatientProxy;\r\n showFamilyMembersScreen = hasMyChart && !isUserMinor;\r\n showNotificationsScreen = true;\r\n showScheduleCareTooltip = false; //Disabling tooltip\r\n\r\n yield put({ type: types.SHOW_INSURANCE_FORM, showInsuranceForm: showInsuranceForm });\r\n yield put({ type: types.SHOW_FAMILYMEMBERS_SCREEN, showFamilyMembersScreen: showFamilyMembersScreen });\r\n yield put({ type: types.SHOW_NOTIFICATIONS_SCREEN, showNotificationsScreen: showNotificationsScreen });\r\n yield put({ type: types.SHOW_SCHEDULE_CARE_TOOLTIP, showScheduleCareTooltip: showScheduleCareTooltip });\r\n logAPI(\"MBHWeb.Saga.SSO.Onboarding.NewUser.ShowSteps\", start, null, { showInsuranceForm, showFamilyMembersScreen, showNotificationsScreen, showScheduleCareTooltip });\r\n console.log(\"MBHWeb.Saga.SSO.Onboarding.NewUser.ShowSteps \", { showInsuranceForm, showFamilyMembersScreen, showNotificationsScreen, showScheduleCareTooltip });\r\n\r\n //set preference value for the above preference keys to be 'true' in the database \r\n yield put({ type: types.INITIALIZE_ONBOARDING_PREFERENCES });\r\n\r\n }\r\n else {\r\n\r\n /****** Review Comment: If the user !hasCompletedAnyStep but does hasRedirect or isProxyUser, \r\n would still want to update the preference table but not show the onboarding screens during this login session. ****/\r\n\r\n //set preference value for the above preference keys to be 'true' in the database \r\n yield put({ type: types.INITIALIZE_ONBOARDING_PREFERENCES });\r\n\r\n }\r\n }\r\n }\r\n\r\n\r\n if (window.location.pathname !== \"/login\") {\r\n // Write this as the new redirect URL (in case we refreshed after deleting login cookie)\r\n\r\n yield put({ type: types.SET_REDIRECT_URL, URL: window.location.pathname });\r\n }\r\n if (history) {\r\n history.push({\r\n pathname: '/onboarding/acceptterms'\r\n })\r\n };\r\n\r\n if (hasPendingSteps && !hasRedirect && showInsuranceForm && isMyChartStatusActive) {\r\n yield put({ type: types.SET_REDIRECT_URL, URL: \"/onboarding/captureinsurance\" });\r\n } else if (hasPendingSteps && !hasRedirect && showFamilyMembersScreen) {\r\n yield put({ type: types.SET_REDIRECT_URL, URL: \"/onboarding/familymembers\" });\r\n } else if (hasPendingSteps && !hasRedirect && showNotificationsScreen) {\r\n yield put({ type: types.SET_REDIRECT_URL, URL: \"/onboarding/managenotifications\" });\r\n }\r\n\r\n } /**** END Terms Not Accepted ***/\r\n\r\n else if (hasPendingSteps && !hasRedirect && showInsuranceForm && isMyChartStatusActive) {\r\n if (history) { history.push({ pathname: \"/onboarding/captureinsurance\" }) };\r\n } else if (hasPendingSteps && !hasRedirect && showFamilyMembersScreen) {\r\n if (history) { history.push({ pathname: \"/onboarding/familymembers\" }) };\r\n } else if (hasPendingSteps && !hasRedirect && showNotificationsScreen) {\r\n if (history) { history.push({ pathname: \"/onboarding/managenotifications\" }) };\r\n }\r\n else if (reDirectURL) {\r\n yield handleRedirect(reDirectURL);\r\n }\r\n else if (window.location.pathname === \"/login\") {\r\n if (history) {\r\n //debugger; \r\n history.push(\"/\");\r\n };\r\n }\r\n }\r\n else if (reDirectURL) {\r\n yield handleRedirect(reDirectURL);\r\n }\r\n else if (window.location.pathname === \"/login\") {\r\n if (history) {\r\n //debugger;\r\n history.push(\"/\");\r\n };\r\n }\r\n }\r\n\r\n if (response.callback) {\r\n response.callback();\r\n }\r\n\r\n // load translation list\r\n // Change sprefix value to take from GETHealthPlans, if we have mutiple health plans linked.\r\n\r\n //var tblPrefix = window.serverData.data.loginPrefixTable.split(\"|\");\r\n // var tblLogins = domain.l.split(\",\");\r\n var sPrefix = currentHealthPlan && currentHealthPlan.APIPrefix ? currentHealthPlan.APIPrefix : null;\r\n\r\n //We found healthplan but didn't have prefix.\r\n if (currentHealthPlan && !sPrefix) {\r\n logAPI(\"MBHWeb.Saga.SSO.GetHealthPlan.PrefixNotFound\", start, null);\r\n }\r\n\r\n //tblPrefix.forEach(sPrefixPart => {\r\n // tblLogins.forEach(sLogin => {\r\n // if (sPrefixPart.toLowerCase().indexOf(sLogin.toLowerCase() + \":\") > -1) {\r\n // sPrefix = sPrefixPart.substr(sPrefixPart.indexOf(\":\") + 1);\r\n // }\r\n // })\r\n //});\r\n\r\n if (window.location.href.toLocaleLowerCase().includes(\"localhost\")) {\r\n if (sPrefix == \"HR\") {\r\n yield put({ type: types.SET_HP_PREFIX, prefix: sPrefix });\r\n window.serverData.data.hpServicesSpecificUrl = Tools.buildUrl(window.serverData.data.hpServicesUrl, \"\");\r\n }\r\n if (sPrefix === \"WTPA\") {\r\n yield put({ type: types.SET_HP_PREFIX, prefix: sPrefix });\r\n window.serverData.data.hpServicesSpecificUrl = Tools.buildUrl(window.serverData.data.hpGatewayUrl, \"\");\r\n }\r\n if (sPrefix === \"AMI\") {\r\n yield put({ type: types.SET_HP_PREFIX, prefix: sPrefix });\r\n var url = window.serverData.data.hpGatewayUrl.toLowerCase().replace(\"wtpa\", sPrefix.toLowerCase());\r\n window.serverData.data.hpServicesSpecificUrl = Tools.buildUrl(url, \"\");\r\n }\r\n }\r\n else if (sPrefix) {\r\n yield put({ type: types.SET_HP_PREFIX, prefix: sPrefix });\r\n let url = window.serverData.data.hpGatewayUrl.toLowerCase().replace(\"wtpa\", sPrefix.toLowerCase());\r\n window.serverData.data.hpServicesSpecificUrl = Tools.buildUrl(url, \"\");\r\n }\r\n\r\n\r\n\r\n try {\r\n if (sPrefix && sPrefix === \"AMI\") {\r\n const hpPayerId = domain.hi;\r\n const isUserPayer = yield getUserPayerData(token, hpPayerId);\r\n // Pass this data object off to a reducer here\r\n yield put({ type: types.HP_AMI_ISUSERPAYER_SUCCESS, isUserPayer: isUserPayer });\r\n }\r\n }\r\n catch (e) {\r\n logAPI(\"MBHWeb.Saga.SSO.getUserPayerData.Failure\", start, null);\r\n }\r\n try {\r\n if (sPrefix) {\r\n const userData = yield getFCHPUserData(token, sPrefix);\r\n // Pass this data object off to a reducer here\r\n if (userData) {\r\n yield put({ type: types.HP_USERDATA_SUCCESS, hpUserIdentity: userData });\r\n }\r\n }\r\n }\r\n catch (e) {\r\n logAPI(\"MBHWeb.Saga.SSO.GetFCHPUserData.Failure\", start, null);\r\n }\r\n\r\n // No waiting on these calls... just fire them off and let the results land where they will\r\n yield put({ type: types.THRIVE_GET_CARD, token: token });\r\n yield put({ type: types.GET_FAVORITE_PROVIDERS_START });\r\n\r\n //Add get user tile to load when linkage success. \r\n yield put({\r\n type: types.LOAD_HEALTHSOURCEDASHBOARD_START\r\n });\r\n yield fork(loadNotices, hasMyChart, hasHealthPlan);\r\n const enableNewHealthPlan = window && window.serverData.data.enableNewHealthPlan;\r\n if (enableNewHealthPlan) {\r\n //Call health plan dashboard, if we user has health plan and not have auto role\r\n if (currentHealthPlan && currentHealthPlan.LoginProvider && !currentHealthPlan.Auto) {\r\n yield put({ type: types.LOAD_HEALTHPLAN_DATA_START });\r\n }\r\n }\r\n else {\r\n if (domain.aal) {\r\n yield put({ type: types.LOAD_HEALTHPLAN_DATA_START });\r\n }\r\n }\r\n\r\n //yield put({ type: types.DIRECT_SCHEDULING_PROVIDER_LIST, searchModel: { loginId: domain.un, proxyPatientId: domain.cu ? domain.cu.ei : null }, token: domain.t });\r\n // yield fork(loadEvisit, response); // <--- commented because we are now getting eVisit from the proxyInfo call which is called via loadProxyList (see below)\r\n\r\n //Clearing current user and primary user in header reducer to reflect updated value when do linking and unlinking process for mychart.\r\n //yield put({\r\n // type: types.RESET_USER_VALUE\r\n //});\r\n yield all([\r\n call(loadThrive, response), // we have to wait for Thrive info for proper rednering of the menu system\r\n showAccessAndProxiesList && call(loadCurrentManagers, response, hasMyChart) //waiting to load current managers of current user.\r\n ]);\r\n\r\n domain = yield select((state) => state.domain);\r\n const dashboardState = yield select((state) => state.dashboard);\r\n const bundle = typeof window !== 'undefined' && window.serverData.data.bundle ? window.serverData.data.bundle.toLowerCase() : '';\r\n\r\n let isSeeAllSelected = false\r\n\r\n if (dashboardState && dashboardState.isShowAllUsers === null && bundle === 'mybswhealth') {\r\n if (domain && domain.pl && domain.pu && domain.pu.dn && domain.cu && domain.cu.dn && domain.pu.dn.toLowerCase() === domain.cu.dn.toLowerCase()) {\r\n if (domain.pl.length > 1) { //check length greater than 1, due to primary user added in pl array.\r\n yield put({ type: types.LOAD_DASHBOARD_SEE_ALL_VIEW });\r\n isSeeAllSelected = true;\r\n } else {\r\n yield put({ type: types.RESET_DASHBOARD_SEE_ALL_VIEW });\r\n }\r\n } else {\r\n yield put({ type: types.RESET_DASHBOARD_SEE_ALL_VIEW });\r\n }\r\n } else {\r\n isSeeAllSelected = bundle === 'mybswhealth' && dashboardState ? dashboardState.isShowAllUsers : false;\r\n }\r\n\r\n yield put({ type: types.LOAD_BFF_DASHBOARD_START, isSeeAllSelected: isSeeAllSelected });\r\n\r\n //Moving this down becuase its requires proxy patient id.\r\n if (domain && domain.cu && domain.cu.ei) {\r\n yield put({ type: types.DIRECT_SCHEDULING_PROVIDER_LIST, searchModel: { loginId: domain.un, proxyPatientId: domain.cu.ei }, token: domain.t });\r\n logAPI(\"MBHWeb.Saga.SSO.OnUserAuthenticateSuccess.Schedule.GetProviderList.Start\", start, null);\r\n } else {\r\n logAPI(\"MBHWeb.Saga.SSO.OnUserAuthenticateSuccess.Schedule.GetProviderList.NotLoaded\", start, null);\r\n }\r\n\r\n logAPI(\"MBHWeb.Saga.SSO.OnUserAuthenticateSuccess\", start, null);\r\n }\r\n else {\r\n console.error(\"MBHWeb.Saga.SSO.OnUserAuthenticateSuccess.Failure\", response);\r\n logAPI(\"MBHWeb.Saga.SSO.OnUserAuthenticateSuccess.Failure\", start, null);\r\n yield put({ type: types.USER_AUTHENTICATE_FAILURE, userData: response, errorCode: response && response.error_code ? response.error_code : null, userErrorMessage: response && response.user_message ? response.user_message : null, responseError: response.error_description ? response.error_description : response.error && response.error === \"invalid_grant\" ? msgs.LoginInvalidGrantMessage : response.error, isWaiting: false });\r\n }\r\n }\r\n catch (err) {\r\n //debugger;\r\n console.error(\"MBHWeb.Saga.SSO.OnUserAuthenticateSuccess.FailureCatch\", err);\r\n yield put({ type: types.AJAX_CALL_ERROR, error: err, isWaiting: false });\r\n logAPI(\"MBHWeb.Saga.SSO.OnUserAuthenticateSuccess.Failure\", start, null, err);\r\n }\r\n}\r\n\r\n\r\nexport function* checkMyChartStatus(myChartId, myChartIdType, token) {\r\n const start = new Date();\r\n try {\r\n const myChartStatusRsp = yield Tools.safeCall(getMyChartStatus, myChartId, myChartIdType, token);\r\n logAPI(\"MBHWeb.Saga.SSO.CheckMyChartStatus.Success\", start, null, myChartStatusRsp);\r\n return myChartStatusRsp;\r\n } catch (err) {\r\n logAPI(\"MBHWeb.Saga.SSO.CheckMyChartStatus.Failure\", start, null, err);\r\n }\r\n return null;\r\n}\r\n\r\n\r\nexport function* refreshFamilyManagementTooltip() {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n const session = yield select((state) => state.session);\r\n\r\n var token = domain.t;\r\n // check for all preferences of the user\r\n const allPreferences = yield Tools.safeCall(account.getAllUserPreferences2, token);\r\n //debugger;\r\n const isAllPreferenceSuccess = allPreferences && !allPreferences.err && allPreferences.result;\r\n const userPreferenceList = isAllPreferenceSuccess && allPreferences.result.preferenceList ? allPreferences.result.preferenceList : [];\r\n if (isAllPreferenceSuccess) {\r\n logAPI(\"MBHWeb.Saga.SSO.GetAllUserPreferences.Get\", start, null, JSON.parse(JSON.stringify(allPreferences.result)));\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.SSO.GetAllUserPreferences.Get.Failure\", start, null, allPreferences);\r\n }\r\n\r\n // For Family Management Preference \r\n if (isAllPreferenceSuccess) {\r\n const indexFamilyManagementToolTipPref = userPreferenceList.findIndex(preference => preference.PreferenceName === msgs.ShowFamilyManagementToolTip);\r\n const showFamMgmtTooltip = indexFamilyManagementToolTipPref >= 0 ? userPreferenceList[indexFamilyManagementToolTipPref].PreferenceValue === \"true\" : true;\r\n if (showFamMgmtTooltip && !session.hasRedirect) {\r\n yield put({\r\n type: types.SHOW_FAMILY_MANAGEMENT_TOOLTIP, showFamilyManagementToolTip: false //Disabling tooltip\r\n });\r\n }\r\n else {\r\n yield put({\r\n type: types.SHOW_FAMILY_MANAGEMENT_TOOLTIP, showFamilyManagementToolTip: false\r\n });\r\n }\r\n\r\n if (indexFamilyManagementToolTipPref >= 0) {\r\n logAPI(\"MBHWeb.Saga.SSO.FamilyManagementToolTip.Preference.Get\", start, null, JSON.parse(JSON.stringify(userPreferenceList[indexFamilyManagementToolTipPref])));\r\n }\r\n }\r\n }\r\n catch (err) {\r\n logAPI(\"MBHWeb.Saga.SSO.FamilyManagementToolTip.Preference.Get.Failure\", start, null, err);\r\n }\r\n}\r\n\r\nexport function* verifyLogin(payload) {\r\n const start = new Date();\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n const ssoResponse = yield call(isLoggedInPost2, domain.t);\r\n\r\n const loggedin = ssoResponse.IsLoggedIn;\r\n if (loggedin === false) {\r\n console.log(\"LOGOUT\");\r\n yield put({ type: types.LOGOUT, userDetails: {}, DontClearRedirectURL: payload.DontClearRedirectURL, fromWindowListener: true });\r\n logAPI(\"MBHWeb.Saga.SSO.VerifyLogin\", start, null);\r\n }\r\n else {\r\n //debugger;\r\n yield onUserAuthenticateSuccess({ ...ssoResponse, callback: payload.callback });\r\n if (payload.forceRefresh) {\r\n\r\n yield put({ type: types.REFRESH_TOKEN }); // this allows us to refresh any changes that may have been to the account by an external site\r\n }\r\n }\r\n yield put({ type: types.VERIFY_LOGIN_COMPLETED });\r\n if (payload.callback) {\r\n try {\r\n payload.callback();\r\n }\r\n catch (e) {\r\n }\r\n }\r\n }\r\n catch (error) {\r\n console.error(\"MBHWeb.Saga.SSO.VerifyLogin.Failure\", error);\r\n logAPI(\"MBHWeb.Saga.SSO.VerifyLogin.Failure\", start, null, JSON.stringify(error));\r\n yield put({ type: types.VERIFY_LOGIN_COMPLETED });\r\n yield put({ type: types.AJAX_CALL_ERROR, error: error, isWaiting: false });\r\n }\r\n}\r\n\r\nexport function* logoutRedirect(data) {\r\n const start = new Date();\r\n try {\r\n //debugger;\r\n console.info(`ssoSaga logoutRedirect`);\r\n // clear proxy on logout\r\n const sDomain = getDomain();\r\n Cookies.set('BSWPROXY', \"\", { path: '/', domain: sDomain });\r\n Cookies.set(\"AuthToken\" + window.serverData.data.environment, \"\", { path: '/', domain: sDomain });\r\n\r\n //reset the value for 'hasSeenScheduleCareTooltip to false\r\n yield put({ type: types.HAS_SEEN_SCHEDULE_CARE_TOOLTIP, hasSeenScheduleCareTooltip: false });\r\n yield put({ type: types.CLEAR_MAMMOGRAPHY_FLOW_SELECTED_OPTION });\r\n const history = yield select((state) => state.session.history);\r\n try {\r\n const domain = yield select((state) => state.domain);\r\n Cookies.expire('location_' + domain.un, { domain: Tools.getDomain(location.href) });\r\n Tools.clearItemFromSessionStorage('insurance_' + domain.un);\r\n //const covidScreeningModalKey = window && window.serverData.data.showCOVID19ModalPerUser ? domain.cu && domain.cu.dn && domain.cu.eid ? domain.un + '_' + domain.cu.dn + '_' + domain.cu.eid : domain.un : domain.un; \r\n Tools.clearItemFromSessionStorageWithStrContains(msgs.CovidScreeningModalSessionKeyInitial + domain.un); // using domain.un and not covidScreeningModalKey as we want to clean key for primary as well as its proxies.\r\n Tools.clearItemFromSessionStorageWithStrContains(msgs.MammogramCovid19ModalSessionKeyInitial);\r\n if (Tools.getItemFromSessionStorage('captureInsuranceForm')) {\r\n Tools.clearItemFromSessionStorage('captureInsuranceForm');\r\n }\r\n\r\n //delete localStorage items related to healthplan search criteria persisting\r\n Object.keys(localStorage).forEach((key) => {\r\n try {\r\n let item = JSON.parse(localStorage.getItem(key));\r\n if (item.expire === \"ONLOGOUT\") {\r\n localStorage.removeItem(key);\r\n }\r\n }\r\n catch (e) { }\r\n });\r\n }\r\n catch (e) { console.log(e); }\r\n\r\n yield put({ type: types.INITIAL_STATE_DASHBOARD_SEE_ALL_VIEW });\r\n\r\n yield put({ type: types.LOGOUT_COMPLETED, logoutMessage: data.logoutMessage }); // this forces the UI to update\r\n\r\n // Notify other windows\r\n try {\r\n if (data.fromWindowListener == null || !data.fromWindowListener) {\r\n //debugger;\r\n localStorage.setItem(\"logoutFrom\", window.serverData.data.appInstanceID);\r\n //window.postMessage({ logout: true, appInstanceID: window.serverData.data.appInstanceID });\r\n }\r\n }\r\n catch (e) {\r\n\r\n }\r\n\r\n\r\n if (window.location.pathname !== \"/login\" && !data.DontClearRedirectURL && window.location.pathname !== \"/reset\") {\r\n try {\r\n //alert(\"Manually switching to Login page\");\r\n if (history) { history.push(\"/login\") };\r\n }\r\n catch (ex) {\r\n console.error(ex);\r\n logAPI(\"MBHWeb.Saga.SSO.LogoutRedirect.Failure\", start, null, JSON.stringify(ex));\r\n }\r\n\r\n }\r\n\r\n yield prayerFeatureSaga.cleanupUserSession();\r\n\r\n logAPI(\"MBHWeb.Saga.SSO.LogoutRedirect\", start, null);\r\n yield put({ type: types.USER_LOGGED_OUT, DontClearRedirectURL: data.DontClearRedirectURL, logoutMessage: data.logoutMessage });\r\n\r\n\r\n }\r\n catch (err) {\r\n console.error(err);\r\n logAPI(\"MBHWeb.Saga.SSO.LogoutRedirect.Failure\", start, null, JSON.stringify(err));\r\n }\r\n}\r\n\r\nfunction* refreshProxyList(data) {\r\n const userDetails = yield select((state) => state.sso.userDetails);\r\n const domain = yield select((state) => state.domain);\r\n // check if user is even able to have proxies. if so, refresh profile. if not, send proxy list loaded. \r\n if (userDetails && domain.hm) {\r\n yield refreshProfileData(data); // we short circuit here, since we don't need the call anymore\r\n } else {\r\n yield put({ type: types.NO_USER_PROXY });\r\n yield put({ type: types.PROXY_LIST_LOADED, proxyList: [] });\r\n if (data && data.callback) {\r\n data.callback([], false);\r\n }\r\n }\r\n}\r\n\r\n\r\nfunction* loadThrive(userDetails) {\r\n const start = new Date();\r\n try {\r\n const thrive = yield call(getThrive, userDetails.access_token);\r\n yield put({ type: types.THRIVE, thrive });\r\n logAPI(\"MBHWeb.Saga.SSO.LoadThrive\", start, null);\r\n }\r\n catch (getThriveError) {\r\n //console.error(getThriveError);\r\n logAPI(\"MBHWeb.Saga.SSO.LoadThrive.Failure\", start, null, JSON.stringify(getThriveError));\r\n }\r\n}\r\n\r\nfunction* loadEvisit(userDetails) {\r\n try {\r\n const eVisit = yield call(getEvisitEligibility, userDetails.userName, userDetails.access_token);\r\n yield put({ type: types.EVISIT, eVisit });\r\n //logToAndylitics(dDate, dDate, 'MBHWeb.Evisits.Start', null, null, null, '/SSOEvisit');\r\n logToAndylitics('MBHWeb.Evisits.Start', new Date(), '/SSOEvisit');\r\n }\r\n catch (getEvisitEligibilityError) {\r\n //console.error(getEvisitEligibilityError);\r\n logToAndylitics('MBHWeb.Evisits.Start.Failure', new Date(), '/SSOEvisit');\r\n }\r\n}\r\n\r\nfunction* zipnosisEvisitUrl(data) {\r\n const start = new Date();\r\n const { token, userName, zipGroupId, patientId, patientIdType, subUrl } = data;\r\n try {\r\n if (token && userName) {\r\n let url = yield call(getZipnosisEvisitUrl, token, userName, zipGroupId, patientId, patientIdType);\r\n if (subUrl) {\r\n const index = url.indexOf('?');\r\n url = url.substr(0, index) + '/' + subUrl + (subUrl.indexOf('?') === -1 ? '?' : '&') + url.substr(index + 1);\r\n }\r\n yield put({ type: types.ZIPNOSIS_EVISIT_URL_SUCCESS, url });\r\n logAPI(\"MBHWeb.Saga.SSO.ZipnosisEvisitUrl\", start, null);\r\n }\r\n }\r\n catch (error) {\r\n if (typeof error === 'string') {\r\n const zipnosisError = yield call(convertZipnosisErrorMessage, error);\r\n const { errorMessage, errorMessageName } = zipnosisError;\r\n yield put({ type: types.ZIPNOSIS_EVISIT_URL_FAILURE, errorMessage, errorMessageName });\r\n }\r\n else {\r\n yield put({ type: types.ZIPNOSIS_EVISIT_URL_FAILURE, errorMessage: 'Unknown error', errorMessageName: '' });\r\n }\r\n console.log('getZipnosisEvisitUrl error: ', error);\r\n logAPI(\"MBHWeb.Saga.SSO.ZipnosisEvisitUrl.Failure\", start, null, JSON.stringify(error));\r\n }\r\n}\r\n\r\nfunction* handleUserSwitch(payload) {\r\n yield call(careCompanion, payload && payload.user && payload.user.externalId);\r\n}\r\n\r\nfunction* careCompanion(externalId) {\r\n if (externalId) {\r\n const domain = yield select((state) => state.domain);\r\n try {\r\n const response = yield call(getCareCompanionEnrollStatus, domain.t, externalId);\r\n yield put({ type: types.MEMBERSHIP_CARE_COMPANION, enabled: response && response.CareCompanionEnrolled });\r\n logAPI(\"MBHWeb.Saga.SSO.CareCompanionEnrollStatus.Success\", new Date(), null, response, externalId);\r\n }\r\n catch (error) {\r\n yield put({ type: types.MEMBERSHIP_CARE_COMPANION, enabled: false });\r\n logAPI(\"MBHWeb.Saga.SSO.CareCompanionEnrollStatus.Failure\", new Date(), null, error, externalId);\r\n }\r\n }\r\n else {\r\n yield put({ type: types.MEMBERSHIP_CARE_COMPANION, enabled: false });\r\n logAPI(\"MBHWeb.Saga.SSO.CareCompanionEnrollStatus\", new Date(), null, null, 'no external id');\r\n }\r\n}\r\n\r\nfunction* loadNotices(hasMyChart, hasHealthPlan) {\r\n const start = new Date();\r\n try {\r\n const notices = yield call(getNotices, true, hasMyChart, hasHealthPlan);\r\n if (notices) {\r\n yield put({ type: types.NOTICES_LOGGED_IN, notices: notices });\r\n logAPI(\"MBHWeb.Saga.SSO.LoadNotices\", start, null);\r\n }\r\n }\r\n catch (getNoticesError) {\r\n //console.error(getNoticesError);\r\n logAPI(\"MBHWeb.Saga.SSO.LoadNotices.Failure\", start, null, JSON.stringify(getNoticesError));\r\n }\r\n}\r\n\r\nfunction* loadCurrentManagers(userDetails, hasMyChart) {\r\n const start = new Date();\r\n\r\n try {\r\n if (userDetails && hasMyChart) {\r\n try {\r\n yield put({ type: types.LOAD_CURRENT_MANAGERS_PENDING });\r\n const response = yield call(getEpicWhoCanManageYou, userDetails.access_token, userDetails.userName);\r\n const managers = response && response.Proxies && response.Proxies.length > 0 ? response.Proxies : [];\r\n const currManagerList = [];\r\n const now = new Date();\r\n for (let i = 0; i < managers.length; i++) {\r\n const item = managers[i];\r\n if (!item.ToDate || new Date(item.ToDate) >= now) {\r\n const patientId = item.PatientIds.filter(id => id.IDType === 'EXTERNAL');\r\n const externalId = patientId && patientId.length ? patientId[0].ID.trim() : null;\r\n const internal = item.PatientIds.filter(id => id.IDType === 'INTERNAL');\r\n const mychartId = item.PatientIds.filter(id => id.IDType === 'MYCHARTLOGIN');\r\n const eid = item.PatientIds.filter(id => id.IDType === 'EID');\r\n const relId = item.RelationshipID;\r\n const epi = item.PatientIds.filter(id => id.IDType === 'EPI');\r\n const expireDate = item.ToDate;\r\n currManagerList.push({\r\n displayName: item.ProxyName.trim(),\r\n externalId,\r\n internalId: internal && internal.length ? internal[0].ID.trim() : null,\r\n myChartId: mychartId && mychartId.length ? mychartId[0].ID.trim() : \"\",\r\n eid: eid && eid.length ? eid[0].ID.trim() : null,\r\n relationshipId: relId,\r\n index: i,\r\n item,\r\n epi: epi && epi.length ? epi[0].ID.trim() : null,\r\n expireDate\r\n });\r\n }\r\n }\r\n yield put({ type: types.LOAD_CURRENT_MANAGERS_SUCCESS, currManagerList: currManagerList });\r\n logAPI(\"MBHWeb.Saga.SSO.LoadCurrentManagers\", start, null);\r\n\r\n }\r\n catch (response) {\r\n console.error(response);\r\n if (response.status !== 401) {\r\n yield put({ type: types.LOAD_CURRENT_MANAGERS_FAILURE });\r\n logAPI(\"MBHWeb.Saga.SSO.LoadCurrentManagers.Failure\", start, null);\r\n }\r\n }\r\n }\r\n else {\r\n yield put({ type: types.LOAD_CURRENT_MANAGERS_SUCCESS, currManagerList: [] });\r\n }\r\n }\r\n catch (error) {\r\n yield put({ type: types.LOAD_CURRENT_MANAGERS_FAILURE });\r\n logAPI(\"MBHWeb.Saga.SSO.LoadCurrentManagers.Failure\", start, null, JSON.stringify(error));\r\n }\r\n}","import { put, call, takeLatest, takeEvery, fork, all, select } from \"redux-saga/effects\";\r\nimport { getThriveCard, getThriveReport, getThriveReportV2, getWellBeingReport, getReportPdf } from \"../api/thriveApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { log, logAPI } from \"../api/andyliticsApi\";\r\nimport * as Tools from \"../helpers/Tools\";\r\n\r\nexport default function* thriveSaga() {\r\n yield takeLatest(types.THRIVE_GET_CARD, handleGetThriveCard);\r\n yield takeLatest(types.THRIVE_GET_REPORT, handleGetThriveReport);\r\n yield takeLatest(types.GET_WELLBEING_REPORT, handleGetWellBeingReport);\r\n yield takeLatest(types.GET_WELLNESS_REPORT_PDF, handleGetReportPdf);\r\n}\r\n\r\nexport function* handleGetThriveCard(payload) {\r\n const start = new Date();\r\n const isEmployee = yield select((state) => state.domain.ie);\r\n try {\r\n if (isEmployee) {\r\n yield put({ type: types.THRIVE_GET_CARD_PENDING });\r\n const card = yield call(getThriveCard, payload.token);\r\n if (card.error && card.error.length > 0) {\r\n let error = card.error;\r\n yield put({ type: types.THRIVE_GET_CARD_FAILURE, error });\r\n logAPI(\"MBHWeb.Saga.Thrive.Card.Get.Failure\", start, null, error);\r\n }\r\n else {\r\n yield put({ type: types.THRIVE_GET_CARD_SUCCESS, card });\r\n if (card) {\r\n let andyliticThriveCardRes = {\r\n surveyStatus: card.surveyStatus ? card.surveyStatus : null,\r\n surveyUrl: card.surveyUrl ? card.surveyUrl : null\r\n };\r\n logAPI(\"MBHWeb.Saga.Thrive.Card.Get\", start, null, andyliticThriveCardRes);\r\n } else {\r\n logAPI(\"MBHWeb.Saga.Thrive.Card.Get\", start, null);\r\n }\r\n }\r\n }\r\n }\r\n catch (error) {\r\n yield all([\r\n put({ type: types.THRIVE_GET_CARD_FAILURE, error }),\r\n put({ type: types.AJAX_CALL_ERROR })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.Thrive.Card.Get.Failure\", start, null, error);\r\n }\r\n\r\n}\r\n\r\nexport function* handleGetThriveReport(payload) {\r\n const start = new Date();\r\n const defaultReportYear = start.getFullYear();\r\n let report = {};\r\n\r\n try {\r\n yield put({ type: types.THRIVE_GET_REPORT_PENDING });\r\n if (payload && payload.reportYear) {\r\n const reportYear = payload && payload.reportYear ? payload.reportYear : defaultReportYear;\r\n report = yield call(getThriveReportV2, payload.token, reportYear);\r\n }\r\n else {\r\n report = yield call(getThriveReport, payload.token);\r\n }\r\n\r\n if (report.error && report.error.length > 0) {\r\n let error = report.error;\r\n yield put({ type: types.THRIVE_GET_REPORT_FAILURE, error });\r\n logAPI(\"MBHWeb.Saga.Thrive.Report.Get.Failure\", start, null, error);\r\n }\r\n else {\r\n yield put({ type: types.THRIVE_GET_REPORT_SUCCESS, report });\r\n logAPI(\"MBHWeb.Saga.Thrive.Report.Get\", start, null);\r\n }\r\n }\r\n catch (error) {\r\n yield all([\r\n put({ type: types.THRIVE_GET_REPORT_FAILURE, error }),\r\n put({ type: types.AJAX_CALL_ERROR })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.Thrive.Report.Get.Failure\", start, null, error);\r\n }\r\n}\r\nexport function* handleGetWellBeingReport(payload) {\r\n const start = new Date();\r\n const defaultReportYear = start.getFullYear();\r\n let report = {};\r\n\r\n try {\r\n yield put({ type: types.GET_WELLBEING_REPORT_PENDING });\r\n const reportYear = payload && payload.reportYear ? payload.reportYear : defaultReportYear;\r\n report = yield call(getWellBeingReport, payload.token, reportYear);\r\n if (report.error && report.error.length > 0) {\r\n let error = report.error;\r\n yield put({ type: types.GET_WELLBEING_REPORT_FAILURE, error });\r\n logAPI(\"MBHWeb.Saga.Thrive.WellBeingReport.Get.Failure\", start, null, error);\r\n }\r\n else {\r\n yield put({ type: types.GET_WELLBEING_REPORT_SUCCESS, report });\r\n logAPI(\"MBHWeb.Saga.Thrive.WellBeingReport.Get.Success\", start, null);\r\n }\r\n }\r\n catch (error) {\r\n yield all([\r\n put({ type: types.GET_WELLBEING_REPORT_FAILURE, error }),\r\n put({ type: types.AJAX_CALL_ERROR })\r\n ]);\r\n logAPI(\"MBHWeb.Saga.Thrive.WellBeingReport.Get.Failure\", start, null, error);\r\n }\r\n}\r\n\r\nexport function* handleGetReportPdf(payload) {\r\n const start = new Date();\r\n const defaultReportYear = start.getFullYear();\r\n const reportYear = payload && payload.reportYear ? payload.reportYear : defaultReportYear;\r\n\r\n try {\r\n const response = yield call(getReportPdf, payload.token, reportYear);\r\n logAPI(\"MBHWeb.Saga.Thrive.ReportPdf.Get\", start, null);\r\n }\r\n\r\n catch (error) {\r\n logAPI(\"MBHWeb.Saga.Thrive.ReportPdf.Get\", start, null, error);\r\n }\r\n}\r\n","import { getTodos } from \"../api/epicApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { call, put, select, takeLatest } from \"redux-saga/effects\";\r\nimport * as d from \"../reducers/domainReducer\";\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\n\r\nexport default function* todosSaga() {\r\n //yield takeLatest([types.LOAD_DASHBOARD_START], handleAction);\r\n //yield takeLatest([types.USER_AUTHENTICATE_SUCCESS], handleAction);\r\n yield takeLatest([types.INITIATE_TODOS], handleAction);\r\n yield takeLatest([types.PROXY_LIST_LOADED], handleAction);\r\n yield takeLatest([types.PROXY_LIST_FAILURE], handleAction);\r\n yield takeLatest([types.SWITCH_USER_SAGA], handleAction);\r\n}\r\n\r\nexport function* handleAction(payload) {\r\n\r\n const start = new Date();\r\n const userDetails = yield select((state) => state.sso.userDetails);\r\n const currentUser = payload && payload.user ? payload.user : d.hydrateProxyUser(yield select(state => state.domain.cu));\r\n try {\r\n if (userDetails && userDetails.userName) {\r\n if (currentUser && currentUser.externalId) {//Bug-34585\r\n const response = yield call(getTodos, userDetails.userName, currentUser.externalId, userDetails.access_token);\r\n logAPI(\"MBHWeb.Saga.Todos.Get\", start, null);\r\n yield put({ type: types.TODOS_SUCCESS, todos: response, isWaiting: false });\r\n }\r\n else {\r\n const error = 'Patient ID is not available.';\r\n yield put({ type: types.TODOS_FAILURE, error: error });\r\n logAPI(\"MBHWeb.Saga.Todos.Get.Failure.PatientIdNotAvailable\", start, null, error);\r\n }\r\n }\r\n }\r\n catch (response) {\r\n console.error(response);\r\n // Microsoft Edge throws TypeMismatchError when fetch returns 401\r\n if (response !== null) {\r\n if (response.status === 401 || response.message === 'TypeMismatchError') {\r\n yield put({ type: types.VERIFY_LOGIN, errorCode: 401 });\r\n logAPI(\"MBHWeb.Saga.Todos.Get.Failure\", start, null, '401 - login expired or invalid auth token');\r\n }\r\n else {\r\n yield put({ type: types.TODOS_FAILURE, error: response });\r\n logAPI(\"MBHWeb.Saga.Todos.Get.Failure\", start, null, response);\r\n }\r\n }\r\n else {\r\n logAPI(\"MBHWeb.Saga.Todos.Get.Failure\", start, null, response);\r\n }\r\n }\r\n}","import { getConditions, getTimeSlots, scheduleVideoVisit, ambulatorySurveyRequest } from \"../api/epicApi\";\r\nimport { getVideoVisitTermsAndConditions, acceptVideoVisitTermsAndConditions, getVideoVisitUrl } from \"../api/portalApi\";\r\nimport * as types from \"../constants/actionTypes\";\r\nimport { call, put, select, takeLatest } from \"redux-saga/effects\";\r\nimport { logAPI } from \"../api/andyliticsApi\";\r\n\r\nexport default function* videoVisitSchedulingSaga() {\r\n yield takeLatest([types.GET_VIDEO_VISIT_CONDITIONS], handleVideoVisit);\r\n yield takeLatest([types.GET_VIDEO_VISIT_TIME_SLOTS], handleVideoVisit);\r\n yield takeLatest([types.SCHEDULE_VIDEO_VISIT_REQUEST], handleVideoVisit);\r\n yield takeLatest([types.AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST], handleVideoVisit);\r\n yield takeLatest([types.GET_VIDEO_VISIT_TERMS], handleVideoVisit);\r\n yield takeLatest([types.ACCEPT_VIDEO_VISIT_CONDITIONS], handleVideoVisit);\r\n yield takeLatest([types.GET_VIDEO_VISIT_LINK], handleVideoVisit);\r\n}\r\n\r\nexport function* handleVideoVisit(payload) {\r\n const start = new Date();\r\n const domain = yield select((state) => state.domain);\r\n const activityCode = \"MBHWeb.Saga.VideoVisitScheduling.\";\r\n\r\n if (domain && domain.t) {\r\n try {\r\n switch (payload.type) {\r\n case types.GET_VIDEO_VISIT_CONDITIONS:\r\n try {\r\n yield put({ type: types.GET_VIDEO_VISIT_CONDITIONS_PENDING });\r\n const response = yield call(getConditions, domain.t);\r\n logAPI(activityCode + \"GetVideoVisitConditions.Success\", start, null);\r\n yield put({ type: types.GET_VIDEO_VISIT_CONDITIONS_SUCCESS, conditions: response });\r\n }\r\n catch (err) {\r\n yield put({ type: types.GET_VIDEO_VISIT_CONDITIONS_FAILURE });\r\n console.error(err);\r\n logAPI(activityCode + \"GetVideoVisitConditions.Failure\", start, null, JSON.stringify(err));\r\n }\r\n break;\r\n case types.GET_VIDEO_VISIT_TIME_SLOTS:\r\n try {\r\n if (payload && payload.data && payload.data.clientUTCOffset && payload.data.date) {\r\n let clientUTCOffset = payload.data.clientUTCOffset;\r\n let date = payload.data.date;\r\n yield put({ type: types.GET_VIDEO_VISIT_TIME_SLOTS_PENDING });\r\n const response = yield call(getTimeSlots, domain.t, clientUTCOffset, date);\r\n if (response && response.availableTimes) {\r\n logAPI(activityCode + \"GetVideoVisitTimeSlots.Success\", start, null);\r\n yield put({ type: types.GET_VIDEO_VISIT_TIME_SLOTS_SUCCESS, timeslots: response });\r\n }\r\n else {\r\n yield put({ type: types.GET_VIDEO_VISIT_TIME_SLOTS_FAILURE });\r\n logAPI(activityCode + \"GetVideoVisitTimeSlots.Failure\", start, null, response);\r\n }\r\n }\r\n } catch (err) {\r\n yield put({ type: types.GET_VIDEO_VISIT_TIME_SLOTS_FAILURE });\r\n console.error(err);\r\n logAPI(activityCode + \"GetVideoVisitTimeSlots.Failure\", start, null, JSON.stringify(err));\r\n }\r\n break;\r\n case types.SCHEDULE_VIDEO_VISIT_REQUEST:\r\n try {\r\n yield put({ type: types.SCHEDULE_VIDEO_VISIT_REQUEST_PENDING });\r\n const response = yield call(scheduleVideoVisit, domain.t, payload);\r\n if (response && response.csn) { \r\n logAPI(activityCode + \"ScheduleVideoVisit.Success\", start, null, JSON.stringify(payload));\r\n yield put({ type: types.SCHEDULE_VIDEO_VISIT_REQUEST_SUCCESS, response: response });\r\n }\r\n else {\r\n yield put({ type: types.SCHEDULE_VIDEO_VISIT_REQUEST_FAILURE }); \r\n logAPI(activityCode + \"ScheduleVideoVisit.Failure\", start, null, JSON.stringify({\"response\": response, \"payload\": payload }));\r\n }\r\n } catch (err) {\r\n yield put({ type: types.SCHEDULE_VIDEO_VISIT_REQUEST_FAILURE });\r\n logAPI(activityCode + \"ScheduleVideoVisit.Failure\", start, null, JSON.stringify({ \"error\": err, \"payload\": payload }));\r\n }\r\n break;\r\n case types.AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST:\r\n try {\r\n yield put({ type: types.AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_PENDING });\r\n if (!domain.t) {\r\n yield put({ type: types.AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_FAILURE });\r\n break;\r\n }\r\n const response = yield call(ambulatorySurveyRequest, domain.t, payload);\r\n if (response === 200) {\r\n logAPI(activityCode + \"AmbulatoryCareSurvey.Success\", start, null);\r\n yield put({ type: types.AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_SUCCESS });\r\n }\r\n else {\r\n yield put({ type: types.AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_FAILURE });\r\n logAPI(activityCode + \"AmbulatoryCareSurvey.Failure\", start, null, response);\r\n }\r\n } catch (err) {\r\n yield put({ type: types.AMBULATORY_VIDEO_VISIT_SURVEY_REQUEST_FAILURE }); \r\n logAPI(activityCode + \"AmbulatoryCareSurvey.Failure\", start, null, JSON.stringify(err));\r\n }\r\n break;\r\n case types.GET_VIDEO_VISIT_TERMS:\r\n try {\r\n yield put({ type: types.GET_VIDEO_VISIT_TERMS_PENDING });\r\n const response = yield call(getVideoVisitTermsAndConditions, domain.un, domain.t, \"SameDayCare\", domain.cu && domain.cu.ei ? domain.cu.ei : null);\r\n logAPI(activityCode + \"GetVideoVisitTerms.Success\", start, null);\r\n yield put({ type: types.GET_VIDEO_VISIT_TERMS_SUCCESS, terms: response });\r\n\r\n } catch (err) {\r\n yield put({ type: types.GET_VIDEO_VISIT_TERMS_FAILURE });\r\n console.error(err);\r\n logAPI(activityCode + \"GetVideoVisitTerms.Failure\", start, null, JSON.stringify(err));\r\n }\r\n break;\r\n case types.ACCEPT_VIDEO_VISIT_CONDITIONS:\r\n try {\r\n yield put({ type: types.ACCEPT_VIDEO_VISIT_CONDITIONS_PENDING });\r\n const response = yield call(acceptVideoVisitTermsAndConditions, domain.t, domain.un, payload.data.versionId, payload.data.proxyId);\r\n logAPI(activityCode + \"AcceptTermsAndConditions.Success\", start, null);\r\n yield put({ type: types.ACCEPT_VIDEO_VISIT_CONDITIONS_SUCCESS, response: response });\r\n }\r\n catch (err) {\r\n yield put({ type: types.ACCEPT_VIDEO_VISIT_CONDITIONS_FAILURE });\r\n console.error(err);\r\n logAPI(activityCode + \"AcceptTermsAndConditions.Failure\", start, null, JSON.stringify(err));\r\n }\r\n break;\r\n //case types.GET_VIDEO_VISIT_LINK:\r\n // try {\r\n // let videoVisitLink = yield call(getVideoVisitUrl, domain.t, domain.un, payload.csn);\r\n // videoVisitLink.csn = payload.csn;\r\n // logAPI(activityCode + \"GetVideoVisitLink.Success\", start, null, videoVisitLink);\r\n // yield put({ type: types.GET_VIDEO_VISIT_LINK_SUCCESS, videoVisitLink });\r\n // } catch (error) {\r\n // let csn = payload && payload.csn ? payload.csn : null\r\n // yield put({ type: typse.GET_VIDEO_VISIT_LINK_FAILURE, error, csn });\r\n // console.error(error);\r\n // logAPI(activityCode + \"GetVideoVisitLink.Failure\", start, null, JSON.stringify(error));\r\n // }\r\n // break;\r\n }\r\n } catch (err) {\r\n console.error(err);\r\n logAPI(activityCode + \"Failure\", start, null, JSON.stringify(err));\r\n }\r\n } else {\r\n console.log(\"Error\");\r\n }\r\n};","/*\r\n * File: iframeResizer.js\r\n * Desc: Force iframes to size to content.\r\n * Requires: iframeResizer.contentWindow.js to be loaded into the target frame.\r\n * Doc: https://github.com/davidjbradshaw/iframe-resizer\r\n * Author: David J. Bradshaw - dave@bradshaw.net\r\n * Contributor: Jure Mav - jure.mav@gmail.com\r\n * Contributor: Reed Dadoune - reed@dadoune.com\r\n */\r\n\r\n\r\nlet count = 0,\r\n logEnabled = false,\r\n hiddenCheckEnabled = false,\r\n msgHeader = 'message',\r\n msgHeaderLen = msgHeader.length,\r\n msgId = '[iFrameSizer]', //Must match iframe msg ID\r\n msgIdLen = msgId.length,\r\n pagePosition = null,\r\n previousPopUpHeight = null,\r\n previousPopUpWasSmall = false,\r\n requestAnimationFrame = window.requestAnimationFrame,\r\n resetRequiredMethods = {\r\n max: 1,\r\n scroll: 1,\r\n bodyScroll: 1,\r\n documentElementScroll: 1\r\n },\r\n settings = {},\r\n timer = null,\r\n logId = 'Host Page',\r\n defaults = {\r\n autoResize: true,\r\n bodyBackground: null,\r\n bodyMargin: null,\r\n bodyMarginV1: 8,\r\n bodyPadding: null,\r\n checkOrigin: true,\r\n inPageLinks: false,\r\n enablePublicMethods: true,\r\n heightCalculationMethod: 'bodyOffset',\r\n id: 'iFrameResizer',\r\n interval: 32,\r\n log: false,\r\n maxHeight: Infinity,\r\n maxWidth: Infinity,\r\n minHeight: 0,\r\n minWidth: 0,\r\n resizeFrom: 'parent',\r\n scrolling: false,\r\n sizeHeight: true,\r\n sizeWidth: false,\r\n warningTimeout: 5000,\r\n tolerance: 0,\r\n widthCalculationMethod: 'scroll',\r\n closedCallback: function () { },\r\n initCallback: function () { },\r\n messageCallback: function () {\r\n warn('MessageCallback function not defined');\r\n },\r\n resizedCallback: function () { },\r\n scrollCallback: function () {\r\n return true;\r\n }\r\n };\r\n\r\nfunction getMutationObserver() {\r\n return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;\r\n}\r\n\r\nfunction addEventListener(obj, evt, func) {\r\n /* istanbul ignore else */ // Not testable in PhantonJS\r\n if ('addEventListener' in window) {\r\n obj.addEventListener(evt, func, false);\r\n } else if ('attachEvent' in window) {\r\n //IE\r\n obj.attachEvent('on' + evt, func);\r\n }\r\n}\r\n\r\nfunction removeEventListener(el, evt, func) {\r\n /* istanbul ignore else */ // Not testable in phantonJS\r\n if ('removeEventListener' in window) {\r\n el.removeEventListener(evt, func, false);\r\n } else if ('detachEvent' in window) {\r\n //IE\r\n el.detachEvent('on' + evt, func);\r\n }\r\n}\r\n\r\nfunction setupRequestAnimationFrame() {\r\n var vendors = ['moz', 'webkit', 'o', 'ms'],\r\n x;\r\n\r\n // Remove vendor prefixing if prefixed and break early if not\r\n for (x = 0; x < vendors.length && !requestAnimationFrame; x += 1) {\r\n requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];\r\n }\r\n\r\n if (!requestAnimationFrame) {\r\n log('setup', 'RequestAnimationFrame not supported');\r\n }\r\n}\r\n\r\nfunction getMyID(iframeId) {\r\n var retStr = 'Host page: ' + iframeId;\r\n\r\n if (window.top !== window.self) {\r\n if (window.parentIFrame && window.parentIFrame.getId) {\r\n retStr = window.parentIFrame.getId() + ': ' + iframeId;\r\n } else {\r\n retStr = 'Nested host page: ' + iframeId;\r\n }\r\n }\r\n\r\n return retStr;\r\n}\r\n\r\nfunction formatLogHeader(iframeId) {\r\n return msgId + '[' + getMyID(iframeId) + ']';\r\n}\r\n\r\nfunction isLogEnabled(iframeId) {\r\n return settings[iframeId] ? settings[iframeId].log : logEnabled;\r\n}\r\n\r\nfunction log(iframeId, msg) {\r\n output('log', iframeId, msg, isLogEnabled(iframeId));\r\n}\r\n\r\nfunction info(iframeId, msg) {\r\n output('info', iframeId, msg, isLogEnabled(iframeId));\r\n}\r\n\r\nfunction warn(iframeId, msg) {\r\n output('warn', iframeId, msg, true);\r\n}\r\n\r\nfunction output(type, iframeId, msg, enabled) {\r\n if (true === enabled && 'object' === typeof window.console) {\r\n console[type](formatLogHeader(iframeId), msg);\r\n }\r\n}\r\n\r\nfunction iFrameListener(event) {\r\n //if (event && event.data && event.data === \"[iFrameResizerChild]DocumentReady\") {\r\n // debugger;\r\n // window.scrollTo(0, 0);\r\n //}\r\n\r\n function resizeIFrame() {\r\n function resize() {\r\n setSize(messageData);\r\n setPagePosition(iframeId);\r\n callback('resizedCallback', messageData);\r\n }\r\n\r\n ensureInRange('Height');\r\n ensureInRange('Width');\r\n\r\n syncResize(resize, messageData, 'init');\r\n }\r\n\r\n function processMsg() {\r\n var data = msg.substr(msgIdLen).split(':');\r\n var heightNum = parseInt(data[1], 10);\r\n var height = heightNum && typeof heightNum === 'number' ? parseInt(data[1], 10) + 1 : data[1]\r\n\r\n return {\r\n iframe: settings[data[0]] && settings[data[0]].iframe,\r\n id: data[0],\r\n height: height,\r\n width: data[2],\r\n type: data[3]\r\n };\r\n }\r\n\r\n function ensureInRange(Dimension) {\r\n var max = Number(settings[iframeId]['max' + Dimension]),\r\n min = Number(settings[iframeId]['min' + Dimension]),\r\n dimension = Dimension.toLowerCase(),\r\n size = Number(messageData[dimension]);\r\n\r\n log(\r\n iframeId,\r\n 'Checking ' + dimension + ' is in range ' + min + '-' + max\r\n );\r\n\r\n if (size < min) {\r\n size = min;\r\n log(iframeId, 'Set ' + dimension + ' to min value');\r\n }\r\n\r\n if (size > max) {\r\n size = max;\r\n log(iframeId, 'Set ' + dimension + ' to max value');\r\n }\r\n\r\n messageData[dimension] = '' + size;\r\n }\r\n\r\n function isMessageFromIFrame() {\r\n //debugger;\r\n function checkAllowedOrigin() {\r\n function checkList() {\r\n var i = 0,\r\n retCode = false;\r\n\r\n log(\r\n iframeId,\r\n 'Checking connection is from allowed list of origins: ' +\r\n checkOrigin\r\n );\r\n\r\n for (; i < checkOrigin.length; i++) {\r\n if (checkOrigin[i] === origin) {\r\n retCode = true;\r\n break;\r\n }\r\n }\r\n return retCode;\r\n }\r\n\r\n function checkSingle() {\r\n var remoteHost = settings[iframeId] && settings[iframeId].remoteHost;\r\n log(iframeId, 'Checking connection is from: ' + remoteHost);\r\n return origin === remoteHost;\r\n }\r\n\r\n return checkOrigin.constructor === Array ? checkList() : checkSingle();\r\n }\r\n\r\n var origin = event.origin,\r\n checkOrigin = settings[iframeId] && settings[iframeId].checkOrigin;\r\n\r\n if (checkOrigin && '' + origin !== 'null' && !checkAllowedOrigin()) {\r\n throw new Error(\r\n 'Unexpected message received from: ' +\r\n origin +\r\n ' for ' +\r\n messageData.iframe.id +\r\n '. Message was: ' +\r\n event.data +\r\n '. This error can be disabled by setting the checkOrigin: false option or by providing of array of trusted domains.'\r\n );\r\n }\r\n\r\n return true;\r\n }\r\n\r\n function isMessageForUs() {\r\n return (\r\n msgId === ('' + msg).substr(0, msgIdLen) &&\r\n msg.substr(msgIdLen).split(':')[0] in settings\r\n ); //''+Protects against non-string msg\r\n }\r\n\r\n function isMessageFromMetaParent() {\r\n //Test if this message is from a parent above us. This is an ugly test, however, updating\r\n //the message format would break backwards compatibity.\r\n var retCode = messageData.type in { true: 1, false: 1, undefined: 1 };\r\n\r\n if (retCode) {\r\n log(iframeId, 'Ignoring init message from meta parent page');\r\n }\r\n\r\n return retCode;\r\n }\r\n\r\n function getMsgBody(offset) {\r\n return msg.substr(msg.indexOf(':') + msgHeaderLen + offset);\r\n }\r\n\r\n function forwardMsgFromIFrame(msgBody) {\r\n //debugger;\r\n log(\r\n iframeId,\r\n 'MessageCallback passed: {iframe: ' +\r\n messageData.iframe.id +\r\n ', message: ' +\r\n msgBody +\r\n '}'\r\n );\r\n callback('messageCallback', {\r\n iframe: messageData.iframe,\r\n message: JSON.parse(msgBody)\r\n });\r\n log(iframeId, '--');\r\n }\r\n\r\n function getPageInfo() {\r\n var bodyPosition = document.body.getBoundingClientRect(),\r\n iFramePosition = messageData.iframe.getBoundingClientRect();\r\n\r\n return JSON.stringify({\r\n iframeHeight: iFramePosition.height,\r\n iframeWidth: iFramePosition.width,\r\n clientHeight: Math.max(\r\n document.documentElement.clientHeight,\r\n window.innerHeight || 0\r\n ),\r\n clientWidth: Math.max(\r\n document.documentElement.clientWidth,\r\n window.innerWidth || 0\r\n ),\r\n offsetTop: parseInt(iFramePosition.top - bodyPosition.top, 10),\r\n offsetLeft: parseInt(iFramePosition.left - bodyPosition.left, 10),\r\n scrollTop: window.pageYOffset,\r\n scrollLeft: window.pageXOffset\r\n });\r\n }\r\n\r\n function sendPageInfoToIframe(iframe, iframeId) {\r\n function debouncedTrigger() {\r\n trigger(\r\n 'Send Page Info',\r\n 'pageInfo:' + getPageInfo(),\r\n iframe,\r\n iframeId\r\n );\r\n }\r\n debounceFrameEvents(debouncedTrigger, 32, iframeId);\r\n }\r\n\r\n function startPageInfoMonitor() {\r\n function setListener(type, func) {\r\n function sendPageInfo() {\r\n if (settings[id]) {\r\n sendPageInfoToIframe(settings[id].iframe, id);\r\n } else {\r\n stop();\r\n }\r\n }\r\n\r\n ['scroll', 'resize'].forEach(function (evt) {\r\n log(id, type + evt + ' listener for sendPageInfo');\r\n func(window, evt, sendPageInfo);\r\n });\r\n }\r\n\r\n function stop() {\r\n setListener('Remove ', removeEventListener);\r\n }\r\n\r\n function start() {\r\n setListener('Add ', addEventListener);\r\n }\r\n\r\n var id = iframeId; //Create locally scoped copy of iFrame ID\r\n\r\n start();\r\n\r\n if (settings[id]) {\r\n settings[id].stopPageInfo = stop;\r\n }\r\n }\r\n\r\n function stopPageInfoMonitor() {\r\n if (settings[iframeId] && settings[iframeId].stopPageInfo) {\r\n settings[iframeId].stopPageInfo();\r\n delete settings[iframeId].stopPageInfo;\r\n }\r\n }\r\n\r\n function checkIFrameExists() {\r\n var retBool = true;\r\n\r\n if (null === messageData.iframe) {\r\n warn(iframeId, 'IFrame (' + messageData.id + ') not found');\r\n retBool = false;\r\n }\r\n return retBool;\r\n }\r\n\r\n function getElementPosition(target) {\r\n var iFramePosition = target.getBoundingClientRect();\r\n\r\n getPagePosition(iframeId);\r\n\r\n return {\r\n x: Math.floor(Number(iFramePosition.left) + Number(pagePosition.x)),\r\n y: Math.floor(Number(iFramePosition.top) + Number(pagePosition.y))\r\n };\r\n }\r\n\r\n function scrollRequestFromChild(addOffset) {\r\n /* istanbul ignore next */ //Not testable in Karma\r\n function reposition() {\r\n pagePosition = newPosition;\r\n scrollTo();\r\n log(iframeId, '--');\r\n }\r\n\r\n function calcOffset() {\r\n return {\r\n x: Number(messageData.width) + offset.x,\r\n y: Number(messageData.height) + offset.y\r\n };\r\n }\r\n\r\n function scrollParent() {\r\n if (window.parentIFrame) {\r\n window.parentIFrame['scrollTo' + (addOffset ? 'Offset' : '')](\r\n newPosition.x,\r\n newPosition.y\r\n );\r\n } else {\r\n warn(\r\n iframeId,\r\n 'Unable to scroll to requested position, window.parentIFrame not found'\r\n );\r\n }\r\n }\r\n\r\n var offset = addOffset\r\n ? getElementPosition(messageData.iframe)\r\n : { x: 0, y: 0 },\r\n newPosition = calcOffset();\r\n\r\n log(\r\n iframeId,\r\n 'Reposition requested from iFrame (offset x:' +\r\n offset.x +\r\n ' y:' +\r\n offset.y +\r\n ')'\r\n );\r\n\r\n if (window.top !== window.self) {\r\n scrollParent();\r\n } else {\r\n reposition();\r\n }\r\n }\r\n\r\n function scrollTo() {\r\n if (false !== callback('scrollCallback', pagePosition)) {\r\n setPagePosition(iframeId);\r\n } else {\r\n unsetPagePosition();\r\n }\r\n }\r\n\r\n function findTarget(location) {\r\n function jumpToTarget() {\r\n var jumpPosition = getElementPosition(target);\r\n\r\n log(\r\n iframeId,\r\n 'Moving to in page link (#' +\r\n hash +\r\n ') at x: ' +\r\n jumpPosition.x +\r\n ' y: ' +\r\n jumpPosition.y\r\n );\r\n pagePosition = {\r\n x: jumpPosition.x,\r\n y: jumpPosition.y\r\n };\r\n\r\n scrollTo();\r\n log(iframeId, '--');\r\n }\r\n\r\n function jumpToParent() {\r\n if (window.parentIFrame) {\r\n window.parentIFrame.moveToAnchor(hash);\r\n } else {\r\n log(\r\n iframeId,\r\n 'In page link #' +\r\n hash +\r\n ' not found and window.parentIFrame not found'\r\n );\r\n }\r\n }\r\n\r\n var hash = location.split('#')[1] || '',\r\n hashData = decodeURIComponent(hash),\r\n target =\r\n document.getElementById(hashData) ||\r\n document.getElementsByName(hashData)[0];\r\n\r\n if (target) {\r\n jumpToTarget();\r\n } else if (window.top !== window.self) {\r\n jumpToParent();\r\n } else {\r\n log(iframeId, 'In page link #' + hash + ' not found');\r\n }\r\n }\r\n\r\n function callback(funcName, val) {\r\n return chkCallback(iframeId, funcName, val);\r\n }\r\n\r\n function actionMsg() {\r\n //debugger;\r\n if (settings[iframeId] && settings[iframeId].firstRun) firstRun();\r\n\r\n //Toggle zIndex of MyBSWHealth elements overlaying iframe when there is a pop up\r\n if (settings[iframeId] && settings[iframeId].iframe) {\r\n var docElContent = settings[iframeId].iframe.contentDocument;\r\n var docElBody = docElContent && docElContent.body;\r\n if (docElBody) {\r\n popUpChange(docElBody);\r\n }\r\n }\r\n\r\n switch (messageData.type) {\r\n case 'close':\r\n if (settings[iframeId].closeRequestCallback)\r\n chkCallback(\r\n iframeId,\r\n 'closeRequestCallback',\r\n settings[iframeId].iframe\r\n );\r\n else closeIFrame(messageData.iframe);\r\n break;\r\n case 'message':\r\n\r\n forwardMsgFromIFrame(getMsgBody(6));\r\n break;\r\n case 'scrollTo':\r\n scrollRequestFromChild(false);\r\n break;\r\n case 'scrollToOffset':\r\n scrollRequestFromChild(true);\r\n break;\r\n case 'pageInfo':\r\n sendPageInfoToIframe(\r\n settings[iframeId] && settings[iframeId].iframe,\r\n iframeId\r\n );\r\n startPageInfoMonitor();\r\n break;\r\n case 'pageInfoStop':\r\n stopPageInfoMonitor();\r\n break;\r\n case 'inPageLink':\r\n findTarget(getMsgBody(9));\r\n break;\r\n case 'reset':\r\n resetIFrame(messageData);\r\n break;\r\n case 'init':\r\n resizeIFrame();\r\n callback('initCallback', messageData.iframe);\r\n break;\r\n default:\r\n resizeIFrame();\r\n }\r\n }\r\n\r\n function hasSettings(iframeId) {\r\n var retBool = true;\r\n\r\n if (!settings[iframeId]) {\r\n retBool = false;\r\n warn(\r\n messageData.type +\r\n ' No settings for ' +\r\n iframeId +\r\n '. Message was: ' +\r\n msg\r\n );\r\n }\r\n\r\n return retBool;\r\n }\r\n\r\n function iFrameReadyMsgReceived() {\r\n //debugger;\r\n for (var iframeId in settings) {\r\n trigger(\r\n 'iFrame requested init',\r\n createOutgoingMsg(iframeId),\r\n document.getElementById(iframeId),\r\n iframeId\r\n );\r\n }\r\n }\r\n\r\n function firstRun() {\r\n if (settings[iframeId]) {\r\n settings[iframeId].firstRun = false;\r\n }\r\n }\r\n\r\n function clearWarningTimeout() {\r\n if (settings[iframeId]) {\r\n clearTimeout(settings[iframeId].msgTimeout);\r\n settings[iframeId].warningTimeout = 0;\r\n }\r\n }\r\n\r\n var msg = event.data,\r\n messageData = {},\r\n iframeId = null;\r\n\r\n if ('[iFrameResizerChild]Ready' === msg) {\r\n iFrameReadyMsgReceived();\r\n } else if (isMessageForUs()) {\r\n messageData = processMsg();\r\n iframeId = logId = messageData.id;\r\n if (settings[iframeId]) {\r\n settings[iframeId].loaded = true;\r\n }\r\n\r\n if (!isMessageFromMetaParent() && hasSettings(iframeId)) {\r\n log(iframeId, 'Received: ' + msg);\r\n\r\n if (checkIFrameExists() && isMessageFromIFrame()) {\r\n actionMsg();\r\n }\r\n }\r\n } else {\r\n info(iframeId, 'Ignored: ' + msg);\r\n }\r\n\r\n function popUpChange(docElBody) {\r\n //this method is called continuously on action messages and listens to modal changes\r\n try {\r\n var elLength = docElBody.children.length;\r\n var popOpened = document.querySelector('.body-content') && document.querySelector('.body-content').className.indexOf('mychart-popup-open') !== -1 ? true : false;\r\n var bodyContent = document.querySelector('.body-content');\r\n\r\n if (elLength > 0 && bodyContent) {\r\n var popUpContainer = docElBody.querySelector('.Popup.component');\r\n if (popUpContainer) {\r\n bodyContent.classList.add('mychart-popup-open');\r\n \r\n //this only runs when a modal is opened for the first time or it it decreases in height\r\n if ((popUpContainer.className.indexOf('small') === -1 && !popOpened) || (previousPopUpHeight && previousPopUpHeight - popUpContainer.offsetHeight > 100)) {\r\n window.scroll(0, 0);\r\n //commented out pagePosition since interferred with window.scroll and sometimes would not scroll to top\r\n //pagePosition.x = 0;\r\n //pagePosition.y = 0;\r\n }\r\n previousPopUpHeight = popUpContainer.offsetHeight;\r\n previousPopUpWasSmall = popUpContainer.className.indexOf('small') > -1;\r\n }\r\n else {\r\n bodyContent.classList.remove('mychart-popup-open');\r\n previousPopUpHeight = null;\r\n\r\n // this only runs when a non-small modal is closed\r\n if (!previousPopUpWasSmall && popOpened) {\r\n //commented out window.scroll since it interferred with pagePosition which works with MyChart positioning when closing better. Sometimes don't want to scroll to top.\r\n //window.scroll(0, 0);\r\n // make sure page position is 0 because it sometimes gets called after window.scroll\r\n pagePosition.x = 0;\r\n pagePosition.y = 0;\r\n }\r\n }\r\n }\r\n\r\n //Fixed height on health summary page causes incorrect height calculations so overriding inline height\r\n var healthSummaryPage = docElBody.querySelector('[data-component=\"healthissues\"]');\r\n var allergiesSummaryPage = docElBody.querySelector('[data-component=\"allergies\"]');\r\n\r\n\r\n if (healthSummaryPage !== null) {\r\n healthSummaryPage.style.height = \"100%\";\r\n }\r\n\r\n if (allergiesSummaryPage !== null) {\r\n allergiesSummaryPage.style.height = \"100%\";\r\n }\r\n }\r\n catch (e) {\r\n // dear God please\r\n }\r\n }\r\n}\r\n\r\n// Custom functions to run after iframe has loaded\r\nfunction afterIFrameLoaded(iframe) {\r\n if (iframe.id === 'mychartinsurance') {\r\n var docElContent = iframe.contentDocument;\r\n var docElBody = docElContent && docElContent.body;\r\n if (docElBody) {\r\n insuranceAddCoverageOnLoad(docElBody);\r\n }\r\n }\r\n\r\n}\r\n\r\nfunction hideTitle(docElBody) {\r\n var heading = docElBody.querySelector('#main .title');\r\n heading.style.display = \"none\";\r\n}\r\n\r\n// Open Add Coverage if no coverage available\r\nfunction insuranceAddCoverageOnLoad(docElBody) {\r\n var insuranceCoverage = docElBody.querySelector('#coverages-list');\r\n var coverageBtnCheck;\r\n\r\n if (insuranceCoverage !== null) {\r\n var addCoverageBtn = insuranceCoverage.querySelector('#addCoverageButton');\r\n coverageBtnCheck = setTimeout(function () {\r\n addCoverageBtn = insuranceCoverage.querySelector('#addCoverageButton');\r\n if (addCoverageBtn !== null) {\r\n checkNoInsurance(insuranceCoverage, addCoverageBtn);\r\n }\r\n }, 500);\r\n }\r\n\r\n function checkNoInsurance(insuranceCoverage, addCoverageBtn) {\r\n clearTimeout(coverageBtnCheck);\r\n\r\n var noInsurance = insuranceCoverage.querySelector('.insuranceVerification p.nodata');\r\n var noPending = !insuranceCoverage.querySelector('.cardlist.hasPendingStatus');\r\n if (noInsurance && noPending) {\r\n if (addCoverageBtn !== null && addCoverageBtn.style.display !== 'none') {\r\n var addCoverageLink = addCoverageBtn.querySelector('[data-id=\"addCoverage\"]');\r\n if (addCoverageLink) {\r\n addCoverageLink.click();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction chkCallback(iframeId, funcName, val) {\r\n var func = null,\r\n retVal = null;\r\n\r\n if (settings[iframeId]) {\r\n func = settings[iframeId][funcName];\r\n\r\n if ('function' === typeof func) {\r\n retVal = func(val);\r\n } else {\r\n throw new TypeError(\r\n funcName + ' on iFrame[' + iframeId + '] is not a function'\r\n );\r\n }\r\n }\r\n\r\n return retVal;\r\n}\r\n\r\nfunction removeIframeListeners(iframe) {\r\n var iframeId = iframe.id;\r\n //debugger;\r\n delete settings[iframeId];\r\n //settings[iframeId] = { firstRun: true };\r\n}\r\n\r\nfunction closeIFrame(iframe) {\r\n var iframeId = iframe.id;\r\n log(iframeId, 'Removing iFrame: ' + iframeId);\r\n\r\n try {\r\n // Catch race condition error with React\r\n if (iframe.parentNode) {\r\n iframe.parentNode.removeChild(iframe);\r\n }\r\n } catch (e) { }\r\n\r\n chkCallback(iframeId, 'closedCallback', iframeId);\r\n log(iframeId, '--');\r\n removeIframeListeners(iframe);\r\n}\r\n\r\nfunction getPagePosition(iframeId) {\r\n if (null === pagePosition) {\r\n pagePosition = {\r\n x:\r\n window.pageXOffset !== undefined\r\n ? window.pageXOffset\r\n : document.documentElement.scrollLeft,\r\n y:\r\n window.pageYOffset !== undefined\r\n ? window.pageYOffset\r\n : document.documentElement.scrollTop\r\n };\r\n log(\r\n iframeId,\r\n 'Get page position: ' + pagePosition.x + ',' + pagePosition.y\r\n );\r\n }\r\n}\r\n\r\nfunction setPagePosition(iframeId) {\r\n if (null !== pagePosition) {\r\n window.scrollTo(pagePosition.x, pagePosition.y);\r\n log(\r\n iframeId,\r\n 'Set page position: ' + pagePosition.x + ',' + pagePosition.y\r\n );\r\n unsetPagePosition();\r\n }\r\n}\r\n\r\nfunction unsetPagePosition() {\r\n pagePosition = null;\r\n}\r\n\r\nfunction resetIFrame(messageData) {\r\n function reset() {\r\n setSize(messageData);\r\n trigger('reset', 'reset', messageData.iframe, messageData.id);\r\n }\r\n log(\r\n messageData.id,\r\n 'Size reset requested by ' +\r\n ('init' === messageData.type ? 'host page' : 'iFrame')\r\n );\r\n getPagePosition(messageData.id);\r\n syncResize(reset, messageData, 'reset');\r\n}\r\n\r\nfunction setSize(messageData) {\r\n function setDimension(dimension) {\r\n if (!messageData.id) {\r\n log('undefined', 'messageData id not set');\r\n return;\r\n }\r\n messageData.iframe.style[dimension] = messageData[dimension] + 'px';\r\n log(\r\n messageData.id,\r\n 'IFrame (' +\r\n iframeId +\r\n ') ' +\r\n dimension +\r\n ' set to ' +\r\n messageData[dimension] +\r\n 'px'\r\n );\r\n }\r\n\r\n function chkZero(dimension) {\r\n //FireFox sets dimension of hidden iFrames to zero.\r\n //So if we detect that set up an event to check for\r\n //when iFrame becomes visible.\r\n\r\n /* istanbul ignore next */ //Not testable in PhantomJS\r\n if (!hiddenCheckEnabled && '0' === messageData[dimension]) {\r\n hiddenCheckEnabled = true;\r\n log(iframeId, 'Hidden iFrame detected, creating visibility listener');\r\n fixHiddenIFrames();\r\n }\r\n }\r\n\r\n function processDimension(dimension) {\r\n setDimension(dimension);\r\n chkZero(dimension);\r\n }\r\n\r\n var iframeId = messageData.iframe.id;\r\n\r\n if (settings[iframeId]) {\r\n if (settings[iframeId].sizeHeight) {\r\n processDimension('height');\r\n }\r\n if (settings[iframeId].sizeWidth) {\r\n processDimension('width');\r\n }\r\n }\r\n}\r\n\r\nfunction syncResize(func, messageData, doNotSync) {\r\n /* istanbul ignore if */ //Not testable in PhantomJS\r\n if (doNotSync !== messageData.type && requestAnimationFrame) {\r\n log(messageData.id, 'Requesting animation frame');\r\n requestAnimationFrame(func);\r\n } else {\r\n func();\r\n }\r\n}\r\n\r\nfunction trigger(calleeMsg, msg, iframe, id, noResponseWarning) {\r\n function postMessageToIFrame() {\r\n var target = settings[id] && settings[id].targetOrigin;\r\n log(\r\n id,\r\n '[' +\r\n calleeMsg +\r\n '] Sending msg to iframe[' +\r\n id +\r\n '] (' +\r\n msg +\r\n ') targetOrigin: ' +\r\n target\r\n );\r\n iframe.contentWindow.postMessage(msgId + msg, target);\r\n }\r\n\r\n function iFrameNotFound() {\r\n warn(id, '[' + calleeMsg + '] IFrame(' + id + ') not found');\r\n }\r\n\r\n function chkAndSend() {\r\n if (\r\n iframe &&\r\n 'contentWindow' in iframe &&\r\n null !== iframe.contentWindow\r\n ) {\r\n //Null test for PhantomJS\r\n postMessageToIFrame();\r\n } else {\r\n iFrameNotFound();\r\n }\r\n }\r\n\r\n function warnOnNoResponse() {\r\n function warning() {\r\n if (settings[id] && !settings[id].loaded && !errorShown) {\r\n errorShown = true;\r\n warn(\r\n id,\r\n 'IFrame has not responded within ' +\r\n settings[id].warningTimeout / 1000 +\r\n ' seconds. Check iFrameResizer.contentWindow.js has been loaded in iFrame. This message can be ignored if everything is working, or you can set the warningTimeout option to a higher value or zero to suppress this warning.'\r\n );\r\n }\r\n }\r\n\r\n if (\r\n !!noResponseWarning &&\r\n settings[id] &&\r\n !!settings[id].warningTimeout\r\n ) {\r\n settings[id].msgTimeout = setTimeout(\r\n warning,\r\n settings[id].warningTimeout\r\n );\r\n }\r\n }\r\n\r\n var errorShown = false;\r\n\r\n id = id || iframe.id;\r\n\r\n if (settings[id]) {\r\n chkAndSend();\r\n warnOnNoResponse();\r\n }\r\n}\r\n\r\nfunction createOutgoingMsg(iframeId) {\r\n return (\r\n iframeId +\r\n ':' +\r\n settings[iframeId].bodyMarginV1 +\r\n ':' +\r\n settings[iframeId].sizeWidth +\r\n ':' +\r\n settings[iframeId].log +\r\n ':' +\r\n settings[iframeId].interval +\r\n ':' +\r\n settings[iframeId].enablePublicMethods +\r\n ':' +\r\n settings[iframeId].autoResize +\r\n ':' +\r\n settings[iframeId].bodyMargin +\r\n ':' +\r\n settings[iframeId].heightCalculationMethod +\r\n ':' +\r\n settings[iframeId].bodyBackground +\r\n ':' +\r\n settings[iframeId].bodyPadding +\r\n ':' +\r\n settings[iframeId].tolerance +\r\n ':' +\r\n settings[iframeId].inPageLinks +\r\n ':' +\r\n settings[iframeId].resizeFrom +\r\n ':' +\r\n settings[iframeId].widthCalculationMethod\r\n );\r\n}\r\n\r\nfunction setupIFrame(iframe, options) {\r\n function setLimits() {\r\n function addStyle(style) {\r\n if (\r\n Infinity !== settings[iframeId][style] &&\r\n 0 !== settings[iframeId][style]\r\n ) {\r\n iframe.style[style] = settings[iframeId][style] + 'px';\r\n log(\r\n iframeId,\r\n 'Set ' + style + ' = ' + settings[iframeId][style] + 'px'\r\n );\r\n }\r\n }\r\n\r\n function chkMinMax(dimension) {\r\n if (\r\n settings[iframeId]['min' + dimension] >\r\n settings[iframeId]['max' + dimension]\r\n ) {\r\n throw new Error(\r\n 'Value for min' +\r\n dimension +\r\n ' can not be greater than max' +\r\n dimension\r\n );\r\n }\r\n }\r\n\r\n chkMinMax('Height');\r\n chkMinMax('Width');\r\n\r\n addStyle('maxHeight');\r\n addStyle('minHeight');\r\n addStyle('maxWidth');\r\n addStyle('minWidth');\r\n }\r\n\r\n function newId() {\r\n var id = (options && options.id) || defaults.id + count++;\r\n if (null !== document.getElementById(id)) {\r\n id = id + count++;\r\n }\r\n return id;\r\n }\r\n\r\n function ensureHasId(iframeId) {\r\n logId = iframeId;\r\n if ('' === iframeId) {\r\n iframe.id = iframeId = newId();\r\n logEnabled = (options || {}).log;\r\n logId = iframeId;\r\n log(\r\n iframeId,\r\n 'Added missing iframe ID: ' + iframeId + ' (' + iframe.src + ')'\r\n );\r\n }\r\n\r\n return iframeId;\r\n }\r\n\r\n function setScrolling() {\r\n log(\r\n iframeId,\r\n 'IFrame scrolling ' +\r\n (settings[iframeId] && settings[iframeId].scrolling\r\n ? 'enabled'\r\n : 'disabled') +\r\n ' for ' +\r\n iframeId\r\n );\r\n iframe.style.overflow =\r\n false === (settings[iframeId] && settings[iframeId].scrolling)\r\n ? 'hidden'\r\n : 'auto';\r\n switch (settings[iframeId] && settings[iframeId].scrolling) {\r\n case 'omit':\r\n break;\r\n case true:\r\n iframe.scrolling = 'yes';\r\n break;\r\n case false:\r\n iframe.scrolling = 'no';\r\n break;\r\n default:\r\n iframe.scrolling = settings[iframeId]\r\n ? settings[iframeId].scrolling\r\n : 'no';\r\n }\r\n }\r\n\r\n //The V1 iFrame script expects an int, where as in V2 expects a CSS\r\n //string value such as '1px 3em', so if we have an int for V2, set V1=V2\r\n //and then convert V2 to a string PX value.\r\n function setupBodyMarginValues() {\r\n if (\r\n 'number' ===\r\n typeof (settings[iframeId] && settings[iframeId].bodyMargin) ||\r\n '0' === (settings[iframeId] && settings[iframeId].bodyMargin)\r\n ) {\r\n settings[iframeId].bodyMarginV1 = settings[iframeId].bodyMargin;\r\n settings[iframeId].bodyMargin =\r\n '' + settings[iframeId].bodyMargin + 'px';\r\n }\r\n }\r\n\r\n function checkReset() {\r\n // Reduce scope of firstRun to function, because IE8's JS execution\r\n // context stack is borked and this value gets externally\r\n // changed midway through running this function!!!\r\n var firstRun = settings[iframeId] && settings[iframeId].firstRun,\r\n resetRequertMethod =\r\n settings[iframeId] &&\r\n settings[iframeId].heightCalculationMethod in resetRequiredMethods;\r\n\r\n if (!firstRun && resetRequertMethod) {\r\n resetIFrame({ iframe: iframe, height: 0, width: 0, type: 'init' });\r\n }\r\n }\r\n\r\n function setupIFrameObject() {\r\n //debugger;\r\n if (Function.prototype.bind && settings[iframeId]) {\r\n //Ignore unpolyfilled IE8.\r\n settings[iframeId].iframe.iFrameResizer = {\r\n close: closeIFrame.bind(null, settings[iframeId].iframe),\r\n\r\n removeListeners: removeIframeListeners.bind(\r\n null,\r\n settings[iframeId].iframe\r\n ),\r\n\r\n resize: trigger.bind(\r\n null,\r\n 'Window resize',\r\n 'resize',\r\n settings[iframeId].iframe\r\n ),\r\n\r\n moveToAnchor: function (anchor) {\r\n trigger(\r\n 'Move to anchor',\r\n 'moveToAnchor:' + anchor,\r\n settings[iframeId].iframe,\r\n iframeId\r\n );\r\n },\r\n\r\n sendMessage: function (message) {\r\n message = JSON.stringify(message);\r\n trigger(\r\n 'Send Message',\r\n 'message:' + message,\r\n settings[iframeId].iframe,\r\n iframeId\r\n );\r\n }\r\n };\r\n }\r\n }\r\n\r\n //We have to call trigger twice, as we can not be sure if all\r\n //iframes have completed loading when this code runs. The\r\n //event listener also catches the page changing in the iFrame.\r\n function init(msg) {\r\n function iFrameLoaded() {\r\n trigger('iFrame.onload', msg, iframe, undefined, true);\r\n checkReset();\r\n afterIFrameLoaded(iframe);\r\n }\r\n\r\n function createDestroyObserver(MutationObserver) {\r\n if (!iframe.parentNode) {\r\n return;\r\n }\r\n\r\n var destroyObserver = new MutationObserver(function (mutations) {\r\n mutations.forEach(function (mutation) {\r\n var removedNodes = Array.prototype.slice.call(mutation.removedNodes); // Transform NodeList into an Array\r\n removedNodes.forEach(function (removedNode) {\r\n if (removedNode === iframe) {\r\n //closeIFrame(iframe);\r\n }\r\n });\r\n });\r\n });\r\n destroyObserver.observe(iframe.parentNode, {\r\n childList: true\r\n });\r\n }\r\n\r\n var MutationObserver = getMutationObserver();\r\n if (MutationObserver) {\r\n createDestroyObserver(MutationObserver);\r\n }\r\n\r\n addEventListener(iframe, 'load', iFrameLoaded);\r\n trigger('init', msg, iframe, undefined, true);\r\n }\r\n\r\n function checkOptions(options) {\r\n if ('object' !== typeof options) {\r\n throw new TypeError('Options is not an object');\r\n }\r\n }\r\n\r\n function copyOptions(options) {\r\n //debugger;\r\n for (var option in defaults) {\r\n if (defaults.hasOwnProperty(option)) {\r\n settings[iframeId][option] = options.hasOwnProperty(option)\r\n ? options[option]\r\n : defaults[option];\r\n }\r\n }\r\n }\r\n\r\n function getTargetOrigin(remoteHost) {\r\n return '' === remoteHost || 'file://' === remoteHost ? '*' : remoteHost;\r\n }\r\n\r\n function processOptions(options) {\r\n options = options || {};\r\n //debugger;\r\n settings[iframeId] = {\r\n firstRun: true,\r\n iframe: iframe,\r\n remoteHost: iframe.src\r\n .split('/')\r\n .slice(0, 3)\r\n .join('/')\r\n };\r\n\r\n checkOptions(options);\r\n copyOptions(options);\r\n\r\n if (settings[iframeId]) {\r\n settings[iframeId].targetOrigin =\r\n true === settings[iframeId].checkOrigin\r\n ? getTargetOrigin(settings[iframeId].remoteHost)\r\n : '*';\r\n }\r\n }\r\n\r\n function beenHere() {\r\n return iframeId in settings && 'iFrameResizer' in iframe;\r\n }\r\n //debugger;\r\n var iframeId = ensureHasId(iframe.id);\r\n //debugger;\r\n\r\n if (!beenHere()) {\r\n processOptions(options);\r\n setScrolling();\r\n setLimits();\r\n setupBodyMarginValues();\r\n init(createOutgoingMsg(iframeId));\r\n setupIFrameObject();\r\n } else {\r\n warn(iframeId, 'Ignored iFrame, already setup.');\r\n }\r\n}\r\n\r\nfunction debouce(fn, time) {\r\n if (null === timer) {\r\n timer = setTimeout(function () {\r\n timer = null;\r\n fn();\r\n }, time);\r\n }\r\n}\r\n\r\nvar frameTimer = {};\r\nfunction debounceFrameEvents(fn, time, frameId) {\r\n if (!frameTimer[frameId]) {\r\n frameTimer[frameId] = setTimeout(function () {\r\n frameTimer[frameId] = null;\r\n fn();\r\n }, time);\r\n }\r\n} //Not testable in PhantomJS\r\n\r\n /* istanbul ignore next */ function fixHiddenIFrames() {\r\n function checkIFrames() {\r\n function checkIFrame(settingId) {\r\n function chkDimension(dimension) {\r\n return (\r\n '0px' ===\r\n (settings[settingId] && settings[settingId].iframe.style[dimension])\r\n );\r\n }\r\n\r\n function isVisible(el) {\r\n return null !== el.offsetParent;\r\n }\r\n\r\n if (\r\n settings[settingId] &&\r\n isVisible(settings[settingId].iframe) &&\r\n (chkDimension('height') || chkDimension('width'))\r\n ) {\r\n trigger(\r\n 'Visibility change',\r\n 'resize',\r\n settings[settingId].iframe,\r\n settingId\r\n );\r\n }\r\n }\r\n\r\n for (var settingId in settings) {\r\n checkIFrame(settingId);\r\n }\r\n }\r\n\r\n function mutationObserved(mutations) {\r\n log(\r\n 'window',\r\n 'Mutation observed: ' + mutations[0].target + ' ' + mutations[0].type\r\n );\r\n debouce(checkIFrames, 16);\r\n }\r\n\r\n function createMutationObserver() {\r\n var target = document.querySelector('body'),\r\n config = {\r\n attributes: true,\r\n attributeOldValue: false,\r\n characterData: true,\r\n characterDataOldValue: false,\r\n childList: true,\r\n subtree: true\r\n },\r\n observer = new MutationObserver(mutationObserved);\r\n\r\n observer.observe(target, config);\r\n }\r\n\r\n var MutationObserver = getMutationObserver();\r\n if (MutationObserver) {\r\n createMutationObserver();\r\n }\r\n}\r\n\r\nfunction resizeIFrames(event) {\r\n function resize() {\r\n sendTriggerMsg('Window ' + event, 'resize');\r\n }\r\n\r\n log('window', 'Trigger event: ' + event);\r\n debouce(resize, 16);\r\n} //Not testable in PhantomJS\r\n\r\n /* istanbul ignore next */ function tabVisible() {\r\n function resize() {\r\n sendTriggerMsg('Tab Visable', 'resize');\r\n }\r\n\r\n if ('hidden' !== document.visibilityState) {\r\n log('document', 'Trigger event: Visiblity change');\r\n debouce(resize, 16);\r\n }\r\n}\r\n\r\nfunction sendTriggerMsg(eventName, event) {\r\n function isIFrameResizeEnabled(iframeId) {\r\n return (\r\n settings[iframeId] &&\r\n 'parent' === settings[iframeId].resizeFrom &&\r\n settings[iframeId].autoResize &&\r\n !settings[iframeId].firstRun\r\n );\r\n }\r\n\r\n for (var iframeId in settings) {\r\n if (isIFrameResizeEnabled(iframeId)) {\r\n trigger(eventName, event, document.getElementById(iframeId), iframeId);\r\n }\r\n }\r\n}\r\n\r\nfunction setupEventListeners() {\r\n addEventListener(window, 'message', iFrameListener);\r\n\r\n addEventListener(window, 'resize', function () {\r\n resizeIFrames('resize');\r\n });\r\n\r\n addEventListener(document, 'visibilitychange', tabVisible);\r\n addEventListener(document, '-webkit-visibilitychange', tabVisible); //Andriod 4.4\r\n addEventListener(window, 'focusin', function () {\r\n resizeIFrames('focus');\r\n }); //IE8-9\r\n addEventListener(window, 'focus', function () {\r\n resizeIFrames('focus');\r\n });\r\n}\r\n\r\nexport function factory() {\r\n function init(options, element) {\r\n function chkType() {\r\n if (!element.tagName) {\r\n throw new TypeError('Object is not a valid DOM element');\r\n } else if ('IFRAME' !== element.tagName.toUpperCase()) {\r\n throw new TypeError(\r\n 'Expected