{"version":3,"sources":["shared/constants/actionTypes.ts","shared/constants/constants.ts","shared/context/reducers/index.ts","shared/context/store/index.tsx","shared/context/store/localStorage.ts","components/utils/ConnectedIntlProvider.tsx","shared/helpers/utils.ts","shared/services/apiService.ts","shared/context/selectors/index.ts","shared/context/actions/index.ts","components/Button/Button.tsx","components/ButtonOption/ButtonOption.tsx","components/Charts/Charts.tsx","components/CheckMark/CheckMark.tsx","components/CheckMarkImage/CheckMarkImage.tsx","components/CheckMarkItemContainer/CheckMarkItemContainer.tsx","components/CheckMarkOption/CheckMarkOption.tsx","components/Tabs/Tabs.tsx","components/Tag/Tag.tsx","assets/images/Vector.png","assets/images/esg-icon.svg","components/Rating/Rating.tsx","components/Navbar/Navbar.tsx","components/Card/Card.tsx","components/Chips/Chips.tsx","components/EsgPerformance/EsgDetails.tsx","components/EsgPerformance/EsgPerformance.tsx","components/EsgProduct/EsgHeader.tsx","components/EsgProduct/EsgProduct.tsx","components/ProgressBar/ProgressBar.tsx","components/InputWithButton/InputWithButton.tsx","components/SwipeCard/SwipeButtons.tsx","assets/images/RightCheckClear.png","assets/images/LeftCheckClear.png","assets/images/icon-yes.svg","assets/images/icon-no.svg","components/SwipeCard/SwipeCard.tsx","assets/images/icon-question.svg","components/SwipeCard/SwipeSummary.tsx","components/Switcher/Switcher.tsx","assets/images/information.svg","components/Button/IconButton/IconButton.tsx","components/FilterSlider/FilterSlider.tsx","components/RiskSlider/RiskSlider.tsx","assets/images/icon-close.svg","components/EsgModal/EsgModal.tsx","assets/images/arrow-right.svg","components/NewsItem/NewsItem.tsx","components/PageLoader/PageLoader.tsx","components/EsgRiskSlider/EsgRiskSlider.tsx","components/Filter/FilterItem/Filter.tsx","components/FsNavbar/FsNavbar.tsx","shared/customHooks/useStreamingNews.tsx","shared/customHooks/useWindowSize.tsx","layouts/defaultLayout/defaultLayout.tsx","layouts/simpleLayout/simpleLayout.tsx","layouts/layoutWithBottomInfo/layoutWithBottomInfo.tsx","layouts/authLayout/authLayout.tsx","shared/context/connect/index.tsx","pages/Test/Test.jsx","components/Filter/FilterContainer.tsx","pages/HomePage/HomePage.tsx","components/CheckMarkOtions/CheckMarkOtions.tsx","components/Layout/WithBottomButton.tsx","shared/lib/tracking.utils.js","pages/StylePicker/StylePicker.tsx","pages/Exclusions/Exclusions.tsx","pages/Environment/Environment.tsx","pages/Social/Social.tsx","pages/Governance/Governance.tsx","pages/Score/ESGInfo/ESGInfo.tsx","pages/Score/Score.tsx","assets/images/swipe-esg.png","assets/images/swipe-impact.png","assets/images/swipe-sri.png","assets/images/swipe-philanthropy.png","assets/images/swipe-esg-desktop.png","assets/images/swipe-impact-desktop.png","assets/images/swipe-sri-desktop.png","assets/images/swipe-philanthropy-desktop.png","pages/Experience/Experience.tsx","pages/HighRanking/HighRanking.js","pages/Momentum/Momentum.tsx","assets/images/search-icon.svg","assets/images/icon-close-grey.svg","pages/StreamingNews/FilterNewsComponent/SearchFilter.tsx","components/NewsDetails/NewsDetails.tsx","pages/StreamingNews/StreamingNews.tsx","pages/Intro/Intro.tsx","pages/Transition/Transition.tsx","assets/images/icon-plus.svg","pages/Preferences/Preferences.tsx","pages/auth/Login/Login.tsx","pages/auth/Otp/Otp.tsx","assets/images/arrow-left.svg","Routes.tsx","assets/images/news-icon.svg","App.tsx","shared/helpers/idleTimer.ts","serviceWorkerRegistration.ts","reportWebVitals.js","index.tsx"],"names":["ACTION_TYPE","CHANGE_LANGUAGE","UPDATE_INVESTMENT_DATA","UPDATE_GROUPED_SUPPORTS","CLEAR_SUPPORTS","GET_USER_PORTFOLIO","CLEAR_USER_INPUT_DATA","REQUEST_FAILED","AUTH","PHONE_NUMBER","REQUEST_OTP_SUCCESS","VALIDATE_TOKEN_SUCCESS","ERROR","UPDATE_USER_ID","LOGOUT","PRODUCTS","INITIALIZE_PRODUCTS","PRODUCTS_LOADED","TOTAL_OF_RECORDS_CHANGED","NUMBER_OF_RECORDS_CHANGED","PRODUCT_FILTER_CHANGED","FILTER_PRODUCT_NAME_CHANGED","IS_PRODUCT_LOADING","MASTER_DATA","STREAMING_NEWS","POST_SEARCH_CRITERIA","GET_SEARCH_CRITERIA","FS_DOMAIN","process","FS_PAGE_LINK","HOME","FUND_LIBRARY","PROFILERS","REPORTS","EDUCATION_CENTER","FUND_DISTRIBUTORS","RISK_PROFILER","SUSTAINABILITY_PROFILER","PATH","FIELDS","STORAGE_KEY","EXPIRATION_TIME","PAGE_SIZE","reducer","TRACKING_APP_NAME","state","action","type","rootState","language","locale","payload","masterData","userId","investmentState","key","value","groupedSupports","style","environment","social","governance","exclusions","experience","portfolio","name","score","description","investHighRanking","investMediocreRanking","threshold","carbonRiskScore","isCarbonDisabled","error","esgRankings","phoneNumber","token","productState","data","paging","total","length","numOfRecords","isLoading","productsLoaded","filters","filterType","selectedFilterList","newsState","searchTerms","persistedState","serializedState","localStorage","getItem","JSON","parse","err","loadState","initialState","productName","productRisk","GlobalContext","createContext","dispatch","GlobalProvider","children","useReducer","AppReducer","useEffect","_","throttle","stringify","setItem","console","log","saveState","Provider","ConnectedIntlProvider","useContext","messages","englishMessages","arabMessages","formatDate","date","moment","format","getDateFromEPOCH","epoch","Date","setUTCSeconds","setUTCMilliseconds","baseUrl","temporaryParseId","adultEntertainment","alcohol","childLabour","palmOil","gambling","tobacco","thermalCoal","controversialWeapons","climateChange","pollutionAndHaze","animalWelfare","diversity","humanRights","communityEngagement","boardIndependence","transparencyDisclosure","shareholderRights","utils","convertEpochToDefaultDateFormat","newDate","epochToLongDateString","getDate","month","getMonth","year","getFullYear","hours","getHours","minutes","getMinutes","seconds","getSeconds","amPm","epochToShortDateString","cnDateTime","dateTime","rfcFromateDateTime","unix","isInStandaloneMode","window","matchMedia","matches","document","referrer","includes","getSupports","map","item","getExclusions","newData","forEach","push","getSupportsByID","exclusionOptions","id","label","tmpCode","causesToSupportOptions","getStringAfterSpecialChar","string","char","split","pop","AUTH_URL","API_URL","axios","interceptors","request","use","config","Promise","reject","response","status","clear","location","replace","validateOTP","password","a","method","headers","url","qs","username","res","resolve","validateToken","Authorization","postUserScore","principal","supports","excludes","submittedAnswers","apiService","requestOTP","channel","getMasterData","getProducts","distributor","getNews","postSearchCriteria","keywords","getSearchCriteria","postTrackingData","selectors","products","modifiedProducts","localStore","productRiskFilter","modifiedData","isin","ISIN","title","FundName","ratingNumber","SustainabilityRating","riskRating","RiskRating","sustainabilityScore","SustainabilityScore","imgSrc","logo","isLowCarbon","LowCarbonDesignation","lastestNavData","latestNav","ClosePrice","toFixed","dateNav","ClosePriceDate","performance","annualizedReturn","benchmarkReturn","ReturnM60","ReturnM36","ReturnM12","ReturnM1","parsedData","Object","assign","minRiskLevel","maxRiskLevel","filterName","filterDirection","orderBy","orderByField","filter","changeLanguage","updateInvestmentData","requestOtpSuccess","verifyOtpSuccess","authError","apiError","parseMasterExclusions","selected","selection","master","toLowerCase","str","code","productError","changeTotalOfRecords","onProductsLoaded","onSetProductLoading","parsedExclusions","modifiedCarbonRiskScore","rows","getFilteredData","modifyProductsData","slice","storeAction","fetchMasterData","updateUserId","newUserId","uuidv4","updateGroupedSupports","selectedSupports","index","indexOf","splice","requestOtp","history","verifyOtp","Error","getUserScore","EN","direction","exclusion","changeNumberOfRecords","onSaveProductsLoaded","productsData","newPageSize","newProductsData","onChangeFilter","onUpdateUserInputFilters","newArr","newArrSupports","onClearSupports","onClearUserInputData","storeNews","storeSearchCriteria","newSearchTermsArr","insert","arr","newItem","finalSearchTermsArr","removeSearchCriteria","x","Button","onButtonClick","onMouseUp","onMouseDown","isSecondary","isFullWidth","isOutline","isDisabled","isBig","isTertiary","isTextButton","isWhiteButton","extraStyle","classes","classnames","className","onClick","disabled","memo","ButtonOption","isChecked","isOnWhiteBg","defaultButtonValue","selectedButtonValue","useState","mouseDown","setMouseDown","classNames","Charts","size","strokewidth","val","setVal","inter","setInterval","prev","clearInterval","createInterVal","halfsize","radius","circumference","Math","PI","trackstyle","strokeWidth","indicatorstyle","strokeDasharray","rotateval","width","height","x1","y1","x2","y2","offset","stopColor","r","cx","cy","transform","stroke","fill","y","textAnchor","CheckMark","React","forwardRef","ref","onCheckMarkChange","e","stopPropagation","htmlFor","checked","onChange","CheckMarkImage","useRef","contentClasses","footerClasses","backgroundImage","current","click","CheckMarkItemContainer","items","onSelect","checkedItem","setCheckedItem","radioChecked","setRadioChecked","handleChange","target","p","_item","toString","CheckMarkOption","values","Tabs","tabMenu","tabActive","onTabClick","isDefaultStyle","listMenu","setListMenu","currentTab","setCurrentTab","idx","handleClick","Children","child","i","Tag","onNormalTagClick","onTagClick","icon","isNormalTag","src","alt","Rating","Array","from","Icons","Navbar","navTitle","isTransparent","isShowProgress","leftButtonValue","rightButtonValue","onLeftButtonClick","onRightButtonClick","progress","Card","props","Chips","isWithTitle","isPrimary","EsgDetails","now","EsgPerformance","tabsMenu","details","EsgHeader","EsgProduct","performanceMenu","handleLogo","ProgressBar","InputWithButton","placeholder","onInputChange","buttonValue","isValid","errorMessage","SwipeButtons","left","right","RIGHT","LEFT","SwipeCard","cards","onSwipe","isMobile","currentDirection","setCurrentDirection","hideGuide","setHideGuide","currentOpacity","setCurrentOpacity","showGuide","setShowGuide","setData","setTimeout","handleOnSwipe","useCallback","swipeDirection","tmpData","updateItem","find","swiped","handleHideGuide","onSwipeStart","onOpacityChange","opacity","op","getCheckImage","RightCheckClean","LeftCheckClean","CardOption","onFirstSwipeStart","content","pos","RightRectCheck","LeftRectCheck","middle","setMiddle","showOutline","setShowOutline","handleMouseDown","getBoundingClientRect","handleMouseUp","handleMouseMove","checkMarkuUrl","zIndex","d","renderButtons","fadeThreshold","swipeThreshold","onMouseEnter","onMouseMove","onMouseOut","onTouchMove","onTouchStart","onTouchEnd","SwipeSummary","getImageSources","IconCheck","IconSkipped","IconClose","Switcher","isOn","isHidden","switchValue","setSwitchValue","IconButton","popupcontent","showPopup","setShowPopup","iconBtnRef","handleClickOutside","event","contains","addEventListener","removeEventListener","IconBtn","FilterSlider","percentage","preposition","minValue","maxValue","minLabel","maxLabel","step","defaultValue","onAfterChange","switcherName","switcherId","switcherIsOn","onSwitchChange","isSwitcherDisabled","isSwitcherHidden","iconBtnId","popupContent","marks","number","min","max","colorVariables","RiskSlider","Range","Slider","trackColor","setTrackColor","onHandleChange","handleTrackGradientColor","isEqual","sort","dots","count","allowCross","pushable","1","5","dotStyle","top","marginLeft","activeDotStyle","borderColor","backgroundColor","railStyle","trackStyle","handleStyle","EsgModal","customClassName","onClose","showModal","onConfirm","withButton","modalRef","ReactDOM","createPortal","CloseIcon","querySelector","NewsItem","newsItemId","newsTitle","primaryTags","secondaryTags","rightIcon","arrowRightIcon","PageLoader","color","EsgRiskSlider","tooltips","parseRiskScoreLabel","useMemo","marginTop","background","border","cursor","Filter","tags","onRemove","onAdd","isEsgPreferences","onHandleRemove","FsNavbar","menu","isCurrent","showMenu","setShowMenu","href","useStreamingNews","saveNews","useQuery","lang","useWindowSize","undefined","windowSize","setWindowSize","handleResize","innerWidth","innerHeight","defaultLayout","Wrapped","showLogo","simpleLayout","layoutWithBottomInfo","BottomInfo","authLayout","connect","mapStateToProps","mapDispatchTopProps","WrappedComponent","mappedState","mappedDispatch","idxItem","keys","rest","onChangeLanguage","FilterContainer","question","defaultValueThreshold","defaultValueCarbonLevel","switcherValue","onSwitcherChange","hide","setHide","onHandleThresholdChange","onHandleCarbonLevelChange","HomePage","fetchMoreData","setState","concat","filteredProducts","onHandleRiskChange","this","onGetProducts","prevProps","prevState","snapshot","isProductLoading","results","dataLength","next","hasMore","loader","scrollableTarget","pullDownToRefreshThreshold","endMessage","textAlign","PureComponent","onNumOfRecordsChanged","onOverwriteProductsLoaded","onSave","onSaveGroupSupports","showExclusionModal","setShowExclusionModal","showSupportModal","setShowSupportModal","onHandleClose","all","then","handleExclusionCheckedItem","Options","optionList","checkedValues","handleItemChecked","WithBottomButton","hideSkip","disable","skipValue","onSkipClick","isGradientBg","isButtonSwapOrder","mainClasses","bottomClasses","trackButtonClick","tracking","arrKeyValue","app","getTrackingData","eventType","body","trackEvent","buildAnswerCodeFromArr","result","prototype","call","mapDispatchToProps","track","investmentStyle","useHistory","renderOptions","desc","answerCode","onGetScore","answersString","handleCheckedItem","env","scoreDesc","esgPreferences","esgDesc","Evangelist","Passionate","Advocate","Supportive","Indifferent","esgType","E","S","G","renderEsgPreferences","esgProfile","totalScore","getScoreByType","preferences","itemDescription","onRestart","esgElement","showSponsor","showSponsorOnMobile","currentId","setCurrentId","isMobileSize","dummy","isMobileOnly","VentureImg","VentureImgDesktop","order","ImpactImg","ImpactImgDesktop","SriImg","SriImgDesktop","EsgImg","EsgImgDesktop","renderToolTips","answer","video","frameBorder","allowFullScreen","clonedData","nextToSwipe","changedVal","onHandleTooltipClick","b","dangerouslySetInnerHTML","__html","paddingTop","absolute","trend","SearchFilter","showSearchFilter","onKeyDownSearchInput","searchVal","onHandleSearchVal","onSeachValReset","tagLength","clearBtnVal","onHandleClearBtn","searchFilterRef","searchIcon","onKeyDown","closeIcon","NewsDetails","dateString","author","whiteSpace","newsData","searchHistory","onStoreSearchHistory","onRemoveSearchCriteria","onGetSearchHistory","displaySearchFilter","onCloseSearchFilter","isFetching","showNewsDetails","setShowNewsDetails","setNewsTitle","newsDescription","setDescription","newsPublishDate","setPublishDate","searchTerm","setSearchTerm","filteredSearch","newsDataCopy","codes","message","match","searchedVal","currentTarget","textContent","product","publishDate","isIOS","introClass","introWelcomeImg","handleStartBtn","classList","add","remove","loop","autoPlay","controls","playsInline","muted","allow","maxHeight","maxWidth","appearance","showTipsPopup","setShowTipsPopup","isFirstTransition","URLSearchParams","search","getAll","renderIconSrc","renderDesc","renderSkipValue","renderButtonValue","InfoIcon","rel","FUND_LIBRARY_URL","isSubmitted","setIsSubmitted","is2ndBtnSubmitted","set2ndBtnSubmitted","setCarbonRiskScore","level","environmentScore","setEnvironmentScore","socialScore","setSocialScore","governanceScore","setGovernanceScore","exclusionThreshold","setExclusionThreshold","initFilter","setInitFilter","getFormData","carbonRiskMin","carbonRiskMax","eRisk","sRisk","gRisk","exclusionThresHold","esgRiskTooltips","renderPrimaryButton","display","justifyContent","alignItems","renderSecondaryButton","open","formData","excludesValue","excludesCode","trackExploreSustainableInvesting","PlusIcon","minHeight","onHandleLogin","onValidateToken","mobile","setMobile","setIsLoading","buttonVal","preventDefault","onSubmit","interval","CODE_LENGTH","Otp","input","handleResendCode","onHandleResendOTP","timer","resendCodeDuration","handleKeyUp","onHandleOTP","handleFocus","focus","focused","handleBlur","createRef","caretColor","clearTimeout","formatMessage","intl","v","filled","onBlur","onKeyUp","time","zone","injectIntl","BackImg","ArrowLeft","SearchImg","withRouter","setShowSearchFilter","handleSearchFilter","path","exact","render","goBack","trackData","TrackedApp","isBrowser","deviceType","refreshApp","timerRef","expirationDate","rightNow","getTime","removeItem","t","element","callback","expirationTime","App","resetTimer","onmousemove","onmousedown","onclick","onscroll","onkeypress","touches","idleTimer","get","newUrl","URL","searchParams","delete","replaceState","queryClient","QueryClient","defaultOptions","queries","refetchOnWindowFocus","QueryClientProvider","client","Boolean","hostname","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","container","getElementById","devToolOption","debugReducer","debugContext","disableAutoMode","debugContextDevtool","navigator","serviceWorker","ready","registration","unregister","catch"],"mappings":"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","file":"static/js/main.f48809dc.chunk.js","sourcesContent":["const ACTION_TYPE = {\n CHANGE_LANGUAGE: 'CHANGE_LANGUAGE',\n\n UPDATE_INVESTMENT_DATA: 'UPDATE_INVESTMENT_DATA',\n UPDATE_GROUPED_SUPPORTS: 'UPDATE_GROUPED_SUPPORTS',\n CLEAR_SUPPORTS: 'CLEAR_SUPPORTS',\n GET_USER_PORTFOLIO: 'GET_USER_PORTFOLIO',\n CLEAR_USER_INPUT_DATA: 'CLEAR_USER_INPUT_DATA',\n\n REQUEST_FAILED: 'REQUEST_FAILED', \n\n AUTH: {\n PHONE_NUMBER: 'PHONE_NUMBER',\n REQUEST_OTP_SUCCESS: 'REQUEST_OTP_SUCCESS',\n VALIDATE_TOKEN_SUCCESS: 'VALIDATE_TOKEN_SUCCESS',\n ERROR: 'AUTH_ERROR',\n UPDATE_USER_ID: 'UPDATE_USER_ID',\n LOGOUT: 'LOGOUT'\n },\n PRODUCTS: {\n INITIALIZE_PRODUCTS: 'INITIALIZE_PRODUCTS',\n PRODUCTS_LOADED: 'PRODUCTS_LOADED',\n TOTAL_OF_RECORDS_CHANGED: 'TOTAL_OF_RECORDS_CHANGED',\n NUMBER_OF_RECORDS_CHANGED: 'NUMBER_OF_RECORDS_CHANGED',\n PRODUCT_FILTER_CHANGED: 'PRODUCT_FILTER_CHANGED',\n FILTER_PRODUCT_NAME_CHANGED: 'FILTER_PRODUCT_NAME_CHANGED',\n ERROR: 'FAILED_FETCHING_PRODUCTS',\n IS_PRODUCT_LOADING: 'IS_PRODUCT_LOADING',\n },\n\n MASTER_DATA: 'SAVE_MASTER_DATA',\n\n STREAMING_NEWS: 'STREAMING_NEWS',\n POST_SEARCH_CRITERIA: 'POST_SEARCH_CRITERIA',\n GET_SEARCH_CRITERIA: 'GET_SEARCH_CRITERIA',\n};\n\nexport default ACTION_TYPE;\n","const FS_DOMAIN = process.env.REACT_APP_FUND_SINGAPORE_DOMAIN;\n\nexport const FS_PAGE_LINK = {\n HOME: FS_DOMAIN,\n FUND_LIBRARY: `${FS_DOMAIN}/fund-library`,\n PROFILERS: '#',\n REPORTS: 'https://imas.org.sg/education/fundsingapore',\n EDUCATION_CENTER: `${FS_DOMAIN}/education-center`,\n FUND_DISTRIBUTORS: '#',\n RISK_PROFILER: `${FS_DOMAIN}/profilers/risk-tolerance`,\n SUSTAINABILITY_PROFILER: '#'\n}\n\nexport const PATH = {\n INDEX: '/',\n OTP: '/otp',\n INTRO: '/intro',\n TEST: '/test',\n STYLE_PICKER: '/stylepicker',\n ENVIRONMENT: '/environment',\n SOCIAL: '/social',\n GOVERNANCE: '/governance',\n SCORE: '/esg-score',\n EXCLUSIONS: '/exclusions',\n EXPERIENCE: '/experience',\n HOME: '/homepage',\n HIGH_RANKING: '/high-esg-ranking',\n MOMENTUM: '/momentum-ranking',\n PREFERENCES: '/preferences',\n STREAMING_NEWS: '/streaming-news',\n TRANSITION: '/transition'\n};\n\nexport const FIELDS = {\n STYLE: 'style',\n EXCLUSIONS: 'exclusions',\n ENVIRONMENT: 'environment',\n SOCIAL: 'social',\n GOVERNANCE: 'governance',\n EXPRIENCE: 'experience',\n HIGH_RANKING: 'investHighRanking',\n MOMENTUM: 'investMediocreRanking',\n PRODUCT_RISK: 'productRisk',\n GROUPED_SUPPORTS: 'groupedSupports',\n CARBON_RISK_SCORE:'carbonRiskScore',\n THRESHOLD:'threshold',\n IS_CARBON_DISABLED: 'isCarbonDisabled'\n};\n\nexport const STORAGE_KEY = {\n ESG_STATE: 'stateEsgFS',\n EXPIRATION_DATE: 'stateEsgFSExpiration'\n}\n\n/** 30mins expiration time */\nexport const EXPIRATION_TIME = 1800000; // 15000 (15 secs)\n\nexport const PAGE_SIZE = 10;\n\nexport const TRACKING_DATA = {\n appName: process.env.TRACKING_APP_NAME || 'imas-staging',\n actionType: {\n pageView: 'pageView',\n click: 'click,'\n }\n}","// eslint-disable-next-line no-unused-vars\nimport { State, Actions } from 'shared/types';\nimport ACTION_TYPE from 'shared/constants/actionTypes';\nimport { PAGE_SIZE } from 'shared/constants/constants';\n\nconst getNumOfRecords = total => (total > PAGE_SIZE ? PAGE_SIZE : total);\n\nconst reducer = (state: State, action: Actions) => {\n switch (action.type) {\n case ACTION_TYPE.CHANGE_LANGUAGE:\n return {\n ...state,\n rootState: {\n ...state.rootState,\n language: { locale: action.payload},\n }\n };\n case ACTION_TYPE.MASTER_DATA:\n return {\n ...state,\n rootState: {\n ...state.rootState,\n masterData: action.payload,\n }\n };\n case ACTION_TYPE.AUTH.UPDATE_USER_ID:\n return {\n ...state,\n rootState: {\n ...state.rootState,\n userId: action.payload,\n }\n };\n case ACTION_TYPE.UPDATE_INVESTMENT_DATA:\n return {\n ...state,\n investmentState: {\n ...state.investmentState,\n [action.payload.key]: action.payload.value,\n }\n };\n\n case ACTION_TYPE.UPDATE_GROUPED_SUPPORTS:\n return {\n ...state,\n investmentState: {\n ...state.investmentState,\n groupedSupports: action.payload,\n }\n };\n \n case ACTION_TYPE.CLEAR_SUPPORTS:\n return {\n ...state,\n investmentState: {\n ...state.investmentState,\n // environment: '',\n // social: '',\n // governance: '',\n groupedSupports: [], \n }\n }\n \n case ACTION_TYPE.CLEAR_USER_INPUT_DATA:\n return {\n ...state,\n investmentState: {\n ...state.investmentState,\n style: '',\n environment: [],\n social: [],\n governance: [],\n groupedSupports: [], \n exclusions: [], \n experience: [],\n portfolio: {\n name: '',\n score: 0,\n description: ''\n },\n investHighRanking: '',\n investMediocreRanking: '',\n threshold: 2.0,\n carbonRiskScore: 10,\n isCarbonDisabled: false, \n }\n }\n\n case ACTION_TYPE.REQUEST_FAILED:\n return {\n ...state,\n investmentState: {\n ...state.investmentState,\n error: action.payload,\n }\n };\n \n /** Store Score based on user Input */\n case ACTION_TYPE.GET_USER_PORTFOLIO:\n return {\n ...state,\n investmentState: {\n ...state.investmentState,\n portfolio: {\n name: action.payload.name,\n score: action.payload.score,\n description: action.payload.description,\n esgRankings: action.payload.esgRankings\n },\n error: null,\n }\n }\n // case ACTION_TYPE.INVESTMENT_STYLE:\n // return {\n // ...state,\n // investmentState: {\n // ...state.investmentState,\n // [FIELDS.STYLE]: action.payload,\n // }\n // };\n\n case ACTION_TYPE.AUTH.REQUEST_OTP_SUCCESS:\n return {\n ...state,\n rootState: {\n ...state.rootState,\n phoneNumber: action.payload,\n error: null,\n }\n };\n case ACTION_TYPE.AUTH.VALIDATE_TOKEN_SUCCESS:\n return {\n ...state,\n rootState: {\n ...state.rootState,\n token: action.payload,\n error: null,\n }\n };\n case ACTION_TYPE.AUTH.ERROR:\n return {\n ...state,\n rootState: {\n ...state.rootState,\n token: null,\n error: action.payload,\n }\n };\n\n case ACTION_TYPE.PRODUCTS.INITIALIZE_PRODUCTS:\n return {\n ...state,\n productState: {\n ...state.productState,\n data: action.payload,\n paging: {\n total: action.payload.length,\n numOfRecords: getNumOfRecords(action.payload.length),\n },\n error: null\n }\n };\n \n case ACTION_TYPE.PRODUCTS.IS_PRODUCT_LOADING:\n return {\n ...state,\n productState: {\n ...state.productState,\n isLoading: action.payload\n }\n }\n\n case ACTION_TYPE.PRODUCTS.PRODUCTS_LOADED:\n return {\n ...state,\n productState: {\n ...state.productState,\n productsLoaded: action.payload,\n error: null,\n }\n }\n case ACTION_TYPE.PRODUCTS.PRODUCT_FILTER_CHANGED:\n return {\n ...state,\n productState: {\n ...state.productState,\n filters: {\n ...state.productState.filters,\n [action.payload.filterType]: [...action.payload.selectedFilterList],\n },\n },\n };\n\n case ACTION_TYPE.PRODUCTS.NUMBER_OF_RECORDS_CHANGED:\n return {\n ...state,\n productState: {\n ...state.productState,\n paging: {\n ...state.productState.paging,\n numOfRecords:\n action.payload > state.productState.paging.total\n ? state.productState.paging.total\n : action.payload,\n },\n },\n };\n case ACTION_TYPE.PRODUCTS.TOTAL_OF_RECORDS_CHANGED:\n return {\n ...state,\n productState: {\n ...state.productState,\n paging: {\n ...state.productState.paging,\n total: action.payload,\n },\n },\n };\n\n case ACTION_TYPE.PRODUCTS.ERROR:\n return {\n ...state,\n productState: {\n ...state.productState,\n error: action.payload,\n }\n };\n\n case ACTION_TYPE.STREAMING_NEWS:\n return {\n ...state,\n newsState: {\n ...state.newsState,\n data: action.payload,\n error: null,\n }\n };\n\n case ACTION_TYPE.POST_SEARCH_CRITERIA:\n return {\n ...state,\n newsState: {\n ...state.newsState,\n searchTerms: action.payload,\n }\n };\n\n case ACTION_TYPE.GET_SEARCH_CRITERIA:\n return {\n ...state,\n newsState: {\n ...state.newsState,\n searchTerms: action.payload,\n }\n };\n\n default:\n return state;\n }\n};\n\nexport default reducer;","// eslint-disable-next-line no-unused-vars\nimport React, { createContext, useReducer, useEffect } from 'react';\nimport _ from 'lodash';\nimport { Context } from 'shared/types';\nimport AppReducer from '../reducers/index';\nimport { loadState, saveState } from './localStorage';\n\nconst persistedState = loadState();\n\nconst portfolioInitialState = {\n name: '',\n score: 0,\n description: '',\n esgRankings: []\n};\n\nexport const initialState = {\n rootState: {\n language: { locale: 'EN' },\n masterData: (persistedState && persistedState.rootState && persistedState.rootState.masterData) || null,\n phoneNumber: (persistedState && persistedState.rootState && persistedState.rootState.phoneNumber) || '+65',\n token: (persistedState && persistedState.rootState && persistedState.rootState.token) || '',\n userId: (persistedState && persistedState.rootState && persistedState.rootState.userId) || '',\n error: ''\n },\n investmentState: {\n style: (persistedState && persistedState.investmentState && persistedState.investmentState.style) || '',\n exclusions: (persistedState && persistedState.investmentState && persistedState.investmentState.exclusions) || [],\n environment: (persistedState && persistedState.investmentState && persistedState.investmentState.environment) || [],\n social: (persistedState && persistedState.investmentState && persistedState.investmentState.social) || [],\n governance: (persistedState && persistedState.investmentState && persistedState.investmentState.governance) || [],\n experience: (persistedState && persistedState.investmentState && persistedState.investmentState.experience) || [],\n portfolio: (persistedState && persistedState.investmentState && persistedState.investmentState.portfolio) || portfolioInitialState,\n investHighRanking: (persistedState && persistedState.investmentState && persistedState.investmentState.investHighRanking) || '',\n investMediocreRanking: (persistedState && persistedState.investmentState && persistedState.investmentState.investMediocreRanking) || '',\n groupedSupports: (persistedState && persistedState.investmentState && persistedState.investmentState.groupedSupports) || [],\n threshold: (persistedState && persistedState.investmentState && persistedState.investmentState.threshold) || 2.0,\n carbonRiskScore: (persistedState && persistedState.investmentState && persistedState.investmentState.carbonRiskScore) || 10,\n isCarbonDisabled: (persistedState && persistedState.investmentState && persistedState.investmentState.isCarbonDisabled) || false,\n error: null,\n },\n productState: {\n data: [],\n productsLoaded: [], // (persistedState && persistedState.productState && persistedState.productState.productsLoaded) || \n isLoading: true,\n paging: {\n total: 0,\n numOfRecords: 0,\n },\n filters: {\n productName: '',\n productRisk: [1,4]\n }\n },\n newsState: {\n data: [],\n searchTerms: [],\n error: null,\n }\n};\n\nexport const GlobalContext = createContext({\n state: initialState,\n dispatch: () => {},\n});\n\ntype Props = {\n children: JSX.Element;\n};\n\nexport const GlobalProvider: React.FC = ({ children }) => {\n const [state, dispatch] = useReducer(AppReducer, initialState);\n useEffect(\n _.throttle(() => {\n saveState({\n ...persistedState,\n rootState: state.rootState,\n investmentState: state.investmentState,\n productState: state.productState,\n newsState: state.newsState,\n });\n }, 1000),\n [state]\n );\n\n return (\n \n {children}\n \n );\n};\n","import { STORAGE_KEY } from 'shared/constants/constants';\n\n/* eslint-disable no-undef */\nexport const loadState = () => {\n try {\n const serializedState = localStorage.getItem(STORAGE_KEY.ESG_STATE);\n if (serializedState === null) {\n return undefined;\n }\n return JSON.parse(serializedState);\n } catch (err) {\n return undefined;\n }\n};\n\nexport const saveState = (state: any) => {\n try {\n const serializedState = JSON.stringify(state);\n localStorage.setItem(STORAGE_KEY.ESG_STATE, serializedState);\n } catch {\n // ignore write errors\n console.log('Oops!');\n }\n};\n\nexport const clearStorage = async (listItem: any[]) => {\n try {\n await listItem.map((item: string) => localStorage.removeItem(item));\n } catch (error) {\n console.log(error);\n }\n};\n","/* eslint-disable global-require */\nimport React, { useContext } from 'react';\nimport { GlobalContext } from 'shared/context/store';\nimport { IntlProvider } from 'react-intl';\nimport englishMessages from 'shared/translations/en.json';\nimport arabMessages from 'shared/translations/ar.json';\n\n// import { geti18n } from 'shared/services/api';\n// TODO investigate this\n// if (!Intl.PluralRules) {\n// require('@formatjs/intl-pluralrules/polyfill');\n// require('@formatjs/intl-pluralrules/dist/locale-data/en');\n// require('@formatjs/intl-pluralrules/dist/locale-data/ar');\n// }\n\ninterface Props {\n children: React.ReactNode;\n}\n\n// const ConnectedIntlProvider: React.FC = ({ children }): JSX.Element => {\n// const { state } = useContext(GlobalContext);\n// const { language: { locale }, clientData: { token } } = state.rootState;\n// const [i18n, setI18n] = useState({});\n// useEffect(() => {\n// geti18n(token).then((res) => {\n// setI18n(res.data);\n// });\n// }, [token]);\n// return (\n// \n// {children}\n// \n// );\n// };\n\nconst ConnectedIntlProvider: React.FC = ({ children }): JSX.Element => {\n const { state } = useContext(GlobalContext);\n const {\n language: { locale },\n } = state.rootState;\n\n const getMessage: any = () => {\n if (locale === 'EN') {\n return englishMessages;\n }\n return arabMessages;\n };\n return (\n \n {children}\n \n );\n};\n\nexport default ConnectedIntlProvider;\n","import moment from 'moment';\nimport 'moment/min/locales';\n\n/** Format date e.g. 07 Feb 2020 */\nconst formatDate = (date: string | Date) => {\n return moment(date).format('DD MMM YYYY')\n}\n\n/**\n * Converts from numeric epoch to date object\n * @params epoch : epoch (UNIX) time\n * @returns date object\n */\nconst getDateFromEPOCH = (epoch) => {\n let date = new Date(0); // The 0 there is the key, which sets the date to the epoch\n if (epoch.length < 12) {\n date.setUTCSeconds(epoch);\n } else {\n date.setUTCMilliseconds(epoch);\n }\n return date;\n};\n\n/**\n * Converts EPOCH//UNIT TIMESTAMP into human readble date\n * in this format DD/MM/YYYY e.g. 24/10/2020\n * @params epoch : unixTimestamp\n * @returns DD/MM/YYYY\n */\nconst convertEpochToDefaultDateFormat = (epoch) => {\n const newDate = getDateFromEPOCH(epoch);\n return formatDate(newDate);\n};\n\n/**\n * Converts EPOCH//UNIT TIMESTAMP into date string to be used\n * for < LastUpdated /> component\n * in this format DD MMMM YYYY, hh:MM:SS AM/PM e.g. 29 December 2020, 3:10:29 PM\n * @params epoch : unixTimestamp\n * @returns DD MMMM YYYY, hh:MM:SS AM/PM\n */\nconst epochToLongDateString = (epoch) => {\n // get date object using getDateFromEPOCH util from above\n const newDate = getDateFromEPOCH(epoch);\n\n const monthNames = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ];\n\n // Extract date components from date object\n var date : string | number = newDate.getDate();\n const month = monthNames[newDate.getMonth()];\n const year = newDate.getFullYear();\n var hours = newDate.getHours();\n var minutes : string | number = newDate.getMinutes();\n var seconds : string | number = newDate.getSeconds();\n const amPm = hours >= 12 ? \"PM\" : \"AM\";\n\n // Formatting\n hours = hours % 12; // 12-hr format\n hours = hours ? hours : 12; // the hour '0' should be '12'\n date = date < 10 ? \"0\" + date : date; // Add '0' in front of single digit\n minutes = minutes < 10 ? \"0\" + minutes : minutes; // Add '0' in front of single digit\n seconds = seconds < 10 ? \"0\" + seconds : seconds; // Add '0' in front of single digit\n\n var strTime = ` ${date} ${month} ${year}, ${hours}:${minutes}:${seconds} ${amPm}`;\n return strTime;\n};\n\n\n/**\n * Converts EPOCH//UNIT TIMESTAMP into date string to be used\n * for < LastUpdated /> component\n * in this format DD MMMM YYYY, hh:MM:SS AM/PM e.g. 29 December 2020, 3:10:29 PM\n * @params epoch : unixTimestamp\n * @returns DD MMMM YYYY, hh:MM:SS AM/PM\n */\n const epochToShortDateString = (epoch) => {\n // get date object using getDateFromEPOCH util from above\n const newDate = getDateFromEPOCH(epoch);\n\n const monthNames = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ];\n\n // Extract date components from date object\n var date : string | number = newDate.getDate();\n const month = monthNames[newDate.getMonth()];\n const year = newDate.getFullYear();\n var hours = newDate.getHours();\n var minutes : string | number = newDate.getMinutes();\n const amPm = hours >= 12 ? \"PM\" : \"AM\";\n\n // Formatting\n hours = hours % 12; // 12-hr format\n hours = hours ? hours : 12; // the hour '0' should be '12'\n date = date < 10 ? \"0\" + date : date; // Add '0' in front of single digit\n minutes = minutes < 10 ? \"0\" + minutes : minutes; // Add '0' in front of single digit\n\n var strTime = ` ${date} ${month} ${year}, ${hours}:${minutes} ${amPm}`;\n return strTime;\n};\n\n/**\n * Converts string (dateTime) to CN standards\n * First convert EPOCH to RFC2822 standard format\n * in this format YYYY MM DD, hh:MM e.g. 2021年3月11日 21:02\n * @returns CN: YYYY MM DD, hh:MM\n */\nconst cnDateTime = (dateTime) => {\n var rfcFromateDateTime = moment.unix(dateTime).format('YYYY-MM-DD HH:mm:ss')\n return moment(rfcFromateDateTime).locale('zh-cn').format('lll')\n}\n\n/** Asset's public directory */\nconst baseUrl = process.env.NODE_ENV === 'production'\n ? `${process.env.PUBLIC_URL}assets`\n : 'assets';\n\n /**\n * is app running as PWA\n */\nconst isInStandaloneMode = () => (window.matchMedia('(display-mode: standalone)').matches) || document.referrer.includes('android-app://');\n\n/** temporary method to parsed IDs (use the master data) */\nconst temporaryParseId = {\n adultEntertainment: 'Adult entertainment',\n alcohol: 'Alcohol',\n childLabour: 'Child labour',\n palmOil: 'Palm oil',\n gambling: 'Gambling',\n tobacco: 'Tobacco',\n thermalCoal: 'Thermal coal',\n controversialWeapons: 'Controversial weapons',\n climateChange: 'Climate Change',\n pollutionAndHaze: 'Pollution and haze',\n animalWelfare: 'Animal welfare',\n diversity: 'Diversity',\n humanRights: 'Human rights',\n communityEngagement: 'Community engagement',\n boardIndependence: 'Board independence',\n transparencyDisclosure: 'Transparency & disclosure',\n shareholderRights: 'Shareholder rights'\n};\n\n/** Get supports */\nconst getSupports = (environment, social, governance) => {\n let data = [];\n if (environment) {\n // data.push(temporaryParseId[environment]);\n data = [...data, ...environment.map((item: string) => temporaryParseId[item])];\n }\n if (social) {\n // data.push(temporaryParseId[social])\n data = [...data, ...social.map((item: string) => temporaryParseId[item])];\n }\n if (governance) {\n // data.push(temporaryParseId[governance])\n data = [...data, ...governance.map((item: string) => temporaryParseId[item])];\n }\n return data;\n}\n\nconst getSupportsByID = (environment, social, governance) => {\n let data = [];\n if (environment) {\n // data.push(environment);\n data = [...data, ...environment];\n }\n if (social) {\n // data.push(social)\n data = [...data, ...social];\n }\n if (governance) {\n // data.push(governance)\n data = [...data, ...governance];\n }\n return data;\n}\n\nconst getExclusions = (data) => {\n let newData = [];\n data.forEach((item) => {\n newData.push(temporaryParseId[item]);\n })\n return newData;\n}\n\nconst exclusionOptions = [\n {id: 'palmOil', label: 'Palm oil', tmpCode: 'nw.esg.exclusion.palm_oil'},\n {id: 'thermalCoal', label: 'Thermal coal', tmpCode: 'nw.esg.exclusion.thermal_coal'},\n {id: 'alcohol', label: 'Alcohol', tmpCode: 'nw.esg.exclusion.alcohol'},\n {id: 'gambling', label: 'Gambling', tmpCode: 'nw.esg.exclusion.gambling'},\n {id: 'tobacco', label: 'Tobacco', tmpCode: 'nw.esg.exclusion.tobacco'},\n {id: 'controversialWeapons', label: 'Controversial weapons', tmpCode: 'nw.esg.exclusion.controversial_weapons'},\n {id: 'adultEntertainment', label: 'Adult entertainment', tmpCode: 'nw.esg.exclusion.adult_entertainment'},\n // {id: 'childLabour', label: 'Child labour'}\n];\n\nconst causesToSupportOptions = [\n {id: 'climateChange', label: 'Climate Change' },\n {id: 'pollutionAndHaze', label: 'Pollution and haze' },\n {id: 'animalWelfare', label: 'Animal welfare' },\n {id: 'diversity', label: 'Diversity' },\n {id: 'humanRights', label: 'Human rights' },\n {id: 'communityEngagement', label: 'Community engagement' },\n {id: 'boardIndependence', label: 'Board independence' },\n {id: 'transparencyDisclosure', label: 'Transparency & disclosure' },\n {id: 'shareholderRights', label: 'Shareholder rights' }\n]\n\n/**\n * Get string after last char\n * @param string \n * @param char \n * e.g. getStringAfterSpecialChar('nw.esg.env.climate_change', '.')\n * @returns climate_change\n */\nconst getStringAfterSpecialChar = (string, char) => {\n const newStr = string.split(char).pop();\n return newStr\n}\n\nconst utils = {\n formatDate,\n getDateFromEPOCH,\n convertEpochToDefaultDateFormat,\n epochToLongDateString,\n epochToShortDateString,\n cnDateTime,\n baseUrl,\n isInStandaloneMode,\n temporaryParseId,\n\n getSupports,\n getExclusions,\n getSupportsByID,\n\n exclusionOptions,\n causesToSupportOptions,\n\n getStringAfterSpecialChar\n}\n\nexport default utils;","import axios from 'axios';\nimport qs from 'qs';\n\nconst AUTH_URL = process.env.REACT_APP_AUTH;\nconst API_PORTFOLIO_URL = process.env.REACT_APP_API_PORTFOLIO;\nconst API_FUNDS_URL = process.env.REACT_APP_API_FUNDS;\nconst API_URL = process.env.REACT_APP_API;\nconst MASTER_DATA_URL = process.env.REACT_APP_MASTER_DATA_API;\nconst TRACKING_API_URL = process.env.REACT_APP_TRACKING_API_URL_IMAS;\n\n// Request interceptor\naxios.interceptors.request.use((config) => config, (error) => Promise.reject(error));\n\n// Response interceptor\naxios.interceptors.response.use((response) => response, (error) => {\n const { status } = error.response;\n if (status === 401) {\n localStorage.clear();\n window.location.replace('/');\n }\n return Promise.reject(error);\n});\n\n/**\n * Request OTP\n * @param phoneNumber\n */\nconst requestOTP = (phoneNumber) => {\n try {\n const res = axios({\n method: 'POST',\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n url: `${AUTH_URL}/otp`,\n // url: `${AUTH_URL}/otp?channel=smart_advice&username=${phoneNumber}`,\n data: qs.stringify({ channel: 'smart_advice', username: phoneNumber }),\n });\n return Promise.resolve(res);\n } catch (error) {\n return Promise.reject(error.response);\n }\n};\n\n/**\n * Validate OTP received on the phone number\n * @param phoneNumber \n * @param password \n * @returns token\n */\nconst validateOTP = async (phoneNumber, password) => {\n try {\n const res = await axios({\n method: 'POST',\n headers: { 'content-type': 'application/x-www-form-urlencoded' },\n url: `${AUTH_URL}/otp/login`,\n // url: `${AUTH_URL}/otp?channel=smart_advice&username=${phoneNumber}`,\n data: qs.stringify({ password, username: phoneNumber }),\n });\n return Promise.resolve(res);\n } catch (error) {\n return Promise.reject(error.response);\n }\n};\n\n/**\n * Check if token is valid\n * @param token \n * @returns true if valid\n */\nconst validateToken = async (token) => {\n try {\n const res = await axios({\n method: 'POST',\n headers: { Authorization: `Bearer ${token}` },\n url: `${AUTH_URL}/auth/token`,\n });\n return Promise.resolve(res);\n } catch (error) {\n return Promise.reject(error.response);\n }\n}\n\n/**\n * Get User Portfolio based on user inputted data\n * @param token string\n * @param principal string (phoneNumber)\n * @param supports Array\n * @param excludes Array\n */\nconst postUserScore = async (token, principal, supports, excludes, threshold, carbonRiskScore, submittedAnswers) => {\n try {\n const res = await axios({\n method: 'POST',\n headers: { Authorization: `Bearer ${token}`, principal },\n url: API_PORTFOLIO_URL,\n data: { supports, excludes, threshold, carbonRiskScore, submittedAnswers }\n });\n return Promise.resolve(res.data);\n } catch (error) {\n return Promise.reject(error.response);\n }\n}\n\n/** Master data for options */\nconst getMasterData = async () => {\n try {\n const res = await axios({\n method: 'GET',\n headers: { 'Content-type': 'application/json', 'charset':'utf-8' },\n url: MASTER_DATA_URL,\n });\n return Promise.resolve(res.data);\n } catch (error) {\n return Promise.reject(error.response);\n }\n}\n\nconst getProducts = async (token, supports, excludes, threshold, carbonRiskScore) => {\n try {\n const res = await axios({\n method: 'POST',\n headers: { Authorization: `Bearer ${token}`, distributor: 'esg' },\n url: API_FUNDS_URL,\n data: { excludes, supports, threshold, carbonRiskScore },\n });\n return Promise.resolve(res.data);\n } catch (error) {\n return Promise.reject(error.response);\n }\n}\n\nconst getNews = async (language) => {\n try {\n const res = await axios({\n method: 'GET',\n headers: { 'Content-type': 'application/json', 'charset':'utf-8' },\n url: `${API_URL}rss?locale=${language}`,\n });\n return Promise.resolve(res.data);\n } catch (error) {\n return Promise.reject(error.response);\n }\n}\n\nconst postSearchCriteria = async (token, keywords) => {\n try {\n const res = await axios({\n method: 'POST',\n headers: { Authorization: `Bearer ${token}` },\n url: `${API_URL}user/rss/search-criteria`,\n data: { keywords },\n });\n return Promise.resolve(res.data);\n } catch (error) {\n return Promise.reject(error.response);\n }\n}\n\nconst getSearchCriteria = async (token) => {\n try {\n const res = await axios({\n method: 'GET',\n headers: { 'Content-type': 'application/json', 'charset':'utf-8', Authorization: `Bearer ${token}` },\n url: `${API_URL}user/rss/search-criteria`,\n });\n return Promise.resolve(res.data);\n } catch (error) {\n return Promise.reject(error.response);\n }\n}\n\nconst postTrackingData = async (data) => {\n try {\n const res = await axios({\n method: 'POST',\n url: TRACKING_API_URL,\n data: data,\n });\n return Promise.resolve(res.data);\n } catch (error) {\n return Promise.reject(error.response);\n }\n}\n\n\nconst apiService = {\n requestOTP,\n validateOTP,\n validateToken,\n\n getMasterData,\n postUserScore,\n getProducts,\n\n getNews,\n postSearchCriteria,\n getSearchCriteria,\n\n postTrackingData,\n}\n\nexport default apiService;","// import { FIELDS } from 'shared/constants/constants';\nimport { orderBy } from 'lodash'; // lodash, {uniq, map, compact, property}\nimport { STORAGE_KEY } from './../../constants/constants';\n// import { useContext } from 'react';\n// import { GlobalContext } from 'shared/context/store';\n\n// const {\n// state: { investmentState, productState },\n// } = useContext(GlobalContext);\n\n\n/** \n * Order/ Sort Array by field \n * @param data : array of objects\n * @param filterName(s) : field name to be filtered\n * @param filterDirection : asc / desc \n * */\nconst orderByField = (data = [], filterName, filterDirection = '') => orderBy(data, filterName, filterDirection);\n\nconst products = productState => productState.data;\n\n// const getProductsFilter = productState => productState.filters;\n// const getFilterProductRisk = productState => {\n// return getProductsFilter(productState)[FIELDS.PRODUCT_RISK];\n// }\n// const getFilteredProducts = productState => {\n\n// }\n\nconst modifiedProducts = productState => {\n const products = productState;\n // const productRiskFilter = getFilterProductRisk(productState);\n // const productRiskFilter = productState.filters.productRisk; // FOR SOME REASON, I'M NOT GETTING THE LATEST STATE FROM THE STORE SO I USE LOCAL STATE\n const localStore = JSON.parse(localStorage.getItem(STORAGE_KEY.ESG_STATE));\n const productRiskFilter = localStore && localStore.productState.filters.productRisk;\n\n // console.log('FILTERS ', productRiskFilter[0], productRiskFilter[1]);\n if (!products) {\n return null;\n }\n\n let modifiedData = [];\n\n products && products.forEach((item) => {\n const data = {\n isin: item.ISIN,\n title: item.FundName,\n ratingNumber: item.SustainabilityRating,\n riskRating: item.RiskRating,\n sustainabilityScore: item.SustainabilityScore, // to sort by desc order\n imgSrc: item.logo || null,\n isLowCarbon: item.LowCarbonDesignation,\n }\n const lastestNavData = {\n latestNav: (item.ClosePrice).toFixed(2),\n dateNav: item.ClosePriceDate,\n }\n const performance = [\n { /* INCEPTION */\n annualizedReturn: '6.91%',\n benchmarkReturn: '3.55%',\n ...lastestNavData\n }, { /* 5Y */\n annualizedReturn: (item.ReturnM60 === 0 ? '-' : `${item.ReturnM60}%`) || '-',\n benchmarkReturn: '3.67%',\n ...lastestNavData\n }, { /* 3Y */\n annualizedReturn: (item.ReturnM36 === 0 ? '-' : `${item.ReturnM36}%`) || '-',\n benchmarkReturn: '8.72%',\n ...lastestNavData\n }, { /* 1Y */\n annualizedReturn: (item.ReturnM12 === 0 ? '-' : `${item.ReturnM12}%`) || '-',\n benchmarkReturn: '11.60%',\n ...lastestNavData\n }, { /* 1M */\n annualizedReturn: (item.ReturnM1 === 0 ? '-' : `${item.ReturnM1}%`) || '-',\n benchmarkReturn: '2.34%',\n ...lastestNavData\n }\n ];\n const parsedData = Object.assign(data, {performance});\n modifiedData.push(parsedData);\n })\n const minRiskLevel = productRiskFilter && productRiskFilter[0];\n const maxRiskLevel = productRiskFilter && productRiskFilter[1];\n const filteredDataByRisk = modifiedData.filter((item) => {\n return !!(item.riskRating >= minRiskLevel && item.riskRating <= maxRiskLevel);\n });\n const orderedList = orderByField(filteredDataByRisk, ['ratingNumber', 'sustainabilityScore'], 'desc');\n // console.log('SELECTOR >> FILTERED DATA', orderedList.length, minRiskLevel, maxRiskLevel);\n return orderedList;\n}\n\nconst selectors = {\n products,\n modifiedProducts\n}\n\nexport default selectors;","import { v4 as uuidv4 } from 'uuid';\nimport { STORAGE_KEY } from \"./../../constants/constants\";\n// import { State, Actions } from 'shared/types';\nimport ACTION_TYPE from \"shared/constants/actionTypes\";\nimport apiService from \"shared/services/apiService\";\nimport { PATH, PAGE_SIZE } from \"shared/constants/constants\";\nimport utils from \"shared/helpers/utils\";\nimport selectors from \"shared/context/selectors/index\";\n// import { FIELDS } from 'shared/constants/constants';\n\nexport const changeLanguage = (language: any) => async (dispatch: any) => {\n // const { clientData: { token } } = state.rootState;\n try {\n dispatch({\n type: \"CHANGE_LANGUAGE\",\n payload: language,\n });\n // return res;\n } catch (error) {\n return error;\n }\n};\n\n/** Save master data to the context */\nconst fetchMasterData = () => async (dispatch: any) => {\n try {\n const res = await apiService.getMasterData();\n dispatch({\n type: ACTION_TYPE.MASTER_DATA,\n payload: res,\n });\n } catch (err) {\n apiError(err)(dispatch);\n }\n};\n\nconst updateUserId = (userId) => (dispatch: any, state: any) => {\n if (userId) {\n dispatch({\n type: ACTION_TYPE.AUTH.UPDATE_USER_ID,\n payload: userId,\n });\n } else if (!state.rootState?.userId) {\n const newUserId = uuidv4();\n dispatch({\n type: ACTION_TYPE.AUTH.UPDATE_USER_ID,\n payload: newUserId,\n });\n }\n};\n\nconst updateInvestmentData = (key, value) => (dispatch: any) => {\n dispatch({\n type: ACTION_TYPE.UPDATE_INVESTMENT_DATA,\n payload: {\n key: key,\n value: value,\n },\n });\n};\n\nconst updateGroupedSupports = (payload) => (dispatch: any, state: any) => {\n const { groupedSupports } = state.investmentState;\n // const supports = utils.getSupportsByID(environment, social, governance);\n let selectedSupports = [...groupedSupports];\n\n /** Find index of value (payload) */\n const index = selectedSupports.indexOf(payload);\n if (index !== -1) {\n selectedSupports.splice(index, 1);\n } else {\n selectedSupports.push(payload);\n }\n\n dispatch({\n type: ACTION_TYPE.UPDATE_GROUPED_SUPPORTS,\n payload: selectedSupports,\n });\n};\n\n/** Authentication actions */\nconst requestOtpSuccess = (phoneNumber) => (dispatch) => {\n dispatch({\n type: ACTION_TYPE.AUTH.REQUEST_OTP_SUCCESS,\n payload: phoneNumber,\n });\n};\n\nconst verifyOtpSuccess = (payload: any) => (dispatch: any) => {\n dispatch({\n type: ACTION_TYPE.AUTH.VALIDATE_TOKEN_SUCCESS,\n payload,\n });\n};\n\nconst authError = (payload: any) => (dispatch: any) => {\n dispatch({\n type: ACTION_TYPE.AUTH.ERROR,\n payload,\n });\n};\n\nconst requestOtp = (phoneNumber: string, history: any) => async (dispatch) => {\n try {\n const res = await apiService.requestOTP(phoneNumber);\n if (res && res.status === 204) {\n requestOtpSuccess(phoneNumber)(dispatch);\n history.push(PATH.OTP);\n }\n } catch (error) {\n authError(\"Your phone number is not registered!\")(dispatch);\n }\n};\n\nconst verifyOtp =\n (password: string, history: any) => async (dispatch, state) => {\n const { phoneNumber } = state.rootState;\n try {\n const res = await apiService.validateOTP(phoneNumber, password);\n if (res) {\n verifyOtpSuccess(res.data.token)(dispatch);\n // console.log('PHONE NUMBER FR STORE', phoneNumber, res, history);\n history.push(PATH.INTRO);\n }\n } catch (error) {\n console.log(\"error\", error);\n authError(\"Invalid OTP number\")(dispatch);\n // await dispatch({\n // type: ACTION_TYPE.AUTH.ERROR,\n // payload: 'Invalid OTP number',\n // });\n }\n };\n\nconst validateToken = () => async (dispatch, state) => {\n const { token } = state.rootState;\n try {\n const res = await apiService.validateToken(token);\n if (!res) {\n throw new Error(\"Token is invalid or has expired!\");\n }\n } catch (error) {\n authError(error)(dispatch);\n }\n};\n\n/** Use this action to store the error when requesting for investment api */\nconst apiError = (payload: any) => (dispatch: any) => {\n dispatch({\n type: ACTION_TYPE.REQUEST_FAILED,\n payload,\n });\n};\n\n/** get the code from master data for Exclusion */\nconst parseMasterExclusions = (masterData, selected) => {\n if (!selected.length) {\n return [];\n }\n let selection = [];\n for (let item of selected) {\n selection = [\n ...selection,\n ...masterData\n .filter((master) => master.name.toLowerCase() === item.toLowerCase())\n .map((str) => str.code),\n ];\n }\n return selection;\n};\n\nconst parseExperience = (data) => {\n const parsedData = data.map((item) => {\n if (item.direction === \"left\") {\n return \"nw.esg.experience.no\";\n } else if (item.direction === \"right\") {\n return \"nw.esg.experience.selected\";\n }\n return \"nw.esg.experience.skipped\";\n });\n return parsedData;\n};\n\n/** Get User Portfolio based on user inputted data */\nconst getUserScore = () => async (dispatch, state) => {\n const {\n token,\n phoneNumber,\n masterData: { EN },\n } = state.rootState;\n const {\n style,\n experience,\n investHighRanking,\n investMediocreRanking,\n exclusions,\n groupedSupports,\n threshold,\n carbonRiskScore,\n isCarbonDisabled,\n } = state.investmentState;\n const parsedExclusions = utils.getExclusions(exclusions);\n const modifiedCarbonRiskScore = !exclusions.length ? null : carbonRiskScore;\n // const modifiedCarbonRiskScore = !isCarbonDisabled ? null : carbonRiskScore;\n const submittedAnswers = [\n ...style,\n ...groupedSupports,\n ...parseExperience(experience),\n ...investHighRanking,\n ...investMediocreRanking,\n ...parseMasterExclusions(EN.exclusion, parsedExclusions),\n ];\n // console.log('SUBMIT >> ', submittedAnswers);\n // , exclusions, parsedExclusions, EN.exclusion, parseMasterExclusions(EN.exclusion, parsedExclusions)\n try {\n const res = await apiService.postUserScore(\n token,\n phoneNumber,\n groupedSupports,\n parsedExclusions,\n threshold,\n modifiedCarbonRiskScore,\n submittedAnswers\n );\n await dispatch({\n type: ACTION_TYPE.GET_USER_PORTFOLIO,\n payload: {\n name: res.name,\n score: res.score,\n description: res.description,\n esgRankings: res.esgRankings,\n },\n });\n } catch (error) {\n apiError(error)(dispatch);\n }\n};\n\n/** ACTIONS for PRODUCTS */\n\n/**\n * Call when there is error when fetching products from the API\n */\nconst productError = (payload: any) => (dispatch: any) => {\n dispatch({\n type: ACTION_TYPE.PRODUCTS.ERROR,\n payload,\n });\n};\n\n// const initializeProducts = (payload: any) => (dispatch: any) => {\n// dispatch({\n// type: ACTION_TYPE.PRODUCTS.INITIALIZE_PRODUCTS,\n// payload,\n// })\n// };\n\nconst changeNumberOfRecords = (numOfRecords) => (dispatch: any) => {\n dispatch({\n type: ACTION_TYPE.PRODUCTS.NUMBER_OF_RECORDS_CHANGED,\n numOfRecords,\n });\n};\n\nconst changeTotalOfRecords = (payload) => (dispatch: any) => {\n dispatch({\n type: ACTION_TYPE.PRODUCTS.TOTAL_OF_RECORDS_CHANGED,\n payload,\n });\n};\n\n/**\n * Save products loaded in the homepage result\n * @param payload : array of objects\n */\nconst onProductsLoaded = (payload: any) => (dispatch: any) => {\n dispatch({\n type: ACTION_TYPE.PRODUCTS.PRODUCTS_LOADED,\n payload,\n });\n};\n\n/**\n * This is to handle saving of products loaded for PAGINATION use\n * get and Save new data everytime we paginate\n */\nconst onSaveProductsLoaded = () => (dispatch, state) => {\n const { productsLoaded } = state.productState;\n const productsData = [...productsLoaded];\n const parsedData = selectors.modifiedProducts(state.productState.data);\n const numberToIncrease = PAGE_SIZE;\n const newPageSize = productsData.length + numberToIncrease;\n const newProductsData = [\n ...productsData,\n ...parsedData.slice(productsData.length, newPageSize),\n ];\n\n onProductsLoaded(newProductsData)(dispatch);\n};\n\nconst onSetProductLoading = (payload) => (dispatch: any) => {\n dispatch({\n type: ACTION_TYPE.PRODUCTS.IS_PRODUCT_LOADING,\n payload,\n });\n};\n\nconst getProducts = () => async (dispatch, state) => {\n const { token } = state.rootState;\n const { groupedSupports } = state.investmentState;\n const {\n investmentState: {\n exclusions,\n threshold,\n carbonRiskScore,\n isCarbonDisabled,\n },\n } = JSON.parse(localStorage.getItem(STORAGE_KEY.ESG_STATE));\n // const supports = utils.getSupports(environment, social, governance);\n // console.log('LOCAL ', exclusions, threshold, carbonRiskScore);\n const parsedExclusions = utils.getExclusions(exclusions);\n const modifiedCarbonRiskScore = !isCarbonDisabled ? null : carbonRiskScore;\n\n try {\n const res = await apiService.getProducts(\n token,\n groupedSupports,\n parsedExclusions,\n threshold,\n modifiedCarbonRiskScore\n );\n // const res = await apiService.getProducts(token, groupedSupports, parsedExclusions, threshold, carbonRiskScore);\n // initializeProducts(res.rows)(dispatch);\n onSetProductLoading(true)(dispatch);\n if (res) {\n await dispatch({\n type: ACTION_TYPE.PRODUCTS.INITIALIZE_PRODUCTS,\n payload: res.rows,\n });\n\n const getFilteredData = selectors.modifiedProducts(res.rows);\n // console.log('data after filter', getFilteredData);\n changeTotalOfRecords(getFilteredData.length)(dispatch);\n const modifyProductsData = [...getFilteredData.slice(0, PAGE_SIZE)];\n onProductsLoaded(modifyProductsData)(dispatch);\n onSetProductLoading(false)(dispatch);\n }\n } catch (error) {\n productError(error)(dispatch);\n }\n};\n\n/**\n *\n * @param filterType : field name of the filter\n * @param selectedFilterList\n */\nconst onChangeFilter =\n (filterType, selectedFilterList) => async (dispatch: any) => {\n await dispatch({\n type: ACTION_TYPE.PRODUCTS.PRODUCT_FILTER_CHANGED,\n payload: {\n filterType,\n selectedFilterList,\n },\n });\n\n const localStore = JSON.parse(localStorage.getItem(STORAGE_KEY.ESG_STATE));\n const getFilteredData = selectors.modifiedProducts(\n localStore.productState.data\n );\n const modifyProductsData = [...getFilteredData.slice(0, PAGE_SIZE)];\n // const localStore = JSON.parse(localStorage.getItem('stateEsg'));\n // console.log('ACTION >> GET FILTERED DATA AFTER RISK CHANGE', state.productState.filters, 'LOCAL');\n // console.log('ACTION: filtered length', getFilteredData.length);\n changeTotalOfRecords(getFilteredData.length)(dispatch);\n // onProductsLoaded(modifyProductsData)(dispatch);\n dispatch({\n type: ACTION_TYPE.PRODUCTS.PRODUCTS_LOADED,\n payload: modifyProductsData,\n });\n // const parsedData = selectors.modifiedProducts(state.productState);\n };\n\n/**\n * Use this filter to remove those in the homepage + user inputs\n * @param key : fieldname or variable use for condition\n * @param value : field value\n */\nconst onUpdateUserInputFilters =\n (key, value) => async (dispatch: any, state: any) => {\n const { exclusions, groupedSupports } = state.investmentState;\n\n if (key === \"exclusions\") {\n const newArr = await exclusions.filter((item) => item !== value);\n updateInvestmentData(key, newArr)(dispatch);\n await getProducts()(dispatch, state);\n // }, 500);\n }\n\n if (key === \"supports\") {\n const newArrSupports = groupedSupports.filter((item) => item !== value);\n updateInvestmentData(\"groupedSupports\", newArrSupports)(dispatch);\n // if (environment === value) {\n // updateInvestmentData('environment', '')(dispatch);\n // } else if (social === value) {\n // updateInvestmentData('social', '')(dispatch);\n // } else if (governance === value) {\n // updateInvestmentData('governance', '')(dispatch);\n // }\n }\n };\n\nconst onClearSupports = () => (dispatch: any) => {\n dispatch({ type: ACTION_TYPE.CLEAR_SUPPORTS });\n};\n\nconst onClearUserInputData = () => (dispatch: any) => {\n dispatch({\n type: ACTION_TYPE.CLEAR_USER_INPUT_DATA,\n });\n /** Redirect to Login page */\n window.location.replace(PATH.INDEX);\n};\n\n/**\n * Save news loaded\n * @param payload : array of objects\n */\nconst storeNews = (payload: any) => (dispatch: any) => {\n dispatch({\n type: ACTION_TYPE.STREAMING_NEWS,\n payload,\n });\n};\n\n/**\n * Save search history\n * @param payload : array of objects\n */\nconst storeSearchCriteria = (payload) => async (dispatch, state) => {\n const { token } = state.rootState;\n const { searchTerms } = state.newsState;\n\n let newSearchTermsArr = [...searchTerms];\n const insert = (arr, index, newItem) => [\n ...arr.slice(0, index),\n newItem,\n ...arr.slice(index),\n ];\n const index = newSearchTermsArr.indexOf(payload);\n if (index !== -1) {\n newSearchTermsArr.splice(index, 1, payload);\n } else {\n newSearchTermsArr = insert(newSearchTermsArr, 0, payload);\n }\n let finalSearchTermsArr = newSearchTermsArr.slice(0, 10);\n\n try {\n await apiService.postSearchCriteria(token, finalSearchTermsArr);\n await dispatch({\n type: ACTION_TYPE.POST_SEARCH_CRITERIA,\n payload: finalSearchTermsArr,\n });\n } catch (error) {\n apiError(error)(dispatch);\n }\n};\n\n/**\n * Delete certain searches from search history\n * @param payload : array of objects\n */\nconst removeSearchCriteria = (payload) => async (dispatch, state) => {\n const { token } = state.rootState;\n const { searchTerms } = state.newsState;\n let newSearchTermsArr = [...searchTerms];\n\n newSearchTermsArr = newSearchTermsArr.filter((x) => x !== payload);\n\n try {\n await apiService.postSearchCriteria(token, newSearchTermsArr);\n await dispatch({\n type: ACTION_TYPE.POST_SEARCH_CRITERIA,\n payload: newSearchTermsArr,\n });\n } catch (error) {\n apiError(error)(dispatch);\n }\n};\n\n/**\n * Retrieve search history\n * @param payload : array of objects\n */\nconst getSearchCriteria = () => async (dispatch, state) => {\n const { token } = state.rootState;\n try {\n const res = await apiService.getSearchCriteria(token);\n await dispatch({\n type: ACTION_TYPE.GET_SEARCH_CRITERIA,\n payload: res.keywords,\n });\n } catch (error) {\n apiError(error)(dispatch);\n }\n};\n\nconst storeAction = {\n // updateInvestmentStyle,\n\n fetchMasterData,\n updateUserId,\n\n updateInvestmentData,\n updateGroupedSupports,\n\n requestOtp,\n verifyOtp,\n validateToken,\n\n getUserScore,\n getProducts,\n changeNumberOfRecords,\n changeTotalOfRecords,\n\n onProductsLoaded,\n onSaveProductsLoaded,\n\n onChangeFilter,\n onUpdateUserInputFilters,\n onClearSupports,\n onClearUserInputData,\n\n storeNews,\n storeSearchCriteria,\n removeSearchCriteria,\n getSearchCriteria,\n};\n\nexport default storeAction;\n","/* eslint-disable react/button-has-type */\nimport React, { memo } from 'react';\nimport './Button.scss';\nimport classnames from 'classnames';\n\ninterface Props {\n value: string | React.ReactNode;\n name?: string | undefined;\n type?: 'button' | 'submit' | 'reset' | undefined;\n isSecondary?: boolean;\n isTertiary?: boolean;\n isFullWidth?: boolean;\n isBig?: boolean;\n isOutline?: boolean;\n isDisabled?: boolean;\n onButtonClick?: ((event: React.MouseEvent) => void) | undefined;\n onMouseDown?: any;\n onMouseUp?: any;\n isTextButton?: boolean;\n isWhiteButton?: boolean;\n extraStyle?: any;\n}\n\nconst Button: React.FC = ({\n value,\n name = '',\n type = 'button',\n onButtonClick = () => {},\n onMouseUp = () => {},\n onMouseDown = () => {},\n isSecondary = false,\n isFullWidth = false,\n isOutline = false,\n isDisabled = false,\n isBig = false,\n isTertiary = false,\n isTextButton = false,\n isWhiteButton = false,\n extraStyle = {}\n}): JSX.Element => {\n const classes = classnames({\n 'nw-button': true,\n 'nw-button--outline': isOutline,\n 'nw-button--primary': !isSecondary,\n 'nw-button--secondary': isSecondary,\n 'nw-button--tertiary': isTertiary,\n 'nw-button--isText': isTextButton,\n 'nw-button--isWhite': isWhiteButton,\n 'nw-button--fullwidth': isFullWidth,\n 'nw-button--big': isBig,\n 'nw-button--disabled': isDisabled,\n });\n return (\n <>\n \n {value}\n \n \n );\n};\n\nexport default memo(Button);\n","import React, { memo, useState } from 'react';\nimport classNames from 'classnames';\nimport './ButtonOption.scss';\nimport Button from 'components/Button/Button';\n\ninterface Props {\n name?: string;\n label?: string;\n isChecked?: boolean;\n isDisabled?: boolean;\n value?: string;\n onClick?:\n ((event: any) => void) | undefined;\n isOnWhiteBg?: boolean,\n isSecondary?: boolean,\n defaultButtonValue?: string,\n selectedButtonValue?: string,\n // ((event: React.MouseEvent) => void) | undefined;\n}\n\nconst ButtonOption: React.FC = ({\n label = '',\n isChecked = false,\n isDisabled = false,\n onClick = () => {},\n isOnWhiteBg = false,\n isSecondary = false,\n defaultButtonValue = 'Exclude',\n selectedButtonValue = 'Excluded'\n}): JSX.Element => {\n const [mouseDown, setMouseDown] = useState(false);\n\n const classes = classNames({\n 'nw-button-option': true,\n 'nw-button-option--uncheck': !isChecked, // !mouseDown || \n 'nw-button-option--clicked': isChecked,\n 'nw-button-option--onWhiteBg': isOnWhiteBg,\n 'nw-button-option--secondary': isSecondary,\n 'nw-button-option--disabled': isDisabled,\n // 'nw-checkmark--checked': isChecked,\n\n // 'nw-checkmark--has-container': hasContainer,\n });\n\n return (\n
\n
\n
\n {label}\n
\n
\n setMouseDown(false)}\n onMouseDown={() => setMouseDown(true)}\n isSecondary={isSecondary}\n isOutline={!mouseDown && !isChecked}\n value={isChecked ? selectedButtonValue : defaultButtonValue}\n // onButtonClick={() => setClicked(true)}\n onButtonClick={()=>{}}\n\n />\n
\n );\n};\n\nexport default memo(ButtonOption);\n","import React, { useState, useEffect } from \"react\";\nimport \"./Charts.scss\";\n\ntype Props = {\n value?: number; // value the chart should show\n label: String; // label for the chart\n size?: number; // diameter of chart\n strokewidth?: number; // width of chart line\n};\n\nconst Charts: React.FC = ({\n value = 50,\n label = \"\",\n size = 300,\n strokewidth = 40,\n}) => {\n const [val, setVal] = useState(0);\n // const createInterVal = () =>{\n // return setInterval(()=>{\n // if(val <= value){\n\n // setVal(value);\n // // console.log('aaaa 2',val)\n // }\n // },30)\n // }\n // useEffect(()=>{\n // inter = createInterVal();\n // },[setVal])\n\n // useEffect(()=>{\n // // console.log('aaaa',val)\n\n // if(val >= value){\n // // console.log('aaaa 1',val)\n // clearInterval(inter);\n // }\n // },[val])\n\n // useEffect(()=>{\n // setTimeout(() => {\n // setVal(value);\n // }, 100);\n // },[setVal])\n \n // https://stackoverflow.com/questions/53395147/use-react-hook-to-implement-a-self-increment-counter\n\n\n const createInterVal = () => {\n const inter = setInterval(() => {\n if (val <= value) {\n setVal((prev) => {\n if (prev < value) {\n return prev + 1;\n } else {\n clearInterval(inter);\n return value;\n }\n });\n // console.log(\"aaaa 2\", val);\n }\n }, 10);\n return inter;\n };\n\n useEffect(() => {\n createInterVal();\n }, [setVal]);\n\n // useEffect(()=>{\n // if(val >= value){\n // clearInterval(inter);\n // }\n // },[val])\n\n const halfsize = size * 0.5;\n const radius = halfsize - strokewidth * 0.5;\n const circumference = 2 * Math.PI * radius;\n const strokeval = (val * circumference) / 100;\n const dashval = strokeval + \" \" + circumference;\n\n const trackstyle = { strokeWidth: strokewidth };\n const indicatorstyle = { strokeWidth: strokewidth, strokeDasharray: dashval };\n\n const rotateval = \"rotate(-90 \" + halfsize + \",\" + halfsize + \")\";\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n {value}%\n \n {/* \n {label}\n \n */}\n \n \n );\n};\n\nexport default Charts;\n","import React, { memo } from 'react';\nimport classNames from 'classnames';\nimport './CheckMark.scss';\n\ninterface Props {\n type?: 'radio' | 'checkbox',\n id?: string,\n name?: string,\n label?: string,\n isChecked?: boolean,\n isDisabled?: boolean,\n hasContainer?: boolean,\n value?: string,\n ref?: any,\n onCheckMarkChange?: ((event: React.ChangeEvent) => void) | undefined,\n}\n\nconst CheckMark: React.FC = React.forwardRef(({type = 'checkbox', id, name = '', label = '', isChecked = false, isDisabled = false, onCheckMarkChange = () => {}, value = ''}, ref) => {\n const classes = classNames({\n 'nw-checkmark': true,\n // 'nw-checkmark--has-label': label,\n 'nw-checkmark--disabled': isDisabled,\n 'nw-checkmark--checked': isChecked,\n\n // 'nw-checkmark--has-container': hasContainer,\n });\n\n const handleClick = (e:React.MouseEvent) =>{\n e.stopPropagation();\n }\n\n return (\n
\n \n \n \n \n {label\n && {label}}\n \n \n
\n );\n});\n\nexport default memo(CheckMark);\n","import React, { memo, useRef } from 'react';\nimport classNames from 'classnames';\nimport CheckMark from 'components/CheckMark/CheckMark';\nimport './CheckMarkImage.scss';\n\nimport utils from 'shared/helpers/utils';\n\ninterface Props {\n label?: string;\n title?: string;\n isChecked?: boolean;\n isDisabled?: boolean;\n name?: string,\n value?: string;\n id?:any;\n imgSrc?: string,\n type?: 'radio' | 'checkbox',\n onCheckMarkChange?:\n | ((event: React.ChangeEvent) => void)\n | undefined;\n}\n\nconst CheckMarkImage: React.FC = ({\n label = '',\n title = '',\n isChecked = false,\n isDisabled = false,\n onCheckMarkChange = () => {},\n id,\n imgSrc,\n name = '',\n type\n}): JSX.Element => {\n const classes = classNames({\n 'nw-checkmark-image': true,\n 'nw-checkmark-image--uncheck': !isChecked,\n\n // // 'nw-checkmark--has-label': label,\n 'nw-checkmark-image--disabled': isDisabled,\n // 'nw-checkmark--checked': isChecked,\n\n // 'nw-checkmark--has-container': hasContainer,\n });\n interface RefObject {\n click: () => void\n }\n const ref = useRef(null);\n\n const handleClick =() =>{\n if(ref.current){\n ref.current.click()\n }\n }\n\n const contentClasses = classNames({\n 'nw-checkmark-image__content': true,\n 'nw-checkmark-image__content--selected': isChecked,\n })\n\n const footerClasses = classNames({\n 'nw-checkmark-image__content__footer': true,\n 'nw-checkmark-image__content__footer--hidden': !isChecked,\n });\n return (\n \n
\n \n
\n
\n

\n {title}\n

\n {label}\n
\n \n );\n};\n\nexport default memo(CheckMarkImage);\n","import React, { memo, useState } from \"react\";\nimport \"./CheckMarkItemContainer.scss\";\nimport CheckMarkImage from \"components/CheckMarkImage/CheckMarkImage\";\n\ninterface Props {\n items?: any,\n onSelect?: any,\n // onSelect?: ((event: React.ChangeEvent) => void) | undefined,\n name?: string,\n selected?: any,\n type?: 'radio' | 'checkbox',\n}\n\nconst CheckMarkItemContainer: React.FC = ({ \n items = [],\n onSelect = () => {},\n name,\n selected,\n type = 'radio'\n}) => {\n const [checkedItem, setCheckedItem] = useState(selected);\n const [radioChecked,setRadioChecked] = useState(false);\n\n // const handleChange = (e: React.ChangeEvent) => {\n // if (e.target.checked) {\n // setCheckedItem(e.target.id);\n // } else {\n // setCheckedItem(null);\n // }\n // onSelect(e);\n // };\n \n const handleChange = (e: React.ChangeEvent) => {\n e.stopPropagation();\n let arr = [...checkedItem];\n if(e.target.type === 'radio'){\n setRadioChecked(true);\n arr = [];\n if (e.target.checked) {\n arr.push(e.target.id);\n } \n } else {\n \n if(radioChecked){\n arr = [];\n setRadioChecked(false);\n }\n \n\n if (e.target.checked) {\n arr.push(e.target.id);\n } else {\n arr = arr.filter((p) => p !== e.target.id);\n }\n }\n onSelect(arr, name);\n setCheckedItem(arr);\n };\n\n return (\n
\n {items.map((_item:any) => {\n const id = _item && _item.id && _item.id.toString && _item.id.toString()\n return (\n -1 ? 'slide-item-hide' : ''}`}\n >\n -1}\n onCheckMarkChange={handleChange}\n />\n
\n );\n })}\n \n );\n};\n\nexport default memo(CheckMarkItemContainer);\n","import React, { memo, useRef } from 'react';\nimport classNames from 'classnames';\nimport CheckMark from 'components/CheckMark/CheckMark';\nimport './CheckMarkOption.scss';\n\ninterface Props {\n name?: string,\n id?:string,\n label?: string,\n title?: string,\n isChecked?: boolean,\n isDisabled?: boolean,\n value?: string,\n values?: any, //TODO: define type for it\n type?: 'radio' | 'checkbox',\n onCheckMarkChange?: ((event: React.ChangeEvent) => void) | undefined,\n}\n\nconst CheckMarkOption: React.FC = ({\n name = '', label = '', isDisabled = false, onCheckMarkChange = () => {}, title = '', id, values, type,\n}): JSX.Element => {\n\n const checked = values.indexOf(id) > -1;\n\n const classes = classNames({\n 'nw-checkmark-option': true,\n 'nw-checkmark-option--uncheck': !checked,\n\n // // 'nw-checkmark--has-label': label,\n 'nw-checkmark-option--disabled': isDisabled,\n // 'nw-checkmark--checked': isChecked,\n\n // 'nw-checkmark--has-container': hasContainer,\n });\n\n\n const footerClasses = classNames({\n 'nw-checkmark-option__content__footer': true,\n 'nw-checkmark-option__content__footer--hidden': !checked\n });\n\n\n interface RefObject {\n click: () => void\n }\n const ref = useRef(null);\n\n const handleClick =() =>{\n if(ref.current){\n ref.current.click()\n }\n }\n\n return (\n
\n
\n
\n {title}\n
\n \n {label}\n \n
\n
\n \n
\n
\n );\n};\n\nexport default memo(CheckMarkOption);\n","import React, { memo, useState, useEffect, Children } from \"react\";\nimport \"./Tabs.scss\";\n\nimport classNames from 'classnames';\n\ntype Props = {\n tabMenu?: any; //TODO set type for this\n children: JSX.Element[];\n tabActive?: number;\n onTabClick?:\n | ((event: React.MouseEvent) => void)\n | undefined;\n isDefaultStyle?: boolean, \n};\n\nconst Tabs: React.FC = memo(\n ({ tabMenu = [], children, tabActive = 0, onTabClick = () => {}, isDefaultStyle = true }) => {\n const [listMenu, setListMenu] = useState(tabMenu);\n const [currentTab, setCurrentTab] = useState(tabActive);\n\n useEffect(() => {\n setListMenu(tabMenu);\n }, [tabMenu]);\n\n const handleClick = (item: any, idx: number) => {\n setCurrentTab(idx);\n onTabClick(item);\n };\n\n const classes = classNames({\n 'tabs': true,\n 'tabs--2ndStyle': !isDefaultStyle,\n })\n\n return (\n
\n \n {listMenu && listMenu.length > 0\n ? listMenu.map((item: any, idx: number) => {\n return (\n \n handleClick(item.title, idx)}>\n {item.title}\n \n \n );\n })\n : null}\n \n
\n {/* {Children.map(children, (child, i) => (\n
{child}
\n ))} */}\n {/* {tabMenu[currentTab] && tabMenu[currentTab].child} */}\n {Children.map(children, (child, i) => (\n \n {child}\n
\n ))}\n
\n \n );\n }\n);\n\nexport default Tabs;\n","/* eslint-disable react/button-has-type */\nimport React, { memo } from 'react';\nimport './Tag.scss';\nimport utils from 'shared/helpers/utils';\nimport vectorIcon from '../../assets/images/Vector.png';\ninterface Props {\n value?: string | React.ReactNode;\n name?: string | undefined;\n onNormalTagClick? :any;\n onTagClick?: any;\n icon? : string;\n isNormalTag?: boolean;\n}\n\nconst Tag: React.FC = ({\n // value = null,\n name = '',\n onNormalTagClick = () => {},\n onTagClick = () => {},\n icon = vectorIcon,\n isNormalTag = false,\n}): JSX.Element => {\n const onHandleTagClick = () => {\n onTagClick(name)\n }\n return (\n <>\n
\n {isNormalTag? \n {name}\n :\n {utils.temporaryParseId[name]}\n }\n {/* x */}\n \"remove\"\n
\n \n );\n};\n\nexport default memo(Tag);\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACASURBVHgBdZCBDYAgDAQf4iCO5CJGnUCcQI37Wr9VCERoQtL+X54CZEcvFyY0Sj1lPPsBNw4KawVa1TPGhB1BTkgOa28aPZ1dMlTwBP1rMCnwbG755uKqmJwlxfIF2UGqvY3l4nbdJwVqcGOa/4tXH0hhru1UwGRgH65NoyyIzAOSHFjb7w5pLwAAAABJRU5ErkJggg==\"","export default __webpack_public_path__ + \"static/media/esg-icon.8db44c82.svg\";","import React, { memo } from 'react';\nimport Icons from 'assets/images/esg-icon.svg';\nimport './Rating.scss';\n\ntype Props = {\n ratingNumber?: number;\n id?: string,\n};\n\nconst Rating: React.FC = memo(({ ratingNumber = 5, id = '' }) => {\n return (\n
\n {Array.from({ length: ratingNumber }, (item, i) => (\n \n ))}\n
\n );\n});\n\nexport default Rating;\n","import React, { memo } from \"react\";\nimport classNames from 'classnames';\nimport { ProgressBar } from 'components';\n\nimport './Navbar.scss';\n\nexport interface IProps {\n navTitle?: string,\n isTransparent?: boolean,\n isShowProgress?: boolean,\n leftButtonValue?: string | React.ReactNode,\n rightButtonValue?: string | React.ReactNode,\n onLeftButtonClick?: ((event: React.MouseEvent) => void) | undefined,\n onRightButtonClick?: ((event: React.MouseEvent) => void) | undefined,\n progress?: number,\n}\n\nconst Navbar: React.FC = ({\n navTitle = '',\n isTransparent = false,\n isShowProgress = false,\n leftButtonValue = null,\n rightButtonValue = null,\n onLeftButtonClick = () => {},\n onRightButtonClick = () => {},\n progress = 40,\n}) => {\n const classes = classNames({\n 'navbar': true,\n 'navbar--transparent': isTransparent,\n // 'navbar--gauge': isShowProgress,\n });\n\n return (\n <>\n
\n <>\n {leftButtonValue ? (\n \n {leftButtonValue}\n \n ): }\n\n

{navTitle}

\n \n {rightButtonValue ? (\n \n {rightButtonValue}\n \n ): }\n \n
\n\n {isShowProgress && }\n \n );\n}\n\nexport default memo(Navbar);","import React, { memo } from 'react';\nimport './Card.scss';\n\nexport interface IProps {\n children?: string | React.ReactNode,\n}\n\nconst Card: React.FC = (props) => {\n return (\n
\n {props.children}\n
\n );\n}\n\nexport default memo(Card);","import React, { memo } from \"react\";\nimport classnames from 'classnames';\n\nimport './Chips.scss';\n\ninterface IChipsProps {\n title?: string,\n isWithTitle: boolean,\n isPrimary?: boolean,\n data?: Array,\n}\n\nconst Chips: React.FC = ({\n title = 'Title here',\n isWithTitle = false,\n isPrimary = false,\n data = ['test 1', 'test 2', 'test 3', 'test 1', 'test 2', 'test 3', 'test 1', 'test 2', 'test 3'],\n}) => {\n const classes = classnames({\n 'esg-chips__list': true,\n 'esg-chips__list--primary': isPrimary,\n 'esg-chips__list--secondary': !isPrimary,\n });\n return (\n
\n {isWithTitle? \n <>\n
{title}
\n
    \n {data && data.map((item, idx) => (\n
  • {item}
  • \n ))}\n
\n \n :\n
    \n {data && data.map((item, idx) => (\n
  • {item}
  • \n ))}\n
\n }\n
\n );\n}\n\nexport default memo(Chips);","import React, { memo } from \"react\";\nimport './EsgPerformance.scss';\n\nimport utils from 'shared/helpers/utils';\n\nexport interface IEsgDetailsProps {\n annualizedReturn?: number,\n benchmarkReturn?: number,\n latestNav?: number,\n dateNav?: any,\n}\n\nconst EsgDetails: React.FC = ({\n annualizedReturn = 6.9,\n benchmarkReturn = 3.7,\n latestNav = 1.42,\n dateNav = Date.now(),\n}) => {\n return (\n
\n
\n

{annualizedReturn}

\n Annualized return\n
\n
\n

{benchmarkReturn}

\n Benchmark return\n
\n
\n

{latestNav}

\n \n Latest NAV\n {utils.formatDate(dateNav)}\n \n
\n
\n );\n}\n\nexport default memo(EsgDetails);","import React from \"react\";\nimport EsgDetails from './EsgDetails';\nimport { Tabs } from 'components';\n\nexport interface IEsgPerformanceProps {\n tabsMenu?: Array,\n details?: Array,\n id?: any,\n}\n\nconst EsgPerformance: React.FC = ({\n tabsMenu = [],\n details = [],\n id = '',\n}) => {\n return (\n
\n \n {details && details.map((item: any, idx) => (\n \n ))}\n \n \n
\n );\n}\n\nexport default EsgPerformance;","import React, { memo } from \"react\";\nimport { Rating } from 'components';\n\nimport './EsgProduct.scss'\n\ninterface IEsgHeaderProps {\n // imgSrc?: string,\n title?: string,\n ratingNumber?: number,\n id?: string,\n}\n\nconst EsgHeader: React.FC = ({\n title = '',\n ratingNumber = 5,\n id = '',\n}) => {\n return (\n
\n {/*
\n {title}\n
*/}\n
\n

{title}

\n\n Morningstar Sustainability rating\n \n
\n
\n );\n}\n\nexport default memo(EsgHeader);","import React, { memo } from \"react\";\nimport EsgHeader from './EsgHeader';\nimport { Card, EsgPerformance } from 'components';\nimport utils from 'shared/helpers/utils';\n// import SampleImage from 'assets/images/logo-eastspring.png';\nimport './EsgProduct.scss';\n\nexport interface IEsgProductProps {\n isin?: string,\n imgSrc?: string,\n title?: string,\n ratingNumber?: number,\n isLowCarbon?: boolean,\n performanceMenu?: Array,\n performance?: Array,\n}\n\nconst EsgProduct: React.FC = ({\n isin = '',\n imgSrc = '',\n title = 'Eastspring Investments Asia Sust Bd C',\n ratingNumber = 4,\n isLowCarbon = false,\n performanceMenu = [{\n title: 'Since Inception'\n }, {\n title: '5y'\n }, {\n title: '3y'\n }, {\n title: '1y'\n }, {\n title: '3m'\n }],\n performance = [{\n id: 1,\n annualizedReturn: 6.9,\n benchmarkReturn: 3.7,\n latestNav: 1.42,\n dateNav: Date.now(),\n }, {\n id: 2,\n annualizedReturn: 6.5,\n benchmarkReturn: 3.5,\n latestNav: 1.42,\n dateNav: Date.now(),\n }, {\n id: 3,\n annualizedReturn: 6.3,\n benchmarkReturn: 3.3,\n latestNav: 1.42,\n dateNav: Date.now(),\n }, {\n id: 4,\n annualizedReturn: 6.2,\n benchmarkReturn: 3.1,\n latestNav: 1.42,\n dateNav: Date.now(),\n }, {\n id: 5,\n annualizedReturn: 6.1,\n benchmarkReturn: 3.1,\n latestNav: 1.42,\n dateNav: Date.now(),\n }]\n}) => {\n const handleLogo = imgSrc ? imgSrc : `${utils.baseUrl}/images/nw-192.png`;\n return (\n \n \n \n\n
\n {title}\n {isLowCarbon && \"low}\n
\n
\n );\n}\n\nexport default memo(EsgProduct);","// import BackButton from \"components/Button/BackButton/BackButton\";\nimport React, { memo } from \"react\";\nimport './ProgressBar.scss';\n\ninterface IProgressBarProps {\n progress?: number,\n}\n\nconst ProgressBar: React.FC = ({\n progress = 0,\n}) => {\n return (\n
\n \n
\n \n
\n {/* */}\n
\n );\n}\n\nexport default memo(ProgressBar);","import React, { memo } from 'react';\nimport './InputWithButton.scss';\nimport classnames from 'classnames';\nimport { Button } from 'components';\n\ninterface Props {\n id?: string,\n label?: string,\n value?: string | number,\n type?: string,\n name?: string,\n placeholder?: string,\n onInputChange?: ((event: React.ChangeEvent) => void) | undefined,\n buttonValue?: string | React.ReactNode,\n onButtonClick?: ((event: React.MouseEvent) => void) | undefined,\n isValid?: boolean,\n errorMessage?: string,\n}\n\nconst InputWithButton: React.FC = ({\n id = '', label = '', placeholder = 'Enter text here', value = '', name = '', type = 'text', onInputChange = () => {}, buttonValue = 'Submit', onButtonClick = () => {}, isValid = true, errorMessage\n}): JSX.Element => {\n const classes = classnames({\n 'esg-input-with-button': true,\n });\n return (\n
\n {label && {label}}\n\n
\n \n\n \n
\n\n {!isValid && {errorMessage}}\n
\n );\n};\n\nexport default memo(InputWithButton);\n","import React, { memo } from 'react';\nimport './SwipeButtons.scss';\n\ninterface ISwipeButtonsProps {\n left?: ((event: React.MouseEvent) => void) | undefined;\n right?: ((event: React.MouseEvent) => void) | undefined;\n}\n\nconst SwipeButtons: React.FC = ({ left, right }) => {\n return (\n
\n \n \n
\n );\n}\n\nexport default memo(SwipeButtons);","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/icon-yes.4e7b722a.svg\";","export default __webpack_public_path__ + \"static/media/icon-no.8d0c5522.svg\";","import React, { memo, useState, useCallback, useRef, useEffect } from \"react\";\n// import TinderCard from 'react-tinder-card'\nimport { Swipeable } from \"react-deck-swiper\";\nimport \"./SwipeCard.scss\";\nimport SwipeButtons from './SwipeButtons';\nimport RightCheckClean from \"assets/images/RightCheckClear.png\";\nimport LeftCheckClean from \"assets/images/LeftCheckClear.png\";\n\n// import LeftCheck from \"assets/images/LeftCheck.png\";\n// import RightCheck from \"assets/images/RightCheck.png\";\n\n// import RightRect from \"assets/images/RightRect.png\";\n// import LeftRect from \"assets/images/LeftRect.png\";\n// import RightRectCheck from \"assets/images/RightRectCheck.png\";\n// import LeftRectCheck from \"assets/images/LeftRectCheck.png\";\nimport RightRectCheck from \"assets/images/icon-yes.svg\";\nimport LeftRectCheck from \"assets/images/icon-no.svg\";\n\ntype Props = {\n cards: Array;\n onSwipe: (data: any) => void;\n onClick?: any;\n isMobile: boolean;\n};\n\nconst RIGHT = \"right\";\nconst LEFT = \"left\";\n\nconst SwipeCard: React.FC = ({ cards = [], onSwipe = () => {}, onClick = () => {}, isMobile }) => {\n const [currentDirection, setCurrentDirection] = useState(\"\");\n const [hideGuide, setHideGuide] = useState(false);\n const [currentOpacity, setCurrentOpacity] = useState(1);\n const [showGuide, setShowGuide] = useState(false);\n const [data, setData] = useState(cards);\n\n useEffect(() => {\n if (isMobile) {\n setShowGuide(true);\n setTimeout(() => {\n // console.log('show in 3 sec');\n setShowGuide(false);\n }, 5500);\n }\n // return () => {\n // setShowGuide(false);\n // }\n }, [showGuide, isMobile])\n\n const handleOnSwipe = useCallback(\n (swipeDirection: any, id: string) => {\n const tmpData = [...data];\n const updateItem = tmpData.find((p) => p.id === id);\n setCurrentOpacity(0);\n setHideGuide(false);\n if (updateItem) {\n updateItem.swiped = true;\n updateItem.direction = swipeDirection;\n setHideGuide(false);\n }\n\n setData(tmpData);\n onSwipe(tmpData);\n },\n [setData, data, setCurrentOpacity]\n );\n\n const handleHideGuide = () => {\n if (!hideGuide) {\n setHideGuide(true);\n }\n };\n\n const onSwipeStart = useCallback(\n (direction: string) => {\n setCurrentOpacity(0.4);\n\n if (\n (direction === RIGHT && currentDirection !== RIGHT) ||\n (direction === LEFT && currentDirection !== LEFT)\n ) {\n setCurrentDirection(direction);\n } else {\n setCurrentDirection(\"\");\n }\n },\n [setCurrentDirection]\n );\n\n const onOpacityChange = (opacity: number) => {\n // console.log('opacity opacity opacity ', opacity,1 - opacity + 0.3);\n setCurrentOpacity(()=>{\n let op = 1 - opacity + 0.2;\n if(op >=1){\n return 1;\n }\n return op;\n });\n }\n\n // const getCheckImage = () => {\n // if (currentDirection !== \"\") {\n // if (currentDirection === RIGHT) {\n // return ;\n // }\n // return ;\n // }\n // return null;\n // };\n\n const getCheckImage = useCallback(() => {\n if (currentDirection !== \"\") {\n if (currentDirection === RIGHT) {\n return \n }\n return \n\n }\n return null;\n },[currentOpacity]);\n\n return (\n
\n {getCheckImage()}\n {data.map((p, i) => (\n setCurrentOpacity(0)}\n url={p.url}\n key={p.id}\n title={p.title}\n content={p.content}\n swiped={p.swiped}\n id={p.id}\n handleOnSwipe={handleOnSwipe}\n onClick={onClick}\n pos={i + 1} // use this for zindex\n />\n ))}\n {/* {!hideGuide && data.map(p => (\n
\n \n \n
\n ))} */}\n {isMobile && showGuide && (\n
\n \n \n
\n )}\n
\n );\n};\n\ntype ICardProps = {\n swiped?: boolean; //TODO set type for this\n pos?: number;\n id?: string;\n handleOnSwipe?: any;\n onSwipeStart: any;\n onOpacityChange?: any;\n onFirstSwipeStart: any;\n onMouseUp?: any;\n url: any;\n direction?: string;\n title?: string;\n content?: string;\n onClick?: any;\n};\nconst CardOption: React.FC = memo(\n ({\n swiped = false,\n pos = 1,\n id,\n handleOnSwipe = () => {},\n onSwipeStart = () => {},\n onOpacityChange = () =>{},\n onFirstSwipeStart = () => {},\n onMouseUp= () => {},\n direction = \"\",\n title = \"\",\n content = \"\",\n url = null,\n onClick = () => {}\n }) => {\n const [middle, setMiddle] = useState(0);\n let mouseDown = useRef(false);\n const [showOutline, setShowOutline] = useState('outline');\n\n // const [direction, setDirection] = useState(\"\");\n const changeMiddle = (e: any) => {\n setMiddle(e.target.getBoundingClientRect().left);\n };\n\n const handleMouseDown = (e:any) => {\n // if(middle){\n setMiddle(e.target.getBoundingClientRect().left);\n // }\n mouseDown.current = true;\n };\n\n const handleMouseUp = () => {\n mouseDown.current = false;\n onSwipeStart(\"\");\n onMouseUp();\n setShowOutline('outline');\n };\n\n const handleMouseMove = (e: any) => {\n if (mouseDown.current) {\n onFirstSwipeStart();\n const pos = e.target.getBoundingClientRect().left;\n\n if (pos > middle) {\n onSwipeStart(RIGHT);\n setShowOutline('');\n } else if (pos < middle) {\n onSwipeStart(LEFT);\n setShowOutline('');\n } else {\n onSwipeStart(\"\");\n setShowOutline('outline');\n }\n }\n };\n\n /** Yes/ No button on desktop */\n const renderButtons = ({\n right,\n left,\n }) => (\n \n );\n\n const checkMarkuUrl = direction === RIGHT ? RightCheckClean : direction === LEFT ? LeftCheckClean : null;\n return (\n \n {swiped && checkMarkuUrl && }\n {!swiped && (\n handleOnSwipe(d, id)}\n renderButtons={renderButtons}\n fadeThreshold={30}\n swipeThreshold={120}\n // onBeforeSwipe={(cancelSwipe,direction)=>start(onSwipeStart,cancelSwipe,direction)}\n onOpacityChange={(opacity)=>{onOpacityChange(opacity)}}\n >\n onSwipeStart(\"\")}\n\n // for mobile\n onTouchMove={handleMouseMove}\n onTouchStart={handleMouseDown}\n onTouchEnd={handleMouseUp}\n\n style={{ backgroundImage: \"url(\" + url + \")\" }}\n >\n \n )}\n {!swiped && (\n
\n {/*
{title}
*/}\n
onClick(id)}>{content}
\n
\n )}\n \n );\n }\n);\n\nexport default memo(SwipeCard);\n","export default __webpack_public_path__ + \"static/media/icon-question.d2bdd583.svg\";","import React, { memo } from \"react\";\nimport utils from 'shared/helpers/utils';\n\nimport './SwipeSummary.scss';\n\nimport IconCheck from \"assets/images/RightCheckClear.png\";\nimport IconClose from \"assets/images/LeftCheckClear.png\";\nimport IconSkipped from \"assets/images/icon-question.svg\"\n\nexport interface ISwipeSummaryProps {\n data?: any,\n}\n\nconst SwipeSummary: React.FC = ({\n data = []\n}) => {\n const getImageSources = (title: string) => {\n switch (title) {\n case 'ESG investments':\n return 'exp-esg.png';\n case 'SRI investments':\n return 'exp-sri.png';\n case 'Impact investments':\n return 'exp-impact.png';\n case 'Venture Philanthropy':\n return 'exp-philanthropy.png';\n default:\n return null;\n }\n }\n return (\n
    \n { data.map((item: any, idx) => (\n
  • \n {item.title}\n

    {item.title}

    \n
  • \n ))}\n
\n );\n}\n\nexport default memo(SwipeSummary);","import React, { useState, memo } from \"react\";\nimport classnames from 'classnames';\nimport './Switcher.scss';\n\ninterface SwitcherProps {\n name: string,\n id: string,\n isOn: boolean,\n onChange?: any,\n isDisabled: boolean,\n isHidden: boolean,\n}\n\nconst Switcher: React.FC = ({\n name, id, isOn = false, onChange = () => {}, isDisabled = false, isHidden = false,\n}) => {\n\n const classes = classnames({\n 'switcher': true,\n 'switcher--disabled': isDisabled,\n });\n \n const [switchValue, setSwitchValue] = useState(isOn);\n const handleChange = (e) => {\n\t\tsetSwitchValue(!switchValue);\n\t\tonChange(e);\n\t};\n\n return (\n <>\n {!isHidden && }\n\t\t\n );\n}\n\nexport default memo(Switcher);","export default __webpack_public_path__ + \"static/media/information.01dcda2d.svg\";","/* eslint-disable react/button-has-type */\nimport React, { useState, useRef, useCallback, useEffect, memo } from 'react';\nimport classnames from 'classnames';\nimport './IconButton.scss';\nimport IconBtn from 'assets/images/information.svg';\n\ninterface Props {\n id: string,\n popupcontent: React.ReactNode | string,\n}\nconst IconButton: React.FC = ({\n id, popupcontent,\n}) => {\n\n const classes = classnames({\n 'icon-btn': true,\n });\n\n const [showPopup, setShowPopup] = useState(false)\n const onClick = () => {\n setShowPopup(!showPopup)\n }\n\n const iconBtnRef = useRef(null);\n const handleClickOutside = useCallback(\n\t\t(event) => {\n\t\t\tif (iconBtnRef.current && !iconBtnRef.current.contains(event.target)) {\n\t\t\t\tsetShowPopup(false);\n\t\t\t}\n\t\t},\n\t\t[setShowPopup]\n\t);\n\n useEffect(() => {\n\t\tdocument.addEventListener(\"click\", handleClickOutside, true);\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"click\", handleClickOutside, true);\n\t\t};\n\t}, []);\n\n return
\n \n {showPopup ?\n {popupcontent} : null }\n
\n\n};\nexport default memo(IconButton);","import React, { memo } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport classnames from 'classnames';\nimport Slider from 'rc-slider';\nimport 'rc-slider/assets/index.css';\nimport './FilterSlider.scss';\nimport Switcher from 'components/Switcher/Switcher';\nimport IconButton from 'components/Button/IconButton/IconButton';\n\ninterface FilterSliderProps {\n id?: string,\n title: string,\n percentage: string,\n // number: number,\n preposition: string,\n minValue:number,\n maxValue:number,\n minLabel: string,\n maxLabel: string,\n step:number,\n marks?: any,\n defaultValue?: number,\n onChange?: any,\n onAfterChange?: any,\n isDisabled?: boolean,\n isHidden?: boolean,\n\n switcherName?: string,\n switcherId?: string,\n switcherIsOn?: boolean,\n onSwitchChange?: any,\n isSwitcherDisabled?: boolean,\n isSwitcherHidden?: boolean,\n\n iconBtnId?: string,\n popupContent?: string,\n // name: string\n}\n\nconst FilterSlider: React.FC = ({\n id, title, percentage, preposition, minValue, maxValue, minLabel, maxLabel, step, defaultValue, onChange = () => {}, isDisabled = false,\n onAfterChange = () => {}, isHidden = false, switcherName, switcherId, switcherIsOn, onSwitchChange = () => {}, isSwitcherDisabled = false, isSwitcherHidden = false, iconBtnId, popupContent,\n}) => {\n\n const classes = classnames({\n 'filter-slider-wrapper': true,\n 'filter-slider-wrapper--disabled': isDisabled,\n // 'filter-slider-wrapper--hidden': isHidden,\n });\n \n const marks = {\n [minValue]: minLabel, \n [maxValue]: maxLabel,\n }\n\n return (\n <>\n {!isHidden && \n
\n
\n
\n \n \n \n \n
\n
\n \n {popupContent && }\n
\n
\n
\n {/* */}\n \n
\n
}\n \n );\n}\n\nexport default memo(FilterSlider);","import React, { memo, useState } from \"react\";\n// import { FormattedMessage } from 'react-intl';\nimport Slider from 'rc-slider';\nimport _ from 'lodash';\nimport IconButton from 'components/Button/IconButton/IconButton';\nimport './RiskSlider.scss';\n\n// import 'rc-slider/assets/index.css';\n// import InfoIcon from 'assets/images/icon-info.svg';\n// import 'rc-tooltip/assets/bootstrap.css';\n\nexport interface IRiskSliderProps {\n defaultValue?: any,\n // results?: number,\n onChange?: any,\n // tooltips?: string\n}\n\n// function log(value) {\n// console.log(value); //eslint-disable-line\n// }\n\nconst colorVariables = {\n handleBg: '#27ca47',\n handleBorder: '#f6f6f6',\n trackBg: '#27ca47',\n trackBorder: '#f6f6f6',\n dotBg: '#e5e5e5',\n dotBorder: '#27ca47',\n railBg: '#e5e5e5',\n railBorder: '#e5e5e5',\n}\n\nconst RiskSlider: React.FC = ({\n defaultValue = [1, 4], onChange = () => {}, \n // tooltips,\n // results,\n}) => {\n const { Range } = Slider;\n const [trackColor, setTrackColor] = useState('linear-gradient(to right, #D3D141, #F1BD33, #E5752B)');\n\n const marks = {\n 1: 'Negligible',\n // 2: '2',\n // 3: 'Medium',\n // 4: '4',\n 5: 'Severe',\n }\n const onHandleChange = (e) => {\n onChange(e);\n handleTrackGradientColor(e);\n }\n\n const handleTrackGradientColor = (val) => {\n if (_.isEqual(val.sort(), [1,2].sort())) {\n setTrackColor('linear-gradient(to right, #B0E551, #D3D141');\n } else if (_.isEqual(val.sort(), [1,3].sort())) {\n setTrackColor('linear-gradient(to right, #B0E551, #D3D141, #F1BD33)');\n } else if (_.isEqual(val.sort(), [2,3].sort())) {\n setTrackColor('linear-gradient(to right, #D3D141, #F1BD33)');\n } else if (_.isEqual(val.sort(), [1,4].sort())) {\n setTrackColor('linear-gradient(to right, #B0E551, #D3D141, #F1BD33, #E5752B)');\n } else if (_.isEqual(val.sort(), [2,5].sort())) {\n setTrackColor('linear-gradient(to right, #D3D141, #F1BD33, #E5752B, #D92C23)');\n } else if (_.isEqual(val.sort(), [3,4].sort())) {\n setTrackColor('linear-gradient(to right, #F1BD33, #E5752B)');\n } else if (_.isEqual(val.sort(), [3,5].sort())) {\n setTrackColor('linear-gradient(to right, #F1BD33, #E5752B, #D92C23)');\n } else if (_.isEqual(val.sort(), [2,4].sort())) {\n setTrackColor('linear-gradient(to right, #D3D141, #F1BD33, #E5752B)');\n } else if (_.isEqual(val.sort(), [1,5].sort())) {\n setTrackColor('linear-gradient(to right, #B0E551, #D3D141, #F1BD33, #E5752B, #D92C23)');\n } else {\n setTrackColor('linear-gradient(to right, #E5752B, #D92C23)');\n }\n }\n\n const renderTooltips = () => (\n
\n {/*
What is carbon risk
\n

Amet minim mollit non deserunt ullamco est sit aliqua dolor do amet sint officia consequat.

*/}\n
How Morningstar defines carbon score
\n

Carbon Risk Metrics provide investors a high level view on how well their portfolio holdings are positioned given the transition to a low carbon economy using Sustainalytics’ evaluation of the company’s activities and products including its carbon intensity, fossil fuel involvement, stranded assets exposure, mitigation strategies, and green product solutions. A portfolio’s Carbon Risk Score is the asset-weighted sum of the carbon risk scores of its holdings, averaged over the trailing 12 months. The portfolio Carbon Risk Score is displayed as a number between 0 and 100 (a lower score is better).

\n
    \n
  1. 1 Negligible0
  2. \n
  3. 2 Low0.1-9.99
  4. \n
  5. 3 Medium10-34.99
  6. \n
  7. 4 High35-59.99
  8. \n
  9. 5 Severe60+
  10. \n
\n
\n )\n\n return (\n
\n
\n {/* */}\n Adjust carbon risk\n\n {/* \"What */}\n \n
\n\n
\n onHandleChange(e)} \n allowCross={false}\n pushable\n marks={marks}\n dotStyle={{\n // borderColor: colorVariables.dotBorder,\n // backgroundColor: colorVariables.dotBg,\n width: '18px',\n height: '18px',\n top: -10,\n marginLeft: '-10px'\n }}\n activeDotStyle={{\n borderColor: colorVariables.trackBorder,\n backgroundColor: colorVariables.trackBg,\n }}\n railStyle={{ backgroundColor: colorVariables.railBg, height: 5, top: 2 }}\n trackStyle={[{\n // backgroundColor: colorVariables.trackBg,\n backgroundImage: `${trackColor}`,\n top: 2\n }]}\n handleStyle={[{\n borderColor: colorVariables.trackBorder,\n // borderWidth: 3,\n height: 28,\n width: 28,\n top: -6,\n backgroundColor: colorVariables.handleBg,\n }, {\n borderColor: colorVariables.trackBorder,\n // borderWidth: 3,\n height: 28,\n width: 28,\n top: -6,\n backgroundColor: colorVariables.handleBg,\n }]}\n\n // onChange={onChange}\n />\n
\n \n {/*
\n \n
*/}\n
\n );\n}\n\nexport default memo(RiskSlider);","export default __webpack_public_path__ + \"static/media/icon-close.e00864cb.svg\";","import React, { useRef, useEffect, useCallback, memo } from 'react';\nimport ReactDOM from 'react-dom';\nimport './EsgModal.scss';\nimport { Button } from 'components';\nimport CloseIcon from 'assets/images/icon-close.svg';\n\n\ninterface IEsgModalProps {\n title?: string,\n customClassName?: string,\n children?: React.ReactNode,\n // onClose?: ((event: React.MouseEvent) => void) | undefined,\n onClose?: any,\n showModal?: boolean,\n onConfirm?: ((event: React.MouseEvent) => void) | undefined,\n withButton?: boolean,\n // closeModalFunc?: func\n }\nconst EsgModal: React.FC = ({\n title,\n customClassName = '',\n children = <>,\n onClose = () => {},\n showModal = false,\n onConfirm = () => {},\n withButton = true,\n}) => {\n\n const modalRef = useRef(null);\n\n// const handleConfirm = useCallback(() => {\n// onConfirm();\n// onClose();\n// },[onConfirm,onClose]);\n\n\n const handleClickOutside = useCallback((event: any) => {\n if (modalRef.current && !modalRef.current.contains(event.target)) {\n onClose();\n }\n },[onClose]);\n\n useEffect(() => {\n document.addEventListener('click', handleClickOutside, true);\n return () => {\n document.removeEventListener('click', handleClickOutside, true);\n };\n }, [handleClickOutside]);\n\n if (showModal) {\n return ReactDOM.createPortal(\n
\n
\n
\n {title && (\n
\n \n

{title}

\n \"close\"\n
\n )}\n
\n {children}\n
\n
\n {withButton &&
\n
\n
\n
,\n document.querySelector('#app'),\n );\n }\n return null;\n};\n\nexport default memo(EsgModal);\n","export default __webpack_public_path__ + \"static/media/arrow-right.fce79f7c.svg\";","import React, { memo } from \"react\";\nimport Chips from \"components/Chips\";\n\nimport \"./NewsItem.scss\";\nimport arrowRightIcon from \"assets/images/arrow-right.svg\"\n\nexport interface newsItemProps {\n newsItemId: any,\n newsTitle: string,\n dateTime?: any,\n logo: string,\n primaryTags?: any,\n secondaryTags?: any,\n rightIcon: string,\n onClick: ((event: React.MouseEvent) => void) | undefined,\n}\n\nconst NewsItem: React.FC = ({\n newsItemId,\n newsTitle = '',\n dateTime = '',\n logo,\n primaryTags,\n secondaryTags,\n rightIcon = arrowRightIcon,\n onClick = () => {},\n}) => {\n\n return (\n \n );\n}\n\nexport default memo(NewsItem);","import React from 'react';\nimport ReactLoading from 'react-loading';\n\nimport './PageLoader.scss';\n\nconst PageLoader = () => {\n return (\n
\n \n
\n )\n}\n\nexport default PageLoader;\n","import React, { memo, useMemo } from 'react';\nimport Slider from 'rc-slider';\nimport './EsgRiskSlider.scss';\n// import InfoIcon from 'assets/images/icon-info.svg';\nimport IconButton from 'components/Button/IconButton/IconButton';\n\nexport interface IEsgRiskSliderProps {\n // environmentScore?: string | number,\n name?: string,\n label?: string,\n defaultValue?: number,\n minValue?: number,\n maxValue?: number,\n step?: number,\n isDisabled?: boolean,\n onChange?: any,\n onAfterChange?: any,\n tooltips?: string,\n}\n\nconst EsgRiskSlider: React.FC = ({\n name = 'environmentRisk',\n label = 'Environment risk',\n defaultValue = 5,\n tooltips = 'Lorem ipsum dolor',\n\n minValue = 1, \n maxValue = 5, \n step = 1,\n isDisabled = false,\n onChange = () => {},\n onAfterChange = () => {},\n}) => {\n const parseRiskScoreLabel: any = useMemo(() => {\n // console.log(defaultValue);\n if (defaultValue === 1) {\n return 'Low'\n } else if (defaultValue === 2) {\n return 'Below average'\n } else if (defaultValue === 3) {\n return 'Average'\n } else if (defaultValue === 4) {\n return 'Above average'\n } else if (defaultValue === 5) {\n return 'High'\n }\n }, [defaultValue]);\n\n return (\n
\n
\n
\n {`${label}: `}\n {parseRiskScoreLabel}\n
\n \n {/* \"info\" */}\n
\n
\n \n
\n
\n );\n}\n\nexport default memo(EsgRiskSlider);","import React, { memo } from 'react';\nimport { Button } from 'components';\nimport Tag from 'components/Tag/Tag';\nimport './Filter.scss'\n\ntype Props = {\n id?: string; // Filter name (fieldname)\n tags:any; // TODO create type for this\n title:string,\n onRemove?: any,\n onAdd?: ((event: React.MouseEvent) => void) | undefined,\n buttonValue?: any,\n isEsgPreferences?: boolean,\n};\n\nconst Filter: React.FC = memo(({\n id, tags, title, onRemove = () => {}, buttonValue = '+', onAdd = () => {},\n isEsgPreferences = false\n}) => {\n const onHandleRemove = (e) => {\n onRemove(id, e);\n }\n return (\n
\n
{title}
\n
\n {tags.map((_item: string, idx: number)=> {return onHandleRemove(e)} />})}\n
\n
\n );\n});\n\nexport default Filter;\n","import React, { useState } from \"react\";\n// import { Link } from 'react-router-dom';\nimport utils from \"shared/helpers/utils\";\nimport { FS_PAGE_LINK } from \"shared/constants/constants\";\nimport \"./FsNavbar.scss\";\n\nexport interface IFsNavbarProps {\n menu?: any;\n}\n\nconst FsNavbar: React.FC = ({\n menu = [\n {\n url: FS_PAGE_LINK.FUND_LIBRARY,\n label: \"Fund Library\",\n isDisabled: false,\n target: null,\n },\n {\n url: FS_PAGE_LINK.PROFILERS,\n label: \"Profilers\",\n isDisabled: false,\n target: null,\n children: [\n {\n url: FS_PAGE_LINK.RISK_PROFILER,\n label: \"Risk Tolerance\",\n target: null,\n isDisabled: false,\n isCurrent: false,\n },\n {\n url: FS_PAGE_LINK.SUSTAINABILITY_PROFILER,\n label: \"Sustainability Profiler\",\n target: null,\n isDisabled: false,\n isCurrent: true,\n },\n ],\n },\n {\n url: FS_PAGE_LINK.REPORTS,\n label: \"Reports\",\n isDisabled: false,\n target: \"_blank\",\n },\n {\n url: FS_PAGE_LINK.EDUCATION_CENTER,\n label: \"Education center\",\n isDisabled: false,\n target: null,\n },\n {\n url: FS_PAGE_LINK.FUND_DISTRIBUTORS,\n label: \"Distributors\",\n isDisabled: true,\n target: null,\n },\n ],\n}) => {\n const [showMenu, setShowMenu] = useState(false);\n return (\n
\n
\n
\n
\n \n \n \n
\n\n setShowMenu(!showMenu)}\n >\n \n \n
\n\n \n \n \n
\n
\n );\n};\n\nexport default FsNavbar;\n","import { useContext } from 'react';\nimport { GlobalContext } from 'shared/context/store';\nimport { useQuery } from 'react-query';\nimport apiService from 'shared/services/apiService';\n\nfunction selectNewsLanguage(lang) {\n if (lang === 'EN' || lang === 'TH') {\n return 'en_US'\n } else {\n return 'zh_CN'\n }\n}\n\nfunction useStreamingNews(saveNews) { \n const { state: { rootState } } = useContext(GlobalContext);\n return useQuery(\"streamingNews\", async () => {\n const { channel } = await apiService.getNews(selectNewsLanguage(rootState.language.locale));\n const {\n // description,\n items,\n // link,\n // locale,\n // publishDate\n } = channel;\n saveNews(items);\n return items;\n })\n}\n\nexport default useStreamingNews;","import { useState, useEffect } from 'react';\n\nfunction useWindowSize() {\n // Initialize state with undefined width/height so server and client renders match\n // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/\n const [windowSize, setWindowSize] = useState({\n width: undefined,\n height: undefined,\n });\n\n useEffect(() => {\n // Handler to call on window resize\n function handleResize() {\n // Set window width/height to state\n setWindowSize({\n width: window.innerWidth,\n height: window.innerHeight,\n });\n }\n // Add event listener\n window.addEventListener(\"resize\", handleResize);\n // Call handler right away so state gets updated with initial window size\n handleResize();\n // Remove event listener on cleanup\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []); // Empty array ensures that effect is only run on mount\n\n return windowSize;\n}\n\nexport default useWindowSize;","import { IProps } from 'components/Navbar/Navbar';\nimport React from 'react';\nimport { Navbar } from 'components';\nimport { useWindowSize } from \"shared/customHooks\";\n\nimport utils from 'shared/helpers/utils';\nimport { FS_PAGE_LINK } from 'shared/constants/constants';\n\nimport './defaultLayout.scss';\n// import ESGInfo from 'pages/Score/ESGInfo/ESGInfo';\n\nconst defaultLayout = (Wrapped: React.ComponentType) => (props: (JSX.IntrinsicAttributes & IProps) | (JSX.IntrinsicAttributes & { children?: React.ReactNode; })) => {\n const windowSize = useWindowSize();\n const showLogo = !!(windowSize.width >= 1190);\n return (\n
\n
\n \n\n
\n \n
\n {/* */}\n\n {showLogo && \n \"FundSingapore\"\n }\n
\n\n {/* {showLogo &&
\n Special thanks to\n \"What\n
} */}\n
\n )\n}\n\nexport default defaultLayout;","import React from 'react';\n\nimport './simpleLayout.scss';\nimport { FsNavbar } from 'components';\n\nconst simpleLayout = (Wrapped: React.ComponentType) => (props: JSX.IntrinsicAttributes | (JSX.IntrinsicAttributes & { children?: React.ReactNode; })) => (\n
\n \n
\n
\n \n
\n \n
\n
\n)\n\nexport default simpleLayout;","import { IProps } from 'components/Navbar/Navbar';\nimport React from 'react';\nimport { Navbar } from 'components';\n\nimport './layoutWithBottomInfo.scss';\n\nconst layoutWithBottomInfo = (Wrapped: React.ComponentType, BottomInfo: React.ComponentType) => (props: (JSX.IntrinsicAttributes & IProps) | (JSX.IntrinsicAttributes & { children?: React.ReactNode; })) => (\n
\n
\n \n\n
\n
\n
\n
\n \n
\n
\n)\n\nexport default layoutWithBottomInfo;","import React from 'react';\nimport utils from 'shared/helpers/utils';\nimport './authLayout.scss';\n\nconst authLayout = (Wrapped: React.ComponentType) => (props: (JSX.IntrinsicAttributes) | (JSX.IntrinsicAttributes & { children?: React.ReactNode; })) => (\n
\n
\n
\n
\n \"logo\"\n\n
\n

ESG PROFILER

\n
ESG investments simplified
\n
\n
\n
\n\n
\n
\n \n
\n
\n
\n
\n)\n\nexport default authLayout;","import React, { useContext } from 'react';\nimport { GlobalContext } from 'shared/context/store';\n\nconst connect = (mapStateToProps: any, mapDispatchTopProps: any) => (\n WrappedComponent: any\n) => (props: any) => {\n const { state, dispatch } = useContext(GlobalContext);\n const mappedState = mapStateToProps(state);\n const mappedDispatch: any = {};\n for (let i = 0; i < Object.keys(mapDispatchTopProps).length; i += 1) {\n const idxItem = Object.keys(mapDispatchTopProps)[i];\n mappedDispatch[idxItem] = (...args: any) =>\n mapDispatchTopProps[idxItem](...args)(dispatch, state);\n }\n\n const rest = {\n ...props,\n ...mappedState,\n ...mappedDispatch,\n };\n return ;\n};\n\nexport default connect;\n","import React from 'react';\n\nimport { defaultLayout } from 'layouts';\n\n// import Button from 'components/Button';\n// import CheckMark from 'components/CheckMark';\n// import { FormattedMessage } from 'react-intl';\nimport { changeLanguage } from 'shared/context/actions';\nimport connect from 'shared/context/connect';\n// import BackButton from 'components/Button/BackButton/BackButton';\n// import ButtonOption from 'components/ButtonOption/ButtonOption';\n// import CheckMarkImage from 'components/CheckMarkImage/CheckMarkImage';\n// import Tag from 'components/Tag/Tag';\n\n// eslint-disable-next-line react/prop-types\nconst Test = () => {\n\n // const [checked, setChecked] = useState(true);\n\n return
\n {/* \n \n\n
\n \n \n \n \n\n
*/}\n\n {/*
\n \n
*/}\n\n {/* */}\n {/* */}\n
;\n};\nconst mapStateToProps = ({ rootState }) => ({\n language: rootState.language.locale\n // detail: dashboard.detail,\n});\n\nconst mapDispatchToProps = ({\n onChangeLanguage: changeLanguage,\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(defaultLayout(Test));","import React, { memo,useState } from \"react\";\nimport \"./FilterContainer.scss\";\nimport Filter from \"./FilterItem/Filter\";\nimport { FilterSlider } from 'components';\nimport { FIELDS } from 'shared/constants/constants';\n\ntype Props = {\n items: any; // TODO create type for this\n question: string,\n onRemove?: any,\n onAdd?: any,\n \n /** FilerSlider */\n defaultValueThreshold?: number,\n defaultValueCarbonLevel?: number,\n onChange?: any,\n onAfterChange?: any,\n\n /** Switcher */\n switcherValue: boolean,\n onSwitcherChange: any,\n};\n\nconst FilterContainer: React.FC = memo(({ items, question, onRemove, onAdd, defaultValueThreshold, defaultValueCarbonLevel, onChange = () => {}, onAfterChange = () => {}, switcherValue, onSwitcherChange = () => {}, }) => {\n const [hide,setHide] = useState(true);\n const onHandleRemove = (id: string, name: string) => {\n // console.log('remove from the filter: ', id, name);\n onRemove(id, name);\n }\n\n const onHandleThresholdChange = (val) => {\n onChange(FIELDS.THRESHOLD, val);\n }\n\n const onHandleCarbonLevelChange = (val) => {\n onChange(FIELDS.CARBON_RISK_SCORE, val);\n }\n\n const [switchValue, setSwitchValue] = useState(switcherValue);\n const handleSwitcherChange = (e) => {\n setSwitchValue(!switchValue);\n onSwitcherChange(e);\n console.log('switcher ', e.target)\n};\n\n return (\n
\n {hide && {question}}\n setHide(prev =>!prev)}>{!hide ? 'Hide filters' : 'Show filters'}\n
\n {items.map((_item: { id: string, title: string; tags: any; }) => {\n return onHandleRemove(id, name)} tags={_item.tags}/>;\n })}\n onHandleThresholdChange(e)}\n onAfterChange={onAfterChange}\n // isSwitchDisabled\n isSwitcherHidden\n iconBtnId='threshold'\n popupContent='The percentage level at which the organisation do not meet the standards of the Environmental, social, and governance (ESG) criteria.'\n />\n\n onHandleCarbonLevelChange(e)}\n onAfterChange={onAfterChange}\n switcherIsOn={switcherValue}\n onSwitchChange={handleSwitcherChange}\n isDisabled={switchValue}\n // isHidden\n iconBtnId='carbon level'\n popupContent='The extent of carbon emissions and waste produced by the organisation.'\n />\n
\n
\n );\n});\n\nexport default FilterContainer;\n","import React, { PureComponent, useState } from 'react';\nimport connect from 'shared/context/connect';\nimport storeAction from 'shared/context/actions';\nimport ReactLoading from 'react-loading';\nimport { \n EsgProduct, \n Button,\n RiskSlider,\n EsgModal,\n ButtonOption\n } from 'components';\nimport { layoutWithBottomInfo } from 'layouts';\nimport InfiniteScroll from 'react-infinite-scroll-component';\n\nimport utils from 'shared/helpers/utils';\nimport FilterContainer from 'components/Filter/FilterContainer';\nimport selectors from 'shared/context/selectors/index';\nimport { PATH, FIELDS, PAGE_SIZE } from 'shared/constants/constants';\n\nimport './HomePage.scss';\n\ninterface Props {\n token?: string,\n onGetProducts?: any,\n products?: any,\n total?: number,\n numOfRecords?: number,\n onNumOfRecordsChanged?: any,\n history?: any,\n onSaveProductsLoaded?: any,\n productsLoaded?: any,\n onOverwriteProductsLoaded?: any,\n onChangeFilter?: any,\n filteredProducts?: any,\n onUpdateUserInputFilters?: any,\n onSaveGroupSupports?: any,\n isProductLoading?: boolean,\n}\ninterface State {\n productsData?: any,\n showExclusionModal?: boolean,\n}\n \nclass HomePage extends PureComponent {\n state = {\n productsData: [], // this.props.products.slice(1, PAGE_SIZE)\n // numberOfLoads: PAGE_SIZE,\n }\n componentDidMount() {\n if (!this.props.token) {\n this.props.history.push(PATH.INDEX);\n }\n if (!this.props.products.length) {\n this.props.onGetProducts();\n }\n this.fetchMoreData();\n }\n\n componentWillUnmount() {\n this.setState({ productsData: null });\n // console.log('state unmount ', this.state.productsData);\n // this.props.onOverwriteProductsLoaded([]);\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n const { filteredProducts } = this.props;\n if (snapshot !== null && prevProps.filteredProducts !== null) {\n // console.log('previous props >>> ', prevProps.filteredProducts, 'Current FilteredProducts', snapshot);\n const modifyProductsData = [...filteredProducts.slice(0, PAGE_SIZE)];\n // return prevProps.filteredProducts\n // return\n this.setState({\n productsData: modifyProductsData\n })\n }\n \n }\n\n getSnapshotBeforeUpdate(prevProps) {\n if (prevProps.filteredProducts !== null && prevProps.filteredProducts !== this.props.filteredProducts) {\n return this.props.filteredProducts;\n }\n return null;\n }\n\n fetchMoreData = () => {\n const numberToIncrease = PAGE_SIZE;\n const newPageSize = this.state.productsData.length + numberToIncrease;\n // this.props.onSaveProductsLoaded();\n setTimeout(() => {\n // this.props.onSaveProductsLoaded();\n // setProductsData((prev) => [...prev, ...products.slice(prev.length + 1, newPageSize)]);\n this.setState((prev) => ({\n productsData: prev.productsData.concat(this.props.filteredProducts.slice(prev.productsData.length, newPageSize))\n }));\n\n }, 500);\n }\n\n onHandleRiskChange = (e) => {\n this.props.onChangeFilter(FIELDS.PRODUCT_RISK, e);\n }\n\n render() {\n const { filteredProducts, isProductLoading } = this.props;\n const { productsData } = this.state;\n // console.log('isProductLoading', isProductLoading)\n // console.log('RISKS HOMEPAGE', filteredProducts.length, filteredProducts);\n\n return (\n
\n this.onHandleRiskChange(e)} />\n {/* {console.log('LOCAL STATE ', productsData, products)} */}\n
\n {/*
*/}\n\n {!isProductLoading \n ? }\n scrollableTarget=\"homepage__results\"\n pullDownToRefreshThreshold={10}\n endMessage={\n

\n Yay! You have seen it all\n

\n }\n >\n {productsData && productsData.map((item, idx) => (\n \n ))}\n\n {!productsData.length && (\n \n {`Oops! Please lower the \"Carbon level\" filter to get result`}\n \n )}\n\n {productsData.length < filteredProducts.length &&
*/}\n
\n {/* */}\n
\n )\n }\n}\n\n\nconst FilterWrapper = (props) => {\n const { exclusions, onUpdateUserInputFilters, onSave, onGetProducts, groupedSupports, threshold, carbonRiskScore, onSaveGroupSupports, isCarbonDisabled } = props;\n const [showExclusionModal, setShowExclusionModal] = useState(false);\n const [showSupportModal, setShowSupportModal] = useState(false);\n\n const onHandleRemove = (key, val) => {\n // console.log('remove from the filter: ', key, val);\n onUpdateUserInputFilters(key, val);\n }\n\n const onHandleAdd = (e) => {\n const { name } = e.target;\n \n if (name === 'exclusions') {\n setShowExclusionModal(true);\n }\n\n if (name === 'supports') {\n setShowSupportModal(true);\n }\n console.log(name, showExclusionModal)\n }\n\n const onHandleClose = () => {\n setShowExclusionModal(false);\n setShowSupportModal(false);\n }\n\n const onHandleExclusionConfirm = () => {\n setShowExclusionModal(false);\n onGetProducts();\n }\n\n const onHandleSupportConfirm = () => {\n setShowSupportModal(false);\n // onGetProducts(); NO NEED TO GET NEW PRODUCTS BASED ON SUPPORT CHANGES\n }\n\n const handleExclusionCheckedItem = (value: string) => {\n // const selected = [...checkedItem];\n const selected = [...exclusions];\n const index = selected.indexOf(value);\n if(index !== -1){\n selected.splice(index, 1);\n } else {\n selected.push(value);\n }\n // setCheckedItem(selected);\n onSave(FIELDS.EXCLUSIONS, selected);\n };\n\n const handleSupportCheckedItem = (value: string) => {\n // const selected = [...groupedSupports];\n // const index = selected.indexOf(value);\n // if(index !== -1){\n // selected.splice(index, 1);\n // } else {\n // selected.push(value);\n // }\n // console.log('causes to support', selected);\n // onSave(FIELDS.GROUPED_SUPPORTS, selected);\n onSaveGroupSupports(value);\n }\n\n const populateFilters = () => {\n const items = [\n { id: 'supports', title: 'You want to support', tags: groupedSupports },\n { id: 'exclusions', title: 'You want to exclude', tags: exclusions }\n ];\n return items;\n }\n\n const onHandleSliderChange = (name, val) => {\n // try {\n // onSave(name, val);\n // onGetProducts();\n // } catch (err) {\n // console.log(err)\n // }\n onSave(name, val)\n }\n return (\n <>\n onHandleRemove(key, val)}\n onAdd={onHandleAdd}\n defaultValueThreshold={threshold}\n defaultValueCarbonLevel={carbonRiskScore}\n onChange={onHandleSliderChange}\n onAfterChange={() => onGetProducts()}\n\n switcherValue={!isCarbonDisabled}\n onSwitcherChange={({ target }) => {\n Promise.all([onSave(target.name, target.checked)]).then(() => onGetProducts());\n }}\n />\n \n {/* onGetProducts()}\n /> */}\n\n {/* onGetProducts()}\n isDisabled={true}\n /> */}\n\n {/* Exclusion Popup Filter */}\n \n
\n {utils.exclusionOptions.map(p => (\n -1}\n onClick={() => handleExclusionCheckedItem(p.id)}\n isOnWhiteBg\n isSecondary\n />\n ))}\n
\n
\n\n \n
\n {utils.causesToSupportOptions.map(p => (\n -1}\n onClick={() => handleSupportCheckedItem(p.id)}\n isOnWhiteBg\n defaultButtonValue=\"Add\"\n selectedButtonValue=\"Added\"\n />\n ))}\n
\n
\n \n );\n }\n \n const mapStateToProps = ({ rootState, investmentState, productState }) => ({\n token: rootState.token,\n exclusions: investmentState.exclusions,\n // environment: investmentState.environment,\n // social: investmentState.social,\n // governance: investmentState.governance,\n groupedSupports: investmentState.groupedSupports,\n threshold: investmentState.threshold,\n carbonRiskScore: investmentState.carbonRiskScore,\n isCarbonDisabled: investmentState.isCarbonDisabled,\n \n products: productState.data,\n filteredProducts: selectors.modifiedProducts(productState.data),\n total: productState.paging.total,\n numOfRecords: productState.paging.numOfRecords,\n\n productsLoaded: productState.productsLoaded,\n isProductLoading: productState.isLoading,\n });\n \n const mapDispatchToProps = ({\n onGetProducts: storeAction.getProducts,\n onNumOfRecordsChanged: storeAction.changeTotalOfRecords,\n onSaveProductsLoaded: storeAction.onSaveProductsLoaded,\n onOverwriteProductsLoaded: storeAction.onProductsLoaded,\n onChangeFilter: storeAction.onChangeFilter,\n onUpdateUserInputFilters: storeAction.onUpdateUserInputFilters,\n onSave: storeAction.updateInvestmentData,\n onSaveGroupSupports: storeAction.updateGroupedSupports,\n });\n \n export default connect(mapStateToProps, mapDispatchToProps)(layoutWithBottomInfo(FilterWrapper, HomePage));","import React,{useState} from \"react\";\nimport { CheckMarkOption } from \"components\";\nimport \"./CheckMarkOtions.scss\";\n\ninterface Props {\n checkedValues: any; //TODO: define type this each elemnt of this\n onCheckMarkChange: any;\n optionList: any; //TODO: define type this each elemnt of this\n name?: string;\n type?: 'radio' | 'checkbox',\n\n}\n\nconst Options: React.FC = ({\n optionList,\n onCheckMarkChange = () =>{},\n type,\n checkedValues,\n name,\n}) => {\n\n const [checkedItem, setCheckedItem] = useState(checkedValues);\n const [radioChecked,setRadioChecked] = useState(false);\n const handleItemChecked = (event: React.ChangeEvent) => {\n event.stopPropagation();\n let arr = [...checkedItem];\n if(event.target.type === 'radio'){\n setRadioChecked(true);\n arr = [];\n if (event.target.checked) {\n arr.push(event.target.id);\n } \n } else {\n \n if(radioChecked){\n arr = [];\n setRadioChecked(false);\n }\n \n\n if (event.target.checked) {\n arr.push(event.target.id);\n } else {\n arr = arr.filter((p) => p !== event.target.id);\n }\n }\n // console.log('arr', arr);\n onCheckMarkChange(arr,name);\n setCheckedItem(arr);\n };\n\n return (\n
\n {optionList &&\n optionList.map((item: any, i: number) => (\n \n ))}\n
\n );\n};\n\nexport default Options;\n","import { Button } from 'components';\nimport React, { memo } from 'react';\nimport classnames from 'classnames';\nimport { isMobile } from 'react-device-detect';\nimport './WithBottomButton.scss';\nimport { isHeritageClause } from 'typescript';\n\n\ntype Props = {\n children: React.ReactNode;\n onButtonClick: ((event: React.MouseEvent) => void) | undefined;\n title?: String;\n description?: String;\n hideSkip?: Boolean;\n skipValue?: string | React.ReactNode;\n disable?: boolean;\n onSkipClick?: ((event: React.MouseEvent) => void) | undefined;\n buttonValue?: String | React.ReactNode;\n isGradientBg?: boolean;\n isButtonSwapOrder?: boolean;\n};\n\nconst WithBottomButton: React.FC = memo(({\n children, onButtonClick = () => {}, title, description, hideSkip = false, disable=false,\n skipValue = 'Skip', onSkipClick = () => {},\n buttonValue = 'Next',\n isGradientBg = false,\n isButtonSwapOrder = false\n}) => {\n const mainClasses = classnames({\n 'with-bottom-button': true,\n 'with-bottom-button--gradientBg': isGradientBg\n });\n const bottomClasses = classnames({\n 'with-bottom-button__bottom': true,\n 'with-bottom-button__bottom--swapOrder': isButtonSwapOrder,\n 'with-bottom-button__bottom--skip': !hideSkip,\n });\n return (\n
\n {title &&

{title}

}\n {description &&
{description}
}\n \n
{children}
\n {/* */}\n
\n {!hideSkip &&
\n
\n );\n});\n\nexport default WithBottomButton;\n","export const trackButtonClick = (tracking, userId, arrKeyValue) => {\n try {\n const { app } = tracking.getTrackingData();\n let data = arrKeyValue.map(item => ({ ...item, eventType: 'esg_tracking' })) || [];\n if (userId) {\n data.push({\n eventType: 'esg_tracking',\n key: 'userId',\n value: userId\n });\n }\n const body = {\n app,\n data\n }\n if (data.length) {\n tracking.trackEvent(body);\n }\n } catch {\n // ignore err\n }\n}\n\nexport const buildAnswerCodeFromArr = (arr) => {\n let result = '';\n Array.prototype.map.call(arr, (item, index) => {\n result += ((index !== 0 ? ',' : '') + item.toString());\n });\n return result;\n}\n","import React, { useMemo } from 'react';\nimport connect from 'shared/context/connect';\nimport { useHistory } from \"react-router-dom\";\nimport { PATH, FIELDS } from \"shared/constants/constants\";\nimport Options from \"components/CheckMarkOtions/CheckMarkOtions\";\nimport WithBottomButton from \"components/Layout/WithBottomButton\";\nimport storeAction from 'shared/context/actions';\nimport { defaultLayout } from 'layouts';\nimport track from 'react-tracking';\nimport { trackButtonClick, buildAnswerCodeFromArr } from 'shared/lib/tracking.utils';\n\ninterface Props {\n investmentStyle?: string,\n onSave?: any,\n data: Array,\n userId: string,\n tracking: Function,\n}\nconst StylePicker: React.FC = ({\n investmentStyle, onSave = () => {}, data = [], tracking = () => {}, userId\n}) => {\n // const [checkedItem, setCheckedItem] = useState(investmentStyle);\n const history = useHistory();\n\n const handleItemChecked = (value:any,name:string) => {\n console.log('value changed',name, value);\n // setCheckedItem(value);\n onSave(name, value);\n };\n\n // const dummyItems = [\n // { id: 'investmentStyle1', label: \"I don't want to mix investing and ESG.\", title: \"Returns, returns, returns.\", type: \"string\"},\n // { id: 'investmentStyle2', label: \"I'll invest sustainably if I get good returns. \", title: \"Returns first, values a close second.\", type: \"string\"},\n // { id: 'investmentStyle3', label: \"Sustainable investing is critical for returns.\", title: \"Returns. Values. Impact. I want it all.\", type: \"string\"},\n // { id: 'investmentStyle4', label: \"My values determine where I invest.\", title: \"Impact first, returns second.\", type: \"string\" },\n // { id: 'investmentStyle5', label: \"I do not care at all about financial returns.\", title: \"Impact, impact, impact.\", type: \"string\"},\n // ];\n\n const renderOptions = useMemo(() => {\n const mappedData = data.map((item: any) => ({ id: item.code, title: item.name, label: item.desc })).slice(1);\n return mappedData;\n }, [data]);\n\n // const dummyItems2 = [\n // { id: '13', label: \"I don't want to mix investing and ESG.\", title: \"Returns, returns, returns.\", type: \"string\"},\n // { id: '44', label: \"I'll invest sustainably if I get good returns. \", title: \"Returns first, values a close second.\", type: \"string\"},\n // // { id: 3, label: \"Sustainable investing is critical for returns.\", title: \"Returns. Values. Impact. I want it all.\", type: \"string\"},\n // ];\n\n return (\n {\n const answerCode = buildAnswerCodeFromArr(investmentStyle);\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: data[0]['code'] },\n { key: 'answerCode', value: answerCode },\n ]);\n history.push(PATH.ENVIRONMENT);\n }}\n >\n \n \n );\n};\n\nconst mapStateToProps = ({ investmentState, rootState }) => ({\n investmentStyle: investmentState.style,\n data: rootState.masterData.EN.investmentStyle,\n userId: rootState.userId\n});\n\nconst mapDispatchToProps = ({\n onSave: storeAction.updateInvestmentData,\n});\n\n// const mapDispatchToProps = dispatch => ({\n// onSave: (val) => storeAction.updateInvestmentStyle(val)(dispatch),\n// })\n\nexport default track()(connect(mapStateToProps, mapDispatchToProps)(defaultLayout(StylePicker)));\n","import React from \"react\";\nimport connect from 'shared/context/connect';\nimport storeAction from 'shared/context/actions';\nimport ButtonOption from \"components/ButtonOption/ButtonOption\";\nimport WithBottomButton from \"components/Layout/WithBottomButton\";\nimport { useHistory } from \"react-router-dom\";\nimport { PATH, FIELDS } from \"shared/constants/constants\";\nimport './Exclusions.scss'\nimport { defaultLayout } from 'layouts';\nimport utils from 'shared/helpers/utils';\nimport track from 'react-tracking';\nimport { trackButtonClick, buildAnswerCodeFromArr } from 'shared/lib/tracking.utils';\ninterface Props {\n exclusions?: Array,\n onSave?: any,\n onGetScore?: any,\n data: Array,\n userId: string,\n tracking: Function,\n}\nconst Exclusions: React.FC = ({\n exclusions = [], onSave = () => {},\n onGetScore = () => {}, \n data, userId,\n tracking = () => {},\n}) => {\n // const [checkedItem, setCheckedItem]: any[] = useState(exclusions);\n\n const handleCheckedItem = (value: string) => {\n // const selected = [...checkedItem];\n const selected = [...exclusions];\n const index = selected.indexOf(value);\n if(index !== -1){\n selected.splice(index, 1);\n } else {\n selected.push(value);\n }\n // console.log('selected', selected);\n // setCheckedItem(selected);\n onSave(FIELDS.EXCLUSIONS, selected);\n };\n\n const history = useHistory();\n\n // const dummyData = [\n // {id: 'palmOil', label: 'Palm oil'},\n // {id: 'thermalCoal', label: 'Thermal coal'},\n // {id: 'alcohol', label: 'Alcohol'},\n // {id: 'gambling', label: 'Gambling'},\n // {id: 'tobacco', label: 'Tobacco'},\n // {id: 'controversialWeapons', label: 'Controvertial weapons'},\n // {id: 'adultEntertainment', label: 'Adult entertainment'},\n // // {id: 'childLabour', label: 'Child labour'}\n // ];\n\n return (\n {\n // setCheckedItem([]);\n onGetScore();\n onSave(FIELDS.EXCLUSIONS, []);\n }}\n // disable={!checkedItem.length}\n buttonValue=\"Generate my ESG profile\"\n onButtonClick={() => {\n const answersString = utils.exclusionOptions.filter(item => exclusions.includes(item.id)).map((item) => item.tmpCode);\n const answerCode = buildAnswerCodeFromArr(answersString);\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: data[0]['code'] },\n { key: 'answerCode', value: answerCode },\n ]);\n Promise.all([onGetScore()]).then(() => {\n history.push(PATH.SCORE);\n });\n }}\n >\n
\n {utils.exclusionOptions.map(p=> (\n -1}\n onClick={() => handleCheckedItem(p.id)}\n isSecondary\n />\n ))}\n
\n \n \n );\n};\n\nconst mapStateToProps = ({ investmentState, rootState }) => ({\n exclusions: investmentState.exclusions,\n data: rootState.masterData.EN.exclusion,\n userId: rootState.userId,\n});\n\nconst mapDispatchToProps = ({\n onSave: storeAction.updateInvestmentData,\n onGetScore: storeAction.getUserScore,\n});\n\nexport default track()(connect(mapStateToProps, mapDispatchToProps)(defaultLayout(Exclusions)));\n","import React, { useMemo } from \"react\";\nimport connect from \"shared/context/connect\";\nimport { useHistory } from \"react-router-dom\";\nimport { CheckMarkItemContainer } from \"components\";\nimport WithBottomButton from \"components/Layout/WithBottomButton\";\nimport { PATH, FIELDS } from \"shared/constants/constants\";\nimport storeAction from \"shared/context/actions\";\nimport { defaultLayout } from \"layouts\";\nimport utils from \"shared/helpers/utils\";\nimport track from 'react-tracking';\nimport { trackButtonClick, buildAnswerCodeFromArr } from 'shared/lib/tracking.utils';\ninterface Props {\n onSave?: any;\n environment?: string;\n data: Array;\n userId: string;\n tracking: Function;\n}\nconst Environment: React.FC = ({\n onSave = () => {},\n environment,\n data,\n tracking = () => {},\n userId\n}) => {\n const history = useHistory();\n const { getStringAfterSpecialChar } = utils;\n // const handleItemChecked = (e: any) => {\n // if (e.target.checked) {\n // onSave(e.target.name, e.target.id);\n // } else {\n // onSave(e.target.name, null);\n // }\n // };\n\n console.log(getStringAfterSpecialChar(\"nw.esg.env.climate_change\", \".\"));\n\n const handleItemChecked = (value: any, name: string) => {\n onSave(name, value);\n };\n\n const handleSkipped = () => {\n // onSave(FIELDS.ENVIRONMENT, null);\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: data[0]['code'] },\n { key: 'skipped', value: 'true' },\n ]);\n onSave(FIELDS.ENVIRONMENT, []);\n history.push(PATH.SOCIAL);\n };\n\n // const data = [\n // { id: 'climateChange', label: \"Mitigate risks, and leverage opportunities arising from global warming.\", title: 'Climate change and carbon emissions', imgSrc: 'env-climate-change.png' },\n // { id: 'pollutionAndHaze', label: \"Avoid investments that contribute to the serious health hazards posed by recurring transboundary haze in ASEAN.\", title: 'Air and water pollution', imgSrc: 'env-pollution.png' },\n // { id: 'energyEfficiency', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxxxxx xxxx xx xxxxx..\", title: 'Energy efficiency', imgSrc: 'env-energy-efficiency.png' },\n // { id: 'wasteManagement', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxxxxx xxxx xx xxxxx..\", title: 'Waste management', imgSrc: 'env-waste-management.png' },\n // { id: 'waterScarcity', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxxxxx xxxx xx xxxxx..\", title: 'Water scarcity', imgSrc: 'env-water-scarcity.png' },\n // { id: 'bioDiversity', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxxxxx xxxx xx xxxxx..\", title: 'Biodiversity and deforestation', imgSrc: 'env-biodiversity.png' },\n // ];\n\n const renderOptions = useMemo(() => {\n const mappedData = data.map((item: any) => ({\n id: item.code,\n title: item.name,\n label: item.desc,\n imgSrc: `env-${getStringAfterSpecialChar(item.code, \".\")}.png`,\n }));\n return mappedData;\n }, [data]);\n\n return (\n handleSkipped()}\n disable={!environment.length}\n onButtonClick={() => {\n const answerCode = buildAnswerCodeFromArr(environment);\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: data[0]['code'] },\n { key: 'answerCode', value: answerCode },\n ]);\n history.push(PATH.SOCIAL);\n }}\n >\n \n \n );\n};\n\nconst mapStateToProps = ({ investmentState, rootState }) => ({\n environment: investmentState.environment,\n data: rootState.masterData.EN.env,\n userId: rootState.userId\n});\n\nconst mapDispatchToProps = {\n onSave: storeAction.updateInvestmentData,\n};\n\nexport default track()(connect(\n mapStateToProps,\n mapDispatchToProps\n)(defaultLayout(Environment)));\n","import React, { useMemo } from \"react\";\nimport { CheckMarkItemContainer } from \"components\";\nimport WithBottomButton from \"components/Layout/WithBottomButton\";\nimport connect from \"shared/context/connect\";\nimport { useHistory } from \"react-router-dom\";\nimport { PATH, FIELDS } from \"shared/constants/constants\";\nimport storeAction from \"shared/context/actions\";\nimport { defaultLayout } from \"layouts\";\nimport utils from \"shared/helpers/utils\";\nimport track from 'react-tracking';\nimport { trackButtonClick, buildAnswerCodeFromArr } from 'shared/lib/tracking.utils';\n\ninterface Props {\n onSave?: any;\n social?: string;\n data: Array;\n userId: string;\n tracking: Function;\n}\nconst Social: React.FC = ({ onSave = () => {}, social, data, tracking = () => {}, userId }) => {\n // const [checkedItem, setCheckedItem] = useState(social);\n const history = useHistory();\n const { getStringAfterSpecialChar } = utils;\n\n // const handleItemChecked = (e: any) => {\n // if (e.target.checked) {\n // onSave(e.target.name, e.target.id);\n // } else {\n // onSave(e.target.name, null);\n // }\n // };\n\n const handleItemChecked = (value: any, name: string) => {\n onSave(name, value);\n };\n\n const handleSkipped = () => {\n // onSave(FIELDS.SOCIAL, null);\n onSave(FIELDS.SOCIAL, []);\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: data[0]['code'] },\n { key: 'skipped', value: 'true' },\n ]);\n history.push(PATH.GOVERNANCE);\n };\n\n const renderOptions = useMemo(() => {\n const mappedData = data.map((item: any) => ({\n id: item.code,\n title: item.name,\n label: item.desc,\n imgSrc: `social-${getStringAfterSpecialChar(item.code, \".\")}.png`,\n }));\n return mappedData;\n }, [data]);\n\n // const data = [\n // { id: 'humanRights', label: \"Invest in equal pay for equal work, right to education, freedom of expression, etc.\", title: \"Human rights\", imgSrc: \"social-human-rights.png\" },\n // { id: 'gender', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxx xxxxxxx xxxx xx xxxxx.\", title: 'Gender and diversity policies', imgSrc: 'social-gender.png' },\n // { id: 'laborStandards', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxx xxxxxxx xxxx xx xxxxx.\", title: 'Labor standards', imgSrc: 'social-labor.png' },\n // { id: 'empEngagement', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxx xxxxxxx xxxx xx xxxxx.\", title: 'Employee engagement', imgSrc: 'social-employee.png' },\n // { id: 'customerSatisfaction', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxx xxxxxxx xxxx xx xxxxx.\", title: 'Customer satisfaction', imgSrc: 'social-customer.png' },\n // { id: 'communityRelations', label: \"Encourage companies to donate to the local community or encourage employees to perform volunteer work.\", title: \"Community relations\", imgSrc: \"social-community.png\" }\n // ];\n\n return (\n handleSkipped()}\n disable={!social.length}\n onButtonClick={() => {\n const answerCode = buildAnswerCodeFromArr(social);\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: data[0]['code'] },\n { key: 'answerCode', value: answerCode },\n ]);\n history.push(PATH.GOVERNANCE);\n }}\n >\n \n \n );\n};\n\nconst mapStateToProps = ({ investmentState, rootState }) => ({\n social: investmentState.social,\n data: rootState.masterData.EN.social,\n userId: rootState.userId\n});\n\nconst mapDispatchToProps = {\n onSave: storeAction.updateInvestmentData,\n};\n\nexport default track()(connect(\n mapStateToProps,\n mapDispatchToProps\n)(defaultLayout(Social)));\n","import React, { useMemo } from \"react\";\nimport { CheckMarkItemContainer } from \"components\";\nimport connect from \"shared/context/connect\";\nimport WithBottomButton from \"components/Layout/WithBottomButton\";\nimport { useHistory } from \"react-router-dom\";\nimport { PATH, FIELDS } from \"shared/constants/constants\";\nimport storeAction from \"shared/context/actions\";\nimport { defaultLayout } from \"layouts\";\nimport utils from \"shared/helpers/utils\";\nimport track from 'react-tracking';\nimport { trackButtonClick, buildAnswerCodeFromArr } from 'shared/lib/tracking.utils';\n\ninterface Props {\n onSave?: any;\n governance?: string;\n data: Array;\n userId: string;\n tracking: Function;\n}\nconst Governance: React.FC = ({\n onSave = () => {},\n governance,\n data,\n tracking = () => {},\n userId,\n}) => {\n // const [checkedItem, setCheckedItem] = useState(governance);\n const history = useHistory();\n const { getStringAfterSpecialChar } = utils;\n\n // const handleItemChecked = (e: any) => {\n // if (e.target.checked) {\n // onSave(e.target.name, e.target.id);\n // } else {\n // onSave(e.target.name, null);\n // }\n // };\n\n const handleItemChecked = (value: any, name: string) => {\n onSave(name, value);\n };\n\n const handleSkipped = () => {\n // onSave(FIELDS.GOVERNANCE, null);\n // history.push(PATH.EXPERIENCE);\n onSave(FIELDS.GOVERNANCE, []);\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: data[0]['code'] },\n { key: 'skipped', value: 'true' },\n ]);\n history.push(`${PATH.TRANSITION}?id=1`);\n };\n\n const renderOptions = useMemo(() => {\n const mappedData = data.map((item: any) => ({\n id: item.code,\n title: item.name,\n label: item.desc,\n imgSrc: `gov-${getStringAfterSpecialChar(item.code, \".\")}.png`,\n }));\n return mappedData;\n }, [data]);\n\n // const data = [\n // { id: 'auditCommittee', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxx xxxxxxx xxxx xx xxxxx.\", title: \"Audit committee structure\", imgSrc: \"gov-audit-committee.png\" },\n // { id: 'execCompensation', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxx xxxxxxx xxxx xx xxxxx.\", title: 'Executive compensation', imgSrc: 'gov-executive-compensation.png' },\n // { id: 'boardComposition', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxx xxxxxxx xxxx xx xxxxx.\", title: 'Board composition', imgSrc: 'gov-board-composition.png' },\n // { id: 'brideryCorruption', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxx xxxxxxx xxxx xx xxxxx.\", title: 'Bribery and corruption policies', imgSrc: 'gov-bribery.png' },\n // { id: 'lobbyingActivities', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxx xxxxxxx xxxx xx xxxxx.\", title: 'Lobbying activities', imgSrc: 'gov-lobbying-activities.png' },\n // { id: 'PoliticalContributions', label: \"Xxxxxxx xxxxxxx xxxx xx xxxxx xxxx xxxxxxx xxxx xx xxxxx.\", title: \"Political contributions\", imgSrc: \"gov-political-contributions.png\" }\n // ];\n\n return (\n handleSkipped()}\n disable={!governance.length}\n onButtonClick={() => {\n // history.push(PATH.EXPERIENCE);\n const answerCode = buildAnswerCodeFromArr(governance);\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: data[0]['code'] },\n { key: 'answerCode', value: answerCode },\n ]);\n history.push(`${PATH.TRANSITION}?id=1`);\n }}\n >\n \n \n );\n};\n\nconst mapStateToProps = ({ investmentState, rootState }) => ({\n governance: investmentState.governance,\n data: rootState.masterData.EN.governance,\n userId: rootState.userId,\n});\n\nconst mapDispatchToProps = {\n onSave: storeAction.updateInvestmentData,\n};\n\nexport default track()(connect(\n mapStateToProps,\n mapDispatchToProps\n)(defaultLayout(Governance)));\n","import React, { useMemo, useEffect } from \"react\";\nimport connect from 'shared/context/connect';\nimport { useHistory } from \"react-router-dom\";\nimport { Button } from \"components\";\nimport Chips from \"components/Chips\";\nimport { PATH } from \"shared/constants/constants\";\nimport utils from 'shared/helpers/utils';\n// import storeAction from 'shared/context/actions';\nimport track from 'react-tracking';\nimport { trackButtonClick } from 'shared/lib/tracking.utils';\n\nimport \"./ESGInfo.scss\";\n\ninterface Props {\n exclusions?: Array,\n // groupedSupports?: Array,\n // environment?: string,\n // social?: string,\n // governance?: string,\n // scoreDesc?: string,\n onGetProducts?: any,\n esgPreferences?: Array,\n // onSave?: any,\n userId: string,\n tracking: Function,\n score: any,\n}\nconst ESGInfo: React.FC = ({\n exclusions,\n esgPreferences = [],\n tracking = () => {},\n userId,\n score\n // esgPreferences = [{\n // name: 'Environment',\n // status: 'Passionate',\n // desc: 'Amet minim mollit non deserunt ullamco est sit aliqua dolor do amet sint officia consequat.'\n // }, {\n // name: 'Social',\n // status: 'Supportive',\n // desc: 'Amet minim mollit non deserunt ullamco est sit aliqua dolor do amet sint officia consequat.'\n // }, {\n // name: 'Governance',\n // status: 'Indifferent',\n // desc: 'Amet minim mollit non deserunt ullamco est sit aliqua dolor do amet sint officia consequat.'\n // }]\n}) => {\n const history = useHistory();\n\n const esgDesc = {\n Evangelist: 'You are ready to be the face and voice of such causes, and why there are so critical; investments should definitely make an impact!',\n Passionate: 'You care a lot and feel strongly about some causes, and when doable - you are ready to align your investments with them.',\n Advocate: 'You publicly supports one or more causes, and occasionally you might allocate part of your investments into this theme.',\n Supportive: 'You encourages people and initiatives, and you might even invest some of your money into the best performers.',\n Indifferent: 'You have no particular interest on those topics, and you probably prefer to focus your attention on other priorities.'\n }\n const esgType = {\n E: 'Environment',\n S: 'Social',\n G: 'Governance'\n }\n const renderEsgPreferences = useMemo(() => {\n return esgPreferences.map(item => ({\n name: esgType[item.type],\n status: item.esgProfile,\n desc: `${esgDesc[item.esgProfile]} (${item.totalScore})`\n }))\n }, [esgPreferences])\n \n const getScoreByType = (preferences, type) => {\n const item = preferences.find(item => item.type === type);\n return item?.totalScore;\n }\n\n useEffect(() => {\n trackButtonClick(tracking, userId, [\n { key: 'esgScore', value: score },\n { key: 'sScore', value: getScoreByType(esgPreferences, 'S') },\n { key: 'eScore', value: getScoreByType(esgPreferences, 'E') },\n { key: 'gScore', value: getScoreByType(esgPreferences, 'G') },\n ]);\n }, [esgPreferences])\n \n const onContinue = () => {\n // onGetProducts();\n // onSave(FIELDS.GROUPED_SUPPORTS, utils.getSupportsByID(environment, social, governance));\n history.push(PATH.HOME);\n }\n\n // We replace the numbers in brackets with an empty string\n function cleanItemDescription(itemDescription) {\n // pattern to remove numbers in brackets\n // at the end of item description string\n const bracketsPattern = /[(]-?[0-9]+[)]$/g;\n\n return itemDescription.replace(bracketsPattern, \"\")\n }\n\n return (\n
\n {/*

Your ESG element is AIR.

*/}\n
\n
Your ESG preferences
\n
    \n {esgPreferences && renderEsgPreferences && renderEsgPreferences.map((item, idx) => (\n
  • \n
    \n {item.name}\n {item.status}\n
    \n
    \n {cleanItemDescription(item.desc)}\n
    \n
  • \n ))}\n
\n {/* {scoreDesc} */}\n
\n \n {/* utils.getSupports(environment, social, governance) */}\n {/* utils.temporaryParseId[item])}/> */}\n {utils.getExclusions(exclusions).length ? : null}\n {/* \n
\n );\n};\n\nconst mapStateToProps = ({ investmentState, rootState }) => ({\n exclusions: investmentState.exclusions,\n // environment: investmentState.environment,\n // social: investmentState.social,\n // governance: investmentState.governance,\n groupedSupports: investmentState.groupedSupports,\n scoreDesc: investmentState.portfolio.description,\n score: investmentState.portfolio.score,\n esgPreferences: investmentState.portfolio.esgRankings,\n userId: rootState.userId\n});\n\nconst mapDispatchToProps = ({\n // onGetProducts: storeAction.getProducts,\n // onSave: storeAction.updateInvestmentData,\n});\n\nexport default track()(connect(mapStateToProps, mapDispatchToProps)(ESGInfo));\n","import React, { useEffect, useCallback } from 'react';\nimport utils from 'shared/helpers/utils';\nimport connect from 'shared/context/connect';\nimport { useHistory } from \"react-router-dom\";\nimport { isMobile } from 'react-device-detect';\n// import { isMobileOnly, isBrowser} from 'react-device-detect';\nimport { Charts } from 'components';\nimport { defaultLayout } from 'layouts';\nimport ESGInfo from './ESGInfo/ESGInfo';\nimport storeAction from 'shared/context/actions';\nimport { PATH } from \"shared/constants/constants\";\nimport WithBottomButton from \"components/Layout/WithBottomButton\";\nimport { useWindowSize } from \"shared/customHooks\";\nimport track from 'react-tracking';\nimport { trackButtonClick } from 'shared/lib/tracking.utils';\nimport './Score.scss';\n\nconst FUND_LIBRARY_URL = process.env.REACT_APP_FUND_LIBRARY;\nexport interface ScoreProps {\n // onGetScore?: any,\n score?: number,\n scoreDesc?: string,\n token?: string,\n groupedSupports?: any,\n esgElement?: string,\n // name?: string,\n onRestart?: any,\n exclusions?: any,\n userId: string,\n tracking: Function,\n}\nconst Score: React.FC = ({\n // onGetScore = () => {}, \n score,\n token,\n groupedSupports = [],\n scoreDesc,\n esgElement,\n onRestart = () => {},\n exclusions = [],\n tracking = () => {},\n userId,\n // name = 'AIR'\n}) => {\n // const isDesktop = !isMobileOnly && isBrowser;\n const windowSize = useWindowSize();\n const showSponsor = !!(windowSize.width >= 1190);\n const showSponsorOnMobile = !!(windowSize.width <= 980);\n const history = useHistory();\n // const exclusionList = exclusions && exclusions.split(',');\n \n // const fetchScore = useCallback(() => {\n // if (groupedSupports) { onGetScore() }\n // }, [groupedSupports]);\n\n // useEffect(() => {\n // // if (!token) {\n // // history.push(PATH.INDEX);\n // // }\n // if (score === 0) {\n // fetchScore(); \n // }\n // }, [fetchScore]);\n\n return (\n {\n trackButtonClick(tracking, userId, [\n { key: 'startOver', value: 'true' }\n ]);\n onRestart();\n history.push(PATH.STYLE_PICKER);\n }}\n buttonValue=\"Explore sustainable investing\"\n onButtonClick={() => {\n trackButtonClick(tracking, userId, [\n { key: 'firstExploreSustainableInvesting', value: 'true' }\n ]);\n history.push(PATH.PREFERENCES);\n /** @Todo add real params on the url (esg risk score, excludes, esg element?) */\n // window.open(`${FUND_LIBRARY_URL}?score=${score}&exclusions=${exclusions}`)\n // console.log('REDIRECT TO IMAS SCREENER')\n }}\n isButtonSwapOrder\n >\n {showSponsor && (\n
\n Special thanks to\n \"What\n
\n )}\n\n {showSponsorOnMobile && (\n
\n Special thanks to\n \"What\n
\n )}\n\n
\n
\n \n
\n
\n
\n
Your ESG element: {esgElement}
\n

