{"version":3,"sources":["core/constants/uiConstants.js","core/redux/types.js","api/index.js","core/redux/reducers/alertReducers.js","core/redux/reducers/authReducers.js","core/redux/reducers/formDataReducers.js","core/redux/reducers/index.js","core/redux/reducers/setupReducers.js","core/redux/reducers/rolesReducers.js","core/redux/store/dataStore.js","custom/common/utils/lookupFunctions.js","core/hooks/usePCTranslation.ts","core/hooks/ScrollToTop.js","core/constants/calcConstants.js","core/uicore/Modal.js","core/uicore/ModalTitle.js","core/uicore/QuestionModalFooter.js","core/uicore/Alert.js","core/uicore/Logo.js","core/utils/globalEvents.js","core/hocs/withCoreEvents.js","core/api/trackingWebService.js","custom/proQuote/redux/reducers/premiumCalcReducers.js","core/redux/actions/authActions.js","core/redux/actions/alertActions.js","core/utils/setAuthConfig.js","core/redux/actions/setupActions.js","custom/common/redux/actions/utilActions.js","core/redux/actions/formDataActions.js","custom/common/redux/Types.js","assets/User-white.png","assets/Help-white.png","assets/procomp.svg","assets/Add-white.png","assets/Folder-white.png","assets/magnifying-glass.png","assets/sheet-box.png","assets/Help.png","assets/Vision-blue.png","assets/Upload-blue.png","assets/Diskette-blue.png","assets/Clipboard.png","assets/Text-documents.png","assets/arrow.svg","assets/pages.svg","assets/chevron-blue.svg","assets/chevron-white.svg","assets/chevron-blue-right.svg","assets/threedots.svg","assets/Signoff-white.png","assets/Signoff@2x.png","assets/Switch-white.png","assets/Checkmark-white.png","assets/Checkmark-white-circle.png","assets/Checkmark-circle.svg","assets/Account-sample.png","assets/Warning-white.png","assets/Warning-red.png","assets/Flag-white.png","assets/About_ProCompPPR.png","assets/About_ProCompIllustration.png","assets/hourglass.svg","assets/help_outline-blue-18dp.svg","assets/eAppPlaceholder.svg","assets/Trash.svg","assets/Zoom.svg","assets/Close.svg","assets/Bank Info Illustration.svg","assets/Dog on bed.svg","assets/Whiteboard with plants.svg","assets/Clock.svg","assets/calculator.svg","assets/Procomp-logo-blue.png","assets/flowerpot.png","assets/Plant-book.png","assets/Scrubber.svg","assets/Flowerpot-2.png","assets/Scenario-window.png","assets/SereniaLifeLogo_Fullcolour.svg","assets/term-article-image1.jpg","assets/term-article-image2.jpg","assets/term-article-image3.jpg","assets/whole-article-image1.jpg","assets/whole-article-image2.jpg","assets/whole-article-image3.jpg","assets/index.ts","core/utils/inputTypeUtils.js","assets/spinner.gif","core/formValidation/StatusContext.js","core/formValidation/FormStatus.js","core/formValidation/ValidationContext.ts","core/formValidation/FormValidator.js","core/formValidation/coreValidation.js","core/formValidation/StatusMessage.js","core/formValidation/StatusDisplay.js","core/formValidation/ValidationMessage.js","custom/proQuote/utils/data.js","custom/common/report/constants.js","core/controls/Button.js","core/controls/Checkbox.js","core/controls/ComboModal.js","core/controls/Datebox.js","core/controls/FilePicker.js","core/controls/Label.js","core/controls/MaskedTextbox.js","core/controls/MultiCheckbox.js","core/controls/Radiobuttons.js","core/controls/Selectbox.js","core/controls/Textbox.js","core/controls/TextboxSubmit.js","core/controls/ChoiceButtons.js","core/hooks/useRouter.js","core/hocs/withPCTranslation.js","core/uicore/ButtonBar.js","core/uicore/FieldContainer.js","core/uicore/Icon.js","core/uicore/PremiumDisplay.js","core/uicore/Spinner.js","core/uicore/Tab.js","core/uicore/TooltipIcon.js","core/uicore/Tabs.js","core/uicore/TooltipText.js","core/utils/globalUtils.js","custom/common/utils/functions.js","custom/common/utils/customEvents.js","custom/proQuote/redux/actions/premiumCalcActions.js","custom/common/ui/Routes.js","custom/common/ui/StoreConnector.js","custom/common/App.js","serviceWorker.js","core/utils/i18n.js","index.tsx","core/api/generalServices.js"],"names":["INPUTTYPES","INPUT_TEXT","INPUT_UPPER","INPUT_NAME","INPUT_DOLLAR","INPUT_NUMBER","INPUT_DOLLAR_INTEGER","INPUT_INTEGER","INPUT_BUTTON","INPUT_COMBO","INPUT_CHECK","INPUT_RADIO","INPUT_REAL","INPUT_DATE","INPUT_MULTICHECK","INPUT_MULTISELECT","INPUT_PERCENT","INPUT_PHONE","INPUT_LABEL","INPUT_TAB","INPUT_PAGE","INPUT_EMAIL","INPUT_POSTALCODE","INPUT_ZIPCODE","INPUT_SIN","INPUT_SSN","INPUT_CREDITCARD","INPUT_LONGINT","INPUT_OPTION","INPUT_DEV","ICONS","BUBBLE","ENLARGE2","SHRINK2","BIN2","CLOUD_CHECK","BOLD","UNDERLINE","ITALIC","PARAGRAPH_LEFT","PARAGRAPH_CENTER","PARAGRAPH_RIGHT","GOOGLE","FACEBOOK","TWITTER","LINKEDIN2","ERROR","DASH","BULLET","STYLES","BASIC","LOGO","SELECT","TEXT","CHECK","DATE","TOOLTIP","TOOLTIPTEXT","TOOLTIPICON","BUTTON","MULTISELECT","MULTICHECK","RADIO","PILL","LABEL","CHILD","LABELCOMPONENT","INPUTBOX","INPUT","INPUTSUBMIT","PRODUCT","INFORCEPRODUCT","INFORCEPOLICYHEADER","ALPHALOOKUPHEADER","BUTTONS","TABS","TABLIST","TABLISTITEM","TABLISTACTIVE","TABCONTENTACTIVE","TABCONTENT","CARD","GROUP","TABLE","THEAD","TROW","TDATA","TBODY","SUMMARYFIELDSET","SUMMARY","SUMMARYCONTAINER","HEADER","PAGEHEADER","PAGEHEADERM","BUTTONBAR","POLICYHEADER","PREMIUMDISPLAY","PROFILEBUTTONS","PAGEFOOTER","VALIDATION","ERRORICON","INPUTCONTAINER","RADIOCONTAINER","PILLCONTAINER","TABLAYOUT","TABCONTAINER","LAYOUT","SIDEBARCONTAINER","FIELDCONTAINER","FIELDCONTAINERHEADER","FIELDCONTENT","SUBFIELDSET","STATUSDISPLAY","COVERAGETYPE","COVERAGEVALUE","INFORCEPOLICYSUMMARY","PANELITEMGROUP","ActionTypes","DATA_LOAD","DATA_LOADING","DATA_REMOVE","CONTROLITEMS_LOAD","UPDATE_CONTROLITEMS","PRODUCTSETUPITEMS_LOAD","INTERFACESETUPITEMS_LOAD","INTERFACESETUPITEMS_UPDATE","ALLSETUPS_LOAD","SET_FORMDATA","UPDATE_FORMDATA","CLEAR_FORMDATA","USER_LOADED","AUTH_ERROR","LOGIN_SUCCESS","LOGIN_FAIL","AUTH_FAIL","AUTH_SUCCESS","REFRESH_TOKEN_SUCCESS","REFRESH_TOKEN_FAIL","GET_PROFILE","CLEAR_PROFILE","UPDATE_PROFILE","LOGOUT","SESSION_TIMEOUT","SET_USERNAME","ALL_USERS","SET_ALERT","REMOVE_ALERT","CLEAR_CUSTOM_STORE","PROQUOTE_SECURITY","api","axios","initialState","isAuthenticated","JSON","parse","sessionStorage","getItem","username","combineReducers","custom","alert","state","action","type","payload","name","newState","auth","refreshToken","setItem","stringify","trackingUserName","user","console","log","cache","clear","removeItem","users","formData","dataType","initialFormData","cacheData","value","setupItems","isDataLoading","controlItems","interfaceSetupArray","interfaceSetupItems","allSetupItems","parameter","security","roles","ALL_ROLES","middlewares","thunk","dataStore","createStore","rootReducers","composeWithDevTools","applyMiddleware","IsProdIDFlexLife2","prodID","getCurrentDateFormatted","dateObject","aDateObject","Date","getFullYear","getMonth","getDate","Intl","DateTimeFormat","year","month","day","format","Format0Decimals","Number","toFixed","Format2Decimals","FormatPhoneNumber","phoneNumber","temp","replace","padStart","substr","slice","TranslatePaymentModeReport","item","t","calcAgeNearest","dtBirthDate","dtToday","birthDate","today","lastBirthDay","policyIssueDate","currentDate","issueDate","GetLastAnniversaryDate","intYears","dateDiffMS","intMonths","intDays","intAge","interval","startingDate","endingDate","yearDiff","toUpperCase","monthDiff","startDate","toISOString","endDate","swap","startYear","daysInMonth","dayDiff","dateDiff","toTitleCase","str","txt","charAt","toLowerCase","usePCTranslation","useTranslation","useSelector","tInput","key","options","tReport","ScrollToTopController","withRouter","prevProps","this","props","location","window","scrollTo","Component","condition","useEffect","top","left","error","MAX_ARRAY","CoverageTypes","NONE","BASE","RIDER","BENEFIT","PUA","OYT","ENHANCED","RiderTypes","ADB","WAIVER","AIB","GPO","PIB","TERM","UL","OTHER","DMB","PolicyTypes","None","WholeLife","LevelTerm","TermWithCV","DecreasingIncreasingTerm","PaidUpLife","Endowment","ImmediateAnnuity","RRIF","LIF","ESA_ISA","Disability","SegregatedFund","SegregatedFundRRIF","DeferredAnnuity","Enhanced","CriticalIllness","DividendPayoutTypes","DRP","DOD","LRD","PIC","PartyTypes","Person","Company","FundTypes","DIA","GIA","PRM","SideFund","Loan","SegFund","BillingTypeCode","MAIL","PREMIUMOFFSET","EFT","APL","PremiumModeTypes","Annual","Monthly","Quarterly","SemiAnnual","ExemptStatus","ExemptWithTesting","ExemptWithoutTesting","NonExempt","Grandfathered","ExemptWithoutTestingNew","NonExemptNew","TaxAccrualRule","Trienniel","CalendarYear","PolicyYear","BILLINGSTATUS_BILLING","Alternate_IntRate","Reduction","StartYear","Reduction_UL","StartYear_UL","PayoutTypes","Minimum","Maximum","FlatAmount","document","getElementById","Modal","onClick","children","propStyle","ReactDOM","createPortal","className","querySelector","ModalTitle","title","fontSize","QuestionModalFooter","isDisable","controlGetFocus","controlLostFocus","controlClick","setElement","onSelectOK","onSelectCancel","btnCancel","btnOK","isInfo","text","getfocusCallback","getclickCallback","event","lostfocusCallback","refItem","label","control","disableButton","defaultProps","alertLogo","Success","checkLogo","Error","warningLogo","Secondary","flagLogo","Alert","styling","id","alertType","src","alt","msg","Logo","companyName","logo","companyLogo","GlobalGetFocus","elementItems","updateFormData","updateControlItems","GlobalLostFocus","inforceData","customEvents","GlobalBuildTrackingData","trackingData","timestamp","Math","trunc","now","formName","eventType","fieldType","getEventType","agentID","header","loginUserName","customData","detail","GlobalTrackingEvents","isTracking","sendTrackingInfo","GlobalChange","recallItems","forEach","GlobalRunRecalls","GlobalClick","withCoreEvents","WrappedComponent","isAppLoading","isAppChanging","appLoad","a","setState","appRunAllBusinessRules","appGetFocus","globalEvents","target","appLostFocus","appChange","appClick","Object","keys","globalGetFocus","globalChange","globalLostFocus","globalClick","onLoad","React","txtProQuotePageNumber","fetchProquoteSettings","body","trackingObject","post","getFirstYearPremium","GET_FIRSTYEAR_PREMIUM","REMOVE_FIRSTYEAR_PREMIUM","cancelToken","setAlert","timeout","dispatch","setTimeout","setAuthToken","defaults","headers","jwt","setInterceptor","isRefreshing","failedQueue","processQueue","err","token","promise","reject","resolve","interceptors","response","use","originalRequest","config","status","_retry","Promise","push","then","catch","data","url","logout","finally","loadControlItems","proquoteSettings","response1","response2","length","_","merge","loadDataFail","loadInterfaceSetupItems","getState","res","interfaceItem","find","updateControlItemsDB","deleteControlItemDB","controls","clearCustomStore","INFORCE_REMOVE","CLEAR_ALPHALOOKUP","CLEAR_DATAREPORTS","TREE_REMOVE","trackLoginUser","CurrentField","login","password","cancel","CancelToken","source","generateTrackingUserName","classList","add","remove","updateUserProfileField","fieldName","updateUserProfile","getAllUsers","updatedUser","get","responderEnd","currentUser","system","callApi","sessionTimeout","setStoreFormData","useSessionStorage","startsWith","updateStoreFormData","clearStoreFormData","HIDE_DEV_ROUTE","SET_ROUTES","HIDE_TRACKING","HIDE_USERS","GET_ROLE_BY_NAME","UPDATE_ROLE","DELETE_ROLE","INSURANCEDATA_LOAD","CREATE_ILLUSTRATION","GET_ILLUSTRATION_HEADERS","GET_ILLUSTRATION_CASE","DELETE_ILLUSTRATION_CASE","CHECK_ILLUSTRATION_CASE_EXIST","INFORCE_LOAD","INFORCE_LOAD_ERROR","INFORCE_POST","TREE_BUILD","TREE_UPDATE","CREATE_GLOBAL_ARRAY","FETCH_ALPHALOOKUP","FETCHERROR_ALPHALOOKUP","FETCH_DATAREPORTS","FETCHERROR_DATAREPORTS","module","exports","getMaskForInput","inputType","decimalToComma","split","join","commaToDecimal","parseInput","inputLanguage","oldVal","controlItem","regex","strVal","maxLength","reg","i","RegExp","regexPhone","decimalPlaces","test","decimalHashes","isForced","formatDisplay","decimals","formattedStr","tempPostalCode","formattedCode","tempCode","sin","tempSIN","retStr","capitalizeApostrophe","StatusContext","createContext","getStatusForField","field","FormStatus","handleGetFocus","ev","persist","dirty","handleLostFocus","formSubmitted","Fragment","Provider","onFocus","onBlur","errors","undefined","rulesData","useLimits","limits","minLimit","min","maxLimit","max","withPCTranslation","formErrors","getMessagesForField","FormValidator","clearFormErrors","handleChange","formValid","fieldsValid","handleClick","submitField","includes","validateForm","isDirty","submit","ValidationContext","onChange","rules","errorCount","msg_range","msg_textLength","msg_checked","msg_required","msg_min","msg_max","msg_option","msg_validEmail","msg_validPhone","allowedProvinces","hasOwnProperty","fielderrors","val","isError","disabled","displayHidden","required","validator","isEmpty","isEmail","message","province","useMinLength","minLength","allowZero","parseInt","isInt","parseFloat","isFloat","decimal_digits","ValidateData","inlineErrorRef","current","StatusMessage","testObject","context","map","useIcon","icon","size","float","contextType","StatusDisplay","formatValue","Array","isArray","toString","msg_status","container","summary","ValidationMessage","validationmsg","erroricon","useContext","errorArray","filter","listEl","fieldError","txtProquoteFirstName","txtProquoteLastName","txtProquoteFullName","txtProquoteEmail","txtProquotePhone","rdoProquoteGender","dtProquoteDob","rdoProquoteSmokeClass","rdoProquoteHealthMatch","rdoProquoteTermPolicy","rdoProquoteWLPolicy","txtProquoteProduct","txtProquoteFaceAmount","rdoProquotePaymentFrequency","rdoProquoteDividendOption","rdoProquotePremiumOffset","btnProquoteSkip","rdoProquoteWaiver","rdoProquoteADB","txtProquoteADBAmount","rdoProquoteCPB","txtProquoteCPBAmount","rdoProquoteGPO","txtProquoteGPOAmount","rdoProquoteWPD","rdoProquoteAIB","txtProquoteAIBOwnerAge","btnProquoteViewQuote","cboProquoteProvince","chkProQuoteCASL","rdoProquoteLeadSource","fintel_click_id","productid","utm_campaign","utm_source","utm_medium","utm_term","utm_content","buildProductOptionItems","age","termOptions","wlOptions","ageMin","ageMax","isTerm100Policy","isTermPolicy","displayName","isWholeLifePolicy","calcDataGenerator","calcData","cboSelectUser","cboProduct","cboProductID","cboPaymentMode","txtFaceAmount","txtOwnerName","txtInsuredName","txtAge","cboSex","cboSmokeClass","cboRateClass","chkRatings","cboRating","txtFlatExtra","txtFlatExtraDuration","txtInsuredName2","txtAge2","cboSex2","cboSmokeClass2","cboRateClass2","chkRatings2","txtRatedESA","txtCalculatedESA","jointAgeMin","jointAgeMax","chkWaiver","cboWaiverRating","chkADB","txtADBAmount","cboADBRating","chkCPB","txtCPBAmount","chkWPD","cboWPDRating","chkGPO","txtGPOAmount","cboGPORating","chkAIB","txtAIBOwnerAge","cboAIBRating","btnPremium","btnFullPremium","numErrors","rdoDuration","chkCoverPage","chkTaxPage","chkUnderwritingPage","chkComplianceNotice","chkProductCompare","isRunCompare","chkInternalRoR","chkCharitableGiving","chkInsuranceInvestment","chkSharedOwnership","txtCharitableGivingIntRate","txtCharitableGivingTaxRate","txtInsuranceInvestmentIntRate","txtInsuranceInvestmentTaxRate","cboSelectedYears","cboIntervalYears","cboPolicyType","chkPremiumOffsetIllustration","txtPy1","txtPy2","txtPy3","txtPy4","txtPy5","txtAgeD1","txtAgeD2","txtAgeD3","txtAgeD4","txtAgeD5","switchInforce","lblPremium","cboDividendOption","cboDeathBenefitType","cboCOIType","txtTargetAccountValue1","txtTargetYear1","cboDepositType","cboFaceAmountType","txtDepositAmount","txtDepositDuration","txtTargetAccountValue2","txtTargetYear2","chkFundSelection1","cboFundSelection1","txtFundSelectionInterestRate1","txtFundSelectionAllocationPercent1","chkFundSelection2","cboFundSelection2","txtFundSelectionInterestRate2","txtFundSelectionAllocationPercent2","chkFundSelection3","cboFundSelection3","txtFundSelectionInterestRate3","txtFundSelectionAllocationPercent3","chkFundSelection4","cboFundSelection4","txtFundSelectionInterestRate4","txtFundSelectionAllocationPercent4","isSummaryDirty","txtEmployerBenefitPeriod","txtEmployerPayPeriod","isSharedOwnership","isRunningBatch","txtFaceAmountSolvePremium","txtNewBusinessIncomeStartAge","txtNewBusinessIncomeEndAge","txtNewBusinessIncomeAmount","cboNewBusinessIncomeType","cboNewBusinessIncomeBasis","getTerm","optionText","formatCoverage","displayValue","getFrequency","populateBenefits","benefits","ProdID","DivOptions","RAP","prodId","Button","autoFocus","logoRight","showIcon","showIconRight","isActive","allowPropagation","isDisabled","disableOnError","displayDisabled","useState","setDisabled","containerClass","stopPropagation","delayTime","ref","classLogo","srcLogo","altLogo","Checkbox","getchangeCallback","stateData","checked","readOnly","controlOnChange","locked","controlOnFocus","controlOnLostFocus","checkcontainer","checkInput","showTooltip","showTooltipIcon","ComboModal","optionItems","onSelectProduct","onCancel","btnX","btnChoose","modalTitle","isUseInformation","selectedItem","setSelectedItem","e","closeIcon","isTranslateOptions","tickLogo","Datebox","minDate","maxDate","datecontainer","dateInput","selected","date","dateFormat","showMonthDropdown","showYearDropdown","dropdownMode","placeholderText","showLabel","lazy","Label","labelText","labelbox","labelcomponent","MaskedTextbox","step","styleProp","textcontainer","textInput","mask","guide","style","autoComplete","Radiobuttons","choice","useOptions","inputcontainer","radioContainerClass","radiocontainer","radioLabel","radioGroup","child","Textbox","placeholder","textValue","setTextValue","currentState","formattedState","focus","setFocus","isReadOnly","cursorPos","selectionStart","lengthOffset","lengthDifference","setSelectionRange","newVal","onInput","isOptional","ChoiceButtons","disableChoice","componentLabel","choicesGroup","choiceContainer","choiceLabel","isSecondaryText","secondaryText","useRouter","connect","withTranslation","toggle","toggleState","prevState","ButtonBar","buttonbar","FieldContainer","tabName","activeTab","collapsable","isHidden","setIsHidden","classContent","content","classHeader","Icon","styles","svg","display","verticalAlign","margin","color","path","fill","newStyle","assign","width","height","viewBox","d","n","PremiumDisplay","coverageItemsDisplay","msg_basepremium","policyVal","insuranceData","coveragetype","coveragevalue","termsKeyArr","benefitsKeyArr","coverageListItems","coverageType","modalPremium","msg_policyfee","msg_annualpremium","msg_nodata","msg_notApplicable","jointAgeError","getInitialPremiumByID","getInitialCalcValueByName","strCoverageID","columnItems","columnItem","dblTableData_Main","columnNumber","strName","coverageID","Spinner","spinner","Tab","TooltipIcon","TooltipText","globalVariables","$","require","hideControlBatch","fieldArray","hideControl","isUpdateControlItems","each","el","hide","showControlBatch","showControl","show","removeAttr","disableControl","element","enableControl","sessionStore","updateStoreFormSessionData","pageSelection","conceptSelection","getPageConceptSelection","GlobalCustomLostFocus","cpbAmount","ceil","floor","gpoAmount","GlobalCustomClickBusinessRules","proneedsBusinessRules","compareSetupItem","profileBusinessRules","runAll","isNewBusiness","isInforce","isAdmin","currentYear","getUTCFullYear","buildUniversityYearOptionItems","cboTemp","txtTemp","idx","j","processMinFaceAmount","minFaceBands","processADBMaxFaceAmount","adbMaxFaceBands","processGPOMaxFaceAmount","gpoMaxFaceBands","proquoteBusinessRules","ageValue","age30Year","setFullYear","ADD","NT","ADDED","S","P","U","setSelectBox","Y","N","GlobalCustomBusinessRules","GlobalCustomBuildTrackingData","ProQuote","Routes","useDispatch","fallback","mapDispatchToProps","firstYearPremium","StoreConnector","routes","setScreenWidth","screenWidth","innerWidth","toggleSticky","currentScrollPos","pageYOffset","sticky","tabHeaderOffset","offsetHeight","tabHeaderSticky","policyHeaderOffset","policyHeaderSticky","tabsSticky","storeFormData","addEventListener","removeEventListener","store","Boolean","hostname","match","i18n","Backend","initReactI18next","init","backend","loadPath","process","lng","fallbackLng","debug","ns","defaultNS","keySeparator","interpolation","escapeValue","formatSeparator","returnEmptyString","react","wait","useSuspense","navigator","serviceWorker","ready","registration","unregister"],"mappings":"8GAAA,sGAAO,IAAMA,EAAa,CACxBC,WAAY,aACZC,YAAa,cACbC,WAAY,aACZC,aAAc,eACdC,aAAc,eACdC,qBAAsB,uBACtBC,cAAe,gBACfC,aAAc,eACdC,YAAa,cACbC,YAAa,cACbC,YAAa,cACbC,WAAY,aACZC,WAAY,aACZC,iBAAkB,mBAClBC,kBAAmB,oBACnBC,cAAe,gBACfC,YAAa,cACbC,YAAa,cACbC,UAAW,YACXC,WAAY,aACZC,YAAa,cACbC,iBAAkB,mBAClBC,cAAe,gBACfC,UAAW,YACXC,UAAW,YACXC,iBAAkB,mBAClBC,cAAe,gBACfC,aAAc,eACdC,UAAW,aAGAC,EAAQ,CACnBC,OACE,2SACFC,SACE,0GACFC,QACE,2GACFC,KACE,gHACFC,YACE,waACFC,KACE,gUACFC,UACE,6QACFC,OAAQ,iEACRC,eACE,4GACFC,iBACE,gHACFC,gBACE,gHACFC,OACE,4RACFC,SACE,mIACFC,QACE,kkBACFC,UACE,sWACFC,MACE,odACFC,KACE,iIACFC,OACE,2NAESC,EAAS,CACpBC,MAAO,GACPC,KAAM,gDACNC,OAAQ,kDACRC,KAAM,0DACNC,MAAO,oBACPC,KAAM,OACNC,QAAS,UACTC,YAAa,4DACbC,YAAa,eACbC,OAAQ,wCACRC,YAAa,cACbC,WAAY,yBACZC,MAAO,oBACPC,KAAM,mBACNC,MAAO,QACPC,MAAO,QACPC,eAAgB,iBAChBC,SAAU,WACVC,MAAO,sDACPC,YAAa,4BACbC,QAAS,UACTC,eAAgB,iBAChBC,oBAAqB,mCACrBC,kBAAmB,gCACnBC,QAAS,UACTC,KAAM,OACNC,QAAS,2CACTC,YAAa,4EACbC,cAAe,+BACfC,iBAAkB,mBAClBC,WAAY,aACZC,KAAM,OACNC,MAAO,QACPC,MAAO,QACPC,MAAO,QACPC,KAAM,OACNC,MAAO,QACPC,MAAO,QACPC,gBAAiB,kBACjBC,QAAS,oDACTC,iBAAkB,mBAClBC,OAAQ,gCACRC,WAAY,sEACZC,YAAa,uEACbC,UAAW,YACXC,aAAc,uBACdC,eAAgB,iBAChBC,eAAgB,iBAChBC,WAAY,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","file":"static/js/main.4ba1f064.chunk.js","sourcesContent":["export const INPUTTYPES = {\r\n INPUT_TEXT: 'input_Text',\r\n INPUT_UPPER: 'input_Upper',\r\n INPUT_NAME: 'input_Name',\r\n INPUT_DOLLAR: 'input_Dollar', //Includes floating point dollar\r\n INPUT_NUMBER: 'input_Number', // Inclues floating point numers\r\n INPUT_DOLLAR_INTEGER: 'input_Dollar_Integer', // Only integer dollar\r\n INPUT_INTEGER: 'input_Integer', //Only integers\r\n INPUT_BUTTON: 'input_Button',\r\n INPUT_COMBO: 'input_Combo',\r\n INPUT_CHECK: 'input_Check',\r\n INPUT_RADIO: 'input_Radio',\r\n INPUT_REAL: 'input_Real',\r\n INPUT_DATE: 'input_Date',\r\n INPUT_MULTICHECK: 'input_MultiCheck',\r\n INPUT_MULTISELECT: 'input_MultiSelect',\r\n INPUT_PERCENT: 'input_Percent',\r\n INPUT_PHONE: 'input_Phone',\r\n INPUT_LABEL: 'input_Label',\r\n INPUT_TAB: 'input_Tab',\r\n INPUT_PAGE: 'input_Page',\r\n INPUT_EMAIL: 'input_Email',\r\n INPUT_POSTALCODE: 'input_PostalCode',\r\n INPUT_ZIPCODE: 'input_ZipCode',\r\n INPUT_SIN: 'input_SIN',\r\n INPUT_SSN: 'input_SSN',\r\n INPUT_CREDITCARD: 'input_CreditCard',\r\n INPUT_LONGINT: 'input_LongInt',\r\n INPUT_OPTION: 'input_Option',\r\n INPUT_DEV: 'input_Dev',\r\n};\r\n\r\nexport const ICONS = {\r\n BUBBLE:\r\n 'M512 64c282.77 0 512 186.25 512 416 0 229.752-229.23 416-512 416-27.156 0-53.81-1.734-79.824-5.044-109.978 109.978-241.25 129.7-368.176 132.596v-26.916c68.536-33.578 128-94.74 128-164.636 0-9.754-0.758-19.33-2.164-28.696-115.796-76.264-189.836-192.754-189.836-323.304 0-229.75 229.23-416 512-416z',\r\n ENLARGE2:\r\n 'M1024 0v416l-160-160-192 192-96-96 192-192-160-160zM448 672l-192 192 160 160h-416v-416l160 160 192-192z',\r\n SHRINK2:\r\n 'M448 576v416l-160-160-192 192-96-96 192-192-160-160zM1024 96l-192 192 160 160h-416v-416l160 160 192-192z',\r\n BIN2:\r\n 'M192 1024h640l64-704h-768zM640 128v-128h-256v128h-320v192l64-64h768l64 64v-192h-320zM576 128h-128v-64h128v64z',\r\n CLOUD_CHECK:\r\n 'M892.268 514.49c2.442-11.108 3.732-22.646 3.732-34.49 0-88.366-71.634-160-160-160-14.224 0-28.014 1.868-41.134 5.352-24.796-77.352-97.288-133.352-182.866-133.352-87.348 0-161.054 58.336-184.326 138.17-22.742-6.62-46.792-10.17-71.674-10.17-141.384 0-256 114.616-256 256 0 141.382 114.616 256 256 256h608c88.366 0 160-71.632 160-160 0-78.718-56.854-144.16-131.732-157.51zM416 768l-160-160 64-64 96 96 224-224 64 64-288 288z',\r\n BOLD:\r\n 'M707.88 484.652c37.498-44.542 60.12-102.008 60.12-164.652 0-141.16-114.842-256-256-256h-320v896h384c141.158 0 256-114.842 256-256 0-92.956-49.798-174.496-124.12-219.348zM384 192h101.5c55.968 0 101.5 57.42 101.5 128s-45.532 128-101.5 128h-101.5v-256zM543 832h-159v-256h159c58.45 0 106 57.42 106 128s-47.55 128-106 128z',\r\n UNDERLINE:\r\n 'M704 64h128v416c0 159.058-143.268 288-320 288-176.73 0-320-128.942-320-288v-416h128v416c0 40.166 18.238 78.704 51.354 108.506 36.896 33.204 86.846 51.494 140.646 51.494s103.75-18.29 140.646-51.494c33.116-29.802 51.354-68.34 51.354-108.506v-416zM192 832h640v128h-640z',\r\n ITALIC: 'M896 64v64h-128l-320 768h128v64h-448v-64h128l320-768h-128v-64z',\r\n PARAGRAPH_LEFT:\r\n 'M0 64h1024v128h-1024zM0 256h640v128h-640zM0 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z',\r\n PARAGRAPH_CENTER:\r\n 'M0 64h1024v128h-1024zM192 256h640v128h-640zM192 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z',\r\n PARAGRAPH_RIGHT:\r\n 'M0 64h1024v128h-1024zM384 256h640v128h-640zM384 640h640v128h-640zM0 448h1024v128h-1024zM0 832h1024v128h-1024z',\r\n GOOGLE:\r\n 'M522.2 438.8v175.6h290.4c-11.8 75.4-87.8 220.8-290.4 220.8-174.8 0-317.4-144.8-317.4-323.2s142.6-323.2 317.4-323.2c99.4 0 166 42.4 204 79l139-133.8c-89.2-83.6-204.8-134-343-134-283 0-512 229-512 512s229 512 512 512c295.4 0 491.6-207.8 491.6-500.2 0-33.6-3.6-59.2-8-84.8l-483.6-0.2z',\r\n FACEBOOK:\r\n 'M608 192h160v-192h-160c-123.514 0-224 100.486-224 224v96h-128v192h128v512h192v-512h160l32-192h-192v-96c0-17.346 14.654-32 32-32z',\r\n TWITTER:\r\n 'M1024 226.4c-37.6 16.8-78.2 28-120.6 33 43.4-26 76.6-67.2 92.4-116.2-40.6 24-85.6 41.6-133.4 51-38.4-40.8-93-66.2-153.4-66.2-116 0-210 94-210 210 0 16.4 1.8 32.4 5.4 47.8-174.6-8.8-329.4-92.4-433-219.6-18 31-28.4 67.2-28.4 105.6 0 72.8 37 137.2 93.4 174.8-34.4-1-66.8-10.6-95.2-26.2 0 0.8 0 1.8 0 2.6 0 101.8 72.4 186.8 168.6 206-17.6 4.8-36.2 7.4-55.4 7.4-13.6 0-26.6-1.4-39.6-3.8 26.8 83.4 104.4 144.2 196.2 146-72 56.4-162.4 90-261 90-17 0-33.6-1-50.2-3 93.2 59.8 203.6 94.4 322.2 94.4 386.4 0 597.8-320.2 597.8-597.8 0-9.2-0.2-18.2-0.6-27.2 41-29.4 76.6-66.4 104.8-108.6z',\r\n LINKEDIN2:\r\n 'M384 384h177.106v90.782h2.532c24.64-44.194 84.958-90.782 174.842-90.782 186.946 0 221.52 116.376 221.52 267.734v308.266h-184.61v-273.278c0-65.184-1.334-149.026-96.028-149.026-96.148 0-110.82 70.986-110.82 144.292v278.012h-184.542v-576z M64 384h192v576h-192v-576z M256 224c0 53.019-42.981 96-96 96s-96-42.981-96-96c0-53.019 42.981-96 96-96s96 42.981 96 96z',\r\n ERROR:\r\n 'M512 92.774l429.102 855.226h-858.206l429.104-855.226zM512 0c-22.070 0-44.14 14.882-60.884 44.648l-437.074 871.112c-33.486 59.532-5 108.24 63.304 108.24h869.308c68.3 0 96.792-48.708 63.3-108.24h0.002l-437.074-871.112c-16.742-29.766-38.812-44.648-60.882-44.648v0z M576 832c0 35.346-28.654 64-64 64s-64-28.654-64-64c0-35.346 28.654-64 64-64s64 28.654 64 64z M512 704c-35.346 0-64-28.654-64-64v-192c0-35.346 28.654-64 64-64s64 28.654 64 64v192c0 35.346-28.654 64-64 64z',\r\n DASH:\r\n 'M0 416v192c0 17.672 14.328 32 32 32h960c17.672 0 32-14.328 32-32v-192c0-17.672-14.328-32-32-32h-960c-17.672 0-32 14.328-32 32z',\r\n BULLET:\r\n 'M512 0c-282.77 0-512 229.23-512 512s229.23 512 512 512 512-229.23 512-512-229.23-512-512-512zM512 640c-70.692 0-128-57.306-128-128 0-70.692 57.308-128 128-128 70.694 0 128 57.308 128 128 0 70.694-57.306 128-128 128z',\r\n};\r\nexport const STYLES = {\r\n BASIC: '',\r\n LOGO: 'LOGO flexContainer alignCenter bgPrimaryShade',\r\n SELECT: 'SELECT borderThin borderNeutral borderRadiusAll',\r\n TEXT: 'TEXT borderThin borderNeutral borderRadiusAll marginMed',\r\n CHECK: 'CHECK opacityNone',\r\n DATE: 'DATE',\r\n TOOLTIP: 'tooltip',\r\n TOOLTIPTEXT: 'tooltiptext bgDark borderRadiusAll paddingMed opacityNone',\r\n TOOLTIPICON: 'tooltip-icon',\r\n BUTTON: 'BUTTON paddingMed marginSm borderNone',\r\n MULTISELECT: 'MULTISELECT',\r\n MULTICHECK: 'MULTICHECK opacityNone',\r\n RADIO: 'RADIO opacityNone',\r\n PILL: 'PILL opacityNone',\r\n LABEL: 'LABEL',\r\n CHILD: 'CHILD',\r\n LABELCOMPONENT: 'LABELCOMPONENT',\r\n INPUTBOX: 'INPUTBOX',\r\n INPUT: 'INPUT TEXT borderThin borderNeutral borderRadiusAll',\r\n INPUTSUBMIT: 'INPUTSUBMIT flexContainer',\r\n PRODUCT: 'PRODUCT',\r\n INFORCEPRODUCT: 'INFORCEPRODUCT',\r\n INFORCEPOLICYHEADER: 'INFORCEPOLICYHEADER alignStretch',\r\n ALPHALOOKUPHEADER: 'ALPHALOOKUPHEADER alignCenter',\r\n BUTTONS: 'BUTTONS',\r\n TABS: 'TABS',\r\n TABLIST: 'TABLIST flexContainer paddingNone noCols',\r\n TABLISTITEM: 'TABLISTITEM fontPrimaryColor paddingMedWide borderRadiusTop cursorPointer',\r\n TABLISTACTIVE: 'TABLISTACTIVE bgPrimaryColor',\r\n TABCONTENTACTIVE: 'TABCONTENTACTIVE',\r\n TABCONTENT: 'TABCONTENT',\r\n CARD: 'CARD',\r\n GROUP: 'GROUP',\r\n TABLE: 'TABLE',\r\n THEAD: 'THEAD',\r\n TROW: 'TROW',\r\n TDATA: 'TDATA',\r\n TBODY: 'TBODY',\r\n SUMMARYFIELDSET: 'SUMMARYFIELDSET',\r\n SUMMARY: 'SUMMARY flexContainer justifyBetween alignCenter',\r\n SUMMARYCONTAINER: 'SUMMARYCONTAINER',\r\n HEADER: 'HEADER fontSubHeader fontHdr3',\r\n PAGEHEADER: 'PAGEHEADER bgPrimaryShade justifyBetween flexContainer alignStretch',\r\n PAGEHEADERM: 'PAGEHEADERM bgPrimaryShade justifyBetween flexContainer alignStretch',\r\n BUTTONBAR: 'BUTTONBAR',\r\n POLICYHEADER: 'POLICYHEADER bgWhite',\r\n PREMIUMDISPLAY: 'PREMIUMDISPLAY',\r\n PROFILEBUTTONS: 'PROFILEBUTTONS',\r\n PAGEFOOTER: 'PAGEFOOTER',\r\n VALIDATION: 'VALIDATION',\r\n ERRORICON: 'ERRORICON errorIcon',\r\n INPUTCONTAINER: 'INPUTCONTAINER marginSm',\r\n RADIOCONTAINER: 'RADIOCONTAINER',\r\n PILLCONTAINER: 'PILLCONTAINER',\r\n TABLAYOUT: 'TABLAYOUT paddingLg borderThin borderColor',\r\n TABCONTAINER: 'TABCONTAINER',\r\n LAYOUT: 'LAYOUT flexContainer',\r\n SIDEBARCONTAINER: 'SIDEBARCONTAINER bgNeutral',\r\n FIELDCONTAINER: 'FIELDCONTAINER borderThin borderNeutral borderBottom',\r\n FIELDCONTAINERHEADER: 'FIELDCONTAINERHEADER fontHdr2 flexContainer alignCenter marginNone',\r\n FIELDCONTENT: 'FIELDCONTENT toggleableField paddingLeftIndent',\r\n SUBFIELDSET: 'SUBFIELDSET sub-fieldset fullWidth flexContainer',\r\n STATUSDISPLAY: 'STATUSDISPLAY',\r\n COVERAGETYPE: 'COVERAGETYPE',\r\n COVERAGEVALUE: 'COVERAGEVALUE',\r\n\r\n INFORCEPOLICYSUMMARY: 'INFORCEPOLICYSUMMARY',\r\n PANELITEMGROUP: 'PANELITEMGROUP paddingLgWide',\r\n};\r\n","export const ActionTypes = {\r\n DATA_LOAD: 'data_load',\r\n DATA_LOADING: 'DATA_LOADING',\r\n DATA_REMOVE: 'data_remove',\r\n CONTROLITEMS_LOAD: 'controlitems_load',\r\n UPDATE_CONTROLITEMS: 'UPDATE_CONTROLITEMS',\r\n PRODUCTSETUPITEMS_LOAD: 'productsetupitems_load',\r\n INTERFACESETUPITEMS_LOAD: 'interfacesetupitems_load',\r\n INTERFACESETUPITEMS_UPDATE: 'INTERFACESETUPITEMS_UPDATE',\r\n ALLSETUPS_LOAD: 'ALLSETUPS_LOAD',\r\n SET_FORMDATA: 'set_formdata',\r\n UPDATE_FORMDATA: 'update_formdata',\r\n CLEAR_FORMDATA: 'clear_formdata',\r\n USER_LOADED: 'USER_LOADED',\r\n AUTH_ERROR: 'AUTH_ERROR',\r\n LOGIN_SUCCESS: 'LOGIN_SUCCESS',\r\n LOGIN_FAIL: 'LOGIN_FAIL',\r\n AUTH_FAIL: 'AUTH_FAIL',\r\n AUTH_SUCCESS: 'AUTH_SUCCESS',\r\n REFRESH_TOKEN_SUCCESS: 'REFRESH_TOKEN_SUCCESS',\r\n REFRESH_TOKEN_FAIL: 'REFRESH_TOKEN_FAIL',\r\n GET_PROFILE: 'GET_PROFILE',\r\n CLEAR_PROFILE: 'CLEAR_PROFILE',\r\n UPDATE_PROFILE: 'UPDATE_PROFILE',\r\n LOGOUT: 'LOGOUT',\r\n SESSION_TIMEOUT: 'SESSION_TIMEOUT',\r\n SET_USERNAME: 'SET_USERNAME',\r\n ALL_USERS: 'ALL_USERS',\r\n SET_ALERT: 'SET_ALERT',\r\n REMOVE_ALERT: 'REMOVE_ALERT',\r\n CLEAR_CUSTOM_STORE: 'CLEAR_CUSTOM_STORE',\r\n PROQUOTE_SECURITY: \"PROQUOTE_SECURITY\"\r\n};\r\n","import axios from 'axios';\r\n//FLF Dev Server is https://172.16.0.26\r\n\r\n\r\n\r\n//export default api; --use this instead when testing locally\r\n//export default axios; --use this when deploying\r\nlet api = axios;\r\n// if(process.env.NODE_ENV!=='production'){\r\n// api = axios.create({\r\n// baseURL: 'https://104.168.164.112',\r\n// //baseURL: 'http://localhost:44376', //when running local for both front and back-end\r\n// });\r\n// api.CancelToken = axios.CancelToken;\r\n// api.isCancel = axios.isCancel;\r\n// }\r\nexport default api;\r\n","import {ActionTypes} from '../types';\r\n\r\nconst initialState = {};\r\n\r\nconst alertReducer = (state = initialState, action) => {\r\n const {type, payload, name} = action;\r\n switch (type) {\r\n case ActionTypes.SET_ALERT:\r\n return {...state, [name]: payload};\r\n case ActionTypes.REMOVE_ALERT:\r\n let newState = {...state};\r\n delete newState[name];\r\n return newState;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport {alertReducer as alert};\r\n","import {ActionTypes} from '../types';\r\n\r\nconst initialState = {\r\n isAuthenticated: JSON.parse(sessionStorage.getItem('quote-auth')),\r\n username: JSON.parse(sessionStorage.getItem('quote-user')),\r\n};\r\n\r\nconst authReducer = (state = initialState, action) => {\r\n const {type, payload} = action;\r\n\r\n switch (type) {\r\n case ActionTypes.AUTH_SUCCESS:\r\n case ActionTypes.REFRESH_TOKEN_SUCCESS:\r\n return {\r\n ...state,\r\n refreshToken: payload,\r\n };\r\n\r\n case ActionTypes.REFRESH_TOKEN_FAIL:\r\n return state;\r\n\r\n case ActionTypes.LOGIN_SUCCESS:\r\n sessionStorage.setItem('quote-user', JSON.stringify(payload.trackingUserName));\r\n sessionStorage.setItem('quote-auth', JSON.stringify(true));\r\n\r\n return {\r\n ...state,\r\n user: payload,\r\n isAuthenticated: true,\r\n };\r\n case ActionTypes.UPDATE_PROFILE:\r\n console.log('Update Profile');\r\n console.log(payload);\r\n sessionStorage.setItem('user', JSON.stringify(payload));\r\n return {\r\n ...state,\r\n user: payload,\r\n isAuthenticated: true,\r\n };\r\n case ActionTypes.LOGOUT:\r\n case ActionTypes.LOGIN_FAIL:\r\n case ActionTypes.AUTH_ERROR:\r\n let cache = JSON.parse(sessionStorage.getItem('bi'));\r\n sessionStorage.clear();\r\n if (cache) {\r\n sessionStorage.setItem('bi', JSON.stringify(cache));\r\n }\r\n return {\r\n user: null,\r\n isAuthenticated: false,\r\n };\r\n\r\n case ActionTypes.SESSION_TIMEOUT:\r\n sessionStorage.removeItem('quote-auth');\r\n sessionStorage.removeItem('quote-rt');\r\n sessionStorage.setItem('isSessionExpired', JSON.stringify(true));\r\n return {\r\n user: null,\r\n isAuthenticated: false,\r\n };\r\n\r\n case ActionTypes.SET_USERNAME:\r\n sessionStorage.setItem('quote-user', JSON.stringify(payload.username));\r\n return state;\r\n case ActionTypes.ALL_USERS:\r\n return {\r\n ...state,\r\n users: payload,\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport {authReducer as auth};\r\n","import {ActionTypes} from '../types';\r\n\r\nconst initialState = {};\r\n\r\nconst formDataReducer = (state = initialState, action) => {\r\n const {type, payload} = action;\r\n\r\n switch (type) {\r\n case ActionTypes.SET_FORMDATA:\r\n sessionStorage.setItem(payload.dataType, JSON.stringify(payload.initialFormData));\r\n return {\r\n ...state,\r\n [payload.dataType]: payload.initialFormData,\r\n };\r\n\r\n case ActionTypes.UPDATE_FORMDATA:\r\n let cacheData = {};\r\n if (sessionStorage.getItem(payload.dataType)) {\r\n cacheData = JSON.parse(sessionStorage.getItem(payload.dataType));\r\n cacheData = {...cacheData, [payload.name]: payload.value};\r\n sessionStorage.setItem(payload.dataType, JSON.stringify(cacheData));\r\n }\r\n return {\r\n ...state,\r\n [payload.dataType]: {\r\n ...state[payload.dataType],\r\n [payload.name]: payload.value,\r\n },\r\n };\r\n case ActionTypes.CLEAR_FORMDATA:\r\n console.log('Clear Form Data: ', payload);\r\n const {dataType, formData} = payload;\r\n if (dataType) {\r\n sessionStorage.setItem(dataType, JSON.stringify(formData)); //Initialize with initial values, this applied mainly to alphalookup only\r\n return {\r\n ...state,\r\n [dataType]: formData,\r\n };\r\n }\r\n return initialState;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport {formDataReducer as formData};\r\n","import {combineReducers} from 'redux';\r\n\r\nimport * as custom from 'custom/common/redux/reducers';\r\nimport {alert} from './alertReducers';\r\nimport {auth} from './authReducers';\r\nimport {formData} from './formDataReducers';\r\nimport {setupItems} from './setupReducers';\r\nimport {roles} from './rolesReducers';\r\nexport default combineReducers({\r\n ...custom,\r\n alert,\r\n auth,\r\n formData,\r\n setupItems,\r\n roles,\r\n});\r\n","//import { CONTROLITEMS_LOAD, CONTROLITEMS_LOAD_SUCCESS, CONTROLITEMS_LOAD_FAIL, CONTROLITEMS_STORE } from '../actions/controlItemsActionCreators';\r\nimport {ActionTypes} from '../types';\r\n//import { data as initialData } from \"../initialData.js\";\r\n\r\n//import { GET_DATA } from \"../../webservice/RestMiddleware\";\r\n\r\n// const initialState = {};\r\nconst CONTROL_ITEMS = 'controlItems';\r\nconst INTERFACE_SETUP_ARRAY = 'interfaceSetupArray';\r\nconst INTERFACE_SETUP_ITEMS = 'interfaceSetupItems';\r\n\r\nconst setupReducer = (state = {}, action) => {\r\n const {type, payload} = action;\r\n\r\n switch (type) {\r\n case ActionTypes.DATA_LOADING:\r\n return {...state, isDataLoading: true};\r\n case ActionTypes.CONTROLITEMS_LOAD:\r\n return {\r\n ...state,\r\n isDataLoading: false,\r\n controlItems: payload,\r\n };\r\n case ActionTypes.INTERFACESETUPITEMS_LOAD:\r\n return {\r\n ...state,\r\n isDataLoading: false,\r\n interfaceSetupArray: payload,\r\n };\r\n case ActionTypes.INTERFACESETUPITEMS_UPDATE:\r\n return {isDataLoading: false, ...state, interfaceSetupItems: payload};\r\n case ActionTypes.ALLSETUPS_LOAD:\r\n return {...state, allSetupItems: payload};\r\n case ActionTypes.DATA_REMOVE:\r\n return {};\r\n case ActionTypes.UPDATE_CONTROLITEMS:\r\n const {name, parameter, value} = payload;\r\n return {\r\n ...state,\r\n controlItems: {\r\n ...state[CONTROL_ITEMS],\r\n [name]: {...state.controlItems[name], [parameter]: value},\r\n },\r\n };\r\n case ActionTypes.PROQUOTE_SECURITY:\r\n return {\r\n ...state, security: payload\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport {setupReducer as setupItems};\r\n","import {ActionTypes} from 'custom/common/redux/Types';\r\n\r\nconst rolesReducer = (state = [], action) => {\r\n const {type, payload} = action;\r\n switch (type) {\r\n case ActionTypes.ALL_ROLES:\r\n return payload;\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport {rolesReducer as roles};\r\n","import {createStore, applyMiddleware} from 'redux';\r\nimport {composeWithDevTools} from 'redux-devtools-extension';\r\nimport rootReducers from '../reducers';\r\nimport thunk from 'redux-thunk';\r\n\r\nconst middlewares = [thunk];\r\nconst initialState = {};\r\nconst enhancers = () => {\r\n if (process.env.NODE_ENV !== 'development') {\r\n console.log('Production');\r\n return applyMiddleware(...middlewares);\r\n } else {\r\n console.log('Development');\r\n return composeWithDevTools(applyMiddleware(...middlewares));\r\n }\r\n};\r\nexport const dataStore = createStore(rootReducers, initialState, composeWithDevTools(applyMiddleware(...middlewares)));\r\n// export const dataStore = createStore(rootReducers, initialState, enhancers());\r\n","import {\r\n PolicyTypes,\r\n DividendPayoutTypes,\r\n PremiumModeTypes,\r\n BILLINGSTATUS_BILLING,\r\n PayoutTypes,\r\n BillingTypeCode,\r\n ExemptStatus,\r\n TaxAccrualRule,\r\n PartyTypes,\r\n} from 'core/constants/calcConstants';\r\n\r\n//ToDo: This should be moved to a core report utils module\r\n\r\n//ToDo: Move this to a central utlity module\r\n//Custom - Inforce\r\nexport function isProductLIF(prodID) {\r\n return (\r\n prodID === 658 ||\r\n prodID === 659 ||\r\n prodID === 667 ||\r\n prodID === 668 ||\r\n prodID === 669 ||\r\n prodID === 670 ||\r\n prodID === 671\r\n );\r\n}\r\n//Custom - Inforce\r\n//ToDo: Move this to a central utlity module\r\nexport function isProdIDSOSBA(prodID) {\r\n return (\r\n prodID === 800 ||\r\n prodID === 801 ||\r\n prodID === 802 ||\r\n prodID === 803 ||\r\n prodID === 804 ||\r\n prodID === 805 ||\r\n prodID === 806 ||\r\n prodID === 807\r\n );\r\n}\r\n\r\n//Custom - Inforce\r\n//ToDo: Move this to a central utlity module\r\nexport function isProductEssentialLife(prodID) {\r\n return (\r\n prodID === 370 ||\r\n prodID === 371 ||\r\n prodID === 372 ||\r\n prodID === 373 ||\r\n prodID === 374 ||\r\n prodID === 375 ||\r\n prodID === 376 ||\r\n prodID === 377 ||\r\n prodID === 378 ||\r\n prodID === 379\r\n );\r\n}\r\n//Custom - Inforce\r\nfunction isProductParticipatingTerm(prodID) {\r\n return (\r\n prodID === 114 ||\r\n prodID === 116 ||\r\n prodID === 117 ||\r\n prodID === 118 ||\r\n prodID === 119 ||\r\n prodID === 121 ||\r\n prodID === 122 ||\r\n prodID === 123\r\n );\r\n}\r\n\r\nexport function isProductTermProtection(prodID) {\r\n //Term Protection Series Products were launched Nov 2021\r\n //and they include a base Term that has no face amount\r\n //with 1 or more term riders that do have face amount\r\n return (\r\n prodID === 180\r\n );\r\n}\r\n\r\nexport function isProductT100Protection(prodID) {\r\n //The T100 Protection Series Product was launched Nov 2021\r\n return (\r\n prodID === 564\r\n );\r\n}\r\n\r\nexport function isProductWLProtection(prodID) {\r\n //The T100 Protection Series Product was launched Nov 2021\r\n return (\r\n prodID === 903 ||\r\n prodID === 904\r\n );\r\n}\r\n\r\nexport function isProductProtectionSeries(prodID) {\r\n //All products released at the end of 2021 and forwards will fall into this category\r\n return (\r\n prodID === 180 ||\r\n prodID === 564 ||\r\n prodID === 903 ||\r\n prodID === 904\r\n );\r\n}\r\n\r\n//Custom - Inforce\r\nfunction isProductParticipatingT100(prodID) {\r\n return (\r\n prodID === 553 ||\r\n prodID === 554 ||\r\n prodID === 556 ||\r\n prodID === 557 ||\r\n prodID === 558 ||\r\n prodID === 559\r\n );\r\n}\r\n\r\nexport function isProductPar(policyType, prodID) {\r\n return (\r\n policyType === PolicyTypes.Endowment ||\r\n policyType === PolicyTypes.Enhanced ||\r\n policyType === PolicyTypes.WholeLife ||\r\n policyType === PolicyTypes.DeferredAnnuity ||\r\n isProductParticipatingTerm(prodID) ||\r\n isProductParticipatingT100(prodID)\r\n );\r\n}\r\n//Custom - Inforce\r\nexport function IsProductPremOffset(inforcePolicy, controlItems, inforceFormData) {\r\n if (\r\n inforcePolicy.dividendPayoutType === DividendPayoutTypes.PUA ||\r\n inforcePolicy.dividendPayoutType === DividendPayoutTypes.DOD\r\n ) {\r\n if (\r\n isInPremiumOffset(inforcePolicy) ||\r\n isPremiumOffsetSelected(controlItems, inforceFormData)\r\n ) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n//Custom - Inforce\r\nexport function isPremiumOffsetSelected(controlItems, inforceFormData) {\r\n return !controlItems['chkPremiumOffset'].disabled && inforceFormData['chkPremiumOffset'];\r\n}\r\n\r\n//Custom - Inforce\r\nexport function IsProdIDFlexLife2(prodID) {\r\n return prodID === 602 || prodID === 603;\r\n}\r\n//Custom - Inforce\r\nexport function isProductADBPlus(prodID) {\r\n return prodID === 790 || prodID === 791;\r\n}\r\n//Custom - Inforce\r\nexport function IsProductExcludeRPU(prodID) {\r\n return prodID === 805 || prodID === 807;\r\n}\r\n\r\nexport function IsProductTruncateRPU(prodID) {\r\n return (\r\n prodID === 370 ||\r\n prodID === 371 ||\r\n prodID === 372 ||\r\n prodID === 373 ||\r\n prodID === 374 ||\r\n prodID === 375 ||\r\n prodID === 376 ||\r\n prodID === 377 ||\r\n prodID === 378 ||\r\n prodID === 379 ||\r\n prodID === 545 ||\r\n prodID === 546 ||\r\n prodID === 547 ||\r\n prodID === 548\r\n );\r\n}\r\n//Custom - Inforce\r\nexport function IsProductParticipatingTerm(prodID) {\r\n return (\r\n prodID === 114 ||\r\n prodID === 116 ||\r\n prodID === 117 ||\r\n prodID === 118 ||\r\n prodID === 119 ||\r\n prodID === 121 ||\r\n prodID === 122 ||\r\n prodID === 123\r\n );\r\n}\r\n\r\nexport function IsProductNonParticipatingTerm(prodID) {\r\n //T100s that do not 'participate'. Used for determining output report\r\n return (\r\n prodID === 101 ||\r\n prodID === 102 ||\r\n prodID === 103 ||\r\n prodID === 104 ||\r\n prodID === 105 ||\r\n prodID === 107 ||\r\n prodID === 108 ||\r\n prodID === 109 ||\r\n prodID === 110 ||\r\n prodID === 111 ||\r\n prodID === 113 ||\r\n prodID === 115 ||\r\n prodID === 120 ||\r\n prodID === 124 ||\r\n prodID === 125 ||\r\n prodID === 126 ||\r\n prodID === 127 ||\r\n prodID === 128 ||\r\n prodID === 129 ||\r\n prodID === 130 ||\r\n prodID === 131 ||\r\n prodID === 132 ||\r\n prodID === 133 ||\r\n prodID === 790 ||\r\n prodID === 791\r\n );\r\n //Include 790 and 791 (ADB Plus)\r\n}\r\n\r\nexport function IsProductParticipatingT100(prodID) {\r\n //T100s that do not 'participate'. Used for determining output report\r\n return (\r\n prodID === 553 ||\r\n prodID === 554 ||\r\n prodID === 556 ||\r\n prodID === 557 ||\r\n prodID === 558 ||\r\n prodID === 559\r\n );\r\n}\r\n\r\nexport function IsProductNonParticipatingT100(prodID) {\r\n //T100s that do not 'participate'. Used for determining output report\r\n return (\r\n prodID === 545 ||\r\n prodID === 546 ||\r\n prodID === 547 ||\r\n prodID === 548 ||\r\n prodID === 549 ||\r\n prodID === 550 ||\r\n prodID === 551 ||\r\n prodID === 552 ||\r\n prodID === 805 ||\r\n prodID === 806 ||\r\n prodID === 807\r\n );\r\n}\r\n\r\nexport function IsProductCurrentPremiumT100(prodID) {\r\n //T100s that do not 'participate'. Used for determining output report\r\n return prodID === 560 || prodID === 561 || prodID === 562 || prodID === 563;\r\n}\r\n\r\nexport function isProdIDGradedPremium(prodID) {\r\n return prodID === 341 || prodID === 343 || prodID === 330;\r\n}\r\n\r\n//Custom - Inforce\r\nexport function isProdIDProPlan(prodID) {\r\n return (\r\n prodID === 553 ||\r\n prodID === 554 ||\r\n prodID === 556 ||\r\n prodID === 557 ||\r\n prodID === 558 ||\r\n prodID === 559\r\n );\r\n}\r\n\r\nexport function isProdIDSOSBAEndowment(prodID) {\r\n return prodID === 801 || prodID === 802;\r\n}\r\n\r\nexport function isProductHealth(prodID) {\r\n return (\r\n prodID === 200 ||\r\n prodID === 201 ||\r\n prodID === 202 ||\r\n prodID === 203 ||\r\n prodID === 204 ||\r\n prodID === 205 ||\r\n prodID === 206 ||\r\n prodID === 207 ||\r\n prodID === 208 ||\r\n prodID === 209\r\n );\r\n}\r\n\r\nexport function isPolicyPaidUp(inforcePolicy) {\r\n let aDate = new Date(inforcePolicy.paidUpDate);\r\n return (\r\n aDate <= inforcePolicy.currentDate ||\r\n inforcePolicy.policyCStatCode === '3' ||\r\n inforcePolicy.policyCStatCode === '4'\r\n );\r\n return true;\r\n}\r\n\r\nexport function isPlanExcludeHealthMatch(PlanCode) {\r\n let strTemp = PlanCode.toUpperCase();\r\n return (\r\n strTemp === '88W 1' ||\r\n strTemp === '88W J' ||\r\n strTemp === '88P651' ||\r\n strTemp === '88P652' ||\r\n strTemp === '11L1 1' ||\r\n strTemp === '11L1 J' ||\r\n strTemp === '11L201' ||\r\n strTemp === '11L20J'\r\n );\r\n}\r\n\r\nexport function isPolicyMaturing(inforcePolicy, checkMonthsToMaturity) {\r\n let dtExpiryDate = new Date(inforcePolicy.expiryDate);\r\n let dtCurrentDate = new Date(inforcePolicy.currentDate);\r\n\r\n let monthsToMaturity = monthDiff(dtCurrentDate, dtExpiryDate);\r\n return monthsToMaturity <= checkMonthsToMaturity;\r\n}\r\n\r\nexport function isFundLoan(fundID) {\r\n return fundID.toUpperCase() === 'LOAN' || fundID.toUpperCase() === 'ULCF';\r\n}\r\n\r\nexport function modalFactor(mode) {\r\n return 12 / mode;\r\n}\r\n\r\n//Custom - Inforce\r\n//This is a duplicate from Tree.js. This needs to be moved to a core module\r\nfunction TextLookup_tEdit(typeID, valueID, useProperCase, t) {\r\n let outText = '';\r\n let lookupText = '';\r\n lookupText = t(`tEdit-${typeID}-${valueID}`);\r\n outText = lookupText.trim();\r\n if (useProperCase) {\r\n outText = toProperCase(outText);\r\n }\r\n return outText;\r\n}\r\n\r\n//UTILITY Function for trimming planCode: FACFMR ==>> FACFM\r\nfunction getPlanCode(planCode) {\r\n let code = planCode;\r\n if (code.length > 0 && code[code.length - 1] === 'R') {\r\n code = code.substring(0, code.length - 1);\r\n }\r\n return code;\r\n}\r\nexport function TextLookup_ProductName(planCode, t) {\r\n return TextLookup_tEdit('PROD', getPlanCode(planCode), false, t);\r\n}\r\n\r\nexport function TextLookup_PolicyName(planCode, t) {\r\n //console.log(`PlanCode = **${planCode.trim()}**`);\r\n //console.log(`lookup = ${TextLookup_tEdit('PNAME', planCode.trim(), false)}`);\r\n return TextLookup_tEdit('PNAME', getPlanCode(planCode.trim()), false, t);\r\n}\r\n\r\nexport function TextLookup_PolicyCStatCode(cStatCode, t) {\r\n return TextLookup_tEdit('POLST', cStatCode.toUpperCase(), false, t);\r\n}\r\n\r\nexport function TextLookup_PayoutMethodCode(payoutMethodCode, t) {\r\n return TextLookup_tEdit('APOT', payoutMethodCode, false, t);\r\n}\r\n\r\nexport function TextLookup_SubTable1(strCode, isUseProperCase, t) {\r\n return TextLookup_tEdit('STB1', strCode, isUseProperCase, t);\r\n}\r\n\r\nexport function TextLookup_SubTable2(strCode, isUseProperCase, t) {\r\n return TextLookup_tEdit('STB2', strCode, isUseProperCase, t);\r\n}\r\n\r\nexport function TextLookup_SubTable3(strCode, isUseProperCase, t) {\r\n return TextLookup_tEdit('STB3', strCode, isUseProperCase, t);\r\n}\r\n\r\nexport function TextLookup_SubTable4(strCode, isUseProperCase, t) {\r\n return TextLookup_tEdit('STB4', strCode, isUseProperCase, t);\r\n}\r\n\r\nexport function TextLookup_Relationship(strCode, t) {\r\n return TextLookup_tEdit('RELCD', strCode, false, t);\r\n}\r\n\r\nexport function TextLookup_Consent(strCode, t) {\r\n return TextLookup_tEdit('PRIV', strCode, false, t);\r\n}\r\n\r\nexport function TextLookup_AccountType(accountType, t) {\r\n switch (accountType.toUpperCase()) {\r\n case 'DIA':\r\n return t('FL Daily Interest Account');\r\n case 'GIA':\r\n return t('FL Guar Interest Accounts');\r\n case 'SEGFUND':\r\n return t('FL Equity-Linked Accounts');\r\n default:\r\n return '';\r\n }\r\n}\r\n\r\n//Custom - Inforce\r\nexport function Translate_RRIF_Code(prodID) {\r\n switch (prodID) {\r\n case 666:\r\n return 'RRIF 3';\r\n case 652:\r\n case 657:\r\n return 'RRIF 4';\r\n case 731:\r\n return 'RRIF 6';\r\n case 753:\r\n return 'RRIF 1';\r\n case 754:\r\n return 'RRIF 2';\r\n case 658:\r\n case 667:\r\n return 'LIFFA';\r\n case 659:\r\n case 669:\r\n return 'LIFFC';\r\n case 668:\r\n return 'LIFFB';\r\n case 670:\r\n return 'LIFFM';\r\n case 671:\r\n return 'LIFFO';\r\n case 672:\r\n return 'LIFFS';\r\n case 680:\r\n return 'LIFFS2';\r\n case 734:\r\n return 'LIFEA';\r\n case 736:\r\n return 'LIFEC';\r\n case 737:\r\n return 'LIFEC1';\r\n case 747:\r\n return 'LIFEM';\r\n case 748:\r\n return 'LIFEM1';\r\n case 751:\r\n return 'LIFEO';\r\n case 752:\r\n return 'LIFEO1';\r\n case 756:\r\n return 'LIFES';\r\n case 757:\r\n return 'LIFES2';\r\n default:\r\n // Error condition\r\n return 'unkwn';\r\n }\r\n}\r\n//Core - format data\r\n//Todo this is a duplicate from Tree.js. Should be moved to a core module\r\nexport function format_Display_Date(dateString) {\r\n let aDate = new Date(dateString);\r\n return new Intl.DateTimeFormat('en-US', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n }).format(aDate);\r\n}\r\n\r\n//Todo this is a duplicate from Tree.js. Should be moved to a core module\r\nexport function format_Display_Date_Short(dateString) {\r\n let aDate = new Date(dateString);\r\n return new Intl.DateTimeFormat('en-US', {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric',\r\n }).format(aDate);\r\n}\r\n\r\n//Todo this is a duplicate from Tree.js. Should be moved to a core module\r\nexport function getCurrentDate() {\r\n //Note that the date.getDate() function actually gets the day of the month (.getDay() gives the day of the week)\r\n return new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate());\r\n}\r\n\r\n//ToDo: This needs to be moved to a core utils module\r\nexport function format_Display_Date_Object(dateObject) {\r\n return new Intl.DateTimeFormat('en-US', {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n }).format(dateObject);\r\n}\r\n\r\nexport function getCurrentDateFormatted() {\r\n //Note that the date.getDate() function actually gets the day of the month (.getDay() gives the day of the week)\r\n let aDateObject = new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate());\r\n return format_Display_Date_Object(aDateObject);\r\n}\r\n\r\nexport function formatDollar(amount) {\r\n let dollarValue = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: 'USD',\r\n }).format(amount);\r\n //For negative numbers we remove the negative symbol and replace with brackets around the number\r\n if (dollarValue.substring(0, 1) === '-') {\r\n dollarValue = '(' + dollarValue.substring(1) + ')';\r\n }\r\n return dollarValue;\r\n}\r\n\r\nexport function formatAllocationPercent(amount) {\r\n return new Intl.NumberFormat('en-US', {\r\n style: 'percent',\r\n minimumFractionDigits: 2,\r\n }).format(amount / 100);\r\n}\r\n\r\nexport function formatInterestRate(amount) {\r\n return new Intl.NumberFormat('en-US', {\r\n style: 'percent',\r\n minimumFractionDigits: 2,\r\n }).format(amount);\r\n}\r\n\r\nexport function booleanToString(boolValue) {\r\n if (boolValue) {\r\n return '1';\r\n } else {\r\n return '0';\r\n }\r\n}\r\n\r\nexport function Format0Decimals(value) {\r\n return Number(value).toFixed(0);\r\n}\r\n\r\nexport function Format2Decimals(value) {\r\n return Number(value).toFixed(2);\r\n}\r\n\r\nexport function Format5Decimals(value) {\r\n return Number(value).toFixed(5);\r\n}\r\n\r\nexport function FormatnDecimals(value, n) {\r\n return Number(value).toFixed(n);\r\n}\r\n\r\nexport function formatSIN(sin) {\r\n if (sin.trim() === '' || sin === '000000000') {\r\n return 'Not Available';\r\n } else {\r\n let strTemp = '000000000' + sin;\r\n strTemp = strTemp.substring(strTemp.length - 9);\r\n let strTemp2 =\r\n strTemp.substring(0, 3) + '- ' + strTemp.substring(3, 6) + '-' + strTemp.substring(6, 9);\r\n return strTemp2;\r\n }\r\n}\r\n\r\n//Core - format data\r\nexport function formatIsAmountAboveZero(amount, output) {\r\n if (amount > 0) {\r\n return output;\r\n } else {\r\n return 'Not Selected';\r\n }\r\n}\r\n\r\n//Core - format data\r\nexport function toProperCase(str) {\r\n return str.replace(/\\w\\S*/g, function (txt) {\r\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\r\n });\r\n}\r\n//Custom Inforce\r\nexport function isInPayout(policy) {\r\n return (\r\n policy.policyType !== PolicyTypes.UL &&\r\n policy.policyType !== PolicyTypes.RRIF &&\r\n policy.annualPayoutAmount > 0\r\n );\r\n}\r\n\r\nexport function TextLookup_PremiumModeULReport(premiumMode, billingTypeCode, t) {\r\n let temp = TextLookup_PremiumModeReport(premiumMode, t).toLowerCase();\r\n if (billingTypeCode === '4') {\r\n temp = temp + ' by pre-authorized debit';\r\n }\r\n return temp;\r\n}\r\n\r\nexport function TextLookup_PremiumModeReport(premiumMode, t) {\r\n switch (premiumMode) {\r\n case PremiumModeTypes.Monthly:\r\n return t('msg-ReportMonthly');\r\n case PremiumModeTypes.Annual:\r\n return t('msg-ReportAnnual');\r\n case PremiumModeTypes.Quarterly:\r\n return t('msg-ReportQuarterly');\r\n case PremiumModeTypes.SemiAnnual:\r\n return t('msg-ReportSemiAnnual');\r\n default:\r\n break;\r\n }\r\n}\r\n\r\nexport function TextLookup_PremiumModePolicy(policy, t) {\r\n let temp = '';\r\n if (\r\n policy.policyCStatCode !== '3' &&\r\n policy.policyCStatCode !== '4' &&\r\n policy.billingStatus !== BILLINGSTATUS_BILLING\r\n ) {\r\n return 'N/A';\r\n }\r\n\r\n switch (policy.policyCStatCode) {\r\n case '3':\r\n case '4':\r\n return t('Paid Up');\r\n case '2':\r\n temp = t('Waived');\r\n break;\r\n default:\r\n break;\r\n }\r\n temp = temp + TextLookup_PremiumMode(policy.premiumMode, t);\r\n if (policy.policyCstatCode !== '2') {\r\n temp = temp + TextLookup_BillingTypeCode(policy.billingTypeCode, policy, t);\r\n }\r\n return temp;\r\n}\r\n\r\nexport function TextLookup_PremiumMode(premiumMode, t) {\r\n let valueID = '';\r\n switch (premiumMode) {\r\n case PremiumModeTypes.Monthly:\r\n valueID = '1';\r\n break;\r\n case PremiumModeTypes.Quarterly:\r\n valueID = '3';\r\n break;\r\n case PremiumModeTypes.SemiAnnual:\r\n valueID = '6';\r\n break;\r\n case PremiumModeTypes.Annual:\r\n valueID = '12';\r\n break;\r\n default:\r\n return '';\r\n }\r\n return TextLookup_tEdit('PAYM', valueID, false, t);\r\n}\r\n\r\nfunction TextLookup_BillingTypeCode(billingTypeCode, policy, t) {\r\n switch (billingTypeCode) {\r\n case '4':\r\n return ` ${t('PAD (Draw Day')} ${policy.drawDay} )`;\r\n case '5':\r\n return ` ${t('Military Pay')}`;\r\n case 'S':\r\n return ` ${t('Salary Deduction')}`;\r\n case 'D':\r\n return ` ${t('Premium Offset')}`;\r\n default:\r\n return '';\r\n }\r\n}\r\n\r\nexport function TextLookup_DividendPayout(dividendPayout, prodID, t) {\r\n let valueID = '';\r\n\r\n switch (dividendPayout) {\r\n case DividendPayoutTypes.DOD:\r\n if (isProductProtectionSeries(prodID)) {\r\n valueID = 'F';\r\n } else {\r\n valueID = '4';\r\n }\r\n break;\r\n case DividendPayoutTypes.DRP:\r\n valueID = '2';\r\n break;\r\n case DividendPayoutTypes.Enhanced:\r\n valueID = 'E';\r\n break;\r\n case DividendPayoutTypes.LRD:\r\n valueID = '6';\r\n break;\r\n case DividendPayoutTypes.None:\r\n valueID = '0';\r\n break;\r\n case DividendPayoutTypes.OYT:\r\n valueID = '5';\r\n break;\r\n case DividendPayoutTypes.PIC:\r\n valueID = '1';\r\n break;\r\n case DividendPayoutTypes.PUA:\r\n valueID = '3';\r\n break;\r\n default:\r\n return 'N/A';\r\n }\r\n return TextLookup_tEdit('DIV', valueID, false, t);\r\n}\r\n\r\nexport function TextLookup_PayoutFrequency(policy, t) {\r\n //Annually is not in tEdit so leaving it for now\r\n switch (policy.annualPayoutMode) {\r\n case PremiumModeTypes.Monthly:\r\n return t('Monthly');\r\n case PremiumModeTypes.Quarterly:\r\n return t('Quarterly');\r\n case PremiumModeTypes.SemiAnnual:\r\n return t('Semi-Annual');\r\n case PremiumModeTypes.Annual:\r\n return t('Annually');\r\n default:\r\n return '';\r\n }\r\n}\r\n\r\nexport function TextLookup_PayoutType(payoutType, t) {\r\n switch (payoutType) {\r\n case PayoutTypes.Minimum:\r\n return t('Minimum');\r\n case PayoutTypes.Maximum:\r\n return t('Maximum');\r\n case PayoutTypes.FlatAmount:\r\n default:\r\n return t('Level');\r\n }\r\n}\r\n\r\nexport function TextLookup_NFOption(nfOption, t) {\r\n let valueID = '';\r\n let result = '';\r\n\r\n switch (nfOption) {\r\n case '':\r\n return t('N/A');\r\n case 'APL':\r\n valueID = '4';\r\n break;\r\n case 'ETI':\r\n valueID = '0';\r\n break;\r\n case 'PIC':\r\n valueID = '3';\r\n break;\r\n case 'RPU':\r\n valueID = '2';\r\n break;\r\n default:\r\n }\r\n result = TextLookup_tEdit('NFO', valueID, false, t);\r\n //some NF Options have a value in brackets that we do not want to display\r\n let index = result.indexOf('(', 0);\r\n if (index > -1) {\r\n result = result.substr(0, index);\r\n }\r\n return result;\r\n}\r\n\r\nexport function TextLookup_SmokeClass(smokeClass, t) {\r\n //For some reason this is not in tEdit so it is hard-coded\r\n switch (smokeClass.toUpperCase()) {\r\n case 'S':\r\n return t('Regular');\r\n case 'N':\r\n return t('Non-Smoker');\r\n case 'R':\r\n return t('Regular');\r\n default:\r\n return t('N/A');\r\n }\r\n}\r\n//Custom Inforce\r\nexport function TextLookup_Sex(sex, t) {\r\n //For some reason this is not in tEdit so it is hard-coded\r\n switch (sex.toUpperCase()) {\r\n case 'F':\r\n return t('Female');\r\n case 'M':\r\n return t('Male');\r\n case 'J':\r\n return t('Joint');\r\n default:\r\n return '';\r\n }\r\n}\r\n//Core - Inforce\r\nexport function Translate_NextPaymentDate(payoutPaymentDate, payoutEffectiveDate, currentDate) {\r\n let paymentDate = new Date(payoutPaymentDate);\r\n let effectiveDate = new Date(payoutEffectiveDate);\r\n let currDate = new Date(currentDate);\r\n if (paymentDate >= currDate) {\r\n return format_Display_Date(payoutPaymentDate);\r\n } else if (effectiveDate >= currDate) {\r\n return format_Display_Date(payoutEffectiveDate);\r\n } else {\r\n return 'Not Selected';\r\n }\r\n}\r\n//Custom - formatting data\r\nfunction addressItemRemoveNulls(addressItem) {\r\n addressItem.address1 = stringRemoveNull(addressItem.address1);\r\n addressItem.address2 = stringRemoveNull(addressItem.address2);\r\n addressItem.address3 = stringRemoveNull(addressItem.address3);\r\n addressItem.address4 = stringRemoveNull(addressItem.address4);\r\n return addressItem;\r\n}\r\n\r\nfunction stringRemoveNull(aString) {\r\n if (aString === null) {\r\n aString = '';\r\n }\r\n return aString;\r\n}\r\n\r\nexport function FormatMailingAddress1(addressItem) {\r\n //First remove nulls from address items and convert them to blanks\r\n addressItem = addressItemRemoveNulls(addressItem);\r\n return ((addressItem.address1).trim() + ' ' + addressItem.address3).trim();\r\n //Changed for TrackIT 7451\r\n //return (addressItem.address1 + ' ' + addressItem.address3).trim() + ' ' + addressItem.address4;\r\n}\r\n\r\nexport function FormatMailingAddress2(addressItem) {\r\n return ((addressItem.address2).trim() + ' ' + addressItem.address4).trim();\r\n //Changed for TrackIT 7451\r\n //return (addressItem.address2 + ' ' + addressItem.address3).trim() + ' ' + addressItem.address4;\r\n}\r\n\r\nexport function FormatMailingAddress3(addressItem) {\r\n return (\r\n (addressItem.city + ' ' + addressItem.province).trim() +\r\n ' ' +\r\n addressItem.postalCode\r\n ).trim();\r\n}\r\n//Custom - formatting data\r\nexport function FormatChurchName(insuredItem) {\r\n let temp =\r\n toProperCase((insuredItem.churchName.trim() + ', ' + insuredItem.churchCity).trim()) +\r\n ' ' +\r\n insuredItem.churchProvince;\r\n if (temp === ', ') {\r\n return 'NAME NOT ON FILE';\r\n }\r\n return temp;\r\n}\r\n//Core - formatting data\r\nexport function FormatPhoneNumber(phoneNumber) {\r\n if (phoneNumber === '') {\r\n return '';\r\n } else {\r\n //let temp = phoneNumber.padStart(10, \"0\");\r\n //This clears all non digit characters and returns only digits\r\n let temp = phoneNumber.replace(/\\D/g, ''); //\"(905) 640-2667\" => \"9056402667\"\r\n temp.padStart(10, '0');\r\n return '(' + temp.substr(0, 3) + ')' + ' ' + temp.substr(3, 3) + '-' + temp.slice(-4);\r\n }\r\n}\r\n//Custom - inforce\r\nexport function GetBeneficaryString(coverageItem, t) {\r\n let temp = '';\r\n\r\n if (coverageItem.beneficiaries.length > 0) {\r\n for (let insuredItem of coverageItem.beneficiaries) {\r\n temp =\r\n temp +\r\n fullName(insuredItem) +\r\n ', ' +\r\n insuredItem.beneficiaryRelationship +\r\n ' ' +\r\n formatAllocationPercent(insuredItem.beneficiaryPercent) +\r\n ' ';\r\n }\r\n\r\n if (temp !== '') {\r\n temp = temp.substr(0, temp.length - 1);\r\n }\r\n let beneficiary = coverageItem.beneficiaries[coverageItem.beneficiaries.length - 1];\r\n temp =\r\n temp +\r\n ' Class: ' +\r\n toProperCase(TextLookup_BeneficiaryCode(beneficiary.beneficiaryTypeCode, t));\r\n } else {\r\n return '';\r\n }\r\n return temp;\r\n}\r\n//Custom - inforce\r\nexport function TextLookup_BeneficiaryCode(beneficiaryTypeCode, t) {\r\n let valueID = '';\r\n switch (beneficiaryTypeCode.toUpperCase()) {\r\n case 'R':\r\n valueID = 'O';\r\n break;\r\n default:\r\n valueID = beneficiaryTypeCode.toUpperCase();\r\n }\r\n return TextLookup_tEdit('BTYPE', valueID, false, t);\r\n}\r\n\r\nexport function GetFullName(insuredItem) {\r\n return (insuredItem.firstName + ' ' + insuredItem.middleName).trim() + ' ' + insuredItem.lastName;\r\n}\r\n\r\nexport function GetFullNameWithSalutation(insuredItem) {\r\n //why is salutation null?\r\n return (insuredItem.salutation + ' ' + GetFullName(insuredItem)).trim();\r\n return GetFullName(insuredItem);\r\n}\r\n\r\nexport function fullName(insuredItem) {\r\n let salutation = '';\r\n let outName = '';\r\n\r\n if (insuredItem.partyType === PartyTypes.Person) {\r\n salutation = insuredItem.salutation.toUpperCase();\r\n if (\r\n salutation !== '' &&\r\n salutation !== 'MR' &&\r\n salutation !== 'MRS' &&\r\n salutation !== 'MISS' &&\r\n salutation !== 'MS'\r\n ) {\r\n outName =\r\n (\r\n (insuredItem.salutation + ' ' + insuredItem.firstName).trim() +\r\n ' ' +\r\n insuredItem.middleName\r\n ).trim() +\r\n ' ' +\r\n insuredItem.lastName;\r\n } else {\r\n outName =\r\n (insuredItem.firstName + ' ' + insuredItem.middleName).trim() + ' ' + insuredItem.lastName;\r\n }\r\n\r\n let deathDate = new Date(insuredItem.dateOfDeath);\r\n let blankDate = new Date(1900, 1, 1);\r\n\r\n if (deathDate > blankDate) {\r\n outName = outName + ' (Deceased)';\r\n }\r\n return outName;\r\n } else {\r\n return insuredItem.companyName;\r\n }\r\n}\r\n\r\n//Custom - inforce\r\nexport function isInPremiumOffset(inforcePolicy) {\r\n return inforcePolicy.billingTypeCode === BillingTypeCode.PREMIUMOFFSET;\r\n}\r\n\r\n//Custom - inforce\r\nexport function isNonExemptNew(inforcePolicy) {\r\n return (\r\n inforcePolicy.exemptStatus === ExemptStatus.NonExemptNew &&\r\n inforcePolicy.taxAccrualRule !== TaxAccrualRule.None\r\n );\r\n}\r\n\r\nexport function TranslatePaymentModeReport(item, formData, t) {\r\n switch (formData[item]) {\r\n case '012':\r\n return t('msg-Annual');\r\n case '06':\r\n return t('msg-SemiAnnual');\r\n case '03':\r\n return t('msg-Quarterly');\r\n case '01':\r\n return t('msg-Monthly');\r\n default:\r\n return t('msg-Monthly');\r\n }\r\n}\r\n\r\nexport function calculateAgeFromJan1(insured, currentDate) {\r\n //ToDo create this function\r\n return calcAge(insured.dateOfBirth, currentDate, -1);\r\n}\r\n\r\nfunction calcAge(birthdate, today, calcType) {\r\n //calcType -1 = age last, 0 = age nearest, 1 = age next\r\n let date1 = new Date(birthdate);\r\n let date2 = new Date(today);\r\n\r\n let Difference_In_Time = date2.getTime() - date1.getTime();\r\n\r\n // To calculate the no. of days between two dates\r\n let Difference_In_Days = Difference_In_Time / (1000 * 3600 * 24);\r\n if (Difference_In_Days < 0) {\r\n return 0;\r\n }\r\n\r\n let age = Difference_In_Days / 365;\r\n\r\n switch (calcType) {\r\n case -1: //age last\r\n return Math.trunc(age);\r\n case 0: //age nearest\r\n return Math.round(age);\r\n case 1: //age next\r\n return Math.trunc(age) + 1;\r\n default:\r\n //age last\r\n return Math.trunc(age);\r\n }\r\n}\r\n\r\nexport function calcAgeNearest(dtBirthDate, dtToday) {\r\n //Note that the date.getDate() function actually gets the day of the month (.getDay() gives the day of the week)\r\n let birthDate = new Date(dtBirthDate);\r\n let today = new Date(dtToday);\r\n let lastBirthDay = GetLastAnniversaryDate(birthDate, today);\r\n\r\n //complete years since birth date\r\n let intYears = dateDiffMS('Year', birthDate, today);\r\n if (\r\n today.getMonth() < birthDate.getMonth() ||\r\n (today.getMonth() == birthDate.getMonth() && today.getDate() < birthDate.getDate())\r\n ) {\r\n intYears = intYears - 1;\r\n }\r\n //Complete Months since last birthday\r\n let intMonths = dateDiffMS('Month', lastBirthDay, today);\r\n if (today.getDate() < lastBirthDay.getDate()) {\r\n intMonths = intMonths - 1;\r\n }\r\n\r\n //Days since last birthday plus months\r\n let intDays = dateDiffMS(\r\n 'Day',\r\n new Date(\r\n lastBirthDay.getFullYear(),\r\n lastBirthDay.getMonth() + intMonths,\r\n lastBirthDay.getDate()\r\n ),\r\n today\r\n );\r\n let intAge = intYears;\r\n if ((intMonths > 6) || (intMonths == 6 && intDays > 0)) {\r\n intAge = intAge + 1;\r\n }\r\n return intAge;\r\n}\r\n\r\nexport function GetLastAnniversaryDate(policyIssueDate, currentDate) {\r\n //Note that the date.getDate() function actually gets the day of the month (.getDay() gives the day of the week)\r\n let issueDate = new Date(policyIssueDate);\r\n let today = new Date(currentDate);\r\n //This function will return the date of the last anniversary\r\n\r\n if (issueDate.getMonth() < today.getMonth()) {\r\n //use current year\r\n return new Date(\r\n today.getFullYear(),\r\n issueDate.getMonth(),\r\n issueDate.getDate()\r\n );\r\n } else if (issueDate.getMonth() > today.getMonth()) {\r\n //use previous year\r\n return new Date(\r\n today.getFullYear() - 1,\r\n issueDate.getMonth(),\r\n issueDate.getDate()\r\n );\r\n } else {\r\n //month is the same\r\n if (issueDate.getDate() <= today.getDate()) {\r\n //'use the current year\r\n return new Date(\r\n today.getFullYear(),\r\n issueDate.getMonth(),\r\n issueDate.getDate()\r\n );\r\n } else {\r\n //use the previous year\r\n return new Date(\r\n today.getFullYear() - 1,\r\n issueDate.getMonth(),\r\n issueDate.getDate()\r\n );\r\n }\r\n }\r\n}\r\n\r\n//This function gets full months between two dates. The first date, d1, is the earliest of the two\r\nfunction monthDiff(d1, d2) {\r\n var months;\r\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\r\n months -= d1.getMonth();\r\n months += d2.getMonth();\r\n return months <= 0 ? 0 : months;\r\n}\r\n\r\nfunction dateDiffMS(interval, startingDate, endingDate) {\r\n //This function is meant to mimic the MicroSoft DateDiff which is expected in our age nearest calculation and matches the desktop calculation\r\n var yearDiff = endingDate.getFullYear() - startingDate.getFullYear();\r\n if (interval.toUpperCase() == 'YEAR') {\r\n return yearDiff;\r\n } else if (interval.toUpperCase() == 'MONTH') {\r\n var monthDiff = endingDate.getMonth() - startingDate.getMonth();\r\n monthDiff += yearDiff * 12;\r\n return monthDiff;\r\n } else {\r\n return dateDiff(interval, startingDate, endingDate);\r\n }\r\n}\r\n\r\nfunction dateDiff(interval, startingDate, endingDate) {\r\n //Note that the date.getDate() function actually gets the day of the month (.getDay() gives the day of the week)\r\n //Returns the difference between two dates.\r\n //Interval should be \"Year\", \"Month\", \"Day\". Will default to Day if interval is incorrect.\r\n //var startDate = new Date(new Date(startingDate).toISOString().substr(0, 10));\r\n var startDate = new Date(startingDate);\r\n if (!endingDate) {\r\n endingDate = new Date().toISOString().substr(0, 10); // need date in YYYY-MM-DD format\r\n }\r\n var endDate = new Date(endingDate);\r\n if (startDate > endDate) {\r\n var swap = startDate;\r\n startDate = endDate;\r\n endDate = swap;\r\n }\r\n var startYear = startDate.getFullYear();\r\n var february = (startYear % 4 === 0 && startYear % 100 !== 0) || startYear % 400 === 0 ? 29 : 28;\r\n var daysInMonth = [31, february, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\n\r\n var yearDiff = endDate.getFullYear() - startYear;\r\n var monthDiff = endDate.getMonth() - startDate.getMonth();\r\n if (monthDiff < 0) {\r\n yearDiff--;\r\n monthDiff += 12;\r\n }\r\n var dayDiff = endDate.getDate() - startDate.getDate();\r\n if (dayDiff < 0) {\r\n if (monthDiff > 0) {\r\n monthDiff--;\r\n } else {\r\n yearDiff--;\r\n monthDiff = 11;\r\n }\r\n dayDiff += daysInMonth[startDate.getMonth()];\r\n }\r\n\r\n if (interval.toUpperCase() == 'YEAR') {\r\n return yearDiff;\r\n } else if (interval.toUpperCase() == 'MONTH') {\r\n return monthDiff;\r\n } else {\r\n return dayDiff;\r\n }\r\n}\r\n\r\nexport function toTitleCase(str) {\r\n return str.replace(/\\w\\S*/g, function (txt) {\r\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\r\n });\r\n}\r\n\r\nexport function RoundUpNearestFive(x) {\r\n return Math.ceil(x / 5) * 5;\r\n}\r\n\r\nexport function RoundDownNearestFive(x) {\r\n //Same as RoundUpNearest5 then subtract 5\r\n return Math.ceil(x / 5) * 5 - 5;\r\n}","// import React, { useState, useEffect } from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {useTranslation} from 'react-i18next';\r\n// import translation from 'assets/translation.json';\r\n// import {useMemo, useCallback} from 'react';\r\n\r\ninterface ITransProps {\r\n t?: (key: string) => string;\r\n tInput?: (key: string) => string;\r\n tReport?: (key: string) => string;\r\n}\r\nexport const usePCTranslation = () => {\r\n const {t} = useTranslation();\r\n const {user} = useSelector((state) => ({\r\n user: state.auth.user,\r\n }));\r\n\r\n // const data = useMemo(() => JSON.parse(JSON.stringify(translation)), []);\r\n // const t = useCallback((key) => data[key], [data]);\r\n\r\n const tInput = (key: string, options: any) => {\r\n let value: string;\r\n if (user && user['inputLanguage'] === 'French') {\r\n value = t(`${key}-fr`, options);\r\n if (value === `${key}-fr`) {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n } else {\r\n value = t(`${key}-en`, options);\r\n if (value === `${key}-en`) {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n }\r\n };\r\n const tReport = (key: string, options: any) => {\r\n let value: string;\r\n if (user && user['reportLanguage'] === 'French') {\r\n value = t(`${key}-fr`, options);\r\n if (value === `${key}-fr`) {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n } else {\r\n value = t(`${key}-en`, options);\r\n if (value === `${key}-en`) {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n }\r\n };\r\n\r\n return {t: tInput, tInput, tReport};\r\n};\r\n\r\nexport default usePCTranslation;\r\n","import React, {Component, useEffect} from 'react';\r\nimport {withRouter} from 'react-router';\r\nimport {useLocation} from 'react-router-dom';\r\n\r\n// Scroll restoration based on https://reacttraining.com/react-router/web/guides/scroll-restoration.\r\n\r\n//ScrollToTop HoC implementation\r\nexport const withScrollToTop = withRouter(\r\n class ScrollToTopWithoutRouter extends Component {\r\n componentDidUpdate(prevProps) {\r\n if (this.props.location !== prevProps.location) {\r\n window.scrollTo(0, 0);\r\n }\r\n }\r\n\r\n render() {\r\n return null;\r\n }\r\n }\r\n);\r\n\r\n//ScrollToTop - Hook implementation\r\nexport const ScrollToTopController = ({condition}) => {\r\n // console.log(condition);\r\n // this assumes that current router state is accessed via hook\r\n // but it does not matter, pathname and search (or that ever) may come from props, context, etc.\r\n // const location = useLocation();\r\n\r\n // just run the effect on pathname and/or search change\r\n useEffect(() => {\r\n try {\r\n // trying to use new API - https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollTo\r\n window.scrollTo({\r\n top: 0,\r\n left: 0,\r\n // behavior: 'smooth',\r\n });\r\n } catch (error) {\r\n // just a fallback for older browsers\r\n window.scrollTo(0, 0);\r\n }\r\n }, [condition]);\r\n\r\n // renders nothing, since nothing is needed\r\n return null;\r\n};\r\n","\r\nexport const MAX_ARRAY = 120;\r\n\r\nexport const CoverageTypes = {\r\n NONE: 0,\r\n BASE: 1,\r\n RIDER: 2,\r\n BENEFIT: 3,\r\n PUA: 4,\r\n OYT: 5,\r\n ENHANCED: 6\r\n};\r\n\r\nexport const RiderTypes = {\r\n NONE: 0,\r\n ADB: 1,\r\n WAIVER: 2,\r\n AIB: 3,\r\n GPO: 4,\r\n CHILD: 5,\r\n PIB: 6,\r\n TERM: 7,\r\n UL: 8,\r\n OTHER: 9,\r\n DMB: 10\r\n};\r\n\r\nexport const CstatCode = {\r\n DEATH: \"D\",\r\n CALCPREMREFUND: \"1\"\r\n};\r\n\r\nexport const PolicyTypes = {\r\n None: 0,\r\n UL: 1,\r\n WholeLife: 2,\r\n LevelTerm: 3,\r\n TermWithCV: 4,\r\n DecreasingIncreasingTerm: 5,\r\n PaidUpLife: 6,\r\n Endowment: 7,\r\n ImmediateAnnuity: 8,\r\n RRIF: 9,\r\n LIF: 10,\r\n ESA_ISA: 11,\r\n Disability: 12,\r\n SegregatedFund: 13,\r\n SegregatedFundRRIF: 14,\r\n DeferredAnnuity: 15,\r\n Enhanced: 16,\r\n CriticalIllness: 17\r\n};\r\nexport const BillingMethodTypes = {\r\n Mail: 0,\r\n EFT: 1,\r\n BillError: 2\r\n};\r\nexport const DividendPayoutTypes = {\r\n None: 1,\r\n PUA: 2,\r\n DRP: 3,\r\n DOD: 4,\r\n Enhanced: 5,\r\n LRD: 6,\r\n PIC: 7,\r\n OYT: 8\r\n};\r\n\r\nexport const COITypes = {\r\n None: 0,\r\n LevelCurrent: 1,\r\n LevelGuaranteed: 2,\r\n YRT: 3,\r\n Increasing: 4,\r\n YRTToLevel: 5,\r\n IncreasingToLevel: 6\r\n};\r\n\r\nexport const DBOptionTypes = {\r\n None: 0,\r\n Level: 1,\r\n Indexed: 2,\r\n LevelPlusFund: 3\r\n};\r\n\r\nexport const PartyTypes = {\r\n Person: 1,\r\n Company: 2\r\n};\r\nexport const SpouseContributorTypes = {\r\n None: 0,\r\n Spouse: 1\r\n};\r\n\r\nexport const SolveInputType = {\r\n ColumnValue: 1,\r\n GlobalItemValue: 2,\r\n RateArray: 3,\r\n PolicyProperty: 4,\r\n CoverageProperty: 5,\r\n FundProperty: 6,\r\n InsuredProperty: 7\r\n}\r\n\r\nexport const SolveInputDirectionType = {\r\n Increase: 1,\r\n Decrease: 2\r\n}\r\n\r\nexport const SolveGuessMethodType = {\r\n FromInput: 1,\r\n MidPoint: 2,\r\n}\r\n\r\nexport const SolveTargetType = {\r\n CashValue: 1,\r\n ColumnValue: 2,\r\n GlobalItemValue: 3,\r\n}\r\n\r\nexport const SolveTargetTolerance = {\r\n Converge: 1,\r\n FirstCorrectAnswer: 2,\r\n}\r\n\r\nexport const SolveMethodType = {\r\n Secant: 1,\r\n Bisection: 2\r\n}\r\n\r\nexport const DepositTypes = {\r\n FlatAmount: 0,\r\n Array: 1,\r\n Minimum: 2,\r\n LevelMaximum: 3,\r\n YearlyMaximum: 4\r\n}\r\n\r\n\r\n//ToDo: This needs to be moved to a core constant file\r\nexport const FundTypes = {\r\n DIA: 1,\r\n GIA: 2,\r\n DRP: 3,\r\n PRM: 4,\r\n DOD: 5,\r\n SideFund: 6,\r\n Loan: 7,\r\n SegFund: 8\r\n}\r\n\r\nexport const ConstantValues = {\r\n DIVIDEND_ALTERNATESCALE: 75,\r\n ROWHIGHLIGHT_SPACING: 4\r\n};\r\n\r\nexport const BillingTypeCode = {\r\n MAIL: '1',\r\n PREMIUMOFFSET: 'D',\r\n EFT: '4',\r\n APL: '9'\r\n}\r\n\r\nexport const PremiumModeTypes = {\r\n //Months between payments\r\n Annual: 12,\r\n Monthly: 1,\r\n Quarterly: 3,\r\n SemiAnnual: 6\r\n}\r\n\r\nexport const ExemptStatus = {\r\n ExemptWithTesting: 1,\r\n ExemptWithoutTesting: 2,\r\n NonExempt: 3,\r\n Grandfathered: 4,\r\n ExemptWithoutTestingNew: 5,\r\n NonExemptNew: 6\r\n}\r\n\r\nexport const TaxAccrualRule = {\r\n None: 1,\r\n Trienniel: 2,\r\n CalendarYear: 3,\r\n PolicyYear: 4\r\n}\r\n\r\nexport const BILLINGSTATUS_BILLING = 'B';\r\nexport const DIVIDEND_ALTERNATESCALE = 85;\r\nexport const ALTERNATE_COI_INCREASE = 1.25;\r\nexport const CLIENT_INTRATE_MAX_ADDITION = 3;\r\n\r\n\r\nexport const Alternate_IntRate = {\r\n Reduction: 1,\r\n StartYear: 2,\r\n Reduction_UL: 1,\r\n StartYear_UL: 4\r\n}\r\n\r\nexport const PayoutInsuredTypes = {\r\n None: 0,\r\n Annuitant: 1,\r\n Spouse: 2\r\n}\r\n\r\nexport const PayoutTypes = {\r\n None: 0,\r\n Minimum: 1,\r\n Maximum: 2,\r\n FlatAmount: 3\r\n}\r\n\r\nexport const AssigneeTypes = {\r\n None: 0,\r\n Absolute: 1,\r\n Collateral: 2\r\n}\r\n\r\nexport const PolicyLookupResultTypes = {\r\n PolicyFound: 1,\r\n PolicyNotFound: 2,\r\n PolicyNotQuotable: 3,\r\n PolicyPremiumRestrict: 4,\r\n PolicyTerminated: 5,\r\n PolicyPaidUp: 6,\r\n PolicyRejected: 7,\r\n PolicyETI: 8,\r\n PolicyNoFuturePremiums: 9,\r\n PolicyNotLoadable: 10\r\n}\r\n\r\n//The first 5 columns of the calculation engine are hard-coded\r\nexport const ReportColumns = {\r\n Year: 1,\r\n CalendarYear: 2,\r\n Age: 3,\r\n FilterCol: 4,\r\n IsCalc: 5\r\n}\r\n\r\nexport const SOSBA_MONTHS_TO_MATURITY = 6;\r\n\r\n\r\n","import React, {Component} from 'react';\r\nimport ReactDOM from 'react-dom';\r\n\r\nconst modalRoot = document.getElementById('modal-root');\r\n\r\nconst Modal = ({onClick, children, propStyle}) => {\r\n return ReactDOM.createPortal(\r\n
\r\n {children}\r\n
,\r\n document.querySelector('#modal-root')\r\n );\r\n};\r\n// class Modal extends Component {\r\n// constructor(props){\r\n// super(props);\r\n// this.el = document.createElement('div');\r\n// }\r\n// componentDidMount(){\r\n// modalRoot.appendChild(this.el);\r\n// }\r\n// componentWillUnmount(){\r\n// modalRoot.removeChild(this.el);\r\n// }\r\n// render() {\r\n// return ReactDOM.createPortal(this.props.children, this.el)\r\n// }\r\n// }\r\n\r\nexport default Modal;\r\n","import React from 'react';\r\n\r\nconst ModalTitle = ({title, fontSize, t}) => {\r\n return

{t(title)}

;\r\n};\r\n\r\nexport default ModalTitle;\r\n","import React from 'react';\r\nimport {Button} from 'core/controls';\r\n\r\nconst QuestionModalFooter = ({isDisable, controlGetFocus, controlLostFocus, controlClick, setElement, onSelectOK, onSelectCancel, btnCancel, btnOK, isInfo}) => {\r\n return (\r\n
\r\n {!isInfo && (\r\n {\r\n controlClick(event, name, value);\r\n onSelectCancel();\r\n }}\r\n lostfocusCallback={controlLostFocus}\r\n name={btnCancel}\r\n refItem={setElement}\r\n propStyle={{\r\n label: 'buttonlabel',\r\n control: `buttoncontrol bgPrimaryColor borderRadiusAll paddingMedWide marginMed buttonOutline`,\r\n }}\r\n />\r\n )}\r\n {\r\n controlClick(event, name, value);\r\n onSelectOK();\r\n }}\r\n lostfocusCallback={controlLostFocus}\r\n name={btnOK}\r\n refItem={setElement}\r\n propStyle={{\r\n label: 'buttonlabel',\r\n control: `buttoncontrol bgPrimaryColor borderRadiusAll paddingMedWide marginMed`,\r\n }}\r\n disableButton={isDisable}\r\n />\r\n
\r\n );\r\n};\r\nQuestionModalFooter.defaultProps = {\r\n isDisable: false,\r\n};\r\n\r\nexport default QuestionModalFooter;\r\n","import React, {Fragment, useEffect} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {checkLogo, warningLogo, flagLogo} from 'assets';\r\n\r\nconst alertLogo = {\r\n Success: checkLogo,\r\n Error: warningLogo,\r\n Secondary: flagLogo,\r\n};\r\n\r\nconst Alert = ({name, styling}) => {\r\n const {alert} = useSelector((state) => ({\r\n alert: state.alert[name] || null,\r\n }));\r\n return (\r\n \r\n {alert && (\r\n
\r\n \r\n {alert.msg}\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default Alert;\r\n","import React from 'react';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {companyLogo} from 'assets';\r\nimport {Label} from 'core/controls';\r\n\r\nexport const Logo = ({name, companyName, propStyle}) => {\r\n return (\r\n
\r\n Header\r\n
\r\n );\r\n};\r\nexport default Logo;\r\n","import * as customEvents from 'custom/common/utils/customEvents';\r\nimport {sendTrackingInfo} from 'core/api/trackingWebService';\r\nimport {INPUTTYPES} from 'core/constants/uiConstants';\r\nfunction GlobalRunRecalls(name, user, controlItems, formData, elementItems, interfaceSetupItems, allSetupItems, updateFormData, updateControlItems, inforceData) {\r\n if (controlItems && controlItems[name] && controlItems[name].recallItems != null /*&& !controlItems[name].isError*/) {\r\n // if (controlItems[name] && controlItems[name].recallItems != null) {\r\n controlItems[name].recallItems.forEach((name) => {\r\n customEvents.GlobalCustomBusinessRules(name, user, controlItems, formData, elementItems, interfaceSetupItems, allSetupItems, updateFormData, updateControlItems, inforceData, false);\r\n });\r\n }\r\n}\r\n\r\nexport function GlobalGetFocus(name, controlItems, formData, elementItems, interfaceSetupItems, updateFormData, updateControlItems) {\r\n formData['CurrentField'] = name;\r\n updateFormData('CurrentField', name);\r\n}\r\n\r\nexport function GlobalLostFocus(name, user, controlItems, formData, elementItems, interfaceSetupItems, updateFormData, updateControlItems, inforceData) {\r\n /**\r\n * When we switch between fields, sometimes new field Get focus call happens before Lost focus of old field, thereby making CurrentField to null.\r\n */\r\n if (formData['CurrentField'] === name) {\r\n formData['CurrentField'] = '';\r\n updateFormData('CurrentField', '');\r\n }\r\n\r\n customEvents.GlobalCustomLostFocus(name, user, controlItems, formData, elementItems, interfaceSetupItems, updateFormData, updateControlItems, inforceData);\r\n //Add back when user and inforceData is added into GlobalCustomLostFocus\r\n //customEvents.GlobalCustomBusinessRules(\r\n // name,\r\n // user,\r\n // controlItems,\r\n // formData,\r\n // elementItems,\r\n // interfaceSetupItems,\r\n // updateFormData,\r\n // updateControlItems,\r\n // inforceData\r\n //);\r\n //GlobalRunRecalls(name, controlItems, formData, elementItems, updateFormData); // In future it might be required\r\n}\r\n\r\nconst BUTTON_CLICK = 'BUTTON_CLICK';\r\nconst TAB_CLICK = 'TAB_CLICK';\r\nconst CONTROL_CHANGE = 'CONTROL_CHANGE';\r\nconst RUN_QUERY = 'RUN_QUERY';\r\nconst PAGE_LOAD = 'PAGE_LOAD';\r\n\r\nconst getEventType = (controlItems, name) => {\r\n let eventType = '';\r\n switch (controlItems[name].fieldType) {\r\n case INPUTTYPES.INPUT_BUTTON:\r\n eventType = BUTTON_CLICK;\r\n break;\r\n case INPUTTYPES.INPUT_TAB:\r\n eventType = TAB_CLICK;\r\n break;\r\n case INPUTTYPES.INPUT_UPPER:\r\n case INPUTTYPES.INPUT_REAL:\r\n case INPUTTYPES.INPUT_LABEL:\r\n case INPUTTYPES.INPUT_COMBO:\r\n case INPUTTYPES.INPUT_CHECK:\r\n case INPUTTYPES.INPUT_INTEGER:\r\n eventType = CONTROL_CHANGE;\r\n break;\r\n case INPUTTYPES.INPUT_PAGE:\r\n eventType = PAGE_LOAD;\r\n break;\r\n default:\r\n break;\r\n }\r\n return eventType;\r\n};\r\nfunction GlobalBuildTrackingData(name, user, controlItems, formData, elementItems, interfaceSetupItems, updateFormData, updateControlItems, inforceData) {\r\n let trackingData = {};\r\n\r\n //Remove the milliseconds from the timestamp\r\n let timestamp = Math.trunc(Date.now() / 1000);\r\n let formName = formData['formName'];\r\n let eventType = getEventType(controlItems, name);\r\n\r\n const {trackingUserName, username, agentID} = user;\r\n trackingData.header = {\r\n username: trackingUserName,\r\n loginUserName: username,\r\n eventType,\r\n formName,\r\n name,\r\n agentID,\r\n timestamp,\r\n };\r\n let customData = customEvents.GlobalCustomBuildTrackingData(name, controlItems, formData, elementItems, interfaceSetupItems, updateFormData, inforceData);\r\n if (!customData) {\r\n trackingData.detail = {...formData};\r\n } else {\r\n trackingData.detail = customData;\r\n }\r\n\r\n return trackingData;\r\n}\r\nfunction GlobalTrackingEvents(name, user, controlItems, formData, elementItems, interfaceSetupItems, updateFormData, updateControlItems, inforceData) {\r\n if (controlItems && controlItems[name] && controlItems[name].isTracking) {\r\n let trackingData = {};\r\n trackingData = GlobalBuildTrackingData(name, user, controlItems, formData, elementItems, interfaceSetupItems, updateFormData, updateControlItems, inforceData);\r\n sendTrackingInfo(trackingData);\r\n }\r\n}\r\nexport function GlobalChange(name, user, controlItems, formData, elementItems, interfaceSetupItems, allSetupItems, updateFormData, updateControlItems, inforceData) {\r\n GlobalTrackingEvents(name, user, controlItems, formData, elementItems, interfaceSetupItems, updateFormData, updateControlItems, inforceData);\r\n customEvents.GlobalCustomBusinessRules(name, user, controlItems, formData, elementItems, interfaceSetupItems, allSetupItems, updateFormData, updateControlItems, inforceData, false);\r\n GlobalRunRecalls(name, user, controlItems, formData, elementItems, interfaceSetupItems, allSetupItems, updateFormData, updateControlItems, inforceData);\r\n}\r\n\r\nexport function GlobalClick(name, user, controlItems, formData, elementItems, interfaceSetupItems, allSetupItems, updateFormData, updateControlItems, inforceData) {\r\n GlobalTrackingEvents(name, user, controlItems, formData, elementItems, interfaceSetupItems, updateFormData, updateControlItems, inforceData);\r\n customEvents.GlobalCustomClickBusinessRules(name, user, controlItems, formData, elementItems, interfaceSetupItems, allSetupItems, updateFormData, updateControlItems, inforceData);\r\n}\r\n","import React from 'react';\r\nimport * as globalEvents from 'core/utils/globalEvents';\r\nimport * as customEvents from 'custom/common/utils/customEvents';\r\n\r\nexport const withCoreEvents = (WrappedComponent) => {\r\n class ContainerComponent extends React.Component {\r\n state = {\r\n isAppLoading: false,\r\n isAppChanging: false,\r\n };\r\n appLoad = async (\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n ) => {\r\n this.setState({isAppLoading: true});\r\n await this.appRunAllBusinessRules(\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n );\r\n this.setState({isAppLoading: false});\r\n };\r\n appGetFocus = (\r\n event,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n updateFormData,\r\n updateControlItems\r\n ) => {\r\n globalEvents.GlobalGetFocus(\r\n event.target.name,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n updateFormData,\r\n updateControlItems\r\n );\r\n };\r\n appLostFocus = (\r\n event,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n updateFormData,\r\n updateControlItems\r\n ) => {\r\n globalEvents.GlobalLostFocus(\r\n event.target.name,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n updateFormData,\r\n updateControlItems\r\n );\r\n };\r\n appChange = async (\r\n event,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n ) => {\r\n this.setState({isAppLoading: true});\r\n await globalEvents.GlobalChange(\r\n event.target.name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n );\r\n this.setState({isAppLoading: false});\r\n };\r\n appClick = async (\r\n name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n ) => {\r\n this.setState({isAppLoading: true});\r\n await globalEvents.GlobalClick(\r\n name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n );\r\n this.setState({isAppLoading: false});\r\n };\r\n appRunAllBusinessRules = (\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n ) => {\r\n Object.keys(formData).forEach((item) => {\r\n customEvents.GlobalCustomBusinessRules(\r\n item,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData,\r\n true\r\n );\r\n });\r\n };\r\n \r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n }\r\n return ContainerComponent;\r\n};\r\nexport default withCoreEvents;\r\n","import axios from 'api';\r\nimport { fetchProquoteSettings } from './generalServices';\r\n\r\nexport const sendTrackingInfo = async (trackingData) => {\r\n trackingData.detail.txtProQuotePageNumber = `${sessionStorage.getItem('globalPageNumber')}`;\r\n try {\r\n const security = await fetchProquoteSettings();\r\n const body = {\r\n security,\r\n trackingObject: trackingData\r\n };\r\n\r\n //let res = await axios.post('/tracking/sendTrackingInfo', trackingData);\r\n let res = await axios.post('/tracking/sendTrackingInfoProQuote', body);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nexport const getTrackingInfo = async (userName) => {\r\n try {\r\n let res = await axios.get(`/tracking/getTrackingInfo/${userName}`);\r\n return res.data;\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n\r\nexport const getAllTrackingInfo = async () => {\r\n try {\r\n let res = await axios.get('/tracking/getAllTrackingInfo');\r\n return res.data;\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n","import { ActionTypes } from \"custom/common/redux/Types\";\r\n\r\nconst getFirstYearPremium = (state = {}, action) => {\r\n const { type, payload } = action;\r\n switch (type) {\r\n case ActionTypes.GET_FIRSTYEAR_PREMIUM:\r\n // let tempArr = payload[\"dblTableData_Main\"].concat(payload[\"dblTableData_Main\"]);\r\n // dblTableDataMerge(payload[\"dblTableData_Main\"], tempArr);\r\n // columnItemsMerge(payload[\"columnItems\"], payload[\"columnItems\"], \"ALT\");\r\n return {\r\n ...state,\r\n ...payload\r\n };\r\n case ActionTypes.REMOVE_FIRSTYEAR_PREMIUM:\r\n return {};\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n// const dblTableDataMerge = (arr1, arr2) => {\r\n// let mergedArray = [];\r\n// if (arr1.length > arr2.length) {\r\n// mergedArray = merge(arr1, arr2);\r\n// } else {\r\n// mergedArray = merge(arr2, arr1);\r\n// }\r\n// return mergedArray;\r\n// };\r\n\r\n// function merge(arr1, arr2) {\r\n// let new2dArr = [];\r\n// let temp1dArr = [];\r\n// let temp0Arr = Array(arr2[0].length).fill(0);\r\n\r\n// for (let idx = 0; idx < arr1.length; idx++) {\r\n// temp1dArr = [...arr1[idx]];\r\n// if (idx < arr2.length) {\r\n// temp1dArr=temp1dArr.concat(arr2[idx]);\r\n// } else {\r\n// temp1dArr=temp1dArr.concat(temp0Arr);\r\n// }\r\n// new2dArr.push(temp1dArr);\r\n// }\r\n// return new2dArr;\r\n// }\r\n\r\nexport {getFirstYearPremium as firstYearPremium};","import axios from 'api';\r\nimport {ActionTypes} from '../types';\r\nimport {setAlert} from './alertActions';\r\nimport {setInterceptor} from 'core/utils/setAuthConfig';\r\nimport {loadControlItems} from './setupActions';\r\nimport {clearCustomStore} from 'custom/common/redux/actions';\r\nimport { sendTrackingInfo } from 'core/api/trackingWebService';\r\n\r\n//LoginTracking\r\nconst trackLoginUser = async (user) => {\r\n const {trackingUserName, username} = user;\r\n sessionStorage.setItem('globalPageNumber', 0);\r\n const trackingData = {\r\n detail: {\r\n formName: 'ProQuote',\r\n CurrentField: 'btnLogin',\r\n txtProQuotePageNumber: `0`\r\n },\r\n header: {\r\n agentID: '',\r\n eventType: 'PQ_START',\r\n formName: 'ProQuote',\r\n name: 'ProQuoteStart',\r\n timestamp: Math.trunc(Date.now() / 1000),\r\n username: trackingUserName,\r\n loginUserName: username\r\n },\r\n };\r\n await sendTrackingInfo(trackingData);\r\n};\r\n\r\n// Login User\r\nlet cancelToken;\r\nexport const login = (username, password) => async (dispatch, getState) => {\r\n if (typeof cancelToken != typeof undefined) {\r\n cancelToken.cancel('Operation canceled due to new request.');\r\n }\r\n cancelToken = axios.CancelToken.source();\r\n var generateTrackingUserName = true;\r\n const body = { username, password, generateTrackingUserName};\r\n try {\r\n const {data} = await axios.post('/users/authenticateProQuote', body, {cancelToken: cancelToken.token});\r\n console.log('Auth tokens: ', data);\r\n data.user.trackingUserName = data.trackingUserName; //In case the back-end is not doing this for us\r\n\r\n sessionStorage.setItem('quote-rt', JSON.stringify(data));\r\n // setAuthToken(data.jwt);\r\n setInterceptor();\r\n dispatch({type: ActionTypes.AUTH_SUCCESS, payload: data});\r\n \r\n dispatch({\r\n type: ActionTypes.LOGIN_SUCCESS,\r\n payload: data.user,\r\n });\r\n trackLoginUser(data.user);\r\n if (data['fontSize'] === 'Large') {\r\n document.body.classList.add('altFont');\r\n } else if (data['data'] === 'Small') {\r\n document.body.classList.remove('altFont');\r\n }\r\n if (!getState().setupItems.controlItems) {\r\n dispatch(loadControlItems());\r\n }\r\n \r\n } catch (error) {\r\n dispatch({type: ActionTypes.AUTH_FAIL});\r\n if (error && error.response) {\r\n dispatch(setAlert(error.response.data['message'], 'Error', 'login'));\r\n }\r\n console.log(error);\r\n }\r\n};\r\n\r\n//Update user profile field\r\nexport const updateUserProfileField = (fieldName, value) => async (dispatch, getState) => {\r\n let user = {...getState().auth.user};\r\n const isAuthenticated = getState().auth.isAuthenticated;\r\n\r\n if (isAuthenticated) {\r\n user[fieldName] = value;\r\n try {\r\n const res = await axios.post('/users/update', user);\r\n dispatch({\r\n type: ActionTypes.UPDATE_PROFILE,\r\n payload: res.data,\r\n });\r\n } catch (error) {\r\n if (error && error.response) {\r\n console.log(error.response.data);\r\n }\r\n }\r\n }\r\n};\r\n\r\n//Update User Profile\r\nexport const updateUserProfile = (formData, t) => async (dispatch, getState) => {\r\n let user = {...getState().auth.user};\r\n const isAuthenticated = getState().auth.isAuthenticated;\r\n\r\n if (isAuthenticated) {\r\n user['profileName'] = formData['txtUserName'];\r\n user['emailAddress'] = formData['txtEmailAddress'];\r\n user['phoneNumberPrimary'] = formData['txtPrimaryPhone'];\r\n user['phoneNumberSecondary'] = formData['txtSecondaryPhone'];\r\n user['faxNumber'] = formData['txtFaxNumber'];\r\n user['isMobilePrimary'] = formData['chkPrimaryPhone'];\r\n user['isMobileSecondary'] = formData['chkSecondaryPhone'];\r\n user['inputLanguage'] = formData['rdoInputLanguage'];\r\n user['reportLanguage'] = formData['rdoReportLanguage'];\r\n user['fontSize'] = formData['rdoFontSize'];\r\n user['defaultApplication'] = formData['rdoDefaultApp'];\r\n user['formData'] = {};\r\n\r\n try {\r\n const res = await axios.post('/users/update', user);\r\n dispatch({\r\n type: ActionTypes.UPDATE_PROFILE,\r\n payload: res.data,\r\n });\r\n dispatch(setAlert(t('msg-InfoUpdatedSaved'), 'Success', 'updateProfile'));\r\n } catch (error) {\r\n dispatch(setAlert(error.response.data['message'], 'Error', 'updateProfile', 5000));\r\n console.log(error.response.data);\r\n // dispatch({type: ActionTypes.LOGIN_FAIL});\r\n }\r\n }\r\n};\r\n\r\n//Api for only Admin user\r\nexport const getAllUsers = (updatedUser) => async (dispatch, getState) => {\r\n let res;\r\n try {\r\n res = await axios.get('/users');\r\n console.log(res.data);\r\n dispatch({type: ActionTypes.ALL_USERS, payload: res.data});\r\n } catch (error) {\r\n if (error.response) {\r\n console.log(error.responderEnd);\r\n }\r\n }\r\n\r\n if (updatedUser) {\r\n const currentUser = getState().auth.user;\r\n if (currentUser.username === updatedUser.username) {\r\n updatedUser.formData = {...currentUser.formData};\r\n updatedUser.system = {...currentUser.system};\r\n dispatch({\r\n type: ActionTypes.UPDATE_PROFILE,\r\n payload: updatedUser,\r\n });\r\n }\r\n }\r\n};\r\n\r\n// Logout / Clear Profile\r\nexport const logout = (callApi = true) => async (dispatch) => {\r\n let token = JSON.parse(sessionStorage.getItem('quote-rt'));\r\n\r\n dispatch({type: ActionTypes.REMOVE_ALERT, name: 'updateProfile'});\r\n dispatch({type: ActionTypes.LOGOUT});\r\n dispatch({type: ActionTypes.CLEAR_PROFILE});\r\n dispatch({type: ActionTypes.CLEAR_FORMDATA, payload: {}});\r\n dispatch({type: ActionTypes.DATA_REMOVE});\r\n dispatch(clearCustomStore());\r\n if (callApi && token) {\r\n try {\r\n await axios.post('/users/logout', token);\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n }\r\n};\r\n\r\n// Session Timeout\r\nexport const sessionTimeout = () => async (dispatch) => {\r\n let token = JSON.parse(sessionStorage.getItem('quote-rt'));\r\n console.log('sessionTimeout');\r\n try {\r\n if (token) {\r\n await axios.post('/users/logout', token);\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n // dispatch({type: ActionTypes.DATA_REMOVE});\r\n dispatch({type: ActionTypes.SESSION_TIMEOUT});\r\n};\r\n","import {ActionTypes} from '../types';\r\n\r\nexport const setAlert = (msg, alertType, name, timeout = 5000) => (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.SET_ALERT,\r\n name,\r\n payload: {msg, alertType},\r\n });\r\n\r\n setTimeout(() => dispatch({type: ActionTypes.REMOVE_ALERT, name}), timeout);\r\n};\r\n\r\nexport const removeAlert = (name) => {\r\n return {\r\n type: ActionTypes.REMOVE_ALERT,\r\n name,\r\n };\r\n};\r\n","import axios from 'api';\r\nimport {dataStore} from 'core/redux/store';\r\nimport {logout} from 'core/redux/actions';\r\n\r\nexport const setAuthToken = () => {\r\n const refreshToken = JSON.parse(sessionStorage.getItem('quote-rt'));\r\n if (refreshToken) {\r\n axios.defaults.headers['Authorization'] = `Bearer ${refreshToken.jwt}`;\r\n } else {\r\n delete axios.defaults.headers['Authorization'];\r\n }\r\n axios.defaults.headers['Content-Type'] = 'application/json';\r\n};\r\n\r\n// for multiple requests\r\nexport const setInterceptor = () => {\r\n setAuthToken();\r\n let isRefreshing = false;\r\n let failedQueue = [];\r\n const processQueue = (err, token = null) => {\r\n failedQueue.forEach((promise) => {\r\n if (!err) {\r\n promise.resolve(token);\r\n } else {\r\n promise.reject(err);\r\n // dataStore.dispatch(logout());\r\n }\r\n });\r\n failedQueue = [];\r\n };\r\n\r\n axios.interceptors.response.use(\r\n (response) => response,\r\n (error) => {\r\n const originalRequest = error.config;\r\n if (error.response && error.response.status === 401 && !originalRequest._retry) {\r\n if (isRefreshing) {\r\n return new Promise((resolve, reject) => {\r\n failedQueue.push({resolve, reject});\r\n })\r\n .then((token) => {\r\n originalRequest.headers['Authorization'] = 'Bearer ' + token;\r\n return axios(originalRequest);\r\n })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n }\r\n\r\n originalRequest._retry = true;\r\n isRefreshing = true;\r\n\r\n const refreshToken = JSON.parse(sessionStorage.getItem('quote-rt'));\r\n return new Promise((resolve, reject) => {\r\n axios\r\n .post('/users/refresh', refreshToken)\r\n .then(({data}) => {\r\n sessionStorage.setItem('quote-rt', JSON.stringify(data));\r\n setAuthToken();\r\n originalRequest.headers['Authorization'] = 'Bearer ' + data.jwt;\r\n //Login route uses refresh token as body object. So body object needs to be updated for new refresh token\r\n if (originalRequest.url === '/users/login') {\r\n originalRequest.data = JSON.stringify(data);\r\n }\r\n\r\n processQueue(null, data.jwt);\r\n resolve(axios(originalRequest));\r\n })\r\n .catch((err) => {\r\n processQueue(err, null);\r\n dataStore.dispatch(logout());\r\n // reject(err);\r\n })\r\n .finally(() => {\r\n isRefreshing = false;\r\n });\r\n });\r\n }\r\n return Promise.reject(error);\r\n }\r\n );\r\n};\r\n\r\n//For single request\r\nexport const setInterceptor1 = () => {\r\n setAuthToken();\r\n\r\n axios.interceptors.response.use(\r\n (response) => response,\r\n (error) => {\r\n const originalRequest = error.config;\r\n console.log(error, error.config, error.response);\r\n if (error.response.status === 401 && !originalRequest._retry) {\r\n originalRequest._retry = true;\r\n const refreshToken = JSON.parse(sessionStorage.getItem('quote-rt'));\r\n return axios\r\n .post('/users/refresh', refreshToken)\r\n .then(({data}) => {\r\n sessionStorage.setItem('quote-rt', JSON.stringify(data));\r\n setAuthToken();\r\n originalRequest.headers['Authorization'] = 'Bearer ' + data.jwt;\r\n\r\n //Login route uses refresh token as body object. So body object needs to be updated for new refresh token\r\n if (originalRequest.url === '/users/login') {\r\n originalRequest.data = JSON.stringify(data);\r\n }\r\n return axios(originalRequest);\r\n })\r\n .catch((error) => {\r\n dataStore.dispatch(logout());\r\n });\r\n }\r\n return Promise.reject(error);\r\n }\r\n );\r\n};\r\n","import axios from 'api';\r\nimport { fetchProquoteSettings } from 'core/api/generalServices';\r\nimport _ from 'lodash';\r\nimport {ActionTypes} from '../types';\r\nimport {setAlert} from './alertActions';\r\n\r\n\r\nexport const loadControlItems = () => async (dispatch) => {\r\n dispatch({type: ActionTypes.DATA_LOADING});\r\n try {\r\n const proquoteSettings = await fetchProquoteSettings();\r\n\r\n const response1 = await axios.post('/api/GetControlItemsByFormProQuote', {formName: 'proquote', security: proquoteSettings});\r\n\r\n const response2 = await axios.post('/api/GetControlItemsByFormProQuote', {formName: 'NewBusiness', security: proquoteSettings});\r\n\r\n if (\r\n response1.data &&\r\n response2.data &&\r\n Object.keys(response1.data).length > 0 &&\r\n Object.keys(response2.data).length > 0\r\n ) {\r\n const data = _.merge(response1.data, response2.data);\r\n dispatch({\r\n type: ActionTypes.CONTROLITEMS_LOAD,\r\n payload: data,\r\n });\r\n } else {\r\n dispatch(loadDataFail());\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n dispatch(loadDataFail());\r\n }\r\n};\r\n\r\nexport const loadInterfaceSetupItems = (id = 0) => async (dispatch, getState) => {\r\n const security = await fetchProquoteSettings();\r\n dispatch({type: ActionTypes.DATA_LOADING});\r\n let res;\r\n try {\r\n if (id === 0) {\r\n res = await axios.post(`/api/getAllInterfaceSetupItemsProQuote`, security);\r\n dispatch({\r\n type: ActionTypes.INTERFACESETUPITEMS_LOAD,\r\n payload: res.data,\r\n });\r\n } else if (getState().setupItems && getState().setupItems.interfaceSetupArray) {\r\n let interfaceItem = getState().setupItems.interfaceSetupArray.find(item => item.prodID === id);\r\n\r\n dispatch({\r\n type: ActionTypes.INTERFACESETUPITEMS_UPDATE,\r\n payload: interfaceItem,\r\n });\r\n\r\n res = await axios.post(`/api/allSetupsProQuote`, {id, security});\r\n dispatch({\r\n type: ActionTypes.ALLSETUPS_LOAD,\r\n payload: res.data,\r\n });\r\n } else {\r\n dispatch(loadDataFail());\r\n }\r\n } catch (error) {\r\n console.log(error);\r\n dispatch(loadDataFail());\r\n }\r\n};\r\n\r\nexport const loadDataFail = () => (dispatch) => {\r\n dispatch({type: ActionTypes.DATA_REMOVE});\r\n dispatch({type: ActionTypes.AUTH_ERROR});\r\n};\r\n\r\nexport const updateControlItems = (name, parameter, value) => {\r\n return {\r\n type: ActionTypes.UPDATE_CONTROLITEMS,\r\n payload: {\r\n name,\r\n parameter,\r\n value,\r\n },\r\n };\r\n};\r\n\r\nexport const updateControlItemsDB = (controlItems) => async (dispatch) => {\r\n try {\r\n const res = await axios.post('/api/updateControlItems', controlItems);\r\n dispatch(loadControlItems());\r\n dispatch(setAlert('Control is successfully saved', 'Success', 'controlItem'));\r\n } catch (error) {\r\n console.log(error);\r\n dispatch(\r\n setAlert('An error occurred while saving. Please try again!!!', 'Error', 'controlItem')\r\n );\r\n }\r\n};\r\n\r\nexport const deleteControlItemDB = (controls) => async (dispatch) => {\r\n try {\r\n const res = await axios.post('/api/deleteControlItems', controls);\r\n dispatch(loadControlItems());\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n","import {ActionTypes} from '../Types';\r\n\r\nexport const createGlobalVariableArray = (key, value) => {\r\n return {\r\n type: ActionTypes.CREATE_GLOBAL_ARRAY,\r\n payload: {key, value},\r\n };\r\n};\r\n\r\n//This is hook to the core implementation from where it is called for clearing redux on logout\r\nexport const clearCustomStore = () => (dispatch) => {\r\n dispatch({type: ActionTypes.INFORCE_REMOVE});\r\n dispatch({type: ActionTypes.CLEAR_ALPHALOOKUP});\r\n dispatch({type: ActionTypes.CLEAR_DATAREPORTS});\r\n dispatch({type: ActionTypes.TREE_REMOVE});\r\n dispatch({type: ActionTypes.REMOVE_FIRSTYEAR_PREMIUM});\r\n};\r\n","import {ActionTypes} from '../types';\r\n\r\nexport const setStoreFormData = (formData, dataType, useSessionStorage = true) => {\r\n // console.log(formData);\r\n let initialFormData = formData;\r\n\r\n //Session store will\r\n if (sessionStorage.getItem(dataType) && useSessionStorage) {\r\n initialFormData = JSON.parse(sessionStorage.getItem(dataType));\r\n\r\n //Custom code for Date components. Either, will move state to Component level state or handle it differently.\r\n Object.keys(initialFormData).forEach((item) => {\r\n // controlItems[item].fieldType === 'input_Date';\r\n if (item.startsWith('dt')) {\r\n if (initialFormData[item] === '') {\r\n initialFormData[item] = new Date();\r\n } else {\r\n initialFormData[item] = new Date(initialFormData[item]);\r\n }\r\n }\r\n });\r\n }\r\n return {\r\n type: ActionTypes.SET_FORMDATA,\r\n payload: {initialFormData, dataType},\r\n };\r\n};\r\n\r\nexport const updateStoreFormData = (name, value, dataType) => {\r\n return {\r\n type: ActionTypes.UPDATE_FORMDATA,\r\n payload: {name, value, dataType},\r\n };\r\n};\r\n\r\nexport const clearStoreFormData = (dataType, formData /*Initializing with default values */) => {\r\n return {\r\n type: ActionTypes.CLEAR_FORMDATA,\r\n payload: {dataType, formData},\r\n };\r\n};\r\n","// export const DataTypes = {\r\n// CONTROLITEMS: 'controlItems',\r\n// INSURANCEDATA: 'insuranceData',\r\n// INSURANCEDATAFULL: 'insuranceDataFull',\r\n// PRODUCTSETUPITEMS: 'productSetupItems',\r\n// INTERFACESETUPITEMS: 'interfaceSetupItems',\r\n// };\r\n\r\nexport const ActionTypes = {\r\n HIDE_DEV_ROUTE: 'HIDE_DEV_ROUTE',\r\n SET_ROUTES: 'SET_ROUTES',\r\n HIDE_TRACKING: 'HIDE_TRACKING',\r\n HIDE_USERS: 'HIDE_USERS',\r\n ALL_ROLES: 'ALL_ROLES',\r\n GET_ROLE_BY_NAME: 'GET_ROLE_BY_NAME',\r\n UPDATE_ROLE: 'UPDATE_ROLE',\r\n DELETE_ROLE: 'DELETE_ROLE',\r\n GET_FIRSTYEAR_PREMIUM: 'get_first_year_premium',\r\n REMOVE_FIRSTYEAR_PREMIUM: 'remove_first_year_premium',\r\n INSURANCEDATA_LOAD: 'insurancedata_load',\r\n CREATE_ILLUSTRATION: 'CREATE_ILLUSTRATION',\r\n GET_ILLUSTRATION_HEADERS: 'GET_ILLUSTRATION_HEADERS',\r\n GET_ILLUSTRATION_CASE: 'GET_ILLUSTRATION_CASE',\r\n DELETE_ILLUSTRATION_CASE: 'DELETE_ILLUSTRATION_CASE',\r\n CHECK_ILLUSTRATION_CASE_EXIST: 'CHECK_ILLUSTRATION_CASE_EXIST',\r\n INFORCE_LOAD: 'inforce_load',\r\n INFORCE_LOAD_ERROR: 'inforce_load_error',\r\n INFORCE_REMOVE: 'inforce_remove',\r\n INFORCE_POST: 'inforce_post',\r\n TREE_BUILD: 'tree-build',\r\n TREE_UPDATE: 'tree-update',\r\n TREE_REMOVE: 'tree_remove',\r\n CREATE_GLOBAL_ARRAY: 'global_array',\r\n FETCH_ALPHALOOKUP: 'FETCH_ALPHALOOKUP',\r\n FETCHERROR_ALPHALOOKUP: 'FETCHERROR_ALPHALOOKUP',\r\n CLEAR_ALPHALOOKUP: 'CLEAR_ALPHALOOKUP',\r\n FETCH_DATAREPORTS: 'FETCH_DATAREPORTS',\r\n FETCHERROR_DATAREPORTS: 'FETCHERROR_DATAREPORTS',\r\n CLEAR_DATAREPORTS: 'CLEAR_DATAREPORTS',\r\n CLEAR_CUSTOM_STORE: 'CLEAR_CUSTOM_STORE',\r\n UPDATE_PROFILE: 'UPDATE_PROFILE',\r\n};\r\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAoCAYAAAHhxWh1AAAAAXNSR0IArs4c6QAABEBJREFUWAnFmFuITWEUx+fMIKZxS8m4RLlEITFJwyRNCYMUDy7lEqVQRjIeeEAiXpRXRHlQSMqDpDSiECnlkstQGEm5kyFsv3XOt7759t7f3mcfTln1n7W+//qvtfY5+3K+PRUVxoIgeKlx3kMELlFpFufEkztm1h5HdoJLh1qx2OcmM8Sheq8exSBgp3orvKSvHcJ3yhO/0DjvIT6Dg6BBE8RzQOH7wv/ShM+TnxTiIbaD1yHSXZC0p4JwMKhz897YLdJz5xUqaUVUXlfS+Me6tiKIn0pS8DCXy43SdcjrceBzoYQsJIk1aYJ4CtgLCt0J7EdXketJL5Yuy1wyGic2IdEgSewtaAYbwAsgtiTayLtG+Ats8yYhyS0CqR8jX5tFJBpsQNIw2wjRkCQRua7SJSlveTRVIsTi5w5VIRX0tQXFAgp+gzuqIz4nTXSd6tHVg/tSoKYFrDuUw7eB2ZqzHvITeGSJjAE1V0Dhria4AY5krI3JqG0BH3P8+U3W+8XGqv6GYMBocBV8BzfB5LQ+7r1tdRS9YfEAtIFV4CaQr+AbPptJE9DuU8PfAR2+XIhDNAKkXiuSx+Kn3u2E4BI46XLRmPwu8CrKh9YIPoC1ITKyID8dxI46+mXfoK4+UhtdToV4HiVDawYtAXJdJRr5d2BnokATiGKHrTnxSfnoRxOt3LS3JYga/Am491E+cS1TsaGugHVNng2C7i6fGlOw1BTViJBY7kmxHamFviRF58EZyeH3gKc+nZdDfAB8AWozTKNhSuDlAXcIxJ8YkAuA2HOwGswCvd1prKsNvwKvT9GNVgM5CogNt2SGAH2/fFUQNOblZrE+Q21MQm2j1NtGMUUJhDbyXZAltClIaTaii4TateQOnQWlHRADZct3HMiPZzG7gGBc56wyRjSeBuTHREyu1y3Ae8vBV4KV4DVQW162w6HjMdP1K35iKY3RDwTtpv5aKbVeLY22mmayw6j2ijKQ1N41fY5mkCdLaPLENErcmCZXd2bosdD0kWuvW2cmHhW7qgv7p4qKrvHSkhitl1+51F+6YgfUasbOLWl8XKz1V3kJsi9FcVkRhq+3J9BtbHMRuTdNvTz41f79MUAn2VCozfROTSApkg3bD1NcfMOR0CdG03C+aSpuaUzgIdDVAX2Atngk/0bRfCyQZ5HYPdDf1xG+B7gIxOSA5vh0ZeMYsMYMwgWb3casm4Q0tt/NZY2L3WW2D0Nkl9YH4jJ4ZhLRi3S84T/jT4ke9DLc3zkajAGyQUsz+T1b55sAPw/IK0ya3SLZ4Ku3HAJpJP8uEJP/OcipqbKCMgX0lBvkKVALnfb8GDJnTVbeB0aWaXZqG+b0BY/NXLlJCh+eYLch5WvWR3xqs3ImmXnNzD+d78vilSE2lXNQ1l7Mnm3mi+slW89aUywvBYuzNiqjzn3nqpV98GGgT1TC/2atTK78AxwcMFkjZy/xAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/procomp.86184f1a.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAqCAYAAAG2MSnwAAAAAXNSR0IArs4c6QAABYhJREFUWAndmWuIVkUYx9dd3e0iqSUqpRRB0WWLivpS60ZE9KlCKAKTosBL0sWyoOiTViBEQkYqRG0KSbqSdCFCUrpaRJCQUFGmVmuIaDfB266n3/+cmdmZc+ac875vbwU98D/zXP7PM3POmTMz725Hh5EkSZ4H86wdtAS6O7i8EngxOsGevLNgkznTOTEmgS7nkIJjtAzGUT+K3e9sjMQa6j0QYl2dXDbLOwYxUdumHV0TpMgg4yi42A9gvw7udz6MC5yRJbmByE98RJfDxuhGL4hiTogucgaK2KU2sU1gbY4wgm+i70t1nJPBJ2BTIWgdBIPu5C/4cGyzCfnWkZ1iGNjLI+QH9L625AMR+zmNY44CqhyRQzYmwpBfATvWdaKup/nEEr039VPlWAkh+oiC50jyeSDwBcWI9YJzAmeZAXE+sPIZyrNgEXgVHAOSg6CnrEbqT2lJ8mklyQvCn2JyVnnu9J0sVCBwegahJTXxa10cZaozvCK+Snx5A5y74AyP4bKD5EE+/iW2CL6F6P7zeRh7OngCpF8srWQdefsy1XwNJH8MCrPKktQSHwClj8RyUw4XjbKSTLiRW34G3q60OMrZoLQooTtq4i8SD9ZdW/gXAifsLdS1cB9RR8hllVwIPeCAmEZO0O61hmmfrCwSC5J4J9gIfgD6YlaCM2Nc64vtJGNJ0q3rmb4MjoMXwIfgEjCkGLIYvVog3Z1Sk+TtKiac8w1vuJQHIZ0atI0saGkduNoLirMDX58CiP91lHbuB8jZBsKFUpWQPp/o61k4GfB9vm7i96Y+jMWg/FnAMgkb/SK+TlyLbXbrtNowb/cJeV1kpLSg+BklOb24GeSrjZLrCuoFrRibz8epieuPeJzhXE/sIY9/hKXLX6k/ItZXGCFJOus0Ku7DIGEeGHIO2zO99oBATGxr4MwMfyG5At72tCCVR89otnKx/bXoCjy3Yr2vW/4ZPBWEcgZxSd1LcdPmUrFzNQJTcaS0ILFHwYhLwjgCVjtHTiEmeTzndmYW9k4ROLqMs9+xGlTI00lia4GO80JTtHQk+ST4+sr25/3OJniqKaol/yIXyCnEtClJ3suF4iZEPWRf9mFoNFb+RBkfy66cfyRpns4A+hx1/tzLfD5A2x6hAz2SB8EHYBg0KnqEn4PHwKT2jMZUoeDV4BtgRY/yTaD9bHJdZ3AmAh08tBsfB1Z2odxQlx+Nk6hpbvdA1OQncF2U3IKTWtoSdwMrq1AKK3O0NMR7bBbtBtD0vhotHHGqNlgPrCyI0DIXDJ1nvjXMH2mnlpIjAfhnAZ2Et4Pgp3KEHrjgTwNakyXfgfBp4hgP9KlKyn+yBmVDgzx/SpSuw2FWaFHjLQ0A0cHvFEXtfrcZfQrYwGc/S4H/Quj7Jvp9A+js9046BkY6V0NGtLOfljpbuJD7t5+guqXOGcAuYbP1BG8z4xngDv4weiuNfRvK9fWmapmFe51JmqURHwSSubFK+PWLbacIbZYdsf7kox9tBpLv9bX8BrS6TwAF4Y5EXErgPnBSgZA5VCf4Gxb2TnA4Cxeu8lf97rVj+V2j1VonWV8o04SD/LbMQXVJLe1UkpdkXJmq2eWqJsYUUElvywCpM9MbT28nr/ALelppehsk2B30/C8a9K0p9JrpcgVjG52nBNeake+nbXq5IUd/wLIy2Ox9kTgB2L8brInmQ3ja9kA7P0qqcJJzC5gNmlpm4C8AVpZVdJFOUP0lXPuh5BD4x3YWat9s+qBJ9oDa45sbPOTp4EtgZQvK5Y7QokIN/TZ/1xal/Rqc22K59IlqIdRr2w180clnGegHM4D9Fa2VQedJnW502F0KvgK+6DCgLTb8n0XLo/QSKToO3AhWA3VUJ9qp1gDNz5O9Uv8P9S+y9+tXVSfDTAAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAgCAYAAAEXqgqWAAAAAXNSR0IArs4c6QAAA1xJREFUWAnVmM+LjVEYx++dGQbDZiRrUv4BitmgpvErZVhYy05RysLCUFKUjWzsLJRJ02QlSWGDyIJZSZGNpJRkXKaMuT7fc89znPfcee/c9525tzz1zPOc58f3fN/znvO+751KBanX6zOyJlUCc9VqtQc7YEFVzaFHQ0COgpmAD86Q+BInqj7xD69SeR0XOJ+uz/MF64GSZams41+0sSyUxwIj8m/iZOyTOx8K40Tqa5Yegh+xw2kyGdeE+ALVtWfWMyms6GJGIPtACfxxzPuk6Cn5+0qO+KIB/Pn0pGtUIXo6QckMyU86RJzmVY5KyR+yQi1yS9HytCUq3I/mIjLtmJC0PFPYafSsApHoakdZGredonhL120eKvbYmqfVTHiG2M40nox3M74ARmPv0GT3pg9/MTKULuJEMnPR4V7dPp1WYyh2m4uiqF6NyIaUoQ7b2zKA6qH3QwAEfVVZoLi3DxAB/TIw8Ta/oF3j6uk/jE6j7kxH9lRBQFcuhpPoPjSwdJlK5THgg6yLOwE+tqDRxq7T1HQaCPfSPYveRt+1QBKRS0C4pcoFFACgumn35LeQQXJbjVQToAhTUPSO/zBArWEQwF4y2BICBRx6/wDa63a49REsu2UCToahgBcDqv4mQFsLJYuIEYmP3sYiAHEtYKE3AFIwhH6NCwv4oTcFfFYAJC4VoOtdcsBwV7WoyI542nb9Rqvv9YNeb/vbBbE6+txpwy5TTNtmHNVDQKJHWMMr9vcu2+23awHgCFpGzhWbs2Q1zGY9uwPtQFCrV/eE75G53E5f6Rom0FtZ4t7M7QJRr31xU41LKA/BWpHhQKAUwQzIEgzgcdVf6PMMXCuC5Najt9DvaLekxkSjRrLpYW0JinbhP/LjE9gnluugXQv2NfQO81/nJB/PJUjRQU/kE1Zfi6W+GD1GEWO/lsJzK69Zz3OJflquc153/mzy07xylqVsOiTElkfx4e7wch8X/dG8boHil13MYzsD+1R0b8U42UF/WzSvW8E8gnZ7p9ioPztIKIWO53Uf5gsR7ObqiawRDPP+fwTZpHqc6NeBJFxJY9i5v3nz6lvpCtPav0xsv9kvk2+do5RB1jNvwEdusO+PWdZOqr40VxJcjebdduvphNVHYw1itRT8LzR5W+tumyEbAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAA4hJREFUWAnVmEtIVFEYxx1LyN4lmBUmKZWLWvQ0K7CooMciWrWJFq7aGLQJImjVLiKIghbtgjZFUUJFi8RFhPYwJMqU6EmZSaRhD0jt98978jRzz9wzM3e0PvjN+e453/c/35x779xzJ1HgacPDw0sI3QmboRzKYAb0Qjc8h5twPZFI6HhsjMJ2Qzv42hCBt2BNXitkguVwD5JNBXyANrgNKr4HwuwKnVrpeA3RPTCQNGMzx/thXths9C+EA3AfbHvDwcqwnKz6EDtkq+Nrpbb6ihGbAH3Bl2DsK852Xw1nHCLbQKfQ2BmcImdCmgHyZoMuAWN9OLrRsjOSF0CvUaNtyE5pNAuNIrhoaT7FnzYa4emRVAgtltBJz9TIMDSnwGNL+3RkUnIAyTssARU6ITkml2P0FoNOsewbZHZnk9CozMD0Qxy7oX3YTEB73HsCgitgEGR3vBMzDES7FH5oEkyrOdFHopCgvaBWdnmkif+Tx18PqpcC5em0q3xmUWE1VuANy8+H22iJbrJ8p6sClwajg7Qdzsh4BrShMFZpnHStCiwJAno4DUPpgmMYe2FplFq+01WBk4PRfmdUfAOfkDKL4PWDrQL7gvnNSsZXTqrSfLo0p2xgpEn/qeD3QUgJt35Wz930U/w1WmkddVq+01WBbcFogna1MzKegWpLptXyna4KtH+cc98SOaf6PaDfXGMtxknbclrngHmSdOHH+hw2k6O7DIy1m36vlqxrJpO23ispwyB0z1lz7MsoncQaK/k1fqx3NHq7wGyE9QqQ+c1I0nkw1oSTuUjIsqBTBZ/B2NGQsOgusmeBvp0x7YTNj3i0QEgE+RXwBGzr4GBuSHh0F4m6kM3GUqKPoCo6MzWCvDpwvY7mVGQtwt1g7DvOCfC6LonTKb0A5prDDbWciixH8kGSrF4dr0I9rIAymASK1U12EJrgJ/jaMwKzPt3FJB8B+wL3nVhxb0Ffpg6+gMtUZOifAakXTkgPyXq/PQYS8rFWgvQPRLGRw98AWRWp56+3MckigreA+XdrJr52Qx/hIdxlT/mKNsVUJJ3asU9NGRzp6KLZSP47x3j+uylyfcRKdjKuLdn4WVBkP63L/oki11FduiK1aRn3lfwviqyNWMnm8bsYg5kpUEXaj1cO/9hYvMhFrwHluIo8FZ09RhEUuRbsldRjNZYtX2xfgYKq4Sw0gN6XCn4B4Lx3XZPCrDsAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAcCAYAAAATFf3WAAAAAXNSR0IArs4c6QAAAnxJREFUWAntl89LVFEUx+eJYD9UQsispZnaQglaREK0KagWGrlxEwYtFCEI1IUQpPQHtGtRIFIt2lm0atcukBYtRNTaBaJIISYu8sfrc8Zz3tz3xunNmxmeLrzw5dxz7vee79d774yayTjD9/2r4Bc4qLGCcIdjKVPlJswfg4ZILc20EbFHrqBnCc6PMV8FteAlmANpjkuIPQDi4azneTvE3MBgt97rX+Kp3Eo6MzSbwK56uG6q7hXf0+Jn3K8ZIa2I5jJaX1SvN6SL62rwW90PhRZTTNAfVQ8/icHzy5Dc1AU54nMpegpJod2iPiRckUW7YrveGY56KbQrxQTtH8jNqmTWUxVOxeRdLU5rPMhgHrLvsBonXaBJHclb7CvC3Tw/7bcieAGFvpdJLgSF+Ml59nTK+3sOko538f3DDAQmk4rAH5frvRNuVVR2sShWmFTKnttygjv6kz0hnonBiHK3iM1h/cIZXLku2SNjGMTpjGWZvr8tBm0MFpbYW4FYDzZ0w1Qc39bhv9Y968Q6qxeKcB4qP/sJLsTLq/PBWKf4Vhf6aTKcR4oU4IxSuq/lKXr8iVD+n5pTYuwJSid4teCrs09OpzWqQq0NvHF4M8xPRnn75fCCE0x0xdaMBo3gO7Ah73gefFTI3N42U38RnLb9cRFueQZFgCZ1YALYm2SaN2TtGaiPM+Wuww8Myhd1SUPf0lOavaBBN2gHbUB+yS8oPsBbZl7yKNmgKWJghfkryysd7Y+FSvetWL8jg+Ue5dEJlnuC8ineBCfALb4yarRh7v+BvYKbJ51Lh6R7rqmPTQ9T70l6tHDYwrSc4ACQt3gDHAeHYcitfgID/wAL7PjLuwu7EQAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAABAdJREFUWAndmFmIT1Ecx/2Hse+aMUaWUpJ4IJRCRKHJUkrZnix58Ca74kUzHhBR4kGKJqVEkQdLZpBkiUQeLCH7vmcbn+/9n9/MHf9lzr3z/xv51eeec8/5bf9z7zn3nH+iWQypqakpxGw0TIJ+UAI9oBu8gieOO5THoTqRSPygzK+Q2GiohLcQRd6gvA9GRs0w4WOA48HolUNZSP8X9QtwER6DRk2jp1EsdSih4RCOc4j7VYzobcrGCYkVwjb4CSZnqcyHYh/v6JXCYrgMJt+plEOBj4+0OhgXwRkwuUFlalplj0ZsEzAL7oLJUSodPczrq2A0EO47L78o10Lz+lrx7vDTEraCyU0qvb29oayRuweSDzDN2ziCIn4XwDeQXIN2DZqj1ArOgUTJDWnQqBEK+J8Ieh8lhyA8mVI9o7BLmogmxZRUjdy3EGeJAjpZkzECCkNB75tkRUbFPHQQzwbmE3UtUalCx0mQ6H2IPP2xmQlPHDNTI2RuwaYDPAfJ7hRNGicHXcnLxBQFjwZMn4V8PPMwqaeCrT3qH9QH/Nl50Dk/Wa8jwg32D50PFQ8jmAaq2OijYGtkRa09jW3gI0jm1XZErGCrGXndEfcpbMBecqs2PDdTg6bkdO9a29EEFfIY7nJR0VcpaDJoyySp4gP+OlmNfsWhRnAvnIdV0T0EFpe4auMhGaVLC+ijCnI1WcS+6vWY46zvxvHCAPHbaq5ha7uhYARt3bHM4/jOpY3lEeyW9Ij/+QQ7uZ//LpfD0AhflkewedAI2qLavRFOc2lqeQQTVgnaM7dHnctgcXxZHs9lHE6wZxxvebCxBF9YgjddkDF5CBbJJUtMawxGOCMdWYMRPOIaBqGgM25TyniCa3LoDF2tRPSItXo/0g0yPVk02dWOF2dZtN8qiwKt3pSHXUqLGEV9Xf66EFfnadtHWj7BCCqZrfAd+sNCiCPh73i47utrDYpak2W7J8WIX7AdJE+hfYpCHhuI1we+gmRp2lB0FMN7aSD70yrloZFY2qhWKSjyADST0wudegdN4m6Z0jvP0EowOzDpJFmWQa2uGSV71Drhza7ryX0N/8vBZLVXBLRbwAlnpSTXQ/YDtZfnOiX8KcZOMDlQ1+tRw6ojHDNrSh2qijxMG1TBTy84BSaVVDK/d5k8YlQAm8wLpSaQ/kRqm8kmWzt2naACvoBET2ddNhuvPpzMhfCZV4fzLTAWmmdzQr9m6ATYAS/B5BGVGdlsrc/r3cKZ1sVloDUq2Eg6B/pH9QpoyybC/7BqdzQMOoPJRyobYTNfsM/WmLOSREtgJVwAPSIfkZ5OesvANqPeOXmNYDpvLtg4+nQqLAb9098F9KnSLl0bzvtwmtEKNp/U/z/5DTq0APMfKQurAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAA8CAYAAAAUufjgAAAAAXNSR0IArs4c6QAAA+JJREFUaAXtWltsDFEY/v8zgxWNS6RdbTWuSeMSFUFIEJK6BKteEA+IqCCtxpMHXhBeRCJdt4gHiQcEESvVRII2QhAaIq4PEre26pqo7eruzvz+3ZqxmtmZWad4OfOw859zvu8//37nP+dM5gyC5DX0cGRCIkmbAXA8ApQCUAIInxHAfaHp+1urF72S6YJ9/tk1JFyfz7GECWEFEP86XFwZBwFHA3kDtr5cO+e7A8SzytGxF2vEsUgwFoOrRDTOC5tuR7yi9REVLRtCHb7wGSA9w/Zljg7X9/kWS1zj4MZaBER4A4jHAEWTIFPn4Z1GBJWMyU9jiMrNTuM82wssjt97zgoGwxdqgKDW7gDxFKtT2V2d4oNXBifN6Gke/nIbq4lQW/WSOrvswxA+MDZk+PGGAE+AbVYFIjbMGrJkVffgUu3N1eWfYGBgKWOeWHgwabdt+zRyCrCzPTqFZ2nQ9o1i19nlaNjlbkbb6vlRQNpnVxOVFR26XGKXfRieQ1wcrh9KmJgEIIRB5kIesvVdfrFdaLQGSeOUy34RmHkmwQl7pguxRwO8ZyAltV54m9X/mJ3Ni5dbY+HBS8PISD4moH5uOIm21oF5WPp8XUV7Nh/pAFMzM0rJ5YRUxsBABngUz8ScZ14G39PkHD3LoPc2kCDKujVtrAmd24FoYvDI5QKMxxp5nMbYIGfDZGefnJtyq7WXHxcaAt4I9O8/V8dEbJ+P4HiZg5Z3NRU5JbhT/8vOkHa9NZJ0asus47SaEWv/ul3nXWoez8x0G493ExsvbSBCCS+4U+1yDxgf8hsRWn854j/eyN1njsxYSzAkmMs7ya9lQ+jalpaq0A2LXhS+uNIA86RV7ol7/ofZ9BQititNaNuaq0O3rIrC2oureOaf6CpTMKd10HLyL+8qQFm1OQf9XTxZtJIDkSJ/6Oyom1/qfPeZ8pILuDBuUnP2rn22fM+6dTs6cM1Bfk6OO7J6sJKXlE43d64Ban17N/Bu/cLNgUwb7xZ3BhWMfOTmw3WI31Yu+MwrfynnTTElhOuDhVsnTm2aZibfbFzcwttn1y7hBOI61wBTnJ/Pe6+z8KWqcZM33XWIvel/H6EClNVYKagUlFVAlq9yUCkoq4AsX+WgUlBWAVm+ykGloKwCsnyVg0pBWQVk+SoHlYKyCsjyVQ4qBWUVkOWrHJRVUOf3unF+B9s75cg0zOlFtXWmrFMZvonGxJ9Hh+wGO3U+xnzIp+GTU075mHSvAZ4HkTL9e3N/e2NNjwQJ3OnN+g8IhISm99ot0p+J8OcifCRwl9+4u55Z/IswOYYOjuU6f7E0s7lq0YMfuawtl1s7RlwAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAA2CAYAAAC1ItuGAAAAAXNSR0IArs4c6QAABuBJREFUaAXNWWtsVEUUnrm7pdhSS7HS7bZVQAIaRCNRCyQ2NlJJINslQcoPf6gBqZJ2ixrBBB+ExAf+MOm2kFZQIYpRFOVutVFAQYMCPzA+ICIENJY+QF5taWm79874zW1vd7v37uPe3QKTbGbOmTNnvjlz5sy5s5RYKOs4lxrqAi8QzldyQiZZGKqLXnY60opbqxae0BnxahpPILzfVSev5oxvCOdZbVNKTozNyi7+56nSy4mMdSYipMtwRpbrbUrov7CiotMx6nRCeIHezzmZdrW789MlO/iCzyqoqvOj1ZYAYvW3YQICs1/sqPHeHk1pON9d3zRLVdUj4TzCyaMHOpreAa9mBN+EkEx4CbAoS0DIIIIFntOZjDNfvl9+Wqej1TYBRlNnwmcMNtcL/VEi0ls6xQjfmF8vl+i0WT36ACNmrfR51sKSTRqbkzSukp15dYHJEWLD5DUHuI5Slp1JH6eUHhMoOOG5lLHA9PfkrGFUYQ1LACVJmitJ9AEHleaF6YjdxIBIgb+Webs5pR5Y8oLogw/c3dnDt4s4Gylr6RS3VXl+iVQQlx7hgyHps9Xlf7v8gcWEsj1AmIbo4Gmok9+AxEshKUI0gPm1gRWcsFWE0im4JQwrDh8Q2YYlLmLcXDFhZF88usNX/kO+P1DNCGsQsgC5Jr9OPtpe7f1IHythFU9CoBFmvotzno56jJUftLpi+ZA+UbS63VfeCH/cqPcD5JYCf2C2TkuEsyqdQAS+Amt0xfvhFukZHoMGFhTVh8LlorXvnHnzKvR9J/qFkRTCvyzwNxcK2jm0rbgeaNez1eU563DKREesUuBvulfh6q/hMpoP+QNvgrcmnJ9Ie39pqVK45ZuKYG//YSCcKnZFpUHZ3dj0kBOINZ+jnCuJgDNMSEknTJgt+AgZq+HPR9tryj/U5STqVFQeHCQ5mVi4Sb5H7xtRD/TDSNLLhKjbocgBXLNYv/q+pVM8QuEQge0+wAlF+sSeEyxO+Wb40MlWX/khQTvHZZxUujoHBv2alwSD5DfBNy8jcwfsynxD3DEfGJtbku95ETHtWyEV6UNIq/pgmVdja4jemxKAIm3KSM9citN4XJtK+BDRfChD0AgnGxwS9WIRW+FPzfF+OKxDPjEUB6PjT7zndGVZZ2FDU7kywA7DijmDPsS2ohbAeVu1NwBt4he3uGp3XYBLTBCCKbGgPuOZZzwnEbcq4O1aIgtwS/LrA7a3N+UAhcI236K92ErtwAgajv6ay7/rMdG2U1JqQR1Ah89bDz9q1GgtjNFtbr98n95vpR4VgAJAYXphNSy5X7Sx1RlITuXJm+U8QVspowbwSOX9QYc0DltLTwtA2Oqi3qtk11R/Mz6iEi+2ArUqcYXoMZWTXPcmebrZlJz0EInT1YyRTwDRCZSzr9Dgu5B9wkzejGcL4NjMrFN9oduhWA2SwfhnNoNIJUaWpSATBmhri8XtgGC7fuS8o0PZsqCA0l6z6HV8Nv7JOF8MMr7zU1ICY6ZZXYZtgBpIn/cL1OIXt7hq5f/EB1JcwQgBW1scoWNUyRseoOkWu+vlMoQGr0gcbZuHEhWvCIE2n2e3bR0YaACI1HuC0tP3FYLDmGQUi+iiUnUF0nZ3W6XnvF1dhi3OU3O7cY8OP/LYVayN4/RcTs6UrmR0GCworqjCHT9PC549P8dBue0tpkRiPI0cPFYxYyClAIWyMxVzr6L6PhnFqRpr2OJUKU6VHsMWC8UF9U2PKJyXIju2vQCGRxcHZ/tFApsMWAPAKY17snv7ewPIPJDDJVPw2kPI85M+2OdO9MHcbDaDhdgYJ76gufDB5AulfUpmOvRZLPjK0kcYLCgylSJ/c7EiBecgEzYsQB8Yr8YczCGRQ0MHziD+8L59zuN/dP5k6CAUT3E8R/Cho9UAUHS0+BacQiV+o1a6T2ThtaXzQeMEofwRrxYfmwI0DrrGHLz3YI8bps/MetsUYGHd1zODJLhQYvbvYiYRNc1Bm8+s9P5utjxxIRTU7zWkX3SswluWzb8kPvY7MNAAEB81N19hwYPoy0zqFGOwwskriApu8epgBrK1ap72Rh3ZR5eHOIZD0OcaH0RiOfw2EhK13hJ6+khfUroMFhSnrqhOnhGkpAz/zdm/i8UWc7KnpdLTa31poREGgKKrpdrbhmpbSOz6tQxbfP2gmM98wwN0IhiehTOPx/8dOXm18m6aogMSbg+8gjsRfm8Z/IbXokd4d8y2k0v0c8L4WiQH4v4rC8XxmOOsdWpKdc10p5XBUm7eHeu1pzJ85FgZaFkW+sUTsNN1K17yEy/DWQPS/Jv4uUtFXFKGeYmriS1JmZPTiTkt0RKHWKP/BwTPmz9jvQ7xAAAAAElFTkSuQmCC\"","module.exports = __webpack_public_path__ + \"static/media/arrow.1cad89b7.svg\";","module.exports = __webpack_public_path__ + \"static/media/pages.7db7f508.svg\";","module.exports = __webpack_public_path__ + \"static/media/chevron-blue.7cef0eb8.svg\";","module.exports = __webpack_public_path__ + \"static/media/chevron-white.2dc2f7ab.svg\";","module.exports = __webpack_public_path__ + \"static/media/chevron-blue-right.c8f09f5d.svg\";","module.exports = __webpack_public_path__ + \"static/media/threedots.874cd32b.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAAG3RoyQAAAAAXNSR0IArs4c6QAAAi9JREFUOBGVlU1IVFEYhr1q/pBQgiKaQUiFkoi5CFy4E3HTLnDRKqiViGAELUJmFei6jbhxJdrSApEIUgRXrloECiKYJC0zQsef2/Oeud+dc48zogcev+973/ecuTN35lpR4a84jt/4s+sRv1wQi0Kklkw+iqIaai1jk4SDYiboMLXWMzLCKxMqGarhLsId6r6MSmjkRfY0UGUsq3eL4aYaaqw/vwpy4S9ztetoPoLWDT9g5rgazBxMlwqc+KKCNtNvQaRLP+DqLh6fJPEe0p7rZSZBb6vswl91Js192A2TaCvwLNRt08+ShonsbIb3oNUNPealFXEOpiRQ46SO0n73Q+8Q+k2wYBJuYf7mPJo/FkpMd6Jp+BsWfG1imeAw4U59fpkTmB/5G+l/u5l05lsRhPTmFqXpxCWGtjCgGb2K0pt6CDswmAqFUAfakWnuHnPjOxDOMA5B64x5CL3Ogleqhb3Fr95lm9wrW4CNEbwFXcEJuLvq+V1o+3AOi3DbvEzF0M/zM/yF4YzJgKaV83XmVvgBu3Av9Ria4B98SMWgwdPKBbIb0Z86l2rCV4SFUmHTkg05m8OKPwG6qFp9hgOwEoaCOc98HGj+uMRQD336fDZg1nev27P/OZxCgw58kAwvrnuQ8uzV4yUPL9P9DLdAd2wTmlPjkoZcFczAETwpGcXQHf8EWmswBv2gn81jGIF5OIZtSB8sdqD7t2NDWNmg5287tIAeOHv8zA6pZdd/OEz2rSHR4IUAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAQCAYAAAGDw3T0AAAAAXNSR0IArs4c6QAAAZRJREFUOBGdk00oRGEUhueOKfnJ0DRMyFhOZKNolIydkoWsrWiWFiIbGws29rJiKVNWysqUkEhK06Smyd+CWMpQdtdz7nzfde81bpmvnvue855zvvsfCKhlmmbOCgmutFlBKQ+Kjd5AKcghSz4kpmEYvciHxJUX3ctQ76piNEHKNkmKOiE+hls54y6cwE8nXeQG7EMB8nrQUoxhaITy7bmqKqHYAueSoiG4U/GnavEXBl78O6jSNAbtEpzClncCbxZyYNo14jedEGchBn2won1LMVIgzyrqKjgTimcgd9vt9O2YwiWExUAz0AkJWBKjCIdQY0+UG9N4z2AazoI3pt6P9+X1/5WzSS0cgFxNh7yuKXaIgZy9B2Zgja9xFXUteusw9mAANuAenmAc0vB7MZSEd5iXKtoAR5CHVj1BHIdpnfsqjfJVypdwDRHf5r+KDIbhAuS1NUsfug0P0KXniCMwqXP5YUZI2pQRR+fgESZ4biXUXvSGSHZAfrx1KMAoLMICVL/YXC5mE14hUf1OapJNgnqTb74SVk5UtOeZAAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAARCAYAAAGwf1ymAAAAAXNSR0IArs4c6QAAAWxJREFUOBG1lL1KA0EUhRMLfQVBCAgWgqCgoKKghYUWNimsbGxsUtmYysbOxspGG7G1E59An8DeQhBEEEEkiBL/1u9u7p2MsxN3MTpwcuee+e6ZDQtbKvkrSZIj6alJ6lPP0439YPTL8SZaMbNzhRpHLuyB/QVqdh7hBGCiHBKYEtPbfrgW2co2WihZ1ndfCRtKIy2VOh2LxV8wkNr+AzTPerArg+xr2n/EgpwHdKNgw5m/3RB0VngW+FpvPskdArxX+LgI/KTwnoPVyLw1/Fc923KwbDCXwiH6T/XWv8HWcDhlQ16t2nm0Ag578FwUCk0GBtBo6P9bz2UVdIlkPaLZP7mMoBF0i/x1StPX1QUEzCB5Un8d0vS4YGnQAZJXW3MHP2zgltEL8tdOdASiipo+yX47BuOvofeA3YixGY+hedQIhvfpy6ge+G/0q5mQIgaDY+guCLRWPkSLRXJyGYIG0ZUmy5d9MncoAnwBCa319ZgDPsQAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/Checkmark-circle.1a0fcc3a.svg\";","module.exports = __webpack_public_path__ + \"static/media/Account-sample.03179a2b.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAoCAYAAAH25/i8AAAAAXNSR0IArs4c6QAABRNJREFUWAnFmVuIVWUUx8dhrCwq8WHMoDyJoBSCQRchiLIbSS9R5EvRQwn1YEXZS0FNEPViYAQZlJD0FHR9CLpSUFAY2INYQWJFUChUo1FTM+nu99/nW5/r2/dzzjgt+M9a67/+a33fuey9z94zNuYsy7KdLu2HkFmJNILaJvCR5WMklynBrw9+UsljpiA+zeLoIR+PSTGgmG6A/CewJhFCLBaBXxb8OYnAJ4h2+zyPIVeASbAIXF8SeALBZ8rxa8CNIT7kNROWIMgWYZbj8xhqeakmwgkrQ9OME7yIIq5Uqe6T0p74nLyQwhGf18a2rPkm4b2+SMPLPk9im+b8TCKwBMGsi+O7ZI2qjZsA/4KLfbjFJ/oE4yQVanMKV4DkvSZPXmgYcGdpSii8J+8tXy3/49mauKtOq++VGPug77Lfa2YORjPsONjnu8h3aRHPDRxrAPaINRI/5eJr8ypHkXGdPE1nhsbV1kCuA1a2yXFL+lR2oXHe+y9VziO+meCoDmrsgBcXY+ozEsHvp2+qWE9yBG9oJwkZEujSzr2Ouj6b/Z6LMYWjYDoSQwT0fwuOJ60QslcTspBQfzBXZdmbhVKSonlSupzE/wXeTRQjJsx7HmQTfB6n4/WWVL7XQ64zFz7o9nbW1VdzHzgIVrV3dFQwbDGQTQNdKGW9ju3NMgYl3yLyLzS9uatDlRk6t8qK51dxD3UYUS/RBKz0FYV7QIX6zpYKvTv9AOL14CprUw3bY/lAvt+b3WRNIY+7Je8F7mzTdPI0/Qz+8eIwKA5XDe5HMOd1jTHitWHQGV4YuGS46oG/xWtr4yD+pChoGL5DtaK+lKOZqhOKl5WaIPqV7LWqWuSC6K5IuCDU6oZvCPXkeIjtFL8B6bk4VvPdzWmAo5KQUnIkxyIF/QqWTUZywIBeOwddkrRSKP18SAQkaC4AG4q8z6m/DU68OuJ7EsKrXSyNzFGVYV+Vbc+LIXm0UulIdFvA046qDNFs1sy8GINK6XCkZmIr7Dv6zHBjyl0M3arJeQWve7/5trvLy47AsLuV4LuaXeoYaL7RG2HtoVvZ1MNuw58Sn6VheN2ZPudqbw29yHw3sqlX3Mbuq5pP/VKgc4BMZ7D8pr1Ke9I5Ftc9sd0oEWZXNy1KXc8G9KtKdgQsb9KflBqLLgO/Atmf4LwuC6GbALoDkekTuLxL37xoWOxicAzIDoBT/WBy3X/9BmSzoOfriuFeVzFY5RW12DNSzkJ32Gr4d6qGwdstmUnjTaXXU5wyAX6Hr81rzPDtbqF4C11cBE2njasP7a1u5ofFWSPnDH/fLbC5aSC6zhvXHPQXgfy3EP4HsKRpfqeahoDvgexfsK6tEc1AG9c8epaCw0Cm2+GVbevU1mnuhSG4fOjSWrEroB1442qnT6fXL4HZNW5st5DO66wbvwd0fgSEdqiN287o3w3M7je+1dOxzbrwu1obKgT03Q4+Btsqyq2U+oDZS10a/OW7+6ttnTy4gF3fYDvHfw7KnzrkQJfvpm0wazX4A8h0dbytSd9Uo3cV+BvIfgH5j7e8h2Soy3fdgsyzR6OEuT1Rp+3CM0HPxeypka7Ea23j+rUm0w+f5PLdZfBCadjb19okNgPG9ejWHkZM83QueeqxUJvquM6hoDsFP6Hb/o3gK3C+Xg5e/6XZC46B/9t0QOqiZw8JtKeNvMGz8Uhlzz1InUmuBOeC0oN0uIU2vZGHgZ7KPcuG4/8y/gMVulxRCOR52AAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAqCAYAAAGsDcl+AAAAAXNSR0IArs4c6QAABBdJREFUWAntmEuIjWEYx2eGGIWJyK3ktkGhXMolHcmlZGGBBSuFmmympFxiFpIpNRSLIZuJKAvEgtmYBUqZYqFJzMICMw0ZMwzT4Pj9v/O+n/d7z/edOd+YU8o89T/P/f++5/mu55SVIdlsdqp0KATqQAvIhkEZfqAikjXOSDcY6cD56SbF9zISkOO31LoVeStGArS2RvsN4W2j97tceTbtF93VsavkI6f0ETSga0Mnj6KszN+QaiVVbm1kRuWImwxtukaBt2EgzqDgmuLorrh8ECPZY4owA2nIKybcDKrdBP5H0AUaQVbLqCjjFrm2iiIjcJOuna5ItEY6XBbZIZMGaWQKxTdMwydqbkcmbhko3m5taTHpDH0gJ1GgLTfU99BXjD0lsSEpQeNXsNXmsceLzPqpNH39anbkkCUgthRoMUmTjbuaeHfgY+gI14IMKLgb0hXgDHgPXoBVIBs7bXc13+ZI/CJ20CBIw/Pn2PoNaf3wJPEbWWUymODHk/xYIgjm8xU6wSdszeQ+kGjoM1wy/GA8sTOCoNUWm5lssr40zWtQu0A/OEJNeSwRyYJC30MKhKiwwgnwHVyOZlJ4ND8GEp1H34CuwvQiBrfL991cITvpqK0o1BSb0w6QOUqiKwMv+vEZd0lssxukaFu0L9uHP9bWYF9w8hkbt5rcFvA48E3hRmlb4GtSx0yd1F1wHOjCDSQkkqGIT+D7lKwFT0AvuA4yINdnDav95kI+PQFR7FEr1JiU+x+JGGJwkibNxI/nzQgC3bx0ONukjRz1G2N9FSthml64RcQ2mLhUvZszPQ3Ec++KqjDB3InlV+NTskgNqkV0GQUvr4HHNRq0yBmIyHJTqnv4YaCzeqeNpyaKNDpO3rCdXCozJGKbifMpmhGOWeCpyGKkg9j6osn+tpDF9jib2O3yEV8MPph8o5srmc1ib8yCegDnCbkZJi81O69giAN68H8xnAsSuBc68dNsaia+HjH6UfEctIC7vAz0ov9eWGA66AYSHZ5qoJfPHeAZcEU/K5pAI9DjqB34codA6qc0PePAqPAb4TSDJFkZFiYYNE4CJ4E27cojnO1gtN9KrBLoJvIDBBLW4NkN1SqIn8mVDO4yplffuAa8tjwF9CubC+8f4c6GyOCc6gH1YB4oKCy51y5bsg3ZBdLq4Q0NNLHhCQ3JhLgkp4FzwD5m7FWqG2MDWA9GDLRYMflifzO+g0zvYbdAHWgHE8FysBnsA7p3Senvg/PgLNd6pwKDEsgSb4zkxhVDSt0ycBP8Alb6MK6CzWCMy4O/DjwEVm6EeSKJGwqLUhpwzgX1oBMkif5LOACCQ17sIUu5lVw5h6wNq8agKI5/7rKPm9Bqxqf/weYU9ZVKVcQm9Cqr/0F8uVSqNeN4fwOwXNrkHLqZgAAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/About_ProCompPPR.5f1de2a3.png\";","module.exports = __webpack_public_path__ + \"static/media/About_ProCompIllustration.c56bca82.png\";","module.exports = __webpack_public_path__ + \"static/media/hourglass.3917250a.svg\";","module.exports = __webpack_public_path__ + \"static/media/help_outline-blue-18dp.13bd9d88.svg\";","module.exports = __webpack_public_path__ + \"static/media/eAppPlaceholder.ff324170.svg\";","module.exports = __webpack_public_path__ + \"static/media/Trash.5f0223ba.svg\";","module.exports = __webpack_public_path__ + \"static/media/Zoom.17c00289.svg\";","module.exports = __webpack_public_path__ + \"static/media/Close.04704fb2.svg\";","module.exports = __webpack_public_path__ + \"static/media/Bank Info Illustration.31053d8a.svg\";","module.exports = __webpack_public_path__ + \"static/media/Dog on bed.d5682b88.svg\";","module.exports = __webpack_public_path__ + \"static/media/Whiteboard with plants.e5167373.svg\";","module.exports = __webpack_public_path__ + \"static/media/Clock.1b267207.svg\";","module.exports = __webpack_public_path__ + \"static/media/calculator.2c92e5c8.svg\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/flowerpot.f1c5d350.png\";","module.exports = __webpack_public_path__ + \"static/media/Plant-book.66b03e44.png\";","module.exports = __webpack_public_path__ + \"static/media/Scrubber.e4cd02ab.svg\";","module.exports = __webpack_public_path__ + \"static/media/Flowerpot-2.bc6361d3.png\";","module.exports = __webpack_public_path__ + \"static/media/Scenario-window.6a24b980.png\";","module.exports = __webpack_public_path__ + \"static/media/SereniaLifeLogo_Fullcolour.00f812a5.svg\";","module.exports = __webpack_public_path__ + \"static/media/term-article-image1.fc8e0aa2.jpg\";","module.exports = __webpack_public_path__ + \"static/media/term-article-image2.29d73cdb.jpg\";","module.exports = __webpack_public_path__ + \"static/media/term-article-image3.8f1fd77f.jpg\";","module.exports = __webpack_public_path__ + \"static/media/whole-article-image1.a596fb0a.jpg\";","module.exports = __webpack_public_path__ + \"static/media/whole-article-image2.8032ba04.jpg\";","module.exports = __webpack_public_path__ + \"static/media/whole-article-image3.6ea2d557.jpg\";","import {fromPairs} from 'lodash';\r\n\r\nexport {default as userLogo} from './User-white.png';\r\nexport {default as helpLogo} from './Help-white.png';\r\nexport {default as companyLogo} from './procomp.svg';\r\nexport {default as addLogo} from './Add-white.png';\r\nexport {default as folderLogo} from './Folder-white.png';\r\nexport {default as lookupLogo} from './magnifying-glass.png';\r\nexport {default as reportsLogo} from './sheet-box.png';\r\nexport {default as aboutLogo} from './Help.png';\r\nexport {default as visionLogo} from './Vision-blue.png';\r\nexport {default as uploadLogo} from './Upload-blue.png';\r\nexport {default as disketteLogo} from './Diskette-blue.png';\r\nexport {default as clipboardLogo} from './Clipboard.png';\r\nexport {default as documentLogo} from './Text-documents.png';\r\nexport {default as arrowIcon} from './arrow.svg';\r\nexport {default as pagesLogo} from './pages.svg';\r\nexport {default as chevronBlueLogo} from './chevron-blue.svg';\r\nexport {default as chevronWhiteLogo} from './chevron-white.svg';\r\nexport {default as chevronBlueRightLogo} from './chevron-blue-right.svg';\r\nexport {default as threedotsLogo} from './threedots.svg';\r\nexport {default as signOffLogo} from './Signoff-white.png';\r\nexport {default as signOffRedLogo} from './Signoff@2x.png';\r\nexport {default as switchLogo} from './Switch-white.png';\r\nexport {default as tickLogo} from './Checkmark-white.png';\r\nexport {default as checkLogo} from './Checkmark-white-circle.png';\r\nexport {default as checkmarkLogo} from './Checkmark-circle.svg';\r\nexport {default as accountSample} from './Account-sample.png';\r\nexport {default as warningLogo} from './Warning-white.png';\r\nexport {default as warningRedLogo} from './Warning-red.png';\r\nexport {default as flagLogo} from './Flag-white.png';\r\nexport {default as inforceAbout} from './About_ProCompPPR.png';\r\nexport {default as newbizAbout} from './About_ProCompIllustration.png';\r\nexport {default as hourGlass} from './hourglass.svg';\r\nexport {default as helpLogoQuestion} from './help_outline-blue-18dp.svg';\r\nexport {default as eAppPlaceholder} from './eAppPlaceholder.svg';\r\nexport {default as deleteLogo} from './Trash.svg';\r\nexport {default as previewLogo} from './Zoom.svg';\r\nexport {default as closeIcon} from './Close.svg';\r\nexport {default as bankInfoLogo} from './Bank Info Illustration.svg';\r\nexport {default as dogOnBedLogo} from './Dog on bed.svg';\r\nexport {default as whiteboardPlantsLogo} from './Whiteboard with plants.svg';\r\nexport {default as clockLogo} from './Clock.svg';\r\nexport {default as calculatorLogo} from './calculator.svg';\r\nexport {default as procompLogo} from './Procomp-logo-blue.png';\r\nexport {default as flowerpotLogo} from './flowerpot.png';\r\nexport {default as plantLogo} from './Plant-book.png';\r\nexport {default as scrubberLogo} from './Scrubber.svg';\r\nexport {default as flowerpot2Logo} from './Flowerpot-2.png';\r\nexport {default as scenarioWindowLogo} from './Scenario-window.png';\r\nexport {default as sereniaLifeLogo} from './SereniaLifeLogo_Fullcolour.svg';\r\n\r\nexport {default as termImage1} from './term-article-image1.jpg';\r\nexport {default as termImage2} from './term-article-image2.jpg';\r\nexport {default as termImage3} from './term-article-image3.jpg';\r\nexport {default as wholeImage1} from './whole-article-image1.jpg';\r\nexport {default as wholeImage2} from './whole-article-image2.jpg';\r\nexport {default as wholeImage3} from './whole-article-image3.jpg';\r\n","import format from 'number-format.js';\r\nimport {INPUTTYPES} from 'core/constants/uiConstants';\r\n\r\nexport const getMaskForInput = (inputType) => {\r\n switch (inputType) {\r\n case INPUTTYPES.INPUT_PHONE:\r\n return ['(', /[1-9]/, /\\d/, /\\d/, ')', ' ', /\\d/, /\\d/, /\\d/, '-', /\\d/, /\\d/, /\\d/, /\\d/];\r\n case INPUTTYPES.INPUT_POSTALCODE:\r\n return [/[a-zA-Z]/, /[0-9]/, /[a-zA-Z]/, ' ', /[0-9]/, /[a-zA-Z]/, /[0-9]/];\r\n case INPUTTYPES.INPUT_ZIPCODE:\r\n return [/[1-9]/, /[0-9]/, /[0-9]/, /[0-9]/, /[0-9]/, '-', /[1-9]/, /[1-9]/, /[1-9]/, /[1-9]/];\r\n case INPUTTYPES.INPUT_CREDITCARD:\r\n return;\r\n case INPUTTYPES.INPUT_SIN:\r\n return [/[0-9]/, /[0-9]/, /[0-9]/, ' ', /[0-9]/, /[0-9]/, /[0-9]/, ' ', /[0-9]/, /[0-9]/, /[0-9]/];\r\n case INPUTTYPES.INPUT_SSN:\r\n return [/[1-9]/, /[0-9]/, /[0-9]/, '-', /[0-9]/, /[0-9]/, '-', /[1-9]/, /[1-9]/, /[1-9]/, /[1-9]/];\r\n case INPUTTYPES.INPUT_TEXT:\r\n return false;\r\n default:\r\n return false;\r\n }\r\n};\r\n\r\nexport const decimalToComma = (value) => {\r\n let str = value.split('.').join(',');\r\n // console.log(str);\r\n return str;\r\n};\r\nexport const commaToDecimal = (value) => {\r\n let str = value.split(',').join('.');\r\n console.log(str);\r\n return str;\r\n};\r\nconst emailMask = (email) => {\r\n let maskedEmail = email.replace(/([^@\\.])/g, '*').split('');\r\n let previous = '';\r\n for (let i = 0; i < maskedEmail.length; i++) {\r\n if (i <= 1 || previous === '.' || previous === '@') {\r\n maskedEmail[i] = email[i];\r\n }\r\n previous = email[i];\r\n }\r\n return maskedEmail.join('');\r\n};\r\n\r\nexport const parseInput = (inputLanguage, oldVal, event, controlItem) => {\r\n let regex = /./;\r\n let strVal = event.target.value.slice();\r\n // console.log(event.target.value)\r\n if (event.target.value !== '') {\r\n if (event.target.value.length > controlItem.maxLength) {\r\n strVal = event.target.value.slice(0, controlItem.maxLength);\r\n }\r\n switch (controlItem.fieldType) {\r\n case INPUTTYPES.INPUT_TEXT:\r\n regex = /./;\r\n break;\r\n case INPUTTYPES.INPUT_UPPER:\r\n // regex = /^[A-Z0-9.' ]*$/;\r\n // strVal=strVal.toUpperCase();\r\n break;\r\n case INPUTTYPES.INPUT_EMAIL:\r\n // emailMask(strVal);\r\n // regex = /^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$/;\r\n break;\r\n case INPUTTYPES.INPUT_POSTALCODE:\r\n let reg = '^';\r\n for (let i = 1; i <= strVal.length; i++) {\r\n if (i % 2 === 1) {\r\n reg = reg + '[a-zA-Z]';\r\n } else {\r\n reg = reg + '[0-9]';\r\n }\r\n }\r\n reg += '$';\r\n regex = new RegExp(reg);\r\n strVal = strVal.toUpperCase();\r\n break;\r\n case INPUTTYPES.INPUT_PHONE:\r\n let val = strVal.split('');\r\n let regexPhone = '^';\r\n if (strVal.length === 1 && strVal.split('')[0] !== '(') {\r\n strVal = '(' + strVal;\r\n }\r\n if (strVal.length === 5 && strVal.split('')[4] !== ')') {\r\n strVal = strVal.slice(0, strVal.length - 1) + ')' + strVal.slice(strVal.length - 1);\r\n }\r\n if (strVal.length === 6 && strVal.split('')[5] !== ' ') {\r\n strVal = strVal.slice(0, strVal.length - 1) + ' ' + strVal.slice(strVal.length - 1);\r\n }\r\n if (strVal.length === 10 && strVal.split('')[9] !== '-') {\r\n strVal = strVal.slice(0, strVal.length - 1) + '-' + strVal.slice(strVal.length - 1);\r\n }\r\n for (let i = 0; i < strVal.length; i++) {\r\n if (i === 0) {\r\n regexPhone += '[(]';\r\n } else if ((i > 0 && i < 4) || (i > 5 && i < 9) || (i > 9 && i < 14)) {\r\n regexPhone += '[0-9]';\r\n }\r\n if (i === 4) {\r\n regexPhone += '[)]';\r\n }\r\n if (i === 5) {\r\n regexPhone += '[ ]';\r\n }\r\n if (i === 9) {\r\n regexPhone += '[-]';\r\n }\r\n }\r\n regexPhone += '$';\r\n regex = new RegExp(regexPhone);\r\n break;\r\n case INPUTTYPES.INPUT_NAME:\r\n regex = /^[a-zA-Z0-9.' ]*$/;\r\n strVal = toTitleCase(strVal);\r\n break;\r\n case INPUTTYPES.INPUT_INTEGER:\r\n case INPUTTYPES.INPUT_DOLLAR_INTEGER:\r\n case INPUTTYPES.INPUT_NUMBER:\r\n case INPUTTYPES.INPUT_ZIPCODE:\r\n case INPUTTYPES.INPUT_SIN:\r\n case INPUTTYPES.INPUT_SSN:\r\n regex = /^\\d*$/;\r\n break;\r\n // strVal = removeDecimal(strVal);\r\n // returnVal = parseInt(strVal);\r\n case INPUTTYPES.INPUT_REAL:\r\n case INPUTTYPES.INPUT_DOLLAR:\r\n case INPUTTYPES.INPUT_PERCENT:\r\n if (inputLanguage === 'English') {\r\n regex = new RegExp(`^\\\\d+\\\\.{0,1}(\\\\d{0,${controlItem.decimalPlaces}})$`);\r\n } else {\r\n regex = new RegExp(`^\\\\d+\\\\,{0,1}(\\\\d{0,${controlItem.decimalPlaces}})$`);\r\n }\r\n\r\n break;\r\n default:\r\n break;\r\n }\r\n if (regex.test(strVal)) {\r\n return strVal;\r\n } else {\r\n return oldVal || '';\r\n }\r\n }\r\n return strVal;\r\n};\r\n\r\nconst decimalHashes = (decimalPlaces, isForced = false) => {\r\n // isForced means - all decimal places must be used. Reference: http://mottie.github.io/javascript-number-formatter/\r\n let str = '';\r\n if (isForced === true) {\r\n for (let i = 0; i < decimalPlaces - 1; i++) {\r\n str += '#';\r\n }\r\n str += '0'; //forcing display till last place\r\n } else {\r\n for (let i = 0; i < decimalPlaces; i++) {\r\n str += '#';\r\n }\r\n }\r\n return str;\r\n};\r\nexport const formatDisplay = (inputLanguage, value, fieldType, decimalPlaces = 0) => {\r\n let decimals;\r\n switch (fieldType) {\r\n case INPUTTYPES.INPUT_UPPER:\r\n case INPUTTYPES.INPUT_NUMBER:\r\n break;\r\n case INPUTTYPES.INPUT_PHONE:\r\n // let formattedPhone = \"\";\r\n // let tempPhone = value.split(\"\");\r\n // for(let i =0; i< tempPhone.length; i++){\r\n // if(i===0) formattedPhone += \"(\";\r\n // formattedPhone += tempPhone[i];\r\n // if(i===2) formattedPhone += \") \";\r\n // if(i===5) formattedPhone += \"-\"\r\n // }\r\n // return formattedPhone;\r\n break;\r\n case INPUTTYPES.INPUT_POSTALCODE: //CA\r\n let formattedStr = '';\r\n let tempPostalCode = value.split('');\r\n for (let i = 0; i < tempPostalCode.length; i++) {\r\n formattedStr += tempPostalCode[i];\r\n if (i === 2) {\r\n formattedStr += ' ';\r\n }\r\n }\r\n return formattedStr;\r\n case INPUTTYPES.INPUT_ZIPCODE: //US\r\n let formattedCode = '';\r\n let tempCode = value.split('');\r\n for (let i = 0; i < tempCode.length; i++) {\r\n formattedCode += tempCode[i];\r\n if (i === 4) {\r\n formattedCode += '-';\r\n }\r\n }\r\n return formattedCode;\r\n case INPUTTYPES.INPUT_SIN:\r\n let sin = '';\r\n let tempSIN = value.split('');\r\n for (let i = 0; i < tempSIN.length; i++) {\r\n sin += tempSIN[i];\r\n if (i === 2 || i === 5) {\r\n sin += ' ';\r\n }\r\n }\r\n return sin;\r\n\r\n case INPUTTYPES.INPUT_SSN:\r\n return;\r\n case INPUTTYPES.INPUT_INTEGER:\r\n if (inputLanguage === 'English') {\r\n return format('#,##0.', value);\r\n } else {\r\n return format('# ##0.', value);\r\n }\r\n\r\n case INPUTTYPES.INPUT_REAL:\r\n if (inputLanguage === 'English') {\r\n decimals = decimalHashes(decimalPlaces, true);\r\n return format(`#,##0.${decimals}`, value);\r\n } else {\r\n //French\r\n decimals = decimalHashes(decimalPlaces, true);\r\n return format(`# ##0,${decimals}`, value);\r\n }\r\n case INPUTTYPES.INPUT_PERCENT:\r\n if (inputLanguage === 'English') {\r\n decimals = decimalHashes(decimalPlaces, true);\r\n return format(`#0.${decimals} %`, value);\r\n } else {\r\n decimals = decimalHashes(decimalPlaces, true);\r\n return format(`#0,${decimals} %`, value);\r\n }\r\n case INPUTTYPES.INPUT_DOLLAR:\r\n if (inputLanguage === 'English') {\r\n return format('$#,##0.00', value);\r\n } else {\r\n return format('$# ##0,00', value);\r\n }\r\n case INPUTTYPES.INPUT_DOLLAR_INTEGER:\r\n if (inputLanguage === 'English') {\r\n return format('$#,##0.', value);\r\n } else {\r\n return format('$# ##0.', value);\r\n }\r\n default:\r\n break;\r\n }\r\n return value;\r\n};\r\n\r\nconst removeDecimal = (val) => {\r\n let ret = '';\r\n for (let i = 0; i < val.length; i++) {\r\n if (val[i] !== '.') {\r\n ret += val[i];\r\n }\r\n }\r\n return ret;\r\n};\r\n\r\nexport const camelCase = (str) => {\r\n return str\r\n .replace(/\\s(.)/g, function (a) {\r\n return a.toUpperCase();\r\n })\r\n .replace(/\\s/g, '')\r\n .replace(/^(.)/, function (b) {\r\n return b.toLowerCase();\r\n });\r\n};\r\n\r\nconst capitalizeApostrophe = (str) => {\r\n let retStr = str.split('');\r\n\r\n for (let i = 0; i < retStr.length; i++) {\r\n if (retStr[i] === \"'\" && i + 1 < retStr.length) {\r\n retStr[i + 1] = retStr[i + 1].toUpperCase();\r\n }\r\n }\r\n return retStr.join('');\r\n};\r\n\r\nexport const toTitleCase = (str) => {\r\n let str1 = str.replace(/\\w\\S*/g, function (txt) {\r\n // return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\r\n return txt.charAt(0).toUpperCase() + txt.substr(1);\r\n });\r\n return capitalizeApostrophe(str1);\r\n};\r\n\r\nexport const onFocusInputPattern = (controlItem) => {\r\n switch (controlItem['fieldType']) {\r\n case INPUTTYPES.INPUT_UPPER:\r\n break;\r\n case INPUTTYPES.INPUT_REAL:\r\n return '/^([0-9]+(.[0-9]+)?)/';\r\n case INPUTTYPES.INPUT_INTEGER:\r\n return '[0-9]';\r\n case INPUTTYPES.INPUT_PERCENT:\r\n break;\r\n case INPUTTYPES.INPUT_DOLLAR:\r\n break;\r\n default:\r\n break;\r\n }\r\n};\r\n","module.exports = __webpack_public_path__ + \"static/media/spinner.2b02159f.gif\";","import React from \"react\";\r\n\r\nconst StatusContext = React.createContext({\r\n getStatusForField: field => []\r\n});\r\n\r\nexport default StatusContext;\r\n","import React, {Component} from 'react';\r\nimport StatusContext from './StatusContext';\r\nimport {withPCTranslation} from 'core/hocs';\r\nimport {formatDisplay} from 'core/utils/inputTypeUtils';\r\n\r\nclass FormStatus extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n status: {},\r\n dirty: {},\r\n formSubmitted: true,\r\n getStatusForField: this.getStatusForField,\r\n };\r\n }\r\n\r\n //This runs when FormValidator is instantiated and rendered\r\n static getDerivedStateFromProps(props, state) {\r\n state.status = {};\r\n\r\n //This condition prevents unusual crash occurs due to session timeout. Example: \"Cannot read property 'inputLanguage' of null\"\r\n if (!props.user) {\r\n return state;\r\n }\r\n if (props.data && props.data['CurrentField'] === '') {\r\n //do nothing\r\n } else {\r\n if (!(props.controlItems === undefined)) {\r\n let rulesData = props.controlItems[props.data['CurrentField']];\r\n if (!(rulesData === undefined)) {\r\n //In case rulesData has not loaded yet\r\n state.status['current'] = props.t(`${props.data['CurrentField']}-status`);\r\n //state.status['current'] = rulesData.statusText;\r\n // if (rulesData.useLimits) {\r\n // state.status['current'] = `${state.status['current']} - Limits: ${\r\n // rulesData.min\r\n // } - ${rulesData.max} `;\r\n // }\r\n\r\n if (rulesData.useLimits) {\r\n //props.user need to be checked for case when session logs out.\r\n const status = props.t(`${props.data['CurrentField']}-status`);\r\n const limits = props.t('msg-Limits');\r\n const field = `${props.data['CurrentField']}`;\r\n let minLimit = formatDisplay(props.user.inputLanguage, props.controlItems[field].min, props.controlItems[field].fieldType, props.controlItems[field].decimalPlaces);\r\n let maxLimit = formatDisplay(props.user.inputLanguage, props.controlItems[field].max, props.controlItems[field].fieldType, props.controlItems[field].decimalPlaces);\r\n\r\n state.status['current'] = `${status} - ${limits}: ${minLimit} - ${maxLimit} `;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return state;\r\n }\r\n\r\n get formValid() {\r\n return Object.keys(this.state.errors).length === 0;\r\n }\r\n\r\n handleGetFocus = (ev) => {\r\n ev.persist();\r\n let name = ev.target.name;\r\n this.setState((state) => (state.dirty[name] = true));\r\n //this.setState(state => state.status = {});\r\n };\r\n\r\n handleLostFocus = (ev) => {\r\n ev.persist();\r\n let name = ev.target.name;\r\n this.setState((state) => (state.status[name] = ''));\r\n };\r\n\r\n getStatusForField = (field) => {\r\n if (field === '') {\r\n return this.state.status;\r\n } else {\r\n return this.state.formSubmitted || this.state.dirty[field] || true ? this.state.status[field] || [] : [];\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n \r\n
\r\n {this.props.children}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withPCTranslation(FormStatus);\r\n","import React, {createContext} from \"react\";\r\n\r\ninterface ContextProps {\r\n errors: {\r\n [field: string]: string[]\r\n };\r\n formErrors: {\r\n [field: string]: string\r\n };\r\n dirty: {\r\n [field: string]: boolean\r\n };\r\n formSubmitted: boolean;\r\n getMessagesForField(field: string): string[];\r\n}\r\n\r\nconst initialContextValue = {\r\n formSubmitted: false,\r\n errors: {},\r\n formErrors: {},\r\n dirty: {},\r\n getMessagesForField: (field: string) => [],\r\n}\r\n\r\nexport default createContext(initialContextValue);\r\n","import React, {Component} from 'react';\r\nimport {ValidateData} from './coreValidation';\r\nimport ValidationContext from './ValidationContext';\r\nimport {withPCTranslation} from 'core/hocs';\r\n\r\nclass FormValidator extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n errors: {},\r\n formErrors: {},\r\n dirty: {},\r\n formSubmitted: false,\r\n getMessagesForField: this.getMessagesForField,\r\n };\r\n }\r\n\r\n //This runs when FormValidator is instantiated and rendered\r\n static getDerivedStateFromProps(props, state) {\r\n /* temporary for testing\r\n Object.keys(props.data).map(i => console.log(`props.data - ${i} = ${props.data[i]}`));\r\n Object.keys(props.rules).map(i => {\r\n console.log(`props.rules - ${i} = ${props.rules[i]}`)\r\n Object.keys(props.rules[i]).map(j => console.log(`props.rules[i][j] - ${j} = ${props.rules[i][j]}`));\r\n }\r\n );\r\n */\r\n\r\n //pass in a blank object if props.rules is undefined\r\n //state.errors = ValidateData(props.data, props.rules || {}, props.t, props.updateStoreFormData);\r\n state.errors = ValidateData(props.data, props.controlItems || {}, props.t, props.user || {});\r\n if (props.inlineErrorRef) {\r\n props.inlineErrorRef.current = state.errors;\r\n }\r\n //Temporary logging function to log all errors\r\n // Object.keys(state.errors).map((i) => console.log(`log error ${i} = ${state.errors[i]}`));\r\n\r\n //console.log(state.errors.form)\r\n // if (state.formSubmitted && Object.keys(state.errors).length === 0) {\r\n // let formErrors = props.validateForm(props.data, props.controlItems);\r\n // console.log(formErrors);\r\n // if (Object.keys(formErrors).length > 0) {\r\n // state.formErrors = formErrors;\r\n // }\r\n // state.formSubmitted = false;\r\n // }\r\n return state;\r\n }\r\n\r\n clearFormErrors = (field = '') => {\r\n if (this.state.formSubmitted === true) {\r\n if (field === '') {\r\n this.setState({formSubmitted: false, formErrors: {}});\r\n } else if (this.state.formErrors[field]) {\r\n let formErrors = {...this.state.formErrors};\r\n delete formErrors[field];\r\n this.setState({formErrors});\r\n }\r\n }\r\n };\r\n\r\n handleChange = (event) => {\r\n event.persist();\r\n let name = event.target.name;\r\n this.setState((state) => (state.dirty[name] = true));\r\n this.clearFormErrors(name);\r\n };\r\n formValid = () => {\r\n return Object.keys(this.state.formErrors).length === 0;\r\n };\r\n fieldsValid = () => {\r\n return Object.keys(this.state.errors).length === 0;\r\n };\r\n handleClick = (event) => {\r\n //event should be persisted so that event.target does not loose its value after async operation\r\n event.persist();\r\n this.clearFormErrors(event.target.name);\r\n if (\r\n event.target &&\r\n event.target.name &&\r\n this.props.submitField &&\r\n this.props.submitField.includes(event.target.name)\r\n ) {\r\n this.clearFormErrors();\r\n let formErrors = this.props.validateForm(this.props.data, this.props.controlItems);\r\n this.setState({formSubmitted: true, dirty: {}, formErrors}, () => {\r\n if (Object.keys(this.state.errors).length > 0) {\r\n Object.keys(this.state.errors).forEach(\r\n (field) => (this.props.controlItems[field].isDirty = true)\r\n );\r\n }\r\n Object.keys(formErrors).forEach((field) => (this.props.controlItems[field].isDirty = true));\r\n if (this.formValid() && this.fieldsValid()) {\r\n this.props.submit(event, event.target.name, event.target.value);\r\n } else {\r\n this.props.error(formErrors, event, event.target.name, event.target.value);\r\n }\r\n });\r\n }\r\n };\r\n\r\n getButtonClasses() {\r\n return this.state.formSubmitted && !this.formValid ? 'btn-danger' : 'btn-primary';\r\n }\r\n\r\n getMessagesForField = (field) => {\r\n if (field === '') {\r\n return this.state.errors;\r\n } else if (field === 'form') {\r\n return this.state.formErrors;\r\n // return this.state.formSubmitted || this.state.dirty[field] || true ? this.state.formErrors || [] : [];\r\n } else {\r\n return this.state.formSubmitted || this.state.dirty[field] || true\r\n ? this.state.errors[field] || []\r\n : [];\r\n }\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n {this.props.children}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n/**\r\n * withPCTranslation: provides translation and controlItems\r\n */\r\nexport default withPCTranslation(FormValidator);\r\n","import validator from 'validator';\r\nimport {formatDisplay} from '../utils/inputTypeUtils';\r\n\r\n//The 'rules' fields will match the ControlItem fields:\r\n//FieldType, UseLimits, Min, Max, Disabled, ShowStatus, LoadText, ShowToolTip, IsError, UseChoiceItems, UseRecallItems, UseOptionItems, UseLinkItems\r\n//ChoiceItems, ToolTipItems, RecallItems, OptionItems, LinkItems, AllowZero, SkipBusinessRules, IncludeInReporting, DecimalPlaces\r\n//---- Extra fields added for React: true, required\r\n//let temp = 0;\r\nexport function ValidateData(data, rules, t, user /*, updateData*/) {\r\n let errors = {};\r\n if (!user) {\r\n return errors;\r\n }\r\n let errorCount = 0;\r\n const msg_range = t('msg-Range');\r\n const msg_textLength = t('msg-TextLength');\r\n const msg_checked = t('msg-checked');\r\n const msg_required = t('msg-required');\r\n\r\n const msg_min = t('msg-min');\r\n const msg_max = t('msg-max');\r\n const msg_option = t('msg-Option');\r\n const msg_validEmail = t('msg-ValidEmail');\r\n const msg_validPhone = t('msg-ValidPhone');\r\n\r\n //Temporary fix for province validation in about you screen in proquote\r\n const allowedProvinces = ['Alberta', 'Ontario', 'British Columbia', 'Manitoba', 'Saskatchewan'];\r\n //return errors;\r\n Object.keys(data).forEach((field) => {\r\n //console.log(`validate field = ${field}`);\r\n //console.log(`inside custom validation`);\r\n if (rules.hasOwnProperty(field)) {\r\n let fielderrors = [];\r\n //console.log(data);\r\n let val = data[field];\r\n\r\n //To avoid running runRecalls in case of error for a field\r\n rules[field].isError = false;\r\n // if(field==='txtTermRiderAge'){\r\n // console.log(temp++)\r\n // }\r\n //Checkboxes cause things to blow up so we ignore them if not required\r\n if (\r\n // (rules[field].fieldType === \"input_Check\" ||\r\n // rules[field].fieldType === \"input_MultiCheck\" ||\r\n // rules[field].fieldType === \"input_List\" ||\r\n // rules[field].fieldType === \"input_Radio\" ||\r\n // rules[field].fieldType === \"input_Group\" ||\r\n // rules[field].fieldType === \"input_Date\" ||\r\n // rules[field].fieldType === \"input_Label\" ||\r\n // rules[field].fieldType === \"input_Combo\" ||\r\n // rules[field].fieldType === \"input_Text\" ||\r\n // rules[field].fieldType === \"input_Number\" ||\r\n // rules[field].fieldType === \"input_Email\" ||\r\n // rules[field].fieldType === \"input_Phone\" ||\r\n // rules[field].fieldType === \"input_Name\") &&\r\n // !rules[field].required ||\r\n rules[field].disabled ||\r\n rules[field].displayHidden ||\r\n rules[field].fieldType === 'input_Date' ||\r\n rules[field].fieldType === 'input_Files' ||\r\n rules[field].fieldType === 'input_List' ||\r\n rules[field].fieldType === 'input_Button'\r\n ) {\r\n //do nothing\r\n } else {\r\n if (rules[field].fieldType === 'input_Email') {\r\n if (data['CurrentField'] !== field && rules[field].required) {\r\n if (validator.isEmpty(val)) {\r\n fielderrors.push(msg_required);\r\n rules[field].isError = true;\r\n } else if (!validator.isEmail(val)) {\r\n fielderrors.push(msg_validEmail);\r\n rules[field].isError = true;\r\n }\r\n }\r\n } else if (rules[field].fieldType === 'input_Phone') {\r\n if (data['CurrentField'] !== field && rules[field].required) {\r\n if (validator.isEmpty(val)) {\r\n fielderrors.push(msg_required);\r\n rules[field].isError = true;\r\n } else if (data[field].length !== rules[field].maxLength && data[field].length > 0) {\r\n fielderrors.push(msg_validPhone);\r\n rules[field].isError = true;\r\n }\r\n }\r\n } else if (rules[field].fieldType === 'input_Check') {\r\n if (!val && rules[field].required) {\r\n //fielderrors.push(\"Must be checked\");\r\n fielderrors.push(msg_checked);\r\n rules[field].isError = true;\r\n }\r\n } else if (rules[field].fieldType === 'input_Combo') {\r\n if (validator.isEmpty(val) && rules[field].required) {\r\n fielderrors.push(msg_option);\r\n rules[field].isError = true;\r\n }\r\n // This is temporary fix for province field on about you page\r\n else if (\r\n rules[field].required &&\r\n field === 'cboProquoteProvince' &&\r\n !allowedProvinces.includes(val)\r\n ) {\r\n const message = t('cboProquoteProvince-error', {province: val});\r\n fielderrors.push(message);\r\n rules[field].isError = true;\r\n }\r\n } else if (rules[field].fieldType === 'input_Radio') {\r\n if (validator.isEmpty(val) && rules[field].required) {\r\n fielderrors.push(msg_option);\r\n rules[field].isError = true;\r\n }\r\n } else {\r\n if (rules[field].required && validator.isEmpty(val)) {\r\n fielderrors.push(msg_required);\r\n rules[field].isError = true;\r\n }\r\n if (!validator.isEmpty(val)) {\r\n if (rules[field].useMinLength) {\r\n if (rules[field].fieldType === 'input_Text') {\r\n if (data[field].length < rules[field].minLength && data['CurrentField'] !== field) {\r\n fielderrors.push(\r\n `${msg_textLength}: ${msg_min}: ${rules[field].minLength} ${msg_max}: ${rules[field].maxLength}`\r\n );\r\n rules[field].isError = true;\r\n }\r\n }\r\n }\r\n if (rules[field].useLimits) {\r\n let minLimit = formatDisplay(\r\n user.inputLanguage,\r\n rules[field].min,\r\n rules[field].fieldType,\r\n rules[field].decimalPlaces\r\n );\r\n let maxLimit = formatDisplay(\r\n user.inputLanguage,\r\n rules[field].max,\r\n rules[field].fieldType,\r\n rules[field].decimalPlaces\r\n );\r\n if (\r\n rules[field].fieldType === 'input_Integer' ||\r\n rules[field].fieldType === 'input_Dollar_Integer' ||\r\n rules[field].fieldType === 'input_Number'\r\n ) {\r\n if (rules[field].allowZero && parseInt(val) === 0) {\r\n //Do Nothing\r\n } else if (!validator.isInt(val, {min: rules[field].min, max: rules[field].max})) {\r\n fielderrors.push(`${msg_range}: ${msg_min}: ${minLimit} ${msg_max}: ${maxLimit}`);\r\n rules[field].isError = true;\r\n }\r\n } else {\r\n if (\r\n rules[field].fieldType === 'input_Real' ||\r\n rules[field].fieldType === 'input_Dollar' ||\r\n rules[field].fieldType === 'input_Percent'\r\n ) {\r\n if (rules[field].allowZero && parseFloat(val) === 0) {\r\n //Do Nothing\r\n } else if (\r\n !validator.isFloat(val, {\r\n min: rules[field].min,\r\n max: rules[field].max,\r\n decimal_digits: rules[field].decimalPlaces,\r\n })\r\n ) {\r\n fielderrors.push(\r\n `${msg_range}: ${msg_min}: ${minLimit} ${msg_max}: ${maxLimit}`\r\n );\r\n rules[field].isError = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (fielderrors.length > 0) {\r\n errors[field] = fielderrors;\r\n }\r\n }\r\n errorCount = errorCount + fielderrors.length;\r\n }\r\n });\r\n data['numErrors'] = errorCount;\r\n if (errorCount > 0) {\r\n data['lblPremium'] = 'Not Applicable';\r\n }\r\n //errors['numErrors'] = errorCount;\r\n if (sessionStorage.getItem('newBusiness')) {\r\n let cache = JSON.parse(sessionStorage.getItem('newBusiness'));\r\n cache['numErrors'] = errorCount;\r\n sessionStorage.setItem('newBusiness', JSON.stringify(cache));\r\n }\r\n //updateData('numErrors', errorCount, 'newBusiness');\r\n return errors;\r\n}\r\n","import React, {Component} from 'react';\r\nimport StatusContext from './StatusContext';\r\nimport {ICONS, STYLES} from 'core/constants/uiConstants';\r\nimport {Icon} from 'core/uicore';\r\n\r\nclass StatusMessage extends Component {\r\n static contextType = StatusContext;\r\n\r\n render() {\r\n //When the field is blank then we display nothing\r\n if (this.props.field === '') {\r\n let testObject = this.context.getStatusForField('');\r\n\r\n return Object.keys(testObject).map((i) => (\r\n
\r\n {this.props.useIcon && }\r\n {`${testObject[i]}`}\r\n
\r\n ));\r\n }\r\n }\r\n}\r\n\r\n//This is setting the property to true even when it is being passed in?\r\nStatusMessage.defaultProps = {\r\n useIcon: true,\r\n};\r\n\r\nexport default StatusMessage;\r\n","import React, {Component} from 'react';\r\nimport {StatusMessage, StatusContext} from '.';\r\n//import { StatusContext } from \"../formValidation\";\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {withPCTranslation} from 'core/hocs';\r\n\r\nclass StatusDisplay extends Component {\r\n static contextType = StatusContext;\r\n\r\n formatValue = (data) => (Array.isArray(data) ? data.join(', ') : data.toString());\r\n\r\n render() {\r\n let testObject = this.context.getStatusForField('');\r\n let msg_status = this.props.t('msg-Status');\r\n const {\r\n propStyle: {container, header, summary, message},\r\n } = this.props;\r\n return (\r\n
\r\n
{msg_status}
\r\n {Object.keys(testObject).length === 0 ? (\r\n
\r\n
\r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withPCTranslation(StatusDisplay);\r\n","import React, {Fragment, useContext} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {ICONS, INPUTTYPES, STYLES} from 'core/constants/uiConstants';\r\nimport ValidationContext from './ValidationContext';\r\nimport {Icon} from 'core/uicore';\r\nimport {usePCTranslation} from 'core/hooks';\r\n\r\nconst ValidationMessage = ({field, useIcon, propStyle: {validationmsg, erroricon}}) => {\r\n const {errors, formErrors} = useContext(ValidationContext);\r\n const {t} = usePCTranslation();\r\n const controlItems = useSelector((state) => state.setupItems.controlItems);\r\n\r\n if (field === '') {\r\n const errorArray = Object.keys(errors).filter((item) => controlItems[item].isDirty === true);\r\n const listEl = (item) => (\r\n
  • \r\n {useIcon && }\r\n {t(`${item}-error`) === '' ? t(`${item}-caption`) : t(`${item}-error`)}\r\n {/* {controlItems[item].fieldType === INPUTTYPES.INPUT_CHECK ? t(`${item}-error`) : t(`${item}-caption`)} */}\r\n
  • \r\n );\r\n\r\n return ;\r\n } else if (field === 'form') {\r\n return (\r\n \r\n {Object.keys(formErrors).map((error) => (\r\n
    \r\n \r\n
    \r\n ))}\r\n
    \r\n );\r\n } else {\r\n const fieldError = errors[field];\r\n if (fieldError && fieldError.length > 0) {\r\n if (useIcon) {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n } else {\r\n return (\r\n \r\n );\r\n }\r\n } else {\r\n return null;\r\n }\r\n }\r\n};\r\nexport default ValidationMessage;\r\n","import {isTerm100Policy, isTermPolicy, isWholeLifePolicy} from 'custom/common/report/constants';\r\nimport {calcAgeNearest} from 'custom/common/utils/lookupFunctions';\r\nimport {firstYearPremium} from '../redux/reducers';\r\n\r\nexport const initialFormData = {\r\n formName: \"ProQuote\",\r\n current: \"personal\",\r\n txtProquoteFirstName: \"\",\r\n txtProquoteLastName: \"\",\r\n txtProquoteFullName: \"\",\r\n txtProquoteEmail: \"\",\r\n txtProquotePhone: \"\",\r\n rdoProquoteGender: \"\",\r\n dtProquoteDob: new Date(),\r\n rdoProquoteSmokeClass: \"\",\r\n rdoProquoteHealthMatch: \"S\",\r\n // cboProquoteProduct: '0131',\r\n rdoProquoteTermPolicy: \"\",\r\n rdoProquoteWLPolicy: \"\",\r\n txtProquoteProduct: \"\",\r\n txtProquoteFaceAmount: \"250000\",\r\n rdoProquotePaymentFrequency: \"\",\r\n rdoProquoteDividendOption: \"NONE\",\r\n rdoProquotePremiumOffset: \"\",\r\n btnProquoteSkip: false,\r\n rdoProquoteWaiver: \"\",\r\n // cboProquoteWaiverRating: '100',\r\n rdoProquoteADB: \"\",\r\n txtProquoteADBAmount: \"100000\",\r\n // cboProquoteADBRating: '100',\r\n rdoProquoteCPB: \"\",\r\n txtProquoteCPBAmount: \"25000\",\r\n rdoProquoteGPO: \"\",\r\n txtProquoteGPOAmount: \"50000\",\r\n rdoProquoteWPD: \"\",\r\n rdoProquoteAIB: \"\",\r\n txtProquoteAIBOwnerAge: \"40\",\r\n btnProquoteViewQuote: \"\",\r\n cboProquoteProvince: \"\",\r\n txtProQuotePageNumber: \"1\",\r\n chkProQuoteCASL: false,\r\n rdoProquoteLeadSource: \"\",\r\n fintel_click_id: \"\",\r\n productid: \"\",\r\n utm_campaign: \"\",\r\n utm_source: \"\",\r\n utm_medium: \"\",\r\n utm_term: \"\",\r\n utm_content: \"\",\r\n};\r\n\r\n// export const buildProductOptionItems = (interfaceSetupArray, age) => {\r\n// let optionsProduct = {};\r\n\r\n// if (!interfaceSetupArray) {\r\n// return optionsProduct;\r\n// }\r\n// for (let item of interfaceSetupArray) {\r\n// if (item.isDisplayed && item.policyType !== 'UL') {\r\n// if (age >= item.ageMin && age <= item.ageMax) {\r\n// optionsProduct[`0${item.prodID}`] = item.prodName;\r\n// }\r\n// }\r\n// }\r\n// return optionsProduct;\r\n// };\r\nexport const buildProductOptionItems = (interfaceSetupArray, age) => {\r\n let termOptions = {};\r\n let wlOptions = {};\r\n\r\n if (!interfaceSetupArray) {\r\n return {termOptions, wlOptions};\r\n }\r\n for (let item of interfaceSetupArray) {\r\n // if (item.isDisplayed && item.policyType !== 'UL') {\r\n if (age >= item.ageMin && age <= item.ageMax) {\r\n if (isTerm100Policy(`0${item.prodID}`) || isTermPolicy(`0${item.prodID}`)) {\r\n termOptions[`0${item.prodID}`] = item.displayName;\r\n } else if (isWholeLifePolicy(`0${item.prodID}`)) {\r\n wlOptions[`0${item.prodID}`] = item.displayName;\r\n }\r\n // }\r\n }\r\n }\r\n return {termOptions, wlOptions};\r\n};\r\n\r\nexport const getAgeInYears = (dob, today) => {\r\n const yearDiff = today.getFullYear() - dob.getFullYear();\r\n const monthDiff = today.getMonth() - dob.getMonth();\r\n const dateDiff = today.getDate() - dob.getDate();\r\n\r\n const age = yearDiff + (monthDiff < 0 ? -1 : monthDiff === 0 ? (dateDiff < 0 ? -1 : 0) : 0);\r\n return age;\r\n};\r\n\r\nexport const calcDataGenerator = (formData) => {\r\n let calcData = {\r\n formName: 'ProQuote',\r\n cboSelectUser: 'All',\r\n cboProduct: '0602',\r\n cboProductID: 602,\r\n cboPaymentMode: '012',\r\n txtFaceAmount: '250000',\r\n txtOwnerName: '',\r\n txtInsuredName: '',\r\n txtAge: '40',\r\n cboSex: 'M',\r\n cboSmokeClass: 'N',\r\n cboRateClass: 'S',\r\n chkRatings: false,\r\n cboRating: '100',\r\n txtFlatExtra: '0',\r\n txtFlatExtraDuration: '0',\r\n txtInsuredName2: '',\r\n txtAge2: '40',\r\n cboSex2: 'M',\r\n cboSmokeClass2: 'N',\r\n cboRateClass2: 'S',\r\n chkRatings2: false,\r\n txtRatedESA: '40',\r\n txtCalculatedESA: '40',\r\n jointAgeMin: '25',\r\n jointAgeMax: '80',\r\n chkWaiver: false,\r\n cboWaiverRating: '100',\r\n chkADB: false,\r\n txtADBAmount: '100000',\r\n cboADBRating: '100',\r\n chkCPB: false,\r\n txtCPBAmount: '25000',\r\n chkWPD: false,\r\n cboWPDRating: '100',\r\n chkGPO: false,\r\n txtGPOAmount: '50000',\r\n cboGPORating: '100',\r\n chkAIB: false,\r\n txtAIBOwnerAge: '20',\r\n cboAIBRating: '100',\r\n btnPremium: '',\r\n btnFullPremium: '',\r\n CurrentField: 'cboProduct', //The CurrentField should be set on GetFocus and unset on LostFocus as the StatusDisplay uses this to know which field to get the status for. Though initialized with a custom value on first load Status setting\r\n numErrors: 0,\r\n rdoDuration: 'All',\r\n chkCoverPage: true,\r\n chkTaxPage: false,\r\n chkUnderwritingPage: false,\r\n chkComplianceNotice: false,\r\n chkProductCompare: false,\r\n isRunCompare: false,\r\n chkInternalRoR: false,\r\n chkCharitableGiving: false,\r\n chkInsuranceInvestment: false,\r\n chkSharedOwnership: false,\r\n txtCharitableGivingIntRate: '1',\r\n txtCharitableGivingTaxRate: '40.16',\r\n txtInsuranceInvestmentIntRate: '1',\r\n txtInsuranceInvestmentTaxRate: '40.16',\r\n cboSelectedYears: '5',\r\n cboIntervalYears: '2',\r\n cboPolicyType: 'SINGLE',\r\n chkPremiumOffsetIllustration: false,\r\n txtPy1: '10',\r\n txtPy2: '20',\r\n txtPy3: '0',\r\n txtPy4: '0',\r\n txtPy5: '0',\r\n txtAgeD1: '65',\r\n txtAgeD2: '85',\r\n txtAgeD3: '100',\r\n txtAgeD4: '0',\r\n txtAgeD5: '0',\r\n switchInforce: '',\r\n lblPremium: 'Not Applicable',\r\n cboDividendOption: 'NONE',\r\n cboDeathBenefitType: 'LF',\r\n cboCOIType: 'L',\r\n txtTargetAccountValue1: '10000',\r\n txtTargetYear1: '60',\r\n cboDepositType: 'S',\r\n cboFaceAmountType: 'S',\r\n txtDepositAmount: '720',\r\n txtDepositDuration: '60',\r\n txtTargetAccountValue2: '10000',\r\n txtTargetYear2: '60',\r\n chkFundSelection1: false,\r\n cboFundSelection1: 'DI',\r\n txtFundSelectionInterestRate1: '1.25',\r\n txtFundSelectionAllocationPercent1: '100',\r\n chkFundSelection2: false,\r\n cboFundSelection2: 'CBF',\r\n txtFundSelectionInterestRate2: '1.50',\r\n txtFundSelectionAllocationPercent2: '0',\r\n chkFundSelection3: false,\r\n cboFundSelection3: 'CEFI',\r\n txtFundSelectionInterestRate3: '5.95',\r\n txtFundSelectionAllocationPercent3: '0',\r\n chkFundSelection4: false,\r\n cboFundSelection4: 'APEF',\r\n txtFundSelectionInterestRate4: '4.15',\r\n txtFundSelectionAllocationPercent4: '0',\r\n isSummaryDirty: true,\r\n txtEmployerBenefitPeriod: '60',\r\n txtEmployerPayPeriod: '25',\r\n isSharedOwnership: false,\r\n isRunningBatch: false,\r\n txtFaceAmountSolvePremium: '500',\r\n txtNewBusinessIncomeStartAge: '65',\r\n txtNewBusinessIncomeEndAge: '100',\r\n txtNewBusinessIncomeAmount: '1000',\r\n cboNewBusinessIncomeType: 'N',\r\n cboNewBusinessIncomeBasis: 'W',\r\n chkProductCompare: false,\r\n cboRateClass: 'S',\r\n chkTerm10: true,\r\n txtTermFaceAmount10: '250000',\r\n cboTermDurationType10: 'A',\r\n txtTermDuration10: '85',\r\n chkTerm20: false,\r\n txtTermFaceAmount20: '250000',\r\n cboTermDurationType20: 'A',\r\n txtTermDuration20: '85',\r\n chkTerm30: false,\r\n txtTermFaceAmount30: '250000',\r\n cboTermDurationType30: 'A',\r\n txtTermDuration30: '85',\r\n chkADO: false,\r\n txtADOAmount: '120',\r\n txtADODuration: '60',\r\n chkPremiumOffsetIllustration: false,\r\n chkSolveADO: false,\r\n txtSolvePremiumPUA: '3500',\r\n txtSolveADOPremiumPUA: '0',\r\n chkCoveragePage: false,\r\n chkHealthMatchPage: false,\r\n chkBenefitsPage: false,\r\n chkMemberBenefits: true,\r\n faceSolveType: '0',\r\n isProductHealthMatch: true,\r\n isHealthMatch: true,\r\n rdoPremiumOffset: 'O',\r\n txtPremiumOffsetYear: '20',\r\n isAllowDividends: false,\r\n healthMatchMinFaceAmount: 1000001,\r\n txtTotalFaceAmount: '250000',\r\n };\r\n formData['txtProquoteFullName'] =\r\n formData['txtProquoteFirstName'] + ' ' + formData['txtProquoteLastName'];\r\n calcData['txtOwnerName'] = formData['txtProquoteFullName'];\r\n calcData['txtInsuredName'] = formData['txtProquoteFullName'];\r\n\r\n //Only one of the control value can be set and will be used as product value for calculation.\r\n calcData['cboProduct'] = formData['rdoProquoteTermPolicy'];\r\n if (formData['rdoProquoteTermPolicy'] === '') {\r\n calcData['cboProduct'] = formData['rdoProquoteWLPolicy'];\r\n }\r\n calcData['txtFaceAmount'] = formData['txtProquoteFaceAmount'];\r\n calcData['txtTermFaceAmount10'] = formData['txtProquoteFaceAmount'];\r\n calcData['txtTermFaceAmount20'] = formData['txtProquoteFaceAmount'];\r\n calcData['txtTermFaceAmount30'] = formData['txtProquoteFaceAmount'];\r\n if (isTermPolicy(calcData['cboProduct'])) {\r\n switch (calcData['cboProduct']) {\r\n case '0897':\r\n calcData['chkTerm10'] = true;\r\n calcData['chkTerm20'] = false;\r\n calcData['chkTerm30'] = false;\r\n break;\r\n case '0898':\r\n calcData['chkTerm10'] = false;\r\n calcData['chkTerm20'] = true;\r\n calcData['chkTerm30'] = false;\r\n break;\r\n case '0899':\r\n calcData['chkTerm10'] = false;\r\n calcData['chkTerm20'] = false;\r\n calcData['chkTerm30'] = true;\r\n break;\r\n default:\r\n }\r\n calcData['txtProduct'] = calcData['cboProduct'];\r\n calcData['cboProductID'] = 180;\r\n calcData['cboProduct'] = '0180';\r\n } else {\r\n calcData['chkTerm10'] = calcData['chkTerm20'] = calcData['chkTerm30'] = false;\r\n calcData['txtProduct'] = calcData['cboProduct'];\r\n calcData['cboProductID'] = parseInt(calcData['cboProduct']);\r\n }\r\n\r\n calcData['txtAge'] = calcAgeNearest(formData['dtProquoteDob'], new Date()).toString();\r\n calcData['cboPaymentMode'] = formData['rdoProquotePaymentFrequency'];\r\n calcData['cboSex'] = formData['rdoProquoteGender'];\r\n calcData['cboSmokeClass'] = formData['rdoProquoteSmokeClass'] === 'Y' ? 'S' : 'N';\r\n calcData['cboRateClass'] = formData['rdoProquoteHealthMatch'];\r\n //We are required to include the health match page if Health Match is not Standard\r\n if (formData['rdoProquoteHealthMatch'] != 'S') {\r\n calcData['chkHealthMatchPage'] = true;\r\n }\r\n calcData['chkWaiver'] = formData['rdoProquoteWaiver'] === 'ADDED';\r\n // calcData['cboWaiverRating'] = formData['cboProquoteWaiverRating'];\r\n calcData['chkADB'] = formData['rdoProquoteADB'] === 'ADDED';\r\n calcData['txtADBAmount'] = formData['txtProquoteADBAmount'];\r\n // calcData['cboADBRating'] = formData['cboProquoteADBRating'];\r\n calcData['chkCPB'] = formData['rdoProquoteCPB'] === 'ADDED';\r\n calcData['txtCPBAmount'] = formData['txtProquoteCPBAmount'];\r\n calcData['chkWPD'] = formData['rdoProquoteWPD'] === 'ADDED';\r\n calcData['chkGPO'] = formData['rdoProquoteGPO'] === 'ADDED';\r\n calcData['txtGPOAmount'] = formData['txtProquoteGPOAmount'];\r\n calcData['chkAIB'] = formData['rdoProquoteAIB'] === 'ADDED';\r\n calcData['txtAIBOwnerAge'] = formData['txtProquoteAIBOwnerAge'];\r\n calcData['chkGPO'] = formData['rdoProquoteGPO'] === 'ADDED';\r\n calcData['txtGPOAmount'] = formData['txtProquoteGPOAmount'];\r\n\r\n if (\r\n calcData['chkWaiver'] == 1 ||\r\n calcData['chkADB'] == 1 ||\r\n calcData['chkCPB'] == 1 ||\r\n calcData['chkWPD'] == 1 ||\r\n calcData['chkGPO'] == 1 ||\r\n calcData['chkAIB'] == 1\r\n ) {\r\n calcData['chkBenefitsPage'] = true;\r\n }\r\n\r\n calcData['chkPremiumOffsetIllustration'] = formData['rdoProquotePremiumOffset'] === 'ADDED';\r\n calcData['cboDividendOption'] = formData['rdoProquoteDividendOption'];\r\n calcData['chkProQuoteCASL'] = formData['chkProQuoteCASL'];\r\n return calcData;\r\n};\r\n\r\nexport const getTerm = (optionText) => {\r\n if (optionText.includes('Term') && optionText !== 'Term to 100') {\r\n return `${optionText.slice(4)} years`;\r\n } else if (optionText === 'Term to 100') {\r\n return 'To age 100';\r\n } else {\r\n return 'For life';\r\n }\r\n};\r\n\r\nexport const formatCoverage = (displayValue = \"0\") => {\r\n let value = +displayValue;\r\n if (displayValue < 1000) {\r\n value = `$${displayValue}`;\r\n } else if (displayValue < 1000000) {\r\n value = `$${displayValue / 1000}k`;\r\n } else if (displayValue >= 1000000) {\r\n value = `$${displayValue / 1000000}M`;\r\n }\r\n return value;\r\n};\r\n\r\nexport const getModalPremium = (firstYearPremium) => {\r\n for (let columnItem of firstYearPremium.columnItems) {\r\n if (columnItem.name === 'ModalPremium') {\r\n //console.log(\"FOUND\");\r\n return formatValue(firstYearPremium.dblTableData_Main[1][columnItem.columnNumber]);\r\n }\r\n }\r\n};\r\n\r\nconst formatValue = (n) => {\r\n return '$' + n.toFixed(2).replace(/\\d(?=(\\d{3})+\\.)/g, '$&,');\r\n};\r\n\r\nexport const getFrequency = (formData) => {\r\n if (formData['rdoProquotePaymentFrequency'] === '012') {\r\n return 'per year';\r\n } else if (formData['rdoProquotePaymentFrequency'] === '06') {\r\n return 'semi-annually';\r\n } else if (formData['rdoProquotePaymentFrequency'] === '03') {\r\n return 'per quarter';\r\n } else if (formData['rdoProquotePaymentFrequency'] === '01') {\r\n return 'per month';\r\n }\r\n};\r\n\r\nexport const populateBenefits = (age, interfaceSetupItems) => {\r\n let benefits = [];\r\n if (interfaceSetupItems) {\r\n if (\r\n interfaceSetupItems['isAllowWaiver'] === true &&\r\n age >= interfaceSetupItems['waiverAgeMin'] &&\r\n age <= interfaceSetupItems['waiverAgeMax']\r\n ) {\r\n benefits.push('DPW');\r\n }\r\n if (\r\n interfaceSetupItems['isAllowADB'] === true &&\r\n age >= interfaceSetupItems['adbAgeMin'] &&\r\n age <= interfaceSetupItems['adbAgeMax']\r\n ) {\r\n benefits.push('ADB');\r\n }\r\n if (\r\n interfaceSetupItems['isAllowGPO'] === true &&\r\n age >= interfaceSetupItems['gpoAgeMin'] &&\r\n age <= interfaceSetupItems['gpoAgeMax']\r\n ) {\r\n benefits.push('GPO');\r\n }\r\n if (\r\n interfaceSetupItems['isAllowAIB'] === true &&\r\n age >= interfaceSetupItems['aibAgeMin'] &&\r\n age <= interfaceSetupItems['aibAgeMax']\r\n ) {\r\n benefits.push('AIB');\r\n }\r\n if (\r\n interfaceSetupItems['isAllowCPB'] === true &&\r\n age >= interfaceSetupItems['cpbAgeMin'] &&\r\n age <= interfaceSetupItems['cpbAgeMax']\r\n ) {\r\n benefits.push('Child Protector');\r\n }\r\n }\r\n return benefits;\r\n};\r\n","//Note that these plancodes match the ProdIDs from the interfaceSetup\r\nexport const ProdID = {\r\n TERM10: '0897',\r\n TERM20: '0898',\r\n TERM30: '0899',\r\n TERM100JOINT: '0562',\r\n TERM100: '0564',\r\n WHOLELIFE: '0903',\r\n WHOLELIFE20PAY: '0904',\r\n UL: '0602',\r\n};\r\n\r\nexport const DivOptions = {\r\n RAP: 'RAP',\r\n PUA: 'PUA',\r\n DOD: 'DOD',\r\n NONE: 'NONE',\r\n};\r\n\r\nexport const PolicyTypes = {\r\n SINGLE: 'SINGLE',\r\n JOINTFIRST: 'JOINTFIRST',\r\n JOINTLAST: 'JOINTLAST',\r\n};\r\n\r\nexport const interfaceItemsPolicyTypes = {\r\n TERM100: 'TERM100',\r\n LEVELTERM: 'LEVELTERM',\r\n WHOLELIFE: 'WHOLELIFE',\r\n UL: 'UL',\r\n};\r\n\r\n//term 10, term 20 or term 30\r\nexport const isTermPolicy = (prodId) => {\r\n return prodId === ProdID.TERM10 || prodId === ProdID.TERM20 || prodId === ProdID.TERM30;\r\n};\r\n\r\n//term 100\r\nexport const isTerm100Policy = (prodId) => {\r\n return prodId === ProdID.TERM100;\r\n};\r\n\r\n//whole life policy\r\nexport const isWholeLifePolicy = (prodId) => {\r\n return prodId === ProdID.WHOLELIFE || prodId === ProdID.WHOLELIFE20PAY;\r\n};\r\n\r\n//universal life policy\r\nexport const isUniversalLifePolicy = (prodId) => {\r\n return prodId === ProdID.UL;\r\n};\r\n","import React, {useState, useEffect, useContext} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {ValidationContext} from 'core/formValidation';\r\nimport {usePCTranslation} from 'core/hooks';\r\n\r\nconst Button = ({\r\n getclickCallback,\r\n getfocusCallback,\r\n lostfocusCallback,\r\n autoFocus,\r\n name,\r\n refItem,\r\n propStyle,\r\n logo,\r\n logoRight,\r\n showIcon,\r\n showIconRight,\r\n disableButton,\r\n isActive,\r\n type,\r\n allowPropagation,\r\n //t\r\n}) => {\r\n const {errors} = useContext(ValidationContext);\r\n const {t} = usePCTranslation();\r\n const {controlItem} = useSelector((state) => ({\r\n controlItem: state.setupItems.controlItems ? state.setupItems.controlItems[name] : null,\r\n }));\r\n // const {tInput} = useTranslation();\r\n // const [buttonText, setButtonText] = useState(\"\")\r\n // useEffect(() => {\r\n // setButtonText(t(`${name}-label`));\r\n // console.log(buttonText)\r\n // }, []);\r\n // console.log(buttonText);\r\n let isDisabled = false;\r\n //This condition is to disable buttons(like viewReport) in case of field level validation failed.\r\n if (controlItem && controlItem.disableOnError && Object.keys(errors).length > 0) {\r\n isDisabled = true;\r\n } else {\r\n isDisabled = disableButton;\r\n }\r\n // temp local variable\r\n if (controlItem && controlItem.displayDisabled) {\r\n isDisabled = controlItem.displayDisabled;\r\n }\r\n const [disabled, setDisabled] = useState(false);\r\n useEffect(() => {\r\n setDisabled(isDisabled);\r\n }, [isDisabled]);\r\n\r\n const controlOnClick = (event) => {\r\n event.persist();\r\n //the event.target.value is the after-change value here but...\r\n getclickCallback(event, name, event.target.value);\r\n //We do not want to stop this so that it can go to the validation routines\r\n //DO NOT propagate this event up as it should only be for the current control\r\n if (controlItem && controlItem.delayTime > 0 && !isDisabled) {\r\n setDisabled(true);\r\n setTimeout(() => {\r\n setDisabled(false);\r\n }, controlItem.delayTime);\r\n }\r\n };\r\n const controlOnFocus = (event) => {\r\n getfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n if (!allowPropagation) {\r\n event.stopPropagation();\r\n }\r\n };\r\n\r\n const controlOnLostFocus = (event) => {\r\n lostfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n if (!allowPropagation) {\r\n event.stopPropagation();\r\n }\r\n };\r\n\r\n let containerClass = `${STYLES.BASIC} ${STYLES.BUTTON} ${propStyle.control}`;\r\n if (disabled) {\r\n containerClass += ' button-disable';\r\n }\r\n if (controlItem && controlItem.displayHidden) {\r\n containerClass += ' hiddenField';\r\n }\r\n if (isActive) {\r\n containerClass += ' activeButton';\r\n }\r\n\r\n const convertUnicode = (input) => {\r\n return input.replace(/\\\\u(\\w\\w\\w\\w)/g, (a, b) => {\r\n var charcode = parseInt(b, 16);\r\n return String.fromCharCode(charcode);\r\n });\r\n };\r\n\r\n return (\r\n \r\n {showIcon && (\r\n \r\n )}\r\n {t(`${name}-label`)}\r\n {showIconRight && (\r\n \r\n )}\r\n {/* {t(`${name}-label`)} */}\r\n \r\n );\r\n};\r\n\r\nButton.defaultProps = {\r\n autoFocus: false,\r\n showIcon: false,\r\n showIconRight: false,\r\n disableButton: false,\r\n type: 'button',\r\n isActive: false,\r\n allowPropagation: false,\r\n};\r\nexport {Button};\r\n","import React, {Fragment, memo, useContext} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {TooltipIcon, TooltipText} from '../uicore';\r\nimport {usePCTranslation} from 'core/hooks';\r\nimport {ValidationContext} from 'core/formValidation';\r\n\r\nconst Checkbox = ({getchangeCallback, getfocusCallback, lostfocusCallback, stateData, checked, readOnly, name, text, autoFocus, refItem, propStyle}) => {\r\n const {t} = usePCTranslation();\r\n const {errors, formErrors} = useContext(ValidationContext);\r\n const {controlItem} = useSelector((state) => ({\r\n controlItem: state.setupItems.controlItems ? state.setupItems.controlItems[name] : null,\r\n }));\r\n\r\n const controlOnChange = (event) => {\r\n event.persist();\r\n //setIsChecked(event.target.checked);\r\n if (controlItem && !controlItem.locked) {\r\n getchangeCallback(event, event.target.name, event.target.checked);\r\n }\r\n //We do not want to stop this so that it can go to the validation routines\r\n //DO NOT propagate this event up as it should only be for the current control\r\n //event.stopPropagation();\r\n };\r\n\r\n const controlOnFocus = (event) => {\r\n getfocusCallback(event, event.target.name, event.target.checked);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n const controlOnLostFocus = (event) => {\r\n lostfocusCallback(event, event.target.name, event.target.checked);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n let containerClass = `${STYLES.INPUTCONTAINER} ${propStyle.checkcontainer}`;\r\n if (controlItem && controlItem.displayDisabled) {\r\n containerClass += ' disabled';\r\n }\r\n if (controlItem && controlItem.displayHidden) {\r\n containerClass += ' hiddenField';\r\n }\r\n if (controlItem && controlItem.locked) {\r\n containerClass += ' locked';\r\n }\r\n if ((formErrors[name] || errors[name]) && controlItem && controlItem.isDirty) {\r\n containerClass += ' errorState';\r\n }\r\n\r\n const checkInput = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n };\r\n return (\r\n
    \r\n {controlItem && !controlItem.showTooltip ? (\r\n checkInput()\r\n ) : controlItem && controlItem.showTooltipIcon ? (\r\n \r\n {checkInput()}\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n ) : (\r\n
    \r\n \r\n {checkInput()}\r\n
    \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nCheckbox.defaultProps = {\r\n autoFocus: false,\r\n readOnly: false,\r\n};\r\nexport {Checkbox};\r\n","import React, {useState, useEffect} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport ModalTitle from 'core/uicore/ModalTitle';\r\nimport {Modal} from 'core/uicore';\r\nimport {Button} from 'core/controls';\r\nimport {tickLogo, closeIcon} from 'assets';\r\nimport {usePCTranslation} from 'core/hooks';\r\nimport QuestionModalFooter from 'core/uicore/QuestionModalFooter';\r\n\r\nconst ComboModal = ({\r\n name,\r\n controlItem,\r\n optionItems,\r\n controlClick,\r\n controlGetFocus,\r\n onSelectProduct,\r\n onCancel,\r\n controlLostFocus,\r\n setElement,\r\n btnX,\r\n btnCancel,\r\n btnChoose,\r\n modalTitle,\r\n value,\r\n isUseInformation,\r\n}) => {\r\n const {user} = useSelector((state) => ({\r\n user: state.auth.user,\r\n // controlItems: state.setupItems.controlItems,\r\n }));\r\n const {t} = usePCTranslation();\r\n const [selectedItem, setSelectedItem] = useState('');\r\n\r\n useEffect(() => {\r\n setSelectedItem(value);\r\n }, []);\r\n\r\n // This is for clicking the product, item is index of the product\r\n const handleSelectItem = (item) => {\r\n setSelectedItem(item);\r\n };\r\n\r\n //This is for clicking Choose button and closing modal\r\n const handleChoose = () => {\r\n let event = {target: {name, value: selectedItem}, persist: () => {}, stopPropagation: () => {}};\r\n onSelectProduct(event);\r\n };\r\n\r\n return (\r\n e.stopPropagation()} propStyle='modalDark'>\r\n
    \r\n {\r\n controlClick(event, name, value);\r\n onCancel();\r\n }}\r\n lostfocusCallback={controlLostFocus}\r\n name={btnX}\r\n refItem={setElement}\r\n propStyle={{\r\n label: 'buttonlabel',\r\n control: `modalClose`,\r\n }}\r\n logo={{\r\n srcLogo: closeIcon,\r\n altLogo: '',\r\n classLogo: 'new-logo',\r\n }}\r\n showIcon={true}\r\n />\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {Object.keys(optionItems).map((key) => (\r\n handleSelectItem(key)}\r\n className={`PAGELINK flexContainer alignCenter paddingMed cursorPointer borderRadiusAll ${selectedItem === key ? 'activeLink' : ''}`}>\r\n
    \r\n
    \r\n \r\n {isUseInformation &&

    {t(`${key}-information`)}

    }\r\n
    \r\n \r\n
    \r\n
    \r\n ))}\r\n
    \r\n
    \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nexport {ComboModal};\r\n","import React, {Fragment} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport DatePicker from 'react-datepicker';\r\n// import \"react-datepicker/dist/react-datepicker.css\";\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {usePCTranslation} from 'core/hooks';\r\nimport {TooltipText, TooltipIcon} from 'core/uicore';\r\n\r\nconst Datebox = ({\r\n getchangeCallback,\r\n getfocusCallback,\r\n lostfocusCallback,\r\n stateData,\r\n name,\r\n text,\r\n type,\r\n autoFocus,\r\n refItem,\r\n propStyle,\r\n format,\r\n minDate = null,\r\n maxDate = null,\r\n}) => {\r\n const {t} = usePCTranslation();\r\n const {controlItem} = useSelector((state) => ({\r\n controlItem: state.setupItems.controlItems ? state.setupItems.controlItems[name] : null,\r\n }));\r\n\r\n const controlOnChange = (date) => {\r\n //event.persist();\r\n //let value = formattedDate(date);\r\n //console.log(value);\r\n let event = {\r\n target: {\r\n name,\r\n date,\r\n },\r\n };\r\n getchangeCallback(event, name, date);\r\n };\r\n\r\n const controlOnFocus = (date) => {\r\n //let value = formattedDate(date);\r\n //console.log(value);\r\n let event = {\r\n target: {\r\n name,\r\n date,\r\n },\r\n };\r\n getfocusCallback(event, event.target.name, event.target.date);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n //event.stopPropagation();\r\n };\r\n const controlOnLostFocus = (date) => {\r\n //let value = formattedDate(date);\r\n //console.log(value);\r\n let event = {\r\n target: {\r\n name,\r\n date,\r\n },\r\n };\r\n lostfocusCallback(event, event.target.name, event.target.date);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n //event.stopPropagation();\r\n };\r\n\r\n let containerClass = `${STYLES.INPUTCONTAINER} ${STYLES.DATE} ${propStyle.datecontainer}`;\r\n if (controlItem && controlItem.displayDisabled) containerClass += ' disabled';\r\n if (controlItem && controlItem.displayHidden) containerClass += ' hiddenField';\r\n const dateInput = () => (\r\n
    \r\n controlOnChange(date)}\r\n disabled={controlItem && controlItem.displayDisabled}\r\n dateFormat={format}\r\n minDate={minDate}\r\n maxDate={maxDate}\r\n showMonthDropdown\r\n showYearDropdown\r\n dropdownMode=\"select\"\r\n ref={refItem}\r\n placeholderText={format.toLowerCase()}\r\n name={name}\r\n />\r\n
    \r\n );\r\n return (\r\n
    \r\n {!controlItem.showTooltip ? (\r\n \r\n {controlItem.showLabel && (\r\n \r\n {t(`${name}-caption`)}\r\n \r\n )}\r\n {dateInput()}\r\n \r\n ) : controlItem.showTooltipIcon ? (\r\n \r\n \r\n {t(`${name}-caption`)}\r\n \r\n
    \r\n \r\n \r\n
    \r\n {dateInput()}\r\n
    \r\n ) : (\r\n
    \r\n \r\n {t(`${name}-caption`)}\r\n \r\n {dateInput()}\r\n \r\n
    \r\n )}\r\n
    \r\n );\r\n};\r\nDatebox.defaultProps = {\r\n format: 'dd/MM/yyyy',\r\n};\r\nexport {Datebox};\r\n","import React, {Fragment, useState, useEffect, Suspense} from 'react';\r\nimport {useDropzone} from 'react-dropzone';\r\n\r\nimport _ from 'lodash';\r\nimport {Button} from 'core/controls';\r\nimport axios from 'api';\r\nimport {Modal, Spinner} from 'core/uicore';\r\nimport {closeIcon} from 'assets';\r\n\r\nconst FileViewer = React.lazy(() => import('react-file-viewer'));\r\n\r\nconst getMimeType = (fileType) => {\r\n let accept = undefined;\r\n switch (fileType) {\r\n case 'P':\r\n accept = 'application/pdf';\r\n break;\r\n case 'D':\r\n accept = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/msword';\r\n break;\r\n case 'I':\r\n accept = 'image/jpeg, image/png';\r\n break;\r\n case '*':\r\n default:\r\n break;\r\n }\r\n return accept;\r\n};\r\n\r\nconst FilePicker = ({name, controlChange, controlGetFocus, controlLostFocus, controlClick, setElement, formData}) => {\r\n const {acceptedFiles, getRootProps, open, getInputProps} = useDropzone({\r\n accept: getMimeType(formData['cboFileType']),\r\n noClick: true,\r\n noKeyboard: true,\r\n });\r\n const [isPreview, setIsPreview] = useState(false);\r\n const [previewFile, setPreviewFile] = useState({name: '', type: ''});\r\n const url = window.location.origin;\r\n\r\n useEffect(() => {\r\n let newFile = [];\r\n console.log(acceptedFiles);\r\n if (acceptedFiles.length > 0) {\r\n if (formData[name].length > 0) {\r\n newFile = formData[name].filter((file) => file.fileName === acceptedFiles[0].name);\r\n }\r\n if (newFile.length === 0) {\r\n let tempFiles = [...formData[name]];\r\n tempFiles.push({\r\n fileName: acceptedFiles[0].name,\r\n size: acceptedFiles[0].size,\r\n documentType: formData['cboDocumentType'],\r\n fileType: formData['cboFileType'],\r\n });\r\n let event = {\r\n target: {\r\n value: tempFiles,\r\n name,\r\n },\r\n };\r\n controlChange(event, name, tempFiles);\r\n\r\n //API call for file upload\r\n if (acceptedFiles.length > 1) {\r\n } else if (acceptedFiles.length === 1) {\r\n let f = new FormData();\r\n f.append('File', acceptedFiles[0]);\r\n f.append('FileDirectory', formData['policyNumber']);\r\n try {\r\n let policy = axios.post('/api/files/Upload', f, {headers: {'Content-Type': 'multipart/form-data'}});\r\n } catch (error) {\r\n console.log('upload error = ', error);\r\n }\r\n }\r\n }\r\n }\r\n }, [acceptedFiles]);\r\n\r\n const deleteFile = (event, idx) => {\r\n let tempFiles = formData[name].filter((file, id) => id !== idx);\r\n // setFiles(tempFiles);\r\n let file = new File(['This is dummy content'], formData[name][idx].fileName);\r\n console.log('Delete File', file);\r\n let f = new FormData();\r\n f.append('File', file);\r\n f.append('FileDirectory', formData['policyNumber']);\r\n try {\r\n let policy = axios.post('/api/files/DeleteFile', f, {headers: {'Content-Type': 'multipart/form-data'}});\r\n } catch (error) {\r\n console.log('upload error = ', error);\r\n }\r\n controlChange(event, name, tempFiles);\r\n };\r\n const clickPreview = (name) => {\r\n const typeArr = name.split('.');\r\n const type = typeArr[typeArr.length - 1];\r\n setPreviewFile({name, type});\r\n\r\n setTimeout(() => setIsPreview(true), 500);\r\n };\r\n const cancelPreview = () => {\r\n setIsPreview(false);\r\n setPreviewFile({name: '', type: ''});\r\n };\r\n let fileList;\r\n if (!formData || !formData[name] || formData[name.length === 0]) {\r\n fileList = undefined;\r\n } else {\r\n fileList = formData[name].map((file, idx) => {\r\n console.log(file);\r\n return (\r\n
  • \r\n {file.fileName} - {file.size} bytes\r\n
    \r\n {}}\r\n getclickCallback={(event, name, value) => {\r\n deleteFile(event, idx);\r\n controlClick(event, name, value);\r\n }}\r\n lostfocusCallback={() => {}}\r\n name='btnFileDelete'\r\n refItem={() => {}}\r\n propStyle={{\r\n label: 'buttonlabel',\r\n control: `buttonControl`,\r\n }}\r\n />\r\n {}}\r\n getclickCallback={(event, name, value) => {\r\n clickPreview(file.fileName);\r\n controlClick(event, name, value);\r\n }}\r\n lostfocusCallback={() => {}}\r\n name='btnFilePreview'\r\n refItem={() => {}}\r\n propStyle={{\r\n label: 'buttonlabel',\r\n control: `buttonControl`,\r\n }}\r\n />\r\n
    \r\n
  • \r\n );\r\n });\r\n }\r\n\r\n // console.log(formData[name]);\r\n return (\r\n
    \r\n
    \r\n \r\n

    Drag 'n' drop some files here, or click to select files

    \r\n {\r\n open(event);\r\n controlClick(event, name, value);\r\n }}\r\n lostfocusCallback={controlLostFocus}\r\n stateData={formData}\r\n name='btnAttachFile'\r\n refItem={setElement}\r\n propStyle={{\r\n label: 'buttonlabel',\r\n control: `buttoncontrol bgPrimaryColor borderRadiusAll`,\r\n }}\r\n allowPropagation={true}\r\n />\r\n
    \r\n \r\n {isPreview && (\r\n e.stopPropagation()} propStyle='modalDark'>\r\n
    \r\n {}}\r\n getclickCallback={(event, name, value) => {\r\n cancelPreview();\r\n controlClick(event, name, value);\r\n }}\r\n lostfocusCallback={() => {}}\r\n name='btnCancelFilePickerPreview'\r\n refItem={() => {}}\r\n propStyle={{\r\n label: 'buttonlabel',\r\n control: `modalClose`,\r\n }}\r\n logo={{\r\n srcLogo: closeIcon,\r\n altLogo: '',\r\n classLogo: 'new-logo',\r\n }}\r\n showIcon={true}\r\n />\r\n }>\r\n \r\n \r\n
    \r\n
    \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nexport {FilePicker};\r\n","import React, {Fragment} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {TooltipIcon, TooltipText} from '../uicore';\r\nimport {usePCTranslation} from 'core/hooks';\r\n\r\nconst Label = ({text, name, propStyle, useTranslation}) => {\r\n const {t} = usePCTranslation();\r\n const {controlItems} = useSelector((state) => ({\r\n controlItem: state.setupItems.controlItems,\r\n }));\r\n let labelText = useTranslation ? t(`${name}-label`) : text;\r\n\r\n const labelbox = () => (\r\n \r\n );\r\n return (\r\n
    \r\n {controlItems && controlItems[name] && controlItems[name].showTooltipIcon ? (\r\n \r\n
    \r\n \r\n \r\n
    \r\n {labelbox()}\r\n
    \r\n ) : (\r\n \r\n {controlItems && controlItems[name] && controlItems[name].showTooltip ? (\r\n \r\n
    \r\n \r\n {labelbox()}\r\n
    \r\n
    \r\n ) : (\r\n labelbox()\r\n )}\r\n
    \r\n )}\r\n
    \r\n );\r\n};\r\nLabel.defaultProps = {\r\n useTranslation: true,\r\n};\r\n\r\nexport {Label};\r\n","//https://github.com/text-mask/text-mask Reference link for MaskedInput component\r\n\r\nimport React, {useState, Fragment, useContext} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport MaskedInput from 'react-text-mask';\r\nimport {usePCTranslation} from 'core/hooks';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {ValidationContext, ValidationMessage} from 'core/formValidation';\r\nimport {TooltipText, TooltipIcon} from 'core/uicore';\r\nimport {getMaskForInput} from 'core/utils/inputTypeUtils';\r\n\r\nconst MaskedTextbox = ({getchangeCallback, getfocusCallback, lostfocusCallback, stateData, name, text, type, autoFocus, refItem, propStyle, readOnly, step, styleProp}) => {\r\n const {t} = usePCTranslation();\r\n const {errors, formErrors} = useContext(ValidationContext);\r\n const {controlItem, inputLanguage} = useSelector((state) => ({\r\n controlItem: state.setupItems.controlItems ? state.setupItems.controlItems[name] : null,\r\n inputLanguage: state.auth.user ? state.auth.user['inputLanguage'] : 'English',\r\n }));\r\n\r\n const controlOnChange = async (event) => {\r\n event.target.value = event.target.value.toUpperCase();\r\n await getchangeCallback(event, event.target.name, event.target.value);\r\n event.stopPropagation();\r\n };\r\n const controlOnFocus = (event) => {\r\n event.persist();\r\n setTimeout(() => {\r\n getfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n }, 0);\r\n };\r\n const controlOnLostFocus = (event) => {\r\n event.persist();\r\n // setFocus(false);\r\n setTimeout(() => {\r\n // console.log('controlOnLostFocus', event);\r\n lostfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n }, 0);\r\n };\r\n\r\n let containerClass = `${STYLES.INPUTCONTAINER} ${propStyle.textcontainer}`;\r\n if ((errors[name] || formErrors[name]) && controlItem && controlItem.isDirty) {\r\n containerClass += ' errorState';\r\n }\r\n if (controlItem && controlItem.displayDisabled) {\r\n containerClass += ' disabled';\r\n }\r\n if (controlItem && controlItem.displayHidden) {\r\n containerClass += ' hiddenField';\r\n }\r\n\r\n const textInput = () => {\r\n return (\r\n {}}\r\n autoFocus={autoFocus}\r\n onBlur={controlOnLostFocus}\r\n ref={refItem}\r\n maxLength={controlItem.maxLength}\r\n style={styleProp}\r\n autoComplete='new_off'\r\n />\r\n );\r\n };\r\n return (\r\n
    \r\n \r\n {!controlItem.showTooltip ? (\r\n textInput()\r\n ) : controlItem.showTooltipIcon ? (\r\n \r\n
    \r\n \r\n \r\n
    \r\n {textInput()}\r\n
    \r\n ) : (\r\n
    \r\n \r\n {textInput()}\r\n
    \r\n )}\r\n\r\n {controlItem && controlItem.isDirty && }\r\n
    \r\n );\r\n};\r\nMaskedTextbox.defaultProps = {\r\n autoFocus: false,\r\n readOnly: false,\r\n step: 0,\r\n styleProp: {},\r\n};\r\n\r\nexport {MaskedTextbox};\r\n","import React, {Fragment, useState, useEffect} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {TooltipIcon, TooltipText} from '../uicore';\r\nimport {usePCTranslation} from 'core/hooks';\r\n//ToDo: Problem with this implemenation is that if the name of the group of checkboxes is defaulted to a string, it does not automatically populate the control\r\n\r\nconst MultiCheckbox = ({name, text, stateData, options, refItem, autoFocus, getfocusCallback, lostfocusCallback, getchangeCallback, propStyle}) => {\r\n const [values, setValues] = useState([]);\r\n //Initialize the multi check values from StateData in case of refresh page.\r\n useEffect(() => {\r\n if (stateData && stateData[name]) {\r\n setValues(stateData[name].split('|'));\r\n }\r\n }, [stateData && stateData[name], name]);\r\n const {t} = usePCTranslation();\r\n const {controlItem} = useSelector((state) => ({\r\n controlItem: state.setupItems.controlItems ? state.setupItems.controlItems[name] : null,\r\n }));\r\n\r\n let optionItems = {};\r\n if (controlItem && controlItem.useOptions) {\r\n optionItems = controlItem.optionItems;\r\n } else {\r\n optionItems = options;\r\n }\r\n const controlOnChange = (event) => {\r\n event.persist();\r\n // let valArray = [];\r\n // valArray = stateData[name].split(\"|\");\r\n let tempVal = [...values];\r\n if (!tempVal.includes(event.target.value)) {\r\n tempVal.push(event.target.value);\r\n } else {\r\n for (let i = 0; i < tempVal.length; i++) {\r\n if (tempVal[i] === event.target.value) {\r\n tempVal.splice(i, 1);\r\n break;\r\n }\r\n }\r\n }\r\n setValues(tempVal);\r\n // console.log(values);\r\n getchangeCallback(event, event.target.name, tempVal.join('|'));\r\n //We do not want to stop this so that it can go to the validation routines\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n\r\n // this.setState(\r\n // state => {\r\n // if (event.target.checked) {\r\n // state[this.props.name].push(event.target.value);\r\n // } else {\r\n // let index = state[this.props.name].indexOf(event.target.value);\r\n // state[this.props.name].splice(index, 1);\r\n // }\r\n // },\r\n // () => {\r\n // this.props.getchangeCallback(event, this.state, this.props.name);\r\n // }\r\n // );\r\n //We do not want to stop this so that it can go to the validation routines\r\n //DO NOT propagate this event up as it should only be for the current control\r\n //event.stopPropagation();\r\n };\r\n\r\n const controlOnFocus = (event) => {\r\n getfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n const controlOnLostFocus = (event) => {\r\n lostfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n const checkLabel = () => {\r\n return (\r\n \r\n );\r\n };\r\n\r\n return (\r\n
    \r\n {!controlItem.showTooltip ? (\r\n checkLabel()\r\n ) : controlItem.showTooltipIcon ? (\r\n \r\n {checkLabel()}\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n ) : (\r\n
    \r\n \r\n {checkLabel()}\r\n
    \r\n )}\r\n
    \r\n {Object.keys(optionItems).map((key) => (\r\n
    \r\n \r\n \r\n
    \r\n ))}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nMultiCheckbox.defaultProps = {\r\n autoFocus: false,\r\n};\r\nexport {MultiCheckbox};\r\n","import React, {Fragment} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {TooltipIcon, TooltipText} from '../uicore';\r\nimport {usePCTranslation} from 'core/hooks';\r\n\r\nconst Radiobuttons = ({\r\n getchangeCallback,\r\n getfocusCallback,\r\n lostfocusCallback,\r\n text,\r\n name,\r\n autoFocus,\r\n choice,\r\n readOnly,\r\n options,\r\n stateData,\r\n refItem,\r\n propStyle,\r\n isDisabled,\r\n}) => {\r\n const {t} = usePCTranslation();\r\n const {controlItem} = useSelector((state) => ({\r\n controlItem: state.setupItems.controlItems ? state.setupItems.controlItems[name] : null,\r\n }));\r\n\r\n let optionItems = {};\r\n if (controlItem && controlItem.useOptions) {\r\n optionItems = controlItem.optionItems;\r\n }\r\n const controlOnChange = (event) => {\r\n //setSelectedOption(event.target.value);\r\n event.persist();\r\n //the event.target.value is the after-change value here but...\r\n getchangeCallback(event, event.target.name, event.target.value);\r\n //We do not want to stop this so that it can go to the validation routines\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n const controlOnFocus = (event) => {\r\n getfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n const controlOnLostFocus = (event) => {\r\n lostfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n let containerClass = `${STYLES.INPUTCONTAINER} ${propStyle.inputcontainer}`;\r\n if (isDisabled || (controlItem && controlItem.displayDisabled)) {\r\n containerClass += ' disabled';\r\n }\r\n if (controlItem && controlItem.displayHidden) {\r\n containerClass += ' hiddenField';\r\n }\r\n let radioContainerClass = `${STYLES.BASIC} ${STYLES.RADIOCONTAINER} ${propStyle.radiocontainer}`;\r\n if (isDisabled || (controlItem && controlItem.displayDisabled)) {\r\n radioContainerClass += ' disabled';\r\n }\r\n\r\n const radioLabel = () => {\r\n return (\r\n <>\r\n {controlItem.showLabel && (\r\n \r\n )}\r\n \r\n );\r\n };\r\n return (\r\n
    \r\n {!controlItem.showTooltip ? (\r\n radioLabel()\r\n ) : controlItem.showTooltipIcon ? (\r\n \r\n {radioLabel()}\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n ) : (\r\n
    \r\n \r\n {radioLabel()}\r\n
    \r\n )}\r\n
    \r\n {Object.keys(optionItems).map((key) => (\r\n
    \r\n \r\n \r\n
    \r\n ))}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nRadiobuttons.defaultProps = {\r\n autoFocus: false,\r\n choice: '',\r\n readOnly: false,\r\n};\r\n\r\nexport {Radiobuttons};\r\n","import React, {Fragment, memo, useState} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {TooltipIcon, TooltipText} from '../uicore';\r\nimport {ComboModal} from 'core/controls';\r\nimport {usePCTranslation} from 'core/hooks';\r\n\r\nconst Selectbox = ({\r\n getchangeCallback,\r\n getfocusCallback,\r\n lostfocusCallback,\r\n getclickCallback,\r\n stateData,\r\n name,\r\n text,\r\n options,\r\n autoFocus,\r\n refItem,\r\n propStyle,\r\n disable,\r\n showLabel,\r\n styleProp,\r\n isModalOptions,\r\n isUseInformation,\r\n btnXCancel,\r\n btnCancel,\r\n btnChoose,\r\n modalTitle,\r\n}) => {\r\n const {t} = usePCTranslation();\r\n const {controlItem} = useSelector((state) => ({\r\n controlItem: state.setupItems.controlItems ? state.setupItems.controlItems[name] : null,\r\n }));\r\n const [isModalOpen, setIsModalOpen] = useState(false);\r\n\r\n let optionItems = controlItem.optionItems;\r\n\r\n /**\r\n * Below condition is used by Data Reports and other apps where options is passed as a prop. Use Options is false\r\n * For Pro needs case, child's Uni year options is coming via controlItems. But useOptions is false in that case too.\r\n *\r\n */\r\n if (controlItem && !controlItem.useOptions) {\r\n optionItems = options;\r\n }\r\n if (!optionItems) {\r\n optionItems = {};\r\n }\r\n\r\n const controlOnChange = (event) => {\r\n event.persist();\r\n getchangeCallback(event, event.target.name, event.target.value);\r\n //We do not want to stop this so that it can go to the validation routines\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n const controlOnFocus = (event) => {\r\n getfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n const controlOnLostFocus = (event) => {\r\n lostfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n let containerClass = `${STYLES.INPUTCONTAINER} ${propStyle.selectcontainer}`;\r\n if (controlItem && controlItem.displayDisabled) {\r\n containerClass += ' disabled';\r\n }\r\n if (controlItem && controlItem.displayHidden) {\r\n containerClass += ' hiddenField';\r\n }\r\n\r\n const handleModalOpen = () => {\r\n if (isModalOptions) {\r\n setIsModalOpen(true);\r\n }\r\n };\r\n const handleSelectOption = (event) => {\r\n controlOnChange(event);\r\n setIsModalOpen(false);\r\n };\r\n\r\n const handleCancelModal = () => {\r\n setIsModalOpen(false);\r\n };\r\n\r\n const selectInput = () => {\r\n return (\r\n //
    \r\n // {/*
    */}\r\n \r\n {!isModalOptions &&\r\n Object.keys(optionItems).map((key) => (\r\n \r\n ))}\r\n \r\n //
    \r\n );\r\n };\r\n return (\r\n
    \r\n {showLabel && (\r\n \r\n )}\r\n {!controlItem.showTooltip ? (\r\n selectInput()\r\n ) : controlItem.showTooltipIcon ? (\r\n \r\n
    \r\n \r\n \r\n
    \r\n {selectInput()}\r\n
    \r\n ) : (\r\n
    \r\n \r\n {selectInput()}\r\n
    \r\n )}\r\n {isModalOptions && isModalOpen && (\r\n \r\n )}\r\n
    \r\n );\r\n};\r\n\r\nSelectbox.defaultProps = {\r\n isModalOptions: false,\r\n autoFocus: false,\r\n showLabel: true,\r\n styleProp: {},\r\n disable: false,\r\n options: {},\r\n getclickCallback: (event, name, value) => {},\r\n btnChoose: '',\r\n btnCancel: '',\r\n btnXCancel: '',\r\n modalTitle: '',\r\n isUseInformation: true,\r\n};\r\n\r\nexport {Selectbox};\r\n","import React, {useState, Fragment, memo, useEffect, useMemo, useContext} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {ValidationMessage, ValidationContext} from '../formValidation';\r\nimport {TooltipIcon, TooltipText} from '../uicore';\r\nimport {formatDisplay, parseInput, decimalToComma, commaToDecimal} from 'core/utils/inputTypeUtils';\r\nimport {INPUTTYPES, STYLES} from 'core/constants/uiConstants';\r\nimport {usePCTranslation} from 'core/hooks';\r\n\r\nconst Textbox = ({\r\n getchangeCallback,\r\n getfocusCallback,\r\n lostfocusCallback,\r\n stateData,\r\n name,\r\n text,\r\n type,\r\n autoFocus,\r\n refItem,\r\n propStyle,\r\n readOnly,\r\n step,\r\n placeholder,\r\n styleProp,\r\n}) => {\r\n const {t} = usePCTranslation();\r\n const {errors, formErrors} = useContext(ValidationContext);\r\n const {controlItem, inputLanguage} = useSelector((state) => ({\r\n controlItem: state.setupItems.controlItems ? state.setupItems.controlItems[name] : null,\r\n inputLanguage: state.auth.user ? state.auth.user['inputLanguage'] : 'English',\r\n }));\r\n const [textValue, setTextValue] = useState('');\r\n let currentState = stateData ? stateData : '';\r\n\r\n let formattedState = formatDisplay(\r\n inputLanguage,\r\n currentState,\r\n controlItem.fieldType,\r\n controlItem.decimalPlaces\r\n );\r\n if (\r\n controlItem &&\r\n (controlItem.fieldType === INPUTTYPES.INPUT_REAL ||\r\n controlItem.fieldType === INPUTTYPES.INPUT_DOLLAR ||\r\n controlItem.fieldType === INPUTTYPES.INPUT_PERCENT) &&\r\n inputLanguage === 'French'\r\n ) {\r\n currentState = decimalToComma(currentState);\r\n }\r\n const [focus, setFocus] = useState(false);\r\n\r\n // let isFocus = (stateData && stateData[\"CurrentField\"]===name) || false;\r\n let isReadOnly = controlItem.readOnly || readOnly;\r\n useEffect(() => {\r\n if (focus && !isReadOnly) {\r\n setTextValue(currentState);\r\n } else {\r\n setTextValue(formattedState);\r\n }\r\n // console.log(currentState, \"Use Effect testing\");\r\n }, [currentState, focus, formattedState]);\r\n\r\n //Label text\r\n // const [labelText, setLabelText] = useState(\"\");\r\n\r\n // useMemo(() => {setLabelText(t(`${name}-caption`))}, [inputLanguage]);\r\n const controlOnChange = async (event) => {\r\n //Cursor position was resetting to end of text box, as we are formatting the typed text in \"parseInput\" to meet certain input types criteria\r\n const cursorPos = event.target.selectionStart;\r\n\r\n // console.log(event);\r\n event.persist();\r\n let value = parseInput(inputLanguage, stateData, event, controlItem);\r\n // console.log(value);\r\n if (\r\n (controlItem.fieldType === INPUTTYPES.INPUT_REAL ||\r\n controlItem.fieldType === INPUTTYPES.INPUT_DOLLAR ||\r\n controlItem.fieldType === INPUTTYPES.INPUT_PERCENT) &&\r\n inputLanguage === 'French'\r\n ) {\r\n value = commaToDecimal(value);\r\n }\r\n let lengthOffset = lengthDifference(event.target.value, value);\r\n\r\n if (value !== textValue) {\r\n //setTextValue(value);\r\n await getchangeCallback(event, event.target.name, value);\r\n }\r\n event.target.setSelectionRange(cursorPos + lengthOffset, cursorPos + lengthOffset);\r\n\r\n //We do not want to stop this so that it can go to the validation routines\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n const lengthDifference = (oldVal, newVal) => {\r\n return newVal.length - oldVal.length;\r\n };\r\n const controlOnFocus = (event) => {\r\n event.persist();\r\n setFocus(true);\r\n setTimeout(() => {\r\n getfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n }, 0);\r\n };\r\n const removeLastPeriod = () => {\r\n if (stateData[stateData.length - 1] === '.') {\r\n stateData.splice(-1);\r\n }\r\n };\r\n const controlOnLostFocus = (event) => {\r\n event.persist();\r\n setFocus(false);\r\n setTimeout(() => {\r\n // console.log(\"controlOnLostFocus\",event);\r\n lostfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n }, 0);\r\n };\r\n\r\n let containerClass = `${STYLES.INPUTCONTAINER} ${propStyle.textcontainer}`;\r\n if ((errors[name] || formErrors[name]) && controlItem && controlItem.isDirty) {\r\n containerClass += ' errorState';\r\n }\r\n if (controlItem && controlItem.displayDisabled) {\r\n containerClass += ' disabled';\r\n }\r\n if (controlItem && controlItem.displayHidden) {\r\n containerClass += ' hiddenField';\r\n }\r\n\r\n // console.log(\"Textbox render test\");\r\n //utility internal function\r\n const textInput = () => {\r\n return (\r\n \r\n {}}\r\n onInput={controlOnChange}\r\n autoFocus={autoFocus}\r\n onBlur={controlOnLostFocus}\r\n ref={refItem}\r\n maxLength={controlItem.maxLength}\r\n style={styleProp}\r\n autoComplete=\"new_off\"\r\n placeholder={placeholder}\r\n />\r\n \r\n );\r\n };\r\n return (\r\n
    \r\n {/* {controlItems[name].showLabel && ( */}\r\n \r\n {!controlItem.showTooltip ? (\r\n textInput()\r\n ) : controlItem.showTooltipIcon ? (\r\n \r\n
    \r\n \r\n \r\n
    \r\n {textInput()}\r\n
    \r\n ) : (\r\n
    \r\n \r\n {textInput()}\r\n
    \r\n )}\r\n {controlItem && controlItem.isDirty && (\r\n \r\n )}\r\n
    \r\n );\r\n};\r\nTextbox.defaultProps = {\r\n autoFocus: false,\r\n readOnly: false,\r\n step: 0,\r\n styleProp: {},\r\n placeholder: '',\r\n};\r\n\r\nexport {Textbox};\r\n","import React, {useState, useEffect, Fragment, useContext} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {ValidationMessage, ValidationContext} from '../formValidation';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {TooltipIcon, TooltipText} from '../uicore';\r\nimport {usePCTranslation} from 'core/hooks';\r\n\r\nconst TextboxSubmit = ({getchangeCallback, getfocusCallback, lostfocusCallback, getclickCallback, stateData, name, text, autoFocus, readOnly, refItem, propStyle, buttonName, buttonType}) => {\r\n const {t} = usePCTranslation();\r\n const {errors, formErrors} = useContext(ValidationContext);\r\n const {controlItems} = useSelector((state) => ({\r\n controlItems: state.setupItems.controlItems ? state.setupItems.controlItems : null,\r\n }));\r\n\r\n let isDisabled = false;\r\n if (controlItems && controlItems[buttonName]) {\r\n isDisabled = controlItems[buttonName].displayDisabled;\r\n }\r\n const [isDisable, setIsDisable] = useState(false);\r\n useEffect(() => {\r\n setIsDisable(isDisabled);\r\n }, [isDisabled]);\r\n\r\n const controlOnChange = (event) => {\r\n event.persist();\r\n event.preventDefault();\r\n //the event.target.value is the after-change value here but...\r\n getchangeCallback(event, event.target.name, event.target.value);\r\n //We do not want to stop this so that it can go to the validation routines\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n const controlOnClick = (event) => {\r\n event.persist();\r\n //the event.target.value is the after-change value here but...\r\n getclickCallback(event, buttonName, event.target.value);\r\n //We do not want to stop this so that it can go to the validation routines\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n const controlOnFocus = (event) => {\r\n getfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n const controlOnLostFocus = (event) => {\r\n lostfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n let containerClass = `${STYLES.INPUTCONTAINER} ${propStyle.textcontainer}`;\r\n if ((errors[name] || formErrors[name]) && controlItems[name] && controlItems[name].isDirty) {\r\n containerClass += ' errorState';\r\n }\r\n if (controlItems && controlItems[name] && controlItems[name].displayDisabled) containerClass += ' disabled';\r\n if (controlItems && controlItems[name] && controlItems[name].displayHidden) containerClass += ' hiddenField';\r\n\r\n const convertUnicode = (input) => {\r\n return input.replace(/\\\\u(\\w\\w\\w\\w)/g, (a, b) => {\r\n var charcode = parseInt(b, 16);\r\n return String.fromCharCode(charcode);\r\n });\r\n };\r\n\r\n const submitInput = () => {\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n );\r\n };\r\n\r\n return (\r\n
    \r\n \r\n {!controlItems[name].showTooltip ? (\r\n submitInput()\r\n ) : controlItems[name].showTooltipIcon ? (\r\n \r\n
    \r\n \r\n \r\n
    \r\n {submitInput()}\r\n
    \r\n ) : (\r\n
    \r\n \r\n {submitInput()}\r\n
    \r\n )}\r\n\r\n \r\n
    \r\n );\r\n};\r\nTextboxSubmit.defaultProps = {\r\n autoFocus: false,\r\n readOnly: false,\r\n};\r\n\r\nexport {TextboxSubmit};\r\n","import React, {Fragment} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {TooltipIcon, TooltipText} from '../uicore';\r\nimport {usePCTranslation} from 'core/hooks';\r\n\r\nconst ChoiceButtons = ({\r\n getchangeCallback,\r\n getfocusCallback,\r\n lostfocusCallback,\r\n text,\r\n name,\r\n autoFocus,\r\n disableChoice,\r\n readOnly,\r\n options,\r\n stateData,\r\n refItem,\r\n propStyle,\r\n}) => {\r\n const {t} = usePCTranslation();\r\n const {controlItem} = useSelector((state) => ({\r\n controlItem: state.setupItems.controlItems ? state.setupItems.controlItems[name] : null,\r\n }));\r\n\r\n let optionItems = {};\r\n if (controlItem && controlItem.useOptions) {\r\n optionItems = controlItem.optionItems;\r\n }\r\n const controlOnChange = (event) => {\r\n //setSelectedOption(event.target.value);\r\n event.persist();\r\n //the event.target.value is the after-change value here but...\r\n getchangeCallback(event, event.target.name, event.target.value);\r\n //We do not want to stop this so that it can go to the validation routines\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n const controlOnFocus = (event) => {\r\n getfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n const controlOnLostFocus = (event) => {\r\n lostfocusCallback(event, event.target.name, event.target.value);\r\n //DO NOT propagate this event up as it should only be for the current control\r\n event.stopPropagation();\r\n };\r\n\r\n let containerClass = `${STYLES.INPUTCONTAINER} ${propStyle.inputcontainer}`;\r\n if (controlItem && controlItem.displayDisabled) containerClass += ' disabled';\r\n if (controlItem && controlItem.displayHidden) containerClass += ' hiddenField';\r\n\r\n const componentLabel = () => {\r\n return (\r\n <>\r\n {controlItem.showLabel && (\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n return (\r\n
    \r\n {!controlItem.showTooltip && !controlItem.showTooltipIcon && componentLabel()}\r\n {controlItem.showTooltip && controlItem.showTooltipIcon && (\r\n \r\n {componentLabel()}\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n )}\r\n {controlItem.showTooltip && !controlItem.showTooltipIcon && (\r\n
    \r\n \r\n {componentLabel()}\r\n
    \r\n )}\r\n\r\n
    \r\n {Object.keys(optionItems).map((key) => (\r\n
    \r\n
    \r\n \r\n \r\n {t(optionItems[key])}\r\n {controlItem.isSecondaryText && (\r\n \r\n {t(controlItem.secondaryText[key])}\r\n \r\n )}\r\n \r\n
    \r\n {!controlItem.showTooltip && controlItem.showTooltipIcon && (\r\n
    \r\n \r\n \r\n
    \r\n )}\r\n
    \r\n ))}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nChoiceButtons.defaultProps = {\r\n autoFocus: false,\r\n disableChoice: '',\r\n readOnly: false,\r\n};\r\n\r\nexport {ChoiceButtons};\r\n","import {useMemo} from 'react';\r\nimport {useParams, useLocation, useHistory, useRouteMatch} from 'react-router-dom';\r\nimport queryString from 'query-string';\r\n\r\n// Hook\r\nexport function useRouter() {\r\n const params = useParams();\r\n const location = useLocation();\r\n const history = useHistory();\r\n const match = useRouteMatch();\r\n\r\n // Return our custom router object\r\n // Memoize so that a new object is only returned if something changes\r\n return useMemo(() => {\r\n return {\r\n // For convenience add push(), replace(), pathname at top level\r\n push: history.push,\r\n replace: history.replace,\r\n pathname: location.pathname,\r\n // Merge params and parsed query string into single \"query\" object\r\n // so that they can be used interchangeably.\r\n // Example: /:topic?sort=popular -> { topic: \"react\", sort: \"popular\" }\r\n query: {\r\n ...queryString.parse(location.search), // Convert string to object\r\n ...params,\r\n },\r\n // Include match, location, history objects so we have\r\n // access to extra React Router functionality if needed.\r\n match,\r\n location,\r\n history,\r\n };\r\n }, [params, match, location, history]);\r\n}\r\n\r\n// Usage\r\nfunction MyComponent() {\r\n // Get the router object\r\n const router = useRouter();\r\n\r\n // Get value from query string (?postId=123) or route param (/:postId)\r\n console.log(router.query.postId);\r\n\r\n // Get current pathname\r\n console.log(router.pathname);\r\n const logout = () => {\r\n router.push('/logout');\r\n };\r\n // Navigate with with router.push()\r\n return null;\r\n}\r\n\r\nexport default useRouter;\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {withTranslation} from 'react-i18next';\r\n\r\nexport const withPCTranslation = (WrappedComponent) => {\r\n const mapStateToProps = (state) => ({\r\n user: state.auth.user,\r\n controlItems: state.setupItems.controlItems,\r\n });\r\n return connect(mapStateToProps)(\r\n withTranslation()(\r\n class ContainerComponent extends Component {\r\n state = {\r\n toggle: false,\r\n };\r\n toggleState = () => {\r\n this.setState((prevState) => {\r\n return {toggle: !prevState.toggle};\r\n });\r\n };\r\n\r\n tInput = (key, options) => {\r\n let value;\r\n if (this.props.user && this.props.user['inputLanguage'] === 'French') {\r\n value = this.props.t(`${key}-fr`, options);\r\n if (value === `${key}-fr`) {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n } else {\r\n value = this.props.t(`${key}-en`, options);\r\n if (value === `${key}-en`) {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n }\r\n };\r\n tReport = (key, options) => {\r\n let value;\r\n if (this.props.user && this.props.user['reportLanguage'] === 'French') {\r\n value = this.props.t(`${key}-fr`, options);\r\n if (value === `${key}-fr`) {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n } else {\r\n value = this.props.t(`${key}-en`, options);\r\n if (value === `${key}-en`) {\r\n return '';\r\n } else {\r\n return value;\r\n }\r\n }\r\n };\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n }\r\n )\r\n );\r\n};\r\n\r\nexport default withPCTranslation;\r\n","import React from 'react';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\n\r\nconst ButtonBar = ({children, name, buttonbar}) => (\r\n
    \r\n {children}\r\n
    \r\n);\r\n\r\nexport default ButtonBar;\r\n","import React, {useState} from 'react';\r\nimport {useSelector} from 'react-redux';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {usePCTranslation} from 'core/hooks';\r\n\r\nconst FieldContainer = ({\r\n children,\r\n name,\r\n tabName,\r\n activeTab,\r\n styling,\r\n // t,\r\n collapsable = true,\r\n // controlItems\r\n}) => {\r\n let [isHidden, setIsHidden] = useState(false);\r\n let {t} = usePCTranslation();\r\n let {controlItem} = useSelector((state) => ({\r\n controlItem: state.setupItems.controlItems ? state.setupItems.controlItems[name] : null,\r\n }));\r\n let classContent = `${STYLES.FIELDCONTENT} ${styling.content}`;\r\n let classHeader = `${STYLES.FIELDCONTAINERHEADER}${\r\n collapsable ? ' cursorPointer collapseIndicator collapseBlue collapseLeft' : ''\r\n }`;\r\n let containerClass = `${STYLES.FIELDCONTAINER} ${styling.container}`;\r\n if (controlItem && controlItem.displayHidden) {\r\n classContent += ' hiddenField';\r\n containerClass += ' hiddenField';\r\n }\r\n if (isHidden) {\r\n classContent += ' hiddenField';\r\n classHeader += ' collapsedHdr';\r\n }\r\n\r\n return (\r\n
    \r\n {collapsable ? (\r\n
    setIsHidden(!isHidden)} name={name}>\r\n {t(`${name}-label`)}\r\n
    \r\n ) : (\r\n
    \r\n {t(`${name}-label`)}\r\n
    \r\n )}\r\n\r\n
    \r\n {children}\r\n
    \r\n
    \r\n );\r\n};\r\n\r\nFieldContainer.defaultProps = {\r\n activeTab: '',\r\n tabName: '',\r\n};\r\n\r\nexport default FieldContainer;\r\n","import React from 'react';\r\n//const { PropTypes } = React;\r\nimport PropTypes from 'prop-types';\r\n\r\n//ToDo: get icon color working!\r\nexport const Icon = (props) => {\r\n const styles = {\r\n svg: {\r\n display: 'inline-block',\r\n verticalAlign: 'middle',\r\n margin: '10px',\r\n float: 'right',\r\n color: 'purple',\r\n },\r\n path: {\r\n fill: props.color,\r\n },\r\n };\r\n let newStyle = {};\r\n Object.assign(newStyle, styles.svg);\r\n newStyle['float'] = props.float;\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nIcon.propTypes = {\r\n icon: PropTypes.string.isRequired,\r\n size: PropTypes.number,\r\n color: PropTypes.string,\r\n};\r\n\r\nIcon.defaultProps = {\r\n size: 16,\r\n float: 'right',\r\n};\r\n\r\nexport default Icon;\r\n","import React, { Component } from 'react';\r\nimport { STYLES } from 'core/constants/uiConstants';\r\nimport { withPCTranslation } from 'core/hocs';\r\n\r\nexport const formatValue = (n) => {\r\n return n ? \"$\" + n.toFixed(2).replace(/\\d(?=(\\d{3})+\\.)/g, \"$&,\") : \"\";\r\n};\r\n\r\nclass PremiumDisplay extends Component {\r\n coverageItemsDisplay = (msg_basepremium, policyVal) => {\r\n const { insuranceData, t } = this.props;\r\n const {\r\n propStyle: { summary, coveragetype, coveragevalue },\r\n stateData,\r\n } = this.props;\r\n if (Object.keys(insuranceData).length > 0 && !stateData[\"numErrors\"] > 0) {\r\n const termsKeyArr = [];\r\n const benefitsKeyArr = [];\r\n for (let key in insuranceData.coverageListItems) {\r\n if (key.includes(\"Term\")) {\r\n termsKeyArr.push(key);\r\n } else {\r\n benefitsKeyArr.push(key);\r\n }\r\n }\r\n const keyArr = [...termsKeyArr, 'memberBenefit', ...benefitsKeyArr]; //merging 2 arrays by keeping terms first and then benefits\r\n return keyArr.map((key) => {\r\n\r\n if(key === 'memberBenefit'){\r\n return \r\n
    \r\n {t('msg-memberBenefit')}\r\n
    \r\n \r\n {\"$0.00\"}\r\n
    \r\n \r\n }\r\n return (\r\n \r\n
    \r\n {key.includes(\"Term\")\r\n ? msg_basepremium\r\n : t(insuranceData.coverageListItems[key].coverageType)}\r\n
    \r\n \r\n {key.includes(\"Term\")\r\n ? formatValue(\r\n policyVal +\r\n insuranceData.coverageListItems[key].modalPremium\r\n )\r\n : formatValue(\r\n insuranceData.coverageListItems[key].modalPremium\r\n )}\r\n \r\n \r\n );\r\n });\r\n }\r\n return null;\r\n };\r\n\r\n render() {\r\n const { insuranceData } = this.props;\r\n //let msg_premiumsummary = this.props.t('msg-PremiumSummary');\r\n let msg_basepremium = this.props.t(\"msg-BasePremium\");\r\n let msg_policyfee = this.props.t(\"msg-PolicyFee\");\r\n let msg_annualpremium = this.props.t('msg-AnnualPremium');\r\n\r\n\r\n let msg_nodata = this.props.t(\"msg-NoData\");\r\n let msg_notApplicable = this.props.t(\"msg-NotApplicable\");\r\n const {\r\n propStyle: { container, header, summary, coveragetype, coveragevalue },\r\n stateData,\r\n } = this.props;\r\n\r\n if (Object.keys(insuranceData).length === 0) {\r\n return (\r\n \r\n {msg_nodata}\r\n \r\n );\r\n } else {\r\n //const errors = this.props.stateData['numErrors'] == 0;\r\n if (\r\n this.props.stateData[\"numErrors\"] > 0 ||\r\n insuranceData.jointAgeError\r\n ) {\r\n return (\r\n \r\n {/*
    \r\n {msg_premiumsummary}\r\n
    */}\r\n
    \r\n {msg_notApplicable}\r\n
    \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n {/*
    \r\n {msg_premiumsummary}\r\n
    */}\r\n\r\n
    \r\n \r\n
    \r\n {this.props.stateData[\"cboProduct\"] === \"0180\"\r\n ? msg_policyfee\r\n : msg_basepremium}\r\n
    \r\n \r\n {formatValue(this.getInitialPremiumByID(\"001\"))}\r\n
    \r\n \r\n\r\n {this.coverageItemsDisplay(\r\n msg_basepremium,\r\n this.getInitialPremiumByID(\"001\")\r\n )}\r\n\r\n \r\n
    \r\n {msg_annualpremium}\r\n
    \r\n \r\n {formatValue(this.getInitialCalcValueByName(\"AnnualPremium\"))}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n }\r\n\r\n getInitialPremiumByID(strCoverageID) {\r\n if (!this.props.insuranceData) {\r\n return 0;\r\n }\r\n for (let columnItem of this.props.insuranceData.columnItems) {\r\n if (columnItem.name === \"ModalPremium_\" + strCoverageID) {\r\n //console.log(\"FOUND\");\r\n //Object.keys(aColumnItem).map(i => console.log(`${i} = ${aColumnItem[i]}`));\r\n //console.log(this.props.insuranceData.dblTableData_Main[1][aColumnItem.columnNumber]);\r\n return this.props.insuranceData.dblTableData_Main[1][\r\n columnItem.columnNumber\r\n ];\r\n }\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n getInitialPremiumByName(strName) {\r\n for (let columnItem of this.props.insuranceData.columnItems) {\r\n if (columnItem.name === strName) {\r\n //console.log(\"FOUND\");\r\n return this.getInitialPremiumByID(columnItem.coverageID);\r\n }\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n getInitialCalcValueByName(strName) {\r\n for (let columnItem of this.props.insuranceData.columnItems) {\r\n if (columnItem.name === strName) {\r\n //console.log(\"FOUND\");\r\n return this.props.insuranceData.dblTableData_Main[1][\r\n columnItem.columnNumber\r\n ];\r\n }\r\n }\r\n\r\n return 0;\r\n }\r\n}\r\n\r\nexport default withPCTranslation(PremiumDisplay);\r\n","import React, { Fragment } from \"react\";\r\nimport spinner from \"assets/spinner.gif\";\r\n\r\nconst Spinner = ({ styling=\"\" }) => (\r\n
    \r\n \r\n
    \r\n);\r\n\r\nexport default Spinner;\r\n","import React from 'react';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {usePCTranslation} from 'core/hooks';\r\n\r\nconst Tab = ({activeTab, name, onClick}) => {\r\n const {t} = usePCTranslation();\r\n\r\n let className = STYLES.TABLISTITEM;\r\n if (activeTab === name) {\r\n className = `${className} ${STYLES.TABLISTACTIVE}`;\r\n }\r\n const onClickItem = (event) => {\r\n onClick(event, name, event.target.value);\r\n };\r\n return (\r\n
  • \r\n {t(`${name}-label`)}\r\n
  • \r\n );\r\n};\r\nexport default Tab;\r\n","import React from 'react';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\n\r\nconst TooltipIcon = ({name}) => {\r\n return (\r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default TooltipIcon;\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nimport Tab from './Tab';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport TabContent from './TabContent';\r\n\r\nclass Tabs extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n activeTab: this.props.children[0].props.name,\r\n };\r\n }\r\n\r\n onClickTabItem = (event, tab, value) => {\r\n this.setState({activeTab: tab});\r\n this.props.setActiveTab(event, tab, value);\r\n };\r\n\r\n render() {\r\n const {\r\n onClickTabItem,\r\n props: {children},\r\n state: {activeTab},\r\n } = this;\r\n\r\n return (\r\n
    \r\n
      \r\n {children.map((child) => {\r\n if (child === undefined) {\r\n return undefined;\r\n }\r\n const {name} = child.props;\r\n\r\n return ;\r\n })}\r\n
    \r\n {children.map((child) => {\r\n if (child === undefined) {\r\n return undefined;\r\n }\r\n const {name, children, styling} = child.props;\r\n let classNames = `${STYLES.TABCONTENT} ${styling} `;\r\n if (name === activeTab) classNames += STYLES.TABCONTENTACTIVE;\r\n return (\r\n // \r\n
    \r\n {children}\r\n
    \r\n );\r\n })}\r\n
    \r\n );\r\n }\r\n}\r\nTabs.propTypes = {\r\n children: PropTypes.instanceOf(Array).isRequired,\r\n};\r\n\r\nexport default Tabs;\r\n","import React from 'react';\r\nimport {STYLES} from 'core/constants/uiConstants';\r\nimport {usePCTranslation} from 'core/hooks';\r\n\r\nconst TooltipText = ({name}) => {\r\n const {t} = usePCTranslation();\r\n return (\r\n
    \r\n {t(`${name}-tooltip`)}\r\n
    \r\n );\r\n};\r\n\r\nexport default TooltipText;\r\n","//import { globalVariables } from \"./util\";\r\n\r\nlet globalVariables = {\r\n isAppLoading: true,\r\n};\r\nconst $ = require('jquery');\r\n\r\nexport function hideControlBatch(fieldArray, controlItems, updateControlItems) {\r\n for (let item = 0; item < fieldArray.length - 1; item++) {\r\n hideControl(fieldArray[item], controlItems, updateControlItems, false);\r\n }\r\n hideControl(fieldArray[fieldArray.length - 1], controlItems, updateControlItems, true);\r\n}\r\nexport function hideControl(name, controlItems, updateControlItems, isUpdateControlItems = true) {\r\n //We are using jquery to hide and show controls\r\n //if(controlItems[name].disabled !== true){\r\n\r\n // $(`input[name=${name}]`).hide();\r\n // $(`select[name=${name}]`).hide();\r\n // $(`label[name=${name}]`).hide();\r\n // $(`div[name=${name}]`).hide();\r\n // $(`li[name=${name}]`).hide();\r\n // $(`#${name}`).hide();\r\n $(`div[id*=${name}]`).each((i, el) => {\r\n $(el).hide();\r\n });\r\n $(`input[name*=${name}]`).each((i, el) => {\r\n $(el).hide();\r\n });\r\n $(`select[name*=${name}]`).each((i, el) => {\r\n $(el).hide();\r\n });\r\n $(`label[name*=${name}]`).each((i, el) => {\r\n $(el).hide();\r\n });\r\n $(`div[name*=${name}]`).each((i, el) => {\r\n $(el).hide();\r\n });\r\n $(`li[name*=${name}]`).each((i, el) => {\r\n $(el).hide();\r\n });\r\n if (controlItems && controlItems[name]) {\r\n controlItems[name].disabled = true; //Global variable, not for page rendering\r\n\r\n if (isUpdateControlItems && !globalVariables.isAppLoading) {\r\n updateControlItems(name, 'displayHidden', true);\r\n } else {\r\n controlItems[name].displayHidden = true;\r\n }\r\n }\r\n //\r\n // }\r\n}\r\n\r\nexport function showControlBatch(fieldArray, controlItems, updateControlItems) {\r\n for (let item = 0; item < fieldArray.length - 1; item++) {\r\n showControl(fieldArray[item], controlItems, updateControlItems, false);\r\n }\r\n showControl(fieldArray[fieldArray.length - 1], controlItems, updateControlItems, true);\r\n}\r\nexport function showControl(name, controlItems, updateControlItems, isUpdateControlItems = true) {\r\n //We are using jquery to hide and show controls\r\n // if(controlItems[name].disabled !== false){\r\n // $(`input[name=${name}]`).show();\r\n // $(`select[name=${name}]`).show();\r\n // $(`label[name=${name}]`).show();\r\n // //Removing style attribute, it was adding {display: block;} for UL Options tab and displaying tab contents in all tabs\r\n // $(`div[name=${name}]`).show().removeAttr('style');\r\n // $(`li[name=${name}]`).show();\r\n // $(`#${name}`).show();\r\n $(`div[id*=${name}]`).each((i, el) => {\r\n $(el).show().removeAttr('style');\r\n });\r\n $(`input[name*=${name}]`).each((i, el) => {\r\n $(el).show().removeAttr('style');\r\n });\r\n $(`select[name*=${name}]`).each((i, el) => {\r\n $(el).show().removeAttr('style');\r\n });\r\n $(`label[name*=${name}]`).each((i, el) => {\r\n $(el).show().removeAttr('style');\r\n });\r\n $(`div[name*=${name}]`).each((i, el) => {\r\n $(el).show().removeAttr('style');\r\n });\r\n $(`li[name*=${name}]`).each((i, el) => {\r\n $(el).show().removeAttr('style');\r\n });\r\n\r\n if (controlItems && controlItems[name]) {\r\n controlItems[name].disabled = false;\r\n if (isUpdateControlItems && !globalVariables.isAppLoading) {\r\n updateControlItems(name, 'displayHidden', false);\r\n } else {\r\n controlItems[name].displayHidden = false;\r\n }\r\n }\r\n // }\r\n}\r\n\r\nexport function disableControlBatch(fieldArray, elementItems, controlItems, updateControlItems) {\r\n for (let item = 0; item < fieldArray.length - 1; item++) {\r\n disableControl(fieldArray[item], elementItems, controlItems, updateControlItems, false);\r\n }\r\n if (fieldArray.length > 0) {\r\n disableControl(\r\n fieldArray[fieldArray.length - 1],\r\n elementItems,\r\n controlItems,\r\n updateControlItems,\r\n true\r\n );\r\n }\r\n}\r\n\r\nexport function disableControl(\r\n name,\r\n elementItems,\r\n controlItems,\r\n updateControlItems,\r\n isUpdateControlItems = true\r\n) {\r\n if (elementItems && elementItems[name]) {\r\n let element = elementItems[name];\r\n element.disabled = 'disabled';\r\n }\r\n //updateControlItems(name, 'disabled', true);\r\n if (controlItems && controlItems[name]) {\r\n controlItems[name].disabled = true;\r\n if (isUpdateControlItems && !globalVariables.isAppLoading) {\r\n updateControlItems(name, 'displayDisabled', true);\r\n } else {\r\n controlItems[name].displayDisabled = true;\r\n }\r\n }\r\n}\r\nexport function enableControlBatch(fieldArray, elementItems, controlItems, updateControlItems) {\r\n for (let item = 0; item < fieldArray.length - 1; item++) {\r\n enableControl(fieldArray[item], elementItems, controlItems, updateControlItems, false);\r\n }\r\n if (fieldArray.length > 0) {\r\n enableControl(\r\n fieldArray[fieldArray.length - 1],\r\n elementItems,\r\n controlItems,\r\n updateControlItems,\r\n true\r\n );\r\n }\r\n}\r\nexport function enableControl(\r\n name,\r\n elementItems,\r\n controlItems,\r\n updateControlItems,\r\n isUpdateControlItems = true\r\n) {\r\n if (elementItems && elementItems[name]) {\r\n let element = elementItems[name];\r\n element.disabled = '';\r\n }\r\n //updateControlItems(name, 'disabled', false);\r\n controlItems[name].disabled = false;\r\n if (isUpdateControlItems && !globalVariables.isAppLoading) {\r\n updateControlItems(name, 'displayDisabled', false);\r\n } else {\r\n controlItems[name].displayDisabled = false;\r\n }\r\n}\r\n\r\nexport function lockControl(name, elementItems, controlItems) {\r\n if (elementItems && controlItems && elementItems[name] && controlItems[name]) {\r\n controlItems[name].locked = true;\r\n }\r\n}\r\n\r\nexport function unlockControl(name, elementItems, controlItems) {\r\n if (elementItems && controlItems && elementItems[name] && controlItems[name]) {\r\n controlItems[name].locked = false;\r\n }\r\n}\r\n","function sessionStore(formName, name, value) {\r\n let cacheData = {};\r\n if (sessionStorage.getItem(formName)) {\r\n cacheData = JSON.parse(sessionStorage.getItem(formName));\r\n cacheData = {...cacheData, [name]: value};\r\n sessionStorage.setItem(formName, JSON.stringify(cacheData));\r\n }\r\n}\r\n//this utility will update store as well as session storage\r\nexport function updateStoreFormSessionData(formData, name, value = '', updateFormData = () => {}) {\r\n switch (formData['formName']) {\r\n case 'illustration':\r\n formData[name] = value;\r\n sessionStore('newBusiness', name, value);\r\n // formData[name] = value;\r\n // sessionStore(\"newBusiness\", name, value);\r\n break;\r\n case 'inforce':\r\n formData[name] = value;\r\n sessionStore('inforceFormData', name, value);\r\n break;\r\n case 'alphalookup':\r\n break;\r\n case 'eApplication':\r\n formData[name] = value;\r\n sessionStore('eAppFormData', name, value);\r\n break;\r\n case 'dataReports':\r\n updateFormData(formData[name], value);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n}\r\n\r\nexport const setContentHeight = (delay = 100) => {\r\n // setTimeout(() => {\r\n // let height = 0;\r\n // let list = document.querySelectorAll('.fixedPageHdr');\r\n // list.forEach((item) => {\r\n // height += item.offsetHeight;\r\n // });\r\n // let contentEl = document.getElementById('content-id');\r\n // if (contentEl) {\r\n // contentEl.style.marginTop = height + 'px';\r\n // }\r\n // }, 100);\r\n // setTimeout(() => {\r\n // let height = 0;\r\n // let list = document.querySelectorAll('.fixedPageHdr');\r\n // list.forEach((item) => {\r\n // height += item.offsetHeight;\r\n // });\r\n // let contentEl = document.getElementById('content-id');\r\n // if (contentEl) {\r\n // contentEl.style.marginTop = height + 'px';\r\n // }\r\n // }, 200);\r\n // setTimeout(() => {\r\n // let height = 0;\r\n // let list = document.querySelectorAll('.fixedPageHdr');\r\n // list.forEach((item) => {\r\n // height += item.offsetHeight;\r\n // });\r\n // let contentEl = document.getElementById('content-id');\r\n // if (contentEl) {\r\n // contentEl.style.marginTop = height + 'px';\r\n // }\r\n // }, 300);\r\n};\r\n","import {\r\n hideControl,\r\n showControl,\r\n disableControl,\r\n enableControl,\r\n showControlBatch,\r\n hideControlBatch,\r\n enableControlBatch,\r\n disableControlBatch,\r\n lockControl,\r\n unlockControl,\r\n} from 'core/utils/globalUtils';\r\nimport {getAgeInYears} from 'custom/proQuote/utils/data';\r\nimport {calcAgeNearest} from 'custom/common/utils/lookupFunctions';\r\nimport {DivOptions} from '../report/constants';\r\n\r\nimport {updateStoreFormSessionData} from './functions';\r\n\r\nlet pageSelection = {\r\n chkCoverPage: JSON.parse(sessionStorage.getItem('newBusiness'))\r\n ? JSON.parse(sessionStorage.getItem('newBusiness')).chkCoverPage\r\n : true,\r\n chkTaxPage: JSON.parse(sessionStorage.getItem('newBusiness'))\r\n ? JSON.parse(sessionStorage.getItem('newBusiness')).chkTaxPage\r\n : false,\r\n chkUnderwritingPage: JSON.parse(sessionStorage.getItem('newBusiness'))\r\n ? JSON.parse(sessionStorage.getItem('newBusiness')).chkUnderwritingPage\r\n : false,\r\n chkComplianceNotice: JSON.parse(sessionStorage.getItem('newBusiness'))\r\n ? JSON.parse(sessionStorage.getItem('newBusiness')).chkComplianceNotice\r\n : true,\r\n};\r\n\r\nlet conceptSelection = {\r\n chkProductCompare: JSON.parse(sessionStorage.getItem('newBusiness'))\r\n ? JSON.parse(sessionStorage.getItem('newBusiness')).chkProductCompare\r\n : false,\r\n chkInternalRoR: JSON.parse(sessionStorage.getItem('newBusiness'))\r\n ? JSON.parse(sessionStorage.getItem('newBusiness')).chkInternalRoR\r\n : false,\r\n chkCharitableGiving: JSON.parse(sessionStorage.getItem('newBusiness'))\r\n ? JSON.parse(sessionStorage.getItem('newBusiness')).chkCharitableGiving\r\n : false,\r\n chkInsuranceInvestment: JSON.parse(sessionStorage.getItem('newBusiness'))\r\n ? JSON.parse(sessionStorage.getItem('newBusiness')).chkInsuranceInvestment\r\n : false,\r\n chkSharedOwnership: JSON.parse(sessionStorage.getItem('newBusiness'))\r\n ? JSON.parse(sessionStorage.getItem('newBusiness')).chkSharedOwnership\r\n : false,\r\n};\r\n\r\nexport function getPageConceptSelection() {\r\n return {pageSelection, conceptSelection};\r\n}\r\nexport function initializePageConceptSelection(formData) {\r\n let sessData = JSON.parse(sessionStorage.getItem('pageConcept'));\r\n if (sessData) {\r\n pageSelection['chkCoverPage'] = sessData.chkCoverPage;\r\n pageSelection['chkTaxPage'] = sessData.chkTaxPage;\r\n pageSelection['chkUnderwritingPage'] = sessData.chkUnderwritingPage;\r\n pageSelection['chkComplianceNotice'] = sessData.chkComplianceNotice;\r\n conceptSelection['chkProductCompare'] = sessData.chkProductCompare;\r\n conceptSelection['chkInternalRoR'] = sessData.chkInternalRoR;\r\n conceptSelection['chkCharitableGiving'] = sessData.chkCharitableGiving;\r\n conceptSelection['chkInsuranceInvestment'] = sessData.chkInsuranceInvestment;\r\n conceptSelection['chkSharedOwnership'] = sessData.chkSharedOwnership;\r\n } else {\r\n pageSelection['chkCoverPage'] = formData['chkCoverPage'] === 'true' ? true : false;\r\n pageSelection['chkTaxPage'] = formData['chkTaxPage'] === 'true' ? true : false;\r\n pageSelection['chkUnderwritingPage'] =\r\n formData['chkUnderwritingPage'] === 'true' ? true : false;\r\n pageSelection['chkComplianceNotice'] =\r\n formData['chkComplianceNotice'] === 'true' ? true : false;\r\n conceptSelection['chkProductCompare'] = formData['chkProductCompare'] === 'true' ? true : false;\r\n conceptSelection['chkInternalRoR'] = formData['chkInternalRoR'] === 'true' ? true : false;\r\n conceptSelection['chkCharitableGiving'] =\r\n formData['chkCharitableGiving'] === 'true' ? true : false;\r\n conceptSelection['chkInsuranceInvestment'] =\r\n formData['chkInsuranceInvestment'] === 'true' ? true : false;\r\n conceptSelection['chkSharedOwnership'] =\r\n formData['chkSharedOwnership'] === 'true' ? true : false;\r\n sessionStorage.setItem('pageConcept', JSON.stringify({...pageSelection, ...conceptSelection}));\r\n }\r\n}\r\n\r\nexport function GlobalCustomLostFocus(\r\n name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n) {\r\n //Note: Changing min and max in controlItems will automatically cause a re-Validation through app.js\r\n switch (name) {\r\n //Joe: I tried adding the call to the allocation field here but the changes did not refresh the fields/trigger a re-render\r\n case 'txtProquoteCPBAmount':\r\n let cpbAmount = parseInt(formData[name]);\r\n let cpbRemainer = cpbAmount % 1000;\r\n if (cpbRemainer > 500) {\r\n cpbAmount = Math.ceil(cpbAmount / 1000) * 1000;\r\n } else {\r\n cpbAmount = Math.floor(cpbAmount / 1000) * 1000;\r\n }\r\n updateFormData(name, cpbAmount.toString());\r\n // formData[name] = cpbAmount.toString();\r\n // updateStoreFormSessionData(formData, name, cpbAmount.toString());\r\n break;\r\n case 'txtProquoteGPOAmount':\r\n let gpoAmount = parseInt(formData[name]);\r\n let gpoRemainder = gpoAmount % 1000;\r\n if (gpoRemainder > 500) {\r\n gpoAmount = Math.ceil(gpoAmount / 1000) * 1000;\r\n } else {\r\n gpoAmount = Math.floor(gpoAmount / 1000) * 1000;\r\n }\r\n updateFormData(name, gpoAmount.toString());\r\n // formData[name] = gpoAmount.toString();\r\n // updateStoreFormSessionData(formData, name, gpoAmount.toString());\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\nexport function updateConceptItem(formData, name) {\r\n conceptSelection[name] = formData[name];\r\n let sessConcept = JSON.parse(sessionStorage.getItem('pageConcept'));\r\n sessConcept = {...sessConcept, ...conceptSelection};\r\n sessionStorage.setItem('pageConcept', JSON.stringify({...sessConcept}));\r\n}\r\n\r\nexport function GlobalCustomClickBusinessRules(\r\n name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n) {\r\n switch (formData['formName']) {\r\n case 'ProNeeds':\r\n proneedsBusinessRules(\r\n name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData,\r\n false\r\n );\r\n break;\r\n default:\r\n break;\r\n }\r\n switch (name) {\r\n case 'btnViewReportNewBiz':\r\n if (formData['chkProductCompare'] === true) {\r\n if (\r\n allSetupItems.compareSetupItem &&\r\n (formData['txtAge'] < allSetupItems.compareSetupItem['minAge'] ||\r\n formData['txtAge'] > allSetupItems.compareSetupItem['maxAge'])\r\n ) {\r\n // updateFormData('isRunCompare', false);\r\n // formData['isRunCompare'] = false;\r\n updateStoreFormSessionData(formData, 'isRunCompare', false);\r\n } else {\r\n // updateFormData('isRunCompare', true);\r\n // formData['isRunCompare'] = true;\r\n updateStoreFormSessionData(formData, 'isRunCompare', true);\r\n }\r\n }\r\n break;\r\n case 'btnEditUser':\r\n controlItems['txtNewUserUsername'].readOnly = true;\r\n break;\r\n case 'btnAddUser':\r\n controlItems['txtNewUserUsername'].readOnly = false;\r\n break;\r\n // case 'btnAddDrug':\r\n // if (controlItems['txt2c2SubstanceName'].disabled) {\r\n // } else if (controlItems['txt2c3SubstanceName'].disabled) {\r\n // } else if (controlItems['txt2c4SubstanceName'].disabled) {\r\n // } else if (controlItems['txt2c5SubstanceName'].disabled) {\r\n // }\r\n // break;\r\n default:\r\n break;\r\n }\r\n}\r\n\r\nfunction profileBusinessRules(\r\n name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData,\r\n runAll\r\n) {\r\n switch (name) {\r\n case 'rdoDefaultApp':\r\n if (runAll) {\r\n let optionItems = {};\r\n if (user.system.isNewBusiness) {\r\n optionItems['New Business'] = 'Choice-NewBusiness';\r\n }\r\n if (user.system.isInforce) {\r\n optionItems['Inforce'] = 'Choice-Inforce';\r\n }\r\n if (user.isAdmin) {\r\n optionItems['Admin'] = 'Choice-Admin';\r\n }\r\n controlItems[name].optionItems = optionItems;\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n}\r\n\r\nfunction proneedsBusinessRules(\r\n name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData,\r\n runAll\r\n) {\r\n switch (name) {\r\n case 'chkChildEducationExpense':\r\n if (!runAll) {\r\n if (formData[name] === false) {\r\n hideControlBatch(\r\n [`cboChild1UniversityStartYear`, `txtChild1TutionAmount`],\r\n controlItems,\r\n updateControlItems\r\n );\r\n for (let i = 2; i <= 5; i++) {\r\n hideControlBatch(\r\n [\r\n `btnEducation${i}Delete`,\r\n `cboChild${i}UniversityStartYear`,\r\n `txtChild${i}TutionAmount`,\r\n ],\r\n controlItems,\r\n updateControlItems\r\n );\r\n }\r\n } else {\r\n showControlBatch(\r\n [`cboChild1UniversityStartYear`, `txtChild1TutionAmount`],\r\n controlItems,\r\n updateControlItems\r\n );\r\n for (let i = 2; i <= 5; i++) {\r\n if (formData[`btnEducation${i}Delete`] === 'true') {\r\n hideControlBatch(\r\n [\r\n `btnEducation${i}Delete`,\r\n `cboChild${i}UniversityStartYear`,\r\n `txtChild${i}TutionAmount`,\r\n ],\r\n controlItems,\r\n updateControlItems\r\n );\r\n } else {\r\n showControlBatch(\r\n [\r\n `btnEducation${i}Delete`,\r\n `cboChild${i}UniversityStartYear`,\r\n `txtChild${i}TutionAmount`,\r\n ],\r\n controlItems,\r\n updateControlItems\r\n );\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n case 'cboChild1UniversityStartYear':\r\n case 'cboChild2UniversityStartYear':\r\n case 'cboChild3UniversityStartYear':\r\n case 'cboChild4UniversityStartYear':\r\n case 'cboChild5UniversityStartYear':\r\n if (runAll) {\r\n let currentYear = new Date().getUTCFullYear();\r\n updateFormData(name, `${currentYear}`);\r\n controlItems[name].optionItems = buildUniversityYearOptionItems(currentYear);\r\n controlItems[name].useOptions = true;\r\n }\r\n break;\r\n case 'btnEducation2Delete':\r\n case 'btnEducation3Delete':\r\n case 'btnEducation4Delete':\r\n case 'btnEducation5Delete':\r\n if (!runAll && formData[name] === 'true') {\r\n let idx = Number(name.split('')[12]);\r\n let i = 0;\r\n for (i = 5; i > idx; i--) {\r\n if (formData[`btnEducation${i}Delete`] === 'false') {\r\n break;\r\n }\r\n }\r\n let cboTemp;\r\n let txtTemp;\r\n for (let j = idx; j < i; j++) {\r\n cboTemp = formData[`cboChild${j + 1}UniversityStartYear`];\r\n txtTemp = formData[`txtChild${j + 1}TutionAmount`];\r\n updateFormData(`btnEducation${j}Delete`, 'false');\r\n updateFormData(`cboChild${j}UniversityStartYear`, cboTemp);\r\n updateFormData(`txtChild${j}TutionAmount`, txtTemp);\r\n }\r\n updateFormData(`btnEducation${i}Delete`, 'true');\r\n updateFormData(`cboChild${i}UniversityStartYear`, '2020');\r\n updateFormData(`txtChild${i}TutionAmount`, '0');\r\n updateFormData('btnAddEducationExpense', i);\r\n hideControlBatch(\r\n [`btnEducation${i}Delete`, `cboChild${i}UniversityStartYear`, `txtChild${i}TutionAmount`],\r\n controlItems,\r\n updateControlItems\r\n );\r\n }\r\n\r\n break;\r\n case 'btnAddEducationExpense':\r\n if (!runAll) {\r\n const idx = formData[name];\r\n formData[`btnEducation${idx}Delete`] = 'false';\r\n formData[`cboChild${idx}UniversityStartYear`] = '2020';\r\n formData[`txtChild${idx}TutionAmount`] = '0';\r\n updateFormData(`btnEducation${idx}Delete`, 'false');\r\n updateFormData(`cboChild${idx}UniversityStartYear`, '2020');\r\n updateFormData(`txtChild${idx}TutionAmount`, '0');\r\n showControlBatch(\r\n [\r\n `btnEducation${idx}Delete`,\r\n `cboChild${idx}UniversityStartYear`,\r\n `txtChild${idx}TutionAmount`,\r\n ],\r\n controlItems,\r\n updateControlItems\r\n );\r\n updateFormData(name, idx + 1);\r\n }\r\n break;\r\n case 'txtAdjustAnnualIncome':\r\n if (!runAll) {\r\n updateFormData('txtCurrentNetAnnualIncome', formData[name]);\r\n }\r\n break;\r\n case 'txtAdjustDurationOfIncome':\r\n if (!runAll) {\r\n updateFormData('txtDurationOfIncomeForSurvivors', formData[name]);\r\n }\r\n break;\r\n case 'txtCurrentNetAnnualIncome':\r\n if (!runAll) {\r\n updateFormData('txtAdjustAnnualIncome', formData[name]);\r\n }\r\n break;\r\n case 'txtDurationOfIncomeForSurvivors':\r\n if (!runAll) {\r\n updateFormData('txtAdjustDurationOfIncome', formData[name]);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\nfunction setSelectBox(name, formData, updateFormData, controlItems) {\r\n if (!Object.keys(controlItems[name].optionItems).includes(formData[name])) {\r\n updateFormData(name, Object.keys(controlItems[name].optionItems)[0]);\r\n }\r\n}\r\nfunction processMinFaceAmount(formData, controlItems, interfaceSetupItems, intAge) {\r\n let idx = 0;\r\n\r\n for (idx = 1; idx <= interfaceSetupItems.minFaceBands; idx++) {\r\n if (\r\n intAge <= interfaceSetupItems[`band${idx}Max`] ||\r\n interfaceSetupItems[`band${idx}Max`] === 0\r\n ) {\r\n controlItems['txtProquoteFaceAmount'].min = interfaceSetupItems[`band${idx}MinFace`];\r\n controlItems['txtProquoteFaceAmount'].max = interfaceSetupItems['faceAmountMax'];\r\n interfaceSetupItems['currentMinFace'] = interfaceSetupItems[`band${idx}MinFace`];\r\n break;\r\n }\r\n }\r\n}\r\nfunction processADBMaxFaceAmount(formData, controlItems, interfaceSetupItems, intAge) {\r\n let idx = 0;\r\n\r\n for (idx = 1; idx <= interfaceSetupItems.adbMaxFaceBands; idx++) {\r\n if (\r\n intAge <= interfaceSetupItems[`adbBand${idx}Max`] ||\r\n interfaceSetupItems[`adbBand${idx}Max`] === 0\r\n ) {\r\n controlItems['txtProquoteADBAmount'].min = interfaceSetupItems[`adbFaceMin`];\r\n controlItems['txtProquoteADBAmount'].max = Math.min(\r\n interfaceSetupItems[`adbBand${idx}MaxFace`],\r\n formData['txtProquoteFaceAmount']\r\n );\r\n if (formData['txtProquoteADBAmount'] > controlItems['txtProquoteADBAmount'].max) {\r\n formData['txtProquoteADBAmount'] = controlItems['txtProquoteADBAmount'].max.toString();\r\n }\r\n interfaceSetupItems['adbCurrentMaxFace'] = interfaceSetupItems[`adbBand${idx}MaxFace`];\r\n break;\r\n }\r\n }\r\n}\r\nfunction processGPOMaxFaceAmount(formData, controlItems, interfaceSetupItems, intAge) {\r\n let idx = 0;\r\n\r\n for (idx = 1; idx <= interfaceSetupItems.gpoMaxFaceBands; idx++) {\r\n if (\r\n intAge <= interfaceSetupItems[`gpoBand${idx}Max`] ||\r\n interfaceSetupItems[`gpoBand${idx}Max`] === 0\r\n ) {\r\n controlItems['txtProquoteGPOAmount'].min = interfaceSetupItems[`gpoFaceMin`];\r\n controlItems['txtProquoteGPOAmount'].max = Math.min(\r\n interfaceSetupItems[`gpoBand${idx}MaxFace`],\r\n formData['txtProquoteFaceAmount']\r\n );\r\n if (formData['txtProquoteGPOAmount'] > controlItems['txtProquoteGPOAmount'].max) {\r\n formData['txtProquoteGPOAmount'] = controlItems['txtProquoteGPOAmount'].max.toString();\r\n }\r\n interfaceSetupItems['gpoCurrentMaxFace'] = interfaceSetupItems[`gpoBand${idx}MaxFace`];\r\n break;\r\n }\r\n }\r\n}\r\nfunction proquoteBusinessRules(\r\n name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData,\r\n runAll\r\n) {\r\n const ageValue = calcAgeNearest(formData['dtProquoteDob'], new Date());\r\n const ageString = ageValue.toString();\r\n switch (name) {\r\n case 'rdoProquoteTermPolicy':\r\n case 'rdoProquoteWLPolicy':\r\n controlItems['txtProquoteCPBAmount'].min = interfaceSetupItems['cpbFaceMin'];\r\n controlItems['txtProquoteCPBAmount'].max = interfaceSetupItems['cpbFaceMax'];\r\n // if (Object.keys(controlItems[name].optionItems).length === 0) {\r\n // hideControl(name, controlItems, updateControlItems);\r\n // } else {\r\n // showControl(name, controlItems, updateControlItems);\r\n // }\r\n if (formData['CurrentField'] === 'rdoProquoteTermPolicy') {\r\n if (name === 'rdoProquoteTermPolicy' && formData['rdoProquoteTermPolicy'] !== '') {\r\n formData['rdoProquoteWLPolicy'] = '';\r\n }\r\n } else if (formData['CurrentField'] === 'rdoProquoteWLPolicy') {\r\n if (name === 'rdoProquoteWLPolicy' && formData['rdoProquoteWLPolicy'] !== '') {\r\n formData['rdoProquoteTermPolicy'] = '';\r\n }\r\n }\r\n processMinFaceAmount(formData, controlItems, interfaceSetupItems, ageValue);\r\n processADBMaxFaceAmount(formData, controlItems, interfaceSetupItems, ageValue);\r\n processGPOMaxFaceAmount(formData, controlItems, interfaceSetupItems, ageValue);\r\n break;\r\n\r\n // case 'cboProquoteProduct':\r\n // controlItems['txtProquoteCPBAmount'].min = interfaceSetupItems['cpbFaceMin'];\r\n // controlItems['txtProquoteCPBAmount'].max = interfaceSetupItems['cpbFaceMax'];\r\n // break;\r\n case 'dtProquoteDob':\r\n if (runAll) {\r\n let today = new Date();\r\n const age30Year = today.getFullYear() - 30; // 2021-30 = 1991\r\n today.setFullYear(age30Year);\r\n updateFormData(name, today);\r\n }\r\n processMinFaceAmount(formData, controlItems, interfaceSetupItems, ageValue);\r\n processADBMaxFaceAmount(formData, controlItems, interfaceSetupItems, ageValue);\r\n processGPOMaxFaceAmount(formData, controlItems, interfaceSetupItems, ageValue);\r\n break;\r\n case 'txtProquoteFaceAmount':\r\n processADBMaxFaceAmount(formData, controlItems, interfaceSetupItems, ageValue);\r\n processGPOMaxFaceAmount(formData, controlItems, interfaceSetupItems, ageValue);\r\n break;\r\n case 'rdoProquotePaymentFrequency':\r\n if (\r\n interfaceSetupItems['isAllowDividends'] &&\r\n formData['rdoProquoteDividendOption'] === DivOptions.RAP\r\n ) {\r\n controlItems[name].optionItems = {\r\n '012': 'Choice-Annually',\r\n '03': 'Choice-Quarterly',\r\n };\r\n } else {\r\n controlItems[name].optionItems = {\r\n '012': 'Choice-Annually',\r\n '03': 'Choice-Quarterly',\r\n '01': 'Choice-Monthly',\r\n };\r\n }\r\n // setSelectBox(name, formData, updateFormData, controlItems);\r\n\r\n break;\r\n case 'rdoProquotePremiumOffset':\r\n if (\r\n !interfaceSetupItems['isAllowDividends'] ||\r\n formData['rdoProquoteDividendOption'] === DivOptions.RAP ||\r\n formData['rdoProquoteDividendOption'] === DivOptions.NONE ||\r\n formData['rdoProquoteDividendOption'] === ''\r\n ) {\r\n hideControlBatch([name, 'chkPremiumOffsetIllustration'], controlItems, updateControlItems);\r\n } else {\r\n showControlBatch([name, 'chkPremiumOffsetIllustration'], controlItems, updateControlItems);\r\n if (formData[name] === 'NT' || formData[name] === '') {\r\n controlItems[name].optionItems = {\r\n ADD: 'Choice-Add',\r\n NT: 'Choice-NoThanks',\r\n };\r\n } else if (formData[name] === 'ADD') {\r\n controlItems[name].optionItems = {\r\n ADDED: 'Choice-Added',\r\n NT: 'Choice-NoThanks',\r\n };\r\n updateFormData(name, 'ADDED');\r\n }\r\n }\r\n break;\r\n case 'rdoProquoteDividendOption':\r\n if (interfaceSetupItems['isAllowDividends']) {\r\n showControlBatch([name, 'cboDividendOption'], controlItems, updateControlItems);\r\n controlItems[name].optionItems = {\r\n [DivOptions.PUA]: 'Choice-PaidUpAdditions',\r\n [DivOptions.RAP]: 'Choice-AppliedPremiumPayment',\r\n [DivOptions.DOD]: 'Choice-LeftOnDeposit',\r\n };\r\n } else {\r\n hideControlBatch([name, 'cboDividendOption'], controlItems, updateControlItems);\r\n // controlItems[name].optionItems = {\r\n // [DivOptions.NONE]: 'Choice-NoDividendsExpected',\r\n // };\r\n }\r\n // setSelectBox(name, formData, updateFormData, controlItems);\r\n\r\n break;\r\n case 'rdoProquoteHealthMatch':\r\n if (\r\n interfaceSetupItems &&\r\n interfaceSetupItems['isAllowHealthMatch'] &&\r\n parseInt(formData['txtProquoteFaceAmount']) >=\r\n interfaceSetupItems['healthMatchMinFaceAmount']\r\n ) {\r\n if (formData['rdoProquoteSmokeClass'] === 'Y') {\r\n controlItems[name].optionItems = {\r\n S: 'Choice-Standard',\r\n P: 'Choice-Preferred',\r\n };\r\n } else {\r\n controlItems[name].optionItems = {\r\n S: 'Choice-Standard',\r\n P: 'Choice-Preferred',\r\n U: 'Choice-UltraPreferred',\r\n };\r\n }\r\n showControlBatch([name, 'cboRateClass'], controlItems, updateControlItems);\r\n } else {\r\n controlItems[name].optionItems = {\r\n S: 'Choice-Standard',\r\n };\r\n hideControlBatch([name, 'cboRateClass'], controlItems, updateControlItems);\r\n }\r\n setSelectBox(name, formData, updateFormData, controlItems);\r\n\r\n break;\r\n case 'rdoProquoteSmokeClass':\r\n if (!runAll) {\r\n if (ageValue < 18) {\r\n formData[name] = 'Y';\r\n updateFormData(name, 'Y');\r\n hideControlBatch([name, 'cboSmokeClass'], controlItems, updateControlItems);\r\n } else {\r\n showControlBatch([name, 'cboSmokeClass'], controlItems, updateControlItems);\r\n controlItems[name].optionItems = {\r\n Y: 'Choice-Yes',\r\n N: 'Choice-No',\r\n };\r\n }\r\n // setSelectBox(name, formData, updateFormData, controlItems);\r\n }\r\n break;\r\n case 'rdoProquoteWaiver':\r\n if (\r\n interfaceSetupItems['isAllowWaiver'] &&\r\n ageValue >= interfaceSetupItems['waiverAgeMin'] &&\r\n ageValue <= interfaceSetupItems['waiverAgeMax']\r\n ) {\r\n showControlBatch([name, 'chkWaiver'], controlItems, updateControlItems);\r\n if (formData[name] === 'NT' || formData[name] === '') {\r\n controlItems[name].optionItems = {\r\n ADD: 'Choice-Add',\r\n NT: 'Choice-NoThanks',\r\n };\r\n } else if (formData[name] === 'ADD') {\r\n controlItems[name].optionItems = {\r\n ADDED: 'Choice-Added',\r\n NT: 'Choice-NoThanks',\r\n };\r\n // formData[name] = \"ADDED\";\r\n updateFormData(name, 'ADDED');\r\n }\r\n } else {\r\n hideControlBatch([name, 'chkWaiver'], controlItems, updateControlItems);\r\n // formData[name] = \"\";\r\n updateFormData(name, '');\r\n }\r\n // if (\r\n // formData[name] === \"ADDED\" &&\r\n // controlItems[name].disabled === false &&\r\n // interfaceSetupItems['isAllowWaiverRating'] === true\r\n // ) {\r\n // showControl('cboProquoteWaiverRating', controlItems, updateControlItems);\r\n // } else {\r\n // hideControl('cboProquoteWaiverRating', controlItems, updateControlItems);\r\n // }\r\n break;\r\n case 'rdoProquoteADB':\r\n if (\r\n interfaceSetupItems['isAllowADB'] === true &&\r\n ageValue >= interfaceSetupItems['adbAgeMin'] &&\r\n ageValue <= interfaceSetupItems['adbAgeMax']\r\n ) {\r\n showControlBatch([name, 'chkADB'], controlItems, updateControlItems);\r\n if (formData[name] === 'NT' || formData[name] === '') {\r\n controlItems[name].optionItems = {\r\n ADD: 'Choice-Add',\r\n NT: 'Choice-NoThanks',\r\n };\r\n } else if (formData[name] === 'ADD') {\r\n controlItems[name].optionItems = {\r\n ADDED: 'Choice-Added',\r\n NT: 'Choice-NoThanks',\r\n };\r\n formData[name] = 'ADDED';\r\n updateFormData(name, 'ADDED');\r\n }\r\n } else {\r\n hideControlBatch([name, 'chkADB'], controlItems, updateControlItems);\r\n // formData[name] = \"\";\r\n updateFormData(name, '');\r\n }\r\n\r\n if (formData[name] === 'ADDED' && !controlItems[name].isDisabled) {\r\n showControlBatch(\r\n ['txtProquoteADBAmount', 'txtADBAmount'],\r\n controlItems,\r\n updateControlItems\r\n );\r\n // if (interfaceSetupItems['isAllowADBRating'] === true) {\r\n // showControl('cboProquoteADBRating', controlItems, updateControlItems);\r\n // } else {\r\n // hideControl('cboProquoteADBRating', controlItems, updateControlItems);\r\n // }\r\n } else {\r\n hideControlBatch(\r\n ['txtProquoteADBAmount', 'txtADBAmount'],\r\n controlItems,\r\n updateControlItems\r\n );\r\n // hideControl('cboProquoteADBRating', controlItems, updateControlItems);\r\n }\r\n\r\n break;\r\n case 'rdoProquoteCPB':\r\n if (\r\n interfaceSetupItems['isAllowCPB'] === true &&\r\n ageValue >= interfaceSetupItems['cpbAgeMin'] &&\r\n ageValue <= interfaceSetupItems['cpbAgeMax']\r\n ) {\r\n showControlBatch([name, 'chkCPB'], controlItems, updateControlItems);\r\n if (formData[name] === 'NT' || formData[name] === '') {\r\n controlItems[name].optionItems = {\r\n ADD: 'Choice-Add',\r\n NT: 'Choice-NoThanks',\r\n };\r\n } else if (formData[name] === 'ADD') {\r\n controlItems[name].optionItems = {\r\n ADDED: 'Choice-Added',\r\n NT: 'Choice-NoThanks',\r\n };\r\n formData[name] = 'ADDED';\r\n updateFormData(name, 'ADDED');\r\n }\r\n } else {\r\n hideControlBatch([name, 'chkCPB'], controlItems, updateControlItems);\r\n // formData[name] = \"\";\r\n updateFormData(name, '');\r\n }\r\n\r\n if (formData[name] === 'ADDED' && !controlItems[name].isDisabled) {\r\n showControlBatch(\r\n ['txtProquoteCPBAmount', 'txtCPBAmount'],\r\n controlItems,\r\n updateControlItems\r\n );\r\n } else {\r\n hideControlBatch(\r\n ['txtProquoteCPBAmount', 'txtCPBAmount'],\r\n controlItems,\r\n updateControlItems\r\n );\r\n }\r\n break;\r\n case 'rdoProquoteGPO':\r\n if (\r\n interfaceSetupItems['isAllowGPO'] === true &&\r\n ageValue >= interfaceSetupItems['gpoAgeMin'] &&\r\n ageValue <= interfaceSetupItems['gpoAgeMax']\r\n ) {\r\n showControlBatch([name, 'chkGPO'], controlItems, updateControlItems);\r\n if (formData[name] === 'NT' || formData[name] === '') {\r\n controlItems[name].optionItems = {\r\n ADD: 'Choice-Add',\r\n NT: 'Choice-NoThanks',\r\n };\r\n } else if (formData[name] === 'ADD') {\r\n controlItems[name].optionItems = {\r\n ADDED: 'Choice-Added',\r\n NT: 'Choice-NoThanks',\r\n };\r\n formData[name] = 'ADDED';\r\n updateFormData(name, 'ADDED');\r\n }\r\n } else {\r\n hideControlBatch([name, 'chkGPO'], controlItems, updateControlItems);\r\n // formData[name] = \"\";\r\n updateFormData(name, '');\r\n }\r\n\r\n if (formData[name] === 'ADDED' && !controlItems[name].isDisabled) {\r\n showControlBatch(\r\n ['txtProquoteGPOAmount', 'txtGPOAmount'],\r\n controlItems,\r\n updateControlItems\r\n );\r\n // if (interfaceSetupItems['isAllowGPORating'] === true) {\r\n // showControl('cboProquoteGPORating', controlItems, updateControlItems);\r\n // } else {\r\n // hideControl('cboProquoteGPORating', controlItems, updateControlItems);\r\n // }\r\n } else {\r\n hideControlBatch(\r\n ['txtProquoteGPOAmount', 'txtGPOAmount'],\r\n controlItems,\r\n updateControlItems\r\n );\r\n // hideControl('cboProquoteGPORating', controlItems, updateControlItems);\r\n }\r\n break;\r\n case 'rdoProquoteWPD':\r\n if (\r\n interfaceSetupItems['isAllowWaiverOnDeath'] === true &&\r\n /*formData['cboPolicyType'] !== PolicyTypesNewbiz.SINGLE*/ false &&\r\n ageValue >= interfaceSetupItems['waiverOnDeathAgeMin'] &&\r\n ageValue <= interfaceSetupItems['waiverOnDeathAgeMax']\r\n ) {\r\n showControl(name, controlItems, updateControlItems);\r\n if (formData[name] === 'NT' || formData[name] === '') {\r\n controlItems[name].optionItems = {\r\n ADD: 'Choice-Add',\r\n NT: 'Choice-NoThanks',\r\n };\r\n } else if (formData[name] === 'ADD') {\r\n controlItems[name].optionItems = {\r\n ADDED: 'Choice-Added',\r\n NT: 'Choice-NoThanks',\r\n };\r\n formData[name] = 'ADDED';\r\n updateFormData(name, 'ADDED');\r\n }\r\n } else {\r\n hideControlBatch([name, 'chkWPD'], controlItems, updateControlItems);\r\n // formData[name] = \"\";\r\n updateFormData(name, '');\r\n }\r\n\r\n // if (formData[name] === \"ADDED\" && !controlItems[name].isDisabled) {\r\n // if (interfaceSetupItems['isAllowWaiverOnDeathRating'] === true) {\r\n // showControl('cboProquoteWPDRating', controlItems, updateControlItems);\r\n // } else {\r\n // hideControl('cboProquoteWPDRating', controlItems, updateControlItems);\r\n // }\r\n // } else {\r\n // hideControl('cboProquoteWPDRating', controlItems, updateControlItems);\r\n // }\r\n break;\r\n case 'rdoProquoteAIB':\r\n if (\r\n interfaceSetupItems['isAllowAIB'] === true &&\r\n ageValue >= interfaceSetupItems['aibAgeMin'] &&\r\n ageValue <= interfaceSetupItems['aibAgeMax']\r\n ) {\r\n showControlBatch([name, 'chkAIB'], controlItems, updateControlItems);\r\n if (formData[name] === 'NT' || formData[name] === '') {\r\n controlItems[name].optionItems = {\r\n ADD: 'Choice-Add',\r\n NT: 'Choice-NoThanks',\r\n };\r\n } else if (formData[name] === 'ADD') {\r\n controlItems[name].optionItems = {\r\n ADDED: 'Choice-Added',\r\n NT: 'Choice-NoThanks',\r\n };\r\n formData[name] = 'ADDED';\r\n updateFormData(name, 'ADDED');\r\n }\r\n } else {\r\n hideControlBatch([name, 'chkAIB'], controlItems, updateControlItems);\r\n // formData[name] = \"\";\r\n updateFormData(name, '');\r\n }\r\n\r\n if (formData[name] === 'ADDED' && !controlItems[name].isDisabled) {\r\n showControlBatch(\r\n ['txtProquoteAIBOwnerAge', 'txtAIBOwnerAge'],\r\n controlItems,\r\n updateControlItems\r\n );\r\n // if (interfaceSetupItems['isAllowAIBRating'] === true) {\r\n // showControl('cboProquoteAIBRating', controlItems, updateControlItems);\r\n // } else {\r\n // hideControl('cboProquoteAIBRating', controlItems, updateControlItems);\r\n // }\r\n } else {\r\n hideControlBatch(\r\n ['txtProquoteAIBOwnerAge', 'txtAIBOwnerAge'],\r\n controlItems,\r\n updateControlItems\r\n );\r\n // hideControl('cboProquoteAIBRating', controlItems, updateControlItems);\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n}\r\n\r\nexport function GlobalCustomBusinessRules(\r\n name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData,\r\n runAll = false\r\n) {\r\n //Note: Changing min and max in controlItems will automatically cause a re-Validation through app.js\r\n //console.log(`Business Rules = ${name}`);\r\n if (!controlItems || !controlItems[name]) {\r\n return;\r\n }\r\n switch (formData['formName']) {\r\n case 'profile':\r\n profileBusinessRules(\r\n name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData,\r\n runAll\r\n );\r\n break;\r\n case 'ProNeeds':\r\n proneedsBusinessRules(\r\n name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData,\r\n runAll\r\n );\r\n break;\r\n case 'ProQuote':\r\n proquoteBusinessRules(\r\n name,\r\n user,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData,\r\n runAll\r\n );\r\n default:\r\n break;\r\n }\r\n\r\n //Some common cases\r\n switch (name) {\r\n case 'switchIllustration':\r\n if (elementItems[name]) {\r\n if (user.isNewBusiness) {\r\n enableControl('switchIllustration', elementItems, controlItems, updateControlItems);\r\n } else {\r\n disableControl('switchIllustration', elementItems, controlItems, updateControlItems);\r\n }\r\n }\r\n break;\r\n case 'switchInforce':\r\n if (elementItems[name]) {\r\n if (user.isInforce) {\r\n enableControl('switchInforce', elementItems, controlItems, updateControlItems);\r\n } else {\r\n disableControl('switchInforce', elementItems, controlItems, updateControlItems);\r\n }\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n}\r\n\r\nfunction buildUniversityYearOptionItems(currentYear) {\r\n let optionItems = {};\r\n for (let i = 0; i < 20; i++) {\r\n let year = i + currentYear;\r\n optionItems[`0${year}`] = year;\r\n }\r\n return optionItems;\r\n}\r\n\r\nexport function GlobalCustomBuildTrackingData(\r\n name,\r\n controlItems,\r\n formData,\r\n elementItems,\r\n interfaceSetupItems,\r\n updateFormData,\r\n inforceData\r\n) {\r\n // let data = {...formData};\r\n // let key = '';\r\n // let val = '';\r\n // if (formData['formName'] === 'eApplication') {\r\n // if (data['fileAttachments'].length > 0) {\r\n // for (let attachment of data['fileAttachments']) {\r\n // key = attachment.fileName;\r\n // val = `${attachment.documentType}|${attachment.size}`;\r\n // data[key] = val;\r\n // }\r\n // }\r\n // delete data['fileAttachments'];\r\n // return data;\r\n // }\r\n return null;\r\n}\r\n\r\nconst gblOptionItems = {\r\n DI: 'Choice-DailyInterest',\r\n CBF: 'Choice-CanadianBondFund',\r\n CEFI: 'Choice-CanadianEquityFundIndexed',\r\n CEFG: 'Choice-CanadianEquityFundGrowth',\r\n CEFV: 'Choice-CanadianEquityFundValue',\r\n CSEF: 'Choice-CanadianShortTermEquityFund',\r\n USBF: 'Choice-USBondFund',\r\n USEFI: 'Choice-USEquityFund',\r\n APEF: 'Choice-AsiaPacificEquityFund',\r\n};\r\n\r\nfunction calculateOptions(formData, controlItems, currentRow, shared) {\r\n for (let i = 0; i < 4; i++) {\r\n let currentIndex = ((currentRow + i - 1) % 4) + 1;\r\n\r\n if (formData[`chk${shared}FundSelection${currentIndex}`]) {\r\n let tempOptions = {...gblOptionItems};\r\n for (let j = 1; j <= 4; j++) {\r\n if (j !== currentIndex && formData[`chk${shared}FundSelection${j}`]) {\r\n Object.keys(tempOptions).map((option) => {\r\n if (option === formData[`cbo${shared}FundSelection${j}`]) {\r\n if (\r\n currentRow !== currentIndex &&\r\n formData[`cbo${shared}FundSelection${j}`] ===\r\n formData[`cbo${shared}FundSelection${currentIndex}`]\r\n ) {\r\n } else {\r\n delete tempOptions[option];\r\n }\r\n }\r\n });\r\n }\r\n }\r\n controlItems[`cbo${shared}FundSelection${currentIndex}`].optionItems = tempOptions;\r\n }\r\n }\r\n const currentCbo = `cbo${shared}FundSelection${currentRow}`;\r\n const currOptionArray = [...Object.keys(controlItems[currentCbo].optionItems)];\r\n for (let k = 1; k <= 4; k++) {\r\n if (k !== currentRow && formData[`chk${shared}FundSelection${k}`]) {\r\n if (formData[currentCbo] === formData[`cbo${shared}FundSelection${k}`]) {\r\n formData[currentCbo] = currOptionArray[0]; // in case of 2 combo having same value after one of them is enabled by checkbox\r\n\r\n //Now we have to remove this new assigned option value from other combo box options.\r\n for (let x = 1; x <= 4; x++) {\r\n if (x !== currentRow) {\r\n let myOptions = controlItems[`cbo${shared}FundSelection${x}`].optionItems;\r\n Object.keys(myOptions).map((option) => {\r\n if (option === formData[currentCbo]) {\r\n delete myOptions[option];\r\n }\r\n });\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction CalculateAllocations(formData, currentRow, shared = '') {\r\n let ap1, ap2, ap3, ap4;\r\n ap1 = parseInt(formData[`txt${shared}FundSelectionAllocationPercent1`]);\r\n ap2 = formData[`chk${shared}FundSelection2`]\r\n ? parseInt(formData[`txt${shared}FundSelectionAllocationPercent2`])\r\n : 0;\r\n ap3 = formData[`chk${shared}FundSelection3`]\r\n ? parseInt(formData[`txt${shared}FundSelectionAllocationPercent3`])\r\n : 0;\r\n ap4 = formData[`chk${shared}FundSelection4`]\r\n ? parseInt(formData[`txt${shared}FundSelectionAllocationPercent4`])\r\n : 0;\r\n let totalAllocation = ap1 + ap2 + ap3 + ap4;\r\n let difference = 0;\r\n let adjustment = 0;\r\n let newValue = '';\r\n let currentIndex = 0;\r\n if (totalAllocation !== 100) {\r\n if (totalAllocation > 100) {\r\n //it is reduced starting with the next field\r\n for (let i = 1; i <= 4; i++) {\r\n currentIndex = ((currentRow + i - 1) % 4) + 1;\r\n difference = totalAllocation - 100;\r\n if (formData[`chk${shared}FundSelection${currentIndex.toString()}`]) {\r\n adjustment = Math.min(\r\n parseInt(\r\n formData[`txt${shared}FundSelectionAllocationPercent${currentIndex.toString()}`]\r\n ),\r\n difference\r\n );\r\n totalAllocation = totalAllocation - adjustment;\r\n newValue = (\r\n parseInt(\r\n formData[`txt${shared}FundSelectionAllocationPercent${currentIndex.toString()}`]\r\n ) - adjustment\r\n ).toString();\r\n formData[\r\n `txt${shared}FundSelectionAllocationPercent${currentIndex.toString()}`\r\n ] = newValue;\r\n }\r\n }\r\n } else if (totalAllocation < 100) {\r\n //it is increased starting with the next field\r\n for (let i = 1; i <= 4; i++) {\r\n currentIndex = ((currentRow + i - 1) % 4) + 1;\r\n difference = 100 - totalAllocation;\r\n if (formData[`chk${shared}FundSelection${currentIndex.toString()}`]) {\r\n adjustment = difference;\r\n totalAllocation = totalAllocation + adjustment;\r\n newValue = (\r\n parseInt(\r\n formData[`txt${shared}FundSelectionAllocationPercent${currentIndex.toString()}`]\r\n ) + adjustment\r\n ).toString();\r\n formData[\r\n `txt${shared}FundSelectionAllocationPercent${currentIndex.toString()}`\r\n ] = newValue;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import {ActionTypes} from 'custom/common/redux/Types';\r\nimport axios from 'api';\r\nimport {updateStoreFormData} from 'core/redux/actions';\r\nimport { fetchProquoteSettings } from 'core/api/generalServices';\r\n\r\nlet cancelToken;\r\nexport const getFirstYearPremium = (formData) => async (dispatch) => {\r\n if (typeof cancelToken != typeof undefined) {\r\n cancelToken.cancel('Operation canceled due to new request.');\r\n }\r\n cancelToken = axios.CancelToken.source();\r\n try {\r\n const security = await fetchProquoteSettings();\r\n\r\n const body = {\r\n security,\r\n formData\r\n };\r\n\r\n //const res = await axios.post('/api/GetFirstYearPremium', formData, {cancelToken: cancelToken.token,});\r\n const res = await axios.post('/api/GetFirstYearPremiumProQuote', body, { cancelToken: cancelToken.token, });\r\n console.log('getFirstYearPremium action', res['data']);\r\n dispatch({\r\n type: ActionTypes.GET_FIRSTYEAR_PREMIUM,\r\n payload: res['data'],\r\n });\r\n\r\n dispatch(updateStoreFormData('lblPremium', res['data'].firstYearPremium, 'newBusiness'));\r\n } catch (error) {\r\n // console.log(error);\r\n }\r\n};\r\n\r\nexport const getFullPremium = (formData) => async (dispatch) => {\r\n try {\r\n const security = fetchProquoteSettings();\r\n\r\n const body = {\r\n security,\r\n formData\r\n };\r\n\r\n //const res = await axios.post('/api/GetFullPremium', formData);\r\n const res = await axios.post('/api/GetFullPremiumProQuote', body);\r\n console.log('inside premiumCalcActions getFullPremium');\r\n dispatch({\r\n type: ActionTypes.GET_FULL_PREMIUM,\r\n payload: res.data,\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n};\r\n","import React, {Fragment, Suspense, useEffect} from 'react';\r\nimport {useSelector, useDispatch} from 'react-redux';\r\n// import {useRouter} from 'core/hooks';\r\nimport {Spinner} from 'core/uicore';\r\nimport {login} from '../redux/actions/coreActions';\r\nconst ProQuote = React.lazy(() => import('custom/proQuote/ProQuote'));\r\n\r\nconst Routes = ({...props}) => {\r\n const {isAuthenticated, controlItems} = useSelector((state) => ({\r\n isAuthenticated: state.auth.isAuthenticated,\r\n controlItems: state.setupItems.controlItems,\r\n }));\r\n\r\n const dispatch = useDispatch();\r\n\r\n useEffect(() => {\r\n dispatch(login('ProQuote', 'ProQuote1'));\r\n \r\n }, []);\r\n\r\n if (!controlItems || !isAuthenticated) {\r\n return ;\r\n }\r\n return (\r\n }>\r\n \r\n \r\n );\r\n};\r\n\r\n// export default withAutoLogout(Routes);\r\nexport default Routes;\r\n","import React, {Component} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport {BrowserRouter as Router, Route, Switch} from 'react-router-dom';\r\nimport {\r\n loadControlItems,\r\n loadInterfaceSetupItems,\r\n updateControlItems,\r\n setStoreFormData,\r\n updateStoreFormData,\r\n clearStoreFormData,\r\n login,\r\n logout,\r\n sessionTimeout,\r\n updateUserProfile,\r\n updateUserProfileField,\r\n getAllUsers,\r\n setAlert,\r\n updateControlItemsDB,\r\n deleteControlItemDB,\r\n} from 'core/redux/actions';\r\nimport {getFirstYearPremium, updateReportOptionsProfile} from 'custom/proQuote/redux/actions';\r\n\r\nimport Login from '../auth/Login';\r\n\r\nimport {withPCTranslation} from 'core/hocs';\r\n\r\nimport Routes from './Routes';\r\n\r\nconst mapStateToProps = (dataStore) => ({\r\n controlItems: dataStore.setupItems.controlItems,\r\n interfaceSetupItems: dataStore.setupItems.interfaceSetupItems,\r\n allSetupItems: dataStore.setupItems.allSetupItems,\r\n interfaceSetupArray: dataStore.setupItems.interfaceSetupArray,\r\n setupItems: dataStore.setupItems,\r\n firstYearPremium: dataStore.firstYearPremium,\r\n auth: dataStore.auth,\r\n routes: dataStore.routes,\r\n});\r\n\r\nconst mapDispatchToProps = {\r\n // loadData,\r\n loadControlItems,\r\n updateControlItemsDB,\r\n deleteControlItemDB,\r\n loadInterfaceSetupItems,\r\n getFirstYearPremium,\r\n setAlert,\r\n updateControlItems,\r\n setStoreFormData,\r\n clearStoreFormData,\r\n updateStoreFormData,\r\n login,\r\n logout,\r\n sessionTimeout,\r\n updateUserProfile,\r\n updateUserProfileField,\r\n getAllUsers,\r\n};\r\n\r\nexport const StoreConnector = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(\r\n withPCTranslation(\r\n class extends Component {\r\n constructor() {\r\n super();\r\n this.state = {\r\n screenWidth: window.innerWidth || 0,\r\n sticky: 'scrollToTop',\r\n tabHeaderSticky: 'scrollToTop',\r\n policyHeaderSticky: 'scrollToTop',\r\n tabsSticky: 'scrollToTop',\r\n };\r\n }\r\n setScreenWidth = () => {\r\n this.setState({screenWidth: window.innerWidth});\r\n // setContentHeight();\r\n };\r\n toggleSticky = (e) => {\r\n console.log('ToggleSticky');\r\n const currentScrollPos = window.pageYOffset;\r\n let sticky = currentScrollPos > 0 ? 'sticky' : 'scrollToTop';\r\n if (this.state.sticky !== sticky) {\r\n this.setState({sticky});\r\n // setContentHeight();\r\n }\r\n\r\n /**\r\n * Tab Header sticky logic\r\n */\r\n let tabHeaderOffset = document.getElementById('tabHeader-id')\r\n ? document.getElementById('tabHeader-id').offsetHeight\r\n : 0;\r\n sticky = currentScrollPos > tabHeaderOffset ? 'sticky' : 'scrollToTop';\r\n if (this.state.tabHeaderSticky !== sticky) {\r\n this.setState({tabHeaderSticky: sticky});\r\n // setContentHeight();\r\n }\r\n\r\n /**\r\n * Policy Header sticky logic\r\n */\r\n let policyHeaderOffset = document.getElementById('policyheader-id')\r\n ? document.getElementById('policyheader-id').offsetHeight\r\n : 0;\r\n\r\n let policyHeaderSticky = currentScrollPos > tabHeaderOffset ? 'sticky' : 'scrollToTop';\r\n // }\r\n if (this.state.policyHeaderSticky !== policyHeaderSticky) {\r\n this.setState({policyHeaderSticky});\r\n }\r\n\r\n /**\r\n * Tabs sticky logic\r\n */\r\n let tabsSticky =\r\n currentScrollPos > policyHeaderOffset + tabHeaderOffset ? 'sticky' : 'scrollToTop';\r\n\r\n if (this.state.tabsSticky !== tabsSticky) {\r\n this.setState({tabsSticky});\r\n }\r\n };\r\n\r\n globalGetFocus = (event, storeFormData, elementItems, updateFormData) => {\r\n let {\r\n controlItems,\r\n interfaceSetupItems,\r\n updateControlItems,\r\n auth: {user},\r\n } = this.props;\r\n this.props.globalGetFocus(\r\n event,\r\n controlItems,\r\n storeFormData,\r\n elementItems,\r\n interfaceSetupItems,\r\n updateFormData,\r\n updateControlItems\r\n );\r\n };\r\n globalChange = (event, storeFormData, elementItems, updateFormData) => {\r\n let {\r\n controlItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n inforceData,\r\n auth: {user},\r\n updateControlItems,\r\n } = this.props;\r\n this.props.globalChange(\r\n event,\r\n user,\r\n controlItems,\r\n storeFormData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n );\r\n };\r\n globalClick = (name, storeFormData, elementItems, updateFormData) => {\r\n let {\r\n controlItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n inforceData,\r\n auth: {user},\r\n updateControlItems,\r\n } = this.props;\r\n this.props.globalClick(\r\n name,\r\n user,\r\n controlItems,\r\n storeFormData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n );\r\n };\r\n globalLostFocus = (\r\n event,\r\n storeFormData,\r\n elementItems,\r\n updateFormData,\r\n updateControlItems\r\n ) => {\r\n let {\r\n controlItems,\r\n interfaceSetupItems,\r\n inforceData,\r\n auth: {user},\r\n } = this.props;\r\n this.props.globalLostFocus(\r\n event,\r\n user,\r\n controlItems,\r\n storeFormData,\r\n elementItems,\r\n interfaceSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n );\r\n };\r\n onLoad = (storeFormData, elementItems, updateFormData) => {\r\n let {\r\n controlItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n inforceData,\r\n updateControlItems,\r\n auth: {user},\r\n } = this.props;\r\n this.props.onLoad(\r\n user,\r\n controlItems,\r\n storeFormData,\r\n elementItems,\r\n interfaceSetupItems,\r\n allSetupItems,\r\n updateFormData,\r\n updateControlItems,\r\n inforceData\r\n );\r\n };\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n componentDidMount() {\r\n window.addEventListener('resize', this.setScreenWidth);\r\n window.addEventListener('scroll', this.toggleSticky);\r\n }\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.setScreenWidth);\r\n window.removeEventListener('scroll', this.toggleSticky);\r\n }\r\n // componentDidUpdate(prevProps, prevState) {\r\n // if (!this.props.controlItems && this.props.auth.isAuthenticated) {\r\n // let {user} = this.props.auth;\r\n\r\n // //Temporary fix. It gets called multiple times due to change in language and classes on body element.\r\n // // if (this.props.setupItems && !this.props.setupItems.isDataLoading) {\r\n // // this.props.loadControlItems();\r\n // // }\r\n\r\n // //console.log(\"user:\", user);\r\n // if (user && user.loadProfile === true) {\r\n // user.loadProfile = false;\r\n // if (user['fontSize'] === 'Large') {\r\n // document.body.classList.add('altFont');\r\n // } else if (user['fontSize'] === 'Small') {\r\n // document.body.classList.remove('altFont');\r\n // }\r\n // }\r\n // }\r\n // }\r\n }\r\n )\r\n);\r\n","import React from 'react';\r\nimport {Provider} from 'react-redux';\r\nimport {dataStore} from 'core/redux/store';\r\nimport withCoreEvents from 'core/hocs/withCoreEvents';\r\nimport {StoreConnector} from './ui/StoreConnector';\r\n\r\nconst App = (props) => {\r\n \r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\nexport default withCoreEvents(App);\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import i18n from 'i18next';\r\nimport {initReactI18next} from 'react-i18next';\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\nimport Backend from 'i18next-xhr-backend';\r\n// import common_en from './locale/en/common.json';\r\n// import common_fr from './locale/fr/common.json';\r\n\r\ni18n\r\n .use(Backend)\r\n //.use(LanguageDetector)\r\n .use(initReactI18next)\r\n .init({\r\n // we init with resources\r\n // resources: {\r\n // en: {\r\n // translations: common_en\r\n // },\r\n // fr: {\r\n // translations: common_fr\r\n // }\r\n // },\r\n backend: {\r\n loadPath: `${process.env.PUBLIC_URL}/locales/en/translation.json`,\r\n },\r\n lng: 'en',\r\n fallbackLng: false,\r\n debug: false,\r\n\r\n // have a common namespace used around the full app\r\n ns: ['translation'],\r\n defaultNS: 'translation',\r\n\r\n keySeparator: false, // we use content as keys\r\n\r\n interpolation: {\r\n escapeValue: false, // not needed for react!!\r\n formatSeparator: ',',\r\n },\r\n returnEmptyString: true,\r\n\r\n react: {\r\n wait: true,\r\n useSuspense: false,\r\n },\r\n });\r\n\r\nexport default i18n;\r\n","import * as React from 'react';\r\nimport * as ReactDOM from 'react-dom';\r\nimport App from 'custom/common/App';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport 'core/utils/i18n';\r\n//import 'bootstrap/dist/css/bootstrap.css';\r\nimport '@babel/polyfill';\r\nimport axios from \"axios\";\r\n// console.log(process.env.NODE_ENV);\r\n// if (process.env.NODE_ENV !== 'development') {\r\n// console.log = (...messages) => {};\r\n// }\r\n//console.log('REACT_APP_VERSION: ', process.env.REACT_APP_VERSION);\r\n\r\nconst RenderApp = () => {\r\n if (process.env.NODE_ENV === \"development\" && process.env.REACT_APP_DOMAIN) {\r\n axios.defaults.baseURL = process.env.REACT_APP_DOMAIN;\r\n }\r\n // if (isIE) {\r\n // return ;\r\n // }\r\n return ;\r\n};\r\n\r\nReactDOM.render(RenderApp(), document.getElementById(\"app-root\"));\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n","import axios from \"api\";\r\n\r\nexport const fetchProquoteSettings = async () => {\r\n let proquoteSettings = JSON.parse(sessionStorage.getItem('proquoteSecurity'));\r\n if(!proquoteSettings){\r\n const {data} = await axios.get('/api/GetProQuoteSettings');\r\n proquoteSettings = data;\r\n sessionStorage.setItem('proquoteSecurity', JSON.stringify(data))\r\n }\r\n return proquoteSettings;\r\n }"],"sourceRoot":""}