{"version":3,"sources":["components/text-editor/TextEditor.js","scenes/calculators/components/email-modal/EmailModal.js","services/theme.js","components/index.js","components/download/Download.js","components/header/components/user-actions/UserActions.js","components/header/components/navigation-menu/NavigationMenu.js","components/header/components/header/Header.js","components/footer/contents/Default.js","components/footer/contents/Aviva.js","components/footer/contents/Axa.js","components/footer/contents/Partnersand.js","components/footer/contents/Santam.js","components/footer/Footer.js","components/layout/Layout.js","features/ads/index.js","scenes/calculators/components/select-calculator-modal/SelectCalculatorModal.js","scenes/calculators/components/calculator-list/CalculatorList.js","scenes/calculators/components/calculator-list/MultiCalculatorList.js","scenes/calculators/components/saved-calculations/SavedCalculationsActions.js","scenes/calculators/components/saved-calculations/CalculationLabel.js","scenes/calculators/components/saved-calculations/CalculationStatus.js","scenes/calculators/components/saved-calculations/ClientName.js","scenes/calculators/components/saved-calculations/SavedCalculationsTable.js","scenes/calculators/components/saved-calculations/SavedCalculations.js","scenes/calculators/components/admin-section/AdminSection.js","scenes/calculators/components/screen-select/ScreenSelect.js","scenes/calculators/Calculators.js","scenes/calculators/scenes/calculator/components/insured-name-input/InsuredNameInput.js","components/ads/Ads.js","components/ads/assets/partnersand/BI-advBanner-left-partners&.png","components/ads/assets/partnersand/BI-advBanner-right-partners&.png","components/ads/assets/santam/Santam_Side_banner_link_left.jpg","components/ads/assets/santam/Santam_Side_banner_link_right.jpg","components/ads/assets/axa/axa-BI-calculator-left-banner.jpg","components/ads/assets/axa/axa-BI-calculator-right-banner.jpg","components/ads/assets/index.js","components/hooks/useWindowScroll.js","components/ads/SideAds.js","features/calculators/index.js","components/app/appSlice.js","store.js","components/spinner/Spinner.js","components/app/App.js","components/error-boundary/ErrorBoundary.js","scenes/calculators/scenes/calculator-references/CalculatorReferences.js","scenes/calculators/scenes/calculator-references/index.js","scenes/login/components/logout-page/LogoutPage.js","routes.js","index.js","services/auth.js","features/auth/index.js","services/crypto.js","scenes/calculators/calculatorsSlice.js","services/stats.js","components/tracker/Tracker.js","components/hooks/useWindowResize.js","services/api.js"],"names":["TextEditor","props","onChange","value","setState","toString","state","RichTextEditor","createValueFromString","createEmptyValue","className","toolbarConfig","display","INLINE_STYLE_BUTTONS","label","style","BLOCK_TYPE_DROPDOWN","BLOCK_TYPE_BUTTONS","this","placeholder","Component","EmailModal","visible","onClose","calculatorId","oldCalculatorId","userCountryId","buyGroupId","referenceId","calculationEmailParams","type","callback","Form","useForm","form","useState","loading","setLoading","sendingEmail","setSendingEmail","templateValue","setTemplateValue","insuredName","useSelector","calculators","eventTracker","useAnalyticsEventTracker","isMobile","useWindowResize","useEffect","fetchClientEmailTemplate","a","fetchClientEmail","emailData","refId","fetchCalculationEmailTemplate","fetchCalculationEmail","fetchResultEmailTemplate","fetchResultEmail","handleSendEmail","values","sendCalculatoionEmail","InsuredName","encrypt","EmailTo","EmailType","ResultReferenceId","typeName","stats","statLabels","resultEmail","clientLink","addStats","projectId","notification","success","key","message","error","title","afterClose","closeIcon","keyboard","maskClosable","closable","wrapClassName","cx","theme","siteTheme","destroyOnClose","onCancel","width","footer","onClick","disabled","validateFields","then","resetFields","active","paragraph","rows","name","autoComplete","preserve","Item","initialValue","EmailFrom","rules","required","addonBefore","icon","faEnvelopeSquare","size","isUsTheme","InsuredNameInput","faAt","Subject","readOnly","AttachmentFileName","noStyle","EmailBody","THEME_KEY","THEMES","axa","aviva","santam","partnersand","us","ca","default","LOGOS","image","linkType","url","subDomain","subDomainUrl","window","location","hostname","split","domainUrl","localStorage","getItem","logo","setSiteTheme","setItem","includes","slice","Download","children","onDownload","fileName","downloading","setDownloading","download","open","duration","res","blob","File","data","headers","FileSaver","saveAs","close","resultDownload","gaLabels","connect","user","auth","byPassUrl","isUserClient","selectIsUserClient","dispatch","useDispatch","isSharedAccount","byPassMyAccountAsync","userInfo","session","username","faUserAlt","isLoggedIn","href","target","rel","ssoLogoutUrl","to","mobile","show","isUserAdmin","selectIsUserAdmin","adminModuleUrl","screen","SCREEN_LABELS","Select","Calculators","SavedCalculations","showMobileMenu","setShowMobileMenu","src","alt","NavigationMenu","faTimes","faBars","Default","xs","md","faFacebookF","faYoutube","faLinkedinIn","Aviva","Axa","faTwitter","Partnersand","faLinkedin","Santam","footerContents","copyRightExcludedThemes","DefaultCopyRight","Date","getFullYear","Footer","span","Content","Layout","Header","BASE_URL","api","urls","base","fetchBanner","userId","bannerId","axios","get","resBanner","Error","fetchBannerAsync","createAsyncThunk","adsSlice","createSlice","initialState","media","adsStatus","reducers","clearAds","extraReducers","builder","addCase","pending","rejected","fulfilled","payload","actions","SelectCalculatorModal","setEmailState","map","CalculatorId","OldCalculatorId","MultiCalculatorPolicyName","MultiCalculatorPolicyDescription","stringSorter","b","stringA","toUpperCase","stringB","CalculatorList","calculatorList","handleMultiCalculators","pagination","emailState","samePolicyCalculators","calculatorSelectModalState","setCalculatorSelectModalState","columns","dataIndex","sorter","insurer","filters","Set","InsurerName","text","onFilter","record","filterSearch","policy","PolicyName","render","IsPolicyArchived","PolicyCode","PolicyDate","CalculatorName","faExclamationTriangle","color","faInfoCircle","align","DocumentPath","QuestionsPdfPath","faFilePdf","fetchDataInputPdf","faCalculator","SamePolicyCalculators","faEnvelope","length","cursor","action","Action","faPlay","marginRight","CalculatorPath","onSend","disableCalculationResult","locale","emptyText","padding","sticky","bordered","showSorterTooltip","dataSource","MultiCalculatorPolicy","IsActive","pdf","email","PolicyInfo","rowClassName","MultiCalculatorList","description","documentLink","calculator","SavedCalculationsActions","navigate","useNavigate","handleDuplicateClick","duplicateCalculationAsync","fetchResultsSummary","handleRemoveClick","fetchResultPdf","decrypt","status","faDownload","onEmailClick","stepId","firstStepId","lastUpdatedStepId","onConfirm","okText","cancelText","faCopy","faTrash","path","resultPagePath","CalculationLabel","inputRef","useRef","setVisible","editable","setEditable","setDescription","current","focus","handleEdit","handleUpdate","updateCalculationDescription","onMouseEnter","onMouseLeave","defaultValue","e","trim","ref","onKeyPress","faShare","faUpload","onKeyDown","faPen","CalculationStatus","newUpdate","faCheckCircle","ClientName","updatedByClient","count","offset","new","dateSorter","moment","clientName","responsive","calculatorName","calculationColumn","lastUpdate","utc","created","local","format","emailedTo","_","versionData","results","setEmailModalState","updatedReferencesByClient","ReferenceId","ResultId","Version","EmailAddress","Status","CreatedDate","LastUpdatedStepId","FistStepId","UpdatedDate","Description","resultId","Values","isResultUpdatedByClient","IsResultUpdatedByClient","sort","VersionTable","SavedCalculationTable","updateViewedReferences","expandable","onExpand","expanded","expandedRowRender","resultsSummary","rowExpandable","Search","Input","lastDuplicatedCalculation","selectResultSummaryByCalculator","ClientUpdatedResults","setDataSource","emailModalState","parsedResultsSummary","useMemo","parentGroupId","onSearch","filtered","filter","toLowerCase","AdminSection","fetchCalculatorList","calcListFilter","setCalcListFilter","defaultCountry","countries","setCountries","buyerGroups","setBuyerGroups","selectedCountry","setSelectedCountry","selectedBuyerGroup","setSelectedBuyerGroup","handleFilterChange","checked","fetchCountriesAsync","fetchCountries","resCountries","countryOption","c","CountryName","ID","fetchBuyerGroupsAsync","fetchBuyerGroups","resBuyerGroup","Array","isArray","buyerGroupOption","BuyerGroup","Id","showSearch","marginLeft","filterOption","input","option","options","showArchived","showInActive","ScreenSelect","selectScreen","screenLabels","faBookmark","countryId","buygroupId","loadingCalculatorList","calculatorListStatus","loadingCalculatorResultsSummary","calculatorResultsStatus","calcId","useParams","useLocation","selectedScreen","setSelectedScreen","multiCalculators","setMultiCalculators","setCalculators","fetchResultsSummaryAsync","buyerGroupId","fetchCalculatorsListAsync","list","clearCalculatorStep","selectedPolicyMultiCalculators","find","calc","Ads","selected","overflowCount","Option","restProps","isClient","setInsuredName","ADS_EXCLUDED_THEMES","ads","adsLoading","FilePath","preview","country","leftImage","rightImage","partnersandAds","partnersandLeftImg","partnersandRightImg","santamAds","santamLeftImg","santamRightImg","axaAds","axaLeftImg","axaRightImg","useWindowScroll","scrollPosition","setScrollPosition","onScroll","scrollTop","pageYOffset","document","body","documentElement","addEventListener","removeEventListener","themedAds","BannerLink","side","banner","urlRight","SideAds","banners","effect","autoplay","pauseOnHover","autoplaySpeed","dots","LayoutWithSideAds","height","getBannerPosition","BANNER_IMAGE_HEIGHT","lg","offsetTop","usaBase","API_LMI_STAT","stat","timeStamp","getTime","params","resCalculatorList","reason","fetchCalculatorReference","id","reqUrl","post","resCalculator","StatusCodes","NOT_FOUND","replace","fetchCalculatorReferenceById","fetchCalculatorStep","resCalculatorStep","updateCalculatorStep","Promise","resolve","calculateCalculatorResults","fetchCalculatorResults","resCalculatorResults","fetchLastStepId","fetchIndustries","keyword","resIndustryResults","host","resClientEmail","resResultEmail","resCalculationEmail","responseType","resResultPdf","fetchGlossary","definition","buyerGroup","fetchInsuredNameList","duplicateCalculation","put","ReferenceNumber","refIds","AccessRequestUrl","URL","encryptedData","searchParams","SESSION_KEY","initialized","appSlice","initializeApp","setTheme","rootReducer","app","calculcatorsReducer","authReducer","adsReducer","configureStore","reducer","devTools","process","init","checkUrlAccess","isClientAccess","pathname","replacedPath","search","interceptors","response","use","UNAUTHORIZED","destroy","logout","reject","token","linkgenToken","loginWithEncryptedDataAsync","grantType","linkgen","defaults","common","Authorization","fetchUserAsync","Spinner","ErrorBoundary","hasError","info","console","CalcalatorReferences","pageviewTracker","useAnalyticsPageviewTracker","loadingReference","setLoadingReference","calculatorReference","fetchCalculatorRef","fetchCalculatorReferenceAsync","calculatorStarted","FirstStepId","PolicyId","tip","LogoutPage","Home","lazy","LoginScene","Calculator","NotFound","PrivateRoute","clientAccess","RouteComponent","component","HomepageRoute","redirectPath","Tracker","fallback","element","config","maxCount","ReactDOM","store","getElementById","SESSION_USERNAME","SESSION_EXPIRY","SSO_BASE_URL","setAuthorizationHeader","err","expiry","now","callbackLoginUrl","origin","callbackLogoutUrl","ssoLoginUrl","login","removeItem","policyId","isManualLogin","MSG_ERROR","MSG_ERROR_LOGIN_FAIL","MSG_ERROR_USER_PROFILE_FAIL","MSG_ERROR_NOT_FOUND","API_LMI_AUTH","API_LMI_USER","API_RESET_PASSWORD","reset","loginAsync","password","rejectWithValue","grant_type","client_id","qs","stringify","resToken","access_token","resUser","expires_in","BAD_REQUEST","encrypted_data","resetPasswordAsync","loginSlice","loginStatus","resetPasswordStatus","resetPasswordModalOpen","setUser","openResetPasswordModal","personName","userName","roles","some","role","roleName","enc","Utf8","parse","vector","AES","iv","mode","CBC","pad","Pkcs7","encrypted","decrypted","calculatorStep","calculatorResults","calculatorListError","undefined","lastStepId","fetchCalculatorReferenceByIdAsync","fetchCalculatorStepAsync","updateCalculatorStepAsync","caculateCalculatorResultsAsync","fetchCalculatorResultsAsync","fetchLastStepIdAsync","calculatorSlice","clearCalculatorList","Questions","clearCalculatorResults","clearCalculatorReference","clearResultsSummary","clearInsuredName","createSelector","ResultsSummaryDetails","summary","groupedInsuredName","groupBy","result","ParentGroupId","Object","entries","grouped","groupedByCalculator","Insurer","flat","sso","clientLinkClicked","calculatorCompleted","GA3_TRACKING_ID","GA4_MEASUREMENT_ID","category","ReactGA","event","ReactGA4","pageview","send","hitType","page","currentStepNumber","initialize","testMode","gaOptions","cookieFlags","clientId","set","dimension1","gtag","windowSize","setWindowSize","handleResize","innerWidth","innerHeight","baseUrl","usaBaseUrl"],"mappings":"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","file":"static/js/main.ef6f49fe.chunk.js","sourcesContent":["/* eslint-disable react/destructuring-assignment */\n/* eslint-disable react/require-default-props */\n/* eslint-disable react/static-property-placement */\nimport React, { Component } from 'react';\nimport { PropTypes } from 'prop-types';\nimport RichTextEditor from 'react-rte';\nimport './text-editor.less';\n\nconst EMPTY_STRING = '<p><br></p>';\n\n// https://github.com/sstur/react-rte/pull/434\n// eslint-disable-next-line no-unused-vars\nconst getColorEntity = (element, inlineCreators) => {\n  if (element && element.style && element.style.color) {\n    return inlineCreators.Entity('color', { color: element.style.color });\n  }\n  if (element && element.style && element.style.backgroundColor) {\n    return inlineCreators.Entity('backgroundColor', {\n      backgroundColor: element.style.backgroundColor,\n    });\n  }\n  return element;\n};\n\nclass TextEditor extends Component {\n  static propTypes = {\n    onChange: PropTypes.func,\n  };\n\n  constructor(props) {\n    super(props);\n\n    this.state = {\n      value: this.props.value\n        ? RichTextEditor.createValueFromString(this.props.value, 'html')\n        : RichTextEditor.createEmptyValue(),\n    };\n  }\n\n  onChange = (value) => {\n    this.setState({\n      value,\n    });\n    if (this.props.onChange) {\n      this.props.onChange(value.toString('html'));\n      if (value.toString('html') === EMPTY_STRING) this.props.onChange('');\n    }\n  };\n\n  render() {\n    const toolbarConfig = {\n      // Optionally specify the groups to display (displayed in the order listed).\n      display: [\n        'INLINE_STYLE_BUTTONS',\n        'BLOCK_TYPE_BUTTONS',\n        'BLOCK_TYPE_DROPDOWN',\n        'HISTORY_BUTTONS',\n      ],\n      INLINE_STYLE_BUTTONS: [\n        { label: 'Bold', style: 'BOLD', className: 'custom-css-class' },\n        { label: 'Italic', style: 'ITALIC' },\n      ],\n      BLOCK_TYPE_DROPDOWN: [\n        { label: 'Normal', style: 'unstyled' },\n        { label: 'Heading Large', style: 'header-one' },\n        { label: 'Heading Medium', style: 'header-two' },\n        { label: 'Heading Small', style: 'header-three' },\n      ],\n      BLOCK_TYPE_BUTTONS: [\n        { label: 'UL', style: 'unordered-list-item' },\n        { label: 'OL', style: 'ordered-list-item' },\n      ],\n    };\n    return (\n      <RichTextEditor\n        className=\"text-editor\"\n        toolbarConfig={toolbarConfig}\n        value={this.state.value}\n        onChange={this.onChange}\n        placeholder={this.props.placeholder}\n      />\n    );\n  }\n}\n\nexport default TextEditor;\n","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable react/jsx-boolean-value */\nimport { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Modal, Form, Input, Button, Skeleton, notification } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faEnvelopeSquare, faAt } from '@fortawesome/free-solid-svg-icons';\nimport cx from 'classnames';\nimport TextEditor from '../../../../components/text-editor/TextEditor';\nimport useWindowResize from '../../../../components/hooks/useWindowResize';\nimport { useAnalyticsEventTracker } from '../../../../components/tracker/Tracker';\nimport theme from '../../../../services/theme';\nimport { InsuredNameInput } from '../../scenes/calculator/components/insured-name-input/InsuredNameInput';\nimport stats from '../../../../services/stats';\nimport './email-modal.less';\n\nimport {\n  fetchClientEmail,\n  fetchResultEmail,\n  fetchCalculationEmail,\n  sendCalculatoionEmail,\n  addStats,\n} from '../../../../features/calculators';\nimport { encrypt } from '../../../../services/crypto';\n\nconst PROJECT_ID = process.env.REACT_APP_PROJECT_ID;\n\nconst EmailModal = ({\n  visible,\n  onClose,\n  calculatorId,\n  oldCalculatorId,\n  userCountryId,\n  buyGroupId,\n  referenceId,\n  calculationEmailParams,\n  type,\n  callback,\n}) => {\n  const [form] = Form.useForm();\n  const [loading, setLoading] = useState(false);\n  const [sendingEmail, setSendingEmail] = useState(false);\n  const [templateValue, setTemplateValue] = useState();\n  const insuredName = useSelector((state) => state.calculators.insuredName);\n  const eventTracker = useAnalyticsEventTracker('Email');\n  const { isMobile } = useWindowResize();\n\n  useEffect(() => {\n    setSendingEmail(false);\n    setLoading(true);\n\n    if (type === 'client' && visible && calculatorId) {\n      const fetchClientEmailTemplate = async () => {\n        const emailData = await fetchClientEmail({\n          calculatorId,\n          oldCalculatorId,\n          userCountryId,\n          buyGroupId,\n        });\n        setTemplateValue(emailData);\n        setLoading(false);\n      };\n      fetchClientEmailTemplate();\n    }\n\n    if (\n      type === 'share' &&\n      visible &&\n      (referenceId || calculationEmailParams?.refId)\n    ) {\n      const fetchCalculationEmailTemplate = async () => {\n        const emailData = await fetchCalculationEmail({\n          ...calculationEmailParams,\n        });\n        setTemplateValue(emailData);\n        setLoading(false);\n      };\n      fetchCalculationEmailTemplate();\n    }\n\n    if (type === 'result' && visible && referenceId) {\n      const fetchResultEmailTemplate = async () => {\n        const emailData = await fetchResultEmail({\n          refId: referenceId,\n          insuredName,\n        });\n        setTemplateValue(emailData);\n        setLoading(false);\n      };\n      fetchResultEmailTemplate();\n    }\n  }, [\n    visible,\n    calculatorId,\n    referenceId,\n    oldCalculatorId,\n    type,\n    userCountryId,\n    buyGroupId,\n    calculationEmailParams,\n  ]);\n\n  const handleSendEmail = async (values) => {\n    try {\n      setSendingEmail(true);\n      if (type === 'share' || type === 'client') {\n        // EmailType 1 to save the recepient email\n        await sendCalculatoionEmail({\n          values: {\n            ...values,\n            InsuredName: encrypt(values.InsuredName),\n            EmailTo: encrypt(values.EmailTo),\n            EmailType: 1,\n          },\n          referenceId: templateValue?.ResultReferenceId || referenceId,\n        });\n      } else {\n        await sendCalculatoionEmail({\n          values: {\n            ...values,\n            EmailTo: encrypt(values.EmailTo),\n          },\n          referenceId: templateValue?.ResultReferenceId || referenceId,\n        });\n      }\n      setSendingEmail(false);\n      onClose();\n\n      const typeName =\n        type === 'result'\n          ? stats.statLabels.resultEmail\n          : stats.statLabels.clientLink;\n      addStats({\n        projectId: +PROJECT_ID,\n        typeName,\n      });\n      eventTracker(typeName, typeName);\n      notification.success({\n        key: 'sending_success',\n        message: 'Email has been sent',\n      });\n    } catch (err) {\n      onClose();\n      notification.error({ key: 'sending_fail', message: 'Email failed' });\n    }\n  };\n\n  return (\n    <Modal\n      title=\"Compose Email\"\n      afterClose={callback}\n      closeIcon={false}\n      keyboard={false}\n      maskClosable={false}\n      closable={false}\n      wrapClassName={cx('send-email-modal', {\n        [theme.siteTheme]: theme.siteTheme,\n      })}\n      visible={visible}\n      destroyOnClose={true}\n      onCancel={() => onClose(templateValue?.ResultReferenceId)}\n      width={isMobile ? '90%' : '60%'}\n      footer={\n        <>\n          <Button\n            type=\"default\"\n            onClick={() => onClose(templateValue?.ResultReferenceId)}\n            disabled={sendingEmail || loading}\n          >\n            Cancel\n          </Button>\n          <Button\n            type=\"primary\"\n            loading={sendingEmail}\n            disabled={sendingEmail || loading}\n            onClick={() => {\n              form.validateFields().then((values) => {\n                form.resetFields();\n                handleSendEmail({\n                  ...templateValue,\n                  ...values,\n                });\n              });\n            }}\n          >\n            Send Email\n          </Button>\n        </>\n      }\n    >\n      {loading ? (\n        <Skeleton active paragraph={{ rows: 6 }} />\n      ) : (\n        <Form name=\"send-email\" form={form} autoComplete=\"off\" preserve={false}>\n          <Form.Item\n            label=\"Broker's email (will be added to CC of Email)\"\n            name=\"Emailfrom\"\n            initialValue={templateValue?.EmailFrom}\n            rules={[\n              {\n                required: true,\n                type: 'email',\n                message: 'Please input valid email address',\n              },\n            ]}\n            className=\"send-email-form-item\"\n          >\n            <Input\n              addonBefore={<FontAwesomeIcon icon={faEnvelopeSquare} />}\n              size=\"large\"\n              placeholder=\"broker's email\"\n            />\n          </Form.Item>\n          {theme.isUsTheme && type === 'client' && (\n            <Form.Item\n              label=\"Insured Name\"\n              name=\"InsuredName\"\n              rules={[\n                {\n                  required: true,\n                  message: 'Please input insured name',\n                },\n              ]}\n              className=\"send-email-form-item\"\n            >\n              <InsuredNameInput />\n            </Form.Item>\n          )}\n          <Form.Item\n            label=\"Client's Email\"\n            name=\"EmailTo\"\n            rules={[\n              {\n                required: true,\n                type: 'email',\n                message: 'Please input valid email address',\n              },\n            ]}\n            className=\"send-email-form-item\"\n          >\n            <Input\n              addonBefore={<FontAwesomeIcon icon={faAt} />}\n              size=\"large\"\n              placeholder=\"to\"\n            />\n          </Form.Item>\n          <Form.Item\n            label=\"Subject\"\n            name=\"Subject\"\n            rules={[\n              {\n                required: true,\n                message: 'Please input email subject',\n              },\n            ]}\n            className=\"send-email-form-item\"\n            initialValue={templateValue?.Subject}\n          >\n            <Input\n              size=\"large\"\n              placeholder=\"subject\"\n              readOnly={type === 'result'}\n            />\n          </Form.Item>\n          {type === 'result' && (\n            <Form.Item\n              label=\"Attachment File Name\"\n              name=\"AttachmentFileName\"\n              initialValue={templateValue?.AttachmentFileName}\n              className=\"send-email-form-item\"\n            >\n              <Input\n                size=\"large\"\n                placeholder=\"to\"\n                readOnly={type === 'result'}\n              />\n            </Form.Item>\n          )}\n\n          <Form.Item\n            name=\"EmailBody\"\n            noStyle\n            rules={[\n              {\n                required: true,\n                message: 'Please input email content',\n              },\n            ]}\n            className=\"send-email-form-item\"\n            initialValue={templateValue?.EmailBody}\n          >\n            <TextEditor />\n          </Form.Item>\n        </Form>\n      )}\n    </Modal>\n  );\n};\n\nexport default EmailModal;\n","const THEME_KEY = 'bic_theme';\n\nexport const THEMES = {\n  axa: 'axa',\n  aviva: 'aviva',\n  santam: 'santam',\n  partnersand: 'partnersand',\n  us: 'us',\n  ca: 'ca',\n  default: 'default',\n};\n\nexport const LOGOS = {\n  [THEMES.default]: { image: '/assets/logo.svg', linkType: 'local', url: '/' },\n  [THEMES.us]: { image: '/assets/logo.svg', linkType: 'local', url: '/' },\n  [THEMES.aviva]: {\n    image: '/assets/aviva-logo.png',\n    url: 'https://connect.avivab2b.co.uk/broker/',\n    linkType: 'external',\n  },\n  [THEMES.axa]: {\n    image: '/assets/axa-logo.png',\n    url: '/calculators',\n    linkType: 'local',\n  },\n  [THEMES.santam]: {\n    image: '/assets/santam-logo.jpg',\n    url: 'https://www.santam.co.za/',\n    linkType: 'external',\n  },\n  [THEMES.partnersand]: {\n    image: '/assets/partnersand-logo.png',\n    url: '/calculators',\n    linkType: 'local',\n  },\n};\n\nconst themeSelector = (subDomain) => {\n  if (subDomain.includes(THEMES.axa)) {\n    return THEMES.axa;\n  }\n  if (subDomain.includes(THEMES.aviva)) {\n    return THEMES.aviva;\n  }\n  if (subDomain.includes(THEMES.santam)) {\n    return THEMES.santam;\n  }\n  if (subDomain.includes(THEMES.partnersand)) {\n    return THEMES.partnersand;\n  }\n  if (subDomain.includes(THEMES.us) || subDomain.slice(0, 2) === THEMES.ca) {\n    return THEMES.us;\n  }\n  return THEMES.default;\n};\n\nexport default {\n  get subDomain() {\n    const subDomainUrl = window.location.hostname.split('.')[0];\n    const domainUrl = window.location.hostname.split('.')[1];\n    return `${subDomainUrl}${domainUrl}`;\n  },\n  get siteTheme() {\n    return localStorage.getItem(THEME_KEY);\n  },\n  get logo() {\n    return LOGOS[this.siteTheme];\n  },\n  get isUsTheme() {\n    return this.siteTheme === THEMES.us;\n  },\n  setSiteTheme() {\n    localStorage.setItem(THEME_KEY, themeSelector(this.subDomain));\n  },\n};\n","/* eslint-disable import/prefer-default-export */\nexport { default as Layout } from './layout/Layout';\n","import React, { useState } from 'react';\nimport { notification, Spin } from 'antd';\nimport FileSaver from 'file-saver';\nimport { useAnalyticsEventTracker } from '../tracker/Tracker';\nimport stats from '../../services/stats';\n\nconst PROJECT_ID = process.env.REACT_APP_PROJECT_ID;\nconst Download = ({ children, onDownload, fileName, addStats }) => {\n  const [downloading, setDownloading] = useState(false);\n  const eventTracker = useAnalyticsEventTracker('Download');\n\n  const download = async () => {\n    if (downloading) {\n      return;\n    }\n    setDownloading(true);\n    notification.open({\n      key: 'downloading',\n      message: 'Downloading',\n      duration: 0,\n      icon: <Spin />,\n    });\n    try {\n      const res = await onDownload();\n      const blob = new File([res.data], { type: res.headers['content-type'] });\n      FileSaver.saveAs(blob, fileName);\n      notification.close('downloading');\n      if (addStats) {\n        addStats({\n          typeName: stats.statLabels.resultDownload,\n          projectId: +PROJECT_ID,\n        });\n      }\n      eventTracker('ResultDownload', stats.gaLabels.resultDownload);\n\n      notification.success({\n        key: 'download_success',\n        message: 'Download succeeded',\n      });\n    } catch (err) {\n      notification.close('downloading');\n      notification.error({ key: 'download_fail', message: 'Download failed' });\n    }\n    setDownloading(false);\n  };\n\n  return children(download, downloading);\n};\n\nexport default Download;\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect } from 'react';\nimport { useDispatch, connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { Button, Tooltip } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faUserAlt } from '@fortawesome/free-solid-svg-icons';\nimport {\n  byPassMyAccountAsync,\n  selectIsUserClient,\n} from '../../../../features/auth';\nimport auth from '../../../../services/auth';\nimport './userActions.less';\n\nconst UserActions = ({ user, byPassUrl, isUserClient }) => {\n  const dispatch = useDispatch();\n  const isSharedAccount = user?.user?.isSharedAccount;\n\n  useEffect(() => {\n    // if user is client then should not request byPassUrl\n    if (isSharedAccount === false && user && !byPassUrl && !isUserClient) {\n      dispatch(byPassMyAccountAsync());\n    }\n  }, []);\n\n  const userInfo = () => (\n    <>\n      {`Welcome ${auth.session.username}`}\n      <FontAwesomeIcon icon={faUserAlt} className=\"site-header-user-icon\" />\n    </>\n  );\n\n  return auth.isLoggedIn ? (\n    <div className=\"site-header-user-actions\">\n      <div className=\"site-header-user\">\n        {!isUserClient && (\n          <span className=\"site-header-username\">\n            {isSharedAccount === false && byPassUrl?.url ? (\n              <Tooltip title=\"Click here to manage your account\">\n                <a\n                  href={byPassUrl.url}\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                >\n                  {userInfo()}\n                </a>\n              </Tooltip>\n            ) : (\n              userInfo()\n            )}\n          </span>\n        )}\n      </div>\n      <Button className=\"site-header-btn-logout\" type=\"link\">\n        <a href={auth.ssoLogoutUrl}>LOG OUT</a>\n      </Button>\n    </div>\n  ) : (\n    <Link to=\"/login\">\n      <Button type=\"link\">LOG IN</Button>\n    </Link>\n  );\n};\n\nconst mapStateToProps = (state) => ({\n  user: state.auth.user,\n  byPassUrl: state.auth.byPassUrl,\n  isUserClient: selectIsUserClient(state),\n});\n\nexport default connect(mapStateToProps)(UserActions);\n","import { Link } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport auth from '../../../../services/auth';\nimport UserActions from '../user-actions/UserActions';\nimport {\n  selectIsUserClient,\n  selectIsUserAdmin,\n} from '../../../../features/auth';\nimport theme, { THEMES } from '../../../../services/theme';\nimport { SCREEN_LABELS } from '../../../../scenes/calculators/Calculators';\n\nexport default ({ mobile, show }) => {\n  const isUserClient = useSelector(selectIsUserClient);\n  const isUserAdmin = useSelector(selectIsUserAdmin);\n  const adminModuleUrl = theme.isUsTheme\n    ? 'https://usaadmin.bicalculator.com/Admin/Calculators'\n    : 'https://admin.bicalculator.com/Admin/Calculators';\n  return (\n    <nav\n      className={`site-header-nav-container ${mobile ? 'mobile' : ''} ${\n        show ? 'open' : ''\n      }`}\n    >\n      <ul className=\"site-header-nav\">\n        {auth.isLoggedIn && !isUserClient && theme.isUsTheme && (\n          <li className=\"site-header-nav-item\">\n            <Link to=\"/calculators\" state={{ screen: SCREEN_LABELS.Select }}>\n              HOME\n            </Link>\n          </li>\n        )}\n        {auth.isLoggedIn && !isUserClient && (\n          <li className=\"site-header-nav-item\">\n            <Link\n              to=\"/calculators\"\n              state={{ screen: SCREEN_LABELS.Calculators }}\n            >\n              CALCULATOR LIST\n            </Link>\n          </li>\n        )}\n        {auth.isLoggedIn && !isUserClient && theme.isUsTheme && (\n          <li className=\"site-header-nav-item\">\n            <Link\n              to=\"/calculators\"\n              state={{ screen: SCREEN_LABELS.SavedCalculations }}\n            >\n              SAVED CALCULATIONS\n            </Link>\n          </li>\n        )}\n        {auth.isLoggedIn && isUserAdmin && (\n          <li className=\"site-header-nav-item\">\n            <a href={adminModuleUrl} target=\"_blank\" rel=\"noreferrer noopener\">\n              ADMINISTRATION\n            </a>\n          </li>\n        )}\n        {theme.siteTheme !== THEMES.aviva && (\n          <li className=\"site-header-nav-item\">\n            <a\n              href=\"https://biexplained.com/\"\n              target=\"_blank\"\n              rel=\"noreferrer noopener\"\n            >\n              BI EXPLAINED\n            </a>\n          </li>\n        )}\n\n        {theme.siteTheme === THEMES.santam && (\n          <li className=\"site-header-nav-item\">\n            <a\n              href=\"https://www.youtube.com/watch?v=jXLW9O4PXnE&feature=youtu.be\"\n              target=\"_blank\"\n              rel=\"noreferrer noopener\"\n            >\n              SITE TOUR\n            </a>\n          </li>\n        )}\n      </ul>\n      <UserActions />\n    </nav>\n  );\n};\n","import { useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Button } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faBars, faTimes } from '@fortawesome/free-solid-svg-icons';\nimport NavigationMenu from '../navigation-menu/NavigationMenu';\nimport useWindowResize from '../../../hooks/useWindowResize';\nimport theme from '../../../../services/theme';\nimport './header.less';\n\nexport default () => {\n  const { width } = useWindowResize();\n  const [showMobileMenu, setShowMobileMenu] = useState(false);\n\n  return (\n    <header className=\"site-header\">\n      <div className=\"site-header-container\">\n        <div className=\"site-header-logo\">\n          {theme.logo.linkType === 'local' ? (\n            <Link to={theme.logo.url}>\n              <img src={theme.logo.image} alt=\"logo\" />\n            </Link>\n          ) : (\n            <a href={theme.logo.url} target=\"_blank\" rel=\"noopener noreferrer\">\n              <img src={theme.logo.image} alt=\"logo\" />\n            </a>\n          )}\n        </div>\n        <NavigationMenu mobile={width < 768} show={showMobileMenu} />\n        {width < 768 && (\n          <Button\n            type=\"link\"\n            className=\"btn-hamburger\"\n            onClick={() => setShowMobileMenu(!showMobileMenu)}\n          >\n            <FontAwesomeIcon\n              icon={showMobileMenu ? faTimes : faBars}\n              size=\"lg\"\n            />\n          </Button>\n        )}\n      </div>\n    </header>\n  );\n};\n","import { Col, Row } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  faFacebookF,\n  faLinkedinIn,\n  faYoutube,\n} from '@fortawesome/free-brands-svg-icons';\n\nconst Default = () => (\n  <Row>\n    <Col className=\"site-footer-nav-container\" xs={14} md={18}>\n      <ul className=\"site-footer-nav\">\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://www.lmigroup.io/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            OUR SERVICES\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://www.lmigroup.io/our-team/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            OUR EXPERTS\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/terms-conditions/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            TERMS &amp; CONDITIONS\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/financial-services-guide/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            FINANCIAL SERVICES GUIDE\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/privacy/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            PRIVACY &amp; SECURITY\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/complaints/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            COMPLAINTS\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/contact-us/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            CONTACT US\n          </a>\n        </li>\n      </ul>\n    </Col>\n    <Col xs={10} md={6}>\n      <ul className=\"site-footer-social-links\">\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://www.facebook.com/LMIGroupPtyLtd/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faFacebookF} />\n          </a>\n        </li>\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://www.youtube.com/user/LMIGROUP\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faYoutube} />\n          </a>\n        </li>\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://www.linkedin.com/company/lmi-group/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faLinkedinIn} />\n          </a>\n        </li>\n      </ul>\n    </Col>\n  </Row>\n);\n\nexport default Default;\n","import { Col, Row } from 'antd';\n\nconst Aviva = () => (\n  <Row>\n    <Col className=\"site-footer-nav-container\" xs={14} md={18}>\n      <ul className=\"site-footer-nav\">\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/terms-conditions/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            Terms &amp; Conditions\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/privacy/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            Privacy &amp; Security\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://connect.avivab2b.co.uk/public/broker/contact-us/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            Contact Us\n          </a>\n        </li>\n      </ul>\n    </Col>\n  </Row>\n);\n\nexport default Aviva;\n","import { Col, Row } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faTwitter, faYoutube } from '@fortawesome/free-brands-svg-icons';\n\nconst Axa = () => (\n  <Row>\n    <Col className=\"site-footer-nav-container\" xs={14} md={18}>\n      <ul className=\"site-footer-nav\">\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/terms-conditions/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            TERMS &amp; CONDITIONS\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/privacy/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            PRIVACY &amp; SECURITY\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://www.axaconnect.co.uk/contact-us/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            COMPLAINTS\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://www.axaconnect.co.uk/contact-us/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            CONTACT US\n          </a>\n        </li>\n      </ul>\n    </Col>\n    <Col xs={10} md={6}>\n      <ul className=\"site-footer-social-links\">\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://twitter.com/AXA_Broker\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faTwitter} />\n          </a>\n        </li>\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://www.youtube.com/user/AXAConnect/featured\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faYoutube} />\n          </a>\n        </li>\n      </ul>\n    </Col>\n  </Row>\n);\n\nexport default Axa;\n","import { Col, Row } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  faTwitter,\n  faYoutube,\n  faFacebookF,\n  faLinkedin,\n} from '@fortawesome/free-brands-svg-icons';\n\nconst Partnersand = () => (\n  <Row>\n    <Col className=\"site-footer-nav-container\" xs={14} md={18}>\n      <ul className=\"site-footer-nav\">\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/terms-conditions/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            TERMS &amp; CONDITIONS\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/privacy/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            PRIVACY &amp; SECURITY\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://www.axaconnect.co.uk/contact-us/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            COMPLAINTS\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://www.axaconnect.co.uk/contact-us/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            CONTACT US\n          </a>\n        </li>\n      </ul>\n    </Col>\n    <Col xs={10} md={6}>\n      <ul className=\"site-footer-social-links\">\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://www.facebook.com/partnersand\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faFacebookF} />\n          </a>\n        </li>\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://twitter.com/partnersand_\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faTwitter} />\n          </a>\n        </li>\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://www.linkedin.com/company/partnersand/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faLinkedin} />\n          </a>\n        </li>\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://www.youtube.com/channel/UCq0DIEL20GppvN-e64myd_A\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faYoutube} />\n          </a>\n        </li>\n      </ul>\n    </Col>\n  </Row>\n);\n\nexport default Partnersand;\n","import { Col, Row } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  faTwitter,\n  faYoutube,\n  faFacebookF,\n  faLinkedin,\n} from '@fortawesome/free-brands-svg-icons';\n\nconst Santam = () => (\n  <Row>\n    <Col className=\"site-footer-nav-container\" xs={14} md={18}>\n      <ul className=\"site-footer-nav\">\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/terms-conditions/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            TERMS &amp; CONDITIONS\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://lmigroup.io/privacy/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            PRIVACY &amp; SECURITY\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://www.axaconnect.co.uk/contact-us/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            COMPLAINTS\n          </a>\n        </li>\n        <li className=\"site-footer-nav-item\">\n          <a\n            href=\"https://www.axaconnect.co.uk/contact-us/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            CONTACT US\n          </a>\n        </li>\n      </ul>\n    </Col>\n    <Col xs={10} md={6}>\n      <ul className=\"site-footer-social-links\">\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://www.facebook.com/SantamInsurance\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faFacebookF} />\n          </a>\n        </li>\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://twitter.com/SantamInsurance\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faTwitter} />\n          </a>\n        </li>\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://www.linkedin.com/company/santam/\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faLinkedin} />\n          </a>\n        </li>\n        <li className=\"site-footer-social-link-item\">\n          <a\n            href=\"https://www.youtube.com/SantamInsurance\"\n            target=\"_blank\"\n            rel=\"noopener noreferrer\"\n          >\n            <FontAwesomeIcon icon={faYoutube} />\n          </a>\n        </li>\n      </ul>\n    </Col>\n  </Row>\n);\n\nexport default Santam;\n","import { Row, Col } from 'antd';\nimport cx from 'classnames';\nimport { Default, Aviva, Axa, Partnersand, Santam } from './contents';\nimport theme, { THEMES } from '../../services/theme';\nimport './footer.less';\n\nconst footerContents = {\n  [THEMES.default]: <Default />,\n  [THEMES.aviva]: <Aviva />,\n  [THEMES.axa]: <Axa />,\n  [THEMES.partnersand]: <Partnersand />,\n  [THEMES.santam]: <Santam />,\n};\n\nconst copyRightExcludedThemes = [THEMES.aviva];\n\nconst DefaultCopyRight = () => (\n  <p className=\"site-footer-copyright\">\n    &copy; 1999-{new Date().getFullYear()} LMI Group Pty Ltd | ABN 69 086 256\n    171 | AFS Licence No. 283777\n  </p>\n);\n\nconst Footer = () => (\n  <footer\n    className={cx('site-footer', {\n      aviva: theme.siteTheme === THEMES.aviva,\n    })}\n  >\n    <div className=\"site-footer-container\">\n      {footerContents[theme.siteTheme] || <Default />}\n      {!copyRightExcludedThemes.includes(theme.siteTheme) && (\n        <Row>\n          <Col span={24}>\n            <DefaultCopyRight />\n          </Col>\n        </Row>\n      )}\n    </div>\n  </footer>\n);\n\nexport default Footer;\n","import { Layout } from 'antd';\nimport cx from 'classnames';\nimport { Header } from '../header';\nimport Footer from '../footer/Footer';\nimport './layout.less';\n\nconst { Content } = Layout;\n\nexport default ({ children, className }) => (\n  <Layout className=\"layout-container\">\n    <Header />\n    <Content>\n      <div className={cx('site-container', className)}>{children}</div>\n    </Content>\n    <Footer />\n  </Layout>\n);\n","/* eslint-disable no-param-reassign */\n/* eslint-disable import/prefer-default-export */\nimport axios from 'axios';\nimport { createAsyncThunk, createSlice } from '@reduxjs/toolkit';\nimport api from '../../services/api';\n\nconst BASE_URL = api.urls.base;\n\nexport const initialState = {\n  media: null,\n  adsStatus: 'idle',\n};\n\nexport const fetchBanner = async ({ userId, bannerId }) => {\n  try {\n    const resBanner = await axios.get(\n      `${BASE_URL}/user/${userId}/media/${bannerId}`\n    );\n    return resBanner.data;\n  } catch (err) {\n    const reason = 'Failed to fetch banner';\n    throw new Error(reason);\n  }\n};\n\nexport const fetchBannerAsync = createAsyncThunk('ads/banner', fetchBanner);\n\nexport const adsSlice = createSlice({\n  name: 'ads',\n  initialState,\n  reducers: {\n    clearAds: (state) => {\n      state.media = null;\n    },\n  },\n  extraReducers: (builder) => {\n    builder\n      .addCase(fetchBannerAsync.pending, (state) => {\n        state.adsStatus = 'loading';\n      })\n      .addCase(fetchBannerAsync.rejected, (state) => {\n        state.adsStatus = 'idle';\n      })\n      .addCase(fetchBannerAsync.fulfilled, (state, { payload }) => {\n        state.adsStatus = 'idle';\n        state.media = payload;\n      });\n  },\n});\n\nexport const { clearAds } = adsSlice.actions;\nexport const selectAds = (state) => state.ads.media;\n\nexport default adsSlice.reducer;\n","/* eslint-disable react/jsx-boolean-value */\nimport { Modal, Button } from 'antd';\nimport cx from 'classnames';\nimport theme from '../../../../services/theme';\nimport './select-calculator-modal.less';\n\nconst SelectCalculatorModal = ({\n  visible,\n  onClose,\n  calculators,\n  setEmailState,\n}) => (\n  <Modal\n    title=\"Select Calculator to Email\"\n    wrapClassName={cx('select-calculator-modal', {\n      [theme.siteTheme]: theme.siteTheme,\n    })}\n    visible={visible}\n    destroyOnClose={true}\n    onCancel={onClose}\n    width=\"60%\"\n    footer={\n      <Button type=\"default\" onClick={onClose}>\n        Close\n      </Button>\n    }\n  >\n    {calculators &&\n      calculators.map(\n        ({\n          CalculatorId,\n          OldCalculatorId,\n          MultiCalculatorPolicyName,\n          MultiCalculatorPolicyDescription,\n        }) => (\n          <div className=\"multi-calculator\">\n            <h2>{MultiCalculatorPolicyName}</h2>\n            <p>{MultiCalculatorPolicyDescription}</p>\n            <Button\n              type=\"primary\"\n              onClick={() => {\n                setEmailState({\n                  visible: true,\n                  calculatorId: CalculatorId,\n                  oldCalculatorId: OldCalculatorId,\n                });\n                onClose();\n              }}\n            >\n              EMAIL\n            </Button>\n          </div>\n        )\n      )}\n  </Modal>\n);\n\nexport default SelectCalculatorModal;\n","import { useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Table, Tooltip, Button, Empty } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  faInfoCircle,\n  faFilePdf,\n  faEnvelope,\n  faPlay,\n  faExclamationTriangle,\n  faCalculator,\n} from '@fortawesome/free-solid-svg-icons';\nimport useWindowResize from '../../../../components/hooks/useWindowResize';\nimport EmailModal from '../email-modal/EmailModal';\nimport SelectCalculatorModal from '../select-calculator-modal/SelectCalculatorModal';\nimport Download from '../../../../components/download/Download';\nimport theme from '../../../../services/theme';\n\nimport './calculator-list.less';\nimport {\n  fetchDataInputPdf,\n  disableCalculationResult,\n} from '../../../../features/calculators';\n\nexport const stringSorter = (a, b) => {\n  const stringA = a?.toUpperCase() || '';\n  const stringB = b?.toUpperCase() || '';\n  if (stringA < stringB) {\n    return -1;\n  }\n  if (stringA > stringB) {\n    return 1;\n  }\n  return 0;\n};\n\nconst CalculatorList = ({\n  calculatorList,\n  handleMultiCalculators,\n  loading,\n  userCountryId,\n  buyGroupId,\n  pagination = false,\n}) => {\n  const [emailState, setEmailState] = useState({\n    visible: false,\n    calculatorId: null,\n    oldCalculatorId: null,\n  });\n\n  const [calculatorSelectModalState, setCalculatorSelectModalState] = useState({\n    visible: false,\n    samePolicyCalculators: [],\n  });\n\n  const { isMobile } = useWindowResize();\n\n  const dataSource = (calculatorList) =>\n    calculatorList\n      ? calculatorList.map(\n          ({\n            CalculatorId,\n            OldCalculatorId,\n            DocumentPath,\n            InsurerName,\n            IsPolicyArchived,\n            PolicyCode,\n            PolicyDate,\n            PolicyName,\n            MultiCalculatorPolicy,\n            SamePolicyCalculators,\n            CalculatorPath,\n            IsActive,\n            QuestionsPdfPath,\n            CalculatorName,\n          }) => ({\n            key: CalculatorId,\n            active: IsActive,\n            insurer: InsurerName,\n            policy: {\n              CalculatorName,\n              PolicyName,\n              PolicyCode,\n              PolicyDate,\n              IsPolicyArchived,\n            },\n            pdf: { DocumentPath, QuestionsPdfPath, CalculatorId },\n            email: {\n              CalculatorId,\n              OldCalculatorId,\n              SamePolicyCalculators,\n            },\n            action: {\n              CalculatorId,\n              SamePolicyCalculators,\n              CalculatorPath,\n              Action:\n                MultiCalculatorPolicy && SamePolicyCalculators?.length > 0\n                  ? 'SELECT'\n                  : 'ENTER',\n              PolicyInfo: { InsurerName, PolicyName, PolicyCode },\n            },\n          })\n        )\n      : [];\n\n  const columns = [\n    {\n      title: 'Insurer',\n      dataIndex: 'insurer',\n      key: 'insurer',\n      width: '25%',\n      sorter: (a, b) => stringSorter(a.insurer, b.insurer),\n      filters: [\n        ...new Set(calculatorList?.map(({ InsurerName }) => InsurerName)),\n      ].map((value) => ({\n        text: value,\n        value,\n      })),\n      onFilter: (value, record) => record.insurer === value,\n      filterSearch: true,\n    },\n    {\n      title: 'Policy',\n      dataIndex: 'policy',\n      key: 'policy',\n      width: isMobile ? '33%' : '45%',\n      sorter: (a, b) => stringSorter(a.policy.PolicyName, b.policy.PolicyName),\n      filters: [\n        ...new Set(calculatorList?.map(({ PolicyName }) => PolicyName)),\n      ].map((value) => ({\n        text: value,\n        value,\n      })),\n      onFilter: (value, record) => record.policy.PolicyName === value,\n      filterSearch: true,\n      render: ({\n        IsPolicyArchived,\n        PolicyCode,\n        PolicyDate,\n        PolicyName,\n        CalculatorName,\n      }) => (\n        <>\n          <Tooltip\n            title={`${\n              IsPolicyArchived ? 'ARCHIVED' : ''\n            } PolicyCode: ${PolicyCode} (${PolicyDate})`}\n          >\n            {!IsPolicyArchived ? (\n              <FontAwesomeIcon icon={faInfoCircle} />\n            ) : (\n              <FontAwesomeIcon icon={faExclamationTriangle} color=\"#c9302c\" />\n            )}\n          </Tooltip>\n          &nbsp;&nbsp;\n          {CalculatorName || PolicyName}\n        </>\n      ),\n    },\n    {\n      title: 'PDF',\n      dataIndex: 'pdf',\n      key: 'pdf',\n      width: isMobile ? '12%' : '8%',\n      align: 'center',\n      render: ({ DocumentPath, QuestionsPdfPath, CalculatorId }) => (\n        <>\n          <Tooltip title=\"Click to view policy\">\n            <Button\n              type=\"link\"\n              href={DocumentPath}\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n            >\n              <FontAwesomeIcon icon={faFilePdf} />\n            </Button>\n          </Tooltip>\n\n          {theme.isUsTheme && (\n            <Download\n              onDownload={() => fetchDataInputPdf(CalculatorId)}\n              fileName={`${QuestionsPdfPath.split('/')[1] || QuestionsPdfPath}`}\n            >\n              {(download, downloading) => (\n                <Tooltip title=\"Click to download datainput\">\n                  <Button type=\"link\" onClick={download} loading={downloading}>\n                    <FontAwesomeIcon icon={faCalculator} />\n                  </Button>\n                </Tooltip>\n              )}\n            </Download>\n          )}\n        </>\n      ),\n    },\n    {\n      title: 'Email',\n      dataIndex: 'email',\n      key: 'email',\n      width: isMobile ? '15%' : '10%',\n      align: 'center',\n      render: ({ CalculatorId, OldCalculatorId, SamePolicyCalculators }) => (\n        <Tooltip title=\"Click to email calculator\">\n          <FontAwesomeIcon\n            icon={faEnvelope}\n            onClick={() => {\n              if (SamePolicyCalculators && SamePolicyCalculators.length > 0) {\n                setCalculatorSelectModalState({\n                  visible: true,\n                  samePolicyCalculators: SamePolicyCalculators,\n                });\n              } else {\n                setEmailState({\n                  visible: true,\n                  calculatorId: CalculatorId,\n                  oldCalculatorId: OldCalculatorId,\n                });\n              }\n            }}\n            style={{ cursor: 'pointer' }}\n          />\n        </Tooltip>\n      ),\n    },\n    {\n      title: !isMobile && 'Action',\n      dataIndex: 'action',\n      width: isMobile ? '15%' : '12%',\n      align: 'center',\n      key: 'action',\n      render: (action) =>\n        action.Action === 'SELECT' ? (\n          <Button\n            type=\"primary\"\n            size={isMobile && 'small'}\n            onClick={() => handleMultiCalculators(action.CalculatorId)}\n          >\n            <FontAwesomeIcon\n              icon={faPlay}\n              style={{ marginRight: !isMobile && 5 }}\n            />{' '}\n            {!isMobile && action.Action}\n          </Button>\n        ) : (\n          <Link to={action.CalculatorPath}>\n            <Button type=\"primary\" size={isMobile && 'small'}>\n              <FontAwesomeIcon\n                icon={faPlay}\n                style={{ marginRight: !isMobile && 5 }}\n              />{' '}\n              {!isMobile && action.Action}\n            </Button>\n          </Link>\n        ),\n    },\n  ];\n  return (\n    <>\n      <SelectCalculatorModal\n        calculators={calculatorSelectModalState.samePolicyCalculators}\n        visible={calculatorSelectModalState.visible}\n        setEmailState={setEmailState}\n        onClose={() => setCalculatorSelectModalState({ visible: false })}\n      />\n      <EmailModal\n        type=\"client\"\n        visible={emailState.visible}\n        onSend={() => setEmailState({ visible: false })}\n        onClose={async (refId) => {\n          if (refId) {\n            await disableCalculationResult(refId);\n          }\n          setEmailState({ visible: false });\n        }}\n        calculatorId={emailState.calculatorId}\n        oldCalculatorId={emailState.oldCalculatorId}\n        userCountryId={userCountryId}\n        buyGroupId={buyGroupId}\n      />\n      <Table\n        locale={{\n          emptyText: (\n            <div style={{ padding: '30px' }}>\n              {calculatorList !== null && calculatorList?.length < 1 && (\n                <Empty />\n              )}\n            </div>\n          ),\n        }}\n        loading={loading}\n        sticky\n        bordered\n        showSorterTooltip={false}\n        pagination={pagination}\n        dataSource={dataSource(calculatorList)}\n        columns={columns}\n        rowClassName={(record) => !record.active && 'inactive'}\n      />\n    </>\n  );\n};\n\nexport default CalculatorList;\n","import { useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Table, Tooltip, Button, Spin } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  faInfoCircle,\n  faFilePdf,\n  faEnvelope,\n  faPlay,\n  faExclamationTriangle,\n} from '@fortawesome/free-solid-svg-icons';\nimport useWindowResize from '../../../../components/hooks/useWindowResize';\nimport EmailModal from '../email-modal/EmailModal';\nimport { stringSorter } from './CalculatorList';\nimport './calculator-list.less';\n\nconst MultiCalculatorList = ({\n  calculatorList,\n  userCountryId,\n  buyGroupId,\n  pagination = false,\n}) => {\n  const [emailState, setEmailState] = useState({\n    visible: false,\n    calculatorId: null,\n    oldCalculatorId: null,\n  });\n  const { isMobile } = useWindowResize();\n\n  const dataSource = (calculatorList) =>\n    calculatorList\n      ? calculatorList.map(\n          ({\n            CalculatorId,\n            OldCalculatorId,\n            DocumentPath,\n            InsurerName,\n            IsPolicyArchived,\n            PolicyCode,\n            PolicyDate,\n            PolicyName,\n            SamePolicyCalculators,\n            CalculatorPath,\n            MultiCalculatorPolicyName,\n            MultiCalculatorPolicyDescription,\n            IsActive,\n          }) => ({\n            key: CalculatorId,\n            name: MultiCalculatorPolicyName,\n            active: IsActive,\n            description: {\n              PolicyName,\n              PolicyCode,\n              PolicyDate,\n              IsPolicyArchived,\n              MultiCalculatorPolicyDescription,\n            },\n            pdf: DocumentPath,\n            email: { CalculatorId, OldCalculatorId },\n            action: {\n              CalculatorId,\n              SamePolicyCalculators,\n              CalculatorPath,\n              Action: 'ENTER',\n              PolicyInfo: { InsurerName, PolicyName, PolicyCode },\n            },\n          })\n        )\n      : [];\n\n  const columns = [\n    {\n      title: 'Name',\n      dataIndex: 'name',\n      key: 'name',\n      width: '25%',\n      sorter: (a, b) =>\n        stringSorter(a.MultiCalculatorPolicyName, b.MultiCalculatorPolicyName),\n      filters: [\n        ...new Set(\n          calculatorList?.map(\n            ({ MultiCalculatorPolicyName }) => MultiCalculatorPolicyName\n          )\n        ),\n      ].map((value) => ({\n        text: value,\n        value,\n      })),\n      onFilter: (value, record) => record.name === value,\n      filterSearch: true,\n    },\n    {\n      title: 'Description',\n      dataIndex: 'description',\n      key: 'description',\n      width: isMobile ? '33%' : '45%',\n      sorter: (a, b) =>\n        stringSorter(\n          a.description.MultiCalculatorPolicyDescription,\n          b.description.MultiCalculatorPolicyDescription\n        ),\n      filters: [\n        ...new Set(\n          calculatorList?.map(\n            ({ MultiCalculatorPolicyDescription }) =>\n              MultiCalculatorPolicyDescription\n          )\n        ),\n      ].map((value) => ({\n        text: value,\n        value,\n      })),\n      onFilter: (value, record) =>\n        record.description.MultiCalculatorPolicyDescription === value,\n      filterSearch: true,\n      render: ({\n        IsPolicyArchived,\n        PolicyCode,\n        PolicyDate,\n        MultiCalculatorPolicyDescription,\n      }) => (\n        <>\n          <Tooltip\n            title={`${\n              IsPolicyArchived ? 'ARCHIVED' : ''\n            } PolicyCode: ${PolicyCode} (${PolicyDate})`}\n          >\n            {!IsPolicyArchived ? (\n              <FontAwesomeIcon icon={faInfoCircle} />\n            ) : (\n              <FontAwesomeIcon icon={faExclamationTriangle} color=\"#c9302c\" />\n            )}\n          </Tooltip>\n          &nbsp;&nbsp;\n          {MultiCalculatorPolicyDescription}\n        </>\n      ),\n    },\n    {\n      title: 'PDF',\n      dataIndex: 'pdf',\n      key: 'pdf',\n      width: isMobile ? '12%' : '8%',\n      align: 'center',\n      render: (documentLink) => (\n        <Tooltip title=\"Click to view policy\">\n          <a href={documentLink} target=\"_blank\" rel=\"noopener noreferrer\">\n            <FontAwesomeIcon icon={faFilePdf} />\n          </a>\n        </Tooltip>\n      ),\n    },\n    {\n      title: 'Email',\n      dataIndex: 'email',\n      key: 'email',\n      width: isMobile ? '15%' : '10%',\n      align: 'center',\n      render: (calculator) => (\n        <Tooltip title=\"Click to email calculator\">\n          <FontAwesomeIcon\n            icon={faEnvelope}\n            onClick={() =>\n              setEmailState({\n                visible: true,\n                calculatorId: calculator.CalculatorId,\n                oldCalculatorId: calculator.OldCalculatorId,\n              })\n            }\n            style={{ cursor: 'pointer' }}\n          />\n        </Tooltip>\n      ),\n    },\n    {\n      title: !isMobile && 'Action',\n      dataIndex: 'action',\n      width: isMobile ? '15%' : '12%',\n      align: 'center',\n      key: 'action',\n      render: (action) => (\n        <Link to={action.CalculatorPath}>\n          <Button type=\"primary\" size={isMobile && 'small'}>\n            <FontAwesomeIcon\n              icon={faPlay}\n              style={{ marginRight: !isMobile && 5 }}\n            />{' '}\n            {!isMobile && action.Action}\n          </Button>\n        </Link>\n      ),\n    },\n  ];\n  return (\n    <>\n      <EmailModal\n        type=\"client\"\n        visible={emailState.visible}\n        onSend={() => setEmailState({ visible: false })}\n        onClose={() => setEmailState({ visible: false })}\n        calculatorId={emailState.calculatorId}\n        oldCalculatorId={emailState.oldCalculatorId}\n        userCountryId={userCountryId}\n        buyGroupId={buyGroupId}\n      />\n      <Table\n        locale={{\n          emptyText: (\n            <div style={{ padding: '30px' }}>\n              <Spin />\n            </div>\n          ),\n        }}\n        sticky\n        bordered\n        showSorterTooltip={false}\n        pagination={pagination}\n        dataSource={dataSource(calculatorList)}\n        columns={columns}\n        rowClassName={(record) => !record.active && 'inactive'}\n      />\n    </>\n  );\n};\n\nexport default MultiCalculatorList;\n","import { useNavigate } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\nimport { Button, Popconfirm } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n  faDownload,\n  faEnvelope,\n  faCopy,\n  faTrash,\n} from '@fortawesome/free-solid-svg-icons';\nimport Download from '../../../../components/download/Download';\nimport {\n  fetchResultPdf,\n  addStats,\n  disableCalculationResult,\n} from '../../../../features/calculators';\nimport { duplicateCalculationAsync } from '../../calculatorsSlice';\nimport { decrypt } from '../../../../services/crypto';\n\nconst SavedCalculationsActions = ({ record }) => {\n  const navigate = useNavigate();\n  const dispatch = useDispatch();\n\n  const handleEmailClick = () => {\n    record.onEmailClick({\n      visible: true,\n      refId: record.referenceId,\n      insuredName: record.insuredName,\n      stepId: record.firstStepId || record.lastUpdatedStepId,\n      status: record.status,\n    });\n  };\n\n  const handleDuplicateClick = async () => {\n    await dispatch(duplicateCalculationAsync(record.referenceId));\n    record.fetchResultsSummary();\n  };\n\n  const handleEditCick = () => {\n    const path = `/references/${record.referenceId}/steps/${\n      record.lastUpdatedStepId || record.firstStepId\n    }`;\n\n    const resultPagePath = `/references/${record.referenceId}/steps/results`;\n\n    if (record.status === 2) {\n      navigate(resultPagePath);\n    } else {\n      navigate(path);\n    }\n  };\n\n  const handleRemoveClick = async () => {\n    await disableCalculationResult(record.referenceId);\n    record.fetchResultsSummary();\n  };\n\n  return (\n    <>\n      <Download\n        onDownload={() =>\n          fetchResultPdf({\n            refId: record.referenceId,\n            insuredName: decrypt(record.insuredName) || record.insuredName,\n          })\n        }\n        fileName={`BICalculatorResults_${record.referenceId}.pdf`}\n        addStats={addStats}\n      >\n        {(download, downloading) => (\n          <Button\n            title=\"Download results pdf\"\n            size=\"small\"\n            type=\"link\"\n            onClick={download}\n            disabled={record.status !== 2 || downloading}\n          >\n            <FontAwesomeIcon icon={faDownload} />\n          </Button>\n        )}\n      </Download>\n      <Button\n        title=\"Send email\"\n        type=\"link\"\n        size=\"small\"\n        onClick={handleEmailClick}\n      >\n        <FontAwesomeIcon icon={faEnvelope} />\n      </Button>\n      <Popconfirm\n        title=\"Duplicate calculation\"\n        description=\"duplicate this calculation?\"\n        onConfirm={handleDuplicateClick}\n        okText=\"Yes\"\n        cancelText=\"No\"\n      >\n        <Button title=\"Duplicate calculation\" type=\"link\" size=\"small\">\n          <FontAwesomeIcon icon={faCopy} />\n        </Button>\n      </Popconfirm>\n      <Popconfirm\n        title=\"Remove calculation\"\n        description=\"Remove this calculation?\"\n        onConfirm={handleRemoveClick}\n        okText=\"Yes\"\n        cancelText=\"No\"\n      >\n        <Button title=\"Remove calculation\" type=\"link\" size=\"small\">\n          <FontAwesomeIcon icon={faTrash} />\n        </Button>\n      </Popconfirm>\n      <Button type=\"primary\" size=\"small\" onClick={handleEditCick}>\n        Edit\n      </Button>\n    </>\n  );\n};\n\nexport default SavedCalculationsActions;\n","/* eslint-disable react/jsx-no-useless-fragment */\n/* eslint-disable react-hooks/exhaustive-deps */\nimport { useState, useRef, useEffect } from 'react';\nimport { Button, Input } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faPen, faShare, faUpload } from '@fortawesome/free-solid-svg-icons';\n\nimport { updateCalculationDescription } from '../../../../features/calculators';\n\nconst CalculationLabel = ({ value, record }) => {\n  const inputRef = useRef(null);\n  const [visible, setVisible] = useState(false);\n  const [editable, setEditable] = useState(false);\n  const [description, setDescription] = useState(value);\n  const [loading, setLoading] = useState(false);\n\n  useEffect(() => {\n    if (inputRef?.current) {\n      inputRef.current.focus({\n        cursor: 'end',\n      });\n    }\n  }, [editable]);\n\n  const handleEdit = () => {\n    setEditable(true);\n  };\n\n  const handleUpdate = async () => {\n    if (description !== value) {\n      setLoading(true);\n      await updateCalculationDescription({\n        refId: record.referenceId,\n        description,\n      });\n      setLoading(false);\n      await record.fetchResultsSummary();\n    }\n    setEditable(false);\n  };\n\n  const onChange = (e) => {\n    setDescription(e.target.value.trim());\n  };\n\n  return (\n    <div\n      onMouseEnter={() => setVisible(true)}\n      onMouseLeave={() => setVisible(false)}\n    >\n      {(value || editable || visible) && (\n        <>\n          {editable ? (\n            <div className=\"calculation-label\">\n              <Input\n                size=\"small\"\n                defaultValue={value}\n                placeholder=\"Please enter your description here\"\n                onChange={onChange}\n                ref={inputRef}\n                onKeyPress={(e) => e.key === 'Enter' && handleUpdate()}\n              />\n\n              <Button\n                type=\"text\"\n                size=\"small\"\n                onClick={handleUpdate}\n                title=\"Click to confirm\"\n                loading={loading}\n              >\n                {value === description ? (\n                  <FontAwesomeIcon icon={faShare} />\n                ) : (\n                  <FontAwesomeIcon icon={faUpload} />\n                )}\n              </Button>\n            </div>\n          ) : (\n            <div\n              className=\"calculation-label\"\n              aria-hidden=\"true\"\n              onClick={handleEdit}\n              onKeyDown={handleEdit}\n            >\n              <span>{value}</span>\n              {visible && (\n                <Button\n                  type=\"text\"\n                  size=\"small\"\n                  onClick={handleEdit}\n                  title=\"Click to update description\"\n                >\n                  <FontAwesomeIcon icon={faPen} />\n                </Button>\n              )}\n            </div>\n          )}\n        </>\n      )}\n      {!value && <div className=\"summary-values\">{record.values}</div>}\n    </div>\n  );\n};\n\nexport default CalculationLabel;\n","import { Tooltip, Tag } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCheckCircle } from '@fortawesome/free-solid-svg-icons';\n\nconst CalculationStatus = ({ value, record }) => {\n  if (value === 1 && record.newUpdate) {\n    return (\n      <Tooltip title=\"updated by client\">\n        <Tag icon={<FontAwesomeIcon icon={faCheckCircle} />} color=\"green\">\n          In progress\n        </Tag>\n      </Tooltip>\n    );\n  }\n  if (value === 2 && record.newUpdate) {\n    return (\n      <Tooltip title=\"updated by client\">\n        <Tag icon={<FontAwesomeIcon icon={faCheckCircle} />} color=\"blue\">\n          Completed\n        </Tag>\n      </Tooltip>\n    );\n  }\n  if (value === 0) {\n    return <Tag color=\"red\">Completed - Old</Tag>;\n  }\n  if (value === 1) {\n    return <Tag color=\"green\">In progress</Tag>;\n  }\n  if (value === 2) {\n    return <Tag color=\"blue\">Completed</Tag>;\n  }\n  if (value === 3) {\n    return <Tag color=\"magenta\">Locked</Tag>;\n  }\n  if (value === 4) {\n    return <Tag color=\"yellow\">Duplicated</Tag>;\n  }\n  if (value === 5) {\n    return <Tag color=\"orange\">Email sent</Tag>;\n  }\n  return <Tag color=\"red\" />;\n};\n\nexport default CalculationStatus;\n","/* eslint-disable no-unused-vars */\nimport cx from 'classnames';\nimport { Tooltip, Badge } from 'antd';\nimport { decrypt } from '../../../../services/crypto';\n\nconst ClientName = ({ value, record }) => (\n  <Tooltip\n    title={\n      record.updatedByClient.length\n        ? `${record.updatedByClient.length} update by client`\n        : ''\n    }\n  >\n    <Badge count={record.updatedByClient.length} offset={[15, 2]}>\n      <div\n        className={cx('client-name', {\n          new: record.updatedByClient.length > 0,\n        })}\n      >\n        {decrypt(value)}\n      </div>\n    </Badge>\n  </Tooltip>\n);\n\nexport default ClientName;\n","/* eslint-disable react/no-unstable-nested-components */\nimport { Table, Tooltip } from 'antd';\nimport moment from 'moment';\nimport SavedCalculationsActions from './SavedCalculationsActions';\nimport { stringSorter } from '../calculator-list/CalculatorList';\nimport CalculationLabel from './CalculationLabel';\nimport CalculationStatus from './CalculationStatus';\nimport ClientName from './ClientName';\nimport { decrypt } from '../../../../services/crypto';\n\nconst dateSorter = (a, b) => moment(b) - moment(a);\n\nconst columns = [\n  {\n    title: 'Client Name',\n    dataIndex: 'clientName',\n    key: 'clientName',\n    sorter: (a, b) => stringSorter(a.clientName, b.clientName),\n    render: (value, record) => <ClientName value={value} record={record} />,\n  },\n  {\n    title: 'Insurer',\n    dataIndex: 'insurer',\n    key: 'insurer',\n    sorter: (a, b) => stringSorter(a.insurer, b.insurer),\n    responsive: ['sm'],\n  },\n  {\n    title: 'Calculator',\n    dataIndex: 'calculatorName',\n    key: 'calculatorName',\n    sorter: (a, b) => stringSorter(a.calculatorName, b.calculatorName),\n  },\n];\n\nconst calculationColumn = [\n  {\n    title: 'Version',\n    dataIndex: 'name',\n    key: 'name',\n    width: '6%',\n    render: (value, record) => (\n      <Tooltip title={`ReferenceId : ${record.referenceId}`}>{value}</Tooltip>\n    ),\n  },\n  {\n    title: 'Modified',\n    dataIndex: 'lastUpdate',\n    key: 'lastUpdate',\n    width: '6%',\n    sorter: (a, b) => dateSorter(a.lastUpdate, b.lastUpdate),\n    render: (value, record) => (\n      <Tooltip\n        title={`Created: ${moment\n          .utc(record.created)\n          .local()\n          .format('DD/MM/YYYY')}`}\n      >\n        {moment.utc(value).local().format('DD/MM/YYYY')}\n      </Tooltip>\n    ),\n    responsive: ['sm'],\n  },\n  {\n    title: 'Description',\n    dataIndex: 'label',\n    key: 'label',\n    width: '35%',\n    render: (value, record) => (\n      <CalculationLabel value={value} record={record} />\n    ),\n    sorter: (a, b) => stringSorter(a.label, b.label),\n  },\n  {\n    title: 'Emailed to',\n    dataIndex: 'emailedTo',\n    key: 'emailedTo',\n    width: '15%',\n    responsive: ['sm'],\n    sorter: (a, b) => stringSorter(a.emailedTo, b.emailedTo),\n    render: (value) => decrypt(value),\n  },\n  {\n    title: 'Status',\n    dataIndex: 'status',\n    key: 'status',\n    width: '8%',\n    render: (value, record) => (\n      <CalculationStatus value={value} record={record} />\n    ),\n  },\n  {\n    title: 'Action',\n    dataIndex: 'action',\n    render: (_, record) => <SavedCalculationsActions record={record} />,\n  },\n];\n\nconst versionData = (\n  results,\n  { setEmailModalState, updatedReferencesByClient, fetchResultsSummary }\n) =>\n  results\n    .map(\n      ({\n        ReferenceId,\n        CalculatorName,\n        ResultId,\n        Version,\n        EmailAddress,\n        Status,\n        CreatedDate,\n        InsuredName,\n        LastUpdatedStepId,\n        FistStepId,\n        UpdatedDate,\n        Description,\n        Values,\n        IsResultUpdatedByClient,\n      }) => ({\n        key: ReferenceId,\n        name: Version,\n        created: CreatedDate,\n        label: Description,\n        emailedTo: EmailAddress,\n        status: Status,\n        insuredName: InsuredName,\n        referenceId: ReferenceId,\n        resultId: ResultId,\n        firstStepId: FistStepId,\n        lastUpdatedStepId: LastUpdatedStepId,\n        lastUpdate: UpdatedDate,\n        calculatorName: CalculatorName,\n        values: Values,\n        isResultUpdatedByClient: IsResultUpdatedByClient,\n        onEmailClick: (state) => setEmailModalState(state),\n        newUpdate: updatedReferencesByClient.includes(ReferenceId),\n        fetchResultsSummary,\n      })\n    )\n    .sort((a, b) => dateSorter(a.created, b.created));\n\nconst VersionTable = ({ dataSource }) => (\n  <Table\n    className=\"version-table\"\n    size=\"small\"\n    showSorterTooltip={false}\n    pagination={false}\n    columns={calculationColumn}\n    dataSource={dataSource}\n  />\n);\n\nconst SavedCalculationTable = ({\n  dataSource,\n  loading,\n  updateViewedReferences,\n  updatedReferencesByClient,\n  setEmailModalState,\n  fetchResultsSummary,\n}) => (\n  <Table\n    className=\"saved-calculations-table\"\n    dataSource={dataSource}\n    pagination={false}\n    columns={columns}\n    loading={loading}\n    size=\"small\"\n    showSorterTooltip={false}\n    expandable={{\n      onExpand: (expanded, record) =>\n        !!record.updatedByClient.length &&\n        expanded &&\n        updateViewedReferences(record.updatedByClient),\n      expandedRowRender: ({ resultsSummary }) =>\n        resultsSummary && (\n          <VersionTable\n            dataSource={versionData(resultsSummary, {\n              setEmailModalState,\n              updatedReferencesByClient,\n              fetchResultsSummary,\n            })}\n          />\n        ),\n      rowExpandable: ({ resultsSummary }) => resultsSummary.length > 0,\n    }}\n  />\n);\n\nexport default SavedCalculationTable;\n","/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable react/no-unstable-nested-components */\nimport { useEffect, useMemo, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { Input, Row, Col } from 'antd';\nimport EmailModal from '../email-modal/EmailModal';\nimport SavedCalculationTable from './SavedCalculationsTable';\nimport { selectResultSummaryByCalculator } from '../../calculatorsSlice';\nimport {\n  disableCalculationResult,\n  updateViewedReferences,\n} from '../../../../features/calculators';\nimport { decrypt } from '../../../../services/crypto';\n\nimport './saved-calculations.less';\n\nconst { Search } = Input;\n\nconst SavedCalculations = ({ loading, fetchResultsSummary }) => {\n  const lastDuplicatedCalculation = useSelector(\n    (state) => state.calculators?.lastDuplicatedCalculation\n  );\n  const resultsSummary = useSelector((state) =>\n    selectResultSummaryByCalculator(state)\n  );\n  const updatedReferencesByClient = useSelector(\n    (state) => state.calculators.resultsSummary?.ClientUpdatedResults\n  );\n  const [dataSource, setDataSource] = useState();\n  const [emailModalState, setEmailModalState] = useState({\n    visible: false,\n    refId: null,\n  });\n\n  const parsedResultsSummary = useMemo(\n    () =>\n      resultsSummary &&\n      resultsSummary.map(\n        ({\n          parentGroupId,\n          clientName,\n          insurer,\n          calculatorName,\n          resultsSummary,\n          lastUpdate,\n          updatedByClient,\n        }) => ({\n          key: `${parentGroupId}-${clientName}-${calculatorName}`,\n          clientName: clientName === 'null' ? '' : clientName,\n          insurer,\n          lastUpdate,\n          calculatorName,\n          resultsSummary,\n          updatedByClient,\n        })\n      ),\n    [resultsSummary]\n  );\n\n  useEffect(() => {\n    if (parsedResultsSummary) {\n      setDataSource(parsedResultsSummary);\n    }\n  }, [parsedResultsSummary, lastDuplicatedCalculation]);\n\n  const onKeywordSearch = (value) => {\n    if (value.length > 1) {\n      const filtered = parsedResultsSummary.filter(\n        ({ calculatorName, clientName, insurer }) =>\n          `${calculatorName}${decrypt(clientName)}${insurer}`\n            .toLowerCase()\n            .includes(value.toLowerCase())\n      );\n      setDataSource(filtered);\n    } else {\n      setDataSource(parsedResultsSummary);\n    }\n  };\n\n  return (\n    <>\n      <EmailModal\n        visible={emailModalState.visible}\n        onClose={async (refId) => {\n          if (refId && emailModalState?.status === 2) {\n            await disableCalculationResult(refId);\n          }\n          setEmailModalState({ visible: false });\n        }}\n        calculationEmailParams={emailModalState}\n        referenceId={emailModalState.referenceId}\n        callback={fetchResultsSummary}\n        type=\"share\"\n      />\n      <Row className=\"saved-calculations-search\">\n        <Col md={18} xs={24}>\n          <h3>Saved Calculations</h3>\n        </Col>\n        <Col md={6} xs={24}>\n          <Search\n            placeholder=\"Search by keyword...\"\n            onSearch={onKeywordSearch}\n          />\n        </Col>\n      </Row>\n      <SavedCalculationTable\n        dataSource={dataSource}\n        loading={loading}\n        updateViewedReferences={updateViewedReferences}\n        updatedReferencesByClient={updatedReferencesByClient}\n        setEmailModalState={setEmailModalState}\n        fetchResultsSummary={fetchResultsSummary}\n      />\n    </>\n  );\n};\n\nexport default SavedCalculations;\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect, useState } from 'react';\nimport { Select, Button, Checkbox } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\nimport {\n  fetchCountries,\n  fetchBuyerGroups,\n} from '../../../../features/calculators';\nimport './admin-section.less';\nimport theme from '../../../../services/theme';\n\nconst AdminSection = ({\n  fetchCalculatorList,\n  fetchResultsSummary,\n  calcListFilter,\n  setCalcListFilter,\n  loading,\n}) => {\n  const defaultCountry = theme.isUsTheme ? 9 : 1; // 9: USA, 1: Australia\n  const [countries, setCountries] = useState([]);\n  const [buyerGroups, setBuyerGroups] = useState([]);\n  const [selectedCountry, setSelectedCountry] = useState(defaultCountry);\n  const [selectedBuyerGroup, setSelectedBuyerGroup] = useState();\n\n  const handleCountryChange = (value) => {\n    setSelectedCountry(value);\n    setSelectedBuyerGroup();\n  };\n\n  const handleRemoveFilter = () => {\n    if (selectedBuyerGroup || selectedBuyerGroup === 0) {\n      setSelectedBuyerGroup();\n      fetchCalculatorList(defaultCountry);\n    }\n  };\n\n  const handleBuyerGroupChange = (value) => {\n    setSelectedBuyerGroup(value);\n    fetchCalculatorList(selectedCountry, value);\n  };\n\n  const handleFilterChange = (value) => {\n    const values = { ...calcListFilter };\n    values[value.target.name] = value.target.checked;\n    setCalcListFilter(values);\n  };\n\n  useEffect(() => {\n    const fetchCountriesAsync = async () => {\n      const resCountries = await fetchCountries();\n      if (resCountries) {\n        const countryOption = resCountries.map((c) => ({\n          label: c.CountryName,\n          value: c.ID,\n        }));\n        setCountries(countryOption);\n      }\n    };\n\n    fetchCountriesAsync();\n  }, []);\n\n  useEffect(() => {\n    const fetchBuyerGroupsAsync = async () => {\n      const resBuyerGroup = await fetchBuyerGroups(selectedCountry);\n      if (resBuyerGroup && Array.isArray(resBuyerGroup)) {\n        const buyerGroupOption = resBuyerGroup.map((b) => ({\n          label: b.BuyerGroup,\n          value: b.Id,\n        }));\n        setBuyerGroups(buyerGroupOption);\n      }\n    };\n    fetchBuyerGroupsAsync();\n    fetchCalculatorList(selectedCountry);\n    fetchResultsSummary(selectedCountry);\n  }, [selectedCountry]);\n\n  return (\n    <div className=\"admin-section\">\n      <div className=\"admin-section-title\">Admin Section</div>\n      <div className=\"admin-section-select\">\n        <div className=\"admin-section-select-input\">\n          Country :\n          <Select\n            defaultValue={selectedCountry}\n            showSearch\n            style={{ width: 220, marginLeft: 20 }}\n            onChange={handleCountryChange}\n            disabled={loading}\n            filterOption={(input, option) =>\n              (option?.label ?? '').toLowerCase().includes(input.toLowerCase())\n            }\n            options={countries}\n          />\n        </div>\n        {!!buyerGroups.length && (\n          <div className=\"admin-section-select-input\">\n            BuyerGroup :\n            <Select\n              style={{ width: 220, marginLeft: 20 }}\n              onChange={handleBuyerGroupChange}\n              showSearch\n              disabled={loading}\n              loading={loading}\n              value={selectedBuyerGroup}\n              filterOption={(input, option) =>\n                (option?.label ?? '')\n                  .toLowerCase()\n                  .includes(input.toLowerCase())\n              }\n              options={buyerGroups}\n            />\n            {(!!selectedBuyerGroup || selectedBuyerGroup === 0) && (\n              <Button\n                disabled={loading}\n                type=\"link\"\n                size=\"small\"\n                title=\"Remove buyer group\"\n                onClick={handleRemoveFilter}\n                icon={<FontAwesomeIcon icon={faTimes} />}\n              />\n            )}\n          </div>\n        )}\n        <div className=\"admin-section-select-input\">\n          <Checkbox\n            name=\"showArchived\"\n            onChange={handleFilterChange}\n            className=\"calc-filter-checkbox\"\n            checked={calcListFilter.showArchived}\n          />\n          Show Archived\n          <Checkbox\n            name=\"showInActive\"\n            onChange={handleFilterChange}\n            className=\"calc-filter-checkbox\"\n            checked={calcListFilter.showInActive}\n          />\n          Show InActive\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default AdminSection;\n","import { Button } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCalculator, faBookmark } from '@fortawesome/free-solid-svg-icons';\nimport theme from '../../../../services/theme';\nimport './screen-select.less';\n\nconst ScreenSelect = ({ selectScreen, screenLabels }) => (\n  <div className=\"screen-select\">\n    <div className=\"select-card primary\">\n      <h2>\n        <FontAwesomeIcon icon={faCalculator} style={{ marginRight: 10 }} />{' '}\n        Select Your Calculator\n      </h2>\n      <p>\n        Calculate Business Interruption quickly and accurately with our\n        calculators individually tailored to the policy wording.\n      </p>\n      <Button\n        size=\"large\"\n        className=\"link-btn\"\n        onClick={() => selectScreen(screenLabels.Calculators)}\n      >\n        START NOW\n      </Button>\n    </div>\n    {theme.isUsTheme && (\n      <div className=\"select-card\">\n        <h2>\n          <FontAwesomeIcon icon={faBookmark} style={{ marginRight: 10 }} /> Your\n          Saved Calculations\n        </h2>\n        <p>\n          Find saved calculations that you saved for later and edit, download or\n          share with your client.\n        </p>\n        <Button\n          size=\"large\"\n          type=\"primary\"\n          className=\"link-btn\"\n          onClick={() => selectScreen(screenLabels.SavedCalculations)}\n        >\n          VIEW SAVED\n        </Button>\n      </div>\n    )}\n  </div>\n);\n\nexport default ScreenSelect;\n","/* eslint-disable no-nested-ternary */\n/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect, useState } from 'react';\nimport { connect, useDispatch } from 'react-redux';\nimport { useNavigate, useParams, useLocation } from 'react-router-dom';\nimport { Button, Badge, Tag } from 'antd';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCalculator, faBookmark } from '@fortawesome/free-solid-svg-icons';\nimport cx from 'classnames';\nimport Layout from '../../components/layout/Layout';\nimport CalculatorList from './components/calculator-list/CalculatorList';\nimport MultiCalculatorList from './components/calculator-list/MultiCalculatorList';\nimport SavedCalculations from './components/saved-calculations/SavedCalculations';\nimport Ads from '../../components/ads/Ads';\nimport AdminSection from './components/admin-section/AdminSection';\nimport ScreenSelect from './components/screen-select/ScreenSelect';\nimport LayoutWithSideAds from '../../components/ads/SideAds';\nimport theme, { THEMES } from '../../services/theme';\nimport { selectIsUserAdmin } from '../../features/auth';\nimport {\n  fetchCalculatorsListAsync,\n  clearCalculatorStep,\n  fetchResultsSummaryAsync,\n} from './calculatorsSlice';\n\nimport './calculators.less';\n\nexport const SCREEN_LABELS = {\n  Calculators: 'Calculators',\n  SavedCalculations: 'Saved Calculations',\n  Select: 'Select',\n};\n\nconst Calculators = ({\n  calculatorList,\n  userCountryId,\n  buyGroupId,\n  isUserAdmin,\n  loadingCalculatorList,\n  updatedReferencesByClient,\n  loadingCalculatorResultsSummary,\n}) => {\n  const navigate = useNavigate();\n  const { calcId } = useParams();\n  const dispatch = useDispatch();\n  const { state } = useLocation();\n  const [calcListFilter, setCalcListFilter] = useState({\n    showArchived: false,\n    showInActive: false,\n  });\n\n  const [selectedScreen, setSelectedScreen] = useState();\n  const [multiCalculators, setMultiCalculators] = useState();\n  const [calculators, setCalculators] = useState();\n\n  const fetchResultsSummary = (selectedCountry) => {\n    const countryId = selectedCountry || userCountryId;\n    if (isUserAdmin && theme.isUsTheme) {\n      dispatch(fetchResultsSummaryAsync(9));\n    } else {\n      dispatch(fetchResultsSummaryAsync(countryId));\n    }\n  };\n\n  const fetchCalculatorList = (selectedCountry, buyerGroupId) => {\n    const countryId =\n      isUserAdmin && selectedCountry ? selectedCountry : userCountryId;\n    dispatch(fetchCalculatorsListAsync({ countryId, buyerGroupId }));\n  };\n\n  useEffect(() => {\n    let list = [...calculatorList];\n    if (!calcListFilter.showArchived) {\n      list = list.filter(({ IsPolicyArchived }) => !IsPolicyArchived);\n    }\n    if (!calcListFilter.showInActive) {\n      list = list.filter(({ IsActive }) => IsActive);\n    }\n    setCalculators(list);\n  }, [calcListFilter, calculatorList]);\n\n  useEffect(() => {\n    dispatch(clearCalculatorStep());\n    // if user is admin then fetching calculator list from admin section\n    if (userCountryId && !isUserAdmin) {\n      fetchCalculatorList();\n    }\n  }, [userCountryId]);\n\n  useEffect(() => {\n    if (theme.isUsTheme && !isUserAdmin) {\n      // Set USA countryId 9 as a default\n      fetchResultsSummary(9);\n    }\n  }, [selectedScreen]);\n\n  useEffect(() => {\n    if (state) {\n      if (state.screen === SCREEN_LABELS.Calculators) {\n        setSelectedScreen(SCREEN_LABELS.Calculators);\n      }\n      if (state.screen === SCREEN_LABELS.SavedCalculations) {\n        setSelectedScreen(SCREEN_LABELS.SavedCalculations);\n      }\n      if (state.screen === SCREEN_LABELS.Select) {\n        setSelectedScreen();\n      }\n    }\n    if (!theme.isUsTheme) {\n      setSelectedScreen(SCREEN_LABELS.Calculators);\n    }\n  }, [state]);\n\n  useEffect(() => {\n    if (calcId) {\n      const selectedPolicyMultiCalculators = calculatorList?.find(\n        (calc) => calc.CalculatorId === +calcId\n      );\n      setMultiCalculators(selectedPolicyMultiCalculators);\n    }\n  }, [calculatorList, calcId]);\n\n  const handleMultiCalculators = (calcId) => {\n    navigate(`/policy/calculators/${calcId}`);\n  };\n\n  const renderMultiCalculatorContent = () => (\n    <>\n      <p> Please select a calculator under the selected policy</p>\n      <h3>Policy Information</h3>\n\n      {multiCalculators?.MultiCalculatorPolicy && (\n        <>\n          <div>{multiCalculators.InsurerName}</div>\n          <div>{multiCalculators.PolicyName}</div>\n          <div>\n            {`${multiCalculators.PolicyCode} (${multiCalculators.PolicyDate})`}\n          </div>\n        </>\n      )}\n\n      <div className=\"calculators-content-body\">\n        <MultiCalculatorList\n          userCountryId={userCountryId}\n          buyGroupId={buyGroupId}\n          calculatorList={multiCalculators.SamePolicyCalculators}\n        />\n      </div>\n    </>\n  );\n\n  const renderCalculatorListContent = () => (\n    <>\n      <div className=\"calculators-content-header\">\n        <p className=\"calculators-content-header-title\">\n          Our Business Interruption calculators are specific to individual\n          policies.\n        </p>\n\n        {[THEMES.partnersand, THEMES.axa, THEMES.aviva].includes(\n          theme.siteTheme\n        ) ? (\n          <>\n            <p>\n              To bring up the correct cover calculator simply click the\n              appropriate &quot;Enter&quot; button. To double check that you\n              have the correct policy you can click on the &quot;PDF&quot; icon\n              for the wording, many of our policy documents are{' '}\n              <em>&quot; Insurance Act &quot;</em> compliant.\n            </p>\n            <p>\n              If you wish to email a link of the correct cover calculator to\n              your client, accountant or the like please simply click on the\n              Email icon and then email it with an explanation as to what you\n              want the recipient to do with it.\n            </p>\n          </>\n        ) : (\n          <>\n            <p>\n              To bring up the correct cover calculator simply click the\n              appropriate &quot;Enter&quot; button. To double check that you\n              have the correct policy you can click on the &quot;PDF&quot; icon\n              for the wording.\n            </p>\n            <p>\n              If you wish to email a link of the correct cover calculator to\n              your client, accountant or the like please simply click on the\n              Email icon and then email it with an explanation as to what you\n              want the recipient to do with it.\n            </p>\n          </>\n        )}\n      </div>\n\n      {isUserAdmin && (\n        <div className=\"calculator-status-tag\">\n          <Tag color=\"#f2dede\">Inactive Calculator</Tag>\n        </div>\n      )}\n\n      <div className=\"calculators-content-body\">\n        <CalculatorList\n          calculatorList={calculators}\n          loading={loadingCalculatorList}\n          handleMultiCalculators={handleMultiCalculators}\n          userCountryId={userCountryId}\n          buyGroupId={buyGroupId}\n        />\n      </div>\n    </>\n  );\n\n  const renderSavedCalculations = () => (\n    <>\n      <div className=\"calculators-content-header\">\n        <p className=\"calculators-content-header-title\">\n          View, edit or send completed or partially completed calculations!\n        </p>\n        <p>\n          Calculators that have more than one version of the calculation are\n          marked with the right arrow symbol. Click the arrow to view the\n          version history\n        </p>\n      </div>\n      <SavedCalculations\n        loading={loadingCalculatorResultsSummary}\n        userCountryId={userCountryId}\n        fetchResultsSummary={fetchResultsSummary}\n      />\n    </>\n  );\n\n  const renderTabs = () => (\n    <div className=\"screen-tabs\">\n      <div\n        className={cx('tab', {\n          selected: selectedScreen === SCREEN_LABELS.Calculators,\n        })}\n      >\n        <Button\n          onClick={() => setSelectedScreen(SCREEN_LABELS.Calculators)}\n          type=\"text\"\n          icon={\n            <FontAwesomeIcon icon={faCalculator} style={{ marginRight: 10 }} />\n          }\n        >\n          Select Your Calculator\n        </Button>\n      </div>\n      {theme.isUsTheme && (\n        <div\n          className={cx('tab', {\n            selected: selectedScreen === SCREEN_LABELS.SavedCalculations,\n          })}\n        >\n          <Badge count={updatedReferencesByClient?.length} overflowCount={99}>\n            <Button\n              onClick={() => setSelectedScreen(SCREEN_LABELS.SavedCalculations)}\n              type=\"text\"\n              icon={\n                <FontAwesomeIcon\n                  icon={faBookmark}\n                  style={{ marginRight: 10 }}\n                />\n              }\n            >\n              Your Saved Calculations\n            </Button>\n          </Badge>\n        </div>\n      )}\n    </div>\n  );\n\n  return (\n    <Layout>\n      <LayoutWithSideAds>\n        <div className=\"calculators-content\">\n          <Ads />\n          {!selectedScreen && (\n            <ScreenSelect\n              selectScreen={(screen) => setSelectedScreen(screen)}\n              screenLabels={SCREEN_LABELS}\n            />\n          )}\n          {selectedScreen && (\n            <>\n              {isUserAdmin && (\n                <AdminSection\n                  calcListFilter={calcListFilter}\n                  setCalcListFilter={setCalcListFilter}\n                  fetchCalculatorList={fetchCalculatorList}\n                  fetchResultsSummary={fetchResultsSummary}\n                  loading={loadingCalculatorList}\n                />\n              )}\n              {renderTabs()}\n              {selectedScreen === SCREEN_LABELS.Calculators\n                ? calcId && multiCalculators\n                  ? renderMultiCalculatorContent()\n                  : renderCalculatorListContent()\n                : renderSavedCalculations()}\n            </>\n          )}\n        </div>\n      </LayoutWithSideAds>\n    </Layout>\n  );\n};\n\nconst mapStateToProps = (state) => ({\n  calculatorList: state.calculators.calculatorList,\n  userCountryId: state.auth?.user?.user?.countryId,\n  buyGroupId: state.auth?.user?.user?.buygroupId,\n  isUserAdmin: selectIsUserAdmin(state),\n  updatedReferencesByClient:\n    state.calculators?.resultsSummary?.ClientUpdatedResults,\n  loadingCalculatorList: state.calculators.calculatorListStatus === 'loading',\n  loadingCalculatorResultsSummary:\n    state.calculators.calculatorResultsStatus === 'loading',\n});\n\nexport default connect(mapStateToProps)(Calculators);\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Input, Select } from 'antd';\nimport { setInsuredName } from '../../../../calculatorsSlice';\nimport { fetchInsuredNameList } from '../../../../../../features/calculators';\nimport { selectIsUserClient } from '../../../../../../features/auth';\nimport { decrypt, encrypt } from '../../../../../../services/crypto';\n\nconst { Option } = Select;\n\nexport const InsuredNameInput = ({ onChange, defaultValue, ...restProps }) => {\n  const isClient = useSelector((state) => selectIsUserClient(state));\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    if (defaultValue) {\n      dispatch(setInsuredName(defaultValue));\n    }\n  }, []);\n\n  const handleChange = (e) => {\n    dispatch(setInsuredName(e.target.value));\n    onChange(e.target.value);\n  };\n\n  return (\n    <Input\n      {...restProps}\n      disabled={isClient && defaultValue}\n      defaultValue={defaultValue && decrypt(defaultValue)}\n      onChange={handleChange}\n    />\n  );\n};\n\nexport const SelectInsuredName = ({ onChange, defaultValue }) => {\n  const [insuredNameList, setInsuredNameList] = useState([]);\n  const [keyword, setKeyword] = useState('');\n  const [loading, setLoading] = useState(false);\n  const userId = useSelector((state) => state.auth?.user?.user?.userId);\n  const isClient = useSelector((state) => selectIsUserClient(state));\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    if (defaultValue) {\n      dispatch(setInsuredName(defaultValue));\n    }\n  }, []);\n\n  const fetchInsuredList = async () => {\n    if (userId) {\n      setLoading(true);\n      setInsuredNameList(await fetchInsuredNameList(userId));\n    }\n    setLoading(false);\n  };\n\n  useEffect(() => {\n    fetchInsuredList();\n  }, []);\n\n  const handleSearch = (value) => {\n    setKeyword(value);\n  };\n\n  const handleChange = (value) => {\n    onChange?.(encrypt(value));\n    dispatch(setInsuredName(encrypt(value)));\n  };\n\n  return (\n    <Select\n      showSearch\n      defaultValue={decrypt(defaultValue)}\n      onChange={handleChange}\n      onSearch={handleSearch}\n      disabled={isClient && defaultValue}\n      notFoundContent={<div>Please enter insured name</div>}\n    >\n      {keyword.length > 1 && !loading && (\n        <Option key=\"user-added-insured-name\" value={keyword}>\n          {keyword}\n        </Option>\n      )}\n\n      {!isClient &&\n        !!insuredNameList.length &&\n        insuredNameList.map(\n          (insuredName) =>\n            !!insuredName.length && (\n              <Option key={insuredName} value={decrypt(insuredName)}>\n                {decrypt(insuredName) || insuredName}\n              </Option>\n            )\n        )}\n    </Select>\n  );\n};\n\nexport default InsuredNameInput;\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect } from 'react';\nimport { Spin, Image } from 'antd';\nimport { useDispatch, connect } from 'react-redux';\nimport { fetchBannerAsync } from '../../features/ads';\nimport theme, { THEMES } from '../../services/theme';\nimport './ads.less';\n\nconst ADS_EXCLUDED_THEMES = [THEMES.aviva];\n\nconst Ads = ({ media, user, adsLoading }) => {\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    if (user && !media) {\n      dispatch(\n        fetchBannerAsync({ userId: user.userId, bannerId: user.bannerId })\n      );\n    }\n  }, [user, media]);\n\n  if (ADS_EXCLUDED_THEMES.includes(theme.siteTheme)) {\n    return null;\n  }\n\n  return (\n    <div className=\"media-ads\">\n      {adsLoading ? (\n        <Spin />\n      ) : (\n        media && <Image src={media.FilePath} preview={false} />\n      )}\n    </div>\n  );\n};\n\nconst mapStateToProps = (state) => ({\n  media: state.ads.media,\n  adsLoading: state.ads.adsStatus === 'loading',\n  user: state.auth?.user?.user,\n});\n\nexport default connect(mapStateToProps)(Ads);\n","export default __webpack_public_path__ + \"static/media/BI-advBanner-left-partners&.6c947c66.png\";","export default __webpack_public_path__ + \"static/media/BI-advBanner-right-partners&.6c947c66.png\";","export default __webpack_public_path__ + \"static/media/Santam_Side_banner_link_left.89844cf5.jpg\";","export default __webpack_public_path__ + \"static/media/Santam_Side_banner_link_right.0dd59346.jpg\";","export default __webpack_public_path__ + \"static/media/axa-BI-calculator-left-banner.009be253.jpg\";","export default __webpack_public_path__ + \"static/media/axa-BI-calculator-right-banner.8b360899.jpg\";","import partnersandLeftImg from './partnersand/BI-advBanner-left-partners&.png';\nimport partnersandRightImg from './partnersand/BI-advBanner-right-partners&.png';\nimport santamLeftImg from './santam/Santam_Side_banner_link_left.jpg';\nimport santamRightImg from './santam/Santam_Side_banner_link_right.jpg';\nimport axaLeftImg from './axa/axa-BI-calculator-left-banner.jpg';\nimport axaRightImg from './axa/axa-BI-calculator-right-banner.jpg';\n\n// Australia: 1\n// Canada: 7\n// Fiji: 56\n// Hong Kong: 11\n// Indonesia: 5\n// Ireland: 10\n// Malaysia: 12\n// Namibia: 104\n// New Zealand: 2\n// Papua New Guinea: UNKNOWN\n// Singapore: 8\n// South Africa: 6\n// Thailand: 137\n// United Kingdom: 3\n// USA: 9\n\nexport default [\n  {\n    key: 'lmi-allan-master-class',\n    country: 1,\n    leftImage:\n      'https://lmicdn.blob.core.windows.net/common/webinar_banner_masterClassAllan_2025.jpg',\n    rightImage:\n      'https://lmicdn.blob.core.windows.net/common/webinar_banner_masterClassAllan_2025.jpg',\n    url: 'https://lmigroup.io/product/live-business-interruption-bi-masterclass-starts-9-4-prof-allan-manning/',\n  },\n  {\n    key: 'lmi-mansfield',\n    country: 1,\n    leftImage:\n      'https://lmicdn.blob.core.windows.net/common/TMA-2025-banner-vertical.jpg',\n    rightImage:\n      'https://lmicdn.blob.core.windows.net/common/TMA-2025-banner-vertical.jpg',\n    url: 'https://mansfieldawards.com.au/product/2025-mansfield-awards-ticket/',\n  },\n  {\n    key: 'lmi-pci-v2',\n    country: 1,\n    leftImage:\n      'https://lmicdn.blob.core.windows.net/common/pci2_vertical_banner.jpg',\n    rightImage:\n      'https://lmicdn.blob.core.windows.net/common/pci2_vertical_banner.jpg',\n    url: 'https://lmigroup.io/eservices/policy-comparison/',\n  },\n  {\n    key: 'lmi-legal',\n    country: 1,\n    leftImage:\n      'https://lmicdn.blob.core.windows.net/common/LMILegal-banner.jpg',\n    rightImage:\n      'https://lmicdn.blob.core.windows.net/common/LMILegal-banner.jpg',\n    url: 'https://lmilegal.com/',\n  },\n  {\n    key: 'lmi-responsible-manager-course',\n    country: 1,\n    leftImage:\n      'https://lmicdn.blob.core.windows.net/common/LMICollege-ResponsibleManager-banner.jpg',\n    rightImage:\n      'https://lmicdn.blob.core.windows.net/common/LMICollege-ResponsibleManager-banner.jpg',\n    url: 'https://lmicollege.edu.au/responsible-manager/',\n  },\n  {\n    key: 'lmi-webinar',\n    country: 1,\n    leftImage:\n      'https://lmicdn.blob.core.windows.net/common/webinar_banner_2024.jpg',\n    rightImage:\n      'https://lmicdn.blob.core.windows.net/common/webinar_banner_2024.jpg',\n    url: 'https://lmigroup.io/webinars',\n  },\n  {\n    key: 'lmi-claims',\n    country: 1,\n    leftImage:\n      'https://lmicdn.blob.core.windows.net/common/lmi-banner-claims.png',\n    rightImage:\n      'https://lmicdn.blob.core.windows.net/common/lmi-banner-claims.png',\n    url: 'http://www.lmigroup.com/content.aspx?catId=148&hideNavigation=true',\n  },\n  {\n    key: 'lmi-college-eservices',\n    country: 1,\n    leftImage:\n      'https://lmicdn.blob.core.windows.net/common/lmi-college-eservices-banner-01.jpg',\n    rightImage:\n      'https://lmicdn.blob.core.windows.net/common/lmi-college-eservices-banner-02.jpg',\n    url: 'https://www.thefss.com.au/about-us.html',\n  },\n  {\n    key: 'lmi-custom-reporting',\n    country: 1,\n    leftImage:\n      'https://lmicdn.blob.core.windows.net/common/RC_CustomReporting_Vertical.png',\n    rightImage:\n      'https://lmicdn.blob.core.windows.net/common/RC_CustomReporting_Vertical.png',\n    url: 'https://lmigroup.io/riskcoach-tailored-reporting-now-available/',\n  },\n  {\n    key: 'lmi-claims-nz',\n    country: 2,\n    leftImage:\n      'https://lmicdn.blob.core.windows.net/common/lmi-banner-claims.png',\n    rightImage:\n      'https://lmicdn.blob.core.windows.net/common/lmi-banner-claims.png',\n    url: 'http://www.lmigroup.com/content.aspx?catId=148&hideNavigation=true',\n  },\n  {\n    key: 'lmi-custom-reporting-nz',\n    country: 2,\n    leftImage:\n      'https://lmicdn.blob.core.windows.net/common/RC_CustomReporting_Vertical.png',\n    rightImage:\n      'https://lmicdn.blob.core.windows.net/common/RC_CustomReporting_Vertical.png',\n    url: 'https://lmigroup.io/riskcoach-tailored-reporting-now-available/',\n  },\n];\n\nexport const partnersandAds = [\n  {\n    key: 'partnersand-side-ads',\n    country: 3,\n    leftImage: partnersandLeftImg,\n    rightImage: partnersandRightImg,\n    url: 'https://www.partnersand.com/',\n  },\n];\n\nexport const santamAds = [\n  {\n    key: 'santam-side-ads',\n    country: 6,\n    leftImage: santamLeftImg,\n    rightImage: santamRightImg,\n    url: 'https://www.santam.co.za/',\n  },\n];\n\nexport const avivaAds = [];\nexport const usAds = [];\nexport const axaAds = [\n  {\n    key: 'axa-side-ads',\n    country: 3,\n    leftImage: axaLeftImg,\n    rightImage: axaRightImg,\n    url: 'https://www.axaconnect.co.uk/commercial-lines/axa-vantage-mid-market/?utm_source=advert&utm_medium=website',\n  },\n];\n","import { useState, useEffect } from 'react';\n\nconst useWindowScroll = () => {\n  const [scrollPosition, setScrollPosition] = useState();\n\n  useEffect(() => {\n    const onScroll = () => {\n      const scrollTop =\n        window.pageYOffset ||\n        document.body.scrollTop ||\n        document.documentElement.scrollTop;\n      setScrollPosition(scrollTop);\n    };\n\n    window.addEventListener('scroll', onScroll);\n    return () => {\n      window.removeEventListener('scroll', onScroll);\n    };\n  }, []);\n\n  return { scrollPosition };\n};\n\nexport default useWindowScroll;\n","/* eslint-disable react/destructuring-assignment */\nimport { useSelector } from 'react-redux';\nimport { Carousel, Row, Col, Affix } from 'antd';\n\nimport banners, {\n  partnersandAds,\n  santamAds,\n  avivaAds,\n  axaAds,\n  usAds,\n} from './assets';\nimport theme, { THEMES } from '../../services/theme';\nimport useWindowResize from '../hooks/useWindowResize';\nimport useWindowScroll from '../hooks/useWindowScroll';\nimport './ads.less';\n\nconst themedAds = {\n  [THEMES.partnersand]: partnersandAds,\n  [THEMES.santam]: santamAds,\n  [THEMES.aviva]: avivaAds,\n  [THEMES.axa]: axaAds,\n  [THEMES.us]: usAds,\n};\n\nconst BannerLink = ({ side, banner }) => (\n  <a\n    key={banner.key}\n    href={\n      side === 'rightImage' && banner?.urlRight ? banner.urlRight : banner.url\n    }\n    target=\"_blank\"\n    rel=\"noopener noreferrer\"\n  >\n    <img src={banner[side]} alt={banner.key} />\n  </a>\n);\n\nconst SideAds = ({ banners, side = 'leftImage' }) => {\n  const countryId = useSelector((state) => state.auth?.user?.user?.countryId);\n\n  const selectSideAds = () => {\n    if (themedAds[theme.siteTheme] && theme.siteTheme !== THEMES.default) {\n      return themedAds[theme.siteTheme].map((banner) => (\n        <BannerLink key={banner.key} banner={banner} side={side} />\n      ));\n    }\n\n    return banners\n      .filter((banner) => banner.country === countryId)\n      .map((banner) => (\n        <BannerLink key={banner.key} banner={banner} side={side} />\n      ));\n  };\n\n  return (\n    <Carousel\n      className=\"side-banner-container\"\n      effect=\"fade\"\n      autoplay\n      pauseOnHover={false}\n      autoplaySpeed={4500}\n      dots={false}\n    >\n      {selectSideAds()}\n    </Carousel>\n  );\n};\n\nconst LayoutWithSideAds = ({ children }) => {\n  const { height } = useWindowResize();\n  const { scrollPosition } = useWindowScroll();\n\n  const BANNER_IMAGE_HEIGHT = 600 + 20;\n  const FOOTER_HEIGHT = 102;\n\n  const getBannerPosition = () => {\n    if (height && scrollPosition) {\n      if (height >= BANNER_IMAGE_HEIGHT + FOOTER_HEIGHT) return 10;\n      if (\n        height < BANNER_IMAGE_HEIGHT + FOOTER_HEIGHT &&\n        scrollPosition > 360\n      ) {\n        return height - (BANNER_IMAGE_HEIGHT + FOOTER_HEIGHT);\n      }\n    }\n    return 10;\n  };\n\n  return (\n    <Row className=\"with-side-ads\">\n      <Col span={0} lg={2}>\n        <Affix offsetTop={getBannerPosition()}>\n          <SideAds banners={banners} side=\"leftImage\" />\n        </Affix>\n      </Col>\n      <Col span={24} lg={20}>\n        {children}\n      </Col>\n      <Col span={0} lg={2}>\n        <Affix offsetTop={getBannerPosition()}>\n          <SideAds banners={banners} side=\"rightImage\" />\n        </Affix>\n      </Col>\n    </Row>\n  );\n};\n\nexport default LayoutWithSideAds;\n","/* eslint-disable no-unused-vars */\n/* eslint-disable max-len */\n/* eslint-disable import/prefer-default-export */\nimport axios from 'axios';\nimport { message } from 'antd';\nimport { StatusCodes } from 'http-status-codes';\nimport api from '../../services/api';\nimport theme from '../../services/theme';\n\nconst BASE_URL = theme.isUsTheme ? api.urls.usaBase : api.urls.base;\nconst API_LMI_STAT = api.urls.stat;\n\nexport const fetchCalculatorList = async ({ countryId, buyerGroupId }) => {\n  const timeStamp = new Date().getTime();\n  const params = { countryId, buyerGroupId, timeStamp };\n  try {\n    const resCalculatorList = await axios.get(`${BASE_URL}/calculators`, {\n      params,\n    });\n    return resCalculatorList.data;\n  } catch (err) {\n    const reason = 'Failed to fetch calculators list';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const fetchCalculatorReference = async (id) => {\n  try {\n    const timeStamp = new Date().getTime();\n    const reqUrl = `${BASE_URL}/calculators/${id}/ReferenceNumber?timer=${timeStamp}`;\n    const resCalculator = await axios.post(reqUrl);\n    return resCalculator.data;\n  } catch (err) {\n    const reason = 'Failed to fetch calculator references';\n    const status = err ? err.status : null;\n    message.error(reason);\n    switch (status) {\n      case StatusCodes.NOT_FOUND:\n        window.location.replace('/not-found');\n        throw new Error(reason);\n      default:\n        throw new Error(reason);\n    }\n  }\n};\n\nexport const fetchCalculatorReferenceById = async (id) => {\n  try {\n    const resCalculator = await axios.get(`${BASE_URL}/references/${id}`);\n    return resCalculator.data;\n  } catch (err) {\n    const reason = 'Failed to fetch calculator reference';\n    const status = err ? err.status : null;\n    message.error(reason);\n    switch (status) {\n      case StatusCodes.NOT_FOUND:\n        window.location.replace('/not-found');\n        throw new Error(reason);\n      default:\n        throw new Error(reason);\n    }\n  }\n};\n\nexport const fetchCalculatorStep = async ({ refId, stepId }) => {\n  try {\n    const timeStamp = new Date().getTime();\n    const resCalculatorStep = await axios.get(\n      `${BASE_URL}/references/${refId}/steps/${stepId}?timer=${timeStamp}`\n    );\n    return resCalculatorStep.data;\n  } catch (err) {\n    const reason = 'Failed to fetch calculator step';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const updateCalculatorStep = async ({\n  refId,\n  stepId,\n  values,\n  isClient = false,\n}) => {\n  try {\n    const timeStamp = new Date().getTime();\n    await axios.post(\n      `${BASE_URL}/references/${refId}/steps/${stepId}?timer=${timeStamp}&isClient=${isClient}`,\n      values\n    );\n    return Promise.resolve('Calcaulator step has been updated');\n  } catch (err) {\n    const reason = 'Failed to update calculator step';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const calculateCalculatorResults = async ({ refId }) => {\n  try {\n    const timeStamp = new Date().getTime();\n    await axios.post(\n      `${BASE_URL}/references/${refId}/results?timer=${timeStamp}`,\n      { referenceId: refId }\n    );\n    return Promise.resolve('Calcaulator results have been calculated');\n  } catch (err) {\n    const reason = 'Failed to calculate calculator results';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const fetchCalculatorResults = async ({ refId, insuredName }) => {\n  try {\n    const timeStamp = new Date().getTime();\n    const url = theme.isUsTheme\n      ? `${BASE_URL}/references/${refId}/resulttemplateandvalues?ins=${insuredName}&timer=${timeStamp}`\n      : `${BASE_URL}/references/${refId}/results?ins=${insuredName}&timer=${timeStamp}`;\n    const resCalculatorResults = await axios.get(url);\n    return resCalculatorResults.data;\n  } catch (err) {\n    const reason = 'Failed to fetch calculator results';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const fetchLastStepId = async (calculatorId) => {\n  try {\n    const res = await axios.get(\n      `${BASE_URL}/calculators/${calculatorId}/steps/last`\n    );\n    return res.data;\n  } catch (err) {\n    const reason = 'Failed to fetch last step id';\n    throw new Error(reason);\n  }\n};\n\nexport const fetchIndustries = async (keyword) => {\n  try {\n    const timeStamp = new Date().getTime();\n    const resIndustryResults = await axios.get(\n      `${BASE_URL}/industries?timer=${timeStamp}&keyword=${keyword}&page=1&codeTypeId=12`\n    );\n    return resIndustryResults.data;\n  } catch (err) {\n    const reason = 'Failed to fetch industries results';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const fetchClientEmail = async ({\n  calculatorId,\n  oldCalculatorId,\n  userCountryId,\n  buyGroupId,\n}) => {\n  try {\n    const timeStamp = new Date().getTime();\n    const reqUrl = `${BASE_URL}/emails/clientEmail?timer=${timeStamp}&countryId=${userCountryId}&buygroup=${buyGroupId}&domainName=${window.location.host}&isHtml=true&newCalculatorId=${calculatorId}&oldCalculatorId=${oldCalculatorId}`;\n    const resClientEmail = await axios.post(reqUrl, {});\n    return resClientEmail.data;\n  } catch (err) {\n    const reason = 'Failed to fetch client email template';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const fetchResultEmail = async ({ refId, insuredName }) => {\n  try {\n    const timeStamp = new Date().getTime();\n    const resResultEmail = await axios.get(\n      `${BASE_URL}/emails/resultEmail?timer=${timeStamp}&domainName=${window.location.host}&isHtml=true&referenceId=${refId}&ins=${insuredName}`\n    );\n    return resResultEmail.data;\n  } catch (err) {\n    const reason = 'Failed to fetch result email template';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const fetchCalculationEmail = async ({ refId, insuredName, stepId }) => {\n  try {\n    const timeStamp = new Date().getTime();\n    const reqUrl = `${BASE_URL}/emails/calculationEmail?timer=${timeStamp}&domainName=${window.location.host}&isHtml=true&referenceId=${refId}&stepId=${stepId}&ins=${insuredName}`;\n    const resCalculationEmail = await axios.post(reqUrl);\n    return resCalculationEmail.data;\n  } catch (err) {\n    const reason = 'Failed to fetch calculation email template';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const fetchResultPdf = async ({ refId }) => {\n  const timeStamp = new Date().getTime();\n  const resResultPdf = await axios.get(\n    `${BASE_URL}/references/${refId}/results/${window.location.hostname}/Pdf?timer=${timeStamp}`,\n    {\n      responseType: 'arraybuffer',\n    }\n  );\n  return resResultPdf;\n};\n\nexport const sendClientEmail = async (values) => {\n  try {\n    const timeStamp = new Date().getTime();\n    await axios.post(`${BASE_URL}/emails?timer=${timeStamp}`, values);\n    return Promise.resolve('Email has been sent successfully');\n  } catch (err) {\n    const reason = 'Failed to send email';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const sendCalculatoionEmail = async ({ values, referenceId }) => {\n  // values.EmailType\n  // Default=0,\n  // Calculation=1,\n  // FinalResult=2\n  try {\n    const timeStamp = new Date().getTime();\n    await axios.post(\n      `${BASE_URL}/emails/result/final/${referenceId}?timer=${timeStamp}`,\n      values\n    );\n    return Promise.resolve('Email has been sent successfully');\n  } catch (err) {\n    const reason = 'Failed to send email';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const sendCalculatorResults = async (values) => {\n  try {\n    const timeStamp = new Date().getTime();\n    await axios.post(`${BASE_URL}/emails?timer=${timeStamp}`, values);\n    return Promise.resolve('Email has been sent successfully');\n  } catch (err) {\n    const reason = 'Failed to send email';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const fetchGlossary = async (keyword) => {\n  try {\n    const definition = await axios.get(\n      `${BASE_URL}/glossary?scope=bic&keyword=${keyword}`\n    );\n    return definition.data;\n  } catch (err) {\n    const reason = 'Failed to fetch glossary term';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const addStats = async (values) => {\n  try {\n    await axios.post(API_LMI_STAT, values);\n    return Promise.resolve('Stat has been added');\n  } catch (err) {\n    const reason = 'Failed to add stats';\n    return Promise.resolve(reason);\n  }\n};\n\nexport const fetchCountries = async () => {\n  try {\n    const countries = await axios.get(`${BASE_URL}/country`);\n    return countries.data;\n  } catch (err) {\n    const reason = 'Failed to fetch countries';\n    message.error(reason);\n    return Promise.resolve(reason);\n  }\n};\n\nexport const fetchBuyerGroups = async (countryId) => {\n  try {\n    const buyerGroup = await axios.get(\n      `${BASE_URL}/buyergroup?country=${countryId}`\n    );\n    return buyerGroup.data;\n  } catch (err) {\n    const reason = 'Failed to fetch buyer groups';\n    message.error(reason);\n    return Promise.resolve(err);\n  }\n};\n\nexport const fetchCalculationResults = async (refId) => {\n  const timeStamp = new Date().getTime();\n  try {\n    const countries = await axios.get(\n      `${BASE_URL}/results/${refId}?timer=${timeStamp}`\n    );\n    return countries.data;\n  } catch (err) {\n    const reason = 'Failed to calculation results';\n    message.error(reason);\n    return Promise.resolve(reason);\n  }\n};\n\nexport const fetchDataInputPdf = async (calculatorId) => {\n  try {\n    const res = await axios.get(\n      `${BASE_URL}/calculators/download/${calculatorId}/questions/pdf`,\n      {\n        responseType: 'arraybuffer',\n      }\n    );\n    return res;\n  } catch (err) {\n    const reason = 'Failed to fetch data input pdf';\n    throw new Error(reason);\n  }\n};\n\nexport const fetchInsuredNameList = async (userId) => {\n  try {\n    const res = await axios.get(`${BASE_URL}/insurednames?userId=${userId}`);\n    return res.data;\n  } catch (err) {\n    const reason = 'Failed to fetch insured names';\n    message.error(reason);\n    return Promise.resolve(reason);\n  }\n};\n\nexport const fetchResultsSummary = async (countryId) => {\n  try {\n    const res = await axios.get(\n      `${BASE_URL}/resultssummary?countryId=${countryId}`\n    );\n    return res.data;\n  } catch (err) {\n    const reason = 'Failed to fetch results summary';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const duplicateCalculation = async (refId) => {\n  try {\n    const res = await axios.post(\n      `${BASE_URL}/duplicatecalculationresult/${refId}`\n    );\n    return res.data;\n  } catch (err) {\n    const reason = 'Failed to duplicate calculation results';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const disableCalculationResult = async (refId) => {\n  try {\n    const res = await axios.put(\n      `${BASE_URL}/disablecalculationResult/${refId}/true`\n    );\n    return res.data;\n  } catch (err) {\n    const reason = 'Failed to delete calculation result';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const updateCalculationDescription = async ({ refId, description }) => {\n  try {\n    const res = await axios.put(`${BASE_URL}/updateresultdescription`, {\n      ReferenceNumber: refId,\n      description,\n    });\n    return res.data;\n  } catch (err) {\n    const reason = 'Failed to update calculation description';\n    message.error(reason);\n    throw new Error(reason);\n  }\n};\n\nexport const updateViewedReferences = async (refIds) => {\n  try {\n    await axios.put(`${BASE_URL}/reviewresultsbybrokerasync`, refIds);\n    return Promise.resolve('references have been updated');\n  } catch (err) {\n    const reason = 'Failed to update viewed references';\n    throw new Error(reason);\n  }\n};\n","/* eslint-disable consistent-return */\n/* eslint-disable no-param-reassign */\n/* eslint-disable import/prefer-default-export */\nimport axios from 'axios';\nimport { createSlice } from '@reduxjs/toolkit';\nimport { StatusCodes } from 'http-status-codes';\nimport { message } from 'antd';\nimport { SESSION_KEY, checkUrlAccess } from '../../services/auth';\nimport {\n  loginWithEncryptedDataAsync,\n  fetchUserAsync,\n  logout,\n} from '../../features/auth';\nimport theme from '../../services/theme';\nimport stats from '../../services/stats';\nimport { addStats } from '../../features/calculators';\nimport { useAnalyticsEventTracker } from '../tracker/Tracker';\n\nconst PROJECT_ID = process.env.REACT_APP_PROJECT_ID;\n\nclass AccessRequestUrl {\n  constructor() {\n    this.url = new URL(window.location);\n  }\n\n  get linkgenToken() {\n    const encryptedData =\n      this.url.searchParams.get('EncryptedData') ||\n      this.url.searchParams.get('amp;EncryptedData');\n    const key = this.url.searchParams.get('key');\n\n    if (encryptedData && key) {\n      return encryptedData;\n    }\n    return null;\n  }\n\n  get token() {\n    return (\n      this.url.searchParams.get('token') || localStorage.getItem(SESSION_KEY)\n    );\n  }\n}\n\nexport const initialize = () => async (dispatch) => {\n  const eventTracker = useAnalyticsEventTracker();\n  const { isClientAccess } = checkUrlAccess();\n  if (window.location.pathname.includes('//')) {\n    const replacedPath =\n      window.location.pathname.replace('//', '/') + window.location.search;\n    window.location.replace(replacedPath);\n  }\n\n  // replace linkgen url for Aviva users\n  if (\n    window.location.search.includes('key=wbxPRzmK') &&\n    window.location.pathname.includes('/Redir.aspx')\n  ) {\n    const replacedPath = `https://aviva.bicalculator.com/calculators${window.location.search}`;\n    window.location.replace(replacedPath);\n    return;\n  }\n\n  if (window.location.pathname.includes('/Redir.aspx')) {\n    const replacedPath =\n      window.location.pathname.replace('/Redir.aspx', '/calculators') +\n      window.location.search;\n    window.location.replace(replacedPath);\n  }\n\n  if (!isClientAccess) {\n    const url = new AccessRequestUrl();\n\n    axios.interceptors.response.use(\n      (res) => res,\n      async ({ response }) => {\n        const status = response ? response.status : null;\n        switch (status) {\n          case StatusCodes.UNAUTHORIZED:\n            message.destroy();\n            message.error('Session expired. Please login again');\n            dispatch(logout());\n            return Promise.reject(response);\n          default:\n            return Promise.reject(response);\n        }\n      }\n    );\n\n    let token = url.linkgenToken;\n    if (token) {\n      await dispatch(\n        loginWithEncryptedDataAsync({ token, grantType: 'LinkgenUrl' })\n      );\n\n      // login route is used for SSO login, if linkgen url is detected then trigger Linkgen stat\n      if (!window.location.pathname?.includes('/login')) {\n        addStats({\n          projectId: PROJECT_ID,\n          typeName: stats.statLabels.linkgen,\n        });\n        eventTracker('Login', stats.gaLabels.linkgen);\n      }\n    } else {\n      token = url.token;\n      if (token) {\n        localStorage.setItem(SESSION_KEY, token);\n        axios.defaults.headers.common.Authorization = `Bearer ${token}`;\n        await dispatch(fetchUserAsync(token));\n      }\n    }\n  }\n\n  theme.setSiteTheme();\n\n  return null;\n};\n\nconst initialState = { initialized: false, theme: theme.siteTheme };\n\nexport const appSlice = createSlice({\n  name: 'app',\n  initialState,\n  reducers: {\n    initializeApp: (state) => {\n      state.initialized = true;\n    },\n    setTheme: (state, { payload }) => {\n      state.theme = payload;\n    },\n  },\n});\n\nexport const { initializeApp, setTheme } = appSlice.actions;\n\nexport default appSlice.reducer;\n","import { configureStore } from '@reduxjs/toolkit';\nimport authReducer from './features/auth';\nimport calculcatorsReducer from './scenes/calculators/calculatorsSlice';\nimport adsReducer from './features/ads';\nimport appReducer from './components/app/appSlice';\n\nconst rootReducer = {\n  app: appReducer,\n  calculators: calculcatorsReducer,\n  auth: authReducer,\n  ads: adsReducer,\n};\n\nexport default configureStore({\n  reducer: rootReducer,\n  devTools: process.env.NODE_ENV !== 'production',\n});\n\nexport const getStoreWithPreloadedState = (preloadedState) =>\n  configureStore({\n    reducer: rootReducer,\n    preloadedState,\n  });\n","import React from 'react';\nimport './spinner.less';\n\nexport default () => (\n  <div className=\"spinner-wrapper\">\n    <div className=\"spinner\" />\n  </div>\n);\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Spinner from '../spinner/Spinner';\nimport { initialize, initializeApp } from './appSlice';\nimport theme, { THEMES } from '../../services/theme';\n\nimport './App.less';\nimport '../../styles/themes/index.less';\n\nexport default ({ children }) => {\n  const dispatch = useDispatch();\n  const initialized = useSelector((state) => state.app.initialized);\n\n  useEffect(() => {\n    const init = async () => {\n      await dispatch(initialize());\n      dispatch(initializeApp());\n    };\n    init();\n  }, []);\n\n  if (!initialized) {\n    return <Spinner />;\n  }\n\n  return <div className={theme.siteTheme || THEMES.default}>{children}</div>;\n};\n","import React, { Component } from 'react';\nimport './error-boundary.less';\n\nexport default class ErrorBoundary extends Component {\n  constructor(props) {\n    super(props);\n    this.state = { hasError: false };\n  }\n\n  componentDidCatch(error, info) {\n    this.setState({ hasError: true });\n    console.error(error, info);\n  }\n\n  render() {\n    const { children } = this.props;\n    const { hasError } = this.state;\n    if (hasError) {\n      return (\n        <div className=\"error-boundary\">\n          <div className=\"error-boundary-icon\" />\n        </div>\n      );\n    }\n    return children;\n  }\n}\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect, useState } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Spin } from 'antd';\n\nimport { Layout } from '../../../../components';\nimport { fetchCalculatorReferenceAsync } from '../../calculatorsSlice';\nimport { addStats } from '../../../../features/calculators';\nimport stats from '../../../../services/stats';\nimport {\n  useAnalyticsPageviewTracker,\n  useAnalyticsEventTracker,\n} from '../../../../components/tracker/Tracker';\n\nimport './calculator-references.less';\n\nconst PROJECT_ID = process.env.REACT_APP_PROJECT_ID;\n\nconst CalcalatorReferences = () => {\n  const { calcId } = useParams();\n  const dispatch = useDispatch();\n  const navigate = useNavigate();\n  const pageviewTracker = useAnalyticsPageviewTracker();\n  const eventTracker = useAnalyticsEventTracker('CalculatorSelect');\n  const [loadingReference, setLoadingReference] = useState(true);\n\n  const calculatorReference = useSelector(\n    (state) => state.calculators.calculatorReference\n  );\n\n  useEffect(() => {\n    const fetchCalculatorRef = async () => {\n      await dispatch(fetchCalculatorReferenceAsync(calcId));\n    };\n    fetchCalculatorRef();\n    setLoadingReference(false);\n    addStats({\n      projectId: PROJECT_ID,\n      typeName: stats.statLabels.calculatorStarted,\n    });\n    pageviewTracker(`/calculators/${calcId}/referencenumber`);\n  }, [calcId]);\n\n  useEffect(() => {\n    if (\n      !loadingReference &&\n      calculatorReference &&\n      calculatorReference?.ReferenceId &&\n      calculatorReference?.FirstStepId\n    ) {\n      eventTracker(\n        'Select',\n        `${calculatorReference.PolicyId}-${calculatorReference.PolicyName}-${calculatorReference.PolicyCode}`\n      );\n      navigate(\n        `/references/${calculatorReference.ReferenceId}/steps/${calculatorReference.FirstStepId}`\n      );\n    }\n  }, [calculatorReference]);\n\n  return (\n    <Layout>\n      <div className=\"loading-container\">\n        <Spin tip=\"Loading calculator...\" size=\"large\" />\n      </div>\n    </Layout>\n  );\n};\n\nexport default CalcalatorReferences;\n","import CalcalatorReferences from './CalculatorReferences';\n\nexport default CalcalatorReferences;\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Spin } from 'antd';\nimport { Layout } from '../../../../components';\nimport { logout } from '../../../../features/auth';\nimport auth from '../../../../services/auth';\nimport './logout-page.less';\n\nconst LogoutPage = () => {\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    dispatch(logout());\n  }, [auth.isLoggedIn]);\n\n  return (\n    <Layout>\n      <div className=\"loading-container\">\n        <Spin tip=\"navigating to homepage...\" size=\"large\" />\n      </div>\n    </Layout>\n  );\n};\n\nexport default LogoutPage;\n","/* eslint-disable consistent-return */\nimport { Suspense, lazy } from 'react';\nimport { useSelector } from 'react-redux';\nimport { BrowserRouter, Route, Routes, Navigate } from 'react-router-dom';\nimport Spinner from './components/spinner/Spinner';\nimport Tracker from './components/tracker/Tracker';\nimport ErrorBoundary from './components/error-boundary/ErrorBoundary';\nimport auth from './services/auth';\nimport { selectIsUserClient } from './features/auth';\nimport CalcalatorReferences from './scenes/calculators/scenes/calculator-references';\nimport LogoutPage from './scenes/login/components/logout-page/LogoutPage';\nimport theme, { THEMES } from './services/theme';\n\nconst Home = lazy(() => import('./scenes/home/Home'));\nconst LoginScene = lazy(() => import('./scenes/login'));\nconst Calculators = lazy(() => import('./scenes/calculators'));\nconst Calculator = lazy(() => import('./scenes/calculators/scenes/calculator'));\nconst NotFound = lazy(() => import('./scenes/not-found'));\n\nconst PrivateRoute = ({ clientAccess, component: RouteComponent }) => {\n  const isUserClient = useSelector(selectIsUserClient);\n\n  if (!auth.isLoggedIn) {\n    window.location.replace('/login');\n    return null;\n  }\n\n  if (!clientAccess && isUserClient) {\n    return <Navigate to=\"/\" replace />;\n  }\n\n  return <RouteComponent />;\n};\n\nconst HomepageRoute = ({\n  redirectPath = '/calculators',\n  component: RouteComponent,\n}) => {\n  // Brand site should not have access to homepage\n  if (theme.siteTheme !== THEMES.default) {\n    return <Navigate to={redirectPath} />;\n  }\n\n  return <RouteComponent />;\n};\n\nexport default () => (\n  <BrowserRouter>\n    <Tracker />\n    <Suspense fallback={<Spinner />}>\n      <Routes>\n        <Route path=\"/\" element={<HomepageRoute component={Home} />} />\n        <Route path=\"/login\" element={<LoginScene />} />\n        <Route path=\"/logout\" element={<LogoutPage />} />\n        <Route\n          path=\"/calculators\"\n          element={\n            <ErrorBoundary>\n              <PrivateRoute component={Calculators} />\n            </ErrorBoundary>\n          }\n        />\n        <Route\n          path=\"/policy/calculators/:calcId\"\n          element={\n            <ErrorBoundary>\n              <PrivateRoute component={Calculators} />\n            </ErrorBoundary>\n          }\n        />\n        <Route\n          path=\"/calculators/:calcId/referencenumber\"\n          element={\n            <ErrorBoundary>\n              <PrivateRoute clientAccess component={CalcalatorReferences} />\n            </ErrorBoundary>\n          }\n        />\n        <Route\n          path=\"/references/:refId/steps/:stepId\"\n          element={\n            <ErrorBoundary>\n              <PrivateRoute clientAccess component={Calculator} />\n            </ErrorBoundary>\n          }\n        />\n        <Route path=\"*\" element={<NotFound />} />\n      </Routes>\n    </Suspense>\n  </BrowserRouter>\n);\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { message } from 'antd';\nimport store from './store';\nimport './index.css';\nimport App from './components/app/App';\nimport Routes from './routes';\n\n// import reportWebVitals from \"./reportWebVitals\";\n\nmessage.config({\n  duration: 5,\n  maxCount: 3,\n});\n\nReactDOM.render(\n  <Provider store={store}>\n    <App>\n      <Routes />\n    </App>\n  </Provider>,\n  document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\n// reportWebVitals(console.log);\n","import { message } from 'antd';\nimport axios from 'axios';\nimport { StatusCodes } from 'http-status-codes';\n\nexport const SESSION_KEY = 'bic_token';\nexport const SESSION_USERNAME = 'bic_username';\nexport const SESSION_EXPIRY = 'bic_expiry';\nexport const SSO_BASE_URL = process.env.REACT_APP_API_SSO_BASE_URL;\nconst LMI_PROJECT_ID = process.env.REACT_APP_PROJECT_ID;\n\nconst setAuthorizationHeader = () => {\n  axios.defaults.headers.common.Authorization = `Bearer ${localStorage.getItem(\n    SESSION_KEY\n  )}`;\n  axios.interceptors.response.use(\n    (res) => res,\n    async (err) => {\n      const status = err && err.response ? err.response.status : null;\n      switch (status) {\n        case StatusCodes.UNAUTHORIZED:\n          message.destroy();\n          message.error('Session expired. Please login again');\n          window.location.replace('/');\n          return Promise.reject(err);\n        default:\n          return Promise.reject(err);\n      }\n    }\n  );\n};\n\nexport default {\n  get session() {\n    return {\n      token: localStorage.getItem(SESSION_KEY),\n      username: localStorage.getItem(SESSION_USERNAME),\n      expiry: localStorage.getItem(SESSION_EXPIRY),\n    };\n  },\n  get isLoggedIn() {\n    const expiry = localStorage.getItem(SESSION_EXPIRY);\n    if (!expiry || expiry <= Date.now()) return false;\n    return !!localStorage.getItem(SESSION_KEY);\n  },\n  get callbackLoginUrl() {\n    return `${window.location.origin}/login`;\n  },\n  get callbackLogoutUrl() {\n    return `${window.location.origin}/logout`;\n  },\n  get ssoLoginUrl() {\n    return `${SSO_BASE_URL}/?projectId=${LMI_PROJECT_ID}&callbackUrl=${this.callbackLoginUrl}`;\n  },\n  get ssoLogoutUrl() {\n    return `${SSO_BASE_URL}/Signout?callbackUrl=${this.callbackLogoutUrl}`;\n  },\n  login(token, username, expiry) {\n    if (!token) throw new Error('Invalid token');\n    localStorage.setItem(SESSION_KEY, token);\n    localStorage.setItem(SESSION_USERNAME, username);\n    localStorage.setItem(SESSION_EXPIRY, Date.now() + expiry * 1000);\n    setAuthorizationHeader();\n  },\n  logout() {\n    localStorage.removeItem(SESSION_KEY);\n    localStorage.removeItem(SESSION_USERNAME);\n    localStorage.removeItem(SESSION_EXPIRY);\n  },\n  setAuthorizationHeader,\n};\n\nexport const checkUrlAccess = () => {\n  const url = new URL(window.location);\n  const encryptedData = url.searchParams.get('EncryptedData');\n  const calcId = url.searchParams.get('calcId');\n  const policyId = url.searchParams.get('policyId');\n  const referenceId =\n    url.searchParams.get('ReferenceNumber') ||\n    url.searchParams.get('ReferenceId');\n  const stepId =\n    url.searchParams.get('steps') || url.searchParams.get('stepId');\n  const isClientAccess =\n    (encryptedData && calcId) || (encryptedData && referenceId && stepId);\n  const isManualLogin =\n    process.env.NODE_ENV === 'development' &&\n    url.searchParams.get('manualLogin');\n\n  return {\n    url,\n    encryptedData,\n    policyId,\n    referenceId,\n    stepId,\n    isClientAccess,\n    isManualLogin,\n  };\n};\n","/* eslint-disable no-param-reassign */\nimport { createAsyncThunk, createSlice } from '@reduxjs/toolkit';\nimport { message } from 'antd';\nimport axios from 'axios';\nimport { StatusCodes } from 'http-status-codes';\nimport qs from 'qs';\nimport auth, { SESSION_EXPIRY } from '../../services/auth';\nimport api from '../../services/api';\n\nexport const initialState = {\n  user: null,\n  byPassUrl: null,\n  loginStatus: 'idle',\n  resetPasswordStatus: 'idle',\n  resetPasswordModalOpen: false,\n};\n\nconst MSG_SUCCESS_RESET_PASSWORD =\n  'Success! An email has been sent containing instructions to reset your password.';\nconst MSG_ERROR = 'An unexpected error occurred. Please try again later.';\nconst MSG_ERROR_LOGIN_FAIL = 'Incorrect username or password.';\nconst MSG_ERROR_USER_PROFILE_FAIL = 'Failed to access user profile.';\nconst MSG_ERROR_NOT_FOUND = \"We couldn't find this account.\";\n\nconst API_LMI_AUTH = api.urls.auth;\nconst API_LMI_USER = api.urls.user;\nconst API_RESET_PASSWORD = api.urls.reset;\nconst LMI_PROJECT_ID = process.env.REACT_APP_PROJECT_ID;\nconst BYPASS_KEY = process.env.REACT_APP_BY_PASS_KEY;\n\nexport const loginAsync = createAsyncThunk(\n  'auth/login',\n  async ({ username, password }, { rejectWithValue }) => {\n    const url = API_LMI_AUTH;\n    const data = {\n      username,\n      password,\n      grant_type: 'password',\n      client_id: LMI_PROJECT_ID,\n    };\n\n    try {\n      const resToken = await axios.post(url, qs.stringify(data));\n      const token = resToken.data.access_token;\n      const resUser = await axios.get(API_LMI_USER, {\n        headers: {\n          Authorization: `Bearer ${token}`,\n        },\n      });\n\n      return {\n        token,\n        expiry: new Date().getTime() + resToken.data.expires_in,\n        user: resUser.data,\n      };\n    } catch (err) {\n      const status = err ? err.status : null;\n      switch (status) {\n        case StatusCodes.UNAUTHORIZED:\n          return rejectWithValue(MSG_ERROR_USER_PROFILE_FAIL);\n        case StatusCodes.BAD_REQUEST:\n          return rejectWithValue(MSG_ERROR_LOGIN_FAIL);\n        default:\n          return rejectWithValue(MSG_ERROR);\n      }\n    }\n  }\n);\n\nexport const loginWithEncryptedDataAsync = createAsyncThunk(\n  'auth/encrypted-data-login',\n  async ({ token, grantType }, { rejectWithValue }) => {\n    const url = API_LMI_AUTH;\n    const data = {\n      grant_type: grantType,\n      encrypted_data: token,\n      client_id: LMI_PROJECT_ID,\n    };\n\n    try {\n      const resToken = await axios.post(url, qs.stringify(data));\n      const token = resToken.data.access_token;\n      const resUser = await axios.get(API_LMI_USER, {\n        headers: {\n          Authorization: `Bearer ${token}`,\n        },\n      });\n\n      return {\n        token,\n        expiry: new Date().getTime() + resToken.data.expires_in,\n        user: resUser.data,\n      };\n    } catch (err) {\n      const status = err ? err.status : null;\n      switch (status) {\n        case StatusCodes.UNAUTHORIZED:\n          return rejectWithValue(MSG_ERROR_USER_PROFILE_FAIL);\n        case StatusCodes.BAD_REQUEST:\n          return rejectWithValue(MSG_ERROR_LOGIN_FAIL);\n        default:\n          return rejectWithValue(MSG_ERROR);\n      }\n    }\n  }\n);\n\nexport const fetchUserAsync = createAsyncThunk(\n  'auth/fetch-user',\n  async (token, { rejectWithValue }) => {\n    try {\n      const resUser = await axios.get(API_LMI_USER);\n      return {\n        user: resUser.data,\n        token,\n        expiry: localStorage.getItem(SESSION_EXPIRY),\n      };\n    } catch (err) {\n      const status = err ? err.status : null;\n      switch (status) {\n        case StatusCodes.UNAUTHORIZED:\n          return rejectWithValue(MSG_ERROR_USER_PROFILE_FAIL);\n        case StatusCodes.BAD_REQUEST:\n          return rejectWithValue(MSG_ERROR_LOGIN_FAIL);\n        default:\n          return rejectWithValue(MSG_ERROR);\n      }\n    }\n  }\n);\n\nexport const resetPasswordAsync = createAsyncThunk(\n  'auth/reset-password',\n  async ({ username }, { rejectWithValue }) => {\n    const url = `${API_RESET_PASSWORD}&userName=${username}`;\n    try {\n      await axios.post(url);\n      return MSG_SUCCESS_RESET_PASSWORD;\n    } catch (err) {\n      const status = err ? err.status : null;\n      switch (status) {\n        case StatusCodes.NOT_FOUND:\n          return rejectWithValue(MSG_ERROR_NOT_FOUND);\n        default:\n          return rejectWithValue(MSG_ERROR);\n      }\n    }\n  }\n);\n\nexport const byPassMyAccountAsync = createAsyncThunk(\n  'auth/by-pass-myaccount',\n  async (_, { rejectWithValue }) => {\n    const url = `${API_LMI_USER}/bypassmyaccount?key=${BYPASS_KEY}`;\n    try {\n      const byPassUrl = await axios.get(url);\n      return byPassUrl.data;\n    } catch (err) {\n      const status = err ? err.status : null;\n      switch (status) {\n        case StatusCodes.NOT_FOUND:\n          return rejectWithValue(MSG_ERROR_NOT_FOUND);\n        default:\n          return rejectWithValue(MSG_ERROR);\n      }\n    }\n  }\n);\n\nexport const loginSlice = createSlice({\n  name: 'auth',\n  initialState,\n  reducers: {\n    logout: (state) => {\n      state.user = null;\n      auth.logout();\n      window.location.replace('/');\n    },\n    setUser: (state, { payload }) => {\n      state.user = payload;\n    },\n    openResetPasswordModal: (state, { payload }) => {\n      state.resetPasswordModalOpen = payload;\n    },\n  },\n  extraReducers: (builder) => {\n    builder\n      .addCase(loginAsync.pending, (state) => {\n        state.loginStatus = 'loading';\n      })\n      .addCase(loginAsync.rejected, (state, { payload }) => {\n        state.loginStatus = 'idle';\n        message.error(payload);\n      })\n      .addCase(loginAsync.fulfilled, (state, { payload }) => {\n        auth.login(\n          payload.token,\n          payload.user.personName.trim()\n            ? payload.user.personName\n            : payload.user.userName,\n          payload.expiry\n        );\n        state.loginStatus = 'idle';\n        state.user = payload;\n      })\n      .addCase(loginWithEncryptedDataAsync.pending, (state) => {\n        state.loginStatus = 'loading';\n      })\n      .addCase(loginWithEncryptedDataAsync.rejected, (state, { payload }) => {\n        state.loginStatus = 'idle';\n        message.error(payload);\n      })\n      .addCase(loginWithEncryptedDataAsync.fulfilled, (state, { payload }) => {\n        auth.login(\n          payload.token,\n          payload.user.personName.trim()\n            ? payload.user.personName\n            : payload.user.userName,\n          payload.expiry\n        );\n        state.loginStatus = 'idle';\n        state.user = payload;\n      })\n      .addCase(resetPasswordAsync.pending, (state) => {\n        state.resetPasswordStatus = 'loading';\n      })\n      .addCase(resetPasswordAsync.rejected, (state, { payload }) => {\n        state.resetPasswordStatus = 'error';\n        message.error(payload);\n      })\n      .addCase(resetPasswordAsync.fulfilled, (state, { payload }) => {\n        state.resetPasswordStatus = 'idle';\n        state.resetPasswordModalOpen = false;\n        message.success(payload);\n      })\n      .addCase(fetchUserAsync.pending, (state) => {\n        state.loginStatus = 'loading';\n      })\n      .addCase(fetchUserAsync.rejected, (state, { payload }) => {\n        state.loginStatus = 'error';\n        message.error(payload);\n      })\n      .addCase(fetchUserAsync.fulfilled, (state, { payload }) => {\n        state.loginStatus = 'idle';\n        state.user = payload;\n        auth.login(\n          payload.token,\n          payload.user.personName || payload.user.userName,\n          payload.expiry\n        );\n      })\n      .addCase(byPassMyAccountAsync.fulfilled, (state, { payload }) => {\n        state.byPassUrl = payload;\n      });\n  },\n});\n\nexport const { logout, setUser, openResetPasswordModal } = loginSlice.actions;\n\nexport const selectUser = (state) => state.auth.user;\nexport const selectIsUserClient = (state) =>\n  state.auth.user?.user?.roles?.some((role) => role.roleName === 'Client');\nexport const selectIsUserAdmin = (state) =>\n  state.auth.user?.user?.roles?.some(\n    (role) => role.roleName === 'Administrator'\n  );\nexport default loginSlice.reducer;\n","import { AES, enc, mode, pad } from 'crypto-js';\n\nconst KEY = process.env.REACT_APP_AES_SECRET;\nconst VECTOR = process.env.REACT_APP_AES_VECTOR;\n\nconst key = enc.Utf8.parse(KEY);\nconst vector = enc.Utf8.parse(VECTOR);\n\nexport const encrypt = (value) => {\n  try {\n    if (value) {\n      const encrypted = AES.encrypt(enc.Utf8.parse(value), key, {\n        iv: vector,\n        mode: mode.CBC,\n        padding: pad.Pkcs7,\n      }).toString();\n      return encrypted;\n    }\n    return value;\n  } catch {\n    return value;\n  }\n};\n\nexport const decrypt = (encrypted) => {\n  try {\n    const decrypted = AES.decrypt(encrypted, key, {\n      iv: vector,\n      mode: mode.CBC,\n      padding: pad.Pkcs7,\n    }).toString(enc.Utf8);\n    if (decrypted) {\n      return decrypted;\n    }\n    return encrypted;\n  } catch {\n    return encrypted;\n  }\n};\n","/* eslint-disable no-param-reassign */\nimport {\n  createAsyncThunk,\n  createSlice,\n  createSelector,\n} from '@reduxjs/toolkit';\nimport { groupBy } from 'lodash';\n\nimport {\n  fetchCalculatorList,\n  fetchCalculatorReference,\n  fetchCalculatorReferenceById,\n  fetchCalculatorStep,\n  updateCalculatorStep,\n  calculateCalculatorResults,\n  fetchCalculatorResults,\n  fetchLastStepId,\n  fetchResultsSummary,\n  duplicateCalculation,\n} from '../../features/calculators';\n\nexport const initialState = {\n  calculatorList: [],\n  calculatorReference: null,\n  calculatorStep: null,\n  calculatorResults: null,\n  calculatorListStatus: 'idle',\n  calculatorResultsStatus: 'idle',\n  calculatorListError: undefined,\n  resultsSummary: null,\n  insuredName: null,\n  lastStepId: null,\n  lastDuplicatedCalculation: null,\n};\n\nexport const fetchCalculatorsListAsync = createAsyncThunk(\n  'calculators/fetch-calculators-list',\n  fetchCalculatorList\n);\nexport const fetchCalculatorReferenceAsync = createAsyncThunk(\n  'calculators/fetch-calculator-reference',\n  fetchCalculatorReference\n);\nexport const fetchCalculatorReferenceByIdAsync = createAsyncThunk(\n  'calculators/fetch-calculator-reference-by-id',\n  fetchCalculatorReferenceById\n);\nexport const fetchCalculatorStepAsync = createAsyncThunk(\n  'calculators/fetch-calculator-step',\n  fetchCalculatorStep\n);\nexport const updateCalculatorStepAsync = createAsyncThunk(\n  'calculators/update-calculator-step',\n  updateCalculatorStep\n);\nexport const caculateCalculatorResultsAsync = createAsyncThunk(\n  'calculators/calculate-calculator-results',\n  calculateCalculatorResults\n);\nexport const fetchCalculatorResultsAsync = createAsyncThunk(\n  'calculators/fetch-calculator-results',\n  fetchCalculatorResults\n);\nexport const fetchLastStepIdAsync = createAsyncThunk(\n  'calculators/fetch-calculator-last-step-id',\n  fetchLastStepId\n);\nexport const fetchResultsSummaryAsync = createAsyncThunk(\n  'calculators/fetch-results-summary',\n  fetchResultsSummary\n);\nexport const duplicateCalculationAsync = createAsyncThunk(\n  'calculators/duplicate-calculation',\n  duplicateCalculation\n);\n\nexport const calculatorSlice = createSlice({\n  name: 'calculators',\n  initialState,\n  reducers: {\n    clearCalculatorList: (state) => {\n      state.calculatorList = null;\n    },\n    clearCalculatorStep: (state) => {\n      state.calculatorStep = { ...state.calculatorStep, Questions: null };\n    },\n    clearCalculatorResults: (state) => {\n      state.calculatorResults = null;\n    },\n    clearCalculatorReference: (state) => {\n      state.calculatorReference = null;\n    },\n    clearResultsSummary: (state) => {\n      state.resultsSummary = null;\n    },\n    setInsuredName: (state, { payload }) => {\n      state.insuredName = payload;\n    },\n    clearInsuredName: (state) => {\n      state.insuredName = null;\n    },\n  },\n  extraReducers: (builder) => {\n    builder\n      .addCase(fetchCalculatorsListAsync.pending, (state) => {\n        state.calculatorListStatus = 'loading';\n      })\n      .addCase(fetchCalculatorsListAsync.fulfilled, (state, action) => {\n        state.calculatorListStatus = 'idle';\n        state.calculatorList = action.payload;\n      })\n      .addCase(fetchCalculatorsListAsync.rejected, (state, action) => {\n        state.calculatorListStatus = 'erroneous';\n        state.calculatorListError =\n          action.error.message || 'Failed to fetch calculator list';\n      })\n      .addCase(fetchCalculatorReferenceAsync.pending, (state) => {\n        state.calculatorListStatus = 'loading';\n      })\n      .addCase(fetchCalculatorReferenceAsync.fulfilled, (state, action) => {\n        state.calculatorListStatus = 'idle';\n        state.calculatorReference = action.payload;\n      })\n      .addCase(fetchCalculatorReferenceAsync.rejected, (state, action) => {\n        state.calculatorListStatus = 'erroneous';\n        state.calculatorListError =\n          action.error.message || 'Failed to fetch calculator reference';\n      })\n      .addCase(fetchCalculatorReferenceByIdAsync.pending, (state) => {\n        state.calculatorListStatus = 'loading';\n      })\n      .addCase(fetchCalculatorReferenceByIdAsync.fulfilled, (state, action) => {\n        state.calculatorListStatus = 'idle';\n        state.calculatorReference = action.payload;\n      })\n      .addCase(fetchCalculatorReferenceByIdAsync.rejected, (state, action) => {\n        state.calculatorListStatus = 'erroneous';\n        state.calculatorListError =\n          action.error.message || 'Failed to fetch calculator reference';\n      })\n      .addCase(fetchCalculatorStepAsync.pending, (state) => {\n        state.calculatorListStatus = 'loading';\n      })\n      .addCase(fetchCalculatorStepAsync.fulfilled, (state, action) => {\n        state.calculatorListStatus = 'idle';\n        state.calculatorStep = action.payload;\n      })\n      .addCase(fetchCalculatorStepAsync.rejected, (state, action) => {\n        state.calculatorListStatus = 'erroneous';\n        state.calculatorListError =\n          action.error.message || 'Failed to fetch calculator step';\n      })\n      .addCase(updateCalculatorStepAsync.pending, (state) => {\n        state.calculatorListStatus = 'loading';\n      })\n      .addCase(updateCalculatorStepAsync.fulfilled, (state) => {\n        state.calculatorListStatus = 'idle';\n      })\n      .addCase(updateCalculatorStepAsync.rejected, (state, action) => {\n        state.calculatorListStatus = 'erroneous';\n        state.calculatorListError =\n          action.error.message || 'Failed to update calculator step';\n      })\n      .addCase(caculateCalculatorResultsAsync.pending, (state) => {\n        state.calculatorListStatus = 'loading';\n      })\n      .addCase(caculateCalculatorResultsAsync.fulfilled, (state) => {\n        state.calculatorListStatus = 'idle';\n      })\n      .addCase(caculateCalculatorResultsAsync.rejected, (state, action) => {\n        state.calculatorListStatus = 'erroneous';\n        state.calculatorListError =\n          action.error.message || 'Failed to calculate calculator results';\n      })\n      .addCase(fetchCalculatorResultsAsync.pending, (state) => {\n        state.calculatorListStatus = 'loading';\n      })\n      .addCase(fetchCalculatorResultsAsync.fulfilled, (state, action) => {\n        state.calculatorListStatus = 'idle';\n        state.calculatorResults = action.payload;\n      })\n      .addCase(fetchCalculatorResultsAsync.rejected, (state, action) => {\n        state.calculatorListStatus = 'erroneous';\n        state.calculatorListError =\n          action.error.message || 'Failed to fetch calculator results';\n      })\n      .addCase(fetchLastStepIdAsync.fulfilled, (state, action) => {\n        state.lastStepId = action.payload;\n      })\n      .addCase(fetchLastStepIdAsync.rejected, (state, action) => {\n        state.calculatorListStatus = 'erroneous';\n        state.calculatorListError =\n          action.error.message || 'Failed to fetch calculator last step id';\n      })\n      .addCase(fetchResultsSummaryAsync.pending, (state) => {\n        state.calculatorResultsStatus = 'loading';\n      })\n      .addCase(fetchResultsSummaryAsync.fulfilled, (state, action) => {\n        state.calculatorResultsStatus = 'idle';\n        state.resultsSummary = action.payload;\n      })\n      .addCase(fetchResultsSummaryAsync.rejected, (state, action) => {\n        state.calculatorResultsStatus = 'erroneous';\n        state.calculatorListError =\n          action.error.message || 'Failed to fetch results summary';\n      })\n      .addCase(duplicateCalculationAsync.pending, (state) => {\n        state.calculatorResultsStatus = 'loading';\n      })\n      .addCase(duplicateCalculationAsync.fulfilled, (state, action) => {\n        state.calculatorResultsStatus = 'idle';\n        state.lastDuplicatedCalculation = action.payload;\n      })\n      .addCase(duplicateCalculationAsync.rejected, (state, action) => {\n        state.calculatorResultsStatus = 'erroneous';\n        state.calculatorListError =\n          action.error.message || 'Failed to duplicate calculation';\n      });\n  },\n});\n\nexport const selectResultSummaryByCalculator = createSelector(\n  (state) => state.calculators.resultsSummary?.ResultsSummaryDetails,\n  (state) => state.calculators.resultsSummary?.ClientUpdatedResults,\n  (summary, updatedReferencesByClient) => {\n    const groupedInsuredName = groupBy(\n      summary,\n      (result) => result.ParentGroupId\n    );\n    const groupedResultsByInsuredName = Object.entries(groupedInsuredName).map(\n      ([key, value]) => {\n        const grouped = groupBy(value, (result) => result.CalculatorName);\n        const groupedByCalculator = Object.entries(grouped).map(\n          ([calculatorName, value]) => ({\n            parentGroupId: key,\n            clientName: value[0].InsuredName,\n            calculatorName,\n            insurer: value[0].Insurer,\n            updatedByClient: value\n              .filter((ref) =>\n                updatedReferencesByClient.includes(ref.ReferenceId)\n              )\n              .map((ref) => ref.ReferenceId),\n            lastUpdate: value.sort(\n              (a, b) =>\n                new Date(b?.UpdatedDate).getTime() -\n                new Date(a?.UpdatedDate).getTime()\n            )[0]?.UpdatedDate,\n            resultsSummary: value,\n          })\n        );\n\n        return groupedByCalculator;\n      }\n    );\n    return groupedResultsByInsuredName.flat();\n  }\n);\n\nexport const calculatorSelectors = {\n  getCalculatorReference: (state) => state.calculators.calculatorReference,\n  getCalculatorStep: (state) => state.calculators.calculatorStep,\n  getCalculatorList: (state) => state.calculators.calculatorList,\n  getCalculatorListStatus: (state) => state.calculators.calculatorListStatus,\n};\n\nexport const {\n  clearCalculatorList,\n  clearCalculatorResults,\n  clearCalculatorStep,\n  clearCalculatorReference,\n  clearInsuredName,\n  setInsuredName,\n  clearResultsSummary,\n} = calculatorSlice.actions;\n\nexport default calculatorSlice.reducer;\n","export default {\n  get statLabels() {\n    return {\n      linkgen: 'NewLinkgen',\n      sso: 'SSO',\n      login: 'Login',\n      resultDownload: 'ResultDownload',\n      resultEmail: 'ResultEmail',\n      clientLink: 'ClientLink',\n      clientLinkClicked: 'ClientLinkClicked',\n      calculatorCompleted: 'CalculatorCompleted',\n      calculatorStarted: 'CalculatorStarted',\n    };\n  },\n  get gaLabels() {\n    return {\n      linkgen: 'NewLinkgen',\n      login: 'Login',\n      sso: 'SSO',\n      resultDownload: 'ResultDownload',\n      resultEmail: 'ResultEmail',\n      clientLink: 'ClientLink',\n      clientLinkClicked: 'ClientLinkClicked',\n    };\n  },\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\nimport ReactGA from 'react-ga';\nimport ReactGA4 from 'react-ga4';\n\nconst GA3_TRACKING_ID = process.env.REACT_APP_GA_TRACKING_ID;\nconst GA4_MEASUREMENT_ID = process.env.REACT_APP_GA_MEASUREMENT_ID;\n\nconst Tracker = ({ currentStepNumber, calculatorResults, userId }) => {\n  const location = useLocation();\n\n  if (GA3_TRACKING_ID) {\n    ReactGA.initialize(GA3_TRACKING_ID, {\n      testMode: process.env.NODE_ENV === 'test',\n      gaOptions: {\n        cookieFlags: 'secure;samesite=none',\n      },\n    });\n  }\n\n  if (GA4_MEASUREMENT_ID) {\n    ReactGA4.initialize(GA4_MEASUREMENT_ID, {\n      gaOptions: {\n        testMode: process.env.NODE_ENV === 'test',\n        cookieFlags: 'secure;samesite=none',\n        userId,\n        clientId: userId,\n      },\n    });\n  }\n\n  useEffect(() => {\n    if (userId) {\n      ReactGA.set({ dimension1: userId });\n      ReactGA4.gtag('set', 'user_properties', { userId });\n    }\n  }, [userId]);\n\n  useEffect(() => {\n    if (location.pathname === '/') {\n      ReactGA.pageview(`/`);\n      ReactGA4.send({ hitType: 'pageview', page: '/', title: 'home' });\n    }\n    if (location.pathname === '/calculators') {\n      ReactGA.pageview(`/selectcalculator`);\n      ReactGA4.send({\n        hitType: 'pageview',\n        page: '/selectcalculator',\n        title: 'selectcalculator',\n      });\n    }\n  }, [location]);\n\n  useEffect(() => {\n    if (currentStepNumber) {\n      ReactGA.pageview(`/calculatorstep${currentStepNumber}`);\n      ReactGA4.send({\n        hitType: 'pageview',\n        page: `/calculatorstep${currentStepNumber}`,\n        title: `/calculatorstep${currentStepNumber}`,\n      });\n    }\n  }, [currentStepNumber]);\n\n  useEffect(() => {\n    if (calculatorResults?.length > 0) {\n      ReactGA.pageview('/results');\n      ReactGA4.send({\n        hitType: 'pageview',\n        page: `/results`,\n        title: `results`,\n      });\n    }\n  }, [calculatorResults]);\n\n  return null;\n};\n\n// category: User | CalculatorSelect | Download | Email\n// action: Login | Select | ResultDownload | ResultEmail | ClientLink\n// label: NewLinkgen | ClientLink | ResultDownload | ResultEmail | ${PolicyId}-${PolicyName}-${PolicyCode}\n\nexport const useAnalyticsEventTracker = (category = 'User') => {\n  const eventTracker = (action, label) => {\n    ReactGA.event({ category, action, label });\n    ReactGA4.event({\n      category,\n      action,\n      label,\n    });\n  };\n  return eventTracker;\n};\n\nexport const useAnalyticsPageviewTracker = () => {\n  const pageviewTracker = (pathname) => {\n    ReactGA.pageview(pathname);\n    ReactGA4.send({\n      hitType: 'pageview',\n      page: pathname,\n      title: pathname,\n    });\n  };\n  return pageviewTracker;\n};\n\nconst mapStateToProps = (state) => ({\n  calculatorReference: state.calculators.calculatorReference,\n  currentStepNumber: state.calculators.calculatorStep?.currentStepNumber,\n  calculatorResults: state.calculators.calculatorResults,\n  userId: state.auth?.user?.user?.userId,\n});\n\nexport default connect(mapStateToProps)(Tracker);\n","import { useState, useEffect } from 'react';\n\nconst useWindowResize = () => {\n  const [windowSize, setWindowSize] = useState({\n    width: undefined,\n    height: undefined,\n  });\n\n  useEffect(() => {\n    const handleResize = () => {\n      setWindowSize({\n        width: window.innerWidth,\n        height: window.innerHeight,\n      });\n    };\n    window.addEventListener('resize', handleResize);\n    handleResize();\n    return () => window.removeEventListener('resize', handleResize);\n  }, []);\n  return { ...windowSize, isMobile: windowSize.width < 768 };\n};\n\nexport default useWindowResize;\n","/* eslint-disable max-len */\n\nexport default {\n  get baseUrl() {\n    if (process.env.NODE_ENV === 'development') {\n      return process.env.REACT_APP_BASE_URL;\n    }\n    return window.location.origin;\n  },\n  get usaBaseUrl() {\n    return process.env.REACT_APP_BASE_USA_URL;\n  },\n  get urls() {\n    return {\n      auth: `${this.baseUrl}/lmiauth/token`,\n      user: `${this.baseUrl}/lmiauth/api/user`,\n      stat: `${this.baseUrl}/lmiauth/api/stats/addstats`,\n      reset: `${this.baseUrl}/lmiauth/api/user/resetpassword?passwordResetTemplateUrl=www.lmigroup.com%2FLmiAuthWeb%2FResetPassword`,\n      usaBase: `${this.usaBaseUrl}/api`,\n      base: `${this.baseUrl}/biapi/api`,\n    };\n  },\n};\n"],"sourceRoot":""}