{scoreDesc}

\n
\n
\n
\n \n\n \n );\n};\n\nconst mapStateToProps = ({ investmentState, rootState }) => ({\n exclusions: investmentState.exclusions,\n score: investmentState.portfolio.score,\n esgElement: investmentState.portfolio.name,\n token: rootState.token,\n groupedSupports: investmentState.groupedSupports,\n scoreDesc: investmentState.portfolio.description,\n userId: rootState.userId\n});\n\nconst mapDispatchToProps = ({\n onGetScore: storeAction.getUserScore,\n onRestart: storeAction.onClearSupports,\n});\n\n\nexport default track()(connect(mapStateToProps, mapDispatchToProps)(defaultLayout(Score)))\n// export default connect(mapStateToProps, mapDispatchToProps)(layoutWithBottomInfo(Score, ESGInfo));\n","export default __webpack_public_path__ + \"static/media/swipe-esg.f106f6cd.png\";","export default __webpack_public_path__ + \"static/media/swipe-impact.7eb3c4a2.png\";","export default __webpack_public_path__ + \"static/media/swipe-sri.8c38a03c.png\";","export default __webpack_public_path__ + \"static/media/swipe-philanthropy.858e3341.png\";","export default __webpack_public_path__ + \"static/media/swipe-esg-desktop.5addcdd5.png\";","export default __webpack_public_path__ + \"static/media/swipe-impact-desktop.ec9efb8d.png\";","export default __webpack_public_path__ + \"static/media/swipe-sri-desktop.76e413ca.png\";","export default __webpack_public_path__ + \"static/media/swipe-philanthropy-desktop.8fe2b7d7.png\";","import WithBottomButton from \"components/Layout/WithBottomButton\";\nimport React, { useState, useMemo } from \"react\";\nimport connect from \"shared/context/connect\";\n// import ReactPlayer from 'react-player';\nimport { useHistory } from \"react-router-dom\";\nimport { PATH, FIELDS } from \"shared/constants/constants\";\nimport utils from \"shared/helpers/utils\";\nimport storeAction from \"shared/context/actions\";\nimport { defaultLayout } from \"layouts\";\nimport { SwipeCard, SwipeSummary, EsgModal } from \"components\";\nimport { isMobileOnly } from \"react-device-detect\";\nimport { useWindowSize } from \"shared/customHooks\";\nimport track from 'react-tracking';\nimport { trackButtonClick } from 'shared/lib/tracking.utils';\n\nimport EsgImg from \"assets/images/swipe-esg.png\";\nimport ImpactImg from \"assets/images/swipe-impact.png\";\nimport SriImg from \"assets/images/swipe-sri.png\";\nimport VentureImg from \"assets/images/swipe-philanthropy.png\";\nimport EsgImgDesktop from \"assets/images/swipe-esg-desktop.png\";\nimport ImpactImgDesktop from \"assets/images/swipe-impact-desktop.png\";\nimport SriImgDesktop from \"assets/images/swipe-sri-desktop.png\";\nimport VentureImgDesktop from \"assets/images/swipe-philanthropy-desktop.png\";\n\ninterface Props {\n onSave?: any;\n experience?: Array;\n // onGetScore?: any,\n environment?: string;\n social?: string;\n governance?: string;\n userId: string;\n tracking: Function;\n}\nconst Experience: React.FC = ({\n onSave = () => {},\n experience,\n // onGetScore = () => {},\n environment,\n social,\n governance,\n tracking = () => {},\n userId,\n}) => {\n const [showPopup, setShowPopup] = useState(false);\n const [currentId, setCurrentId] = useState(null);\n // const [checkedItem, setCheckedItem] = useState(result);\n const history = useHistory();\n const windowSize = useWindowSize();\n const isMobileSize = !!(windowSize.width <= 768);\n\n const dummy = [\n {\n id: \"philanthropy\",\n swiped: false,\n direction: \"\",\n url: isMobileOnly ? VentureImg : VentureImgDesktop,\n title: \"Venture Philanthropy\",\n content: \"What is Venture Philanthropy?\",\n order: 4,\n },\n {\n id: \"impact\",\n swiped: false,\n direction: \"\",\n url: isMobileOnly ? ImpactImg : ImpactImgDesktop,\n title: \"Impact investments\",\n content: \"What is Impact Investing?\",\n order: 3,\n },\n {\n id: \"sri\",\n swiped: false,\n direction: \"\",\n url: isMobileOnly ? SriImg : SriImgDesktop,\n title: \"SRI investments\",\n content: \"What is SRI?\",\n order: 2,\n },\n {\n id: \"esg\",\n swiped: false,\n direction: \"\",\n url: isMobileOnly ? EsgImg : EsgImgDesktop,\n title: \"ESG investments\",\n content: \"What is ESG?\",\n order: 1,\n },\n ];\n\n //TODO handle this in by saving to store\n const [data, setData] = useState(dummy);\n // console.log('Experience', data, experience);\n\n const handleDataChange = (val: any) => {\n setData(val);\n onSave(FIELDS.EXPRIENCE, val);\n const changedVal = Array.prototype.find.call(val || [], item => item.swiped === true);\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: `nw.esg.experience.${changedVal.id}` },\n { key: 'answerCode', value: changedVal.direction === 'right' ? 'yes' : 'no' },\n ]);\n // console.log('data', val, experience)\n };\n\n const isContinueDisabled = () => {\n return data[0].swiped; //enable when in the last slide\n };\n const isHideSkip = () => {\n return data[0].swiped; //all are swiped\n };\n\n const onSkipClick = () => {\n const clonedData = [...data];\n let nextToSwipe = clonedData[clonedData.length - 1];\n for (let i = 0; i < clonedData.length; i++) {\n if (i > 0 && clonedData[i].swiped) {\n nextToSwipe = clonedData[i - 1];\n break;\n }\n }\n\n if (nextToSwipe) {\n nextToSwipe.swiped = true;\n nextToSwipe.direction = \"skipped\";\n setData(clonedData);\n onSave(FIELDS.EXPRIENCE, clonedData);\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: `nw.esg.experience.${nextToSwipe.id}` },\n { key: 'skipped', value: 'true' },\n ]);\n }\n };\n\n const onContinue = () => {\n // onGetScore();\n onSave(\n FIELDS.GROUPED_SUPPORTS,\n utils.getSupportsByID(environment, social, governance)\n );\n history.push(PATH.HIGH_RANKING);\n };\n\n const renderToolTips = useMemo(() => {\n switch (currentId) {\n case \"esg\":\n return {\n title: \"What is ESG?\",\n answer:\n \"ESG refers to environmental, social, and governance issues that investors with sustainability concerns consider when making investment decisions.\",\n video: \n // video: \n };\n case \"sri\":\n return {\n title: \"What is SRI?\",\n answer:\n \"Socially Responsible Investment is used in the names of numerous offers and labels. It is an investment which aims to reconcile economic performance with ESG impact by funding companies and public institutions that contribute to sustainable development regardless of their business sector. SRI contributes to a responsible economy.\",\n };\n case \"impact\":\n return {\n title: \"What is Impact Investing?\",\n answer:\n \"Impact investing means investing in companies to pursue a measurable, positive environmental or social impact, coupled with a financial return.\",\n video: \n };\n case \"philanthropy\":\n return {\n title: \"What is Venture Philanthropy?\",\n answer:\n \"Venture philanthropy is a type of impact investment that takes concepts and techniques from venture capital finance and business management and applies them to achieving philanthropic goals.\",\n };\n default:\n return null;\n }\n }, [currentId]);\n\n const onHandleTooltipClick = (id: string) => {\n setCurrentId(id);\n setShowPopup(true);\n };\n\n return (\n onContinue()}\n // skipValue=\"Don't know\"\n onSkipClick={onSkipClick}\n disable={!isContinueDisabled()}\n >\n {!data[0].swiped && (\n onHandleTooltipClick(id)}\n />\n )}\n\n {data[0].swiped && (\n a.order - b.order)}\n />\n )}\n\n setShowPopup(false)}\n onConfirm={() => setShowPopup(false)}\n >\n {/*

{renderToolTips?.answer}

*/}\n

\n

\n {renderToolTips?.video && renderToolTips?.video}\n
\n \n \n );\n};\n\nconst mapStateToProps = ({ investmentState, rootState }) => ({\n experience: investmentState.experience,\n environment: investmentState.environment,\n social: investmentState.social,\n governance: investmentState.governance,\n userId: rootState.userId,\n});\n\nconst mapDispatchToProps = {\n onSave: storeAction.updateInvestmentData,\n // onGetScore: storeAction.getUserScore,\n};\n\nexport default track()(connect(\n mapStateToProps,\n mapDispatchToProps\n)(defaultLayout(Experience)));\n","import React, { useMemo } from \"react\";\nimport connect from \"shared/context/connect\";\nimport { useHistory } from \"react-router-dom\";\nimport { PATH, FIELDS } from \"shared/constants/constants\";\nimport storeAction from \"shared/context/actions\";\nimport { CheckMarkItemContainer } from \"components\";\nimport WithBottomButton from \"components/Layout/WithBottomButton\";\nimport utils from \"shared/helpers/utils\";\nimport { defaultLayout } from \"layouts\";\nimport track from 'react-tracking';\nimport { trackButtonClick, buildAnswerCodeFromArr } from 'shared/lib/tracking.utils';\n\ninterface Props {\n onSave?: any;\n investHighRanking?: string;\n data: Array;\n userId: string;\n tracking: Function;\n}\nconst HighRanking: React.FC = ({\n onSave = () => {},\n investHighRanking,\n data,\n tracking = () => {},\n userId\n}) => {\n // const [checkedItem, setCheckedItem] = useState(governance);\n const history = useHistory();\n const { getStringAfterSpecialChar } = utils;\n\n // const handleItemChecked = (e: any) => {\n // if (e.target.checked) {\n // onSave(e.target.name, e.target.id);\n // } else {\n // onSave(e.target.name, null);\n // }\n // };\n\n const handleItemChecked = (value: any, name: string) => {\n onSave(name, value);\n };\n\n const handleSkipped = () => {\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: data[0]['code'] },\n { key: 'skipped', value: 'true' },\n ]);\n onSave(FIELDS.HIGH_RANKING, []);\n history.push(PATH.MOMENTUM);\n };\n\n const renderOptions = useMemo(() => {\n const mappedData = data.map((item: any) => ({\n id: item.code,\n title: item.name,\n label: item.desc,\n imgSrc: `high-rank-${getStringAfterSpecialChar(item.code, \".\")}.png`,\n }));\n return mappedData;\n }, [data]);\n\n return (\n \n

\n Would you invest in high ESG ranking companies within low ESG\n scoring industries (also known as hard to abate industries or sectors)? \n For example - an airline or an oil major that is\n the best in their respective industries.\n

\n {/*

For example - an airline or an oil major that is the best in their respective industries.

*/}\n \n }\n onSkipClick={() => handleSkipped()}\n // hideSkip\n disable={!investHighRanking.length}\n onButtonClick={() => {\n const answerCode = buildAnswerCodeFromArr(investHighRanking);\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: data[0]['code'] },\n { key: 'answerCode', value: answerCode },\n ]);\n history.push(PATH.MOMENTUM);\n }}\n >\n \n \n );\n};\n\nconst mapStateToProps = ({ investmentState, rootState }) => ({\n investHighRanking: investmentState.investHighRanking,\n data: rootState.masterData.EN.absolute,\n userId: rootState.userId\n});\n\nconst mapDispatchToProps = {\n onSave: storeAction.updateInvestmentData,\n};\n\nexport default track()(connect(\n mapStateToProps,\n mapDispatchToProps\n)(defaultLayout(HighRanking)));\n","import React, { useMemo } from \"react\";\nimport connect from \"shared/context/connect\";\nimport { useHistory } from \"react-router-dom\";\nimport { PATH, FIELDS } from \"shared/constants/constants\";\nimport storeAction from \"shared/context/actions\";\nimport { CheckMarkItemContainer } from \"components\";\nimport WithBottomButton from \"components/Layout/WithBottomButton\";\nimport utils from \"shared/helpers/utils\";\nimport { defaultLayout } from \"layouts\";\nimport track from 'react-tracking';\nimport { trackButtonClick, buildAnswerCodeFromArr } from 'shared/lib/tracking.utils';\n\ninterface Props {\n onSave?: any;\n investMediocreRanking?: string;\n data: Array;\n userId: string;\n tracking: Function;\n}\nconst Momentum: React.FC = ({\n onSave = () => {},\n investMediocreRanking,\n data,\n tracking = () => {},\n userId\n}) => {\n // const [checkedItem, setCheckedItem] = useState(governance);\n const history = useHistory();\n const { getStringAfterSpecialChar } = utils;\n\n // const handleItemChecked = (e: any) => {\n // if (e.target.checked) {\n // onSave(e.target.name, e.target.id);\n // } else {\n // onSave(e.target.name, null);\n // }\n // };\n\n const handleItemChecked = (value: any, name: string) => {\n onSave(name, value);\n };\n\n const handleSkipped = () => {\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: data[0]['code'] },\n { key: 'skipped', value: 'true' },\n ]);\n onSave(FIELDS.MOMENTUM, []);\n history.push(`${PATH.TRANSITION}?id=2`);\n };\n\n const renderOptions = useMemo(() => {\n const mappedData = data.map((item: any) => ({\n id: item.code,\n title: item.name,\n label: item.desc,\n imgSrc: `momentum-${getStringAfterSpecialChar(item.code, \".\")}.png`,\n }));\n return mappedData;\n }, [data]);\n\n return (\n handleSkipped()}\n // hideSkip\n disable={!investMediocreRanking.length}\n onButtonClick={() => {\n const answerCode = buildAnswerCodeFromArr(investMediocreRanking);\n trackButtonClick(tracking, userId, [\n { key: 'questionCode', value: data[0]['code'] },\n { key: 'answerCode', value: answerCode },\n ]);\n history.push(`${PATH.TRANSITION}?id=2`);\n }}\n >\n \n \n );\n};\n\nconst mapStateToProps = ({ investmentState, rootState }) => ({\n investMediocreRanking: investmentState.investMediocreRanking,\n data: rootState.masterData.EN.trend,\n userId: rootState.userId\n});\n\nconst mapDispatchToProps = {\n onSave: storeAction.updateInvestmentData,\n};\n\nexport default track()(connect(\n mapStateToProps,\n mapDispatchToProps\n)(defaultLayout(Momentum)));\n","export default __webpack_public_path__ + \"static/media/search-icon.b7c0da59.svg\";","export default __webpack_public_path__ + \"static/media/icon-close-grey.bd34a869.svg\";","import React, { useRef, useEffect, useCallback, memo } from 'react';\nimport ReactDOM from 'react-dom';\nimport { FormattedMessage } from 'react-intl';\nimport { Button, Tag } from 'components';\n\nimport './SearchFilter.scss';\nimport searchIcon from 'assets/images/search-icon.svg';\nimport closeIcon from 'assets/images/icon-close-grey.svg';\n\ninterface SearchFilterProps {\n id?: string,\n onClose?: ((event: React.MouseEvent) => void) | undefined,\n showSearchFilter?: boolean,\n placeholder?: string,\n onKeyDownSearchInput?: any,\n searchVal?: string,\n onHandleSearchVal?: any,\n onSeachValReset?: any,\n tagLength: number,\n clearBtnVal?: any,\n onHandleClearBtn?: ((event: React.MouseEvent) => void) | undefined,\n tags?: any,\n onNormalTagClick?: any,\n onHandleRemove: any,\n }\n\nconst SearchFilter: React.FC = ({\n id,\n onClose = () => {},\n showSearchFilter = false,\n placeholder = 'Search by Symbol, Company Name & Keyword',\n onKeyDownSearchInput = () => {},\n searchVal,\n onHandleSearchVal = () => {},\n onSeachValReset = () => {},\n tagLength,\n clearBtnVal = 'clear all',\n onHandleClearBtn,\n tags,\n onNormalTagClick = () => {},\n onHandleRemove = () => {},\n}) => {\n\n const searchFilterRef = useRef(null);\n\n const handleClickOutside = useCallback((event) => {\n if (searchFilterRef.current && !searchFilterRef.current.contains(event.target)) {\n onClose();\n }\n },[onClose]);\n\n useEffect(() => {\n document.addEventListener('click', handleClickOutside, true);\n return () => {\n document.removeEventListener('click', handleClickOutside, true);\n };\n }, [handleClickOutside]);\n\n if (showSearchFilter) {\n return ReactDOM.createPortal(\n
\n
\n
\n
\n \"search\"\n \n {searchVal ?\n \"close\" : \"\"}\n
\n
\n
\n \n {tags.length <= 1 ?\n \n : }\n \n {tags.length === 0 ? \n
\n
\n {tags && tags.map((_item: string, idx: number)=>\n {return \n })}\n
\n
\n
\n
\n
,\n document.querySelector('#app'),\n );\n }\n return null;\n};\n\nexport default memo(SearchFilter);\n","import React from 'react';\nimport classNames from 'classnames';\nimport './NewsDetails.scss';\nimport NavigaBtn from 'assets/images/naviga.png';\n\n\ninterface Props {\n id?: string,\n name?: string,\n title?: string,\n description?: string,\n dateString?: string,\n author?: string,\n ref?: any,\n onCheckMarkChange?: ((event: React.ChangeEvent) => void) | undefined,\n}\nconst NewsDetails: React.FC = ({\n id= '',\n name = '',\n title = '',\n description = '',\n dateString = '',\n author = ''\n }): JSX.Element => {\n return (\n
\n
\n {dateString}\n\n {/* */}\n {author}\n
\n

\n \n {title}\n \n

\n
{description}
\n
\n );\n};\n\nexport default NewsDetails;\n","import React, { useState, useCallback, useEffect, PureComponent, useContext } from 'react';\nimport { GlobalContext } from 'shared/context/store';\nimport { FormattedMessage } from 'react-intl';\nimport { defaultLayout } from 'layouts';\nimport connect from 'shared/context/connect';\nimport { NewsItem, PageLoader, EsgModal } from 'components';\nimport SearchFilter from './FilterNewsComponent/SearchFilter';\nimport { useStreamingNews } from 'shared/customHooks';\nimport utils from '../../shared/helpers/utils';\n\nimport './StreamingNews.scss';\nimport NewsDetails from 'components/NewsDetails';\nimport storeAction from 'shared/context/actions';\n\nexport interface StreamingNewsProps {\n id: string,\n displaySearchFilter: boolean,\n onCloseSearchFilter: ((event: React.MouseEvent) => void) | undefined,\n onStoreSearchHistory?: any,\n onRemoveSearchCriteria?: any,\n onGetSearchHistory?: any,\n saveNews?: any,\n newsData?: any,\n searchHistory?: any,\n}\n\nconst StreamingNews: React.FC = ({\n id,\n displaySearchFilter,\n onCloseSearchFilter,\n onStoreSearchHistory = () => {},\n onRemoveSearchCriteria = () => {},\n onGetSearchHistory = () => {},\n saveNews = () => {},\n newsData,\n searchHistory,\n}) => {\n const { status, data, isFetching, error } = useStreamingNews(saveNews);\n\n const [showNewsDetails, setShowNewsDetails] = useState(false)\n\n const [newsTitle, setNewsTitle] = useState('')\n const [newsDescription, setDescription] = useState('')\n const [newsPublishDate, setPublishDate] = useState('')\n // const [newsAuthor, setAuthor] = useState('')\n \n const [searchTerm, setSearchTerm] = useState('');\n\n /** Retrieve State for Language */\n const { state: { rootState } } = useContext(GlobalContext);\n\n const search = (e) => {\n if(e.target.value !== null && e.target.value.match(/^ *$/) === null && e.key === 'Enter') {\n onCloseSearchFilter(e);\n const searchedVal = e.target.value.toLowerCase();\n setSearchTerm(searchedVal);\n onStoreSearchHistory(e.target.value);\n }\n }\n\n const onHandleSearchValChange = (e) => {\n setSearchTerm(e.target.value)\n }\n \n const onHandleSeachValReset = (e) => {\n onCloseSearchFilter(e);\n setSearchTerm('')\n }\n\n const filteredSearch = useCallback(() => {\n const newsDataCopy = [...newsData];\n let searchResult = [];\n searchResult = !searchTerm ? newsDataCopy\n : newsDataCopy.filter(x => x.title.toLowerCase().includes(searchTerm) || x.description.toLowerCase().includes(searchTerm) || x.codes.toLowerCase().includes(searchTerm));\n return searchResult;\n }, [searchTerm, newsData]);\n\n useEffect(() => {\n onGetSearchHistory()\n }, []);\n\n const handleTagClick = (e) => {\n onCloseSearchFilter(e);\n const searchedVal = e.currentTarget.textContent.toLowerCase();\n setSearchTerm(searchedVal);\n }\n \n const handleClearBtn = (e) => {\n e = searchHistory.splice(0, searchHistory.length)\n onRemoveSearchCriteria(e)\n };\n\n const handleRemoveItem = (e) => {\n onRemoveSearchCriteria(e)\n };\n\n return (\n
\n {status === 'loading' ? (\n \n ) : status === \"error\" ? (\n Error: {error.message}\n ) : (\n <>\n }\n onHandleClearBtn={handleClearBtn}\n onNormalTagClick={handleTagClick}\n onHandleRemove={handleRemoveItem}\n tags={searchHistory}\n />\n {setShowNewsDetails(false)}}>\n \n \n { data && filteredSearch().map((product: any, index: any) => (\n {\n setNewsTitle(product.title)\n setDescription(product.description)\n setPublishDate(rootState.language.locale === 'EN' ? utils.epochToShortDateString(product.publishDate*1000) : utils.cnDateTime(product.publishDate))\n // setAuthor(product.author)\n setShowNewsDetails(!showNewsDetails)\n }}\n {...product}\n />\n ))}\n {filteredSearch().length === 0 ?\n
:\n filteredSearch().length === 1 ?\n
:\n
\n\n }\n
{isFetching ? \"Background Updating...\" : \" \"}
\n \n )}\n
\n \n );\n};\n\nconst mapStateToProps = ({ newsState }) => ({\n newsData: newsState.data,\n searchHistory: newsState.searchTerms,\n });\n \n const mapDispatchToProps = ({\n saveNews: storeAction.storeNews,\n onStoreSearchHistory: storeAction.storeSearchCriteria,\n onRemoveSearchCriteria: storeAction.removeSearchCriteria,\n onGetSearchHistory: storeAction.getSearchCriteria,\n });\n\n\nexport default connect(mapStateToProps, mapDispatchToProps)(defaultLayout(StreamingNews));","import React, { useEffect, useState } from \"react\";\nimport { useHistory } from 'react-router-dom';\nimport ReactPlayer from 'react-player';\nimport track from 'react-tracking';\nimport { trackButtonClick } from 'shared/lib/tracking.utils';\nimport { simpleLayout } from 'layouts';\nimport { PATH } from 'shared/constants/constants';\nimport { isMobileOnly, isIOS, isMobile } from 'react-device-detect';\nimport classNames from 'classnames';\nimport utils from 'shared/helpers/utils';\nimport { Button } from 'components';\n// import NewsIcon from 'assets/images/news-icon-white.svg';\nimport { changeLanguage } from 'shared/context/actions';\nimport connect from 'shared/context/connect';\nimport { EsgModal } from 'components';\nimport './Intro.scss';\n\ninterface IIntroProps {\n language: string,\n userId: string,\n onChangeLanguage?: any,\n tracking: Function,\n}\n\nconst FUND_LIBRARY_URL = process.env.REACT_APP_FUND_LIBRARY;\n\nconst Intro: React.FC = ({language, onChangeLanguage = () => {}, userId, tracking}) => {\n const [showPopup, setShowPopup] = useState(false);\n const history = useHistory();\n const classes = classNames({\n 'intro': true,\n 'intro--ios': isMobileOnly && isIOS,\n 'intro--noVideo': !isMobile,\n 'intro--noBg': !isMobileOnly\n });\n const introClass = 'mainIndex';\n const introWelcomeImg = isMobileOnly ? 'ESG-investing.svg' : 'ESG-investing-desktop.svg';\n\n const handleStartBtn = () => {\n trackButtonClick(tracking, userId, [\n { key: 'getStarted', value: 'true' }\n ]);\n history.push(PATH.STYLE_PICKER);\n }\n\n /** Add this class on index or intro page to hide video bg */\n useEffect(() => {\n document.body.classList.add(introClass);\n return () => {\n document.body.classList.remove(introClass);\n }\n }, [])\n\n return (\n <>\n {isMobileOnly ? (\n
\n \n
\n ) : (\n
\n \n
\n )}\n\n
\n \n
\n
\n {/* \"Back window.open(FUND_LIBRARY_URL, \"_self\")} /> */}\n {/* \"Streaming history.push(PATH.STREAMING_NEWS)} /> */}\n {/* onChangeLanguage(lang)} /> */}\n
\n\n
\n \"IMAS\n\n
Answer a few questions to discover your ESG element and align your investment preferences with your values.
\n\n
\n {!isMobileOnly ?
\n\n \n
\n
\n\n
\n Special thanks to\n \"What\n
\n\n \n
\n {/*
\n
\n\n setShowPopup(false)} \n onConfirm={() => setShowPopup(false)}\n customClassName=\"modal--big\"\n >\n
\n {/* */}\n \n
\n
\n \n );\n}\nconst mapStateToProps = ({ rootState }) => ({\n // language: rootState.language.locale\n userId: rootState.userId\n});\n \nconst mapDispatchToProps = ({\n onChangeLanguage: changeLanguage,\n});\n\nexport default track()(connect(mapStateToProps, mapDispatchToProps)(simpleLayout(Intro)));","import React, { useState } from 'react';\nimport connect from 'shared/context/connect';\n// import ReactPlayer from 'react-player';\nimport track from 'react-tracking';\nimport { trackButtonClick, buildAnswerCodeFromArr } from 'shared/lib/tracking.utils';\nimport storeAction from 'shared/context/actions';\nimport { useHistory } from 'react-router-dom';\nimport { PATH, FIELDS } from 'shared/constants/constants';\nimport WithBottomButton from 'components/Layout/WithBottomButton';\nimport InfoIcon from 'assets/images/information.svg';\nimport { EsgModal } from 'components';\nimport utils from 'shared/helpers/utils';\nimport { defaultLayout } from 'layouts';\nimport './Transition.scss';\n\nexport interface ITransitionProps {\n icon?: string,\n desc?: string,\n onSave?: any,\n onGetScore?: any,\n userId: string,\n tracking: Function,\n}\n\nconst Transition: React.FC = ({\n icon = `${utils.baseUrl}/icons/icon-transition.svg`,\n desc = 'Some investors have a strong aversion to certain categories such as tobacco and gambling. Would you like to specifically exclude these categories?',\n onSave = () => {},\n onGetScore = () => {},\n tracking = () => {},\n userId\n}) => {\n const history = useHistory();\n const [showPopup, setShowPopup] = useState(false);\n const [showTipsPopup, setShowTipsPopup] = useState(false);\n const urlParams = new URLSearchParams(history.location.search);\n const transitionNumber = urlParams.getAll('id').toString();\n const isFirstTransition = !!(transitionNumber === '1');\n const renderIconSrc = isFirstTransition ? `${utils.baseUrl}/icons/icon-transition1.svg` : icon;\n \n const desc1 = 'Next, let’s understand your sustainable investing practices around SRI, ESG, Impact investing, and venture philanthropy.';\n const renderDesc = isFirstTransition ? desc1 : desc;\n\n const renderSkipValue = isFirstTransition ? Learn more about sustainable investing : 'Customise exclusions';\n const renderButtonValue = isFirstTransition ? \"Let's do it\" : 'Ignore exclusions';\n\n const handleCustomizeExclusion = () => {\n trackButtonClick(tracking, userId, [{ key: 'excluded', value: 'true' }]);\n history.push(PATH.EXCLUSIONS)\n }\n \n return (\n {\n !isFirstTransition ? handleCustomizeExclusion() : setShowPopup(true);\n // window.open(process.env.REACT_APP_EDUCATION_CENTER)\n }}\n onButtonClick={() => {\n if (!isFirstTransition) {\n onSave(FIELDS.EXCLUSIONS, []);\n trackButtonClick(tracking, userId, [{ key: 'excluded', value: 'false' }]);\n Promise.all([onGetScore()]).then(() => {\n history.push(PATH.SCORE);\n });\n } else {\n history.push(PATH.EXPERIENCE);\n }\n // history.push(isFirstTransition ? PATH.EXPERIENCE : PATH.SCORE);\n }}\n >\n
\n \"Icon\"\n

{renderDesc}

\n\n {!isFirstTransition && (\n \n )} \n
\n\n setShowTipsPopup(false)} \n onConfirm={() => setShowTipsPopup(false)} \n >\n

Sometimes, companies with a low sustainable rating might have more room for growth and improvement in the long \n term so it’s important for investors to remain diversified and consider each company and approach individually.  \n Read more.\n

\n
\n\n setShowPopup(false)} \n onConfirm={() => setShowPopup(false)} \n >\n

Sustainable investing seeks to deliver competitive financial results while driving positive environmental, social and governance (ESG) outcomes. In other words, it considers how investments can impact people, planet, and profits.

\n

Sustainable investing approaches range from those aimed primarily at avoiding negative outcomes, be those investment our real-world outcomes, to those focused more on advancing positive outcomes. Investors may use one approach or combine several or all of them.

\n

For investments, a sustainability lens can help control risk, and it can help identify new investment opportunities by recognizing the material relevance of ESG factors and including them in their investment process, resulting in a more-complete picture of an investment. For the world, a sustainability lens can help investors avoid negative outcomes or achieve positive outcomes for people in the planet.

\n
\n \n );\n}\n\nconst mapStateToProps = ({ investmentState, rootState }) => ({\n // investmentStyle: investmentState.style,\n userId: rootState.userId,\n});\n \nconst mapDispatchToProps = ({\n onSave: storeAction.updateInvestmentData,\n onGetScore: storeAction.getUserScore,\n});\n\nexport default track()(connect(mapStateToProps, mapDispatchToProps)(defaultLayout(Transition)));","export default __webpack_public_path__ + \"static/media/icon-plus.a0b5ea08.svg\";","import React, { useState, memo, useMemo, useEffect } from \"react\";\nimport WithBottomButton from \"components/Layout/WithBottomButton\";\nimport { defaultLayout } from \"layouts\";\nimport ReactLoading from \"react-loading\";\nimport {\n RiskSlider,\n EsgRiskSlider,\n EsgModal,\n ButtonOption,\n Filter,\n FilterSlider,\n} from \"components\";\nimport { isEqual } from 'lodash';\nimport track from 'react-tracking';\nimport { trackButtonClick, buildAnswerCodeFromArr } from 'shared/lib/tracking.utils';\nimport connect from \"shared/context/connect\";\nimport storeAction from \"shared/context/actions\";\n// import { useHistory } from 'react-router-dom';\nimport utils from \"shared/helpers/utils\";\nimport { PATH, FIELDS } from \"shared/constants/constants\";\nimport \"./Preferences.scss\";\nimport PlusIcon from \"assets/images/icon-plus.svg\";\n\nconst FUND_LIBRARY_URL = process.env.REACT_APP_FUND_LIBRARY;\ninterface IPreferencesProps {\n // carbonRiskScore?: Array,\n // environmentScore?: number,\n // socialScore?: number,\n // governanceScore?: number,\n exclusions?: Array;\n // exclusionThreshold?: number,\n onSave?: any;\n onUpdateUserInputFilters?: any;\n esgRankings?: Array;\n userId: string;\n tracking: Function;\n}\n\nconst Preferences: React.FC = ({\n // carbonRiskScore = [1, 3],\n // environmentScore = 3,\n // socialScore = 2,\n // governanceScore = 1,\n exclusions = [],\n // exclusionThreshold = 1.0,\n onSave,\n onUpdateUserInputFilters,\n esgRankings = [],\n tracking = () => {},\n userId,\n}) => {\n const [isSubmitted, setIsSubmitted] = useState(false);\n const [is2ndBtnSubmitted, set2ndBtnSubmitted] = useState(false);\n const [showExclusionModal, setShowExclusionModal] = useState(false);\n const [carbonRiskScore, setCarbonRiskScore] = useState([1, 4]);\n const [environmentScore, setEnvironmentScore] = useState(\n esgRankings[0]?.level || 3\n );\n const [socialScore, setSocialScore] = useState(esgRankings[1]?.level || 2);\n const [governanceScore, setGovernanceScore] = useState(\n esgRankings[2]?.level || 2\n );\n const [exclusionThreshold, setExclusionThreshold] = useState(2.0);\n const [initFilter, setInitFilter] = useState(null);\n\n const onHandleExclusionConfirm = () => {\n setShowExclusionModal(false);\n // onGetProducts();\n };\n const handleExclusionCheckedItem = (value: string) => {\n // const selected = [...checkedItem];\n const selected = [...exclusions];\n const index = selected.indexOf(value);\n if (index !== -1) {\n selected.splice(index, 1);\n } else {\n selected.push(value);\n }\n // setCheckedItem(selected);\n onSave(FIELDS.EXCLUSIONS, selected);\n };\n\n const onHandleRemove = (key, val) => {\n onUpdateUserInputFilters(key, val);\n };\n\n const getFormData = () => {\n return {\n carbonRiskMin: carbonRiskScore[0],\n carbonRiskMax: carbonRiskScore[1],\n eRisk: environmentScore,\n sRisk: socialScore,\n gRisk: governanceScore,\n exclusionThresHold: exclusionThreshold,\n }\n }\n\n const trackExploreSustainableInvesting = () => {\n const formData = getFormData();\n const excludesValue = utils.exclusionOptions.filter(item => exclusions.includes(item.id)).map((item) => item.tmpCode);\n const excludesCode = buildAnswerCodeFromArr(excludesValue);\n let arrKeyValue = [\n { key: 'firstExploreSustainableInvesting', value: 'true' },\n { key: 'carbonRiskMin', value: carbonRiskScore[0] },\n { key: 'carbonRiskMax', value: carbonRiskScore[1] },\n { key: 'eRisk', value: environmentScore },\n { key: 'sRisk', value: socialScore },\n { key: 'gRisk', value: governanceScore },\n { key: 'excludes', value: excludesCode },\n { key: 'exclusionThresHold', value: exclusionThreshold }\n ]\n if (!isEqual(formData, initFilter)) {\n arrKeyValue.push({ key: 'modifyFilters', value: 'true' });\n }\n trackButtonClick(tracking, userId, arrKeyValue);\n }\n\n useEffect(() => {\n setInitFilter(getFormData());\n }, []);\n\n // const onHandleSliderChange = (name: string, val: any) => {\n // onSave(name, val);\n // console.log('saving slider values', name, val)\n // }\n\n /** Esg preference tooltips */\n const esgRiskTooltips = {\n environment:\n \"The asset-weighted average of the Company Environmental Risk scores for the covered holdings in a portfolio. Company Environmental Risk Scores from Sustainalytics measure the degree to which a company's economic value may be at risk driven by environmental factors. The environmental risk represents the unmanaged environmental risk exposure after taking into account a company's management of such risks. The Environmental Risk Scores are displayed as a number between 0 and 100, though most scores range between 0 and 25.\",\n social:\n \"The asset-weighted average of the Company Social Risk Scores for the covered holdings in a portfolio. Company Social Risk Scores from Sustainalytics measure the degree to which a company's economic value may be at risk driven by social factors. The social risk represents the unmanaged social risk exposure after taking into account a company's management of such risks. The Social Risk Scores are displayed as a number between 0 and 100, though most scores range between 0 and 25.\",\n governance:\n \"The asset-weighted average of the company Governance Risk Scores for the covered holdings in a portfolio. Company Governance Risk Scores from Sustainalytics measure the degree to which a company's economic value may be at risk driven by governance factors. The governance risk represents the unmanaged governance risk exposure after taking into account a company's management of such risks. The Governance Risk Scores are displayed as a number between 0 and 100, though most scores range between 0 and 25.\",\n };\n\n /** render primary button value */\n const renderPrimaryButton = useMemo(() => {\n return isSubmitted ? (\n \n \n \n ) : (\n \"Explore sustainable investing\"\n );\n }, [isSubmitted]);\n\n /** render skip button value */\n const renderSecondaryButton = useMemo(() => {\n return is2ndBtnSubmitted ? (\n \n \n \n ) : (\n \"Explore fund library\"\n );\n }, [is2ndBtnSubmitted]);\n\n return (\n {\n set2ndBtnSubmitted(true);\n trackButtonClick(tracking, userId, [\n { key: 'exploreFundLibrary', value: 'true' }\n ]);\n window.open(FUND_LIBRARY_URL, \"_self\");\n }}\n buttonValue={renderPrimaryButton}\n onButtonClick={() => {\n setIsSubmitted(true);\n trackExploreSustainableInvesting();\n window.open(\n `${FUND_LIBRARY_URL}?new=true&carbonScore=${carbonRiskScore}&environment=${environmentScore}&social=${socialScore}&governance=${governanceScore}&exclusions=${exclusions}&threshold=${exclusionThreshold}&type=esgProfiler&featured=false`,\n \"_self\"\n );\n }}\n isButtonSwapOrder\n // disable={isSubmitted}\n >\n
\n {/* Carbon risk slider */}\n setCarbonRiskScore(e)} />\n\n
\n setEnvironmentScore(e)}\n />\n setSocialScore(e)}\n />\n setGovernanceScore(e)}\n />\n
\n\n {/* EXCLUSION (Select to exclude) */}\n \n ) : (\n <>\n Select to exclude\n \n \n )\n }\n onRemove={onHandleRemove}\n onAdd={() => setShowExclusionModal(true)}\n />\n\n 10%\"\n step={0.1}\n defaultValue={exclusionThreshold}\n // onAfterChange={onAfterChange}\n // isSwitchDisabled\n isSwitcherHidden\n // iconBtnId='threshold'\n popupContent=\"\"\n // onChange={e => onHandleSliderChange(FIELDS.THRESHOLD, e)}\n onChange={(val) => setExclusionThreshold(val)}\n isDisabled={!exclusions.length}\n />\n\n \n
\n\n setShowExclusionModal(false)}\n onConfirm={onHandleExclusionConfirm}\n >\n
\n {utils.exclusionOptions.map((p) => (\n -1}\n onClick={() => handleExclusionCheckedItem(p.id)}\n isOnWhiteBg\n isSecondary\n />\n ))}\n
\n \n \n );\n};\n\nconst mapStateToProps = ({ investmentState, rootState }) => ({\n exclusions: investmentState.exclusions,\n esgRankings: investmentState.portfolio.esgRankings,\n userId: rootState.userId,\n // exclusionThreshold: investmentState.threshold,\n});\n\nconst mapDispatchToProps = {\n onSave: storeAction.updateInvestmentData,\n onUpdateUserInputFilters: storeAction.onUpdateUserInputFilters,\n};\n\nexport default track()(connect(\n mapStateToProps,\n mapDispatchToProps\n)(memo(defaultLayout(Preferences))));\n","import React, { useState, useEffect } from 'react';\nimport connect from 'shared/context/connect';\nimport { useHistory } from \"react-router-dom\";\nimport { authLayout } from 'layouts';\nimport storeAction from 'shared/context/actions';\nimport utils from 'shared/helpers/utils';\nimport ReactLoading from 'react-loading';\nimport './Login.scss';\n\nimport { InputWithButton } from 'components';\nimport { PATH } from 'shared/constants/constants';\n\ninterface Props {\n onHandleLogin?: any,\n onValidateToken?: any,\n phoneNumber?: string,\n error?: string,\n token?: string,\n}\nconst Login: React.FC = ({\n onHandleLogin = () => {}, phoneNumber, error, token,\n onValidateToken = () => {}\n}) => {\n const [mobile, setMobile] = useState(phoneNumber);\n const [isLoading, setIsLoading] = useState(false);\n const history = useHistory();\n\n useEffect(() => {\n if (token) {\n onValidateToken();\n }\n }, []);\n\n const onMobileChange = (e: any) => {\n setMobile(e.target.value);\n }\n\n const onSubmit = (e) => {\n e.preventDefault();\n\n setIsLoading(true);\n if (token) {\n history.push(PATH.INTRO);\n setIsLoading(false);\n } else {\n Promise.all([\n onHandleLogin(mobile, history),\n ]).then(() => {\n setIsLoading(false);\n });\n }\n }\n\n const buttonVal = isLoading ? (\n \n ) : (\n <>\n {token ? 'Continue' : 'Send OTP'}\n \"enter\"\n \n );\n\n return (\n
\n
\n

Make your portfolio reflect your vision for our future.

\n

Research is increasingly showing that ESG investing can reduce portfolio risk, generate competitive investment returns, and help investors feel good about the stocks they own.

\n\n onSubmit(e)}\n />\n\n

For now this is a private access only for the registered mobile numbers.

\n\n

\n Request access.\n

\n
\n
\n \"ESG\n
\n
\n )\n}\n\nconst mapStateToProps = ({ rootState }) => ({\n phoneNumber: rootState.phoneNumber,\n error: rootState.error,\n token: rootState.token,\n});\n\nconst mapDispatchToProps = ({\n onHandleLogin: storeAction.requestOtp,\n onValidateToken: storeAction.validateToken,\n})\nexport default connect(mapStateToProps, mapDispatchToProps)(authLayout(Login));","import React, { PureComponent } from 'react';\nimport connect from 'shared/context/connect';\nimport storeAction from 'shared/context/actions';\nimport { injectIntl } from 'react-intl';\nimport { authLayout } from 'layouts';\nimport moment from 'moment';\nimport { PATH } from 'shared/constants/constants';\n\nimport './Otp.scss';\n\nlet interval = null;\nconst timeout = null;\nconst CODE_LENGTH = new Array(4).fill(0);\n\ninterface State {\n timer: any,\n value: string,\n focused: boolean,\n}\n\ninterface Props {\n history: { \n location?: any, \n push?: any \n },\n intl: { formatMessage?: any },\n onHandleOTP?: any,\n // clientData?: any,\n onHandleResendOTP?: any,\n phoneNumber?: string,\n error?: string,\n token?: string,\n}\n\nclass Otp extends PureComponent {\n input: React.RefObject;\n\n constructor(props) {\n super(props);\n this.state = {\n timer: 60000,\n value: '',\n focused: false,\n };\n this.input = React.createRef();\n }\n\n componentDidMount() {\n // initial input typing\n this.input.current.style.caretColor = 'transparent';\n this.handleFocus();\n \n // start resend code duration\n this.resendCodeDuration();\n\n if (this.props.token) {\n this.props.history.push(PATH.INTRO);\n }\n }\n \n componentDidUpdate() {\n const { timer } = this.state;\n if (timer === 0) {\n clearInterval(interval);\n }\n }\n \n componentWillUnmount() {\n clearInterval(interval);\n clearTimeout(timeout);\n }\n \n handleResendCode = () => {\n const { onHandleResendOTP, history, phoneNumber } = this.props;\n this.setState({\n timer: 60000,\n value: '',\n }, () => {\n onHandleResendOTP(phoneNumber, history)\n // onHandleResendOTP().catch(() => {\n // errorMessage('Session has expired, please login again.');\n // setTimeout(() => {\n // clearAllToast();\n // history.push('/');\n // }, 3000);\n // });\n this.resendCodeDuration();\n });\n }\n \n resendCodeDuration = () => {\n interval = setInterval(() => {\n this.setState((state) => ({\n timer: state.timer - 1000,\n }));\n }, 1000);\n }\n \n handleKeyUp = (e) => {\n if (e.key === 'Backspace') {\n this.setState((state) => ({\n value: state.value.slice(0, state.value.length - 1),\n }));\n }\n };\n \n handleChange = ({ target }) => {\n const { history, onHandleOTP } = this.props;\n this.setState(({ value }) => {\n if (value.length >= CODE_LENGTH.length) {\n return null;\n }\n return {\n value: (value + target.value).slice(0, CODE_LENGTH.length),\n }\n }, () => {\n const { value } = this.state;\n if (value.length === CODE_LENGTH.length) {\n onHandleOTP(value, history);\n }\n });\n };\n \n handleFocus = () => {\n this.input.current.focus();\n this.setState({ focused: true });\n };\n \n handleBlur = () => {\n this.setState({\n focused: false,\n });\n };\n\n render() {\n const { intl: { formatMessage }, error } = this.props;\n const {\n timer,\n value, focused,\n } = this.state;\n const values = value.split('');\n return (\n
\n
\n
\n {formatMessage({ id: 'otp.enterOTP' })}\n
\n {' '}\n {/* {phone} */}\n
\n
\n {CODE_LENGTH.map((v, index) => {\n // current index\n const selected = values.length === index;\n const filled = values.length === CODE_LENGTH.length && index === CODE_LENGTH.length - 1;\n return (\n \n {values[index]}\n
\n );\n })}\n \n
\n\n {error && {error}}\n\n
\n

{formatMessage({ id: 'otp.notReceivedOtp' })}

\n {timer === 0 ? (\n {formatMessage({ id: 'otp.resendCode' })}\n ) : (\n {formatMessage({ id: 'otp.requestNewCodeIn' }, { time: moment(timer).zone(-120).format('mm:ss') })}\n )}\n
\n \n \n )\n }\n}\n\nconst mapStateToProps = ({ rootState }) => ({\n phoneNumber: rootState.phoneNumber,\n error: rootState.error,\n token: rootState.token,\n});\n\nconst mapDispatchToProps = ({\n onHandleOTP: storeAction.verifyOtp,\n onHandleResendOTP: storeAction.requestOtp,\n})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(authLayout(injectIntl(Otp)));","export default __webpack_public_path__ + \"static/media/arrow-left.4f57550f.svg\";","import React, { useContext, useState } from \"react\";\nimport { Route, Switch, withRouter } from \"react-router-dom\";\nimport { GlobalContext } from \"shared/context/store\";\nimport { FormattedMessage } from \"react-intl\";\nimport storeAction from \"shared/context/actions\";\nimport {\n Test,\n Login,\n Otp,\n Intro,\n HomePage,\n StylePicker,\n Exclusions,\n Environment,\n Social,\n Governance,\n Score,\n Experience,\n HighRanking,\n Momentum,\n StreamingNews,\n Transition,\n Preferences,\n} from \"pages\";\nimport { PATH } from \"shared/constants/constants\";\nimport utils from \"shared/helpers/utils\";\nimport PrivateRoute from \"./PrivateRoute\";\n\nimport ArrowLeft from \"assets/images/arrow-left.svg\";\nimport newsIcon from \"assets/images/news-icon.svg\";\nimport searchIcon from \"assets/images/search-icon.svg\";\n\ninterface Props {\n history: any;\n}\n\nconst BackImg = () => \"Back\";\n\nconst NewsImg = () => \"news\";\n\nconst SearchImg = () => \"search\";\n\nconst Routes: React.FC = ({ history }) => {\n const { state, dispatch } = useContext(GlobalContext);\n const {\n investmentState: { portfolio },\n } = state;\n\n const [showSearchFilter, setShowSearchFilter] = useState(false);\n const handleSearchFilter = () => {\n setShowSearchFilter(!showSearchFilter);\n };\n\n // console.log('history ', portfolio.name);\n return (\n \n } />\n\n } />\n\n } />\n\n }\n />\n\n (\n }\n onLeftButtonClick={() => {\n history.push(PATH.INTRO);\n }}\n isShowProgress\n navTitle=\"Return, values, impact\"\n progress={10}\n {...props}\n />\n )}\n />\n\n (\n }\n onLeftButtonClick={() => {\n history.goBack();\n }}\n isShowProgress\n navTitle=\"Environmental causes\"\n progress={20}\n {...props}\n />\n )}\n />\n\n (\n }\n onLeftButtonClick={() => {\n history.goBack();\n }}\n isShowProgress\n navTitle=\"Social causes\"\n progress={30}\n {...props}\n />\n )}\n />\n\n (\n }\n onLeftButtonClick={() => {\n history.goBack();\n }}\n isShowProgress\n navTitle=\"Governance causes\"\n progress={40}\n {...props}\n />\n )}\n />\n\n (\n }\n onLeftButtonClick={() => {\n history.goBack();\n }}\n isShowProgress\n navTitle=\"Your investment experience\"\n progress={50}\n {...props}\n />\n )}\n />\n\n (\n }\n onLeftButtonClick={() => {\n history.goBack();\n }}\n isShowProgress\n navTitle=\"Relative or absolute ESG score\"\n progress={60}\n {...props}\n />\n )}\n />\n\n (\n }\n onLeftButtonClick={() => {\n history.goBack();\n }}\n isShowProgress\n navTitle=\"ESG ‘Momentum’\"\n progress={70}\n {...props}\n />\n )}\n />\n\n (\n }\n onLeftButtonClick={() => {\n history.goBack();\n }}\n />\n )}\n />\n\n (\n }\n onLeftButtonClick={() => {\n history.goBack();\n }}\n isShowProgress\n navTitle=\"Negative screening\"\n progress={80}\n {...props}\n />\n )}\n />\n\n (\n }\n onLeftButtonClick={() => {\n // storeAction.onClearSupports()(dispatch);\n history.goBack();\n }}\n isShowProgress\n progress={90}\n {...props}\n />\n )}\n />\n\n (\n }\n onLeftButtonClick={() => {\n history.goBack();\n }}\n isShowProgress\n navTitle=\"ESG preferences\"\n progress={100}\n {...props}\n />\n )}\n />\n\n (\n }\n onLeftButtonClick={() => {\n history.push(PATH.SCORE);\n }}\n navTitle=\"Investment Ideas\"\n {...props}\n // rightButtonValue={}\n // onRightButtonClick={()=>{history.push(PATH.STREAMING_NEWS)}}\n />\n )}\n />\n\n (\n /** streamingNews.title 流媒体新闻 */\n }\n onLeftButtonClick={() => {\n history.goBack();\n }}\n navTitle={}\n {...props}\n rightButtonValue={}\n onRightButtonClick={handleSearchFilter}\n displaySearchFilter={showSearchFilter}\n onCloseSearchFilter={handleSearchFilter}\n />\n )}\n />\n \n );\n};\n\nexport default withRouter(Routes);\n","export default __webpack_public_path__ + \"static/media/news-icon.09b34dd1.svg\";","import React, { memo, useEffect, useRef, useContext } from 'react';\nimport './App.scss';\nimport track from 'react-tracking';\nimport classnames from 'classnames';\nimport { useHistory } from \"react-router-dom\";\nimport { isMobileOnly, isBrowser, deviceType } from 'react-device-detect';\nimport utils from 'shared/helpers/utils';\nimport { idleTimer, clearIdleTimer } from 'shared/helpers/idleTimer';\nimport { STORAGE_KEY, EXPIRATION_TIME } from 'shared/constants/constants';\nimport storeAction from 'shared/context/actions';\nimport { GlobalContext } from 'shared/context/store';\nimport apiService from 'shared/services/apiService';\nimport 'rc-slider/assets/index.css';\n// import ConnectedIntlProvider from './components/utils/ConnectedIntlProvider';\nimport Routes from 'Routes';\nconst appName = process.env.REACT_APP_TRACKING_APP_NAME;\n\nimport { QueryClient, QueryClientProvider } from 'react-query';\n\nconst App: React.FC = (): JSX.Element => {\n const history = useHistory();\n const timer = useRef(null);\n const { state, dispatch } = useContext(GlobalContext);\n \n const classes = classnames({\n 'app': true,\n 'app--desktop': (!isMobileOnly && isBrowser) || (deviceType === 'tablet'),\n 'app--mobileBrowser': isMobileOnly && !utils.isInStandaloneMode(),\n 'app--pwa': isMobileOnly && utils.isInStandaloneMode(),\n });\n\n /**\n * Check app for any event\n * Update timer when there is event\n * then clear data if no event ater 30mins\n * @param timerRef : timer\n */\n const refreshApp = (timerRef) => {\n /** refresh user function */\n const expirationDate = JSON.parse(localStorage.getItem(STORAGE_KEY.EXPIRATION_DATE));\n const rightNow = new Date().getTime();\n const isExpired = expirationDate && (rightNow - expirationDate) >= EXPIRATION_TIME;\n // console.log('is expired ', isExpired, expirationDate, rightNow, timerRef);\n if (isExpired) {\n console.log('SESSION EXPIRED!');\n storeAction.onClearUserInputData()(dispatch);\n localStorage.removeItem(STORAGE_KEY.EXPIRATION_DATE);\n }\n\n // refresh user after 15 mins inactive\n idleTimer(timerRef, '#app', () => {\n /** CLEAR USER INPUT DATA */\n if (localStorage.getItem(STORAGE_KEY.ESG_STATE)) {\n storeAction.onClearUserInputData()(dispatch);\n localStorage.removeItem(STORAGE_KEY.EXPIRATION_DATE);\n }\n }, EXPIRATION_TIME);\n\n }\n\n useEffect(() => {\n refreshApp(timer.current);\n storeAction.fetchMasterData()(dispatch);\n const urlParams = new URLSearchParams(window.location.search);\n const userId = urlParams.get('userId');\n storeAction.updateUserId(userId)(dispatch, state);\n if (userId) {\n const newUrl = new URL(window.location.href);\n newUrl.searchParams.delete('userId');\n window.history.replaceState(null, '', newUrl.href);\n }\n /** on component will unmount, clear the timer */\n return () => {\n clearIdleTimer(timer.current);\n }\n }, []);\n\n /** Create client */\n const queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n },\n },\n });\n\n return (\n \n
\n \n
\n
\n )\n};\n\nconst trackData = apiService.postTrackingData;\nconst TrackedApp = track(\n { app: appName },\n { dispatch: (data) => {\n trackData(data)\n }\n}\n)(App)\n\nexport default memo(TrackedApp);\n","import { STORAGE_KEY } from 'shared/constants/constants';\n\nexport const idleTimer = (t, element, callback, expirationTime) => {\n const App = document.querySelector(element);\n\n t = setTimeout(callback, expirationTime);\n\n const resetTimer = () => {\n clearTimeout(t);\n localStorage.setItem(STORAGE_KEY.EXPIRATION_DATE, new Date().getTime());\n t = setTimeout(callback, expirationTime);\n };\n\n App.onmousemove = resetTimer; // catches mouse movements\n App.onmousedown = resetTimer; // catches mouse movements\n App.onclick = resetTimer; // catches mouse clicks\n App.onscroll = resetTimer; // catches scrolling\n App.onkeypress = resetTimer; // catches keyboard actions\n App.touches = resetTimer; // catches keyboard actions\n};\n\nexport const clearIdleTimer = (t) => {\n clearTimeout(t);\n};\n\nexport function sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://cra.link/PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://cra.link/PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://cra.link/PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { GlobalProvider } from 'shared/context/store';\nimport ConnectedIntlProvider from './components/utils/ConnectedIntlProvider';\nimport './index.scss';\nimport { BrowserRouter as Router } from 'react-router-dom';\nimport { debugContextDevtool } from 'react-context-devtool';\nimport App from './App';\n\nimport * as serviceWorkerRegistration from './serviceWorkerRegistration';\nimport reportWebVitals from './reportWebVitals';\n\nconst container = document.getElementById('root');\n\nReactDOM.render(\n \n \n \n \n \n \n ,\n container\n);\n\nconst devToolOption = ({\n debugReducer: true,\n debugContext: true,\n disable: false,\n disableAutoMode: process.env.NODE_ENV === 'development' ? true : false,\n});\n\n/** Context DevTool */\ndebugContextDevtool(container, devToolOption);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://cra.link/PWA\nserviceWorkerRegistration.unregister();\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}