{"version":3,"sources":["../../../src/Decimal.ts","../../index.ts","../../../src/EthersLiquityConnection.ts","../../../src/_utils.ts","../../../src/constants.ts","../../../../src/hooks/useLiquityStore.ts","../../../src/WebSocketAugmentedProvider.ts","../../../src/WebSocketProvider.ts","../../../src/contracts.ts","../../../src/ReadableEthersLiquity.ts","../../../src/BlockPolledLiquityStore.ts","../../../src/PopulatableEthersLiquity.ts","../../../src/SendableEthersLiquity.ts","../../../../src/components/LiquityStoreProvider.tsx","../../../../src/utils/equals.ts","../../../src/BatchedProvider.ts","../../../src/Cache.ts","../../../src/StabilityDeposit.ts","../../../src/LQTYStake.ts","../../../src/Fees.ts","../../../src/TransactableLiquity.ts","../../../src/SendableLiquity.ts","../../../src/LiquityStore.ts","../../../src/_CachedReadableLiquity.ts","../../../src/FTXStake.ts","../../../src/_Multicall.ts","../../../src/ObservableEthersLiquity.ts","../../../src/parseLogs.ts","../../../src/EthersLiquity.ts","../../../../src/hooks/useLiquityReducer.ts","../../../../src/hooks/useLiquitySelector.ts","img/emailsent.png","helpers/actionType.js","helpers/logger.js","helpers/formatter.js","helpers/utils.js","services/fetchService.js","helpers/domutils.js","helpers/config.js","helpers/asyncStorage.js","services/authService.js","services/webAPIBase.js","redux/Notification.js","redux/Persist.js","redux/Auth.js","services/systemService.js","services/profileService.js","config/index.ts","hooks/LiquityContext.tsx","connectors/networkConnector.ts","connectors/injectedConnector.ts","hooks/useAuthorizedConnection.ts","components/Icon.tsx","components/Dialog.tsx","components/RetryDialog.tsx","components/WaitingDialog.tsx","components/ConnectionConfirmationDialog.tsx","components/MetaMaskIcon.tsx","components/Modal.tsx","components/WalletConnector.tsx","components/Transaction.tsx","theme.ts","testUtils/DisposableWalletProvider.ts","utils/shortenAddress.ts","components/UserAccount.tsx","components/InfoIcon.tsx","redux/Global.js","pages/Login/Login.js","components/Cache/context/CacheViewContext.tsx","components/Redemption/RedemptionManager.tsx","components/Cache/context/CacheViewProvider.tsx","components/Stability/context/StabilityViewContext.tsx","components/Stability/context/StabilityViewProvider.tsx","components/Cache/validation/validateCacheChange.tsx","services/Eth2WalletService.js","redux/_ScreenButtonDef.js","redux/_ScreenReducer.js","redux/Eth2Wallet.js","services/EthTxHistoryService.js","redux/EthTxHistory.js","components/custom/ModalDialog.js","components/custom/Paging.js","components/custom/Panel.js","pages/Dashboard.js","img/personImg.png","img/businessImg.png","pages/StakeOption.js","services/StakePaymentService.js","pages/StakeETH.js","helpers/navigation.js","redux/_Rintagi.js","components/custom/Screen.js","components/custom/DropdownField.js","services/KycPersonService.js","redux/KycPerson.js","services/KycCorporateService.js","redux/KycCorporate.js","services/SupportRequestService.js","redux/SupportRequest.js","components/custom/AutoCompleteField.js","pages/CustomerSupport.js","pages/WithdrawETH.js","pages/ManageValidator.js","services/paymentService.js","redux/StakePayment.js","pages/StripeCheckout.js","services/StakeStmtService.js","pages/Payment.js","services/StakeAcctBalanceService.js","services/StakeWalletAddressService.js","redux/StakeWalletAddress.js","services/StakeUserInfoService.js","redux/StakeUserInfo.js","pages/AccountStatus.js","pages/PaymentConfirm.js","redux/RewardStmt.js","pages/RewardStatements.js","redux/StakeStmt.js","pages/AccountStatements.js","pages/RewardStatementDetail.js","pages/WithdrawConfirm.js","pages/Pricing.js","img/ethereum.png","img/fintrux.png","pages/StmtDownloadConfirm.js","redux/SideBar.js","pages/Layout/topbar/TopbarSidebarButton.js","pages/Layout/topbar/TopbarProfile.js","pages/Layout/topbar/Topbar.js","pages/Layout/sidebar/SidebarLink.js","components/UseLiquity.js","pages/Layout/sidebar/SidebarCategory.js","pages/Layout/sidebar/SidebarContent.js","pages/Layout/sidebar/Sidebar.js","pages/Layout/index.js","app/MainWrapper.js","components/custom/Recaptcha.js","pages/Login/ForgotPassword.js","pages/Error/Error.js","services/signUpService.js","redux/SignUp.js","pages/Registration/SignUp.js","pages/Registration/EmailSent.js","pages/Registration/SignUpRestriction.js","pages/Registration/index.js","img/welcomeImg.png","pages/Onboarding/Welcome.js","pages/Onboarding/UserOption.js","img/personalGoal.png","pages/Onboarding/GetStartedSteps.js","components/custom/DatePicker.js","components/custom/Hint.js","components/custom/PhoneField.js","pages/Onboarding/PersonalDetail.js","pages/Onboarding/CorporateDetail.js","pages/Onboarding/BusinessRequest.js","components/custom/FileInput.js","pages/Onboarding/SupportingDoc.js","pages/Onboarding/Disclosures.js","components/custom/Camera.js","pages/Onboarding/Liveness.js","services/cynopsisService.js","img/kycStatus.png","img/kycIssue.png","pages/Onboarding/KycStatus.js","pages/Onboarding/index.js","components/custom/NaviBar.js","components/custom/ProgressBar.js","components/Alert.js","pages/Account/NewPassword.js","pages/Account/index.js","pages/CustomRoute.js","app/route.js","components/custom/Notification.js","app/Router.js","app/ScrollToTop.js","redux/Custom.js","redux/index.js","app/store.js","app/App.js","index.js"],"names":["__exportStar","exports","WebSocketProvider","AsyncActionType","prefix","actionType","prefixedActionType","this","ActionType","Prefix","PrefixedActionType","STARTED","SUCCEEDED","FAILED","ENDED","CACHED","reducers","async","combined","getAsyncTypes","loglevel","currentLanguage","navigator","languages","length","language","browserLanguage","cultureId","switchLanguage","lang","CultureId","moment","locale","getUrlBeforeRouter","routerStart","window","location","href","search","slice","_getQueryString","name","url","replace","results","RegExp","exec","decodeURIComponent","getQueryString","URLSearchParams","get","e","toCapital","value","uppercase","toUpperCase","toLowerCase","firstLtr","i","test","charAt","substr","formatBytes","bytes","decimals","k","dm","sizes","Math","floor","log","parseFloat","pow","toFixed","formatContent","format","match","objectListToDict","objectList","keyColumnName","fn","reduce","r","v","a","mergeArray","l1","l2","keyFn","o","map","label","filter","getNaviPath","naviBar","type","fallbackPath","path","getAddMstPath","getEditMstPath","mstId","getEditDtlPath","dtlId","isEmailFormat","isEmptyId","val","trim","isEmpty","isEmptyArray","Array","isArray","isEmptyObject","constructor","Object","keys","delay","valOrFnOrPromise","t","_this","Promise","resolve","reject","f","isPromise","then","bind","catch","result","undefined","setTimeout","isNaN","debounce","func","debObj","immediate","context","args","arguments","later","timeout","apply","callNow","clearTimeout","waitTime","removeDocList","list","docIdList","removedList","JSON","parse","x","DocId","reviseDocList","newFile","lookupByName","fileName","lookupByDocId","debug","reviseMultiDocFileObjectFromServer","d","mimeType","MimeType","base64","DocImage","makeMultiDocFileObjectFromServer","MstKeyName","DocName","MasterId","InputOn","DocSize","InputBy","LoginName","makeBlob","fileObjWithBase64","data","byteCharacters","atob","byteNumbers","charCodeAt","byteArray","Uint8Array","blob","Blob","fetchService","fetchAPIResult","tryParseJSON","getAPIResult","content","err","promiseWithTimeout","somePromise","timeoutInMS","timer","wait","localTimeout","race","options","headers","requestOptions","access_token","getAccessToken","renewAccessToken","tokenRenewed","SystemId","CompanyId","ProjectId","scope","fetchPromise","token","method","mode","fetch","response","text","bodyText","parsedRet","ok","status","errMsg","errType","console","statusCode","statusText","newToken","error","renewTokenError","message","errSubType","sjcl","require","_pbkdf2","base64Encode","s","btoa","base64Decode","sha256","hash","pbkdf2","password","salt","round","keyLength","hashType","derivedKey","wordToByteArray","word","ba","push","scrambleString","h","buffer","binary","len","byteLength","String","fromCharCode","arrayBufferToBase64","wordArray","hasOwnProperty","sigBytes","words","min","concat","wordArrayToByteArray","uuid","v1uuid","parsedUrl","parser","document","createElement","toString","host","protocol","newProtocolAndHost","currentFolder","pathname","properties","n","setCookie","days","expires","date","Date","setTime","getTime","toUTCString","cookie","getCookie","nameEQ","ca","split","c","substring","indexOf","eraseCookie","getReactContainerInfo","documentObject","reactInfo","body","childNodes","tagName","mySource","src","myJS","myJSHostingRoot","Fingerprint2","myMachine","getRintagiConfig","Rintagi","rintagi","pathName","origin","reactBase","appRelBase","proxied","appBase","b","regex","m","proxyBase","apiBasename","appDomainUrl","appNS","port","localDev","myUrl","myDocumentUrl","myAppSigKey","localStorage","v4uuid","setupRuntime","AsyncStorage","session","isSession","storage","sessionStorage","setItem","getItem","removeItem","clear","LocalStorage","SessionStorage","currentAccessScope","authService","login","username","nonce","code_challenge_method","code_challenge","client_id","challenge_answered","flush_local","baseUrl","stringify","usrName","apiResult","accessCode","accessToken","refresh_token","rememberUserHandle","eraseUserHandle","getToken","serverChallenge","challengeCount","challengeResult","logout","getAccessControlInfo","isAuthenticated","getUsr","getMenu","getReactQuickMenu","getSystems","getServerIdentity","getRefreshToken","setAccessScope","accessScope","getAccessScope","resetPwdEmail","resetPassword","emailAddress","nounce","ticketLeft","ticketRight","getWebAuthnAssertionRequest","getWebAuthnRegistrationRequest","webauthnAssertion","webauthnRegistration","getWeb3SigningRequest","web3Assertion","web3Registration","refreshConfig","runtimeConfig","getMyMachine","components","sort","update","finalize","debugAlert","alert","getSystemId","systemId","makeNameFromNS","userIdentity","handle","getUserHandle","current_handle","ret","getTokenName","userHandle","getLoginFromCookie","user_handle","tokenName","refreshToken","tokenInCookie","storeAccessToken","resources","expires_in","isLogout","tokenString","storeRefreshToken","eraseRefreshToken","tokenRefreshPromise","code","code_verifier","redirect_url","client_secret","grant_type","re_auth","requestPromise","token_type","finally","keepToken","currentSessionOnly","errorMsg","supportingData","reCaptchaRequest","refCode","ignoreCache","hostingDomainUrl","loginName","requestJSON","resultJSON","fetchData","validationErrors","SUCCESS","ERROR","CLEAR_ERROR","dispatchWithNotification","dispatch","action","payload","endsWith","showNotification","msgType","dtl","clearNotification","RememberCurrentAsync","key","item","acrossSession","GetCurrentAsync","SCREEN_PREFIX","LOGIN","LOGOUT","GET_TOKEN","GET_USER","GET_MENU","GET_SYSTEMLIST","GET_SERVERIDENTITY","UPD_PROFILE","CHANGE_PASSWORD","RESET_PASSWORD_EMAIL","SWITCH_CURRENT","initState","user","desktopView","menu","system","serverInfo","Label","Login","Logout","UserName","Password","UserNameEmpty","PasswordEmpty","LoginScreenTitle","LoginScreenDesc","Profile","ProfileSubtitle","NewPassword","NewPasswordSubtitle","NewLoginName","NewUserName","NewUserEmail","NewuserPassword","ConfirmPwd","UpdProfileBtn","pdPwdBtn","NewUsrPasswordEmpty","ConfirmPwdEmpty","PwdHlpMsgLabel","ApplySettingsBtn","Settings","SettingsSubtitle","CompanyList","ProjectList","SystemsList","TimeZoneList","ResetLoginName","ResetUsrEmail","ResetPwdBtn","Or","ResetPwdTitle","ResetPwdSubtitle","Information","UnSavedPage","Language","handleLoginResult","challenge","switchToSavedCulture","langCode","mappedCulture","CultureTypeId","CultureTypeName","getState","webApi","getCurrentUser","auth","changePassword","values","j","p","newPwd","confirmPwd","NewUsrPassword","profileService","newUsrPassword","requestResetPwdEmail","email","defaultConfig","frontendTag","AddressZero","storeRefreshInterval","hasKey","parseConfig","json","config","isAddress","getAddress","infuraApiKey","testnetOnly","devWS","devRPC","chainId","account","customUrlBase","custUrlBase","network","rpcUrl","wsUrl","configPromise","fetchConfig","Error","getConfig","LiquityContext","createContext","supportedNetworks","LiquityProvider","children","loader","unsupportedNetworkFallback","unsupportedMainnetFallback","useWeb3React","provider","library","useState","setConfig","useDispatch","connection","useMemo","_connectByChainId","getSigner","userAddress","useStore","useEffect","getCurrentChainId","isBatchedProvider","doc","apiChainId","setCurretChainId","isWebSocketAugmentedProvider","getNetwork","includes","openWebSocket","wsParams","_isDev","hostname","closeWebSocket","liquity","EthersLiquity","_from","store","logging","Provider","useLiquity","liquityContext","useContext","RequestError","MiniRpcProvider","isMetaMask","sendAsync","request","callback","params","jsonrpc","id","Response","parsed","URL","NetworkConnector","urls","defaultChainId","invariant","supportedChainIds","Number","providers","currentChainId","accumulator","emitUpdate","AbstractConnector","injectedConnector","InjectedConnector","networkConnector","getNetworkConnector","useAuthorizedConnection","force","activate","active","deactivate","connector","tried","setTried","_active","isAuthorized","getProvider","tryToActivateIfAuthorized","add","faCircleNotch","faCheck","faCheckCircle","faExclamationTriangle","faInfoCircle","faTimes","faTrash","faChartLine","faRedo","faHistory","faChevronLeft","faChevronRight","faClipboard","faClipboardCheck","faUserCircle","faWallet","faExternalLinkAlt","faCog","faPlug","faExclamationCircle","faAngleUp","faAngleDoubleUp","faAngleDown","faAngleDoubleDown","faPen","faHandPaper","faHeartbeat","faBars","faQuestionCircle","getIcon","Icon","style","rest","icon","iconFromIntent","intent","color","aria-label","Dialog","title","cancelLabel","onCancel","sx","borderRadius","height","bg","justifyContent","alignItems","borderBottom","borderColor","pb","as","textAlign","fontSize","px","variant","onClick","size","RetryDialog","retryLabel","onRetry","borderTop","flexDirection","mr","mb","width","WaitingDialog","waitReason","ConnectionConfirmationDialog","fontWeight","MetaMaskIcon","viewBox","fill","xmlns","y","Modal","connectionReducer","state","warn","history","WalletConnector","triedAuthorizedConnection","useReducer","connectionState","ethereum","detectMetaMask","connectLater","Card","CardBody","className","ml","lineHeight","target","circularProgressbarStyle","strokeLinecap","pathColor","trailColor","slowProgress","strokeWidth","styles","buildStyles","pathTransitionDuration","fastProgress","TransactionContext","React","TransactionProvider","transactionState","useTransactionState","useMyTransactionState","myId","useTransactionFunction","send","estimateGas","setTransactionState","useCallback","populatedTx","rawPopulatedTransaction","gasLimit","tx","tryToGetRevertReason","call","blockNumber","hexDataLength","hexDataSlice","defaultAbiCoder","decode","Donut","memo","CircularProgressbarWithChildren","TransactionProgressDonut","setValue","maxValue","spin","TransactionMonitor","cancelled","finished","txHash","rawSentTransaction","waitForConfirmation","refresh","waitForReceipt","receipt","confirmations","rawReceipt","reason","EthersTransactionCancelledError","pl","position","bottom","overflow","zIndex","baseColors","colors","primary","secondary","accent","success","warning","danger","dangerHover","info","invalid","background","muted","buttonBase","display","cursor","button","py","border","opacity","buttonOutline","hoverColor","iconButton","padding","cardHeadingFontSize","cardGapX","cardGapY","card","mt","boxShadow","infoCard","h2","formBase","flexShrink","formCell","modalOverlay","left","top","headerGradient","theme","breakpoints","space","fonts","join","heading","monospace","fontSizes","fontWeights","light","medium","bold","lineHeights","borders","shadows","address","fontFamily","buttons","outline","cancel","dangerIcon","titleIcon","cards","pr","infoPopup","right","overflowY","tooltip","forms","unit","input","flex","editor","layout","header","footer","minHeight","main","maxWidth","mx","columns","flexWrap","justifyItems","actions","disabledOverlay","modal","infoOverlay","infoMessage","minWidth","sidenav","badge","backgroundColor","root","textDecoration","links","nav","textTransform","letterSpacing","DisposableWalletProvider","funderPrivateKey","ethAmount","wallet","funderWallet","haveFunded","Wallet","createRandom","Decimal","from","find","to","hex","gas","hexlify","fund","all","findWallet","signTransaction","assign","shortenAddress","select","accountBalance","ftxBalance","UserAccount","useLiquitySelector","showAccount","ftxAddress","addresses","fethToken","paydToken","ftxToken","currency","balance","clipboard","writeText","prettify","InfoIcon","placement","interactive","SET_PAGE_TITLE","SHOW_SPINNER","SWITCH_ROLE","SET_SAVE_AND_EXIT","TOPBAR_LEFT","TOPBAR_CENTER","TOPBAR_RIGHT","SHOW_SKELETON","HIDE_SIDEBAR","SET_MENU","HIDE_TOPBAR","roles","role","landingPage","spinnerCount","registerTopbarLeft","saveFn","visibility","logo","setTitle","setSpinner","showSpinner","source","props","submitting","userId","UsrId","showBox","TextChange","ValidatePage","handleSubmit","setSubmitting","setErrors","setState","submittedOn","now","prevProps","prevStats","loading","setFieldValue","setFieldTouched","evt","errors","Col","md","alt","initialValues","validate","onSubmit","render","touched","isSubmitting","onChange","Button","disabled","Component","withRouter","connect","global","bindActionCreators","CacheViewContext","Percent","MINIMUM_COLLATERAL_RATIO","transitions","NONE","OPEN_CACHE_PRESSED","CACHE_OPENED","LIQUIDATED","CACHE_SURPLUS_COLLATERAL_CLAIMED","REDEEMED","OPENING","CANCEL_ADJUST_CACHE_PRESSED","ADJUSTING","CACHE_ADJUSTED","CACHE_CLOSED","CACHE_LIQUIDATED","CACHE_REDEEMED","CLOSING","ACTIVE","ADJUST_CACHE_PRESSED","CLOSE_CACHE_PRESSED","cacheStatusEvents","open","closedByOwner","closedByLiquidation","closedByRedemption","cache","CacheViewProvider","cacheStatus","getInitialView","view","setView","viewRef","useRef","dispatchEvent","event","nextView","transition","current","StabilityViewContext","DEPOSIT_PRESSED","DEPOSITING","CANCEL_PRESSED","DEPOSIT_CONFIRMED","REWARDS_CLAIMED","ADJUST_DEPOSIT_PRESSED","DEPOSIT_EMPTIED","stabilityDeposit","StabilityViewProvider","selectForCacheChangeValidation","CRITICAL_COLLATERAL_RATIO","price","total","paydBalance","numberOfCaches","activeScope","GetAuthCol","GetAuthRow","GetScreenLabel","GetLabels","labelCat","GetSystemLabels","GetScreenButtonHlp","GetScreenHlp","GetScreenCriteria","GetNewMst","GetNewDtl","GetScreenFilter","GetSearchList","searchStr","topN","filterId","desiredScreenCriteria","GetEth2Wallet5List","GetEth2Wallet5ById","keyId","CurrentScreenCriteria","GetMstById","GetEth2Wallet5DtlById","GetDtlById","LoadInitPage","reqJson","SaveData","mst","DelMst","SetScreenCriteria","criteriaValues","GetRefColumnContent","refKeyId","isMaster","refScreenColumnName","GetColumnContent","columnName","screenColumnName","GetEmbeddedDoc","SaveEmbeddedImage","docJson","SaveEmbeddedDoc","GetDocZipDownload","GetScreenCriEth1WithdrawalAddr10List","query","filterBy","screenCriId","GetNetworkId6List","GetUsrId6List","GetValidatorStatusCd5List","SyncValidators","walletAddress","multiDepositAddress","WithdrawValidators","numberOfValidators","WithdrawValidator","pubkey","DisplayMnemonic","_ScreenButtonDef","MstList","MoreButton","iconClassName","buttonType","visible","order","expose","DropdownMenuButtons","NewButton","ExpTxtButton","CopyButton","DeleteButton","DrillDownButton","RowButtons","exposedClassName","InsRowButton","labelLong","EditHdrButton","BottomButtons","Mst","SaveCloseButton","PrintButton","SaveButton","DtlList","CopyRowButton","DelRowButton","EditRowButton","Dtl","NewSaveDtlButton","initialRintagiScreenReduxState","AuthRow","AuthCol","ColumnLabel","SearchListTitle","SearchListSubtitle","SearchListNaviBar","MstTitle","MstSubtitle","MstNaviBar","MstFound","DtlListTitle","DtlListSubtitle","DtlListFilterLabel","DltListFilteredCountLabel","DtlListNaviBar","DtlTitle","DtlSubtitle","DtlNaviBar","ViewMoreButton","HelpButton","SearchPlaceholder","QuickFilterLabel","NoResultsLabel","NoDtlMessage","AddDtlMessage","NoMstMessage","AddMstMessage","NewMstLabel","CancelFileButton","DeleteFileButton","FileLabel","Buttons","ButtonDef","MaxImageSize","Width","Height","SearchList","NewMst","EditDtl","NewDtl","ddl","ScreenFilter","ScreenCriteria","SearchStr","TopN","MatchCount","Increment","FilterId","ShowFilter","DtlFilter","FilterColumnDdl","FilteredColumn","FilteredValue","PageSize","SortColumn","SortOrder","Limit","page_loading","searchlist_loading","saving","initialized","searchListVersion","mstVersion","dtlListVersion","dtlVersion","ReviseButton","buttonDef","ButtonTypeName","ButtonVisible","RowVisible","ButtonName","ButtonLongNm","tid","ButtonTypeId","TopVisible","BotVisible","MakeAutocompleteSearchValue","ReviseScreenButtons","ScreenButtons","revisedLabels","_a","RefreshMst","ReviseSearchListSelection","masterKeyColumnName","isSelected","SelectedKeyId","RintagiScreenRedux","TypeError","actionTypeName","copy","dtlList","GetMstKeyColumnName","GetDtlKeyColumnName","show","authCol","columnLabel","actionTypeString","access_denied","ScreenHlp","ScreenButtonHlp","ScreenCriDdl","SystemLabel","ScreenDdl","ColName","ColumnHeader","MasterTable","ColVisible","DisplayName","ScopeKey","Total","mstKeyColumnName","ExpandMst","GetDefaultDtl","ExpandDtl","ColumnName","forDtl","backfill","forMst","reduxColumnName","docList","page_saving","keepDtl","deferredRelease","ReviseScreenCri","searchList","apiService","LOAD_PAGE","GetActionType","isInitialized","scopeKey","screenName","GetScreenName","ResolveDdlPromise","promises","GetScreenDdlApiPromise","GetCriDdlApiPromise","SystemLabels","Labels","Rest","LabelText","webServiceName","persistMstName","GetPersistMstName","mstKeyColumeName","GetWebService","currentRedux","reloadMst","reloadMstList","reloadDtl","specificMstId","rememberedMst","rememberedMstId","skipMetaData","SkipMetaData","skipSupportingData","SkipSupportingData","currentKeyId","MstId","FirstOrDefault","LoadSearchList","LoadPageStaticData","GET_SEARCH_LIST","loadPageOptions","SkipOnDemandData","ReAuth","ScreenCriDdlDef","payloadDdlName","ColumnDef","TableId","Ddl","searchListApiName","GetApiName","refreshCri","currKeyId","matchCount","_currKeyId","refreshedMstId","LoadMst","getMstApiName","GET_MST","GET_DTL_LIST","EDIT_DTL","persistDtlName","GetPersistDtlName","getDtlListApiName","rememberedDtl","GetDefaultMst","newMst","newDtl","currMst","currentDtlList","revisedMst","Src","BackFillMstAsyncColumns","SelectDtl","BackFillDtlAsyncColumns","isAccessDenied","useCopy","GetDtl","reslove","idx","dtlKeyColumnName","altKeyId","SELECT_MST","currentList","currentMstId","TmpKeyId","mstList","currentState","persist","SAVE_MST","currentCriteria","_mst","_dtl","DEL_MST","LoadPage","criteria","SAVE_CRI","Cri","LastCriteria","isDdlType","columnsToCheck","noFilter","searchRegEx","ScreenDdlDef","actionReducers","ActionApiNameMapper","screenDdlCount","screenDdl","screenCriDdl","columeName","apiServiceName","isAutoComplete","forEach","SearchActions","filterByColumnName","filterByMaster","ScreenOnDemandDef","isFileObject","refColumnName","refColumns","skipDocList","SkipDocList","screenCriteria","ddlColumnDef","filterByVal","filterOn","searchApi","SucceededActionType","FailedActionType","startsWith","keyLookup","trace","AutoCompleteSearch","columnDef","tableColumnName","refMstKeyId","refDtlKeyId","refObjs","dependents","dependent","resultDocList","docId","file","keyName","labelName","obj","ScreenFilterId","FilterName","defaultReducer","GetReducerActionTypePrefix","ADD_MST","ADD_DTL","DEL_DTL","DEL_ALLDTL","SAVE_DTL","VIEW_MORE_DTL","CHANGE_MSTLIST_FILTER_VISIBILITY","CHANGE_DTLLIST_FILTER_VISIBILITY","CHANGE_DTLLIST_FILTER","bindActionReducer","LoadPageReducer","SaveCriReducer","GetSearchListReducer","GetMstReducer","SelectMstReducer","GetDtlListReducer","SaveMstReducer","EditDtlReducer","ViewMoreDetailReducer","ToggleMstListFilterReducer","ToggleDtlListFilterReducer","ChangeDtlListFilterReducer","GetDdlReducer","GetColumnOnDemandReducer","GetDocumentListReducer","ScreenDocumentDef","GetDocumentContentReducer","AddDocumentContentReducer","DelDocumentContentReducer","GetInitState","reducerPrefix","reduxActionHandler","GetActionHandler","handler","allowTmpDtl","isCheckBox","MakeSearchAction","MakeGetColumnOnDemandAction","MakeGetRefColumnOnDemandAction","MakePullUpOnDemandAction","MakeGetDocumentListAction","OnDemandActions","MakeGetDocumentContentAction","MakeAddDocumentContentAction","MakeDelDocumentContentAction","ScreenDdlSelectors","MakeDdlSelectors","ScreenCriDdlSelectors","MakeCriDdlSelectors","MakeActionReducers","isUnderlining","Eth2WalletService","Eth2ValidatorId5","Idx5","DeactivateBtn","ValidatorStatusCd5","Balance5","ValidatorJson5","CreatedOnUtc5","StatusTimeStampUtc5","DepositJson5","JsonFileName5","PubKey5","Remark5","RemoveValidatorBtn","ValidatorIndex5","ActivationEpoch5","ActivationUtc5","ExitEpoch5","ExitUtc5","Eth2WalletId6","labelL","labelR","detailR","detail","GetEthTxHistory13List","GetEthTxHistory13ById","GetEthTxHistory13DtlById","GetTxStatusCd22List","GetRewards","EthTxHistoryService","TxHistoryId22","Eth2ValidatorId22","StakeAmt22","WithdrawAmt22","StakeRewardAmt22","MiningRewardAmt22","MEVRewardAmt22","TimeStamp22","BlockNbr22","EpochNbr22","SlotNbr22","TxHash22","TxStatusCd22","ModalDialog","backdrop","end","continue","isOpen","ModalOpen","toggle","colored","component","ButtonToolbar","hidden","hideCancelBtn","Paging","pager","initialPage","pageSize","setPage","getPager","items","prevState","page","sourceChanged","totalPages","filteredItem","startIndex","endIndex","onChangePage","totalItems","currentPage","startPage","endPage","ceil","pages","range","Pagination","PaginationItem","PaginationLink","index","AlertComponent","lg","xl","sm","xs","divider","subhead","before","panelClass","collapse","setRefresh","Badge","Collapse","defaultProps","selector","fees","validationContext","previousCache","ethPrice","rewardEthAmt","populate","multipleDeposit","reduxRefreshed","rewards","cacheOpened","ethStakingAmt","ethStakingAmtError","ethMinStakingAmt","errorFlag","txListPageOfItems","ValidatorPageOfItems","ModalColor","ModalTitle","ModalHeader","ModalMsg","ModalSuccess","myState","setMyState","didMount","setDidMount","emptyValidatorList","latestValidatorList","setLatestValidatorList","setFilteredValidatorList","InitPageNumber","setInitPageNumber","txHistoryLoading","setTxHistoryLoading","eth2WalletLoading","setEth2WalletLoading","loadedTime","useSelector","reduxState","Eth2Wallet","EthTxHistory","_state","newState","stakeETH","withdrawETH","pageOfItems","onValidatorChangePage","preventDefault","exportToSpreadsheet","wsData","txList","Status","TxStatusCd22Text","Transaction","getTransaction","timestamp","Amount","getAmount","FullAmount","getFullAmount","Currency","Explorer","Eth2ValidatorId22Text","getTxOrVLink","XLSX","ws","utils","aoa_to_sheet","z","font","alignment","horizontal","row","dateCellAddress","encode_cell","cellAddress","fullAmountCellAddress","wb","book_new","book_append_sheet","currentDate","year","getFullYear","month","getMonth","padStart","day","getDate","getCurrentDateString","writeFile","useLayoutEffect","EthTxHistoryReduxObj","Eth1WithdrawalAddr10","DtlBlob","MstBlob","Eth2WalletReduxObj","latestDtl","ValidatorStatusCd5Text","toDateString","toLocaleString","toDecimalStr","fromBigNumberString","getRewards","toFullDecimalStr","getFullRewards","getChainPrefix","getSection","toDurationStr","abs","valueOf","hours","toEstimateStr","currDtlList","displayStatus","visibleValidatorFilter","stakedStatus","totalStaked","loadingData","activeTab","setActiveTab","tab","Panel","tabs","NavItem","NavLink","classnames","TabContent","TabPane","tabId","Table","responsive","Daily_TotalRewardPct","Daily_TotalRewardAmt","Daily_StakeRewardPct","Daily_StakeRewardAmt","Daily_MEVRewardPct","Daily_MEVRewardAmt","Daily_MiningRewardPct","Daily_MiningRewardAmt","Weekly_TotalRewardPct","Weekly_TotalRewardAmt","Weekly_StakeRewardPct","Weekly_StakeRewardAmt","Weekly_MEVRewardPct","Weekly_MEVRewardAmt","Weekly_MiningRewardPct","Weekly_MiningRewardAmt","Monthly_TotalRewardPct","Monthly_TotalRewardAmt","Monthly_StakeRewardPct","Monthly_StakeRewardAmt","Monthly_MEVRewardPct","Monthly_MEVRewardAmt","Monthly_MiningRewardPct","Monthly_MiningRewardAmt","TotalRewardPctAnnualized","TotalRewardPct","TotalRewardAmt","StakeRewardPctAnnualized","StakeRewardPct","StakeRewardAmt","MEVRewardPctAnnualized","MEVRewardPct","MEVRewardAmt","MiningRewardPctAnnualized","MiningRewardPct","MiningRewardAmt","parseInt","StakeOption","onIndividualChecked","individualChecked","businessChecked","onBusinessChecked","Continue","personImg","class","checked","businessImg","GetStakePayment3List","GetStakePayment3ById","GetStakePayment3DtlById","GetPmtTypeCd4List","GetUsrId4List","GetStakeWalletAddrId4List","GetFtxPayment","ftxTokenAddress","fintruxWallet","ftxAmt","creditAmt","GetEthPayment","ethAmt","GetRates","paydInRewardsPool","ftxStake","ftxAllowance","TRANSACTION_ID","walletEthAmount","walletFtxAmount","liquitySend","multipleDepositAddress","transactions","ethWithdrawSelection","validatorStakingvalue","ethStakingvalue","ethStakingInTransit","ethStakingError","confirmWithdrawalAddr","withdrawalAddr","confirmStake","myStateRef","spinnerStatus","setSpinnerStatus","isTransactionPending","deposit_json","pubkeys","withdrawal_credentials","signatures","deposit_data_roots","fork_version","depositMultipleValidators","depositTransaction","_lastSync","setLastSync","ReviewTransaction","confirm","messageCnt","ZERO","ModalCancel","OnModalReturn","YesNo","dangerouslySetInnerHTML","__html","handleValidatorChange","ethStakingErrorMsg","lt","handleConfirmWithdrawalAddrChange","handleWithdrawalAddrChange","Back","BackToPrev","eth2WalletId","NetworkId6","SavePage","Eth1WithdrawalAddr6","StartIdx6","ValidatorCnt6","Remark6","Unlocked6","CreateValidator","getRate","usdRate","USD","smartContractLink","placeholder","onKeyDown","onWheel","blur","handleStakingChange","lte","validatorCnt","unusedValidators","Map","newValidators","depositFiles","signature","deposit_data_root","txReceipt","transactionHash","submitDepositTransaction","blocker","registerBlocker","blockFn","unregisterBlocker","splice","BUNDLE_CHECK_RESULT","bundleStatus","currentJSBundleName","cachedJSBundleName","latestJSBundleName","lastCheckedBundleName","lastBundleCheckOn","latestBundleLastModified","latestBundleETag","refreshing","isEmptyFileList","fileList","isEmptyFileObject","RintagiScreen","SelectDtlListRow","dtlKeyColumeName","hasNoActionButtons","hasRowButton","hasDropdownMenuButton","auxSystemLabels","GetReduxState","selectDtlFn","hasChangedContent","UnsavedPageTitle","UnsavedPageMsg","AutocompleteChange","forName","FieldInFocus","TextChangeEX","formikBag","FormikBag","currentTarget","getAttribute","fieldname","fieldpath","FileUploadChangeEX","listidx","revisedList","lastModified","SubmitForm","formGroup","IsFormSubmit","FormGroup","FormAction","GrabFormikBag","Formik","getFormikBag","NotifyPostValidation","FormikPostValidate","ReceiveFormikRef","formik","IsEmptyFieldValue","IsNotEmptyFieldValue","IsEmptyFileList","BindDateField","keyfieldname","valuefieldname","selectedObject","BindDropDownField","choices","BindAutocompleteField","BindRadioField","choice","BindCheckBoxField","BindCheckListField","selected","selectedList","BindMultiDocFileObject","serverList","lookup","BindFileObject","BindReferenceField","ScreenButtonAction","InsRow","AddNewDtl","Clear","AddNewMst","Delete","EditHdr","EditRow","DrillDown","DelRow","DelDtl","Copy","CopyHdr","CopyRow","Save","SaveMst","SaveDtl","New","NewSave","NewSaveMst","NewSaveDtl","SaveClose","SaveCloseMst","SaveCloseDtl","ExpTxt","ExpMstTxt","Print","MstFilter","ToggleMstListFilterVisibility","checkBundleUpdate","bundleCheck","bundle","latestJS","latestMe","noAutoRefresh","swUnRegister","reload","readonly","ColReadOnly","authRow","canAdd","AllowAdd","ViewOnly","canUpd","AllowUpd","canDel","AllowDel","isMobile","searchFocus","cri","searchMstFn","controlName","isDirty","useMobileView","hasBottomButton","selectMstFn","SelectMst","resetForm","setValues","ChangeDtlListFilter","FilterBy","querySelector","_d","_date","localSortableDateString","getTimezoneOffset","toISOString","date8601","check","formikCurValues","setSelectionRange","deb","ts","filename","validators","deferValidation","isDeferredValidation","validator","allowEmpty","max","lowerBound","upperBound","validRange","defaultIfNaN","isValidRange","relative","fullUrl","sameWindow","translatedPath","TranslateHyperLink","myBaseUrl","newUrl","base64string","siteTitle","ScreenTitle","SystemName","titleSet","AddMst","AddDtl","changeMstListFilterVisibility","requireConfirm","okFn","cancelFn","WarningTitle","dirty","confirmUnload","updateChangedState","SetCurrentRecordState","targetMstId","targetDtlId","redirectTo","screenType","prevReactState","dropdownMenuButtons","rowButtons","GetRowAction","bottomButtons","GetBottomAction","dropdownMenuButtonList","rowMenuButtonList","bottomButtonList","DropdownField","handleChange","field","GetKycPerson2List","GetKycPerson2ById","GetKycPerson2DtlById","GetDoc","GetGenderCd15List","GetNationalityId15List","GetCountryOfResId15List","GetTitle15List","GetCountryOfBirthId15List","GetIndustryId15List","GetOccupationId15List","GetSourceOfFundsId15List","GetSourceOfWealthId15List","GetPurposeId15List","GetIdTypeId15List","GetIdIssueCountryId15List","GetPep15List","SaveKycPersonDoc15","overwrite","DelKycPersonDoc15","GetKycPersonDoc15List","GetInternalStatus15List","GetKycStatusId15List","GetKycRiskRatingId15List","GetInputBy15List","GetModifiedBy15List","GetInputFor15List","sendNotEnoughLiquidityEmail","sendBusinessAccountRequestEmail","KycPersonService","KycPersonId15","GetKycCorporate3List","GetKycCorporate3ById","GetKycCorporate3DtlById","GetEntityTypeId16List","GetOwnershipTypeId16List","GetCountryOfIncorpId16List","GetCountryOfOpId16List","GetBusinessTypeId16List","GetCountryOfAddrId16List","GetSourceOfFundsId16List","GetBusSourceOfWealthId16List","GetPurposeId16List","GetPep16List","SaveKycCorpDoc16","DelKycCorpDoc16","GetKycCorpDoc16List","GetInternalStatus16List","GetKycStatusId16List","GetKycRiskRatingId16List","GetInputBy16List","GetModifiedBy16List","GetInputFor16List","GetKycPersonId23List","GetKycCorpRelationId23List","GetRoleId23List","KycCorporateService","KycCorpCrpId23","KycPersonId23","KycCorpRelationId23","RoleId23","DateAppointed23","DateResigned23","Active23","KycCorpId16","GetSupportRequest20List","GetSupportRequest20ById","GetSupportRequest20DtlById","GetUserId51List","GetKycPersonId51List","GetKycCorpId51List","GetRequestTypeId51List","sendLivenessIssueEmail","userInfo","SupportRequestService","SupportRequestId51","AutoCompleteField","renderMenu","menuProps","currentMatches","labelKey","handleFocus","hasFocus","handleKeyDown","inputChar","isEnter","keyCode","isTab","isEscape","pickFirst","instance","typeahead","getInput","getInstance","priorSelected","currentValue","lastSelectedValue","defaultSelected","priorLabel","_updateSelected","focus","_hideMenu","handleMenuShow","menuVisible","handleMenuHide","handlePaginate","onPaginate","shownResults","handleInputChange","onBlur","hideMenu","handleBlur","onInputChange","option","ref","paginate","maxResults","flip","bsSize","defaultInputValue","onSelect","onFocus","onMenuShow","onMenuHide","clearButton","renderMenuItemChildren","CustomerSupport","initialing","formikValidatedTime","currentSupportKey","DateChange","DropdownChange","setDirtyFlag","DropdownChangeV1","SearchRequestTypeId51","SupportRequest","ScreenButton","OnClickColumeName","KycPerson","kycPersonId","kycCorpId","KycCorporate","UserId51","KycPersonId51","KycCorpId51","RequestTypeId51","requestType","RequestInfo51","InputOn51","currentPersonalDetail","birthday","LoadCorpPage","LoadSupportPage","prevStates","internalStatus","InternalStatus15","livenessPassed","LivenessPassed15","disclosuresChked","DisclosuresChked15","currCorpMst","corpInternalStatus","InternalStatus16","reduxObj","currSupportRequestMst","RequestTypeId51List","SupportRequestReduxObj","currentSupport","isInitialValid","validateOnChange","validateOnBlur","isValid","submitForm","setFieldError","RequiredField","KycPersonReduxObj","KycCorporateReduxObj","reasonValue","disableButton","validatorAmount","withdrawalableValidator","handleReasonChange","ReviewWithdrawTransaction","maxmiumnWaitTime","validatorValue","ModalHideCancelBtn","exitValidator","modalChange","mnemonic","number","resp","mnArr","Mnemonic","copyMnemonic","mnArr2D","col","copyInstruction","getChainText","getChainLink","validatorIndexList","copyValidatorIndex","ValidatorList","currValidator","Create","amount","StakePaymentService","PmtId4","CheckoutForm","stripe","useStripe","elements","useElements","useHistory","errorMessage","showCreditPaymentTopError","paymentDetailErrMsg","hidePaymentBtn","StakePayment","submit","paymentAmount","usdAmount","rate","amountAfterDiscount","discountRate","clientSecret","res","confirmPayment","confirmParams","return_url","redirect","StakePaymentReduxObj","PmtTypeCd4","PmtAmt4","CreditAmt4","PmtStatusCd4","PaidOn4","UsrId4","StakeWalletAddrId4","StripeRef4","stripeId","handleError","onLoadError","stripePromise","loadStripe","stripeKey","appearance","GetStakeStmt5List","GetStakeStmt5ById","GetStakeStmt5DtlById","GetScreenCriStmtTypeCd10List","GetStmtTypeCd8List","GetUsrId8List","GetDownloadLink","creditValue","FtxDiscount","PaymentDiscount","fintruxAddress","stakingWallet","balances","ftxRate","ethRate","StakeToggleSelected","ToggleStripePaymentSec","paymentPageOfItems","showRateMsg","paymentAmountError","stakePaymentLoading","setStakePaymentLoading","sendEth","signer","sendTransaction","transactionReplacementReasons","ErrorCode","TRANSACTION_REPLACED","CALL_EXCEPTION","submitTransaction","sendTx","transferFTXTransaction","FTX","msg","submitEthTransaction","transferETHTransaction","ETH","topUpCredits","handleDownload","paymentAmountErrorMsg","showStripePaymentSec","ReviewFtxTransaction","ReviewEthTransaction","getCurrency","paymentList","Type","getBalances","usrId","GetBalance","credits","Credits","topups","Topups","charges","Charges","remaining","Remaining","Validators","transferFTX","localeCompare","GetStakeWalletAddress1List","GetStakeWalletAddress1ById","GetStakeWalletAddress1DtlById","GetStakeWalletStatusCd2List","GetInputBy2List","GetModifiedBy2List","StakeWalletAddressService","StakeWalletAddrId2","GetStakeUserInfo7List","GetStakeUserInfo7ById","GetStakeUserInfo7DtlById","GetIpCountry17List","GetAgentNumber17List","GetKycStatus17List","GetInputBy17List","GetModifiedBy17List","StakeUserInfoService","StakeInfoId17","ButtonDisabled","cAgentNumber17","StakeWalletAddress","StakeUserInfo","StakeUserInfoState","currUserInfoSearchList","currUserInfoMst","AgentNumber17List","StakeUserInfoReduxObj","AgentNumber17","SaveWalletAddress","StakeWalletAddressReduxObj","StakeWalletAddr2","StakeWalletStatusCd2","StakeWalletAddrDesc2","handleAgentChange","pageload","currAddrCheckSearchList","currentAddress","currentStatusCd","currentAddrInfo","includeDeclinedAddress","confirmed","walletUsedByOthers","PaymentConfirm","StakeStmtService","StmtId8","rewardStmtLoading","setRewardStmtLoading","RewardStmt","RewardStmtReduxObj","StmtTypeCd10","rewardStatements","stakeStmtLoading","setStakeStmtLoading","StakeStmt","StakeStmtReduxObj","accountStatements","transaction","stake","WithdrawConfirm","crAmt","CR","StmtDownloadConfirm","goBack","CHANGE_SIDEBAR_VISIBILITY","CHANGE_MOBILE_SIDEBAR_VISIBILITY","HIDE_MOBILE_SIDEBAR_VISIBILITY","initialState","hide","changeSidebarVisibility","changeMobileSidebarVisibility","TopbarSidebarButton","PureComponent","sidebar","process","Topbar","SidebarLink","newLink","route","activeClassName","UseLiquity","getLiquity","walletPaydAmount","SidebarContent","handleHideSidebar","hideSidebar","walletAddr","handleLogout","liquityCallback","liquityState","showMenu","UsrName","Sidebar","sidebarClass","classNames","isSidebarShown","setIsSidebarShown","isSidebarCollapsed","setIsSidebarCollapsed","layoutClass","sidebarShow","sidebarCollapse","MainWrapper","wrapperClass","Recaptcha","asyncScriptOnLoad","_reCaptchaRef","handleExpired","expired","handleExpired2","expired2","fireRerender","load","createRef","prdOnly","sitekey","ForgotPassword","ValidateField","ValidateEmail","isTouched","lastValidated","ValidateRecaptcha","ValidatePassword","ValidateReTypePassword","ValidateToken","ResetPassword","restPwdRequest","changing","passwordChanged","ModalClassName","TokenChange","LoseFocus","onCaptChaChange","validateField","retypeNewPassword","recaptcha","pageSpinner","autocomplete","marginRight","verticalAlign","signUpService","signUp","emailAvailable","checkCountry","SIGNUP","ACTIVATE","RESET","resetSignup","requestSignUp","activateAccount","SignUp","ValidateAgree","resendEmail","signUpRequest","signup","ActivateAccount","activating","recaptchaTicket","restricted","retypePassword","agree","currentLogin","selectedRole","loginTried","sigUpRequest","rel","EmailSent","SignUpRestriction","pagesRoutes","short","isPublic","inMenu","menuLabel","kycPerson","prdAllowKycOnly","kycInfoLoaded","kycCorpInfoLoaded","welcomeImg","UserOption","GetStartedSteps","personalGoalImg","DatePickerField","toggleCalendar","handleOutsideClick","startDate","isUTC","ISO_8601","dateFormat","onClickOutside","showMonthDropdown","showYearDropdown","dropdownMode","autoComplete","withPortal","fixedHeight","minDate","maxDate","showDisabledMonthNavigation","inline","ReactHint","ReactHintFactory","Hint","textAreaMessage","textAreaDefaultValue","onRenderContent","customButtonOnClick","textArea","textAreaBlock","textAreaName","maxLength","textAreaMaxLength","textAreaPlaceholder","defaultValue","requestOngoing","Spinner","marginTop","customButtonName","customButtonRoute","autoPosition","events","attribute","click","data-rh","data-rh-at","buttonName","customButton","data-custom","data-custom-at","data-cat-id","PhoneField","phone","countryCodeEditable","enableSearchField","disableSearchIcon","PersonalDetail","currentPersonalDetailKey","othersOfWealthDisable","othersOfFundsDisable","othersOfPurposeDisable","SearchNationalityId15","SearchCountryOfResId15","SearchCountryOfBirthId15","SearchIndustryId15","SearchOccupationId15","SearchSourceOfFundsId15","SearchSourceOfWealthId15","SearchPurposeId15","SearchIdIssueCountryId15","Name15","GenderCd15","gender","NationalityId15","nationality","CountryOfResId15","residency","DateOfBirth15","FormerName15","Alias15","EmailAddrs15","PhoneNbrs15","contactNumber","Addresses15","PostalCode15","postalCode","BankAccts15","Title15","CountryOfBirthId15","countryOfBirth","IndustryId15","industry","OccupationId15","occupation","SourceOfFundsId15","sourceOfFunds","OthersOfFunds15","othersOfFunds","SourceOfWealthId15","sourceOfWealth","OthersOfWealth15","othersOfWealth","AnnualIncome15","annualIncome","TransAmount15","TransFrequency15","PurposeId15","purpose","OthersOfPurpose15","othersOfPurpose","IdTypeId15","idType","IdNumber15","idNumber","IdIssueCountryId15","idIssueCountry","IdIssueDate15","issueDate","IdExpiryDate15","expiryDate","KycDesc15","Pep15","pep","Reason15","KycCustomerId15","KycRecordId15","KycStatusId15","KycRiskRatingId15","Response15","RiskReport15","Active15","InputBy15","InputOn15","ModifiedBy15","ModifiedOn15","dateString","today","birthDate","age","monthLeft","getAge","getExpiryDate","GenderCd15List","NationalityId15List","CountryOfResId15List","CountryOfBirthId15List","OccupationId15List","IndustryId15List","SourceOfFundsId15List","SourceOfWealthId15List","PurposeId15List","IdIssueCountryId15List","Pep15List","IdTypeId15List","isDisabled","FieldChange","CountryOfBirthId15InputChange","AutoCompleteFilterBy","NationalityId15InputChange","CountryOfResId15InputChange","PhoneChange","OccupationId15InputChange","IndustryId15InputChange","SourceOfWealthId15InputChange","SourceOfFundsId15InputChange","PurposeId15InputChange","IdIssueCountryId15InputChange","DatePicker","CorporateDetail","SearchCountryOfIncorpId16","CountryOfIncorpId16List","CountryOfIncorpId16","Name16","incorpNumber","IncorpNumber16","countryOfIncorpId","Addresses16","phoneNbrs","PhoneNbrs16","CountryOfIncorpId16InputChange","buttonDisable","SubmitRequest","userEmail","kycName","calcSize","max_width","max_height","noSwap","stripEmbeddedBase64Prefix","addPreviewUrl","previewUrl","iconUrl","contentUrl","ALLOWED_MIME_TYPE","FileInputField","roundTrip","deleteBtnVisibility","files","fileCount","multiple","existingCount","maxErrorShown","maxSize","allowedMime","actionTimeStamp","newFiles","maxAllowed","maxFileCount","receiveFile","fileType","onAdd","reader","FileReader","onloadstart","progress","onloadend","fixOrientation","image","fixed","properlyRotatedImg","img","onload","canvas","ctx","getContext","drawImage","MAX_WIDTH","MAX_HEIGHT","fillStyle","fillRect","readerResizedImg","toDataURL","readAsDataURL","getFile","downloadFile","getElementsByTagName","innerHTML","selectedFile","msSaveOrOpenBlob","previewSelectedFile","currentUrlTitle","isIE","isImage","previewSig","dataObj","fileSig","win","envPublicUrl","winObj","containerUrl","download","features","dataPromise","containerPage","deliverContent","fileObjWithBlob","createObjectURL","appendChild","removeChild","close","postMessage","injected","injectContent","dataJSON","previewContent","removeSelectedFile","onDelete","getElementsByName","sendEmptyFile","storedImgSize","getImgSize","stateKey","imgTag","existingImgSize","MinImageSize","filesAmount","backgroundImage","widthRandomness","htmlFor","margin","nextProps","isMultiDoc","revisedFiles","SupportingDoc","currentDeclaration","photos","currentDeclarationKey","formikName","GetKycPersonDoc15","AddKycPersonDoc15","KycPersonDoc15","fileFileUploadOptions","currentTrustProfile","SubmitDeclaration","cKycPersonDoc15","FileUploadChange","onError","GetKycPersonDoc15Content","AddKycPersonDoc15Content","DelKycPersonDoc15Content","Disclosures","videoConstraints","facingMode","Liveness","onLivenessResult","LiveTestStates","PASSED","faceId","sessionId","selfie","selfieImageBase64","onLivenessReady","disableStart","toggleLiveness","displayLiveness","toggleCamera","displayCamera","toggleCapture","captureDoc","onLivenessStart","actionController","next","LiveTestActions","START","onCameraCapture","imageUri","cameraCapture","selfieCapture","onFaceCompare","selfieImageUri","idDocImageUri","faceCompareServerLog","onDocOCR","idDocImageUri1","idDocImageUri2","docServerLog","PicMed15","StripEmbeddedBase64Prefix","Skip","Subject","configs","clientId","domain","region","serviceBaseUrl","showIssueSec","hideOcr","KycStatus","UpdatePersonalDetail","ModifyDoc","kycStatus","KycIssue","Welcome","BusinessRequest","iconClass","MstRecord","DtlRecord","Setting","ProgressBar","scorePassword","pass","score","letters","variations","digits","lower","upper","nonWords","variationCount","valueText","progressBarClass","Progress","onShow","onDismiss","Alert","systemName","showPassword","qs","queryString","prevprops","prevstates","cNewUsrPassword","cConfirmPwd","naviLabel","pageTitle","CustomRoutePre","RegistrationRoute","OnboardingRoute","AccountRoute","Notification","notification","stack","limit","html","effect","offset","isAdhoc","Pricing","appRoutes","pathTo","ProtectedRoute","connectWallet","checkMetamaskState","Router","Cache","Difference","flexGrow","Dashboard","StakeETH","WithdrawETH","ManageValidator","Payment","AccountStatus","StripeCheckout","RewardStatements","RewardStatementDetail","AccountStatements","prop","ScrollToTop","scrollTo","propTypes","PropTypes","shape","string","isRequired","element","CustomReducer","redux","loadingTime","menuList","systemList","SaveAndExit","TopbarLeft","TopbarCenter","TopbarRight","pageSkeleton","showSkeleton","topbarMenu","setMenu","hideTopbarMenu","ReduxReducer","appReducer","combineReducers","middlewares","thunk","withExtraArgument","apiBase","ReduxPromise","createStoreWithMiddleware","applyMiddleware","createStore","devToolsExtension","autoRefreshOnNetworkChange","REACT_APP_DEMO_MODE","EthersWeb3ReactProvider","getLibrary","BatchedWebSocketAugmentedWeb3Provider","UnsupportedMainnetFallback","App","ReactDOM","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.e626eef5.chunk.js","sourcesContent":["\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Percent = exports.Difference = exports.Decimal = void 0;\r\nconst assert_1 = __importDefault(require(\"assert\"));\r\nconst bignumber_1 = require(\"@ethersproject/bignumber\");\r\nconst getDigits = (numDigits) => TEN.pow(numDigits);\r\nconst MAX_UINT_256 = \"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\";\r\nconst PRECISION = 18;\r\nconst ONE = bignumber_1.BigNumber.from(1);\r\nconst TEN = bignumber_1.BigNumber.from(10);\r\nconst DIGITS = getDigits(PRECISION);\r\nconst stringRepresentationFormat = /^[0-9]*(\\.[0-9]*)?(e[-+]?[0-9]+)?$/;\r\nconst trailingZeros = /0*$/;\r\nconst magnitudes = [\"\", \"K\", \"M\", \"B\", \"T\"];\r\nconst roundedMul = (x, y) => x.mul(y).add(Decimal.HALF.hex).div(DIGITS);\r\n/**\r\n * Fixed-point decimal bignumber with 18 digits of precision.\r\n *\r\n * @remarks\r\n * Used by Liquity libraries to precisely represent native currency (e.g. Ether), PAYD and LQTY\r\n * amounts, as well as derived metrics like collateral ratios.\r\n *\r\n * @public\r\n */\r\nclass Decimal {\r\n constructor(bigNumber) {\r\n if (bigNumber.isNegative()) {\r\n throw new Error(\"negatives not supported by Decimal\");\r\n }\r\n this._bigNumber = bigNumber;\r\n }\r\n /** @internal */\r\n get hex() {\r\n return this._bigNumber.toHexString();\r\n }\r\n /** @internal */\r\n get bigNumber() {\r\n return this._bigNumber.toString();\r\n }\r\n static fromBigNumberString(bigNumberString) {\r\n return new Decimal(bignumber_1.BigNumber.from(bigNumberString));\r\n }\r\n static _fromString(representation) {\r\n if (!representation || !representation.match(stringRepresentationFormat)) {\r\n throw new Error(`bad decimal format: \"${representation}\"`);\r\n }\r\n if (representation.includes(\"e\")) {\r\n // eslint-disable-next-line prefer-const\r\n let [coefficient, exponent] = representation.split(\"e\");\r\n if (exponent.startsWith(\"-\")) {\r\n return new Decimal(Decimal._fromString(coefficient)._bigNumber.div(TEN.pow(bignumber_1.BigNumber.from(exponent.substr(1)))));\r\n }\r\n if (exponent.startsWith(\"+\")) {\r\n exponent = exponent.substr(1);\r\n }\r\n return new Decimal(Decimal._fromString(coefficient)._bigNumber.mul(TEN.pow(bignumber_1.BigNumber.from(exponent))));\r\n }\r\n if (!representation.includes(\".\")) {\r\n return new Decimal(bignumber_1.BigNumber.from(representation).mul(DIGITS));\r\n }\r\n // eslint-disable-next-line prefer-const\r\n let [characteristic, mantissa] = representation.split(\".\");\r\n if (mantissa.length < PRECISION) {\r\n mantissa += \"0\".repeat(PRECISION - mantissa.length);\r\n }\r\n else {\r\n mantissa = mantissa.substr(0, PRECISION);\r\n }\r\n return new Decimal(bignumber_1.BigNumber.from(characteristic || 0)\r\n .mul(DIGITS)\r\n .add(mantissa));\r\n }\r\n static from(decimalish) {\r\n switch (typeof decimalish) {\r\n case \"object\":\r\n if (decimalish instanceof Decimal) {\r\n return decimalish;\r\n }\r\n else {\r\n throw new Error(\"invalid Decimalish value\");\r\n }\r\n case \"string\":\r\n return Decimal._fromString(decimalish);\r\n case \"number\":\r\n return Decimal._fromString(decimalish.toString());\r\n default:\r\n throw new Error(\"invalid Decimalish value\");\r\n }\r\n }\r\n _toStringWithAutomaticPrecision() {\r\n const characteristic = this._bigNumber.div(DIGITS);\r\n const mantissa = this._bigNumber.mod(DIGITS);\r\n if (mantissa.isZero()) {\r\n return characteristic.toString();\r\n }\r\n else {\r\n const paddedMantissa = mantissa.toString().padStart(PRECISION, \"0\");\r\n const trimmedMantissa = paddedMantissa.replace(trailingZeros, \"\");\r\n return characteristic.toString() + \".\" + trimmedMantissa;\r\n }\r\n }\r\n _roundUp(precision) {\r\n const halfDigit = getDigits(PRECISION - 1 - precision).mul(5);\r\n return this._bigNumber.add(halfDigit);\r\n }\r\n _toStringWithPrecision(precision) {\r\n if (precision < 0) {\r\n throw new Error(\"precision must not be negative\");\r\n }\r\n const value = precision < PRECISION ? this._roundUp(precision) : this._bigNumber;\r\n const characteristic = value.div(DIGITS);\r\n const mantissa = value.mod(DIGITS);\r\n if (precision === 0) {\r\n return characteristic.toString();\r\n }\r\n else {\r\n const paddedMantissa = mantissa.toString().padStart(PRECISION, \"0\");\r\n const trimmedMantissa = paddedMantissa.substr(0, precision);\r\n return characteristic.toString() + \".\" + trimmedMantissa;\r\n }\r\n }\r\n toString(precision) {\r\n if (this.infinite) {\r\n return \"∞\";\r\n }\r\n else if (precision !== undefined) {\r\n return this._toStringWithPrecision(precision);\r\n }\r\n else {\r\n return this._toStringWithAutomaticPrecision();\r\n }\r\n }\r\n prettify(precision = 2) {\r\n const [characteristic, mantissa] = this.toString(precision).split(\".\");\r\n const prettyCharacteristic = characteristic.replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, \"$1,\");\r\n return mantissa !== undefined ? prettyCharacteristic + \".\" + mantissa : prettyCharacteristic;\r\n }\r\n shorten() {\r\n const characteristicLength = this.toString(0).length;\r\n const magnitude = Math.min(Math.floor((characteristicLength - 1) / 3), magnitudes.length - 1);\r\n const precision = Math.max(3 * (magnitude + 1) - characteristicLength, 0);\r\n const normalized = this.div(new Decimal(getDigits(PRECISION + 3 * magnitude)));\r\n return normalized.prettify(precision) + magnitudes[magnitude];\r\n }\r\n add(addend) {\r\n return new Decimal(this._bigNumber.add(Decimal.from(addend)._bigNumber));\r\n }\r\n sub(subtrahend) {\r\n return new Decimal(this._bigNumber.sub(Decimal.from(subtrahend)._bigNumber));\r\n }\r\n mul(multiplier) {\r\n return new Decimal(this._bigNumber.mul(Decimal.from(multiplier)._bigNumber).div(DIGITS));\r\n }\r\n div(divider) {\r\n divider = Decimal.from(divider);\r\n if (divider.isZero) {\r\n return Decimal.INFINITY;\r\n }\r\n return new Decimal(this._bigNumber.mul(DIGITS).div(divider._bigNumber));\r\n }\r\n /** @internal */\r\n _divCeil(divider) {\r\n divider = Decimal.from(divider);\r\n if (divider.isZero) {\r\n return Decimal.INFINITY;\r\n }\r\n return new Decimal(this._bigNumber.mul(DIGITS).add(divider._bigNumber.sub(ONE)).div(divider._bigNumber));\r\n }\r\n mulDiv(multiplier, divider) {\r\n multiplier = Decimal.from(multiplier);\r\n divider = Decimal.from(divider);\r\n if (divider.isZero) {\r\n return Decimal.INFINITY;\r\n }\r\n return new Decimal(this._bigNumber.mul(multiplier._bigNumber).div(divider._bigNumber));\r\n }\r\n pow(exponent) {\r\n assert_1.default(Number.isInteger(exponent));\r\n assert_1.default(0 <= exponent && exponent <= 0xffffffff); // Ensure we're safe to use bitwise ops\r\n if (exponent === 0) {\r\n return Decimal.ONE;\r\n }\r\n if (exponent === 1) {\r\n return this;\r\n }\r\n let x = this._bigNumber;\r\n let y = DIGITS;\r\n for (; exponent > 1; exponent >>>= 1) {\r\n if (exponent & 1) {\r\n y = roundedMul(x, y);\r\n }\r\n x = roundedMul(x, x);\r\n }\r\n return new Decimal(roundedMul(x, y));\r\n }\r\n get isZero() {\r\n return this._bigNumber.isZero();\r\n }\r\n get zero() {\r\n if (this.isZero) {\r\n return this;\r\n }\r\n }\r\n get nonZero() {\r\n if (!this.isZero) {\r\n return this;\r\n }\r\n }\r\n get infinite() {\r\n if (this.eq(Decimal.INFINITY)) {\r\n return this;\r\n }\r\n }\r\n get finite() {\r\n if (!this.eq(Decimal.INFINITY)) {\r\n return this;\r\n }\r\n }\r\n /** @internal */\r\n get absoluteValue() {\r\n return this;\r\n }\r\n lt(that) {\r\n return this._bigNumber.lt(Decimal.from(that)._bigNumber);\r\n }\r\n eq(that) {\r\n return this._bigNumber.eq(Decimal.from(that)._bigNumber);\r\n }\r\n gt(that) {\r\n return this._bigNumber.gt(Decimal.from(that)._bigNumber);\r\n }\r\n gte(that) {\r\n return this._bigNumber.gte(Decimal.from(that)._bigNumber);\r\n }\r\n lte(that) {\r\n return this._bigNumber.lte(Decimal.from(that)._bigNumber);\r\n }\r\n static min(a, b) {\r\n a = Decimal.from(a);\r\n b = Decimal.from(b);\r\n return a.lt(b) ? a : b;\r\n }\r\n static max(a, b) {\r\n a = Decimal.from(a);\r\n b = Decimal.from(b);\r\n return a.gt(b) ? a : b;\r\n }\r\n}\r\nexports.Decimal = Decimal;\r\nDecimal.INFINITY = Decimal.fromBigNumberString(MAX_UINT_256);\r\nDecimal.ZERO = Decimal.from(0);\r\nDecimal.HALF = Decimal.from(0.5);\r\nDecimal.ONE = Decimal.from(1);\r\n/** @alpha */\r\nclass Difference {\r\n constructor(number) {\r\n this._number = number;\r\n }\r\n static between(d1, d2) {\r\n if (d1 === undefined || d2 === undefined) {\r\n return new Difference(undefined);\r\n }\r\n d1 = Decimal.from(d1);\r\n d2 = Decimal.from(d2);\r\n if (d1.infinite && d2.infinite) {\r\n return new Difference(undefined);\r\n }\r\n else if (d1.infinite) {\r\n return new Difference({ sign: \"+\", absoluteValue: d1 });\r\n }\r\n else if (d2.infinite) {\r\n return new Difference({ sign: \"-\", absoluteValue: d2 });\r\n }\r\n else if (d1.gt(d2)) {\r\n return new Difference({ sign: \"+\", absoluteValue: Decimal.from(d1).sub(d2) });\r\n }\r\n else if (d2.gt(d1)) {\r\n return new Difference({ sign: \"-\", absoluteValue: Decimal.from(d2).sub(d1) });\r\n }\r\n else {\r\n return new Difference({ sign: \"\", absoluteValue: Decimal.ZERO });\r\n }\r\n }\r\n toString(precision) {\r\n if (!this._number) {\r\n return \"N/A\";\r\n }\r\n return this._number.sign + this._number.absoluteValue.toString(precision);\r\n }\r\n prettify(precision) {\r\n if (!this._number) {\r\n return this.toString();\r\n }\r\n return this._number.sign + this._number.absoluteValue.prettify(precision);\r\n }\r\n mul(multiplier) {\r\n return new Difference(this._number && {\r\n sign: this._number.sign,\r\n absoluteValue: this._number.absoluteValue.mul(multiplier)\r\n });\r\n }\r\n get nonZero() {\r\n var _a;\r\n return ((_a = this._number) === null || _a === void 0 ? void 0 : _a.absoluteValue.nonZero) && this;\r\n }\r\n get positive() {\r\n var _a;\r\n return ((_a = this._number) === null || _a === void 0 ? void 0 : _a.sign) === \"+\" ? this : undefined;\r\n }\r\n get negative() {\r\n var _a;\r\n return ((_a = this._number) === null || _a === void 0 ? void 0 : _a.sign) === \"-\" ? this : undefined;\r\n }\r\n get absoluteValue() {\r\n var _a;\r\n return (_a = this._number) === null || _a === void 0 ? void 0 : _a.absoluteValue;\r\n }\r\n get infinite() {\r\n var _a;\r\n return ((_a = this._number) === null || _a === void 0 ? void 0 : _a.absoluteValue.infinite) && this;\r\n }\r\n get finite() {\r\n var _a;\r\n return ((_a = this._number) === null || _a === void 0 ? void 0 : _a.absoluteValue.finite) && this;\r\n }\r\n}\r\nexports.Difference = Difference;\r\n/** @alpha */\r\nclass Percent {\r\n constructor(ratio) {\r\n this._percent = ratio.infinite || (ratio.mul && ratio.mul(100)) || ratio;\r\n }\r\n nonZeroish(precision) {\r\n var _a;\r\n const zeroish = `0.${\"0\".repeat(precision)}5`;\r\n if ((_a = this._percent.absoluteValue) === null || _a === void 0 ? void 0 : _a.gte(zeroish)) {\r\n return this;\r\n }\r\n }\r\n toString(precision) {\r\n return (this._percent.toString(precision) +\r\n (this._percent.absoluteValue && !this._percent.infinite ? \"%\" : \"\"));\r\n }\r\n prettify() {\r\n var _a, _b;\r\n if ((_a = this._percent.absoluteValue) === null || _a === void 0 ? void 0 : _a.gte(\"1000\")) {\r\n return this.toString(0);\r\n }\r\n else if ((_b = this._percent.absoluteValue) === null || _b === void 0 ? void 0 : _b.gte(\"10\")) {\r\n return this.toString(1);\r\n }\r\n else {\r\n return this.toString(2);\r\n }\r\n }\r\n}\r\nexports.Percent = Percent;\r\n//# sourceMappingURL=Decimal.js.map","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n__exportStar(require(\"./src/components/LiquityStoreProvider\"), exports);\r\n__exportStar(require(\"./src/hooks/useLiquityStore\"), exports);\r\n__exportStar(require(\"./src/hooks/useLiquityReducer\"), exports);\r\n__exportStar(require(\"./src/hooks/useLiquitySelector\"), exports);\r\n//# sourceMappingURL=index.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports._connect = exports._connectByChainId = exports._connectToDeployment = exports.UnsupportedNetworkError = exports._usingStore = exports._requireFrontendAddress = exports._requireAddress = exports._getProvider = exports._requireSigner = exports._getBlockTimestamp = exports._getContracts = void 0;\r\nconst abstract_signer_1 = require(\"@ethersproject/abstract-signer\");\r\nconst dev_json_1 = __importDefault(require(\"../deployments/dev.json\"));\r\nconst goerli_json_1 = __importDefault(require(\"../deployments/goerli.json\"));\r\n// import kovan from \"../deployments/kovan.json\";\r\n// import rinkeby from \"../deployments/rinkeby.json\";\r\n// import ropsten from \"../deployments/ropsten.json\";\r\nconst mainnet_json_1 = __importDefault(require(\"../deployments/mainnet.json\"));\r\nconst _utils_1 = require(\"./_utils\");\r\nconst contracts_1 = require(\"./contracts\");\r\nconst _Multicall_1 = require(\"./_Multicall\");\r\nconst dev = dev_json_1.default;\r\nconst deployments = {\r\n // need to add new contracts to below json files or comment out\r\n // [mainnet.chainId]: mainnet,\r\n 1: mainnet_json_1.default,\r\n // [ropsten.chainId]: ropsten,\r\n // [rinkeby.chainId]: rinkeby,\r\n 5: goerli_json_1.default,\r\n // [kovan.chainId]: kovan,\r\n ...(dev !== null ? { [dev.chainId]: dev } : {}),\r\n};\r\nconst branded = (t) => t;\r\nconst connectionFrom = (provider, signer, _contracts, _multicall, { deploymentDate, ...deployment }, optionalParams) => {\r\n if (optionalParams &&\r\n optionalParams.useStore !== undefined &&\r\n !validStoreOptions.includes(optionalParams.useStore)) {\r\n throw new Error(`Invalid useStore value ${optionalParams.useStore}`);\r\n }\r\n return branded({\r\n provider,\r\n signer,\r\n _contracts,\r\n _multicall,\r\n deploymentDate: new Date(deploymentDate),\r\n ...deployment,\r\n ...optionalParams\r\n });\r\n};\r\n/** @internal */\r\nconst _getContracts = (connection) => connection._contracts;\r\nexports._getContracts = _getContracts;\r\nconst getMulticall = (connection) => connection._multicall;\r\nconst getTimestampFromBlock = ({ timestamp }) => timestamp;\r\n/** @internal */\r\nconst _getBlockTimestamp = (connection, blockTag = \"latest\") => { var _a, _b; return (_b = (_a = \r\n// Get the timestamp via a contract call whenever possible, to make it batchable with other calls\r\ngetMulticall(connection)) === null || _a === void 0 ? void 0 : _a.getCurrentBlockTimestamp({ blockTag }).then(_utils_1.numberify)) !== null && _b !== void 0 ? _b : exports._getProvider(connection).getBlock(blockTag).then(getTimestampFromBlock); };\r\nexports._getBlockTimestamp = _getBlockTimestamp;\r\n/** @internal */\r\nconst _requireSigner = (connection) => { var _a; return (_a = connection.signer) !== null && _a !== void 0 ? _a : _utils_1.panic(new Error(\"Must be connected through a Signer\")); };\r\nexports._requireSigner = _requireSigner;\r\n/** @internal */\r\nconst _getProvider = (connection) => connection.provider;\r\nexports._getProvider = _getProvider;\r\n// TODO parameterize error message?\r\n/** @internal */\r\nconst _requireAddress = (connection, overrides) => { var _a, _b; return (_b = (_a = overrides === null || overrides === void 0 ? void 0 : overrides.from) !== null && _a !== void 0 ? _a : connection.userAddress) !== null && _b !== void 0 ? _b : _utils_1.panic(new Error(\"A user address is required\")); };\r\nexports._requireAddress = _requireAddress;\r\n/** @internal */\r\nconst _requireFrontendAddress = (connection) => { var _a; return (_a = connection.frontendTag) !== null && _a !== void 0 ? _a : _utils_1.panic(new Error(\"A frontend address is required\")); };\r\nexports._requireFrontendAddress = _requireFrontendAddress;\r\n/** @internal */\r\nconst _usingStore = (connection) => connection.useStore !== undefined;\r\nexports._usingStore = _usingStore;\r\n/**\r\n * Thrown when trying to connect to a network where Liquity is not deployed.\r\n *\r\n * @remarks\r\n * Thrown by {@link ReadableEthersLiquity.(connect:2)} and {@link EthersLiquity.(connect:2)}.\r\n *\r\n * @public\r\n */\r\nclass UnsupportedNetworkError extends Error {\r\n /** @internal */\r\n constructor(chainId) {\r\n super(`Unsupported network (chainId = ${chainId})`);\r\n this.name = \"UnsupportedNetworkError\";\r\n this.chainId = chainId;\r\n }\r\n}\r\nexports.UnsupportedNetworkError = UnsupportedNetworkError;\r\nconst getProviderAndSigner = (signerOrProvider) => {\r\n var _a;\r\n const provider = abstract_signer_1.Signer.isSigner(signerOrProvider)\r\n ? (_a = signerOrProvider.provider) !== null && _a !== void 0 ? _a : _utils_1.panic(new Error(\"Signer must have a Provider\")) : signerOrProvider;\r\n const signer = abstract_signer_1.Signer.isSigner(signerOrProvider) ? signerOrProvider : undefined;\r\n return [provider, signer];\r\n};\r\n/** @internal */\r\nconst _connectToDeployment = (deployment, signerOrProvider, optionalParams) => connectionFrom(...getProviderAndSigner(signerOrProvider), contracts_1._connectToContracts(signerOrProvider, deployment), undefined, deployment, optionalParams);\r\nexports._connectToDeployment = _connectToDeployment;\r\nconst validStoreOptions = [\"blockPolled\"];\r\n/** @internal */\r\nfunction _connectByChainId(provider, signer, chainId, optionalParams) {\r\n var _a;\r\n const deployment = (_a = deployments[chainId]) !== null && _a !== void 0 ? _a : _utils_1.panic(new UnsupportedNetworkError(chainId));\r\n return connectionFrom(provider, signer, contracts_1._connectToContracts(signer !== null && signer !== void 0 ? signer : provider, deployment), _Multicall_1._connectToMulticall(signer !== null && signer !== void 0 ? signer : provider, chainId), deployment, optionalParams);\r\n}\r\nexports._connectByChainId = _connectByChainId;\r\n/** @internal */\r\nconst _connect = async (signerOrProvider, optionalParams) => {\r\n const [provider, signer] = getProviderAndSigner(signerOrProvider);\r\n if (signer) {\r\n if ((optionalParams === null || optionalParams === void 0 ? void 0 : optionalParams.userAddress) !== undefined) {\r\n throw new Error(\"Can't override userAddress when connecting through Signer\");\r\n }\r\n optionalParams = {\r\n ...optionalParams,\r\n userAddress: await signer.getAddress()\r\n };\r\n }\r\n return _connectByChainId(provider, signer, (await provider.getNetwork()).chainId, optionalParams);\r\n};\r\nexports._connect = _connect;\r\n//# sourceMappingURL=EthersLiquityConnection.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.promiseAllValues = exports.panic = exports.decimalify = exports.numberify = void 0;\r\nconst lib_base_1 = require(\"@liquity/lib-base\");\r\nconst numberify = (bigNumber) => bigNumber.toNumber();\r\nexports.numberify = numberify;\r\nconst decimalify = (bigNumber) => lib_base_1.Decimal.fromBigNumberString(bigNumber.toHexString());\r\nexports.decimalify = decimalify;\r\nconst panic = (e) => {\r\n throw e;\r\n};\r\nexports.panic = panic;\r\nconst promiseAllValues = (object) => {\r\n const keys = Object.keys(object);\r\n return Promise.all(Object.values(object)).then(values => Object.fromEntries(values.map((value, i) => [keys[i], value])));\r\n};\r\nexports.promiseAllValues = promiseAllValues;\r\n//# sourceMappingURL=_utils.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.MINIMUM_REDEMPTION_RATE = exports.MAXIMUM_BORROWING_RATE = exports.MINIMUM_BORROWING_RATE = exports.PAYD_MINIMUM_DEBT = exports.PAYD_MINIMUM_NET_DEBT = exports.PAYD_LIQUIDATION_RESERVE = exports.MINIMUM_COLLATERAL_RATIO = exports.CRITICAL_COLLATERAL_RATIO = void 0;\r\nconst Decimal_1 = require(\"./Decimal\");\r\n/**\r\n * Total collateral ratio below which recovery mode is triggered.\r\n *\r\n * @public\r\n */\r\nexports.CRITICAL_COLLATERAL_RATIO = Decimal_1.Decimal.from(1.55);\r\n/**\r\n * Collateral ratio below which a Cache can be liquidated in normal mode.\r\n *\r\n * @public\r\n */\r\nexports.MINIMUM_COLLATERAL_RATIO = Decimal_1.Decimal.from(1.15);\r\n/**\r\n * Amount of PAYD that's reserved for compensating the liquidator of a Cache.\r\n *\r\n * @public\r\n */\r\nexports.PAYD_LIQUIDATION_RESERVE = Decimal_1.Decimal.from(200);\r\n/**\r\n * A Cache must always have at least this much debt on top of the\r\n * {@link PAYD_LIQUIDATION_RESERVE | liquidation reserve}.\r\n *\r\n * @remarks\r\n * Any transaction that would result in a Cache with less net debt than this will be reverted.\r\n * this freaking thing must agree with sol number(2500) in LiquityBase.sol !!!!!!\r\n * should be read from it genius\r\n * @public\r\n */\r\nexports.PAYD_MINIMUM_NET_DEBT = Decimal_1.Decimal.from(2500);\r\n/**\r\n * A Cache must always have at least this much debt.\r\n *\r\n * @remarks\r\n * Any transaction that would result in a Cache with less debt than this will be reverted.\r\n *\r\n * @public\r\n */\r\nexports.PAYD_MINIMUM_DEBT = exports.PAYD_LIQUIDATION_RESERVE.add(exports.PAYD_MINIMUM_NET_DEBT);\r\n/**\r\n * Value that the {@link Fees.borrowingRate | borrowing rate} will never decay below.\r\n *\r\n * @remarks\r\n * Note that the borrowing rate can still be lower than this during recovery mode, when it's\r\n * overridden by zero.\r\n *\r\n * @public\r\n */\r\nexports.MINIMUM_BORROWING_RATE = Decimal_1.Decimal.from(0.005);\r\n/**\r\n * Value that the {@link Fees.borrowingRate | borrowing rate} will never exceed.\r\n *\r\n * @public\r\n */\r\nexports.MAXIMUM_BORROWING_RATE = Decimal_1.Decimal.from(0.05);\r\n/**\r\n * Value that the {@link Fees.redemptionRate | redemption rate} will never decay below.\r\n *\r\n * @public\r\n */\r\nexports.MINIMUM_REDEMPTION_RATE = Decimal_1.Decimal.from(0.005);\r\n//# sourceMappingURL=constants.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.useLiquityStore = void 0;\r\nconst react_1 = require(\"react\");\r\nconst LiquityStoreProvider_1 = require(\"../components/LiquityStoreProvider\");\r\nconst useLiquityStore = () => {\r\n const store = react_1.useContext(LiquityStoreProvider_1.LiquityStoreContext);\r\n if (!store) {\r\n throw new Error(\"You must provide a LiquityStore via LiquityStoreProvider\");\r\n }\r\n return store;\r\n};\r\nexports.useLiquityStore = useLiquityStore;\r\n//# sourceMappingURL=useLiquityStore.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.WebSocketAugmentedWeb3Provider = exports.WebSocketAugmented = exports.isWebSocketAugmentedProvider = void 0;\r\nconst providers_1 = require(\"@ethersproject/providers\");\r\nconst bytes_1 = require(\"@ethersproject/bytes\");\r\nconst WebSocketProvider_1 = require(\"./WebSocketProvider\");\r\nconst webSocketAugmentedProviders = [];\r\nconst isWebSocketAugmentedProvider = (provider) => webSocketAugmentedProviders.some(webSocketAugmentedProvider => provider instanceof webSocketAugmentedProvider);\r\nexports.isWebSocketAugmentedProvider = isWebSocketAugmentedProvider;\r\nconst isHeaderNotFoundError = (error) => typeof error === \"object\" &&\r\n typeof error.message === \"string\" &&\r\n (error.message.includes(\r\n // geth\r\n \"header not found\") ||\r\n error.message.includes(\r\n // openethereum\r\n \"request is not supported because your node is running with state pruning\"));\r\nconst isTransactionHash = (eventName) => typeof eventName === \"string\" && bytes_1.hexDataLength(eventName) === 32;\r\nconst loadBalancingGlitchRetryIntervalMs = 200;\r\nconst delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));\r\nconst waitFor = (f) => (g) => (t, { isActive }) => {\r\n f(t).then(u => {\r\n if (u !== null && isActive()) {\r\n g(u);\r\n }\r\n });\r\n};\r\nconst pass = (f) => (t, _) => {\r\n f(t);\r\n};\r\nconst passOnce = (f) => (t, { removeMe }) => {\r\n f(t);\r\n removeMe();\r\n};\r\nconst sequence = (f, g) => (h) => (t, context) => {\r\n f(u => g(h)(u, context))(t, context);\r\n};\r\nconst defer = (f) => (t) => {\r\n setTimeout(() => {\r\n f(t);\r\n }, 0);\r\n};\r\nconst WebSocketAugmented = (Base) => {\r\n let webSocketAugmentedProvider = class extends Base {\r\n constructor() {\r\n super(...arguments);\r\n this._seenBlock = 0;\r\n this._blockListenerScheduled = false;\r\n this._blockListeners = new Map();\r\n this._blockListener = this._onBlock.bind(this);\r\n }\r\n openWebSocket(url, network) {\r\n this._wsProvider = new WebSocketProvider_1.WebSocketProvider(url, network);\r\n this._wsProvider.onClose = this._onWebSocketClose.bind(this);\r\n this._wsParams = [url, network];\r\n this._switchover();\r\n }\r\n _onWebSocketClose() {\r\n this.closeWebSocket();\r\n console.warn(\"WebSocketProvider disconnected. Retrying in 10 seconds.\");\r\n this._reconnectTimerId = setTimeout(() => this.openWebSocket(...this._wsParams), 10000);\r\n }\r\n closeWebSocket() {\r\n if (this._wsProvider) {\r\n this._wsProvider.onClose = null;\r\n this._wsProvider.close(1000); // normal closure\r\n this._wsProvider = undefined;\r\n this._switchover();\r\n if (this._reconnectTimerId !== undefined) {\r\n clearTimeout(this._reconnectTimerId);\r\n this._reconnectTimerId = undefined;\r\n }\r\n }\r\n }\r\n _switchover() {\r\n if (this._blockListeners.size > 0) {\r\n if (this._wsProvider) {\r\n super.off(\"block\", this._blockListener);\r\n }\r\n this._startBlockEvents();\r\n }\r\n }\r\n _onBlock(blockNumber) {\r\n this._seenBlock = blockNumber;\r\n if (!this._blockListenerScheduled) {\r\n this._blockListenerScheduled = true;\r\n setTimeout(() => {\r\n this._blockListenerScheduled = false;\r\n [...this._blockListeners].forEach(([, listener]) => listener(this._seenBlock));\r\n }, 50);\r\n }\r\n }\r\n async _retrySeenBlock(perform, startingBlock) {\r\n for (let retries = 0;; ++retries) {\r\n try {\r\n const ret = await perform();\r\n if (retries) {\r\n // console.log(`Glitch resolved after ${retries} ${retries === 1 ? \"retry\" : \"retries\"}.`);\r\n }\r\n return ret;\r\n }\r\n catch (error) {\r\n if (this._seenBlock !== startingBlock || !isHeaderNotFoundError(error)) {\r\n throw error;\r\n }\r\n }\r\n // console.warn(\"Load balancing glitch. Retrying...\");\r\n await delay(loadBalancingGlitchRetryIntervalMs);\r\n }\r\n }\r\n async call(transaction, blockTag) {\r\n const resolvedBlockTag = await blockTag;\r\n const perform = () => {\r\n var _a;\r\n return ((_a = this._wsProvider) === null || _a === void 0 ? void 0 : _a.isReady) ? this._wsProvider.call(transaction, resolvedBlockTag)\r\n : super.call(transaction, resolvedBlockTag);\r\n };\r\n return resolvedBlockTag === this._seenBlock\r\n ? this._retrySeenBlock(perform, this._seenBlock)\r\n : perform();\r\n }\r\n async getBalance(addressOrName, blockTag) {\r\n const resolvedBlockTag = await blockTag;\r\n const perform = () => {\r\n var _a;\r\n return ((_a = this._wsProvider) === null || _a === void 0 ? void 0 : _a.isReady) ? this._wsProvider.getBalance(addressOrName, resolvedBlockTag)\r\n : super.getBalance(addressOrName, resolvedBlockTag);\r\n };\r\n return resolvedBlockTag === this._seenBlock\r\n ? this._retrySeenBlock(perform, this._seenBlock)\r\n : perform();\r\n }\r\n _startBlockEvents() {\r\n if (this._wsProvider) {\r\n console.log(\"Listening for new blocks on WebSocketProvider\");\r\n this._wsProvider.on(\"block\", this._blockListener);\r\n }\r\n else {\r\n console.log(\"Listening for new blocks on basic Provider\");\r\n super.on(\"block\", this._blockListener);\r\n }\r\n }\r\n _stopBlockEvents() {\r\n if (this._wsProvider) {\r\n this._wsProvider.off(\"block\", this._blockListener);\r\n }\r\n else {\r\n super.off(\"block\", this._blockListener);\r\n }\r\n }\r\n _wrap(f, g) {\r\n return [\r\n f,\r\n (u) => g(defer(f))(u, {\r\n isActive: () => this._blockListeners.has(f),\r\n removeMe: () => this._blockListeners.delete(f)\r\n })\r\n ];\r\n }\r\n on(eventName, listener) {\r\n if (isTransactionHash(eventName)) {\r\n const fetchReceipt = this._getTransactionReceiptFromLatest.bind(this, eventName);\r\n const [, passReceipt] = this._wrap(listener, waitFor(fetchReceipt));\r\n passReceipt(undefined);\r\n return this._addBlockListener(listener, passReceipt);\r\n }\r\n else if (eventName === \"block\") {\r\n return this._addBlockListener(...this._wrap(listener, pass));\r\n }\r\n else {\r\n return super.on(eventName, listener);\r\n }\r\n }\r\n _addBlockListener(key, blockListener) {\r\n if (!this._blockListeners.has(key)) {\r\n this._blockListeners.set(key, blockListener);\r\n if (this._blockListeners.size === 1) {\r\n this._startBlockEvents();\r\n }\r\n }\r\n return this;\r\n }\r\n once(eventName, listener) {\r\n if (isTransactionHash(eventName)) {\r\n const fetchReceipt = this._getTransactionReceiptFromLatest.bind(this, eventName);\r\n const [, passReceiptOnce] = this._wrap(listener, sequence(waitFor(fetchReceipt), passOnce));\r\n passReceiptOnce(undefined);\r\n return this._addBlockListener(listener, passReceiptOnce);\r\n }\r\n else if (eventName === \"block\") {\r\n return this._addBlockListener(...this._wrap(listener, passOnce));\r\n }\r\n else {\r\n return super.once(eventName, listener);\r\n }\r\n }\r\n off(eventName, listener) {\r\n if (isTransactionHash(eventName) || eventName === \"block\") {\r\n return this._removeBlockListener(listener);\r\n }\r\n else {\r\n return super.off(eventName, listener);\r\n }\r\n }\r\n _removeBlockListener(key) {\r\n if (this._blockListeners.has(key)) {\r\n this._blockListeners.delete(key);\r\n if (this._blockListeners.size === 0) {\r\n this._stopBlockEvents();\r\n }\r\n }\r\n return this;\r\n }\r\n async getTransaction(transactionHash) {\r\n var _a, _b;\r\n const txPromises = [\r\n super.getTransaction(transactionHash),\r\n ...(((_a = this._wsProvider) === null || _a === void 0 ? void 0 : _a.isReady) ? [this._wsProvider.getTransaction(transactionHash)] : [])\r\n ];\r\n const first = await Promise.race(txPromises);\r\n const tx = (_b = first !== null && first !== void 0 ? first : (await Promise.all(txPromises)).find(tx => tx !== null)) !== null && _b !== void 0 ? _b : null;\r\n return tx;\r\n }\r\n getTransactionReceipt(transactionHash) {\r\n var _a;\r\n return ((_a = this._wsProvider) === null || _a === void 0 ? void 0 : _a.isReady) ? this._wsProvider.getTransactionReceipt(transactionHash)\r\n : super.getTransactionReceipt(transactionHash);\r\n }\r\n getTransactionCount(addressOrName, blockTag) {\r\n var _a;\r\n return ((_a = this._wsProvider) === null || _a === void 0 ? void 0 : _a.isReady) ? this._wsProvider.getTransactionCount(addressOrName, blockTag)\r\n : super.getTransactionCount(addressOrName, blockTag);\r\n }\r\n getBlock(blockHashOrBlockTag) {\r\n var _a;\r\n return ((_a = this._wsProvider) === null || _a === void 0 ? void 0 : _a.isReady) ? this._wsProvider.getBlock(blockHashOrBlockTag)\r\n : super.getBlock(blockHashOrBlockTag);\r\n }\r\n getBlockWithTransactions(blockHashOrBlockTag) {\r\n var _a;\r\n return ((_a = this._wsProvider) === null || _a === void 0 ? void 0 : _a.isReady) ? this._wsProvider.getBlockWithTransactions(blockHashOrBlockTag)\r\n : super.getBlockWithTransactions(blockHashOrBlockTag);\r\n }\r\n async _blockContainsTx(blockNumber, txHash) {\r\n let block;\r\n for (block = null; !block; block = await this.getBlock(blockNumber)) {\r\n await delay(loadBalancingGlitchRetryIntervalMs);\r\n }\r\n return block.transactions.some(txHashInBlock => txHashInBlock === txHash);\r\n }\r\n async _getTransactionReceiptFromLatest(txHash, latestBlock) {\r\n txHash = await txHash;\r\n for (let retries = 0;; ++retries) {\r\n const receipt = (await this.getTransactionReceipt(txHash));\r\n if (latestBlock === undefined ||\r\n (receipt === null && !(await this._blockContainsTx(latestBlock, txHash))) ||\r\n (receipt !== null && receipt.blockNumber + receipt.confirmations - 1 >= latestBlock)) {\r\n if (retries) {\r\n // console.log(`Glitch resolved after ${retries} ${retries === 1 ? \"retry\" : \"retries\"}.`);\r\n }\r\n return receipt;\r\n }\r\n // console.warn(\"Load balancing glitch. Retrying...\");\r\n await delay(loadBalancingGlitchRetryIntervalMs);\r\n }\r\n }\r\n async waitForTransaction(txHash, confirmations, timeout) {\r\n if (timeout !== undefined) {\r\n // We don't use timeout, don't implement it\r\n return super.waitForTransaction(txHash, confirmations, timeout);\r\n }\r\n let latestBlock = undefined;\r\n for (;;) {\r\n const receipt = await this._getTransactionReceiptFromLatest(txHash, latestBlock);\r\n if (receipt !== null &&\r\n (confirmations === undefined || receipt.confirmations >= confirmations)) {\r\n return receipt;\r\n }\r\n latestBlock = await new Promise(resolve => this.once(\"block\", resolve));\r\n }\r\n }\r\n };\r\n webSocketAugmentedProviders.push(webSocketAugmentedProvider);\r\n return webSocketAugmentedProvider;\r\n};\r\nexports.WebSocketAugmented = WebSocketAugmented;\r\nexports.WebSocketAugmentedWeb3Provider = exports.WebSocketAugmented(providers_1.Web3Provider);\r\n//# sourceMappingURL=WebSocketAugmentedProvider.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.WebSocketProvider = void 0;\r\nconst providers_1 = require(\"@ethersproject/providers\");\r\nclass WebSocketProvider extends providers_1.WebSocketProvider {\r\n get isReady() {\r\n return this._websocket.readyState === WebSocket.OPEN;\r\n }\r\n set onClose(closeListener) {\r\n this._websocket.onclose = closeListener;\r\n }\r\n close(code) {\r\n this._websocket.close(code);\r\n }\r\n async detectNetwork() {\r\n return this.network;\r\n }\r\n}\r\nexports.WebSocketProvider = WebSocketProvider;\r\n//# sourceMappingURL=WebSocketProvider.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports._connectToContracts = exports._priceFeedIsTestnet = exports._LiquityContract = void 0;\r\nconst contracts_1 = require(\"@ethersproject/contracts\");\r\nconst ActivePool_json_1 = __importDefault(require(\"../abi/ActivePool.json\"));\r\nconst BorrowerOperations_json_1 = __importDefault(require(\"../abi/BorrowerOperations.json\"));\r\nconst CacheManager_json_1 = __importDefault(require(\"../abi/CacheManager.json\"));\r\nconst PAYDToken_json_1 = __importDefault(require(\"../abi/PAYDToken.json\"));\r\nconst CollSurplusPool_json_1 = __importDefault(require(\"../abi/CollSurplusPool.json\"));\r\nconst DefaultPool_json_1 = __importDefault(require(\"../abi/DefaultPool.json\"));\r\nconst HintHelpers_json_1 = __importDefault(require(\"../abi/HintHelpers.json\"));\r\nconst MultiCacheGetter_json_1 = __importDefault(require(\"../abi/MultiCacheGetter.json\"));\r\nconst PriceFeed_json_1 = __importDefault(require(\"../abi/PriceFeed.json\"));\r\nconst PriceFeedTestnet_json_1 = __importDefault(require(\"../abi/PriceFeedTestnet.json\"));\r\nconst SortedCaches_json_1 = __importDefault(require(\"../abi/SortedCaches.json\"));\r\nconst RewardsPool_json_1 = __importDefault(require(\"../abi/RewardsPool.json\"));\r\nconst GasPool_json_1 = __importDefault(require(\"../abi/GasPool.json\"));\r\nconst MiningPool_json_1 = __importDefault(require(\"../abi/MiningPool.json\"));\r\nconst Snapshot_json_1 = __importDefault(require(\"../abi/Snapshot.json\"));\r\nconst ValidatorPool_json_1 = __importDefault(require(\"../abi/ValidatorPool.json\"));\r\nconst Fees_json_1 = __importDefault(require(\"../abi/Fees.json\"));\r\nconst FTXToken_json_1 = __importDefault(require(\"../abi/FTXToken.json\"));\r\nconst FTXStaking_json_1 = __importDefault(require(\"../abi/FTXStaking.json\"));\r\nconst FTXPriceFeed_json_1 = __importDefault(require(\"../abi/FTXPriceFeed.json\"));\r\nconst KYCManager_json_1 = __importDefault(require(\"../abi/KYCManager.json\"));\r\nconst FETHToken_json_1 = __importDefault(require(\"../abi/FETHToken.json\"));\r\nconst F2ESwap_json_1 = __importDefault(require(\"../abi/F2ESwap.json\"));\r\nconst MultiSigWallet_json_1 = __importDefault(require(\"../abi/MultiSigWallet.json\"));\r\nconst MultipleDeposit_json_1 = __importDefault(require(\"../abi/MultipleDeposit.json\"));\r\nconst buildEstimatedFunctions = (estimateFunctions, functions) => Object.fromEntries(Object.keys(estimateFunctions).map(functionName => [\r\n functionName,\r\n async (overrides, adjustEstimate, ...args) => {\r\n if (overrides.gasLimit === undefined) {\r\n const estimatedGas = await estimateFunctions[functionName](...args, overrides);\r\n overrides = {\r\n ...overrides,\r\n gasLimit: adjustEstimate(estimatedGas)\r\n };\r\n }\r\n return functions[functionName](...args, overrides);\r\n }\r\n]));\r\nclass _LiquityContract extends contracts_1.Contract {\r\n constructor(addressOrName, contractInterface, signerOrProvider) {\r\n super(addressOrName, contractInterface, signerOrProvider);\r\n // this.estimateAndCall = buildEstimatedFunctions(this.estimateGas, this);\r\n this.estimateAndPopulate = buildEstimatedFunctions(this.estimateGas, this.populateTransaction);\r\n }\r\n extractEvents(logs, name) {\r\n return logs\r\n .filter(log => log.address === this.address)\r\n .map(log => this.interface.parseLog(log))\r\n .filter(e => e.name === name);\r\n }\r\n}\r\nexports._LiquityContract = _LiquityContract;\r\n/** @internal */\r\nconst _priceFeedIsTestnet = (priceFeed) => \"setPrice\" in priceFeed;\r\nexports._priceFeedIsTestnet = _priceFeedIsTestnet;\r\nconst getAbi = (priceFeedIsTestnet) => ({\r\n activePool: ActivePool_json_1.default,\r\n borrowerOperations: BorrowerOperations_json_1.default,\r\n cacheManager: CacheManager_json_1.default,\r\n paydToken: PAYDToken_json_1.default,\r\n defaultPool: DefaultPool_json_1.default,\r\n hintHelpers: HintHelpers_json_1.default,\r\n multiCacheGetter: MultiCacheGetter_json_1.default,\r\n priceFeed: priceFeedIsTestnet ? PriceFeedTestnet_json_1.default : PriceFeed_json_1.default,\r\n sortedCaches: SortedCaches_json_1.default,\r\n rewardsPool: RewardsPool_json_1.default,\r\n gasPool: GasPool_json_1.default,\r\n collSurplusPool: CollSurplusPool_json_1.default,\r\n miningPool: MiningPool_json_1.default,\r\n snapshot: Snapshot_json_1.default,\r\n validatorPool: ValidatorPool_json_1.default,\r\n fees: Fees_json_1.default,\r\n ftxToken: FTXToken_json_1.default,\r\n ftxStaking: FTXStaking_json_1.default,\r\n ftxPriceFeed: FTXPriceFeed_json_1.default,\r\n kycManager: KYCManager_json_1.default,\r\n fethToken: FETHToken_json_1.default,\r\n f2eSwap: F2ESwap_json_1.default,\r\n liquidationWallet: DefaultPool_json_1.default,\r\n redeemWallet: DefaultPool_json_1.default,\r\n stakingWallet: DefaultPool_json_1.default,\r\n miningWallet: DefaultPool_json_1.default,\r\n f2eSwapWallet: DefaultPool_json_1.default,\r\n multiSigWallet: MultiSigWallet_json_1.default,\r\n eoaMultiSigWallet: MultiSigWallet_json_1.default,\r\n multipleDeposit: MultipleDeposit_json_1.default,\r\n});\r\nconst mapLiquityContracts = (contracts, f) => Object.fromEntries(Object.entries(contracts).map(([key, t]) => [key, f(t, key)]));\r\n/** @internal */\r\nconst _connectToContracts = (signerOrProvider, { addresses, _priceFeedIsTestnet }) => {\r\n const abi = getAbi(_priceFeedIsTestnet);\r\n return mapLiquityContracts(addresses, (address, key) => new _LiquityContract(address, abi[key], signerOrProvider));\r\n};\r\nexports._connectToContracts = _connectToContracts;\r\n//# sourceMappingURL=contracts.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ReadableEthersLiquity = void 0;\r\nconst bignumber_1 = require(\"@ethersproject/bignumber\");\r\nconst lib_base_1 = require(\"@liquity/lib-base\");\r\nconst _utils_1 = require(\"./_utils\");\r\nconst EthersLiquityConnection_1 = require(\"./EthersLiquityConnection\");\r\nconst BlockPolledLiquityStore_1 = require(\"./BlockPolledLiquityStore\");\r\n// TODO: these are constant in the contracts, so it doesn't make sense to make a call for them,\r\n// but to avoid having to update them here when we change them in the contracts, we could read\r\n// them once after deployment and save them to LiquityDeployment.\r\nconst MINUTE_DECAY_FACTOR = lib_base_1.Decimal.from(\"0.999037758833783000\");\r\nconst BETA = lib_base_1.Decimal.from(2);\r\nvar BackendCacheStatus;\r\n(function (BackendCacheStatus) {\r\n BackendCacheStatus[BackendCacheStatus[\"nonExistent\"] = 0] = \"nonExistent\";\r\n BackendCacheStatus[BackendCacheStatus[\"active\"] = 1] = \"active\";\r\n BackendCacheStatus[BackendCacheStatus[\"closedByOwner\"] = 2] = \"closedByOwner\";\r\n BackendCacheStatus[BackendCacheStatus[\"closedByLiquidation\"] = 3] = \"closedByLiquidation\";\r\n BackendCacheStatus[BackendCacheStatus[\"closedByRedemption\"] = 4] = \"closedByRedemption\";\r\n})(BackendCacheStatus || (BackendCacheStatus = {}));\r\nconst userCacheStatusFrom = (backendStatus) => backendStatus === BackendCacheStatus.nonExistent\r\n ? \"nonExistent\"\r\n : backendStatus === BackendCacheStatus.active\r\n ? \"open\"\r\n : backendStatus === BackendCacheStatus.closedByOwner\r\n ? \"closedByOwner\"\r\n : backendStatus === BackendCacheStatus.closedByLiquidation\r\n ? \"closedByLiquidation\"\r\n : backendStatus === BackendCacheStatus.closedByRedemption\r\n ? \"closedByRedemption\"\r\n : _utils_1.panic(new Error(`invalid backendStatus ${backendStatus}`));\r\nconst convertToDate = (timestamp) => new Date(timestamp * 1000);\r\nconst validSortingOptions = [\"ascendingCollateralRatio\", \"descendingCollateralRatio\"];\r\nconst expectPositiveInt = (obj, key) => {\r\n if (obj[key] !== undefined) {\r\n if (!Number.isInteger(obj[key])) {\r\n throw new Error(`${key} must be an integer`);\r\n }\r\n if (obj[key] < 0) {\r\n throw new Error(`${key} must not be negative`);\r\n }\r\n }\r\n};\r\n/**\r\n * Ethers-based implementation of {@link @liquity/lib-base#ReadableLiquity}.\r\n *\r\n * @public\r\n */\r\nclass ReadableEthersLiquity {\r\n /** @internal */\r\n constructor(connection) {\r\n this.connection = connection;\r\n }\r\n /** @internal */\r\n static _from(connection) {\r\n const readable = new ReadableEthersLiquity(connection);\r\n return connection.useStore === \"blockPolled\"\r\n ? new _BlockPolledReadableEthersLiquity(readable)\r\n : readable;\r\n }\r\n /**\r\n * Connect to the Liquity protocol and create a `ReadableEthersLiquity` object.\r\n *\r\n * @param signerOrProvider - Ethers `Signer` or `Provider` to use for connecting to the Ethereum\r\n * network.\r\n * @param optionalParams - Optional parameters that can be used to customize the connection.\r\n */\r\n static async connect(signerOrProvider, optionalParams) {\r\n return ReadableEthersLiquity._from(await EthersLiquityConnection_1._connect(signerOrProvider, optionalParams));\r\n }\r\n hasStore() {\r\n return false;\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getTotalRedistributed} */\r\n async getTotalRedistributed(overrides) {\r\n const { cacheManager } = EthersLiquityConnection_1._getContracts(this.connection);\r\n const [collateral, debt] = await Promise.all([\r\n cacheManager.L_ETH({ ...overrides }).then(_utils_1.decimalify),\r\n cacheManager.L_PAYDDebt({ ...overrides }).then(_utils_1.decimalify)\r\n ]);\r\n return new lib_base_1.Cache(collateral, debt);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getCacheBeforeRedistribution} */\r\n async getCacheBeforeRedistribution(address, overrides) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this.connection));\r\n const { cacheManager } = EthersLiquityConnection_1._getContracts(this.connection);\r\n const [cache, snapshot, compounded, loss] = await Promise.all([\r\n cacheManager.Caches(address, { ...overrides }),\r\n cacheManager.rewardSnapshots(address, { ...overrides }),\r\n cacheManager.getCompoundedPAYDDeposit(address),\r\n cacheManager.getDepositorETHLoss(address)\r\n ]);\r\n if (cache.status === BackendCacheStatus.active) {\r\n return new lib_base_1.CacheWithPendingRedistribution(address, userCacheStatusFrom(cache.status), _utils_1.decimalify(cache.coll), _utils_1.decimalify(cache.debt), _utils_1.decimalify(cache.stake), new lib_base_1.Cache(_utils_1.decimalify(snapshot.ETH), _utils_1.decimalify(snapshot.PAYDDebt)), _utils_1.decimalify(compounded), _utils_1.decimalify(loss));\r\n }\r\n else {\r\n return new lib_base_1.CacheWithPendingRedistribution(address, userCacheStatusFrom(cache.status));\r\n }\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getCache} */\r\n async getCache(address, overrides) {\r\n const [cache, totalRedistributed] = await Promise.all([\r\n this.getCacheBeforeRedistribution(address, overrides),\r\n this.getTotalRedistributed(overrides)\r\n ]);\r\n return cache.applyRedistribution(totalRedistributed);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getNumberOfCaches} */\r\n async getNumberOfCaches(overrides) {\r\n const { cacheManager } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return (await cacheManager.getCacheOwnersCount({ ...overrides })).toNumber();\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getPrice} */\r\n getPrice(overrides) {\r\n const { priceFeed } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return priceFeed.callStatic.fetchPrice({ ...overrides }).then(_utils_1.decimalify);\r\n }\r\n getFTXPrice(overrides) {\r\n const { ftxPriceFeed } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return ftxPriceFeed.callStatic.fetchPrice({ ...overrides }).then(_utils_1.decimalify);\r\n }\r\n /** @internal */\r\n async _getActivePool(overrides) {\r\n const { activePool } = EthersLiquityConnection_1._getContracts(this.connection);\r\n const [activeCollateral, activeDebt] = await Promise.all([\r\n activePool.getETH({ ...overrides }),\r\n activePool.getPAYDDebt({ ...overrides })\r\n ].map(getBigNumber => getBigNumber.then(_utils_1.decimalify)));\r\n return new lib_base_1.Cache(activeCollateral, activeDebt);\r\n }\r\n /** @internal */\r\n async _getDefaultPool(overrides) {\r\n const { defaultPool } = EthersLiquityConnection_1._getContracts(this.connection);\r\n const [liquidatedCollateral, closedDebt] = await Promise.all([\r\n defaultPool.getETH({ ...overrides }),\r\n defaultPool.getPAYDDebt({ ...overrides })\r\n ].map(getBigNumber => getBigNumber.then(_utils_1.decimalify)));\r\n return new lib_base_1.Cache(liquidatedCollateral, closedDebt);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getTotal} */\r\n async getTotal(overrides) {\r\n const [activePool, defaultPool] = await Promise.all([\r\n this._getActivePool(overrides),\r\n this._getDefaultPool(overrides)\r\n ]);\r\n return activePool.add(defaultPool);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getStabilityDeposit} */\r\n async getStabilityDeposit(address, overrides) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this.connection));\r\n const { rewardsPool } = EthersLiquityConnection_1._getContracts(this.connection);\r\n const [initialValue, currentPAYD, collateralGain, rewardsPaid,] = await Promise.all([\r\n rewardsPool.deposits(address, { ...overrides }),\r\n rewardsPool.getCompoundedPAYDDeposit(address, { ...overrides }),\r\n rewardsPool.getDepositorETHGain(address, { ...overrides }),\r\n rewardsPool.paid(address, { ...overrides }),\r\n ]);\r\n return new lib_base_1.StabilityDeposit(_utils_1.decimalify(initialValue), _utils_1.decimalify(currentPAYD), _utils_1.decimalify(collateralGain), lib_base_1.Decimal.ZERO, _utils_1.decimalify(rewardsPaid), _utils_1.decimalify(bignumber_1.BigNumber.from(0)), \"\");\r\n }\r\n async getFTXStake(address, overrides) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this.connection));\r\n const { ftxStaking } = EthersLiquityConnection_1._getContracts(this.connection);\r\n const [currentStake, stakePeriod, discount] = await Promise.all([\r\n ftxStaking.stakes(address, { ...overrides }),\r\n ftxStaking.stakePeriod(),\r\n ftxStaking.getDiscountTier(address, { ...overrides }),\r\n ]);\r\n const since = currentStake.since.toNumber();\r\n const tier = discount[0];\r\n const percentage = discount[1];\r\n return new lib_base_1.FTXStake(_utils_1.decimalify(currentStake.amount), since > 0 ? convertToDate(since) : undefined, since > 0 ? convertToDate(since + stakePeriod.toNumber()) : undefined, _utils_1.numberify(tier), _utils_1.numberify(percentage));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getPAYDInRewardsPool} */\r\n getPAYDInRewardsPool(overrides) {\r\n const { rewardsPool } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return rewardsPool.getTotalPAYDDeposits({ ...overrides }).then(_utils_1.decimalify);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getPAYDBalance} */\r\n getPAYDBalance(address, overrides) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this.connection));\r\n const { paydToken } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return paydToken.balanceOf(address, { ...overrides }).then(_utils_1.decimalify);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getFTXBalance} */\r\n getFTXBalance(address, overrides) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this.connection));\r\n const { ftxToken } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return ftxToken.balanceOf(address, { ...overrides }).then(_utils_1.decimalify);\r\n }\r\n getFTXAllowance(address, spender, overrides) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this.connection));\r\n const { ftxToken } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return ftxToken.allowance(address, spender !== null && spender !== void 0 ? spender : \"\", { ...overrides }).then(_utils_1.decimalify);\r\n }\r\n getFETHBalance(address, overrides) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this.connection));\r\n const { fethToken } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return fethToken.balanceOf(address, { ...overrides }).then(_utils_1.decimalify);\r\n }\r\n getETHClaimAmount(address, overrides) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this.connection));\r\n const { f2eSwap } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return f2eSwap.getETHClaimAmount(address, { ...overrides }).then(_utils_1.decimalify);\r\n }\r\n getFETHDepositAmount(address, overrides) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this.connection));\r\n const { f2eSwap } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return f2eSwap.getFETHDepositAmount(address, { ...overrides }).then(_utils_1.decimalify);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getCollateralSurplusBalance} */\r\n getCollateralSurplusBalance(address, overrides) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this.connection));\r\n const { collSurplusPool } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return collSurplusPool.getCollateral(address, { ...overrides }).then(_utils_1.decimalify);\r\n }\r\n async getCaches(params, overrides) {\r\n var _a, _b;\r\n const { multiCacheGetter } = EthersLiquityConnection_1._getContracts(this.connection);\r\n expectPositiveInt(params, \"first\");\r\n expectPositiveInt(params, \"startingAt\");\r\n if (!validSortingOptions.includes(params.sortedBy)) {\r\n throw new Error(`sortedBy must be one of: ${validSortingOptions.map(x => `\"${x}\"`).join(\", \")}`);\r\n }\r\n const [totalRedistributed, backendCaches] = await Promise.all([\r\n params.beforeRedistribution ? undefined : this.getTotalRedistributed({ ...overrides }),\r\n multiCacheGetter.getMultipleSortedCaches(params.sortedBy === \"descendingCollateralRatio\"\r\n ? (_a = params.startingAt) !== null && _a !== void 0 ? _a : 0 : -(((_b = params.startingAt) !== null && _b !== void 0 ? _b : 0) + 1), params.first, { ...overrides })\r\n ]);\r\n const caches = mapBackendCaches(backendCaches);\r\n if (totalRedistributed) {\r\n return caches.map(cache => cache.applyRedistribution(totalRedistributed));\r\n }\r\n else {\r\n return caches;\r\n }\r\n }\r\n /** @internal */\r\n _getBlockTimestamp(blockTag) {\r\n return EthersLiquityConnection_1._getBlockTimestamp(this.connection, blockTag);\r\n }\r\n /** @internal */\r\n async _getFeesFactory(overrides) {\r\n const { fees } = EthersLiquityConnection_1._getContracts(this.connection);\r\n // const [lastFeeOperationTime, baseRateWithoutDecay] = await Promise.all([\r\n // fees.lastFeeOperationTime({ ...overrides }),\r\n // fees.baseRate({ ...overrides }).then(decimalify)\r\n // ]);\r\n const [lastFeeOperationTime, baseRateWithoutDecay] = [bignumber_1.BigNumber.from(Math.round(Date.now() / 1000)), lib_base_1.Decimal.from(1)];\r\n return (blockTimestamp, recoveryMode) => new lib_base_1.Fees(baseRateWithoutDecay, MINUTE_DECAY_FACTOR, BETA, convertToDate(lastFeeOperationTime.toNumber()), convertToDate(blockTimestamp), recoveryMode);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getFees} */\r\n async getFees(overrides) {\r\n const [createFees, total, price, blockTimestamp] = await Promise.all([\r\n this._getFeesFactory(overrides),\r\n this.getTotal(overrides),\r\n this.getPrice(overrides),\r\n this._getBlockTimestamp(overrides === null || overrides === void 0 ? void 0 : overrides.blockTag)\r\n ]);\r\n return createFees(blockTimestamp, total.collateralRatioIsBelowCritical(price));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getTotalStakedETH} */\r\n async getTotalStakedETH(overrides) {\r\n const { fethToken } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return fethToken.amountStaked({ ...overrides }).then(_utils_1.decimalify);\r\n }\r\n async getTotalLifetimeLiquidations(overrides) {\r\n const { rewardsPool } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return rewardsPool.totalLifetimeLiquidations({ ...overrides }).then(_utils_1.decimalify);\r\n }\r\n async getTotalLifetimeStakingRewards(overrides) {\r\n const { rewardsPool } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return rewardsPool.totalLifetimeStakingRewards({ ...overrides }).then(_utils_1.decimalify);\r\n }\r\n async getTotalLifetimeMiningRewards(overrides) {\r\n const { rewardsPool } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return rewardsPool.totalLifetimeMiningRewards({ ...overrides }).then(_utils_1.decimalify);\r\n }\r\n async getCurrentRewards(overrides) {\r\n const { rewardsPool } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return rewardsPool.currentRewards({ ...overrides }).then(_utils_1.decimalify);\r\n }\r\n async getTotalRewardsDistributed(overrides) {\r\n const { rewardsPool } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return rewardsPool.totalPaid({ ...overrides }).then(_utils_1.decimalify);\r\n }\r\n async getUnfilledFETHInQueue(overrides) {\r\n const { f2eSwap } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return f2eSwap.unfilledFETHInQueue({ ...overrides }).then(_utils_1.decimalify);\r\n }\r\n async getDeactivatedETHInProgress(overrides) {\r\n const { f2eSwap } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return f2eSwap.deactivatedETHInProgress({ ...overrides }).then(_utils_1.decimalify);\r\n }\r\n async getClaimableETH(overrides) {\r\n const { f2eSwap } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return f2eSwap.claimableETH({ ...overrides }).then(_utils_1.decimalify);\r\n }\r\n async getAvailableValidators(overrides) {\r\n const { fethToken } = EthersLiquityConnection_1._getContracts(this.connection);\r\n return (await fethToken.availableValidatorsCount({ ...overrides })).toNumber();\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getFrontendStatus} */\r\n async getFrontendStatus(address, overrides) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireFrontendAddress(this.connection));\r\n //const { rewardsPool } = _getContracts(this.connection);\r\n //const { registered, kickbackRate } = await rewardsPool.frontEnds(address, { ...overrides });\r\n // return registered\r\n // ? { status: \"registered\", kickbackRate: decimalify(kickbackRate) }\r\n // : { status: \"unregistered\" };\r\n if (address == null || overrides == null)\r\n return { status: \"unregistered\" };\r\n else\r\n return { status: \"unregistered\" };\r\n }\r\n}\r\nexports.ReadableEthersLiquity = ReadableEthersLiquity;\r\nconst mapBackendCaches = (caches) => caches.map(cache => new lib_base_1.CacheWithPendingRedistribution(cache.owner, \"open\", // These Caches are coming from the SortedCaches list, so they must be open\r\n_utils_1.decimalify(cache.coll), _utils_1.decimalify(cache.debt), _utils_1.decimalify(cache.stake), new lib_base_1.Cache(_utils_1.decimalify(cache.snapshotETH), _utils_1.decimalify(cache.snapshotPAYDDebt))));\r\nclass _BlockPolledReadableEthersLiquity {\r\n constructor(readable) {\r\n const store = new BlockPolledLiquityStore_1.BlockPolledLiquityStore(readable);\r\n this.store = store;\r\n this.connection = readable.connection;\r\n this._readable = readable;\r\n }\r\n _blockHit(overrides) {\r\n return (!overrides ||\r\n overrides.blockTag === undefined ||\r\n overrides.blockTag === this.store.state.blockTag);\r\n }\r\n _userHit(address, overrides) {\r\n return (this._blockHit(overrides) &&\r\n (address === undefined || address === this.store.connection.userAddress));\r\n }\r\n _frontendHit(address, overrides) {\r\n return (this._blockHit(overrides) &&\r\n (address === undefined || address === this.store.connection.frontendTag));\r\n }\r\n hasStore(store) {\r\n return store === undefined || store === \"blockPolled\";\r\n }\r\n async getTotalRedistributed(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.totalRedistributed\r\n : this._readable.getTotalRedistributed(overrides);\r\n }\r\n async getCacheBeforeRedistribution(address, overrides) {\r\n return this._userHit(address, overrides)\r\n ? this.store.state.cacheBeforeRedistribution\r\n : this._readable.getCacheBeforeRedistribution(address, overrides);\r\n }\r\n async getCache(address, overrides) {\r\n return this._userHit(address, overrides)\r\n ? this.store.state.cache\r\n : this._readable.getCache(address, overrides);\r\n }\r\n async getNumberOfCaches(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.numberOfCaches\r\n : this._readable.getNumberOfCaches(overrides);\r\n }\r\n async getPrice(overrides) {\r\n return this._blockHit(overrides) ? this.store.state.price : this._readable.getPrice(overrides);\r\n }\r\n async getFTXPrice(overrides) {\r\n return this._blockHit(overrides) ? this.store.state.ftxPrice : this._readable.getFTXPrice(overrides);\r\n }\r\n async getTotal(overrides) {\r\n return this._blockHit(overrides) ? this.store.state.total : this._readable.getTotal(overrides);\r\n }\r\n async getStabilityDeposit(address, overrides) {\r\n return this._userHit(address, overrides)\r\n ? this.store.state.stabilityDeposit\r\n : this._readable.getStabilityDeposit(address, overrides);\r\n }\r\n async getFTXStake(address, overrides) {\r\n return this._userHit(address, overrides)\r\n ? this.store.state.ftxStake\r\n : this._readable.getFTXStake(address, overrides);\r\n }\r\n async getPAYDInRewardsPool(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.paydInRewardsPool\r\n : this._readable.getPAYDInRewardsPool(overrides);\r\n }\r\n async getPAYDBalance(address, overrides) {\r\n return this._userHit(address, overrides)\r\n ? this.store.state.paydBalance\r\n : this._readable.getPAYDBalance(address, overrides);\r\n }\r\n async getFTXBalance(address, overrides) {\r\n return this._userHit(address, overrides)\r\n ? this.store.state.ftxInventoryBalance\r\n : this._readable.getFTXBalance(address, overrides);\r\n }\r\n async getAvailableValidators(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.availableValidators\r\n : this._readable.getAvailableValidators(overrides);\r\n }\r\n async getFTXAllowance(address, spender, overrides) {\r\n return this._userHit(address, overrides)\r\n ? this.store.state.ftxAllowance\r\n : this._readable.getFTXAllowance(address, spender, overrides);\r\n }\r\n async getFETHBalance(address, overrides) {\r\n return this._userHit(address, overrides)\r\n ? this.store.state.fethBalance\r\n : this._readable.getFETHBalance(address, overrides);\r\n }\r\n async getETHClaimAmount(address, overrides) {\r\n return this._userHit(address, overrides)\r\n ? this.store.state.ethSwapClaim\r\n : this._readable.getETHClaimAmount(address, overrides);\r\n }\r\n async getFETHDepositAmount(address, overrides) {\r\n return this._userHit(address, overrides)\r\n ? this.store.state.fethSwapDeposit\r\n : this._readable.getFETHDepositAmount(address, overrides);\r\n }\r\n async getCollateralSurplusBalance(address, overrides) {\r\n return this._userHit(address, overrides)\r\n ? this.store.state.collateralSurplusBalance\r\n : this._readable.getCollateralSurplusBalance(address, overrides);\r\n }\r\n async _getBlockTimestamp(blockTag) {\r\n return this._blockHit({ blockTag })\r\n ? this.store.state.blockTimestamp\r\n : this._readable._getBlockTimestamp(blockTag);\r\n }\r\n async _getFeesFactory(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state._feesFactory\r\n : this._readable._getFeesFactory(overrides);\r\n }\r\n async getFees(overrides) {\r\n return this._blockHit(overrides) ? this.store.state.fees : this._readable.getFees(overrides);\r\n }\r\n async getTotalStakedETH(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.totalStakedETH\r\n : this._readable.getTotalStakedETH(overrides);\r\n }\r\n async getTotalLifetimeLiquidations(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.totalLifetimeLiquidations\r\n : this._readable.getTotalLifetimeLiquidations(overrides);\r\n }\r\n async getTotalLifetimeStakingRewards(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.totalLifetimeStakingRewards\r\n : this._readable.getTotalLifetimeStakingRewards(overrides);\r\n }\r\n async getTotalLifetimeMiningRewards(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.totalLifetimeMiningRewards\r\n : this._readable.getTotalLifetimeMiningRewards(overrides);\r\n }\r\n async getCurrentRewards(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.currentRewards\r\n : this._readable.getCurrentRewards(overrides);\r\n }\r\n async getTotalRewardsDistributed(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.totalRewardsDistributed\r\n : this._readable.getTotalRewardsDistributed(overrides);\r\n }\r\n async getUnfilledFETHInQueue(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.unfilledFETHInQueue\r\n : this._readable.getUnfilledFETHInQueue(overrides);\r\n }\r\n async getDeactivatedETHInProgress(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.deactivatedETHInProgress\r\n : this._readable.getDeactivatedETHInProgress(overrides);\r\n }\r\n async getClaimableETH(overrides) {\r\n return this._blockHit(overrides)\r\n ? this.store.state.claimableETH\r\n : this._readable.getClaimableETH(overrides);\r\n }\r\n async getFrontendStatus(address, overrides) {\r\n return this._frontendHit(address, overrides)\r\n ? this.store.state.frontend\r\n : this._readable.getFrontendStatus(address, overrides);\r\n }\r\n getCaches(params, overrides) {\r\n return this._readable.getCaches(params, overrides);\r\n }\r\n _getActivePool() {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n _getDefaultPool() {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n _getRemainingLiquidityMiningLQTYRewardCalculator() {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n}\r\n//# sourceMappingURL=ReadableEthersLiquity.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.BlockPolledLiquityStore = void 0;\r\nconst constants_1 = require(\"@ethersproject/constants\");\r\nconst lib_base_1 = require(\"@liquity/lib-base\");\r\nconst _utils_1 = require(\"./_utils\");\r\nconst EthersLiquityConnection_1 = require(\"./EthersLiquityConnection\");\r\n/**\r\n * Ethers-based {@link @liquity/lib-base#LiquityStore} that updates state whenever there's a new\r\n * block.\r\n *\r\n * @public\r\n */\r\nclass BlockPolledLiquityStore extends lib_base_1.LiquityStore {\r\n constructor(readable) {\r\n super();\r\n this.connection = readable.connection;\r\n this._readable = readable;\r\n this._provider = EthersLiquityConnection_1._getProvider(readable.connection);\r\n this._requestRefreshOn = new Date();\r\n this._refreshedOn = new Date(this._requestRefreshOn.getTime() - 1);\r\n this._storeRefreshInterval = readable.connection.storeRefreshInterval;\r\n this._lastBaseState = {\r\n frontend: { status: \"unregistered\" },\r\n ownFrontend: { status: \"unregistered\" },\r\n numberOfCaches: 0,\r\n accountBalance: lib_base_1.Decimal.ZERO,\r\n paydBalance: lib_base_1.Decimal.ZERO,\r\n ftxBalance: lib_base_1.Decimal.ZERO,\r\n ftxAllowance: lib_base_1.Decimal.ZERO,\r\n fethBalance: lib_base_1.Decimal.ZERO,\r\n fethSwapDeposit: lib_base_1.Decimal.ZERO,\r\n ethSwapClaim: lib_base_1.Decimal.ZERO,\r\n collateralSurplusBalance: lib_base_1.Decimal.ZERO,\r\n price: lib_base_1.Decimal.ZERO,\r\n ftxPrice: lib_base_1.Decimal.ZERO,\r\n paydInRewardsPool: lib_base_1.Decimal.ZERO,\r\n total: new lib_base_1.Cache(lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO),\r\n totalRedistributed: new lib_base_1.Cache(lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO),\r\n cacheBeforeRedistribution: new lib_base_1.CacheWithPendingRedistribution(constants_1.AddressZero, \"nonExistent\"),\r\n stabilityDeposit: new lib_base_1.StabilityDeposit(lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, constants_1.AddressZero),\r\n ftxStake: new lib_base_1.FTXStake(),\r\n _feesInNormalMode: new lib_base_1.Fees(0, 0, 0, new Date(), new Date(), true),\r\n totalStakedETH: lib_base_1.Decimal.ZERO,\r\n totalLifetimeLiquidations: lib_base_1.Decimal.ZERO,\r\n totalLifetimeStakingRewards: lib_base_1.Decimal.ZERO,\r\n totalLifetimeMiningRewards: lib_base_1.Decimal.ZERO,\r\n currentRewards: lib_base_1.Decimal.ZERO,\r\n validatorAmt: lib_base_1.Decimal.ZERO,\r\n rewardEthAmt: lib_base_1.Decimal.ZERO,\r\n totalRewardsDistributed: lib_base_1.Decimal.ZERO,\r\n unfilledFETHInQueue: lib_base_1.Decimal.ZERO,\r\n deactivatedETHInProgress: lib_base_1.Decimal.ZERO,\r\n claimableETH: lib_base_1.Decimal.ZERO,\r\n openCacheFeeBalance: lib_base_1.Decimal.ZERO,\r\n topupCacheFeeBalance: lib_base_1.Decimal.ZERO,\r\n paydSwapFeeBalance: lib_base_1.Decimal.ZERO,\r\n fethSwapFeeBalance: lib_base_1.Decimal.ZERO,\r\n liquidationFeeBalance: lib_base_1.Decimal.ZERO,\r\n liquidationDepositBalance: lib_base_1.Decimal.ZERO,\r\n stakingFeeBalance: lib_base_1.Decimal.ZERO,\r\n miningFeeBalance: lib_base_1.Decimal.ZERO,\r\n charityWalletFETH: lib_base_1.Decimal.ZERO,\r\n charityWalletPAYD: lib_base_1.Decimal.ZERO,\r\n ftxInventoryBalance: lib_base_1.Decimal.ZERO,\r\n availableValidators: 0,\r\n _riskiestCacheBeforeRedistribution: new lib_base_1.CacheWithPendingRedistribution(\"0x0000000000000000000000000000000000000000\", \"nonExistent\", lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO),\r\n };\r\n this._lastExtraState = {\r\n blockTag: 0,\r\n blockTimestamp: 0,\r\n _feesFactory: (blockTimestamp, recoveryMode) => new lib_base_1.Fees(blockTimestamp > 0 && recoveryMode ? 0 : 1, 0, 0, new Date(), new Date(), true)\r\n };\r\n }\r\n async _getRiskiestCacheBeforeRedistribution(overrides) {\r\n const riskiestCaches = await this._readable.getCaches({ first: 1, sortedBy: \"ascendingCollateralRatio\", beforeRedistribution: true }, overrides);\r\n if (riskiestCaches.length === 0) {\r\n return new lib_base_1.CacheWithPendingRedistribution(constants_1.AddressZero, \"nonExistent\");\r\n }\r\n return riskiestCaches[0];\r\n }\r\n refresh() {\r\n this._requestRefreshOn = new Date();\r\n console.log(`request refresh liquity store status ${this._requestRefreshOn.toString()}`);\r\n }\r\n async _get(blockTag) {\r\n var _a;\r\n const { userAddress, frontendTag, addresses } = this.connection;\r\n const { rewardsPool, redeemWallet, stakingWallet, f2eSwapWallet, miningWallet, validatorPool, ftxStaking, liquidationWallet } = addresses;\r\n const [expiredFor, age] = [\r\n this._requestRefreshOn.getTime() - this._refreshedOn.getTime(),\r\n (new Date()).getTime() - this._refreshedOn.getTime(),\r\n ];\r\n //const MIN_REFRESH_INTERVAL_IN_SECONDS = 61; // 120 is a better time for production\r\n const MIN_REFRESH_INTERVAL_IN_SECONDS = 0; // 120 is a better time for production\r\n let storeRefreshInterval = (_a = this._storeRefreshInterval) !== null && _a !== void 0 ? _a : MIN_REFRESH_INTERVAL_IN_SECONDS;\r\n storeRefreshInterval = storeRefreshInterval < MIN_REFRESH_INTERVAL_IN_SECONDS ? MIN_REFRESH_INTERVAL_IN_SECONDS : storeRefreshInterval;\r\n if ( // manual refresh request\r\n expiredFor > 0\r\n ||\r\n // older than 120s\r\n age >= storeRefreshInterval * 1000) {\r\n console.log(`refresh liquity store ${this._storeRefreshInterval} ${this._requestRefreshOn.toString()} ${this._refreshedOn.toString()} ${expiredFor} ${age}`);\r\n const { blockTimestamp, _feesFactory, ...baseState } = await _utils_1.promiseAllValues({\r\n blockTimestamp: this._readable._getBlockTimestamp(blockTag),\r\n _feesFactory: this._readable._getFeesFactory({ blockTag }),\r\n price: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getPrice({ blockTag }),\r\n ftxPrice: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getFTXPrice({ blockTag }),\r\n numberOfCaches: Promise.resolve((0)) || this._readable.getNumberOfCaches({ blockTag }),\r\n totalRedistributed: Promise.resolve(new lib_base_1.Cache()) || this._readable.getTotalRedistributed({ blockTag }),\r\n total: Promise.resolve(new lib_base_1.Cache()) || this._readable.getTotal({ blockTag }),\r\n paydInRewardsPool: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getPAYDInRewardsPool({ blockTag }),\r\n totalStakedETH: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getTotalStakedETH({ blockTag }),\r\n totalLifetimeLiquidations: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getTotalLifetimeLiquidations({ blockTag }),\r\n totalLifetimeStakingRewards: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getTotalLifetimeStakingRewards({ blockTag }),\r\n totalLifetimeMiningRewards: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getTotalLifetimeMiningRewards({ blockTag }),\r\n currentRewards: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getCurrentRewards({ blockTag }),\r\n validatorAmt: Promise.resolve(lib_base_1.Decimal.from(0)) || this._provider.getBalance(validatorPool, blockTag).then(_utils_1.decimalify),\r\n rewardEthAmt: Promise.resolve(lib_base_1.Decimal.from(0)) || this._provider.getBalance(rewardsPool, blockTag).then(_utils_1.decimalify),\r\n totalRewardsDistributed: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getTotalRewardsDistributed({ blockTag }),\r\n unfilledFETHInQueue: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getUnfilledFETHInQueue({ blockTag }),\r\n deactivatedETHInProgress: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getDeactivatedETHInProgress({ blockTag }),\r\n claimableETH: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getClaimableETH({ blockTag }),\r\n openCacheFeeBalance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getPAYDBalance(\"0x0a81E199Ba61924AfaE5f6FFDce5b77eA1FdB910\", { blockTag }),\r\n topupCacheFeeBalance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getPAYDBalance(\"0x1E7320eb8Ba53D79076bF7df8e3B796aFA0e758D\", { blockTag }),\r\n paydSwapFeeBalance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getFETHBalance(redeemWallet, { blockTag }),\r\n fethSwapFeeBalance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._provider.getBalance(f2eSwapWallet, blockTag).then(_utils_1.decimalify),\r\n liquidationFeeBalance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getFETHBalance(liquidationWallet, { blockTag }),\r\n liquidationDepositBalance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getPAYDBalance(liquidationWallet, { blockTag }),\r\n stakingFeeBalance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getFETHBalance(stakingWallet, { blockTag }),\r\n miningFeeBalance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getFETHBalance(miningWallet, { blockTag }),\r\n charityWalletFETH: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getFETHBalance(\"0x95BDe852E7935dd091801C9a9Fd016335d51387a\", { blockTag }),\r\n charityWalletPAYD: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getPAYDBalance(\"0x95BDe852E7935dd091801C9a9Fd016335d51387a\", { blockTag }),\r\n ftxInventoryBalance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getFTXBalance(\"0x7BDFBE7685B306f2dCF86f7218046252925Ee05d\", { blockTag }),\r\n availableValidators: Promise.resolve((0)) || this._readable.getAvailableValidators({ blockTag }),\r\n _riskiestCacheBeforeRedistribution: Promise.resolve(new lib_base_1.CacheWithPendingRedistribution(constants_1.AddressZero, \"nonExistent\", lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, new lib_base_1.Cache(), lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO)) || this._getRiskiestCacheBeforeRedistribution({ blockTag }),\r\n frontend: frontendTag\r\n ? this._readable.getFrontendStatus(frontendTag, { blockTag })\r\n : { status: \"unregistered\" },\r\n ...(userAddress\r\n ? {\r\n accountBalance: this._provider.getBalance(userAddress, blockTag).then(_utils_1.decimalify),\r\n paydBalance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getPAYDBalance(userAddress, { blockTag }),\r\n ftxBalance: this._readable.getFTXBalance(userAddress, { blockTag }),\r\n ftxAllowance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getFTXAllowance(userAddress, ftxStaking, { blockTag }),\r\n fethBalance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getFETHBalance(userAddress, { blockTag }),\r\n fethSwapDeposit: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getFETHDepositAmount(userAddress, { blockTag }),\r\n ethSwapClaim: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getETHClaimAmount(userAddress, { blockTag }),\r\n collateralSurplusBalance: Promise.resolve(lib_base_1.Decimal.from(0)) || this._readable.getCollateralSurplusBalance(userAddress, {\r\n blockTag\r\n }),\r\n cacheBeforeRedistribution: Promise.resolve(new lib_base_1.CacheWithPendingRedistribution(userAddress, \"nonExistent\", lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, new lib_base_1.Cache(), lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO)) || this._readable.getCacheBeforeRedistribution(userAddress, {\r\n blockTag\r\n }),\r\n stabilityDeposit: Promise.resolve(new lib_base_1.StabilityDeposit(lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, constants_1.AddressZero)) || this._readable.getStabilityDeposit(userAddress, { blockTag }),\r\n ftxStake: Promise.resolve(new lib_base_1.FTXStake()) || this._readable.getFTXStake(userAddress, { blockTag }),\r\n ownFrontend: this._readable.getFrontendStatus(userAddress, { blockTag })\r\n }\r\n : {\r\n accountBalance: lib_base_1.Decimal.ZERO,\r\n paydBalance: lib_base_1.Decimal.ZERO,\r\n ftxBalance: lib_base_1.Decimal.ZERO,\r\n ftxAllowance: lib_base_1.Decimal.ZERO,\r\n fethBalance: lib_base_1.Decimal.ZERO,\r\n fethSwapDeposit: lib_base_1.Decimal.ZERO,\r\n ethSwapClaim: lib_base_1.Decimal.ZERO,\r\n collateralSurplusBalance: lib_base_1.Decimal.ZERO,\r\n cacheBeforeRedistribution: new lib_base_1.CacheWithPendingRedistribution(constants_1.AddressZero, \"nonExistent\"),\r\n stabilityDeposit: new lib_base_1.StabilityDeposit(lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, lib_base_1.Decimal.ZERO, constants_1.AddressZero),\r\n ftxStake: new lib_base_1.FTXStake(),\r\n ownFrontend: { status: \"unregistered\" }\r\n })\r\n });\r\n this._refreshedOn = new Date();\r\n this._lastBaseState = {\r\n ...baseState,\r\n _feesInNormalMode: _feesFactory(blockTimestamp, false),\r\n };\r\n this._lastExtraState = {\r\n blockTag,\r\n blockTimestamp,\r\n _feesFactory\r\n };\r\n }\r\n else {\r\n console.log(`skip liquity store refresh ${this._storeRefreshInterval} ${this._requestRefreshOn} ${this._refreshedOn} ${expiredFor} ${age}`);\r\n }\r\n return [this._lastBaseState, this._lastExtraState];\r\n }\r\n /** @internal @override */\r\n _doStart() {\r\n this._get().then(state => {\r\n if (state && !this._loaded) {\r\n this._load(...state);\r\n }\r\n });\r\n const blockListener = async (blockTag) => {\r\n console.log(`block listening ${blockTag}`);\r\n const state = await this._get(blockTag);\r\n if (this._loaded) {\r\n this._update(...state);\r\n }\r\n else {\r\n this._load(...state);\r\n }\r\n };\r\n this._provider.on(\"block\", blockListener);\r\n return () => {\r\n this._provider.off(\"block\", blockListener);\r\n };\r\n }\r\n /** @internal @override */\r\n _reduceExtra(oldState, stateUpdate) {\r\n var _a, _b, _c;\r\n return {\r\n blockTag: (_a = stateUpdate.blockTag) !== null && _a !== void 0 ? _a : oldState.blockTag,\r\n blockTimestamp: (_b = stateUpdate.blockTimestamp) !== null && _b !== void 0 ? _b : oldState.blockTimestamp,\r\n _feesFactory: (_c = stateUpdate._feesFactory) !== null && _c !== void 0 ? _c : oldState._feesFactory\r\n };\r\n }\r\n}\r\nexports.BlockPolledLiquityStore = BlockPolledLiquityStore;\r\n//# sourceMappingURL=BlockPolledLiquityStore.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.PopulatableEthersLiquity = exports.PopulatedEthersRedemption = exports.PopulatedEthersLiquityTransaction = exports.SentEthersLiquityTransaction = exports.EthersTransactionCancelledError = exports._RawErrorReason = exports._redeemMaxIterations = void 0;\r\nconst assert_1 = __importDefault(require(\"assert\"));\r\nconst constants_1 = require(\"@ethersproject/constants\");\r\nconst logger_1 = require(\"@ethersproject/logger\");\r\nconst lib_base_1 = require(\"@liquity/lib-base\");\r\nconst EthersLiquityConnection_1 = require(\"./EthersLiquityConnection\");\r\nconst _utils_1 = require(\"./_utils\");\r\nconst contracts_1 = require(\"./contracts\");\r\nconst parseLogs_1 = require(\"./parseLogs\");\r\nconst bigNumberMax = (a, b) => ((b === null || b === void 0 ? void 0 : b.gt(a)) ? b : a);\r\n// With 70 iterations redemption costs about ~10M gas, and each iteration accounts for ~138k more\r\n/** @internal */\r\nexports._redeemMaxIterations = 70;\r\nconst defaultBorrowingRateSlippageTolerance = lib_base_1.Decimal.from(0.005); // 0.5%\r\n//const defaultRedemptionRateSlippageTolerance = Decimal.from(0.001); // 0.1%\r\nconst defaultBorrowingFeeDecayToleranceMinutes = 10;\r\nconst noDetails = () => undefined;\r\nconst compose = (f, g) => (_) => f(g(_));\r\nconst id = (t) => t;\r\n// Takes ~6-7K (use 10K to be safe) to update lastFeeOperationTime, but the cost of calculating the\r\n// decayed baseRate increases logarithmically with time elapsed since the last update.\r\nconst addGasForBaseRateUpdate = (maxMinutesSinceLastUpdate = 10) => (gas) => gas.add(10000 + 1414 * Math.ceil(Math.log2(maxMinutesSinceLastUpdate + 1)));\r\n// First traversal in ascending direction takes ~50K, then ~13.5K per extra step.\r\n// 80K should be enough for 3 steps, plus some extra to be safe.\r\nconst addGasForPotentialListTraversal = (gas) => gas.add(80000);\r\nconst addGasForLQTYIssuance = (gas) => gas.add(50000);\r\n// To get the best entropy available, we'd do something like:\r\n//\r\n// const bigRandomNumber = () =>\r\n// BigNumber.from(\r\n// `0x${Array.from(crypto.getRandomValues(new Uint32Array(8)))\r\n// .map(u32 => u32.toString(16).padStart(8, \"0\"))\r\n// .join(\"\")}`\r\n// );\r\n//\r\n// However, Window.crypto is browser-specific. Since we only use this for randomly picking Caches\r\n// during the search for hints, Math.random() will do fine, too.\r\n//\r\n// This returns a random integer between 0 and Number.MAX_SAFE_INTEGER\r\nconst randomInteger = () => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER);\r\n// Maximum number of trials to perform in a single getApproxHint() call. If the number of trials\r\n// required to get a statistically \"good\" hint is larger than this, the search for the hint will\r\n// be broken up into multiple getApproxHint() calls.\r\n//\r\n// This should be low enough to work with popular public Ethereum providers like Infura without\r\n// triggering any fair use limits.\r\nconst maxNumberOfTrialsAtOnce = 2500;\r\nfunction* generateTrials(totalNumberOfTrials) {\r\n assert_1.default(Number.isInteger(totalNumberOfTrials) && totalNumberOfTrials > 0);\r\n while (totalNumberOfTrials) {\r\n const numberOfTrials = Math.min(totalNumberOfTrials, maxNumberOfTrialsAtOnce);\r\n yield numberOfTrials;\r\n totalNumberOfTrials -= numberOfTrials;\r\n }\r\n}\r\n/** @internal */\r\nvar _RawErrorReason;\r\n(function (_RawErrorReason) {\r\n _RawErrorReason[\"TRANSACTION_FAILED\"] = \"transaction failed\";\r\n _RawErrorReason[\"TRANSACTION_CANCELLED\"] = \"cancelled\";\r\n _RawErrorReason[\"TRANSACTION_REPLACED\"] = \"replaced\";\r\n _RawErrorReason[\"TRANSACTION_REPRICED\"] = \"repriced\";\r\n})(_RawErrorReason = exports._RawErrorReason || (exports._RawErrorReason = {}));\r\nconst transactionReplacementReasons = [\r\n _RawErrorReason.TRANSACTION_CANCELLED,\r\n _RawErrorReason.TRANSACTION_REPLACED,\r\n _RawErrorReason.TRANSACTION_REPRICED\r\n];\r\nconst hasProp = (o, p) => p in o;\r\nconst isTransactionFailedError = (error) => hasProp(error, \"code\") &&\r\n error.code === logger_1.ErrorCode.CALL_EXCEPTION &&\r\n hasProp(error, \"reason\") &&\r\n error.reason === _RawErrorReason.TRANSACTION_FAILED;\r\nconst isTransactionReplacedError = (error) => hasProp(error, \"code\") &&\r\n error.code === logger_1.ErrorCode.TRANSACTION_REPLACED &&\r\n hasProp(error, \"reason\") &&\r\n transactionReplacementReasons.includes(error.reason);\r\n/**\r\n * Thrown when a transaction is cancelled or replaced by a different transaction.\r\n *\r\n * @public\r\n */\r\nclass EthersTransactionCancelledError extends Error {\r\n /** @internal */\r\n constructor(rawError) {\r\n assert_1.default(rawError.reason !== _RawErrorReason.TRANSACTION_REPRICED);\r\n super(`Transaction ${rawError.reason}`);\r\n this.name = \"TransactionCancelledError\";\r\n this.rawReplacementReceipt = rawError.receipt;\r\n this.rawError = rawError;\r\n }\r\n}\r\nexports.EthersTransactionCancelledError = EthersTransactionCancelledError;\r\n/**\r\n * A transaction that has already been sent.\r\n *\r\n * @remarks\r\n * Returned by {@link SendableEthersLiquity} functions.\r\n *\r\n * @public\r\n */\r\nclass SentEthersLiquityTransaction {\r\n /** @internal */\r\n constructor(rawSentTransaction, connection, parse) {\r\n this.rawSentTransaction = rawSentTransaction;\r\n this._connection = connection;\r\n this._parse = parse;\r\n }\r\n _receiptFrom(rawReceipt) {\r\n return rawReceipt\r\n ? rawReceipt.status\r\n ? lib_base_1._successfulReceipt(rawReceipt, this._parse(rawReceipt), () => parseLogs_1.logsToString(rawReceipt, EthersLiquityConnection_1._getContracts(this._connection)))\r\n : lib_base_1._failedReceipt(rawReceipt)\r\n : lib_base_1._pendingReceipt;\r\n }\r\n async _waitForRawReceipt(confirmations) {\r\n try {\r\n return await this.rawSentTransaction.wait(confirmations);\r\n }\r\n catch (error) {\r\n if (error instanceof Error) {\r\n if (isTransactionFailedError(error)) {\r\n return error.receipt;\r\n }\r\n if (isTransactionReplacedError(error)) {\r\n if (error.cancelled) {\r\n throw new EthersTransactionCancelledError(error);\r\n }\r\n else {\r\n return error.receipt;\r\n }\r\n }\r\n }\r\n throw error;\r\n }\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SentLiquityTransaction.getReceipt} */\r\n async getReceipt() {\r\n return this._receiptFrom(await this._waitForRawReceipt(0));\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#SentLiquityTransaction.waitForReceipt}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n async waitForReceipt() {\r\n const receipt = this._receiptFrom(await this._waitForRawReceipt());\r\n assert_1.default(receipt.status !== \"pending\");\r\n return receipt;\r\n }\r\n}\r\nexports.SentEthersLiquityTransaction = SentEthersLiquityTransaction;\r\nconst normalizeBorrowingOperationOptionalParams = (maxBorrowingRateOrOptionalParams, currentBorrowingRate) => {\r\n var _a, _b;\r\n if (maxBorrowingRateOrOptionalParams === undefined) {\r\n return {\r\n maxBorrowingRate: (_a = currentBorrowingRate === null || currentBorrowingRate === void 0 ? void 0 : currentBorrowingRate.add(defaultBorrowingRateSlippageTolerance)) !== null && _a !== void 0 ? _a : lib_base_1.Decimal.ZERO,\r\n borrowingFeeDecayToleranceMinutes: defaultBorrowingFeeDecayToleranceMinutes\r\n };\r\n }\r\n else if (typeof maxBorrowingRateOrOptionalParams === \"number\" ||\r\n typeof maxBorrowingRateOrOptionalParams === \"string\" ||\r\n maxBorrowingRateOrOptionalParams instanceof lib_base_1.Decimal) {\r\n return {\r\n maxBorrowingRate: lib_base_1.Decimal.from(maxBorrowingRateOrOptionalParams),\r\n borrowingFeeDecayToleranceMinutes: defaultBorrowingFeeDecayToleranceMinutes\r\n };\r\n }\r\n else {\r\n const { maxBorrowingRate, borrowingFeeDecayToleranceMinutes } = maxBorrowingRateOrOptionalParams;\r\n return {\r\n maxBorrowingRate: maxBorrowingRate !== undefined\r\n ? lib_base_1.Decimal.from(maxBorrowingRate)\r\n : (_b = currentBorrowingRate === null || currentBorrowingRate === void 0 ? void 0 : currentBorrowingRate.add(defaultBorrowingRateSlippageTolerance)) !== null && _b !== void 0 ? _b : lib_base_1.Decimal.ZERO,\r\n borrowingFeeDecayToleranceMinutes: borrowingFeeDecayToleranceMinutes !== null && borrowingFeeDecayToleranceMinutes !== void 0 ? borrowingFeeDecayToleranceMinutes : defaultBorrowingFeeDecayToleranceMinutes\r\n };\r\n }\r\n};\r\n/**\r\n * A transaction that has been prepared for sending.\r\n *\r\n * @remarks\r\n * Returned by {@link PopulatableEthersLiquity} functions.\r\n *\r\n * @public\r\n */\r\nclass PopulatedEthersLiquityTransaction {\r\n /** @internal */\r\n constructor(rawPopulatedTransaction, connection, parse, gasHeadroom) {\r\n this.rawPopulatedTransaction = rawPopulatedTransaction;\r\n this._connection = connection;\r\n this._parse = parse;\r\n if (gasHeadroom !== undefined) {\r\n this.gasHeadroom = gasHeadroom;\r\n }\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatedLiquityTransaction.send} */\r\n async send() {\r\n return new SentEthersLiquityTransaction(await EthersLiquityConnection_1._requireSigner(this._connection).sendTransaction(this.rawPopulatedTransaction), this._connection, this._parse);\r\n }\r\n}\r\nexports.PopulatedEthersLiquityTransaction = PopulatedEthersLiquityTransaction;\r\n/**\r\n * {@inheritDoc @liquity/lib-base#PopulatedRedemption}\r\n *\r\n * @public\r\n */\r\nclass PopulatedEthersRedemption extends PopulatedEthersLiquityTransaction {\r\n /** @internal */\r\n constructor(rawPopulatedTransaction, connection, attemptedPAYDAmount, redeemablePAYDAmount, increaseAmountByMinimumNetDebt) {\r\n const { cacheManager } = EthersLiquityConnection_1._getContracts(connection);\r\n super(rawPopulatedTransaction, connection, ({ logs }) => cacheManager\r\n .extractEvents(logs, \"Redemption\")\r\n .map(({ args: { _ETHSent, _ETHFee, _actualPAYDAmount, _attemptedPAYDAmount } }) => ({\r\n attemptedPAYDAmount: _utils_1.decimalify(_attemptedPAYDAmount),\r\n actualPAYDAmount: _utils_1.decimalify(_actualPAYDAmount),\r\n collateralTaken: _utils_1.decimalify(_ETHSent),\r\n fee: _utils_1.decimalify(_ETHFee)\r\n }))[0]);\r\n this.attemptedPAYDAmount = attemptedPAYDAmount;\r\n this.redeemablePAYDAmount = redeemablePAYDAmount;\r\n this.isTruncated = redeemablePAYDAmount.lt(attemptedPAYDAmount);\r\n this._increaseAmountByMinimumNetDebt = increaseAmountByMinimumNetDebt;\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatedRedemption.increaseAmountByMinimumNetDebt} */\r\n increaseAmountByMinimumNetDebt(maxRedemptionRate) {\r\n if (!this._increaseAmountByMinimumNetDebt) {\r\n throw new Error(\"PopulatedEthersRedemption: increaseAmountByMinimumNetDebt() can \" +\r\n \"only be called when amount is truncated\");\r\n }\r\n return this._increaseAmountByMinimumNetDebt(maxRedemptionRate);\r\n }\r\n}\r\nexports.PopulatedEthersRedemption = PopulatedEthersRedemption;\r\n/**\r\n * Ethers-based implementation of {@link @liquity/lib-base#PopulatableLiquity}.\r\n *\r\n * @public\r\n */\r\nclass PopulatableEthersLiquity {\r\n constructor(readable) {\r\n this._readable = readable;\r\n }\r\n _wrapSimpleTransaction(rawPopulatedTransaction) {\r\n return new PopulatedEthersLiquityTransaction(rawPopulatedTransaction, this._readable.connection, noDetails);\r\n }\r\n _wrapCacheChangeWithFees(params, rawPopulatedTransaction, gasHeadroom) {\r\n const { borrowerOperations } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return new PopulatedEthersLiquityTransaction(rawPopulatedTransaction, this._readable.connection, ({ logs }) => {\r\n const [newCache] = borrowerOperations\r\n .extractEvents(logs, \"CacheUpdated\")\r\n .map(({ args: { _coll, _debt } }) => new lib_base_1.Cache(_utils_1.decimalify(_coll), _utils_1.decimalify(_debt)));\r\n const [fee] = borrowerOperations\r\n .extractEvents(logs, \"PAYDBorrowingFeePaid\")\r\n .map(({ args: { _PAYDFee } }) => _utils_1.decimalify(_PAYDFee));\r\n return {\r\n params,\r\n newCache,\r\n fee\r\n };\r\n }, gasHeadroom);\r\n }\r\n async _wrapCacheClosure(rawPopulatedTransaction) {\r\n const { activePool, paydToken } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return new PopulatedEthersLiquityTransaction(rawPopulatedTransaction, this._readable.connection, ({ logs, from: userAddress }) => {\r\n const [repayPAYD] = paydToken\r\n .extractEvents(logs, \"Transfer\")\r\n .filter(({ args: { from, to } }) => from === userAddress && to === constants_1.AddressZero)\r\n .map(({ args: { value } }) => _utils_1.decimalify(value));\r\n const [withdrawCollateral] = activePool\r\n .extractEvents(logs, \"EtherSent\")\r\n .filter(({ args: { _to } }) => _to === userAddress)\r\n .map(({ args: { _amount } }) => _utils_1.decimalify(_amount));\r\n return {\r\n params: repayPAYD.nonZero ? { withdrawCollateral, repayPAYD } : { withdrawCollateral }\r\n };\r\n });\r\n }\r\n _wrapLiquidation(rawPopulatedTransaction) {\r\n const { cacheManager } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return new PopulatedEthersLiquityTransaction(rawPopulatedTransaction, this._readable.connection, ({ logs }) => {\r\n const liquidatedAddresses = cacheManager\r\n .extractEvents(logs, \"CacheLiquidated\")\r\n .map(({ args: { _borrower } }) => _borrower);\r\n const [totals] = cacheManager\r\n .extractEvents(logs, \"Liquidation\")\r\n .map(({ args: { _PAYDGasCompensation, _collGasCompensation, _liquidatedColl, _liquidatedDebt } }) => ({\r\n collateralGasCompensation: _utils_1.decimalify(_collGasCompensation),\r\n paydGasCompensation: _utils_1.decimalify(_PAYDGasCompensation),\r\n totalLiquidated: new lib_base_1.Cache(_utils_1.decimalify(_liquidatedColl), _utils_1.decimalify(_liquidatedDebt))\r\n }));\r\n return {\r\n liquidatedAddresses,\r\n ...totals\r\n };\r\n });\r\n }\r\n _extractRewardsPoolGainsWithdrawalDetails(logs) {\r\n const { rewardsPool } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const [newPAYDDeposit] = rewardsPool\r\n .extractEvents(logs, \"UserDepositChanged\")\r\n .map(({ args: { _newDeposit } }) => _utils_1.decimalify(_newDeposit));\r\n const [[collateralGain, paydLoss]] = rewardsPool\r\n .extractEvents(logs, \"ETHGainWithdrawn\")\r\n .map(({ args: { _ETH, _PAYDLoss } }) => [_utils_1.decimalify(_ETH), _utils_1.decimalify(_PAYDLoss)]);\r\n return {\r\n paydLoss,\r\n newPAYDDeposit,\r\n collateralGain\r\n //lqtyReward\r\n };\r\n }\r\n _wrapRewardsPoolGainsWithdrawal(rawPopulatedTransaction) {\r\n return new PopulatedEthersLiquityTransaction(rawPopulatedTransaction, this._readable.connection, ({ logs }) => this._extractRewardsPoolGainsWithdrawalDetails(logs));\r\n }\r\n _wrapStabilityDepositTopup(change, rawPopulatedTransaction) {\r\n return new PopulatedEthersLiquityTransaction(rawPopulatedTransaction, this._readable.connection, ({ logs }) => ({\r\n ...this._extractRewardsPoolGainsWithdrawalDetails(logs),\r\n change\r\n }));\r\n }\r\n async _wrapStabilityDepositWithdrawal(rawPopulatedTransaction) {\r\n const { rewardsPool, paydToken } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return new PopulatedEthersLiquityTransaction(rawPopulatedTransaction, this._readable.connection, ({ logs, from: userAddress }) => {\r\n const gainsWithdrawalDetails = this._extractRewardsPoolGainsWithdrawalDetails(logs);\r\n const [withdrawPAYD] = paydToken\r\n .extractEvents(logs, \"Transfer\")\r\n .filter(({ args: { from, to } }) => from === rewardsPool.address && to === userAddress)\r\n .map(({ args: { value } }) => _utils_1.decimalify(value));\r\n return {\r\n ...gainsWithdrawalDetails,\r\n change: { withdrawPAYD, withdrawAllPAYD: gainsWithdrawalDetails.newPAYDDeposit.isZero }\r\n };\r\n });\r\n }\r\n // private _wrapCollateralGainTransfer(\r\n // rawPopulatedTransaction: EthersPopulatedTransaction\r\n // ): PopulatedEthersLiquityTransaction {\r\n // const { borrowerOperations } = _getContracts(this._readable.connection);\r\n // return new PopulatedEthersLiquityTransaction(\r\n // rawPopulatedTransaction,\r\n // this._readable.connection,\r\n // ({ logs }) => {\r\n // const [newCache] = borrowerOperations\r\n // .extractEvents(logs, \"CacheUpdated\")\r\n // .map(({ args: { _coll, _debt } }) => new Cache(decimalify(_coll), decimalify(_debt)));\r\n // return {\r\n // ...this._extractRewardsPoolGainsWithdrawalDetails(logs),\r\n // newCache\r\n // };\r\n // }\r\n // );\r\n // }\r\n async _findHintsForNominalCollateralRatio(nominalCollateralRatio) {\r\n const { sortedCaches, hintHelpers } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const numberOfCaches = await this._readable.getNumberOfCaches();\r\n if (!numberOfCaches) {\r\n return [constants_1.AddressZero, constants_1.AddressZero];\r\n }\r\n if (nominalCollateralRatio.infinite) {\r\n return [constants_1.AddressZero, await sortedCaches.getFirst()];\r\n }\r\n const k = 10; // check hinthelper.sol comment\r\n const totalNumberOfTrials = Math.ceil(k * Math.sqrt(numberOfCaches));\r\n const [firstTrials, ...restOfTrials] = generateTrials(totalNumberOfTrials);\r\n const collectApproxHint = ({ latestRandomSeed, results }, numberOfTrials) => hintHelpers\r\n .getApproxHint(nominalCollateralRatio.hex, numberOfTrials, latestRandomSeed)\r\n .then(({ latestRandomSeed, ...result }) => ({\r\n latestRandomSeed,\r\n results: [...results, result]\r\n }));\r\n const { results } = await restOfTrials.reduce((p, numberOfTrials) => p.then(state => collectApproxHint(state, numberOfTrials)), collectApproxHint({ latestRandomSeed: randomInteger(), results: [] }, firstTrials));\r\n const { hintAddress } = results.reduce((a, b) => (a.diff.lt(b.diff) ? a : b));\r\n const [prev, next] = await sortedCaches.findInsertPosition(nominalCollateralRatio.hex, hintAddress, hintAddress);\r\n return prev === constants_1.AddressZero ? [next, next] : next === constants_1.AddressZero ? [prev, prev] : [prev, next];\r\n }\r\n async _findHints(cache) {\r\n if (cache instanceof lib_base_1.CacheWithPendingRedistribution) {\r\n throw new Error(\"Rewards must be applied to this Cache\");\r\n }\r\n return this._findHintsForNominalCollateralRatio(cache._nominalCollateralRatio);\r\n }\r\n async _findRedemptionHints(amount) {\r\n const { hintHelpers } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const price = await this._readable.getPrice();\r\n const { firstRedemptionHint, partialRedemptionHintNIRR, truncatedPAYDamount } = await hintHelpers.getRedemptionHints(amount.hex, price.hex, exports._redeemMaxIterations);\r\n const [partialRedemptionUpperHint, partialRedemptionLowerHint] = partialRedemptionHintNIRR.isZero()\r\n ? [constants_1.AddressZero, constants_1.AddressZero]\r\n : await this._findHintsForNominalCollateralRatio(_utils_1.decimalify(partialRedemptionHintNIRR));\r\n return [\r\n _utils_1.decimalify(truncatedPAYDamount),\r\n firstRedemptionHint,\r\n partialRedemptionUpperHint,\r\n partialRedemptionLowerHint,\r\n partialRedemptionHintNIRR\r\n ];\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.openCache} */\r\n async openCache(params, maxBorrowingRateOrOptionalParams, overrides) {\r\n const { borrowerOperations } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const normalizedParams = lib_base_1._normalizeCacheCreation(params);\r\n const { depositCollateral, borrowPAYD, stakePAYD } = normalizedParams;\r\n const [fees, blockTimestamp, total, price] = await Promise.all([\r\n this._readable._getFeesFactory(),\r\n this._readable._getBlockTimestamp(),\r\n this._readable.getTotal(),\r\n this._readable.getPrice()\r\n ]);\r\n const recoveryMode = total.collateralRatioIsBelowCritical(price);\r\n const decayBorrowingRate = (seconds) => fees(blockTimestamp + seconds, recoveryMode).borrowingRate();\r\n const currentBorrowingRate = decayBorrowingRate(0);\r\n const newCache = lib_base_1.Cache.create(normalizedParams, currentBorrowingRate);\r\n const hints = await this._findHints(newCache);\r\n const { maxBorrowingRate, borrowingFeeDecayToleranceMinutes } = normalizeBorrowingOperationOptionalParams(maxBorrowingRateOrOptionalParams, currentBorrowingRate);\r\n const txParams = (borrowPAYD) => [\r\n maxBorrowingRate.hex,\r\n borrowPAYD.hex,\r\n ...hints,\r\n (stakePAYD !== null && stakePAYD !== void 0 ? stakePAYD : lib_base_1.Decimal.ZERO).hex,\r\n { value: depositCollateral.hex, ...overrides }\r\n ];\r\n let gasHeadroom;\r\n if ((overrides === null || overrides === void 0 ? void 0 : overrides.gasLimit) === undefined) {\r\n const decayedBorrowingRate = decayBorrowingRate(60 * borrowingFeeDecayToleranceMinutes);\r\n const decayedCache = lib_base_1.Cache.create(normalizedParams, decayedBorrowingRate);\r\n const { borrowPAYD: borrowPAYDSimulatingDecay } = lib_base_1.Cache.recreate(decayedCache, currentBorrowingRate);\r\n if (decayedCache.debt.lt(lib_base_1.PAYD_MINIMUM_DEBT)) {\r\n throw new Error(`Cache's debt might fall below ${lib_base_1.PAYD_MINIMUM_DEBT} ` +\r\n `within ${borrowingFeeDecayToleranceMinutes} minutes`);\r\n }\r\n const [gasNow, gasLater] = await Promise.all([\r\n borrowerOperations.estimateGas.openCacheAndProvideToSp(...txParams(borrowPAYD)),\r\n borrowerOperations.estimateGas.openCacheAndProvideToSp(...txParams(borrowPAYDSimulatingDecay))\r\n ]);\r\n const gasLimit = addGasForBaseRateUpdate(borrowingFeeDecayToleranceMinutes)(bigNumberMax(addGasForPotentialListTraversal(gasNow), gasLater));\r\n gasHeadroom = gasLimit.sub(gasNow).toNumber();\r\n overrides = { ...overrides, gasLimit };\r\n }\r\n return this._wrapCacheChangeWithFees(normalizedParams, await borrowerOperations.populateTransaction.openCacheAndProvideToSp(...txParams(borrowPAYD)), gasHeadroom);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.closeCache} */\r\n async closeCache(overrides) {\r\n const { borrowerOperations } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return this._wrapCacheClosure(await borrowerOperations.estimateAndPopulate.closeCache({ ...overrides }, id));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.depositCollateral} */\r\n depositCollateral(amount, overrides) {\r\n return this.adjustCache({ depositCollateral: amount }, undefined, overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.withdrawCollateral} */\r\n withdrawCollateral(amount, overrides) {\r\n return this.adjustCache({ withdrawCollateral: amount }, undefined, overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.borrowPAYD} */\r\n borrowPAYD(amount, maxBorrowingRate, overrides) {\r\n return this.adjustCache({ borrowPAYD: amount }, maxBorrowingRate, overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.repayPAYD} */\r\n repayPAYD(amount, overrides) {\r\n return this.adjustCache({ repayPAYD: amount }, undefined, overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.adjustCache} */\r\n async adjustCache(params, maxBorrowingRateOrOptionalParams, overrides) {\r\n const address = EthersLiquityConnection_1._requireAddress(this._readable.connection, overrides);\r\n const { borrowerOperations } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const normalizedParams = lib_base_1._normalizeCacheAdjustment(params);\r\n const { depositCollateral, withdrawCollateral, borrowPAYD, repayPAYD, stakePAYD, unstakePAYD } = normalizedParams;\r\n const [cache, feeVars] = await Promise.all([\r\n this._readable.getCache(address),\r\n borrowPAYD &&\r\n _utils_1.promiseAllValues({\r\n fees: this._readable._getFeesFactory(),\r\n blockTimestamp: this._readable._getBlockTimestamp(),\r\n total: this._readable.getTotal(),\r\n price: this._readable.getPrice()\r\n })\r\n ]);\r\n const decayBorrowingRate = (seconds) => feeVars === null || feeVars === void 0 ? void 0 : feeVars.fees(feeVars.blockTimestamp + seconds, feeVars.total.collateralRatioIsBelowCritical(feeVars.price)).borrowingRate();\r\n const currentBorrowingRate = decayBorrowingRate(0);\r\n const adjustedCache = cache.adjust(normalizedParams, currentBorrowingRate);\r\n const hints = await this._findHints(adjustedCache);\r\n const { maxBorrowingRate, borrowingFeeDecayToleranceMinutes } = normalizeBorrowingOperationOptionalParams(maxBorrowingRateOrOptionalParams, currentBorrowingRate);\r\n const txParams = (borrowPAYD) => {\r\n var _a, _b;\r\n return [\r\n maxBorrowingRate.hex,\r\n (withdrawCollateral !== null && withdrawCollateral !== void 0 ? withdrawCollateral : lib_base_1.Decimal.ZERO).hex,\r\n ((_a = borrowPAYD !== null && borrowPAYD !== void 0 ? borrowPAYD : repayPAYD) !== null && _a !== void 0 ? _a : lib_base_1.Decimal.ZERO).hex,\r\n !!borrowPAYD,\r\n ...hints,\r\n ((_b = stakePAYD !== null && stakePAYD !== void 0 ? stakePAYD : unstakePAYD) !== null && _b !== void 0 ? _b : lib_base_1.Decimal.ZERO).hex,\r\n !!stakePAYD,\r\n { value: depositCollateral === null || depositCollateral === void 0 ? void 0 : depositCollateral.hex, ...overrides }\r\n ];\r\n };\r\n let gasHeadroom;\r\n if ((overrides === null || overrides === void 0 ? void 0 : overrides.gasLimit) === undefined) {\r\n const decayedBorrowingRate = decayBorrowingRate(60 * borrowingFeeDecayToleranceMinutes);\r\n const decayedCache = cache.adjust(normalizedParams, decayedBorrowingRate);\r\n const { borrowPAYD: borrowPAYDSimulatingDecay } = cache.adjustTo(decayedCache, currentBorrowingRate);\r\n if (decayedCache.debt.lt(lib_base_1.PAYD_MINIMUM_DEBT)) {\r\n throw new Error(`Cache's debt might fall below ${lib_base_1.PAYD_MINIMUM_DEBT} ` +\r\n `within ${borrowingFeeDecayToleranceMinutes} minutes`);\r\n }\r\n const [gasNow, gasLater] = await Promise.all([\r\n borrowerOperations.estimateGas.adjustCacheAndSp(...txParams(borrowPAYD)),\r\n borrowPAYD &&\r\n borrowerOperations.estimateGas.adjustCacheAndSp(...txParams(borrowPAYDSimulatingDecay))\r\n ]);\r\n let gasLimit = bigNumberMax(addGasForPotentialListTraversal(gasNow), gasLater);\r\n if (borrowPAYD) {\r\n gasLimit = addGasForBaseRateUpdate(borrowingFeeDecayToleranceMinutes)(gasLimit);\r\n }\r\n gasHeadroom = gasLimit.sub(gasNow).toNumber();\r\n overrides = { ...overrides, gasLimit };\r\n }\r\n return this._wrapCacheChangeWithFees(normalizedParams, await borrowerOperations.populateTransaction.adjustCacheAndSp(...txParams(borrowPAYD)), gasHeadroom);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.claimCollateralSurplus} */\r\n async claimCollateralSurplus(overrides) {\r\n const { borrowerOperations } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return this._wrapSimpleTransaction(await borrowerOperations.estimateAndPopulate.claimCollateral({ ...overrides }, id));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.depositFETH} */\r\n async depositFETH(amount, overrides) {\r\n const { fethToken } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return this._wrapSimpleTransaction(await fethToken.estimateAndPopulate.deposit({ ...overrides }, id, lib_base_1.Decimal.from(amount).hex));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.depositFETH} */\r\n async claimETH(overrides) {\r\n const { f2eSwap } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return this._wrapSimpleTransaction(await f2eSwap.estimateAndPopulate.claimETH({ ...overrides }, id));\r\n }\r\n async cancelFETHDeposit(address, overrides) {\r\n const { f2eSwap } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const qs = await f2eSwap.getQueueStatus();\r\n const qlen = qs._qNext.sub(qs._qHead);\r\n const idx = await f2eSwap.getQueueIdx(address, qs._qHead, qlen);\r\n return this._wrapSimpleTransaction(await f2eSwap.estimateAndPopulate.removeFromQueue({ ...overrides }, id, idx));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.withdrawETHGain} */\r\n async withdrawETHGain(overrides) {\r\n const { rewardsPool } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return this._wrapSimpleTransaction(await rewardsPool.estimateAndPopulate.withdrawETHGain({ ...overrides }, id));\r\n }\r\n /** @internal */\r\n async setPrice(price, overrides) {\r\n const { priceFeed } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n if (!contracts_1._priceFeedIsTestnet(priceFeed)) {\r\n throw new Error(\"setPrice() unavailable on this deployment of Liquity\");\r\n }\r\n return this._wrapSimpleTransaction(await priceFeed.estimateAndPopulate.setPrice({ ...overrides }, id, lib_base_1.Decimal.from(price).hex));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.liquidate} */\r\n async liquidate(address, overrides) {\r\n const { cacheManager } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return this._wrapLiquidation(await cacheManager.estimateAndPopulate.liquidate({ ...overrides }, addGasForLQTYIssuance, address));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.liquidateUpTo} */\r\n async liquidateUpTo(maximumNumberOfCachesToLiquidate, overrides) {\r\n const { cacheManager } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return this._wrapLiquidation(await cacheManager.estimateAndPopulate.liquidateCaches({ ...overrides }, addGasForLQTYIssuance, maximumNumberOfCachesToLiquidate));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.depositPAYDInRewardsPool} */\r\n async depositPAYDInRewardsPool(amount, frontendTag, overrides) {\r\n // const address = _requireAddress(this._readable.connection, overrides);\r\n const { rewardsPool } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const depositPAYD = lib_base_1.Decimal.from(amount);\r\n // const [initialCache, stabilityDeposit] = await Promise.all([\r\n // this._readable.getCache(address),\r\n // this._readable.getStabilityDeposit(address)\r\n // ]);\r\n //const finalCache = initialCache.addCollateral(stabilityDeposit.collateralGain);\r\n return this._wrapStabilityDepositTopup({ depositPAYD }, await rewardsPool.estimateAndPopulate.provideToSP({ ...overrides }, compose(addGasForPotentialListTraversal, addGasForLQTYIssuance), depositPAYD.hex));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.withdrawPAYDFromRewardsPool} */\r\n async withdrawPAYDFromRewardsPool(amount, overrides) {\r\n // const address = _requireAddress(this._readable.connection, overrides);\r\n const { rewardsPool } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n // const [initialCache, stabilityDeposit] = await Promise.all([\r\n // this._readable.getCache(address),\r\n // this._readable.getStabilityDeposit(address)\r\n // ]);\r\n //const finalCache = initialCache.addCollateral(stabilityDeposit.collateralGain);\r\n return this._wrapStabilityDepositWithdrawal(await rewardsPool.estimateAndPopulate.withdrawFromSP({ ...overrides }, compose(addGasForPotentialListTraversal, addGasForLQTYIssuance), lib_base_1.Decimal.from(amount).hex));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.withdrawGainsFromRewardsPool} */\r\n async withdrawGainsFromRewardsPool(overrides) {\r\n // const address = _requireAddress(this._readable.connection, overrides);\r\n const { rewardsPool } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n // const [initialCache, stabilityDeposit] = await Promise.all([\r\n // this._readable.getCache(address),\r\n // this._readable.getStabilityDeposit(address)\r\n // ]);\r\n //const finalCache = initialCache.addCollateral(stabilityDeposit.collateralGain);\r\n return this._wrapRewardsPoolGainsWithdrawal(await rewardsPool.estimateAndPopulate.withdrawFromSP({ ...overrides }, compose(addGasForPotentialListTraversal, addGasForLQTYIssuance), lib_base_1.Decimal.ZERO.hex));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.sendPAYD} */\r\n async sendPAYD(toAddress, amount, overrides) {\r\n const { paydToken } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return this._wrapSimpleTransaction(await paydToken.estimateAndPopulate.transfer({ ...overrides }, id, toAddress, lib_base_1.Decimal.from(amount).hex));\r\n }\r\n async approveFTXStaking(amount, overrides) {\r\n const { ftxToken } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const { ftxStaking } = this._readable.connection.addresses;\r\n return this._wrapSimpleTransaction(await ftxToken.estimateAndPopulate.approve({ ...overrides }, id, ftxStaking, lib_base_1.Decimal.from(amount).hex));\r\n }\r\n async stakeFTX(amount, overrides) {\r\n const { ftxStaking } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return this._wrapSimpleTransaction(await ftxStaking.estimateAndPopulate.stake({ ...overrides }, id, lib_base_1.Decimal.from(amount).hex));\r\n }\r\n async unstakeFTX(amount, overrides) {\r\n const { ftxStaking } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return this._wrapSimpleTransaction(await ftxStaking.estimateAndPopulate.unstake({ ...overrides }, id, lib_base_1.Decimal.from(amount).hex));\r\n }\r\n async transferFTX(amount, overrides) {\r\n const { ftxToken, stakingWallet } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n return this._wrapSimpleTransaction(await ftxToken.estimateAndPopulate.transfer({ ...overrides }, id, stakingWallet.address, lib_base_1.Decimal.from(amount).hex));\r\n }\r\n /** {@inheritDoc @liquity/lib-base#PopulatableLiquity.redeemPAYD} */\r\n async redeemPAYD(amount, maxRedemptionRate, minEthAmount, overrides) {\r\n const { cacheManager } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const attemptedPAYDAmount = lib_base_1.Decimal.from(amount);\r\n const [\r\n // fees,\r\n // total,\r\n [truncatedAmount,]] = await Promise.all([\r\n // this._readable.getFees(),\r\n // this._readable.getTotal(),\r\n this._findRedemptionHints(attemptedPAYDAmount)\r\n ]);\r\n if (truncatedAmount.isZero) {\r\n throw new Error(`redeemPAYD: amount too low to redeem (try at least ${lib_base_1.PAYD_MINIMUM_NET_DEBT})`);\r\n }\r\n const populateRedemption = async (attemptedPAYDAmount, maxRedemptionRate, truncatedAmount = attemptedPAYDAmount\r\n // partialHints: [string, string, BigNumberish] = [AddressZero, AddressZero, 0]\r\n ) => {\r\n return new PopulatedEthersRedemption(await cacheManager.estimateAndPopulate.redeemCollateral({ ...overrides }, addGasForBaseRateUpdate(), truncatedAmount.hex, \r\n // firstRedemptionHint,\r\n // ...partialHints,\r\n // _redeemMaxIterations,\r\n // maxRedemptionRateOrDefault.hex,\r\n lib_base_1.Decimal.ZERO.add(minEthAmount || 0).hex), this._readable.connection, attemptedPAYDAmount, truncatedAmount, truncatedAmount.lt(attemptedPAYDAmount)\r\n ? newMaxRedemptionRate => populateRedemption(truncatedAmount.add(lib_base_1.PAYD_MINIMUM_NET_DEBT), newMaxRedemptionRate !== null && newMaxRedemptionRate !== void 0 ? newMaxRedemptionRate : maxRedemptionRate)\r\n : undefined);\r\n };\r\n return populateRedemption(attemptedPAYDAmount, maxRedemptionRate, truncatedAmount);\r\n }\r\n async depositMultipleValidators(forkVersion, pubkeys, withdrawal_credentials, signatures, deposit_data_root, overrides) {\r\n const { multipleDeposit } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const ethToSend = lib_base_1.Decimal.from(pubkeys.length * 32);\r\n return this._wrapSimpleTransaction(await multipleDeposit.estimateAndPopulate.depositMultipleValidators({ value: ethToSend.hex, ...overrides }, id, forkVersion, pubkeys, withdrawal_credentials, signatures, deposit_data_root));\r\n }\r\n}\r\nexports.PopulatableEthersLiquity = PopulatableEthersLiquity;\r\n//# sourceMappingURL=PopulatableEthersLiquity.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.SendableEthersLiquity = void 0;\r\nconst sendTransaction = (tx) => tx.send();\r\n/**\r\n * Ethers-based implementation of {@link @liquity/lib-base#SendableLiquity}.\r\n *\r\n * @public\r\n */\r\nclass SendableEthersLiquity {\r\n constructor(populatable) {\r\n this._populate = populatable;\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.openCache} */\r\n async openCache(params, maxBorrowingRateOrOptionalParams, overrides) {\r\n return this._populate\r\n .openCache(params, maxBorrowingRateOrOptionalParams, overrides)\r\n .then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.closeCache} */\r\n closeCache(overrides) {\r\n return this._populate.closeCache(overrides).then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.adjustCache} */\r\n adjustCache(params, maxBorrowingRateOrOptionalParams, overrides) {\r\n return this._populate\r\n .adjustCache(params, maxBorrowingRateOrOptionalParams, overrides)\r\n .then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.depositCollateral} */\r\n depositCollateral(amount, overrides) {\r\n return this._populate.depositCollateral(amount, overrides).then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.withdrawCollateral} */\r\n withdrawCollateral(amount, overrides) {\r\n return this._populate.withdrawCollateral(amount, overrides).then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.borrowPAYD} */\r\n borrowPAYD(amount, maxBorrowingRate, overrides) {\r\n return this._populate.borrowPAYD(amount, maxBorrowingRate, overrides).then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.repayPAYD} */\r\n repayPAYD(amount, overrides) {\r\n return this._populate.repayPAYD(amount, overrides).then(sendTransaction);\r\n }\r\n /** @internal */\r\n setPrice(price, overrides) {\r\n return this._populate.setPrice(price, overrides).then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.liquidate} */\r\n liquidate(address, overrides) {\r\n return this._populate.liquidate(address, overrides).then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.liquidateUpTo} */\r\n liquidateUpTo(maximumNumberOfCachesToLiquidate, overrides) {\r\n return this._populate\r\n .liquidateUpTo(maximumNumberOfCachesToLiquidate, overrides)\r\n .then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.depositPAYDInRewardsPool} */\r\n depositPAYDInRewardsPool(amount, frontendTag, overrides) {\r\n return this._populate\r\n .depositPAYDInRewardsPool(amount, frontendTag, overrides)\r\n .then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.withdrawPAYDFromRewardsPool} */\r\n withdrawPAYDFromRewardsPool(amount, overrides) {\r\n return this._populate.withdrawPAYDFromRewardsPool(amount, overrides).then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.withdrawGainsFromRewardsPool} */\r\n withdrawGainsFromRewardsPool(overrides) {\r\n return this._populate.withdrawGainsFromRewardsPool(overrides).then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.sendPAYD} */\r\n sendPAYD(toAddress, amount, overrides) {\r\n return this._populate.sendPAYD(toAddress, amount, overrides).then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.redeemPAYD} */\r\n redeemPAYD(amount, maxRedemptionRate, minEthAmount, overrides) {\r\n return this._populate.redeemPAYD(amount, maxRedemptionRate, minEthAmount, overrides).then(sendTransaction);\r\n }\r\n approveFTXStaking(amount, overrides) {\r\n return this._populate.approveFTXStaking(amount, overrides).then(sendTransaction);\r\n }\r\n stakeFTX(amount, overrides) {\r\n return this._populate.stakeFTX(amount, overrides).then(sendTransaction);\r\n }\r\n unstakeFTX(amount, overrides) {\r\n return this._populate.unstakeFTX(amount, overrides).then(sendTransaction);\r\n }\r\n transferFTX(amount, overrides) {\r\n return this._populate.transferFTX(amount, overrides).then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.claimCollateralSurplus} */\r\n claimCollateralSurplus(overrides) {\r\n return this._populate.claimCollateralSurplus(overrides).then(sendTransaction);\r\n }\r\n depositFETH(amount, overrides) {\r\n return this._populate.depositFETH(amount, overrides).then(sendTransaction);\r\n }\r\n claimETH(overrides) {\r\n return this._populate.claimETH(overrides).then(sendTransaction);\r\n }\r\n cancelFETHDeposit(address, overrides) {\r\n return this._populate.cancelFETHDeposit(address, overrides).then(sendTransaction);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#SendableLiquity.withdrawETHGain} */\r\n withdrawETHGain(overrides) {\r\n return this._populate.withdrawETHGain(overrides).then(sendTransaction);\r\n }\r\n depositMultipleValidators(forkVersion, pubkeys, withdrawal_credentials, signatures, deposit_data_root, overrides) {\r\n return this._populate.depositMultipleValidators(forkVersion, pubkeys, withdrawal_credentials, signatures, deposit_data_root, overrides).then(sendTransaction);\r\n }\r\n}\r\nexports.SendableEthersLiquity = SendableEthersLiquity;\r\n//# sourceMappingURL=SendableEthersLiquity.js.map","\"use strict\";\r\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}));\r\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n});\r\nvar __importStar = (this && this.__importStar) || function (mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.LiquityStoreProvider = exports.LiquityStoreContext = void 0;\r\nconst react_1 = __importStar(require(\"react\"));\r\nexports.LiquityStoreContext = react_1.createContext(undefined);\r\nconst LiquityStoreProvider = ({ store, loader, children }) => {\r\n const [loadedStore, setLoadedStore] = react_1.useState();\r\n react_1.useEffect(() => {\r\n store.onLoaded = () => setLoadedStore(store);\r\n const stop = store.start();\r\n return () => {\r\n store.onLoaded = undefined;\r\n setLoadedStore(undefined);\r\n stop();\r\n };\r\n }, [store]);\r\n if (!loadedStore) {\r\n return react_1.default.createElement(react_1.default.Fragment, null, loader);\r\n }\r\n return react_1.default.createElement(exports.LiquityStoreContext.Provider, { value: loadedStore }, children);\r\n};\r\nexports.LiquityStoreProvider = LiquityStoreProvider;\r\n//# sourceMappingURL=LiquityStoreProvider.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.equals = void 0;\r\nconst hasOwnProperty = (o, key) => Object.prototype.hasOwnProperty.call(o, key);\r\nconst shallowEquals = (a, b) => {\r\n const keysA = Object.keys(a);\r\n const keysB = Object.keys(b);\r\n return (keysA.length === keysB.length &&\r\n keysA.every(key => hasOwnProperty(b, key) && Object.is(a[key], b[key])));\r\n};\r\nconst isObject = (a) => a !== null && typeof a === \"object\";\r\nconst equals = (a, b) => isObject(a) && isObject(b) ? shallowEquals(a, b) : Object.is(a, b);\r\nexports.equals = equals;\r\n//# sourceMappingURL=equals.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.BatchedWebSocketAugmentedWeb3Provider = exports.Batched = exports.isBatchedProvider = void 0;\r\nconst address_1 = require(\"@ethersproject/address\");\r\nconst contracts_1 = require(\"@ethersproject/contracts\");\r\nconst properties_1 = require(\"@ethersproject/properties\");\r\nconst WebSocketAugmentedProvider_1 = require(\"./WebSocketAugmentedProvider\");\r\nconst multicallAddress = {\r\n 1: \"0xeefBa1e63905eF1D7ACbA5a8513c70307C1cE441\",\r\n 3: \"0x53C43764255c17BD724F74c4eF150724AC50a3ed\",\r\n 4: \"0x42Ad527de7d4e9d9d011aC45B31D8551f8Fe9821\",\r\n 5: \"0x77dCa2C955b15e9dE4dbBCf1246B4B85b651e50e\",\r\n 42: \"0x2cc8688C5f75E365aaEEb4ea8D6a480405A48D2A\",\r\n 88: \"0x62Dde7C82c5BcAFA8583423a1e429b11d4377CF0\"\r\n};\r\nconst hasMulticall = (chainId) => chainId in multicallAddress;\r\nconst multicallAbi = [\r\n {\r\n type: \"function\",\r\n name: \"aggregate\",\r\n stateMutability: \"nonpayable\",\r\n constant: false,\r\n payable: false,\r\n inputs: [\r\n {\r\n components: [\r\n {\r\n name: \"target\",\r\n type: \"address\"\r\n },\r\n {\r\n name: \"callData\",\r\n type: \"bytes\"\r\n }\r\n ],\r\n name: \"calls\",\r\n type: \"tuple[]\"\r\n }\r\n ],\r\n outputs: [\r\n {\r\n name: \"blockNumber\",\r\n type: \"uint256\"\r\n },\r\n {\r\n name: \"returnData\",\r\n type: \"bytes[]\"\r\n }\r\n ]\r\n },\r\n {\r\n type: \"function\",\r\n name: \"getEthBalance\",\r\n stateMutability: \"view\",\r\n constant: true,\r\n payable: false,\r\n inputs: [\r\n {\r\n name: \"addr\",\r\n type: \"address\"\r\n }\r\n ],\r\n outputs: [\r\n {\r\n name: \"balance\",\r\n type: \"uint256\"\r\n }\r\n ]\r\n }\r\n];\r\nconst emptyBatch = () => ({ calls: [], callbacks: [] });\r\n// TODO\r\n//\r\n// Technically, requests that have a `from` address shouldn't be batched, because `msg.sender` will\r\n// be replaced with the Multicall contract's address when the batched calls are being executed.\r\n//\r\n// Currently, `@liquity/lib-ethers` makes many of its read calls through Signers, which populates\r\n// `from`. Instead these calls should be made through a Provider, and `from` should be omitted\r\n// (since none of the read calls in Liquity care about `msg.sender`).\r\n//\r\n// Then we'll be able to properly exclude calls that have `from` addresses from batching.\r\nconst batchableCall = (request) => request.gasLimit === undefined && request.gasPrice === undefined && request.value === undefined;\r\nconst batchedCall = (request, multicallAddress) => request.to === multicallAddress &&\r\n typeof request.data === \"string\" &&\r\n request.data.startsWith(\"0x252dba42\"); // signature of `aggregate((address,bytes)[])`\r\nconst batchedProviders = [];\r\nconst isBatchedProvider = (provider) => batchedProviders.some(batchedProvider => provider instanceof batchedProvider);\r\nexports.isBatchedProvider = isBatchedProvider;\r\nconst Batched = (Base) => {\r\n const batchedProvider = class extends Base {\r\n constructor() {\r\n super(...arguments);\r\n this.batchingDelayMs = 10;\r\n this._chainId = 0;\r\n this._batched = emptyBatch();\r\n this._numberOfBatchedCalls = 0;\r\n this._numberOfActualCalls = 0;\r\n }\r\n get chainId() {\r\n return this._chainId;\r\n }\r\n set chainId(chainId) {\r\n if (this._multicall) {\r\n throw new Error(\"can only set chainId once\");\r\n }\r\n if (hasMulticall(chainId)) {\r\n this._multicall = new contracts_1.Contract(multicallAddress[chainId], multicallAbi, this);\r\n }\r\n this._chainId = chainId;\r\n }\r\n async _dispatchCalls() {\r\n const { calls, callbacks, blockTag } = this._batched;\r\n this._batched = emptyBatch();\r\n try {\r\n const results = calls.length > 1\r\n ? await this._multicall.callStatic.aggregate(calls, { blockTag }).then(x => x.returnData)\r\n : [await super.call({ to: calls[0].target, data: calls[0].callData }, blockTag)];\r\n callbacks.forEach(([resolve], i) => resolve(results[i]));\r\n }\r\n catch (error) {\r\n callbacks.forEach(([, reject]) => reject(error));\r\n }\r\n }\r\n _enqueueCall(call) {\r\n if (this._timeoutId !== undefined) {\r\n clearTimeout(this._timeoutId);\r\n }\r\n this._batched.calls.push(call);\r\n this._timeoutId = setTimeout(() => this._dispatchCalls(), this.batchingDelayMs);\r\n return new Promise((resolve, reject) => this._batched.callbacks.push([resolve, reject]));\r\n }\r\n _alreadyBatchedCallsConflictWith(blockTag) {\r\n var _a;\r\n return (this._batched.calls.length !== 0 &&\r\n (blockTag !== null && blockTag !== void 0 ? blockTag : \"latest\") !== ((_a = this._batched.blockTag) !== null && _a !== void 0 ? _a : \"latest\"));\r\n }\r\n async call(request, blockTag) {\r\n if (!this._multicall) {\r\n return super.call(request, blockTag);\r\n }\r\n else {\r\n const now = new Date().getTime();\r\n if (this._timeOfLastRatioCheck === undefined) {\r\n this._timeOfLastRatioCheck = now;\r\n }\r\n else {\r\n const timeSinceLastRatioCheck = now - this._timeOfLastRatioCheck;\r\n if (timeSinceLastRatioCheck >= 10000 && this._numberOfActualCalls) {\r\n // console.log(\r\n // `Call batching ratio: ${\r\n // Math.round((10 * this._numberOfBatchedCalls) / this._numberOfActualCalls) / 10\r\n // }X`\r\n // );\r\n this._numberOfBatchedCalls = 0;\r\n this._numberOfActualCalls = 0;\r\n this._timeOfLastRatioCheck = now;\r\n }\r\n }\r\n }\r\n const [resolvedRequest, resolvedBlockTag] = await Promise.all([\r\n properties_1.resolveProperties(request),\r\n blockTag\r\n ]);\r\n if (batchedCall(resolvedRequest, this._multicall.address) ||\r\n !batchableCall(resolvedRequest) ||\r\n this._alreadyBatchedCallsConflictWith(resolvedBlockTag)) {\r\n this._numberOfActualCalls++;\r\n return super.call(resolvedRequest, resolvedBlockTag);\r\n }\r\n else {\r\n this._numberOfBatchedCalls++;\r\n if (this._batched.calls.length === 0) {\r\n this._batched.blockTag = resolvedBlockTag;\r\n }\r\n return this._enqueueCall({ target: resolvedRequest.to, callData: resolvedRequest.data });\r\n }\r\n }\r\n async getBalance(addressOrName, blockTag) {\r\n const [resolvedAddressOrName, resolvedBlockTag] = await Promise.all([addressOrName, blockTag]);\r\n if (!address_1.isAddress(resolvedAddressOrName) || !this._multicall) {\r\n return super.getBalance(resolvedAddressOrName, blockTag);\r\n }\r\n const [balance] = await this._multicall.functions.getEthBalance(resolvedAddressOrName, {\r\n blockTag: resolvedBlockTag\r\n });\r\n return balance;\r\n }\r\n };\r\n batchedProviders.push(batchedProvider);\r\n return batchedProvider;\r\n};\r\nexports.Batched = Batched;\r\nexports.BatchedWebSocketAugmentedWeb3Provider = exports.Batched(WebSocketAugmentedProvider_1.WebSocketAugmentedWeb3Provider);\r\n//# sourceMappingURL=BatchedProvider.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.CacheWithPendingRedistribution = exports.UserCache = exports._emptyCache = exports.Cache = exports._normalizeCacheAdjustment = exports._normalizeCacheCreation = void 0;\r\nconst assert_1 = __importDefault(require(\"assert\"));\r\nconst Decimal_1 = require(\"./Decimal\");\r\nconst constants_1 = require(\"./constants\");\r\nconst invalidCacheCreation = (invalidCache, error) => ({\r\n type: \"invalidCreation\",\r\n invalidCache,\r\n error\r\n});\r\nconst cacheCreation = (params) => ({\r\n type: \"creation\",\r\n params\r\n});\r\nconst cacheClosure = (params) => ({\r\n type: \"closure\",\r\n params\r\n});\r\nconst cacheAdjustment = (params, setToZero) => ({\r\n type: \"adjustment\",\r\n params,\r\n setToZero\r\n});\r\nconst valueIsDefined = (entry) => entry[1] !== undefined;\r\nconst allowedCacheCreationKeys = [\r\n \"depositCollateral\",\r\n \"borrowPAYD\",\r\n \"stakePAYD\"\r\n];\r\nfunction checkAllowedCacheCreationKeys(entries) {\r\n const badKeys = entries\r\n .filter(([k]) => !allowedCacheCreationKeys.includes(k))\r\n .map(([k]) => `'${k}'`);\r\n if (badKeys.length > 0) {\r\n throw new Error(`CacheCreationParams: property ${badKeys.join(\", \")} not allowed`);\r\n }\r\n}\r\nconst cacheCreationParamsFromEntries = (entries) => {\r\n const params = Object.fromEntries(entries);\r\n const optionalKeys = [\"stakePAYD\"];\r\n const missingKeys = allowedCacheCreationKeys.filter(k => !(k in params) && !(k in optionalKeys)).map(k => `'${k}'`);\r\n if (missingKeys.length > 0) {\r\n throw new Error(`CacheCreationParams: property ${missingKeys.join(\", \")} missing`);\r\n }\r\n return params;\r\n};\r\nconst decimalize = ([k, v]) => [k, Decimal_1.Decimal.from(v)];\r\nconst nonZero = ([, v]) => !v.isZero;\r\n/** @internal */\r\nconst _normalizeCacheCreation = (params) => {\r\n const definedEntries = Object.entries(params).filter(valueIsDefined);\r\n checkAllowedCacheCreationKeys(definedEntries);\r\n const nonZeroEntries = definedEntries.map(decimalize);\r\n return cacheCreationParamsFromEntries(nonZeroEntries);\r\n};\r\nexports._normalizeCacheCreation = _normalizeCacheCreation;\r\nconst allowedCacheAdjustmentKeys = [\r\n \"depositCollateral\",\r\n \"withdrawCollateral\",\r\n \"borrowPAYD\",\r\n \"repayPAYD\",\r\n \"unstakePAYD\",\r\n \"stakePAYD\"\r\n];\r\nfunction checkAllowedCacheAdjustmentKeys(entries) {\r\n const badKeys = entries\r\n .filter(([k]) => !allowedCacheAdjustmentKeys.includes(k))\r\n .map(([k]) => `'${k}'`);\r\n if (badKeys.length > 0) {\r\n throw new Error(`CacheAdjustmentParams: property ${badKeys.join(\", \")} not allowed`);\r\n }\r\n}\r\nconst collateralChangeFrom = ({ depositCollateral, withdrawCollateral }) => {\r\n if (depositCollateral !== undefined && withdrawCollateral !== undefined) {\r\n throw new Error(\"CacheAdjustmentParams: 'depositCollateral' and 'withdrawCollateral' \" +\r\n \"can't be present at the same time\");\r\n }\r\n if (depositCollateral !== undefined) {\r\n return { depositCollateral };\r\n }\r\n if (withdrawCollateral !== undefined) {\r\n return { withdrawCollateral };\r\n }\r\n};\r\nconst debtChangeFrom = ({ borrowPAYD, repayPAYD }) => {\r\n if (borrowPAYD !== undefined && repayPAYD !== undefined) {\r\n throw new Error(\"CacheAdjustmentParams: 'borrowPAYD' and 'repayPAYD' can't be present at the same time\");\r\n }\r\n if (borrowPAYD !== undefined) {\r\n return { borrowPAYD };\r\n }\r\n if (repayPAYD !== undefined) {\r\n return { repayPAYD };\r\n }\r\n};\r\nconst stakingChangeFrom = ({ stakePAYD, unstakePAYD }) => {\r\n if (stakePAYD !== undefined && unstakePAYD !== undefined) {\r\n throw new Error(\"CacheAdjustmentParams: 'stakePAYD' and 'unstakePAYD' can't be present at the same time\");\r\n }\r\n if (stakePAYD !== undefined) {\r\n return { stakePAYD };\r\n }\r\n if (unstakePAYD !== undefined) {\r\n return { unstakePAYD };\r\n }\r\n};\r\nconst cacheAdjustmentParamsFromEntries = (entries) => {\r\n const params = Object.fromEntries(entries);\r\n const collateralChange = collateralChangeFrom(params);\r\n const debtChange = debtChangeFrom(params);\r\n const stakingChange = stakingChangeFrom(params);\r\n if (collateralChange !== undefined && debtChange !== undefined) {\r\n return { ...collateralChange, ...debtChange, ...stakingChange };\r\n }\r\n if (collateralChange !== undefined) {\r\n return { ...collateralChange, ...stakingChange };\r\n }\r\n if (debtChange !== undefined) {\r\n return { ...debtChange, ...stakingChange };\r\n }\r\n throw new Error(\"CacheAdjustmentParams: must include at least one non-zero parameter\");\r\n};\r\n/** @internal */\r\nconst _normalizeCacheAdjustment = (params) => {\r\n const definedEntries = Object.entries(params).filter(valueIsDefined);\r\n checkAllowedCacheAdjustmentKeys(definedEntries);\r\n const nonZeroEntries = definedEntries.map(decimalize).filter(nonZero);\r\n return cacheAdjustmentParamsFromEntries(nonZeroEntries);\r\n};\r\nexports._normalizeCacheAdjustment = _normalizeCacheAdjustment;\r\nconst applyFee = (borrowingRate, debtIncrease) => debtIncrease.mul(Decimal_1.Decimal.ONE.add(borrowingRate));\r\nconst unapplyFee = (borrowingRate, debtIncrease) => debtIncrease._divCeil(Decimal_1.Decimal.ONE.add(borrowingRate));\r\nconst NOMINAL_COLLATERAL_RATIO_PRECISION = Decimal_1.Decimal.from(100);\r\n/**\r\n * A combination of collateral and debt.\r\n *\r\n * note that Cache conflicts with DOM reserved name so api-extractor make it Cache_2 in the\r\n * generated api.json, either manually change it back(after each gen) or ignore warning\r\n * @public\r\n */\r\nclass Cache {\r\n /** @internal */\r\n constructor(collateral = Decimal_1.Decimal.ZERO, debt = Decimal_1.Decimal.ZERO) {\r\n this.collateral = collateral;\r\n this.debt = debt;\r\n }\r\n get isEmpty() {\r\n return this.collateral.isZero && this.debt.isZero;\r\n }\r\n /**\r\n * Amount of PAYD that must be repaid to close this Cache.\r\n *\r\n * @remarks\r\n * This doesn't include the liquidation reserve, which is refunded in case of normal closure.\r\n */\r\n get netDebt() {\r\n if (this.debt.lt(constants_1.PAYD_LIQUIDATION_RESERVE)) {\r\n throw new Error(`netDebt should not be used when debt < ${constants_1.PAYD_LIQUIDATION_RESERVE}`);\r\n }\r\n return this.debt.sub(constants_1.PAYD_LIQUIDATION_RESERVE);\r\n }\r\n /** @internal */\r\n get _nominalCollateralRatio() {\r\n return this.collateral.mulDiv(NOMINAL_COLLATERAL_RATIO_PRECISION, this.debt);\r\n }\r\n /** Calculate the Cache's collateralization ratio at a given price. */\r\n collateralRatio(price) {\r\n return this.collateral.mulDiv(price, this.debt);\r\n }\r\n /**\r\n * Whether the Cache is undercollateralized at a given price.\r\n *\r\n * @returns\r\n * `true` if the Cache's collateralization ratio is less than the\r\n * {@link MINIMUM_COLLATERAL_RATIO}.\r\n */\r\n collateralRatioIsBelowMinimum(price) {\r\n return this.collateralRatio(price).lt(constants_1.MINIMUM_COLLATERAL_RATIO);\r\n }\r\n /**\r\n * Whether the collateralization ratio is less than the {@link CRITICAL_COLLATERAL_RATIO} at a\r\n * given price.\r\n *\r\n * @example\r\n * Can be used to check whether the Liquity protocol is in recovery mode by using it on the return\r\n * value of {@link ReadableLiquity.getTotal | getTotal()}. For example:\r\n *\r\n * ```typescript\r\n * const total = await liquity.getTotal();\r\n * const price = await liquity.getPrice();\r\n *\r\n * if (total.collateralRatioIsBelowCritical(price)) {\r\n * // Recovery mode is active\r\n * }\r\n * ```\r\n */\r\n collateralRatioIsBelowCritical(price) {\r\n return this.collateralRatio(price).lt(constants_1.CRITICAL_COLLATERAL_RATIO);\r\n }\r\n /** Whether the Cache is sufficiently collateralized to be opened during recovery mode. */\r\n isOpenableInRecoveryMode(price) {\r\n return this.collateralRatio(price).gte(constants_1.CRITICAL_COLLATERAL_RATIO);\r\n }\r\n /** @internal */\r\n toString() {\r\n return `{ collateral: ${this.collateral}, debt: ${this.debt} }`;\r\n }\r\n equals(that) {\r\n return this.collateral.eq(that.collateral) && this.debt.eq(that.debt);\r\n }\r\n add(that) {\r\n return new Cache(this.collateral.add(that.collateral), this.debt.add(that.debt));\r\n }\r\n addCollateral(collateral) {\r\n return new Cache(this.collateral.add(collateral), this.debt);\r\n }\r\n addDebt(debt) {\r\n return new Cache(this.collateral, this.debt.add(debt));\r\n }\r\n subtract(that) {\r\n const { collateral, debt } = that;\r\n return new Cache(this.collateral.gt(collateral) ? this.collateral.sub(collateral) : Decimal_1.Decimal.ZERO, this.debt.gt(debt) ? this.debt.sub(debt) : Decimal_1.Decimal.ZERO);\r\n }\r\n subtractCollateral(collateral) {\r\n return new Cache(this.collateral.gt(collateral) ? this.collateral.sub(collateral) : Decimal_1.Decimal.ZERO, this.debt);\r\n }\r\n subtractDebt(debt) {\r\n return new Cache(this.collateral, this.debt.gt(debt) ? this.debt.sub(debt) : Decimal_1.Decimal.ZERO);\r\n }\r\n multiply(multiplier) {\r\n return new Cache(this.collateral.mul(multiplier), this.debt.mul(multiplier));\r\n }\r\n setCollateral(collateral) {\r\n return new Cache(Decimal_1.Decimal.from(collateral), this.debt);\r\n }\r\n setDebt(debt) {\r\n return new Cache(this.collateral, Decimal_1.Decimal.from(debt));\r\n }\r\n _debtChange({ debt }, borrowingRate) {\r\n return debt.gt(this.debt)\r\n ? { borrowPAYD: unapplyFee(borrowingRate, debt.sub(this.debt)) }\r\n : { repayPAYD: this.debt.sub(debt) };\r\n }\r\n _collateralChange({ collateral }) {\r\n return collateral.gt(this.collateral)\r\n ? { depositCollateral: collateral.sub(this.collateral) }\r\n : { withdrawCollateral: this.collateral.sub(collateral) };\r\n }\r\n /**\r\n * Calculate the difference between this Cache and another.\r\n *\r\n * @param that - The other Cache.\r\n * @param borrowingRate - Borrowing rate to use when calculating a borrowed amount.\r\n *\r\n * @returns\r\n * An object representing the change, or `undefined` if the Caches are equal.\r\n */\r\n whatChanged(that, borrowingRate = constants_1.MINIMUM_BORROWING_RATE) {\r\n var _a;\r\n if (this.collateral.eq(that.collateral) && this.debt.eq(that.debt)) {\r\n return undefined;\r\n }\r\n if (this.isEmpty) {\r\n if (that.debt.lt(constants_1.PAYD_LIQUIDATION_RESERVE)) {\r\n return invalidCacheCreation(that, \"missingLiquidationReserve\");\r\n }\r\n return cacheCreation({\r\n depositCollateral: that.collateral,\r\n borrowPAYD: unapplyFee(borrowingRate, that.netDebt),\r\n stakePAYD: Decimal_1.Decimal.ZERO\r\n });\r\n }\r\n if (that.isEmpty) {\r\n return cacheClosure(this.netDebt.nonZero\r\n ? { withdrawCollateral: this.collateral, repayPAYD: this.netDebt }\r\n : { withdrawCollateral: this.collateral });\r\n }\r\n return this.collateral.eq(that.collateral)\r\n ? cacheAdjustment(this._debtChange(that, borrowingRate), that.debt.zero && \"debt\")\r\n : this.debt.eq(that.debt)\r\n ? cacheAdjustment(this._collateralChange(that), that.collateral.zero && \"collateral\")\r\n : cacheAdjustment({\r\n ...this._debtChange(that, borrowingRate),\r\n ...this._collateralChange(that)\r\n }, (_a = (that.debt.zero && \"debt\")) !== null && _a !== void 0 ? _a : (that.collateral.zero && \"collateral\"));\r\n }\r\n /**\r\n * Make a new Cache by applying a {@link CacheChange} to this Cache.\r\n *\r\n * @param change - The change to apply.\r\n * @param borrowingRate - Borrowing rate to use when adding a borrowed amount to the Cache's debt.\r\n */\r\n apply(change, borrowingRate = constants_1.MINIMUM_BORROWING_RATE) {\r\n if (!change) {\r\n return this;\r\n }\r\n switch (change.type) {\r\n case \"invalidCreation\":\r\n if (!this.isEmpty) {\r\n throw new Error(\"Can't create onto existing Cache\");\r\n }\r\n return change.invalidCache;\r\n case \"creation\": {\r\n if (!this.isEmpty) {\r\n throw new Error(\"Can't create onto existing Cache\");\r\n }\r\n const { depositCollateral, borrowPAYD } = change.params;\r\n return new Cache(depositCollateral, constants_1.PAYD_LIQUIDATION_RESERVE.add(applyFee(borrowingRate, borrowPAYD)));\r\n }\r\n case \"closure\":\r\n if (this.isEmpty) {\r\n throw new Error(\"Can't close empty Cache\");\r\n }\r\n return exports._emptyCache;\r\n case \"adjustment\": {\r\n const { setToZero, params: { depositCollateral, withdrawCollateral, borrowPAYD, repayPAYD } } = change;\r\n const collateralDecrease = withdrawCollateral !== null && withdrawCollateral !== void 0 ? withdrawCollateral : Decimal_1.Decimal.ZERO;\r\n const collateralIncrease = depositCollateral !== null && depositCollateral !== void 0 ? depositCollateral : Decimal_1.Decimal.ZERO;\r\n const debtDecrease = repayPAYD !== null && repayPAYD !== void 0 ? repayPAYD : Decimal_1.Decimal.ZERO;\r\n const debtIncrease = borrowPAYD ? applyFee(borrowingRate, borrowPAYD) : Decimal_1.Decimal.ZERO;\r\n return setToZero === \"collateral\"\r\n ? this.setCollateral(Decimal_1.Decimal.ZERO).addDebt(debtIncrease).subtractDebt(debtDecrease)\r\n : setToZero === \"debt\"\r\n ? this.setDebt(Decimal_1.Decimal.ZERO)\r\n .addCollateral(collateralIncrease)\r\n .subtractCollateral(collateralDecrease)\r\n : this.add(new Cache(collateralIncrease, debtIncrease)).subtract(new Cache(collateralDecrease, debtDecrease));\r\n }\r\n }\r\n }\r\n /**\r\n * Calculate the result of an {@link TransactableLiquity.openCache | openCache()} transaction.\r\n *\r\n * @param params - Parameters of the transaction.\r\n * @param borrowingRate - Borrowing rate to use when calculating the Cache's debt.\r\n */\r\n static create(params, borrowingRate) {\r\n return exports._emptyCache.apply(cacheCreation(exports._normalizeCacheCreation(params)), borrowingRate);\r\n }\r\n /**\r\n * Calculate the parameters of an {@link TransactableLiquity.openCache | openCache()} transaction\r\n * that will result in the given Cache.\r\n *\r\n * @param that - The Cache to recreate.\r\n * @param borrowingRate - Current borrowing rate.\r\n */\r\n static recreate(that, borrowingRate) {\r\n const change = exports._emptyCache.whatChanged(that, borrowingRate);\r\n assert_1.default((change === null || change === void 0 ? void 0 : change.type) === \"creation\");\r\n return change.params;\r\n }\r\n /**\r\n * Calculate the result of an {@link TransactableLiquity.adjustCache | adjustCache()} transaction\r\n * on this Cache.\r\n *\r\n * @param params - Parameters of the transaction.\r\n * @param borrowingRate - Borrowing rate to use when adding to the Cache's debt.\r\n */\r\n adjust(params, borrowingRate) {\r\n return this.apply(cacheAdjustment(exports._normalizeCacheAdjustment(params)), borrowingRate);\r\n }\r\n /**\r\n * Calculate the parameters of an {@link TransactableLiquity.adjustCache | adjustCache()}\r\n * transaction that will change this Cache into the given Cache.\r\n *\r\n * @param that - The desired result of the transaction.\r\n * @param borrowingRate - Current borrowing rate.\r\n */\r\n adjustTo(that, borrowingRate) {\r\n const change = this.whatChanged(that, borrowingRate);\r\n assert_1.default((change === null || change === void 0 ? void 0 : change.type) === \"adjustment\");\r\n return change.params;\r\n }\r\n}\r\nexports.Cache = Cache;\r\n/** @internal */\r\nexports._emptyCache = new Cache();\r\n/**\r\n * A Cache that is associated with a single owner.\r\n *\r\n * @remarks\r\n * The SDK uses the base {@link Cache} class as a generic container of collateral and debt, for\r\n * example to represent the {@link ReadableLiquity.getTotal | total collateral and debt} locked up\r\n * in the protocol.\r\n *\r\n * The `UserCache` class extends `Cache` with extra information that's only available for Caches\r\n * that are associated with a single owner (such as the owner's address, or the Cache's status).\r\n *\r\n * @public\r\n */\r\nclass UserCache extends Cache {\r\n /** @internal */\r\n constructor(ownerAddress, status, collateral, debt) {\r\n super(collateral, debt);\r\n this.ownerAddress = ownerAddress;\r\n this.status = status;\r\n }\r\n equals(that) {\r\n return (super.equals(that) && this.ownerAddress === that.ownerAddress && this.status === that.status);\r\n }\r\n /** @internal */\r\n toString() {\r\n return (`{ ownerAddress: \"${this.ownerAddress}\"` +\r\n `, collateral: ${this.collateral}` +\r\n `, debt: ${this.debt}` +\r\n `, status: \"${this.status}\" }`);\r\n }\r\n}\r\nexports.UserCache = UserCache;\r\n/**\r\n * A Cache in its state after the last direct modification.\r\n *\r\n * @remarks\r\n * The Cache may have received collateral and debt shares from liquidations since then.\r\n * Use {@link CacheWithPendingRedistribution.applyRedistribution | applyRedistribution()} to\r\n * calculate the Cache's most up-to-date state.\r\n *\r\n * @public\r\n */\r\nclass CacheWithPendingRedistribution extends UserCache {\r\n /** @internal */\r\n constructor(ownerAddress, status, collateral, debt, stake = Decimal_1.Decimal.ZERO, snapshotOfTotalRedistributed = exports._emptyCache, compounded = Decimal_1.Decimal.ZERO, loss = Decimal_1.Decimal.ZERO) {\r\n super(ownerAddress, status, collateral, debt);\r\n this.stake = stake;\r\n this.snapshotOfTotalRedistributed = snapshotOfTotalRedistributed;\r\n this.compounded = compounded;\r\n this.loss = loss;\r\n }\r\n applyRedistribution(totalRedistributed) {\r\n totalRedistributed == totalRedistributed; // bypass not use warning\r\n return new UserCache(this.ownerAddress, this.status, this.loss > Decimal_1.Decimal.ZERO ? this.loss : this.collateral, this.compounded > Decimal_1.Decimal.ZERO ? this.compounded : this.debt\r\n //afterRedistribution.debt\r\n );\r\n }\r\n equals(that) {\r\n return (super.equals(that) &&\r\n this.stake.eq(that.stake) &&\r\n this.snapshotOfTotalRedistributed.equals(that.snapshotOfTotalRedistributed) &&\r\n this.compounded.eq(that.compounded) &&\r\n this.loss.eq(that.loss));\r\n }\r\n}\r\nexports.CacheWithPendingRedistribution = CacheWithPendingRedistribution;\r\n//# sourceMappingURL=Cache.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.StabilityDeposit = void 0;\r\nconst Decimal_1 = require(\"./Decimal\");\r\n/**\r\n * A Stability Deposit and its accrued gains.\r\n *\r\n * @public\r\n */\r\nclass StabilityDeposit {\r\n /** @internal */\r\n constructor(initialPAYD, currentPAYD, collateralGain, accruedCollateralGain, rewardsPaid, lqtyReward, frontendTag) {\r\n this.initialPAYD = initialPAYD;\r\n this.currentPAYD = currentPAYD;\r\n this.collateralGain = collateralGain;\r\n this.rewardsPaid = rewardsPaid;\r\n this.lqtyReward = lqtyReward;\r\n this.accruedCollateralGain = accruedCollateralGain;\r\n this.frontendTag = frontendTag;\r\n if (this.currentPAYD.gt(this.initialPAYD)) {\r\n throw new Error(\"currentPAYD can't be greater than initialPAYD\");\r\n }\r\n }\r\n get isEmpty() {\r\n return (this.initialPAYD.isZero &&\r\n this.currentPAYD.isZero &&\r\n this.collateralGain.isZero &&\r\n this.accruedCollateralGain.isZero &&\r\n this.rewardsPaid.isZero &&\r\n this.lqtyReward.isZero);\r\n }\r\n /** @internal */\r\n toString() {\r\n return (`{ initialPAYD: ${this.initialPAYD}` +\r\n `, currentPAYD: ${this.currentPAYD}` +\r\n `, collateralGain: ${this.collateralGain}` +\r\n `, accruedCollateralGain: ${this.accruedCollateralGain}` +\r\n `, lqtyReward: ${this.lqtyReward}` +\r\n `, frontendTag: \"${this.frontendTag}\" }`);\r\n }\r\n /**\r\n * Compare to another instance of `StabilityDeposit`.\r\n */\r\n equals(that) {\r\n return (this.initialPAYD.eq(that.initialPAYD) &&\r\n this.currentPAYD.eq(that.currentPAYD) &&\r\n this.collateralGain.eq(that.collateralGain) &&\r\n this.accruedCollateralGain.eq(that.accruedCollateralGain) &&\r\n this.rewardsPaid.eq(that.rewardsPaid) &&\r\n this.lqtyReward.eq(that.lqtyReward) &&\r\n this.frontendTag === that.frontendTag);\r\n }\r\n /**\r\n * Calculate the difference between the `currentPAYD` in this Stability Deposit and `thatPAYD`.\r\n *\r\n * @returns An object representing the change, or `undefined` if the deposited amounts are equal.\r\n */\r\n whatChanged(thatPAYD) {\r\n thatPAYD = Decimal_1.Decimal.from(thatPAYD);\r\n if (thatPAYD.lt(this.currentPAYD)) {\r\n return { withdrawPAYD: this.currentPAYD.sub(thatPAYD), withdrawAllPAYD: thatPAYD.isZero };\r\n }\r\n if (thatPAYD.gt(this.currentPAYD)) {\r\n return { depositPAYD: thatPAYD.sub(this.currentPAYD) };\r\n }\r\n }\r\n /**\r\n * Apply a {@link StabilityDepositChange} to this Stability Deposit.\r\n *\r\n * @returns The new deposited PAYD amount.\r\n */\r\n apply(change) {\r\n if (!change) {\r\n return this.currentPAYD;\r\n }\r\n if (change.withdrawPAYD !== undefined) {\r\n return change.withdrawAllPAYD || this.currentPAYD.lte(change.withdrawPAYD)\r\n ? Decimal_1.Decimal.ZERO\r\n : this.currentPAYD.sub(change.withdrawPAYD);\r\n }\r\n else {\r\n return this.currentPAYD.add(change.depositPAYD);\r\n }\r\n }\r\n}\r\nexports.StabilityDeposit = StabilityDeposit;\r\n//# sourceMappingURL=StabilityDeposit.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.LQTYStake = void 0;\r\nconst Decimal_1 = require(\"./Decimal\");\r\n/**\r\n * Represents a user's LQTY stake and accrued gains.\r\n *\r\n * @public\r\n */\r\nclass LQTYStake {\r\n /** @internal */\r\n constructor(stakedLQTY = Decimal_1.Decimal.ZERO, collateralGain = Decimal_1.Decimal.ZERO, paydGain = Decimal_1.Decimal.ZERO) {\r\n this.stakedLQTY = stakedLQTY;\r\n this.collateralGain = collateralGain;\r\n this.paydGain = paydGain;\r\n }\r\n get isEmpty() {\r\n return this.stakedLQTY.isZero && this.collateralGain.isZero && this.paydGain.isZero;\r\n }\r\n /** @internal */\r\n toString() {\r\n return (`{ stakedLQTY: ${this.stakedLQTY}` +\r\n `, collateralGain: ${this.collateralGain}` +\r\n `, paydGain: ${this.paydGain} }`);\r\n }\r\n /**\r\n * Compare to another instance of `LQTYStake`.\r\n */\r\n equals(that) {\r\n return (this.stakedLQTY.eq(that.stakedLQTY) &&\r\n this.collateralGain.eq(that.collateralGain) &&\r\n this.paydGain.eq(that.paydGain));\r\n }\r\n /**\r\n * Calculate the difference between this `LQTYStake` and `thatStakedLQTY`.\r\n *\r\n * @returns An object representing the change, or `undefined` if the staked amounts are equal.\r\n */\r\n whatChanged(thatStakedLQTY) {\r\n thatStakedLQTY = Decimal_1.Decimal.from(thatStakedLQTY);\r\n if (thatStakedLQTY.lt(this.stakedLQTY)) {\r\n return {\r\n unstakeLQTY: this.stakedLQTY.sub(thatStakedLQTY),\r\n unstakeAllLQTY: thatStakedLQTY.isZero\r\n };\r\n }\r\n if (thatStakedLQTY.gt(this.stakedLQTY)) {\r\n return { stakeLQTY: thatStakedLQTY.sub(this.stakedLQTY) };\r\n }\r\n }\r\n /**\r\n * Apply a {@link LQTYStakeChange} to this `LQTYStake`.\r\n *\r\n * @returns The new staked LQTY amount.\r\n */\r\n apply(change) {\r\n if (!change) {\r\n return this.stakedLQTY;\r\n }\r\n if (change.unstakeLQTY !== undefined) {\r\n return change.unstakeAllLQTY || this.stakedLQTY.lte(change.unstakeLQTY)\r\n ? Decimal_1.Decimal.ZERO\r\n : this.stakedLQTY.sub(change.unstakeLQTY);\r\n }\r\n else {\r\n return this.stakedLQTY.add(change.stakeLQTY);\r\n }\r\n }\r\n}\r\nexports.LQTYStake = LQTYStake;\r\n//# sourceMappingURL=LQTYStake.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.Fees = void 0;\r\nconst assert_1 = __importDefault(require(\"assert\"));\r\nconst Decimal_1 = require(\"./Decimal\");\r\nconst constants_1 = require(\"./constants\");\r\n/**\r\n * Calculator for fees.\r\n *\r\n * @remarks\r\n * Returned by the {@link ReadableLiquity.getFees | getFees()} function.\r\n *\r\n * @public\r\n */\r\nclass Fees {\r\n /** @internal */\r\n constructor(baseRateWithoutDecay, minuteDecayFactor, beta, lastFeeOperation, timeOfLatestBlock, recoveryMode) {\r\n this._baseRateWithoutDecay = Decimal_1.Decimal.from(baseRateWithoutDecay);\r\n this._minuteDecayFactor = Decimal_1.Decimal.from(minuteDecayFactor);\r\n this._beta = Decimal_1.Decimal.from(beta);\r\n this._lastFeeOperation = lastFeeOperation;\r\n this._timeOfLatestBlock = timeOfLatestBlock;\r\n this._recoveryMode = recoveryMode;\r\n assert_1.default(this._minuteDecayFactor.lt(1));\r\n }\r\n /** @internal */\r\n _setRecoveryMode(recoveryMode) {\r\n return new Fees(this._baseRateWithoutDecay, this._minuteDecayFactor, this._beta, this._lastFeeOperation, this._timeOfLatestBlock, recoveryMode);\r\n }\r\n /**\r\n * Compare to another instance of `Fees`.\r\n */\r\n equals(that) {\r\n return (this._baseRateWithoutDecay.eq(that._baseRateWithoutDecay) &&\r\n this._minuteDecayFactor.eq(that._minuteDecayFactor) &&\r\n this._beta.eq(that._beta) &&\r\n this._lastFeeOperation.getTime() === that._lastFeeOperation.getTime() &&\r\n this._timeOfLatestBlock.getTime() === that._timeOfLatestBlock.getTime() &&\r\n this._recoveryMode === that._recoveryMode);\r\n }\r\n /** @internal */\r\n toString() {\r\n return (`{ baseRateWithoutDecay: ${this._baseRateWithoutDecay}` +\r\n `, lastFeeOperation: \"${this._lastFeeOperation.toLocaleString()}\"` +\r\n `, recoveryMode: ${this._recoveryMode} } `);\r\n }\r\n /** @internal */\r\n baseRate(when = this._timeOfLatestBlock) {\r\n const millisecondsSinceLastFeeOperation = Math.max(when.getTime() - this._lastFeeOperation.getTime(), 0 // Clamp negative elapsed time to 0, in case the client's time is in the past.\r\n // We will calculate slightly higher than actual fees, which is fine.\r\n );\r\n const minutesSinceLastFeeOperation = Math.floor(millisecondsSinceLastFeeOperation / 60000);\r\n return this._minuteDecayFactor.pow(minutesSinceLastFeeOperation).mul(this._baseRateWithoutDecay);\r\n }\r\n /**\r\n * Calculate the current borrowing rate.\r\n *\r\n * @param when - Optional timestamp that can be used to calculate what the borrowing rate would\r\n * decay to at a point of time in the future.\r\n *\r\n * @remarks\r\n * By default, the fee is calculated at the time of the latest block. This can be overridden using\r\n * the `when` parameter.\r\n *\r\n * To calculate the borrowing fee in PAYD, multiply the borrowed PAYD amount by the borrowing rate.\r\n *\r\n * @example\r\n * ```typescript\r\n * const fees = await liquity.getFees();\r\n *\r\n * const borrowedPAYDAmount = 100;\r\n * const borrowingRate = fees.borrowingRate();\r\n * const borrowingFeePAYD = borrowingRate.mul(borrowedPAYDAmount);\r\n * ```\r\n */\r\n borrowingRate(when) {\r\n return this._recoveryMode\r\n ? Decimal_1.Decimal.ZERO\r\n : Decimal_1.Decimal.min(constants_1.MINIMUM_BORROWING_RATE.add(this.baseRate(when)), constants_1.MAXIMUM_BORROWING_RATE);\r\n }\r\n /**\r\n * Calculate the current eth redemption rate.\r\n *\r\n * @param when - Optional timestamp that can be used to calculate what the eth redemption rate would\r\n * decay to at a point of time in the future.\r\n *\r\n * @remarks\r\n * By default, the fee is calculated at the time of the latest block. This can be overridden using\r\n * the `when` parameter.\r\n *\r\n * To calculate the borrowing fee in PAYD, multiply the borrowed PAYD amount by the borrowing rate.\r\n *\r\n * @example\r\n * ```typescript\r\n * const fees = await liquity.getFees();\r\n *\r\n * const borrowedPAYDAmount = 100;\r\n * const borrowingRate = fees.borrowingRate();\r\n * const borrowingFeePAYD = borrowingRate.mul(borrowedPAYDAmount);\r\n * ```\r\n */\r\n ethRedemptionRate(when) {\r\n return Decimal_1.Decimal.min(constants_1.MINIMUM_BORROWING_RATE.add(this.baseRate(when)), Decimal_1.Decimal.ONE);\r\n }\r\n /**\r\n * Calculate the current redemption rate.\r\n *\r\n * @param redeemedFractionOfSupply - The amount of PAYD being redeemed divided by the total supply.\r\n * @param when - Optional timestamp that can be used to calculate what the redemption rate would\r\n * decay to at a point of time in the future.\r\n *\r\n * @remarks\r\n * By default, the fee is calculated at the time of the latest block. This can be overridden using\r\n * the `when` parameter.\r\n \r\n * Unlike the borrowing rate, the redemption rate depends on the amount being redeemed. To be more\r\n * precise, it depends on the fraction of the redeemed amount compared to the total PAYD supply,\r\n * which must be passed as a parameter.\r\n *\r\n * To calculate the redemption fee in PAYD, multiply the redeemed PAYD amount with the redemption\r\n * rate.\r\n *\r\n * @example\r\n * ```typescript\r\n * const fees = await liquity.getFees();\r\n * const total = await liquity.getTotal();\r\n *\r\n * const redeemedPAYDAmount = Decimal.from(100);\r\n * const redeemedFractionOfSupply = redeemedPAYDAmount.div(total.debt);\r\n * const redemptionRate = fees.redemptionRate(redeemedFractionOfSupply);\r\n * const redemptionFeePAYD = redemptionRate.mul(redeemedPAYDAmount);\r\n * ```\r\n */\r\n redemptionRate(redeemedFractionOfSupply = Decimal_1.Decimal.ZERO, when) {\r\n redeemedFractionOfSupply = Decimal_1.Decimal.from(redeemedFractionOfSupply);\r\n let baseRate = this.baseRate(when);\r\n if (redeemedFractionOfSupply.nonZero) {\r\n baseRate = redeemedFractionOfSupply.div(this._beta).add(baseRate);\r\n }\r\n return Decimal_1.Decimal.min(constants_1.MINIMUM_REDEMPTION_RATE.add(baseRate), Decimal_1.Decimal.ONE);\r\n }\r\n}\r\nexports.Fees = Fees;\r\n//# sourceMappingURL=Fees.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.TransactionFailedError = void 0;\r\n/**\r\n * Thrown by {@link TransactableLiquity} functions in case of transaction failure.\r\n *\r\n * @public\r\n */\r\nclass TransactionFailedError extends Error {\r\n /** @internal */\r\n constructor(name, message, failedReceipt) {\r\n super(message);\r\n this.name = name;\r\n this.failedReceipt = failedReceipt;\r\n }\r\n}\r\nexports.TransactionFailedError = TransactionFailedError;\r\n//# sourceMappingURL=TransactableLiquity.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports._successfulReceipt = exports._failedReceipt = exports._pendingReceipt = void 0;\r\n/** @internal */\r\nexports._pendingReceipt = { status: \"pending\" };\r\n/** @internal */\r\nconst _failedReceipt = (rawReceipt) => ({\r\n status: \"failed\",\r\n rawReceipt\r\n});\r\nexports._failedReceipt = _failedReceipt;\r\n/** @internal */\r\nconst _successfulReceipt = (rawReceipt, details, toString) => ({\r\n status: \"succeeded\",\r\n rawReceipt,\r\n details,\r\n ...(toString ? { toString } : {})\r\n});\r\nexports._successfulReceipt = _successfulReceipt;\r\n//# sourceMappingURL=SendableLiquity.js.map","\"use strict\";\r\nvar __importDefault = (this && this.__importDefault) || function (mod) {\r\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\r\n};\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.LiquityStore = void 0;\r\nconst assert_1 = __importDefault(require(\"assert\"));\r\nconst strictEquals = (a, b) => a === b;\r\nconst eq = (a, b) => a.eq(b);\r\nconst equals = (a, b) => a.equals(b);\r\nconst frontendStatusEquals = (a, b) => a.status === \"unregistered\"\r\n ? b.status === \"unregistered\"\r\n : b.status === \"registered\" && a.kickbackRate.eq(b.kickbackRate);\r\nconst showFrontendStatus = (x) => x.status === \"unregistered\"\r\n ? '{ status: \"unregistered\" }'\r\n : `{ status: \"registered\", kickbackRate: ${x.kickbackRate} }`;\r\nconst wrap = (f) => (...args) => f(...args);\r\nconst difference = (a, b) => Object.fromEntries(Object.entries(a).filter(([key, value]) => value !== b[key]));\r\n/**\r\n * Abstract base class of Liquity data store implementations.\r\n *\r\n * @remarks\r\n * The type parameter `T` may be used to type extra state added to {@link LiquityStoreState} by the\r\n * subclass.\r\n *\r\n * Implemented by {@link @liquity/lib-ethers#BlockPolledLiquityStore}.\r\n *\r\n * @public\r\n */\r\nclass LiquityStore {\r\n constructor() {\r\n /** Turn console logging on/off. */\r\n this.logging = false;\r\n /** @internal */\r\n this._loaded = false;\r\n this._listeners = new Set();\r\n }\r\n /**\r\n * The current store state.\r\n *\r\n * @remarks\r\n * Should not be accessed before the store is loaded. Assign a function to\r\n * {@link LiquityStore.onLoaded | onLoaded} to get a callback when this happens.\r\n *\r\n * See {@link LiquityStoreState} for the list of properties returned.\r\n */\r\n get state() {\r\n return Object.assign({}, this._baseState, this._derivedState, this._extraState);\r\n }\r\n /**\r\n * Start monitoring the blockchain for Liquity state changes.\r\n *\r\n * @remarks\r\n * The {@link LiquityStore.onLoaded | onLoaded} callback will be called after the state is fetched\r\n * for the first time.\r\n *\r\n * Use the {@link LiquityStore.subscribe | subscribe()} function to register listeners.\r\n *\r\n * @returns Function to stop the monitoring.\r\n */\r\n start() {\r\n const doStop = this._doStart();\r\n return () => {\r\n doStop();\r\n this._cancelUpdateIfScheduled();\r\n };\r\n }\r\n _cancelUpdateIfScheduled() {\r\n if (this._updateTimeoutId !== undefined) {\r\n clearTimeout(this._updateTimeoutId);\r\n }\r\n }\r\n _scheduleUpdate() {\r\n this._cancelUpdateIfScheduled();\r\n this._updateTimeoutId = setTimeout(() => {\r\n this._updateTimeoutId = undefined;\r\n console.log('scheduled recalc(no blockchain refresh)');\r\n this._update();\r\n }, 30000);\r\n }\r\n _logUpdate(name, next, show) {\r\n if (this.logging) {\r\n console.log(`${name} updated to ${show ? show(next) : next}`);\r\n }\r\n return next;\r\n }\r\n _updateIfChanged(equals, name, prev, next, show) {\r\n return next !== undefined && !equals(prev, next) ? this._logUpdate(name, next, show) : prev;\r\n }\r\n _silentlyUpdateIfChanged(equals, prev, next) {\r\n return next !== undefined && !equals(prev, next) ? next : prev;\r\n }\r\n _updateFees(name, prev, next) {\r\n if (next && !next.equals(prev)) {\r\n // Filter out fee update spam that happens on every new block by only logging when string\r\n // representation changes.\r\n if (`${next}` !== `${prev}`) {\r\n this._logUpdate(name, next);\r\n }\r\n return next;\r\n }\r\n else {\r\n return prev;\r\n }\r\n }\r\n _reduce(baseState, baseStateUpdate) {\r\n return {\r\n frontend: this._updateIfChanged(frontendStatusEquals, \"frontend\", baseState.frontend, baseStateUpdate.frontend, showFrontendStatus),\r\n ownFrontend: this._updateIfChanged(frontendStatusEquals, \"ownFrontend\", baseState.ownFrontend, baseStateUpdate.ownFrontend, showFrontendStatus),\r\n numberOfCaches: this._updateIfChanged(strictEquals, \"numberOfCaches\", baseState.numberOfCaches, baseStateUpdate.numberOfCaches),\r\n accountBalance: this._updateIfChanged(eq, \"accountBalance\", baseState.accountBalance, baseStateUpdate.accountBalance),\r\n paydBalance: this._updateIfChanged(eq, \"paydBalance\", baseState.paydBalance, baseStateUpdate.paydBalance),\r\n collateralSurplusBalance: this._updateIfChanged(eq, \"collateralSurplusBalance\", baseState.collateralSurplusBalance, baseStateUpdate.collateralSurplusBalance),\r\n price: this._updateIfChanged(eq, \"price\", baseState.price, baseStateUpdate.price),\r\n ftxPrice: this._updateIfChanged(eq, \"ftxPrice\", baseState.ftxPrice, baseStateUpdate.ftxPrice),\r\n paydInRewardsPool: this._updateIfChanged(eq, \"paydInRewardsPool\", baseState.paydInRewardsPool, baseStateUpdate.paydInRewardsPool),\r\n total: this._updateIfChanged(equals, \"total\", baseState.total, baseStateUpdate.total),\r\n totalRedistributed: this._updateIfChanged(equals, \"totalRedistributed\", baseState.totalRedistributed, baseStateUpdate.totalRedistributed),\r\n cacheBeforeRedistribution: this._updateIfChanged(equals, \"cacheBeforeRedistribution\", baseState.cacheBeforeRedistribution, baseStateUpdate.cacheBeforeRedistribution),\r\n stabilityDeposit: this._updateIfChanged(equals, \"stabilityDeposit\", baseState.stabilityDeposit, baseStateUpdate.stabilityDeposit),\r\n ftxStake: this._updateIfChanged(equals, \"ftxStake\", baseState.ftxStake, baseStateUpdate.ftxStake),\r\n _feesInNormalMode: this._silentlyUpdateIfChanged(equals, baseState._feesInNormalMode, baseStateUpdate._feesInNormalMode),\r\n totalStakedETH: this._updateIfChanged(eq, \"totalStakedETH\", baseState.totalStakedETH, baseStateUpdate.totalStakedETH),\r\n _riskiestCacheBeforeRedistribution: this._silentlyUpdateIfChanged(equals, baseState._riskiestCacheBeforeRedistribution, baseStateUpdate._riskiestCacheBeforeRedistribution),\r\n totalLifetimeLiquidations: this._updateIfChanged(eq, \"totalLifetimeLiquidations\", baseState.totalLifetimeLiquidations, baseStateUpdate.totalLifetimeLiquidations),\r\n totalLifetimeStakingRewards: this._updateIfChanged(eq, \"totalLifetimeStakingRewards\", baseState.totalLifetimeStakingRewards, baseStateUpdate.totalLifetimeStakingRewards),\r\n totalLifetimeMiningRewards: this._updateIfChanged(eq, \"totalLifetimeMiningRewards\", baseState.totalLifetimeMiningRewards, baseStateUpdate.totalLifetimeMiningRewards),\r\n currentRewards: this._updateIfChanged(eq, \"currentRewards\", baseState.currentRewards, baseStateUpdate.currentRewards),\r\n validatorAmt: this._updateIfChanged(eq, \"validatorAmt\", baseState.validatorAmt, baseStateUpdate.validatorAmt),\r\n rewardEthAmt: this._updateIfChanged(eq, \"rewardEthAmt\", baseState.rewardEthAmt, baseStateUpdate.rewardEthAmt),\r\n totalRewardsDistributed: this._updateIfChanged(eq, \"totalRewardsDistributed\", baseState.totalRewardsDistributed, baseStateUpdate.totalRewardsDistributed),\r\n unfilledFETHInQueue: this._updateIfChanged(eq, \"unfilledFETHInQueue\", baseState.unfilledFETHInQueue, baseStateUpdate.unfilledFETHInQueue),\r\n deactivatedETHInProgress: this._updateIfChanged(eq, \"deactivatedETHInProgress\", baseState.deactivatedETHInProgress, baseStateUpdate.deactivatedETHInProgress),\r\n claimableETH: this._updateIfChanged(eq, \"claimableETH\", baseState.claimableETH, baseStateUpdate.claimableETH),\r\n openCacheFeeBalance: this._updateIfChanged(eq, \"openCacheFeeBalance\", baseState.openCacheFeeBalance, baseStateUpdate.openCacheFeeBalance),\r\n topupCacheFeeBalance: this._updateIfChanged(eq, \"topupCacheFeeBalance\", baseState.topupCacheFeeBalance, baseStateUpdate.topupCacheFeeBalance),\r\n paydSwapFeeBalance: this._updateIfChanged(eq, \"paydSwapFeeBalance\", baseState.paydSwapFeeBalance, baseStateUpdate.paydSwapFeeBalance),\r\n fethSwapFeeBalance: this._updateIfChanged(eq, \"fethSwapFeeBalance\", baseState.fethSwapFeeBalance, baseStateUpdate.fethSwapFeeBalance),\r\n liquidationFeeBalance: this._updateIfChanged(eq, \"liquidationFeeBalance\", baseState.liquidationFeeBalance, baseStateUpdate.liquidationFeeBalance),\r\n liquidationDepositBalance: this._updateIfChanged(eq, \"liquidationDepositBalance\", baseState.liquidationDepositBalance, baseStateUpdate.liquidationDepositBalance),\r\n stakingFeeBalance: this._updateIfChanged(eq, \"stakingFeeBalance\", baseState.stakingFeeBalance, baseStateUpdate.stakingFeeBalance),\r\n miningFeeBalance: this._updateIfChanged(eq, \"miningFeeBalance\", baseState.miningFeeBalance, baseStateUpdate.miningFeeBalance),\r\n charityWalletFETH: this._updateIfChanged(eq, \"charityWalletFETH\", baseState.charityWalletFETH, baseStateUpdate.charityWalletFETH),\r\n charityWalletPAYD: this._updateIfChanged(eq, \"charityWalletPAYD\", baseState.charityWalletPAYD, baseStateUpdate.charityWalletPAYD),\r\n ftxInventoryBalance: this._updateIfChanged(eq, \"ftxInventoryBalance\", baseState.ftxInventoryBalance, baseStateUpdate.ftxInventoryBalance),\r\n ftxBalance: this._updateIfChanged(eq, \"ftxBalance\", baseState.ftxBalance, baseStateUpdate.ftxBalance),\r\n ftxAllowance: this._updateIfChanged(eq, \"ftxAllowance\", baseState.ftxAllowance, baseStateUpdate.ftxAllowance),\r\n fethBalance: this._updateIfChanged(eq, \"fethBalance\", baseState.fethBalance, baseStateUpdate.fethBalance),\r\n fethSwapDeposit: this._updateIfChanged(eq, \"fethSwapDeposit\", baseState.fethSwapDeposit, baseStateUpdate.fethSwapDeposit),\r\n ethSwapClaim: this._updateIfChanged(eq, \"ethSwapClaim\", baseState.ethSwapClaim, baseStateUpdate.ethSwapClaim),\r\n availableValidators: this._updateIfChanged(strictEquals, \"availableValidators\", baseState.availableValidators, baseStateUpdate.availableValidators),\r\n };\r\n }\r\n _derive({ cacheBeforeRedistribution, totalRedistributed, _feesInNormalMode, total, price, _riskiestCacheBeforeRedistribution }) {\r\n const fees = _feesInNormalMode._setRecoveryMode(total.collateralRatioIsBelowCritical(price));\r\n return {\r\n cache: cacheBeforeRedistribution.applyRedistribution(totalRedistributed),\r\n fees,\r\n borrowingRate: fees.borrowingRate(),\r\n redemptionRate: fees.redemptionRate(),\r\n haveUndercollateralizedCaches: _riskiestCacheBeforeRedistribution\r\n .applyRedistribution(totalRedistributed)\r\n .collateralRatioIsBelowMinimum(price)\r\n };\r\n }\r\n _reduceDerived(derivedState, derivedStateUpdate) {\r\n return {\r\n fees: this._updateFees(\"fees\", derivedState.fees, derivedStateUpdate.fees),\r\n cache: this._updateIfChanged(equals, \"cache\", derivedState.cache, derivedStateUpdate.cache),\r\n borrowingRate: this._silentlyUpdateIfChanged(eq, derivedState.borrowingRate, derivedStateUpdate.borrowingRate),\r\n redemptionRate: this._silentlyUpdateIfChanged(eq, derivedState.redemptionRate, derivedStateUpdate.redemptionRate),\r\n haveUndercollateralizedCaches: this._updateIfChanged(strictEquals, \"haveUndercollateralizedCaches\", derivedState.haveUndercollateralizedCaches, derivedStateUpdate.haveUndercollateralizedCaches)\r\n };\r\n }\r\n _notify(params) {\r\n // Iterate on a copy of `_listeners`, to avoid notifying any new listeners subscribed by\r\n // existing listeners, as that could result in infinite loops.\r\n //\r\n // Before calling a listener from our copy of `_listeners`, check if it has been removed from\r\n // the original set. This way we avoid calling listeners that have already been unsubscribed\r\n // by an earlier listener callback.\r\n [...this._listeners].forEach(listener => {\r\n if (this._listeners.has(listener)) {\r\n listener(params);\r\n }\r\n });\r\n }\r\n /**\r\n * Register a state change listener.\r\n *\r\n * @param listener - Function that will be called whenever state changes.\r\n * @returns Function to unregister this listener.\r\n */\r\n subscribe(listener) {\r\n const uniqueListener = wrap(listener);\r\n this._listeners.add(uniqueListener);\r\n return () => {\r\n this._listeners.delete(uniqueListener);\r\n };\r\n }\r\n /** @internal */\r\n _load(baseState, extraState) {\r\n assert_1.default(!this._loaded);\r\n this._baseState = baseState;\r\n this._derivedState = this._derive(baseState);\r\n this._extraState = extraState;\r\n this._loaded = true;\r\n this._scheduleUpdate();\r\n if (this.onLoaded) {\r\n this.onLoaded();\r\n }\r\n }\r\n /** @internal */\r\n _update(baseStateUpdate, extraStateUpdate) {\r\n assert_1.default(this._baseState && this._derivedState);\r\n const oldState = this.state;\r\n if (baseStateUpdate) {\r\n this._baseState = this._reduce(this._baseState, baseStateUpdate);\r\n }\r\n // Always running this lets us derive state based on passage of time, like baseRate decay\r\n this._derivedState = this._reduceDerived(this._derivedState, this._derive(this._baseState));\r\n if (extraStateUpdate) {\r\n assert_1.default(this._extraState);\r\n this._extraState = this._reduceExtra(this._extraState, extraStateUpdate);\r\n }\r\n this._scheduleUpdate();\r\n this._notify({\r\n newState: this.state,\r\n oldState,\r\n stateChange: difference(this.state, oldState)\r\n });\r\n }\r\n}\r\nexports.LiquityStore = LiquityStore;\r\n//# sourceMappingURL=LiquityStore.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports._CachedReadableLiquity = void 0;\r\n/** @internal */\r\nclass _CachedReadableLiquity {\r\n constructor(readable, cache) {\r\n this._readable = readable;\r\n this._cache = cache;\r\n }\r\n async getTotalRedistributed(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getTotalRedistributed(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getTotalRedistributed(...extraParams));\r\n }\r\n async getCacheBeforeRedistribution(address, ...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getCacheBeforeRedistribution(address, ...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getCacheBeforeRedistribution(address, ...extraParams));\r\n }\r\n async getCache(address, ...extraParams) {\r\n const [cacheBeforeRedistribution, totalRedistributed] = await Promise.all([\r\n this.getCacheBeforeRedistribution(address, ...extraParams),\r\n this.getTotalRedistributed(...extraParams)\r\n ]);\r\n return cacheBeforeRedistribution.applyRedistribution(totalRedistributed);\r\n }\r\n async getNumberOfCaches(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getNumberOfCaches(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getNumberOfCaches(...extraParams));\r\n }\r\n async getPrice(...extraParams) {\r\n var _a;\r\n return (_a = this._cache.getPrice(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getPrice(...extraParams);\r\n }\r\n async getFTXPrice(...extraParams) {\r\n var _a;\r\n return (_a = this._cache.getFTXPrice(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getFTXPrice(...extraParams);\r\n }\r\n async getTotal(...extraParams) {\r\n var _a;\r\n return (_a = this._cache.getTotal(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getTotal(...extraParams);\r\n }\r\n async getStabilityDeposit(address, ...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getStabilityDeposit(address, ...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getStabilityDeposit(address, ...extraParams));\r\n }\r\n async getFTXStake(address, ...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getFTXStake(address, ...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getFTXStake(address, ...extraParams));\r\n }\r\n async getPAYDInRewardsPool(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getPAYDInRewardsPool(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getPAYDInRewardsPool(...extraParams));\r\n }\r\n async getPAYDBalance(address, ...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getPAYDBalance(address, ...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getPAYDBalance(address, ...extraParams));\r\n }\r\n async getFTXBalance(address, ...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getFTXBalance(address, ...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getFTXBalance(address, ...extraParams));\r\n }\r\n async getFTXAllowance(address, spender, ...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getFTXAllowance(address, spender, ...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getFTXAllowance(address, spender, ...extraParams));\r\n }\r\n async getFETHBalance(address, ...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getFETHBalance(address, ...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getFETHBalance(address, ...extraParams));\r\n }\r\n async getFETHDepositAmount(address, ...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getFETHDepositAmount(address, ...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getFETHDepositAmount(address, ...extraParams));\r\n }\r\n async getETHClaimAmount(address, ...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getETHClaimAmount(address, ...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getETHClaimAmount(address, ...extraParams));\r\n }\r\n async getCollateralSurplusBalance(address, ...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getCollateralSurplusBalance(address, ...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getCollateralSurplusBalance(address, ...extraParams));\r\n }\r\n async getCaches(params, ...extraParams) {\r\n var _a;\r\n const { beforeRedistribution, ...restOfParams } = params;\r\n const [totalRedistributed, caches] = await Promise.all([\r\n beforeRedistribution ? undefined : this.getTotalRedistributed(...extraParams),\r\n (_a = this._cache.getCaches({ beforeRedistribution: true, ...restOfParams }, ...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getCaches({ beforeRedistribution: true, ...restOfParams }, ...extraParams)\r\n ]);\r\n if (totalRedistributed) {\r\n return caches.map(cache => cache.applyRedistribution(totalRedistributed));\r\n }\r\n else {\r\n return caches;\r\n }\r\n }\r\n async getFees(...extraParams) {\r\n var _a;\r\n return (_a = this._cache.getFees(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getFees(...extraParams);\r\n }\r\n async getTotalStakedETH(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getTotalStakedETH(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getTotalStakedETH(...extraParams));\r\n }\r\n async getTotalLifetimeLiquidations(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getTotalLifetimeLiquidations(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getTotalLifetimeLiquidations(...extraParams));\r\n }\r\n async getTotalLifetimeStakingRewards(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getTotalLifetimeStakingRewards(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getTotalLifetimeStakingRewards(...extraParams));\r\n }\r\n async getTotalLifetimeMiningRewards(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getTotalLifetimeMiningRewards(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getTotalLifetimeMiningRewards(...extraParams));\r\n }\r\n async getCurrentRewards(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getCurrentRewards(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getCurrentRewards(...extraParams));\r\n }\r\n async getTotalRewardsDistributed(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getTotalRewardsDistributed(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getTotalRewardsDistributed(...extraParams));\r\n }\r\n async getUnfilledFETHInQueue(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getUnfilledFETHInQueue(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getUnfilledFETHInQueue(...extraParams));\r\n }\r\n async getDeactivatedETHInProgress(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getDeactivatedETHInProgress(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getDeactivatedETHInProgress(...extraParams));\r\n }\r\n async getClaimableETH(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getClaimableETH(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getClaimableETH(...extraParams));\r\n }\r\n async getAvailableValidators(...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getAvailableValidators(...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getAvailableValidators(...extraParams));\r\n }\r\n async getFrontendStatus(address, ...extraParams) {\r\n var _a;\r\n return ((_a = this._cache.getFrontendStatus(address, ...extraParams)) !== null && _a !== void 0 ? _a : this._readable.getFrontendStatus(address, ...extraParams));\r\n }\r\n}\r\nexports._CachedReadableLiquity = _CachedReadableLiquity;\r\n//# sourceMappingURL=_CachedReadableLiquity.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.FTXStake = void 0;\r\nconst Decimal_1 = require(\"./Decimal\");\r\n/**\r\n * Represents a user's FTX stake and accrued gains.\r\n *\r\n * @public\r\n */\r\nclass FTXStake {\r\n /** @internal */\r\n constructor(stakedFTX = Decimal_1.Decimal.ZERO, stakedSince, unstakeDate, tier = 0, percentage = 0) {\r\n this.stakedFTX = stakedFTX;\r\n this.stakedSince = stakedSince;\r\n this.unstakedDate = unstakeDate;\r\n this.tier = tier;\r\n this.percentage = percentage;\r\n }\r\n get isEmpty() {\r\n return this.stakedFTX.isZero && this.stakedSince == undefined;\r\n }\r\n // payd fee to ftx equivalent\r\n getDiscountAmountFromPAYD(fee, ethPrice, usdPrice) {\r\n return fee.div(ethPrice).div(usdPrice).mul(Decimal_1.Decimal.from(this.percentage).div(100));\r\n }\r\n // eth fee to ftx equivalent\r\n getDiscountAmountFromETH(fee, ethPrice) {\r\n return fee.div(ethPrice).mul(Decimal_1.Decimal.from(this.percentage).div(100));\r\n }\r\n /** @internal */\r\n toString() {\r\n return (`{ stakedFTX: ${this.stakedFTX}` +\r\n `, stakedSince: ${this.stakedSince}`);\r\n }\r\n /**\r\n * Compare to another instance of `FTXStake`.\r\n */\r\n equals(that) {\r\n return (this.stakedFTX.eq(that.stakedFTX) &&\r\n this.stakedSince == that.stakedSince);\r\n }\r\n /**\r\n * Calculate the difference between this `FTXStake` and `thatStakedFTX`.\r\n *\r\n * @returns An object representing the change, or `undefined` if the staked amounts are equal.\r\n */\r\n whatChanged(thatStakedFTX) {\r\n thatStakedFTX = Decimal_1.Decimal.from(thatStakedFTX);\r\n if (thatStakedFTX.lt(this.stakedFTX)) {\r\n return {\r\n unstakeFTX: this.stakedFTX.sub(thatStakedFTX),\r\n unstakeAllFTX: thatStakedFTX.isZero\r\n };\r\n }\r\n if (thatStakedFTX.gt(this.stakedFTX)) {\r\n return { stakeFTX: thatStakedFTX.sub(this.stakedFTX) };\r\n }\r\n }\r\n /**\r\n * Apply a {@link FTXStakeChange} to this `FTXStake`.\r\n *\r\n * @returns The new staked FTX amount.\r\n */\r\n apply(change) {\r\n if (!change) {\r\n return this.stakedFTX;\r\n }\r\n if (change.unstakeFTX !== undefined) {\r\n return change.unstakeAllFTX || this.stakedFTX.lte(change.unstakeFTX)\r\n ? Decimal_1.Decimal.ZERO\r\n : this.stakedFTX.sub(change.unstakeFTX);\r\n }\r\n else {\r\n return this.stakedFTX.add(change.stakeFTX);\r\n }\r\n }\r\n}\r\nexports.FTXStake = FTXStake;\r\n//# sourceMappingURL=FTXStake.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports._connectToMulticall = void 0;\r\nconst contracts_1 = require(\"@ethersproject/contracts\");\r\nconst multicallAbi = [\r\n {\r\n constant: true,\r\n inputs: [],\r\n name: \"getCurrentBlockTimestamp\",\r\n outputs: [\r\n {\r\n name: \"timestamp\",\r\n type: \"uint256\"\r\n }\r\n ],\r\n payable: false,\r\n stateMutability: \"view\",\r\n type: \"function\"\r\n }\r\n];\r\nconst multicallAddress = {\r\n 1: \"0xeefba1e63905ef1d7acba5a8513c70307c1ce441\",\r\n 3: \"0x53c43764255c17bd724f74c4ef150724ac50a3ed\",\r\n 4: \"0x42ad527de7d4e9d9d011ac45b31d8551f8fe9821\",\r\n 5: \"0x77dca2c955b15e9de4dbbcf1246b4b85b651e50e\",\r\n 42: \"0x2cc8688c5f75e365aaeeb4ea8d6a480405a48d2a\"\r\n};\r\nconst hasMulticall = (chainId) => chainId in multicallAddress;\r\nconst _connectToMulticall = (signerOrProvider, chainId) => hasMulticall(chainId)\r\n ? new contracts_1.Contract(multicallAddress[chainId], multicallAbi, signerOrProvider)\r\n : undefined;\r\nexports._connectToMulticall = _connectToMulticall;\r\n//# sourceMappingURL=_Multicall.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.ObservableEthersLiquity = void 0;\r\nconst EthersLiquityConnection_1 = require(\"./EthersLiquityConnection\");\r\nconst debouncingDelayMs = 50;\r\nconst debounce = (listener) => {\r\n let timeoutId = undefined;\r\n let latestBlock = 0;\r\n return (...args) => {\r\n const event = args[args.length - 1];\r\n if (event.blockNumber !== undefined && event.blockNumber > latestBlock) {\r\n latestBlock = event.blockNumber;\r\n }\r\n if (timeoutId !== undefined) {\r\n clearTimeout(timeoutId);\r\n }\r\n timeoutId = setTimeout(() => {\r\n listener(latestBlock);\r\n timeoutId = undefined;\r\n }, debouncingDelayMs);\r\n };\r\n};\r\n/** @alpha */\r\nclass ObservableEthersLiquity {\r\n constructor(readable) {\r\n this._readable = readable;\r\n }\r\n watchTotalRedistributed(onTotalRedistributedChanged) {\r\n const { activePool, defaultPool } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const etherSent = activePool.filters.EtherSent();\r\n const redistributionListener = debounce((blockTag) => {\r\n this._readable.getTotalRedistributed({ blockTag }).then(onTotalRedistributedChanged);\r\n });\r\n const etherSentListener = (toAddress, _amount, event) => {\r\n if (toAddress === defaultPool.address) {\r\n redistributionListener(event);\r\n }\r\n };\r\n activePool.on(etherSent, etherSentListener);\r\n return () => {\r\n activePool.removeListener(etherSent, etherSentListener);\r\n };\r\n }\r\n watchCacheWithoutRewards(onCacheChanged, address) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this._readable.connection));\r\n const { cacheManager, borrowerOperations } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const cacheUpdatedByCacheManager = cacheManager.filters.CacheUpdated(address);\r\n const cacheUpdatedByBorrowerOperations = borrowerOperations.filters.CacheUpdated(address);\r\n const cacheListener = debounce((blockTag) => {\r\n this._readable.getCacheBeforeRedistribution(address, { blockTag }).then(onCacheChanged);\r\n });\r\n cacheManager.on(cacheUpdatedByCacheManager, cacheListener);\r\n borrowerOperations.on(cacheUpdatedByBorrowerOperations, cacheListener);\r\n return () => {\r\n cacheManager.removeListener(cacheUpdatedByCacheManager, cacheListener);\r\n borrowerOperations.removeListener(cacheUpdatedByBorrowerOperations, cacheListener);\r\n };\r\n }\r\n watchNumberOfCaches(onNumberOfCachesChanged) {\r\n const { cacheManager } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const { CacheUpdated } = cacheManager.filters;\r\n const cacheUpdated = CacheUpdated();\r\n const cacheUpdatedListener = debounce((blockTag) => {\r\n this._readable.getNumberOfCaches({ blockTag }).then(onNumberOfCachesChanged);\r\n });\r\n cacheManager.on(cacheUpdated, cacheUpdatedListener);\r\n return () => {\r\n cacheManager.removeListener(cacheUpdated, cacheUpdatedListener);\r\n };\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n watchPrice(onPriceChanged) {\r\n // TODO revisit\r\n // We no longer have our own PriceUpdated events. If we want to implement this in an event-based\r\n // manner, we'll need to listen to aggregator events directly. Or we could do polling.\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n watchTotal(onTotalChanged) {\r\n const { cacheManager } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const { CacheUpdated } = cacheManager.filters;\r\n const cacheUpdated = CacheUpdated();\r\n const totalListener = debounce((blockTag) => {\r\n this._readable.getTotal({ blockTag }).then(onTotalChanged);\r\n });\r\n cacheManager.on(cacheUpdated, totalListener);\r\n return () => {\r\n cacheManager.removeListener(cacheUpdated, totalListener);\r\n };\r\n }\r\n watchStabilityDeposit(onStabilityDepositChanged, address) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this._readable.connection));\r\n const { activePool, rewardsPool } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const { UserDepositChanged } = rewardsPool.filters;\r\n const { EtherSent } = activePool.filters;\r\n const userDepositChanged = UserDepositChanged(address);\r\n const etherSent = EtherSent();\r\n const depositListener = debounce((blockTag) => {\r\n this._readable.getStabilityDeposit(address, { blockTag }).then(onStabilityDepositChanged);\r\n });\r\n const etherSentListener = (toAddress, _amount, event) => {\r\n if (toAddress === rewardsPool.address) {\r\n // Liquidation while Stability Pool has some deposits\r\n // There may be new gains\r\n depositListener(event);\r\n }\r\n };\r\n rewardsPool.on(userDepositChanged, depositListener);\r\n activePool.on(etherSent, etherSentListener);\r\n return () => {\r\n rewardsPool.removeListener(userDepositChanged, depositListener);\r\n activePool.removeListener(etherSent, etherSentListener);\r\n };\r\n }\r\n watchPAYDInRewardsPool(onPAYDInRewardsPoolChanged) {\r\n const { paydToken, rewardsPool } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const { Transfer } = paydToken.filters;\r\n const transferPAYDFromRewardsPool = Transfer(rewardsPool.address);\r\n const transferPAYDToRewardsPool = Transfer(null, rewardsPool.address);\r\n const rewardsPoolPAYDFilters = [transferPAYDFromRewardsPool, transferPAYDToRewardsPool];\r\n const rewardsPoolPAYDListener = debounce((blockTag) => {\r\n this._readable.getPAYDInRewardsPool({ blockTag }).then(onPAYDInRewardsPoolChanged);\r\n });\r\n rewardsPoolPAYDFilters.forEach(filter => paydToken.on(filter, rewardsPoolPAYDListener));\r\n return () => rewardsPoolPAYDFilters.forEach(filter => paydToken.removeListener(filter, rewardsPoolPAYDListener));\r\n }\r\n watchPAYDBalance(onPAYDBalanceChanged, address) {\r\n address !== null && address !== void 0 ? address : (address = EthersLiquityConnection_1._requireAddress(this._readable.connection));\r\n const { paydToken } = EthersLiquityConnection_1._getContracts(this._readable.connection);\r\n const { Transfer } = paydToken.filters;\r\n const transferPAYDFromUser = Transfer(address);\r\n const transferPAYDToUser = Transfer(null, address);\r\n const paydTransferFilters = [transferPAYDFromUser, transferPAYDToUser];\r\n const paydTransferListener = debounce((blockTag) => {\r\n this._readable.getPAYDBalance(address, { blockTag }).then(onPAYDBalanceChanged);\r\n });\r\n paydTransferFilters.forEach(filter => paydToken.on(filter, paydTransferListener));\r\n return () => paydTransferFilters.forEach(filter => paydToken.removeListener(filter, paydTransferListener));\r\n }\r\n}\r\nexports.ObservableEthersLiquity = ObservableEthersLiquity;\r\n//# sourceMappingURL=ObservableEthersLiquity.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.logsToString = void 0;\r\nconst bignumber_1 = require(\"@ethersproject/bignumber\");\r\nconst constants_1 = require(\"@ethersproject/constants\");\r\nconst lib_base_1 = require(\"@liquity/lib-base\");\r\nconst interfaceLookupFrom = (contractLookup) => {\r\n return Object.fromEntries(Object.entries(contractLookup).map(([, contract]) => [contract.address, contract.interface]));\r\n};\r\nconst nameLookupFrom = (contractLookup) => {\r\n return Object.fromEntries(Object.entries(contractLookup).map(([name, contract]) => [contract.address, name]));\r\n};\r\nconst tryToParseLog = (log, interfaceLookup) => {\r\n const { address } = log;\r\n if (address in interfaceLookup) {\r\n try {\r\n return { address, logDescription: interfaceLookup[address].parseLog(log) };\r\n }\r\n catch (err) {\r\n console.warn(\"Failed to parse log:\");\r\n console.warn(log);\r\n console.warn(\"Caught:\");\r\n console.warn(err);\r\n }\r\n }\r\n};\r\nconst parseLogs = (logs, interfaceLookup) => {\r\n const parsedLogs = [];\r\n const unparsedLogs = [];\r\n logs.forEach(log => {\r\n const parsedLog = tryToParseLog(log, interfaceLookup);\r\n if (parsedLog) {\r\n parsedLogs.push(parsedLog);\r\n }\r\n else {\r\n unparsedLogs.push(log);\r\n }\r\n });\r\n return [parsedLogs, unparsedLogs];\r\n};\r\nconst VERY_BIG = bignumber_1.BigNumber.from(10).pow(9);\r\nconst prettify = (arg, nameLookup) => {\r\n if (bignumber_1.BigNumber.isBigNumber(arg)) {\r\n if (arg.gte(VERY_BIG)) {\r\n return `${lib_base_1.Decimal.fromBigNumberString(arg.toHexString())}e18`;\r\n }\r\n else {\r\n return arg.toString();\r\n }\r\n }\r\n else if (typeof arg === \"string\") {\r\n return arg === constants_1.AddressZero\r\n ? \"address(0)\"\r\n : nameLookup && arg in nameLookup\r\n ? nameLookup[arg]\r\n : arg;\r\n }\r\n else {\r\n return String(arg);\r\n }\r\n};\r\nconst logDescriptionToString = (logDescription, nameLookup) => {\r\n const prettyEntries = Object.entries(logDescription.args)\r\n .filter(([key]) => !key.match(/^[0-9]/))\r\n .map(([key, value]) => `${key}: ${prettify(value, nameLookup)}`);\r\n return `${logDescription.name}({ ${prettyEntries.join(\", \")} })`;\r\n};\r\nconst logsToString = (receipt, contracts) => {\r\n const contractLookup = contracts;\r\n const interfaceLookup = interfaceLookupFrom(contractLookup);\r\n const contractNameLookup = nameLookupFrom(contractLookup);\r\n const nameLookup = {\r\n [receipt.from]: \"user\",\r\n ...contractNameLookup\r\n };\r\n const [parsedLogs, unparsedLogs] = parseLogs(receipt.logs, interfaceLookup);\r\n if (unparsedLogs.length > 0) {\r\n console.warn(\"Warning: not all logs were parsed. Unparsed logs:\");\r\n console.warn(unparsedLogs);\r\n }\r\n if (parsedLogs.length > 0) {\r\n return (`Logs of tx ${receipt.transactionHash}:\\n` +\r\n parsedLogs\r\n .map(({ address, logDescription }) => ` ${contractNameLookup[address]}.${logDescriptionToString(logDescription, nameLookup)}`)\r\n .join(\"\\n\"));\r\n }\r\n else {\r\n return `No logs were parsed in tx ${receipt.transactionHash}`;\r\n }\r\n};\r\nexports.logsToString = logsToString;\r\n//# sourceMappingURL=parseLogs.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.EthersLiquity = exports.EthersTransactionFailedError = void 0;\r\nconst lib_base_1 = require(\"@liquity/lib-base\");\r\nconst EthersLiquityConnection_1 = require(\"./EthersLiquityConnection\");\r\nconst PopulatableEthersLiquity_1 = require(\"./PopulatableEthersLiquity\");\r\nconst ReadableEthersLiquity_1 = require(\"./ReadableEthersLiquity\");\r\nconst SendableEthersLiquity_1 = require(\"./SendableEthersLiquity\");\r\n/**\r\n * Thrown by {@link EthersLiquity} in case of transaction failure.\r\n *\r\n * @public\r\n */\r\nclass EthersTransactionFailedError extends lib_base_1.TransactionFailedError {\r\n constructor(message, failedReceipt) {\r\n super(\"EthersTransactionFailedError\", message, failedReceipt);\r\n }\r\n}\r\nexports.EthersTransactionFailedError = EthersTransactionFailedError;\r\nconst waitForSuccess = async (tx) => {\r\n const receipt = await tx.waitForReceipt();\r\n if (receipt.status !== \"succeeded\") {\r\n throw new EthersTransactionFailedError(\"Transaction failed\", receipt);\r\n }\r\n return receipt.details;\r\n};\r\n/**\r\n * Convenience class that combines multiple interfaces of the library in one object.\r\n *\r\n * @public\r\n */\r\nclass EthersLiquity {\r\n /** @internal */\r\n constructor(readable) {\r\n this._readable = readable;\r\n this.connection = readable.connection;\r\n this.populate = new PopulatableEthersLiquity_1.PopulatableEthersLiquity(readable);\r\n this.send = new SendableEthersLiquity_1.SendableEthersLiquity(this.populate);\r\n }\r\n /** @internal */\r\n static _from(connection) {\r\n if (EthersLiquityConnection_1._usingStore(connection)) {\r\n return new _EthersLiquityWithStore(ReadableEthersLiquity_1.ReadableEthersLiquity._from(connection));\r\n }\r\n else {\r\n return new EthersLiquity(ReadableEthersLiquity_1.ReadableEthersLiquity._from(connection));\r\n }\r\n }\r\n static async connect(signerOrProvider, optionalParams) {\r\n return EthersLiquity._from(await EthersLiquityConnection_1._connect(signerOrProvider, optionalParams));\r\n }\r\n hasStore() {\r\n return false;\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getTotalRedistributed} */\r\n getTotalRedistributed(overrides) {\r\n return this._readable.getTotalRedistributed(overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getCacheBeforeRedistribution} */\r\n getCacheBeforeRedistribution(address, overrides) {\r\n return this._readable.getCacheBeforeRedistribution(address, overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getCache} */\r\n getCache(address, overrides) {\r\n return this._readable.getCache(address, overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getNumberOfCaches} */\r\n getNumberOfCaches(overrides) {\r\n return this._readable.getNumberOfCaches(overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getPrice} */\r\n getPrice(overrides) {\r\n return this._readable.getPrice(overrides);\r\n }\r\n getFTXPrice(overrides) {\r\n return this._readable.getFTXPrice(overrides);\r\n }\r\n /** @internal */\r\n _getActivePool(overrides) {\r\n return this._readable._getActivePool(overrides);\r\n }\r\n /** @internal */\r\n _getDefaultPool(overrides) {\r\n return this._readable._getDefaultPool(overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getTotal} */\r\n getTotal(overrides) {\r\n return this._readable.getTotal(overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getStabilityDeposit} */\r\n getStabilityDeposit(address, overrides) {\r\n return this._readable.getStabilityDeposit(address, overrides);\r\n }\r\n getFTXStake(address, overrides) {\r\n return this._readable.getFTXStake(address, overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getPAYDInRewardsPool} */\r\n getPAYDInRewardsPool(overrides) {\r\n return this._readable.getPAYDInRewardsPool(overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getPAYDBalance} */\r\n getPAYDBalance(address, overrides) {\r\n return this._readable.getPAYDBalance(address, overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getPAYDBalance} */\r\n getFTXBalance(address, overrides) {\r\n return this._readable.getFTXBalance(address, overrides);\r\n }\r\n getFTXAllowance(address, spender, overrides) {\r\n return this._readable.getFTXAllowance(address, spender, overrides);\r\n }\r\n getFETHBalance(address, overrides) {\r\n return this._readable.getFETHBalance(address, overrides);\r\n }\r\n getETHClaimAmount(address, overrides) {\r\n return this._readable.getETHClaimAmount(address, overrides);\r\n }\r\n getFETHDepositAmount(address, overrides) {\r\n return this._readable.getFETHDepositAmount(address, overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getCollateralSurplusBalance} */\r\n getCollateralSurplusBalance(address, overrides) {\r\n return this._readable.getCollateralSurplusBalance(address, overrides);\r\n }\r\n getCaches(params, overrides) {\r\n return this._readable.getCaches(params, overrides);\r\n }\r\n /** @internal */\r\n _getBlockTimestamp(blockTag) {\r\n return this._readable._getBlockTimestamp(blockTag);\r\n }\r\n /** @internal */\r\n _getFeesFactory(overrides) {\r\n return this._readable._getFeesFactory(overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getFees} */\r\n getFees(overrides) {\r\n return this._readable.getFees(overrides);\r\n }\r\n getTotalLifetimeLiquidations(overrides) {\r\n return this._readable.getTotalLifetimeLiquidations(overrides);\r\n }\r\n getTotalLifetimeStakingRewards(overrides) {\r\n return this._readable.getTotalLifetimeStakingRewards(overrides);\r\n }\r\n getTotalLifetimeMiningRewards(overrides) {\r\n return this._readable.getTotalLifetimeMiningRewards(overrides);\r\n }\r\n getCurrentRewards(overrides) {\r\n return this._readable.getCurrentRewards(overrides);\r\n }\r\n getTotalRewardsDistributed(overrides) {\r\n return this._readable.getTotalRewardsDistributed(overrides);\r\n }\r\n getUnfilledFETHInQueue(overrides) {\r\n return this._readable.getUnfilledFETHInQueue(overrides);\r\n }\r\n getDeactivatedETHInProgress(overrides) {\r\n return this._readable.getDeactivatedETHInProgress(overrides);\r\n }\r\n getClaimableETH(overrides) {\r\n return this._readable.getClaimableETH(overrides);\r\n }\r\n getAvailableValidators(overrides) {\r\n return this._readable.getAvailableValidators(overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getTotalStakedETH} */\r\n getTotalStakedETH(overrides) {\r\n return this._readable.getTotalStakedETH(overrides);\r\n }\r\n /** {@inheritDoc @liquity/lib-base#ReadableLiquity.getFrontendStatus} */\r\n getFrontendStatus(address, overrides) {\r\n return this._readable.getFrontendStatus(address, overrides);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.openCache}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n openCache(params, maxBorrowingRateOrOptionalParams, overrides) {\r\n return this.send\r\n .openCache(params, maxBorrowingRateOrOptionalParams, overrides)\r\n .then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.closeCache}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n closeCache(overrides) {\r\n return this.send.closeCache(overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.adjustCache}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n adjustCache(params, maxBorrowingRateOrOptionalParams, overrides) {\r\n return this.send\r\n .adjustCache(params, maxBorrowingRateOrOptionalParams, overrides)\r\n .then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.depositCollateral}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n depositCollateral(amount, overrides) {\r\n return this.send.depositCollateral(amount, overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.withdrawCollateral}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n withdrawCollateral(amount, overrides) {\r\n return this.send.withdrawCollateral(amount, overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.borrowPAYD}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n borrowPAYD(amount, maxBorrowingRate, overrides) {\r\n return this.send.borrowPAYD(amount, maxBorrowingRate, overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.repayPAYD}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n repayPAYD(amount, overrides) {\r\n return this.send.repayPAYD(amount, overrides).then(waitForSuccess);\r\n }\r\n /** @internal */\r\n setPrice(price, overrides) {\r\n return this.send.setPrice(price, overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.liquidate}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n liquidate(address, overrides) {\r\n return this.send.liquidate(address, overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.liquidateUpTo}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n liquidateUpTo(maximumNumberOfCachesToLiquidate, overrides) {\r\n return this.send.liquidateUpTo(maximumNumberOfCachesToLiquidate, overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.depositPAYDInRewardsPool}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n depositPAYDInRewardsPool(amount, frontendTag, overrides) {\r\n return this.send.depositPAYDInRewardsPool(amount, frontendTag, overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.withdrawPAYDFromRewardsPool}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n withdrawPAYDFromRewardsPool(amount, overrides) {\r\n return this.send.withdrawPAYDFromRewardsPool(amount, overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.withdrawGainsFromRewardsPool}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n withdrawGainsFromRewardsPool(overrides) {\r\n return this.send.withdrawGainsFromRewardsPool(overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.sendPAYD}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n sendPAYD(toAddress, amount, overrides) {\r\n return this.send.sendPAYD(toAddress, amount, overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.redeemPAYD}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n redeemPAYD(amount, maxRedemptionRate, minEthAmount, overrides) {\r\n return this.send.redeemPAYD(amount, maxRedemptionRate, minEthAmount, overrides).then(waitForSuccess);\r\n }\r\n approveFTXStaking(amount, overrides) {\r\n return this.send.approveFTXStaking(amount, overrides).then(waitForSuccess);\r\n }\r\n stakeFTX(amount, overrides) {\r\n return this.send.stakeFTX(amount, overrides).then(waitForSuccess);\r\n }\r\n unstakeFTX(amount, overrides) {\r\n return this.send.unstakeFTX(amount, overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.claimCollateralSurplus}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n claimCollateralSurplus(overrides) {\r\n return this.send.claimCollateralSurplus(overrides).then(waitForSuccess);\r\n }\r\n depositFETH(amount, overrides) {\r\n return this.send.depositFETH(amount, overrides).then(waitForSuccess);\r\n }\r\n claimETH(overrides) {\r\n return this.send.claimETH(overrides).then(waitForSuccess);\r\n }\r\n cancelFETHDeposit(address, overrides) {\r\n return this.send.cancelFETHDeposit(address, overrides).then(waitForSuccess);\r\n }\r\n /**\r\n * {@inheritDoc @liquity/lib-base#TransactableLiquity.withdrawETHGain}\r\n *\r\n * @throws\r\n * Throws {@link EthersTransactionFailedError} in case of transaction failure.\r\n * Throws {@link EthersTransactionCancelledError} if the transaction is cancelled or replaced.\r\n */\r\n withdrawETHGain(overrides) {\r\n return this.send.withdrawETHGain(overrides).then(waitForSuccess);\r\n }\r\n depositMultipleValidators(forkVersion, pubkeys, withdrawal_credentials, signatures, deposit_data_root, overrides) {\r\n return this.send.depositMultipleValidators(forkVersion, pubkeys, withdrawal_credentials, signatures, deposit_data_root, overrides).then(waitForSuccess);\r\n }\r\n}\r\nexports.EthersLiquity = EthersLiquity;\r\nclass _EthersLiquityWithStore extends EthersLiquity {\r\n constructor(readable) {\r\n super(readable);\r\n this.store = readable.store;\r\n }\r\n hasStore(store) {\r\n return store === undefined || store === this.connection.useStore;\r\n }\r\n}\r\n//# sourceMappingURL=EthersLiquity.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.useLiquityReducer = void 0;\r\nconst react_1 = require(\"react\");\r\nconst equals_1 = require(\"../utils/equals\");\r\nconst useLiquityStore_1 = require(\"./useLiquityStore\");\r\nconst useLiquityReducer = (reduce, init) => {\r\n const store = useLiquityStore_1.useLiquityStore();\r\n const oldStore = react_1.useRef(store);\r\n const state = react_1.useRef(init(store.state));\r\n const [, rerender] = react_1.useReducer(() => ({}), {});\r\n const dispatch = react_1.useCallback((action) => {\r\n const newState = reduce(state.current, action);\r\n if (!equals_1.equals(newState, state.current)) {\r\n state.current = newState;\r\n rerender();\r\n }\r\n }, [reduce]);\r\n react_1.useEffect(() => store.subscribe(params => dispatch({ type: \"updateStore\", ...params })), [\r\n store,\r\n dispatch\r\n ]);\r\n if (oldStore.current !== store) {\r\n state.current = init(store.state);\r\n oldStore.current = store;\r\n }\r\n return [state.current, dispatch];\r\n};\r\nexports.useLiquityReducer = useLiquityReducer;\r\n//# sourceMappingURL=useLiquityReducer.js.map","\"use strict\";\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.useLiquitySelector = void 0;\r\nconst react_1 = require(\"react\");\r\nconst equals_1 = require(\"../utils/equals\");\r\nconst useLiquityStore_1 = require(\"./useLiquityStore\");\r\nconst useLiquitySelector = (select) => {\r\n const store = useLiquityStore_1.useLiquityStore();\r\n const [, rerender] = react_1.useReducer(() => ({}), {});\r\n react_1.useEffect(() => store.subscribe(({ newState, oldState }) => {\r\n if (!equals_1.equals(select(newState), select(oldState))) {\r\n rerender();\r\n }\r\n }), [store, select]);\r\n return select(store.state);\r\n};\r\nexports.useLiquitySelector = useLiquitySelector;\r\n//# sourceMappingURL=useLiquitySelector.js.map","export default __webpack_public_path__ + \"static/media/emailsent.0333ba67.png\";","export class AsyncActionType {\r\n constructor(prefix, actionType) {\r\n const prefixedActionType = prefix ? prefix + \"_\" + actionType : actionType;\r\n this.ActionType = actionType;\r\n this.Prefix = prefix;\r\n this.PrefixedActionType = prefixedActionType;\r\n this.STARTED = prefixedActionType+'.STARTED';\r\n this.SUCCEEDED = prefixedActionType+'.SUCCEEDED';\r\n this.FAILED = prefixedActionType+'.FAILED';\r\n this.ENDED = prefixedActionType+'.ENDED';\r\n this.CACHED = prefixedActionType+'.CACHED';\r\n }\r\n bindActionReducer(reducers,async) {\r\n const combined = typeof reducers === \"function\";\r\n if (async) {\r\n return {\r\n [this.STARTED]:combined ? reducers : reducers.STARTED,\r\n [this.SUCCEEDED]:combined ? reducers : reducers.SUCCEEDED,\r\n [this.FAILED]:combined ? reducers : reducers.FAILED,\r\n [this.ENDED]:combined ? reducers : reducers.ENDED,\r\n [this.CACHED]:combined ? reducers : reducers.CACHED,\r\n }\r\n }\r\n else {\r\n return {\r\n [this.PrefixedActionType]: reducers,\r\n }\r\n }\r\n }\r\n}\r\nexport const getAsyncTypes = (prefix,actionType) => new AsyncActionType(prefix,actionType); ","import * as loglevel from 'loglevel';\r\n\r\nif (process.env.NODE_ENV === `development`) {\r\n loglevel.setLevel('debug');\r\n}\r\nelse {\r\n loglevel.setLevel('info', false);\r\n}\r\n\r\nexport default loglevel;","import moment from 'moment';\r\nimport log from './logger';\r\n\r\n\r\n// Determine user device or browser locale\r\n// Return string locale (e.g: 'ru' or 'en-US' or 'de-DE');\r\nconst getNavigatorLanguage = () => {\r\n if (navigator.languages && navigator.languages.length) {\r\n return navigator.languages[0];\r\n } else {\r\n return navigator.language || navigator.browserLanguage || 'en';\r\n }\r\n}\r\n\r\n/* current selected language, default to browser default */\r\nlet currentLanguage = getNavigatorLanguage();\r\nlet cultureId = null;\r\n// Assigning locale to moment.js at the top level\r\nmoment.locale(currentLanguage);\r\n\r\nexport function getCurrentLanguage() {\r\n return { lang: currentLanguage, cultureId: cultureId }\r\n}\r\nexport function switchLanguage(lang, CultureId) {\r\n currentLanguage = lang || currentLanguage || \"en\";\r\n cultureId = CultureId;\r\n moment.locale(currentLanguage);\r\n}\r\n\r\n// Localized amount formatting for display only\r\nexport function toLocalAmountFormat(value) {\r\n try {\r\n return new Intl.NumberFormat(currentLanguage, { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(value);\r\n } catch (e) {\r\n return value;\r\n }\r\n}\r\n\r\n// Localized amount formatting for input only\r\nexport function toInputLocalAmountFormat(value) {\r\n try {\r\n return new Intl.NumberFormat(currentLanguage, { minimumFractionDigits: 2, maximumFractionDigits: 2, useGrouping: false }).format(value);\r\n } catch (e) {\r\n return value;\r\n }\r\n}\r\n\r\n// Localized date formatting\r\nexport function toLocalDateFormat(value) {\r\n try {\r\n var x = value.replace(/\\./g, '-');\r\n var localDate = moment(x).format('L');\r\n\r\n if (localDate === 'Invalid date') {\r\n localDate = moment(value).format('L');\r\n }\r\n\r\n // Replaces slash (/) and dash (-) with a dot (.) in date format\r\n var formattedDate = localDate.replace(/\\/|-/g, '.');\r\n return formattedDate;\r\n } catch (e) {\r\n return value;\r\n }\r\n}\r\n\r\nexport function toMoney(value) {\r\n try {\r\n return parseFloat(value).toFixed(2).replace(/\\d(?=(\\d{3})+\\.)/g, '$&,');\r\n } catch (e) {\r\n return value;\r\n }\r\n}\r\n\r\nexport function toMoneyWithoutDecimal(value) {\r\n try {\r\n return parseFloat(value).toFixed(0).replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\r\n } catch (e) {\r\n return value;\r\n }\r\n}\r\n\r\nexport function toDate(value) {\r\n try {\r\n // return moment(value).format(\"L\");\r\n // return moment(value).format(\"LL\");\r\n return moment(value).format(\"YYYY.MM.DD\");\r\n // Full list of date/time formats is here: http://momentjs.com/docs/#/displaying/format/\r\n } catch (e) {\r\n return value;\r\n }\r\n}\r\n\r\nexport function strFormat(str, ...args) {\r\n const x = (str || \"\").replace(/{(\\d*)}/g, function (s, i, pos, ...captures) {\r\n const replacement = args[i];\r\n return replacement !== undefined ? replacement : s;\r\n });\r\n return x;\r\n}\r\n\r\nexport function cutHash(value) {\r\n return value.split(\"#\")[1];\r\n}\r\n\r\nexport function toLower(value) {\r\n try {\r\n return value.toLowerCase();\r\n } catch (e) {\r\n return value;\r\n }\r\n}\r\n\r\nexport function hideAccount(value) {\r\n try {\r\n var result = value.replace(/^(\\+?[\\d]{0})\\d+(\\d{2})$/g, \"$1***********$2\");\r\n return result;\r\n // Full list of date/time formats is here: http://momentjs.com/docs/#/displaying/format/\r\n } catch (e) {\r\n return value;\r\n }\r\n}\r\n\r\nexport function hideCreditCard(value) {\r\n try {\r\n var result = value.replace(/^(\\+?[\\d]{0})\\d+(\\d{4})$/g, \"$2\");\r\n return result;\r\n // Full list of date/time formats is here: http://momentjs.com/docs/#/displaying/format/\r\n } catch (e) {\r\n return value;\r\n }\r\n}\r\n\r\nexport function valueToNumber(value, defaultIfFailed) {\r\n try {\r\n var result = parseFloat(value.replace(/,/g, '.'));\r\n return isNaN(result) && defaultIfFailed !== undefined && defaultIfFailed !== null ? defaultIfFailed : result;\r\n } catch (e) {\r\n return defaultIfFailed || value;\r\n }\r\n}\r\n\r\nexport function isNumber(value) {\r\n try {\r\n const regex = new RegExp(/^-?(?:\\d+|\\d{1,3}(?:\\d{3})+)(?:(\\.|,)\\d+)?$/);\r\n var result = value.match(regex);\r\n return result;\r\n } catch (e) {\r\n return true;\r\n }\r\n}\r\n\r\nexport function sliceK(value) {\r\n try {\r\n var result = value.toString().slice(0, -3);\r\n return result;\r\n } catch (e) {\r\n return true;\r\n }\r\n}\r\n\r\nexport function sliceFirstLetter(value) {\r\n try {\r\n var result = value.toString().slice(0, 1);\r\n return result;\r\n } catch (e) {\r\n return true;\r\n }\r\n}\r\n\r\nexport function removeSpaces(value) {\r\n try {\r\n var result = value.toString().replace(/\\s/g, '');\r\n return result;\r\n } catch (e) {\r\n return true;\r\n }\r\n}\r\n\r\nexport function takeAfterDash(value) {\r\n try {\r\n var result = value.toString().split('-')[1];\r\n return result;\r\n } catch (e) {\r\n return true;\r\n }\r\n}\r\n\r\nexport function readUrl(value) {\r\n if (value.includes('http://') || value.includes('https://')) {\r\n return value;\r\n }\r\n else {\r\n return `http://${value}`;\r\n }\r\n}\r\n\r\nexport function cutProtocol(value) {\r\n if (value.includes('http://') || value.includes('https://')) {\r\n return value.split(\"://\")[1];\r\n }\r\n else {\r\n return value;\r\n }\r\n}\r\n\r\nexport function getUrlBeforeRouter() {\r\n const routerStart = window.location.href.search(\"/#/\");\r\n const beforeRouter = window.location.href.slice(0, routerStart);\r\n return beforeRouter;\r\n}\r\n\r\n\r\nexport function _getQueryString(location, name) {\r\n const url = (location || window.location).href;\r\n\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n}\r\n\r\nexport function getQueryString(location, name) {\r\n try {\r\n const query = new URLSearchParams(location.search);\r\n return query.get(name);\r\n }\r\n catch (e) {\r\n return _getQueryString(location, name);\r\n }\r\n}\r\n\r\n\r\nexport function toCapital(value) {\r\n try {\r\n // var result = value.toLowerCase().replace(/\\b[a-z]/g, function(letter) {\r\n // return letter.toUpperCase();\r\n // });\r\n\r\n var uppercase = value.toUpperCase();\r\n if (value.toLowerCase() === uppercase) {\r\n return value;\r\n }\r\n else {\r\n if (value === uppercase) {\r\n var firstLtr = 0;\r\n for (var i = 0; i < value.length; i++) {\r\n if (i == 0 && /[a-zA-Z]/.test(value.charAt(i))) firstLtr = 2;\r\n if (firstLtr == 0 && /[a-zA-Z]/.test(value.charAt(i))) firstLtr = 2;\r\n if (firstLtr == 1 && /[^a-zA-Z]/.test(value.charAt(i))) {\r\n if (value.charAt(i) == \"'\") {\r\n if (i + 2 == value.length && /[a-zA-Z]/.test(value.charAt(i + 1))) firstLtr = 3;\r\n else if (i + 2 < value.length && /[^a-zA-Z]/.test(value.charAt(i + 2))) firstLtr = 3;\r\n }\r\n if (firstLtr == 3) firstLtr = 1;\r\n else firstLtr = 0;\r\n }\r\n if (firstLtr == 2) {\r\n firstLtr = 1;\r\n value = value.substr(0, i) + value.charAt(i).toUpperCase() + value.substr(i + 1);\r\n }\r\n else {\r\n value = value.substr(0, i) + value.charAt(i).toLowerCase() + value.substr(i + 1);\r\n }\r\n }\r\n return value;\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n } catch (e) {\r\n return true;\r\n }\r\n}\r\n\r\nexport function formatBytes(bytes, decimals = 2) {\r\n if (bytes === 0) return '0 Bytes';\r\n\r\n const k = 1024;\r\n const dm = decimals < 0 ? 0 : decimals;\r\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\r\n\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n\r\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\r\n}\r\n\r\nexport function formatContent(value, format) {\r\n if (format === 'Money' || format === 'Currency') {\r\n try {\r\n if (value.length > 0) {\r\n return parseFloat(value).toFixed(2).replace(/\\d(?=(\\d{3})+\\.)/g, '$&,');\r\n } else {\r\n return value;\r\n }\r\n } catch (e) {\r\n return value;\r\n }\r\n } \r\n else if (format === 'HyperLink' || format === 'HyperLink')\r\n {\r\n if ((value || '').match(\"@\") && !(value || '').match(\"^(http|ftp|mailto|tel)\")) {\r\n return \"mailto:\" + value;\r\n }\r\n else return value;\r\n }\r\n else {\r\n return value;\r\n }\r\n}","import log from './logger';\r\nimport { valueToNumber, toCapital, toLocalDateFormat, formatContent } from './formatter';\r\n\r\nexport function getSelectedFromList(key, keyList, keyColumeName, defaultObj) {\r\n const x = keyList.filter((v) => v[keyColumeName] === key);\r\n return x;\r\n}\r\n\r\nexport function objectListToDropdownList(objectList, fn) {\r\n return objectList\r\n .map((v, i) => fn(v, i))\r\n .map(o => ({\r\n ...o,\r\n label: toCapital(o.label)\r\n }));\r\n}\r\n\r\nexport function objectListToDropdownListNoFormat(objectList, fn) {\r\n return objectList\r\n .map((v, i) => fn(v, i))\r\n .map(o => ({\r\n ...o,\r\n label: o.label\r\n }));\r\n}\r\n\r\nexport function ToReactDropdownObj(keyName, labelName) {\r\n return function (o) {\r\n return {\r\n ...o // preserve existing data including Ddl additional column\r\n // standard value for React including label that cannot be empty(need single space)\r\n , key: (o['value'] || o['key'] || o[keyName] || \"\").trim()\r\n , label: o['label'] || o[labelName] || ' '\r\n , value: (o['value'] || o['key'] || o[keyName] || \"\").trim()\r\n }\r\n }\r\n}\r\n\r\nexport function ToReactDropdownList(objectList, keyName, labelName, noCapitalFormat) {\r\n if (noCapitalFormat) {\r\n return objectListToDropdownListNoFormat(objectList || [], ToReactDropdownObj(keyName, labelName)).filter(o => o.key);\r\n }\r\n else {\r\n return objectListToDropdownList(objectList || [], ToReactDropdownObj(keyName, labelName)).filter(o => o.key);\r\n }\r\n}\r\n\r\nexport function objectListToDict(objectList, keyColumnName, fn) {\r\n return objectList.length === 0 ? {} : objectList.reduce((r, v, i, a) => {\r\n r[typeof keyColumnName === \"function\" ? keyColumnName(v) : v[keyColumnName]] = (typeof fn === \"function\") ? fn(v) : v;\r\n return r\r\n }, {});\r\n}\r\n\r\nexport function mergeArray(l1, l2, keyFn) {\r\n if (l1.length === 0) return l2;\r\n const o = l1.reduce((a, v) => { a[keyFn(v)] = v; return a; }, {});\r\n return [\r\n ...l1\r\n .map(o => ({\r\n ...o,\r\n label: toCapital(o.label)\r\n }))\r\n ,\r\n ...l2.filter(v => !o[keyFn(v)] && keyFn(v))\r\n ];\r\n}\r\n\r\nexport function naviPath(mstId,dtlId,path)\r\n{ \r\n return path.replace(/:mstId\\?/,mstId || '_').replace(/:dtlId\\?/,dtlId || '_');\r\n}\r\n\r\nexport function getNaviPath(naviBar,type,fallbackPath)\r\n{\r\n return naviBar.reduce((a,v)=>v.type===type ? v.path: a,fallbackPath);\r\n}\r\nexport function getAddMstPath(path)\r\n{\r\n return path.replace(/[0-9]*$/,\"\").replace(/_$/,\"\");\r\n}\r\nexport function getAddDtlPath(path)\r\n{\r\n return path.replace(/[0-9]*$/,\"\").replace(/_$/,\"\");\r\n}\r\nexport function getEditMstPath(path,mstId)\r\n{\r\n return path.replace(/_$/,mstId||\"\");\r\n}\r\nexport function getEditDtlPath(path,dtlId)\r\n{\r\n return path.replace(/_$/,dtlId||\"\");\r\n}\r\nexport function getDefaultPath(path)\r\n{\r\n return path.replace(/\\:.*\\?/,\"_\");\r\n}\r\n\r\nexport function deepEqualX(o1, o2, important) {\r\n const x = o1 === o2 ||\r\n (Array.isArray(o1) && Array.isArray(o2) && o1.length === o2.length && (o1.length === 0 || o1.filter((o, i) => o !== o2[i]).length === 0)) ||\r\n (typeof o1 === typeof o2 && !Array.isArray(o1) && typeof o1 === \"object\" && (important || Object.keys(o1)).filter(k =>\r\n !Object.is(o1[k], o2[k])\r\n && (\r\n (!Array.isArray(o1[k]) && typeof o1[k] !== \"object\") ||\r\n (Array.isArray(o1[k]) && !deepEqualX(o1[k], o2[k])) ||\r\n (typeof o1[k] === \"object\" && !deepEqualX(o1[k], o2[k]))\r\n )).length === 0)\r\n return x;\r\n}\r\n\r\nexport function deepNotEqualX(o1, o2, important) {\r\n return (typeof o1 !== typeof o2)\r\n || (Array.isArray(o1) && Array.isArray(o2) && (o1.length !== o2.length || o1.filter((o, i) => o !== o2[i]).length > 0))\r\n || (typeof o1 === \"object\" && !Array.isArray(o1) && (important || Object.keys(o1)).filter(k =>\r\n (Array.isArray(o1[k]) && deepEqualX(o1[k], o2[k]))\r\n || (typeof o1[k] === \"object\" && deepEqualX(o1[k], o2[k]))\r\n || Object.is(o1[k], o2[k])\r\n ).length === 0)\r\n || (o1 !== o2 && (typeof o1 !== \"object\" && !Array.isArray(o1)))\r\n}\r\nexport function isPhoneFormat(v) {\r\n return (v && new RegExp(/([0-9\\s\\-]{8,})(?:\\s*(?:#|x\\.?|ext\\.?|extension)\\s*(\\d+))?$/).test(v));\r\n}\r\nexport function isUrlFormat(v) {\r\n // return (v && new RegExp(/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/).test(v));\r\n return (v && new RegExp(/^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-zA-Z0-9]+([\\-\\.]{1}[a-zA-Z0-9]+)*\\.[a-zA-Z]{2,5}(:[0-9]{1,5})?(\\/.*)?$/g).test(v));\r\n}\r\nexport function isLinkedinFormat(v) {\r\n // return (v && new RegExp(/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/).test(v));\r\n return (v && new RegExp(/(https?)?:?(\\/\\/)?(([w]{3}||\\w\\w)\\.)?linkedin.com(\\w+:{0,1}\\w*@)?(\\S+)(:([0-9])+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/g).test(v));\r\n}\r\nexport function isEmailFormat(v) {\r\n // return (v && new RegExp(/^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/).test(v));\r\n return (v && new RegExp(/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,10}$/i).test(v));\r\n}\r\nexport function isVideoFormat(v) {\r\n return (v && (new RegExp(/https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/g).test(v) || new RegExp(/^(https?\\:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/g).test(v)));\r\n}\r\nexport function isVimeoFormat(v) {\r\n return (v && new RegExp(/https?:\\/\\/(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|video\\/|)(\\d+)(?:$|\\/|\\?)/g).test(v));\r\n}\r\nexport function getVimeoId(url) {\r\n var regExp = /(?:www\\.|player\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/(?:[^\\/]*)\\/videos\\/|album\\/(?:\\d+)\\/video\\/|video\\/|)(\\d+)(?:[a-zA-Z0-9_\\-]+)?/i;\r\n var match = url.match(regExp);\r\n\r\n return match[1];\r\n}\r\nexport function isYouTubeFormat(v) {\r\n return (v && new RegExp(/^(https?\\:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/g).test(v));\r\n}\r\nexport function getYouTubeId(url) {\r\n var regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|\\&v=)([^#\\&\\?]*).*/;\r\n var match = url.match(regExp);\r\n\r\n return match && match[2];\r\n}\r\nexport function isCreditCardFormat(v) {\r\n return (v && new RegExp(/^(?:4[0-9]{12}(?:[0-9]{3})?|[25][1-7][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$/).test(v));\r\n}\r\nexport function isCVVFormat(v) {\r\n return (v && new RegExp(/^[0-9]{3,4}$/).test(v));\r\n}\r\n\r\nexport function isEmptyId(val) {\r\n return !val || (typeof val === 'string' && val.trim() === \"\");\r\n}\r\nexport function isEmpty(val) {\r\n return !val || (typeof val === 'string' && val.trim() === \"\");\r\n}\r\nexport function isEmptyArray(value) {\r\n return (Array.isArray(value) && value.length === 0)\r\n}\r\nexport function isEmptyObject(value) {\r\n return (Array.isArray(value) && value.length === 0)\r\n // only simple object test, anything that is not simple we assume it is not empty(including Date which has no key)\r\n || (!Array.isArray(value) && typeof value === 'object' && value.constructor === Object && Object.keys(value).length === 0)\r\n}\r\nexport function isValidRange(lowerBound, upperBound, defaultIfNaN) {\r\n return (val) => { const x = val !== undefined && val !== null && val !== \"\" && typeof val !== \"object\" ? val : (defaultIfNaN); return (+x) >= lowerBound && (+x) <= upperBound };\r\n}\r\nexport function isNotEmpty(val) {\r\n return !isEmpty(val);\r\n}\r\nexport function isNot(f) {\r\n return function (val) {\r\n return !f(val);\r\n }\r\n}\r\n\r\nexport function isNumber(val) {\r\n try {\r\n // const regex = new RegExp(/^-?(?:\\d+|\\d{1,3}(?:\\d{3})+)(?:(\\.|,)\\d+)?$/);\r\n const regex = new RegExp(/^-?(?:\\d+|\\d{1,3}(?:\\d{3})+)(?:(\\.)\\d+)?$/);\r\n var result = !isEmpty(val) && regex.test(val);\r\n return result;\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\nexport function isPositiveNumber(val) {\r\n {\r\n try {\r\n // const regex = new RegExp(/^-?(?:\\d+|\\d{1,3}(?:\\d{3})+)(?:(\\.|,)\\d+)?$/);\r\n // const regex = new RegExp(/^\\s*(?=.*[1-9])\\d*(?:\\.\\d{1,2})?\\s*$/);\r\n const regex = new RegExp(/^-?(?:\\d+|\\d{1,3}(?:\\d{3})+)(?:(\\.)\\d+)?$/);\r\n var result = !isEmpty(val) &&\r\n // valueToNumber(val) > 0 &&\r\n regex.test(val);\r\n return result;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport function isWholeNumber(val) {\r\n try {\r\n var result = Number.isInteger(parseFloat(val));\r\n return result;\r\n } catch (e) {\r\n return false;\r\n }\r\n}\r\n\r\nexport function allowTwoDecimals(val) {\r\n {\r\n try {\r\n const regex = new RegExp(/^\\d*((\\.)\\d{0,2})?$/);\r\n var result = !isEmpty(val) && regex.test(val);\r\n return result;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\nexport function lengthBetween(lowerBound, upperBound) {\r\n return (strVal) => typeof strVal === 'string' && strVal.length >= lowerBound && strVal.length <= upperBound;\r\n}\r\nexport function oneOf(val, listOfFn = []) {\r\n for (var i = 0; i < listOfFn.length; i = i + 1) {\r\n if (listOfFn[i](val)) return true;\r\n }\r\n return false;\r\n}\r\nexport function allOf(val, listOfFn = []) {\r\n for (var i = 0; i < listOfFn.length; i = i + 1) {\r\n if (!listOfFn[i](val)) return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport function range(n) {\r\n return Array.from({ length: n }, (v, k) => k)\r\n}\r\nexport function valOf(o) {\r\n return typeof o === \"object\" && o.constructor === Object && !Array.isArray(o) ? o.value : o\r\n}\r\n\r\nexport function deepFlatten(o) {\r\n const into = []\r\n const _flatten = function (o, prefix) {\r\n return Object.keys(o).reduce((a, k) => {\r\n const xk = (prefix ? prefix + \".\" : \"\") + k\r\n const val = o[k];\r\n if (val.constructor === Object || val.constructor === Array) {\r\n return { ...a, ..._flatten(val, xk) }\r\n }\r\n else {\r\n return { ...a, [xk]: val }\r\n }\r\n }, into)\r\n }\r\n return _flatten(o, null)\r\n}\r\n\r\nexport function randomMilSec(min, max) {\r\n return Math.floor(Math.random() * max) + min\r\n}\r\nexport function delay(valOrFnOrPromise, t) {\r\n // t = 0 means still setTimeout(i.e. trampoline), t === null or undefined means immediate call in the chain\r\n const _this = this;\r\n return new Promise(function (resolve, reject) {\r\n const f = (() => {\r\n const isPromise = typeof (valOrFnOrPromise || {}).then === \"function\";\r\n if (typeof valOrFnOrPromise === \"function\" || isPromise) {\r\n try {\r\n if (isPromise) {\r\n valOrFnOrPromise\r\n .then((...args)=>{\r\n resolve.bind(_this)(...args);\r\n }\r\n )\r\n .catch(e=>{\r\n reject.bind(_this)(e);\r\n })\r\n }\r\n else {\r\n const result = valOrFnOrPromise()\r\n resolve.bind(_this)(result) \r\n }\r\n } catch (e) {\r\n reject.bind(_this)(e)\r\n }\r\n }\r\n else\r\n resolve.bind(_this)(valOrFnOrPromise)\r\n }).bind(_this);\r\n if (t === undefined || t === null) f();\r\n else setTimeout(f, isNaN(t) || t < 0 ? 0 : t);\r\n });\r\n}\r\n\r\n\r\nexport function matchPattern(regex) {\r\n log.debug(regex);\r\n return (strVal) => typeof strVal === 'string' && strVal && new RegExp(regex).test(strVal);\r\n}\r\n\r\n/* these are for complex file objects used for file upload in React component */\r\nexport function makeReactFileObject(o) {\r\n return o.base64 || o.thumb ? { ...o, previewUrl: 'data:' + o.mimeType + ';base64,' + (o.thumb || o.base64) } : o;\r\n}\r\n\r\nexport function fromBlobToFileObject(blob) {\r\n try {\r\n return JSON.parse(blob);\r\n }\r\n catch (e) {\r\n return {\r\n fileName: '',\r\n base64: blob,\r\n }\r\n }\r\n}\r\n\r\nexport function imgPathTransform(imgPath) {\r\n var fullUrl = (imgPath || '').match(/^[a-z,A-Z/]+:/i);\r\n if (fullUrl) return imgPath;\r\n var stockImg = (imgPath || '').replace(/^((~|\\.\\.)\\/)images/,'/img');\r\n return process.env.PUBLIC_URL + stockImg;\r\n}\r\n\r\nexport function debounce(func, debObj, immediate) {\r\n // var timeout;\r\n return function () {\r\n var context = this, args = arguments;\r\n // log.debug(context, args);\r\n var later = function () {\r\n debObj.timeout = null;\r\n if (!immediate) func.apply(context, args);\r\n };\r\n var callNow = immediate && !debObj.timeout;\r\n // log.debug(timeout);\r\n clearTimeout(debObj.timeout);\r\n debObj.timeout = setTimeout(later, debObj.waitTime);\r\n // log.debug(timeout);\r\n if (callNow) func.apply(context, args);\r\n }\r\n}\r\n\r\nexport function destructure(obj, jsonFields) {\r\n const x = jsonFields.reduce((a, o) => { if (a[o] && typeof (a[o]) === \"string\") a[o] = makeReactFileObject(fromBlobToFileObject(a[o])); return a; }, { ...obj });\r\n return x;\r\n}\r\nexport function toJsonValues(obj, jsonFields, columDef) {\r\n const x = jsonFields.reduce((a, name) => {\r\n const v = a[name];\r\n const fileNameColumn = ((columDef || {})[name] || {}).fileNameColumn;\r\n const tsColumn = ((columDef || {})[name] || {}).timeStampColumn;\r\n //const ts = v && (v.ts || ((v[0] || {}).ts));\r\n const ts = v && (v.ts || (Array.isArray(v) && (v.filter(f => f && !f.isEmptyFileObject && f.ts)[0] || {}).ts));\r\n const fileName = v && (ts || (Array.isArray(v) && v.filter(f => !f.isEmptyFileObject).length === 0)) && (v.fileName || ((v || []).filter(f => f && !f.isEmptyFileObject).map(f => (f && f.fileName) || '').join(\",\")));\r\n a[name] = JSON.stringify(cleanupReactFileObject(v, columDef, name));\r\n if (fileNameColumn && fileName) a[fileNameColumn] = fileName;\r\n if (tsColumn && ts) a[tsColumn] = ts + '';\r\n return a;\r\n }, { ...obj });\r\n return x;\r\n}\r\n\r\nexport function reviseEmbeddedFileObjectFromServer(list, o) {\r\n if (!o) return list;\r\n let file = o;\r\n try {\r\n file = JSON.parse(o)\r\n } catch (e) {\r\n file = typeof o === \"string\" ? {\r\n base64: (!o ? null : o.match(/^data:/) ? o.replace(/^data:[^,]+,/,\"\") : null),\r\n iconUrl: (o||'').match(/^\\w+:/) ? o : null,\r\n fileName: 'image',\r\n mimeType: (!o ? null : (o.match(/^data:([^;]);/) || [null])[0] || 'application/octet-stream')\r\n } : Array.isArray(o) && o.length > 0 ? o : undefined\r\n }\r\n return file ? (Array.isArray(file) ? file : [file]) : list;\r\n return list || (file && [file])\r\n}\r\n\r\nexport function decodeEmbeddedFileObjectFromServer(o, asList)\r\n{\r\n if (!o) return null;\r\n let file = o;\r\n try {\r\n file = JSON.parse(o)\r\n } catch (e) {\r\n\r\n file = typeof o === \"string\" \r\n ? {\r\n base64: (!o ? null : o.match(/^data:/) ? o.replace(/^data:[^,]+,/,\"\") : null),\r\n iconUrl: (o||'').match(/^\\w+:/) ? o : null,\r\n fileName: 'image',\r\n mimeType: (!o ? null : (o.match(/^data:([^;]);/) || [null])[0] || 'application/octet-stream')\r\n }\r\n : Array.isArray(o) && o.length > 0 ? o : undefined\r\n }\r\n return file \r\n ? (Array.isArray(file) \r\n ? (asList ? file : file[0]) \r\n : (asList ? [file] : file)\r\n ) \r\n : null;\r\n}\r\n\r\nexport function cleanupReactFileObject(f, columDef, objName) {\r\n const placeHolder = !f || (objName && ((columDef || {})[objName] || {}).keyId) ? \"\" : btoa(JSON.stringify({ ts: f.ts }));\r\n const _x = (f) => (\r\n !f.base64 || !f.ts // .ts is the only content that indicate new selection \r\n ? {\r\n }\r\n : {\r\n base64: true ? placeHolder : f.base64,\r\n fileName: f.fileName,\r\n lastModified: f.lastModified,\r\n mimeType: f.mimeType,\r\n size: f.size,\r\n height: f.height,\r\n width: f.width,\r\n })\r\n return !f ? (f || undefined) : (!Array.isArray(f) ? _x(f) : f.filter(o => o && !o.isEmptyFileObject).map(_x))\r\n}\r\n\r\n/* these are for embedded doc upload/download, should be in _ScreenReducer as their are redux related but given the current reducers are not inheriting\r\n, put it here */\r\nexport function downloadEmbeddedDoc(downloadEmbeddedService, mstId, dtlId, isMaster, screenColumnName, resultColumeName, reduxColumnName, { reduxRowIdKeyName, dispatch, actionTypeSuccess, actionTypeFailed }) {\r\n const options = {};\r\n return {\r\n screenColumnName: screenColumnName,\r\n MstId: mstId,\r\n DtlId: dtlId,\r\n isMaster: isMaster,\r\n\r\n downloadRequest: downloadEmbeddedService(mstId, dtlId, isMaster, screenColumnName, options)\r\n .then(data => {\r\n if (dispatch && actionTypeSuccess) {\r\n log.debug('on demand download return', reduxColumnName)\r\n delay(() => { dispatch({ type: actionTypeSuccess, payload: { mstId, dtlId, isMaster, fileObject: data.data[0][resultColumeName], reduxRowIdKeyName, reduxColumnName } }) }, 0);\r\n }\r\n return Promise.all(data.data);\r\n }\r\n )\r\n }\r\n}\r\n\r\n\r\n// export function uploadEmbeddedDoc(saveEmbeddedService, mstId, dtlId, isMaster, screenColumnName, fileList, { dispatch, reduxColumeName, actionTypeSuccess, actionTypeFailed }) {\r\n// const docId = null, overwrite = true, options = {};\r\n\r\n// return {\r\n// screenColumnName: screenColumnName,\r\n// mstId,\r\n// dtlId,\r\n// isMaster,\r\n// file: fileList,\r\n// actionTypeSuccess,\r\n// fileName: fileList && fileList.length > 0 ? fileList[0].fileName : '',\r\n// uploadRequest: !fileList ? Promise.resolve({ screenColumnName, reduxColumeName, result: fileList }) : saveEmbeddedService(mstId, dtlId, isMaster, screenColumnName, typeof fileList === \"string\" ? fileList : JSON.stringify(fileList), options)\r\n// }\r\n// }\r\n\r\nexport function uploadEmbeddedDoc(saveEmbeddedService, mstId, dtlId, isMaster, screenColumnName, fileList, { dispatch, reduxColumeName, actionTypeSuccess, actionTypeFailed }) {\r\n const docId = null, overwrite = true, options = {};\r\n\r\n return {\r\n screenColumnName: screenColumnName,\r\n mstId,\r\n dtlId,\r\n isMaster,\r\n file: fileList,\r\n actionTypeSuccess,\r\n fileName: fileList && Array.isArray(fileList) && fileList.length > 0 ? fileList[0].fileName : '',\r\n uploadRequest: !fileList || (Array.isArray(fileList) && fileList.length > 0 && fileList.filter(f => f.ts).length === 0 && fileList.filter(f => !f.isEmptyFileObject).length > 0)\r\n ? Promise.resolve({ screenColumnName, reduxColumeName, result: fileList })\r\n : saveEmbeddedService(mstId, dtlId, isMaster, screenColumnName, typeof fileList === \"string\" ? fileList : ((fileList.length > 0 && fileList.filter(f => !f.isEmptyFileObject).length === 0) ? null : JSON.stringify(fileList.filter(f => !f.isEmptyFileObject).map(f => ({ ...f, ts:undefined, icon: undefined })))), options)\r\n }\r\n}\r\n\r\nexport function removeDocList(list, docIdList) {\r\n let removedList = docIdList;\r\n try {\r\n removedList = JSON.parse(docIdList || \"[]\")\r\n } catch (e) { }\r\n const x = removedList.reduce((a, o) => { a[o] = o; return a; }, {});\r\n return (list || []).filter(o => !o.DocId || (o.DocId && !x[o.DocId]))\r\n}\r\n\r\nexport function reviseDocList(list, newFile) {\r\n const lookupByName = (list || []).reduce((a, o) => { a[o.fileName] = o; return a; }, {})\r\n const lookupByDocId = (list || []).reduce((a, o) => { a[o.DocId] = o; return a; }, {});\r\n log.debug(lookupByName, lookupByDocId, list, newFile, lookupByName[newFile.fileName]);\r\n if (lookupByDocId[newFile.DocId]) {\r\n return (list || []).map(o => o.DocId === newFile.DocId ? { ...o, ...newFile } : o);\r\n }\r\n else if (lookupByName[newFile.fileName]) {\r\n return (list || []).map(o => o.fileName === newFile.fileName ? { ...o, ...newFile } : o);\r\n }\r\n else { return [...(list || []), newFile] }\r\n}\r\n\r\nexport function uploadMultiDoc(uploadService, mstId, dtlId, isMaster, screenColumnName, fileList, removeList, {reduxColumnName, dispatch, actionTypeSuccess, actionTypeFailed }) {\r\n if (!fileList || fileList.length === 0) return []\r\n const docId = null, overwrite = true, options = {};\r\n return fileList.map(f => {\r\n const fileJSON = JSON.stringify(f);\r\n return {\r\n screenColumnName: screenColumnName,\r\n isMaster,\r\n file: { ...f\r\n , ts: undefined\r\n , lastTS: f.ts || undefined\r\n , src: undefined\r\n },\r\n removeList,\r\n actionTypeSuccess,\r\n fileName: f.fileName,\r\n reduxColumnName: reduxColumnName || screenColumnName,\r\n keyId:isMaster ? mstId : dtlId,\r\n uploadRequest: \r\n uploadService(mstId, dtlId, isMaster, docId, overwrite, screenColumnName, typeof f === \"string\" ? f : fileJSON, options)\r\n .then(result=>{\r\n return result;\r\n }\r\n )\r\n .catch(error=>{\r\n log.debug(\"upload multi doc error\", mstId, dtlId, isMaster, docId, screenColumnName, f, fileJSON);\r\n return Promise.reject(error);\r\n })\r\n }\r\n })\r\n}\r\n\r\nexport function removeMultiDoc(removeService, mstId, dtlId, isMaster, screenColumnName, docIdList, { reduxColumnName, dispatch, actionTypeSuccess, actionTypeFailed }) {\r\n const docId = null, overwrite = true, options = {};\r\n return {\r\n screenColumnName: screenColumnName,\r\n isMaster,\r\n docList: docIdList,\r\n actionTypeSuccess,\r\n reduxColumnName: reduxColumnName || screenColumnName,\r\n uploadRequest:(!docIdList || docIdList.length === 0 \r\n ? Promise.resolve({ screenColumnName, result: docIdList }) \r\n : removeService(mstId, dtlId, isMaster, screenColumnName, docIdList, options)\r\n ).catch (error => {\r\n log.debug(\"remove multi doc error\", mstId, dtlId, isMaster, docIdList, screenColumnName);\r\n return Promise.reject(error);\r\n })\r\n }\r\n}\r\n\r\nexport function downloadMultiDoc(downloadService, mstId, dtlId, isMaster, screenColumnName, docIdList, { reduxColumnName, dispatch, actionTypeSuccess, actionTypeFailed }) {\r\n const options = {}\r\n return docIdList.map(f => {\r\n return {\r\n screenColumnName: screenColumnName,\r\n mstId,\r\n dtlId,\r\n isMaster,\r\n DocId: f.DocId,\r\n downloadRequest: downloadService(mstId, dtlId, isMaster, f.DocId, screenColumnName)\r\n .then(\r\n data => {\r\n if (dispatch && actionTypeSuccess) {\r\n delay(() => { dispatch({ type: actionTypeSuccess, payload: { result:{...f, ...data.data[0]}, reduxColumnName:reduxColumnName } }) }, 0)\r\n }\r\n return Promise.all(data.data);\r\n }\r\n )\r\n }\r\n })\r\n}\r\n\r\nexport function downloadMultiDocContent({dispatch, reduxColumnName, keyId, screenColumnName, actionTypeSuccess, actionTypeFailed, downloadService, docList, firstN}) {\r\n const currentMstId = keyId;\r\n const list = (docList || []).reduce((a,o,i)=>{ if (o.DocId && (!firstN || a.length < firstN)) a.push(o); return a;},[])\r\n const downloadPromises = downloadMultiDoc(downloadService.GetDoc, currentMstId, null, true, screenColumnName, list\r\n , {reduxColumnName:reduxColumnName, dispatch, actionTypeSuccess: actionTypeSuccess, actionTypeFailed:actionTypeFailed});\r\n return Promise.all( [...(downloadPromises || []).map(v=>v.downloadRequest)])\r\n .then(([result])=>{\r\n log.debug(result);\r\n return {\r\n base64:result[0].DocImage,\r\n fileName:result[0].DocName,\r\n mimeType:result[0].MimeType,\r\n }\r\n })\r\n .catch(\r\n error=>{\r\n return Promise.reject(error);\r\n }\r\n );\r\n}\r\n\r\nexport function processMultiDoc(existingDocList, newDocList)\r\n{\r\n if (newDocList === undefined) {\r\n return {\r\n newDocs: [],\r\n removedDocs: [],\r\n mergedLatestDocs:existingDocList || [],\r\n }\r\n }\r\n const latestDocs = (newDocList || []).filter(o => !o.isEmptyFileObject);\r\n const currentDocsLookup = (existingDocList || []).filter(o => o.DocId).reduce((a, o) => { a[o.DocId] = o; return a; }, {})\r\n const revisedDocsLookup = latestDocs.filter(o => o.DocId).reduce((a, o) => { a[o.DocId] = o; return a; }, {});\r\n const removedDocs = existingDocList && Array.isArray(existingDocList) && existingDocList.filter(o => !revisedDocsLookup[o.DocId]);\r\n const newDocs = latestDocs.filter(o => (!o.DocId && o.base64) || (o.base64 && (currentDocsLookup[o.DocId] || {}).base64 !== o.base64));\r\n const mergedLatestDocs = latestDocs.map(o => ({\r\n ...o,\r\n base64: o.base64 || (o.DocId && (currentDocsLookup[o.DocId] || {}).base64),\r\n mimeType: o.mimeType || (o.DocId && (currentDocsLookup[o.DocId] || {}).mimeType),\r\n ts: undefined,\r\n lastTS: o.ts || undefined,\r\n }));\r\n return {\r\n newDocs:newDocs || [],\r\n removedDocs:removedDocs || [],\r\n mergedLatestDocs:mergedLatestDocs || [],\r\n }\r\n}\r\n\r\nexport function reviseMultiDocFileObjectFromServer(list, o) {\r\n // update local multidoc file list from server multi-doc object\r\n const result = (o || {}).result || o;\r\n return !Array.isArray(list) ? list : list.map(d => (d.DocId === result.DocId ? { ...d, mimeType: result.MimeType, base64: result.DocImage } : d))\r\n}\r\n\r\nexport function makeMultiDocFileObjectFromServer(o, MstKeyName) {\r\n // convert server multi-doc list return to file object used in react\r\n return {\r\n fileName: o.DocName,\r\n DocId: o.DocId,\r\n MasterId: o[MstKeyName],\r\n InputOn: o.InputOn + 'Z',\r\n DocSize: o.DocSize,\r\n InputBy: o.LoginName,\r\n mimeType: o.MimeType,\r\n }\r\n}\r\n\r\nexport function makeBlob(fileObjWithBase64) {\r\n if (!fileObjWithBase64 || !fileObjWithBase64.base64) return fileObjWithBase64;\r\n\r\n const data = fileObjWithBase64.base64;\r\n const fileName = fileObjWithBase64.fileName;\r\n const mimeType = fileObjWithBase64.mimeType;\r\n var byteCharacters = atob(data);\r\n var byteNumbers = new Array(byteCharacters.length);\r\n for (var i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n var blob = new Blob([byteArray], {\r\n type: mimeType,\r\n });\r\n return { ...fileObjWithBase64, blob: blob, }\r\n}\r\n\r\nexport function htmlToBase64(htmlContent) {\r\n // const utf8 = unescape(encodeURIComponent(htmlContent));\r\n // const base64 = btoa(utf8);\r\n const base64 = btoa(htmlContent.replace(/[\\u00A0-\\u2666]/g, function (c) {\r\n return '&#' + c.charCodeAt(0) + ';';\r\n }));\r\n return base64;\r\n // const blob = new Blob(htmlContent,\r\n // // Mime type is important for data url\r\n // {type : 'text/html'}\r\n // ); \r\n return new Promise(function (resolve, reject) {\r\n resolve(base64);\r\n // const a = new FileReader();\r\n // a.onload = function(e) {\r\n // resolve(e.target.result);\r\n // };\r\n // a.readAsDataURL(blob);\r\n });\r\n}\r\n\r\n/* redux autocomplete helper, already implemented in base reducer but this is here for those not comform to the coding style */\r\nexport function AutoCompleteSearch({ dispatch, v, topN, filterOn, searchApi, SucceededActionType, FailedActionType, ColumnName, forDtl, forMst }) {\r\n const keyLookup = (v || '').startsWith(\"**\")\r\n ? searchApi(v, topN, filterOn)\r\n : new Promise((resolve) => resolve({ data: { data: [] } }));\r\n const promises = [\r\n keyLookup,\r\n searchApi((v || '').startsWith(\"**\") ? null : v, topN, filterOn),\r\n ];\r\n return Promise.all(promises)\r\n .then(([keyLookup, ret]) => {\r\n const result = ToReactDropdownList((ret.data || {}).data || []);\r\n dispatch({\r\n type: SucceededActionType,\r\n payload: {\r\n ColumnName: ColumnName,\r\n forDtl: forDtl,\r\n forMst: forMst,\r\n data: mergeArray(keyLookup.data.data, result, (o) => o.key),\r\n backfill: (v || '').startsWith(\"**\"),\r\n }\r\n })\r\n return Promise.all([result]);\r\n }\r\n , (err) => {\r\n log.trace(err);\r\n return Promise.reject(err);\r\n })\r\n .catch(err => {\r\n log.trace(err);\r\n return Promise.reject(err);\r\n })\r\n}\r\n\r\nexport function removeEmptyFileObject(obj, fileObjectColumns) {\r\n return fileObjectColumns.reduce((o, c) => { o[c] = Array.isArray(o[c]) ? o[c].filter(o => !o.isEmptyFileObject) : o[c]; return o; }, { ...obj })\r\n}\r\n\r\n\r\nexport function ifEmpty(value, defaultValue) {\r\n if ((isEmpty(value) || isEmptyObject(value)) && arguments.length > 1) return defaultValue;\r\n else return value;\r\n}\r\n\r\nexport function getListDisplayContent(obj, column){\r\n const columnDef = column[\"ColumnName\"] + column[\"TableId\"];\r\n if(columnDef.length >0){\r\n if(column[\"DisplayMode\"] === \"AutoComplete\" || column[\"DisplayMode\"] === \"DropDownList\"){\r\n return obj[columnDef+\"Text\"];\r\n }\r\n else if (column[\"DisplayMode\"].includes('Date')){\r\n return toLocalDateFormat(obj[columnDef]);\r\n }else{\r\n return formatContent(obj[columnDef], column[\"DisplayMode\"]);\r\n }\r\n }\r\n}\r\n/**\r\n * Create types object for ethereum EIP712 signing calls\r\n * all def string must comform to solidity's function abi style\r\n * @param {string} domainType - domain def in the form of EIP712Domain(string name,string version,...)\r\n * @param {Array.} otherTypes - other types in the form of AnyTypeOrFunctionName(address from,address to,uint256 foo,bytes bar,...)\r\n * @return {Object} - object in the form of {typeName1: [ {memberName1: memberType1,...}],...}\r\n */\r\nexport function makeEIP712Types(domainType, otherTypes)\r\n{\r\n const regex = /([^\\()]+)\\(([^\\(\\)]+)*/i; // for the form of xyz(type1 name1[,type2 name2,type3 name3...])\r\n const paramsToArray = (paramString)=>{\r\n return paramString.split(',').map(s=>{\r\n const x = s.split(' ');\r\n return { name: x[1], type: x[0]}\r\n }) \r\n }\r\n const domain = domainType.match(regex);\r\n const others = otherTypes.map(t=>{\r\n const x = t.match(regex);\r\n return {\r\n [x[1]]: paramsToArray(x[2])\r\n }\r\n });\r\n const types = others.reduce((a, t)=>{\r\n return {\r\n ...a,\r\n ...t,\r\n };\r\n },{\r\n [domain[1]]: paramsToArray(domain[2])\r\n });\r\n return types;\r\n}\r\n\r\n/**\r\n * pack ETH1 ECDSA signature from v, r, s to 65 bytes array\r\n * @param {string} v - 2 char hex string(0x prefix)\r\n * @param {string} r - 64 char hex string(0x prefix)\r\n * @param {string} s - 64 char hex string(0x prefix)\r\n * @return {string} - 130 char hex string(0x prefix)\r\n */\r\nexport function packECDSASignature(v, r, s) {\r\n return \"0x\" + r.substr(2) + s.substr(2) + v.substr(2);\r\n}\r\n\r\n/**\r\n * split ETH1 ECDSA signature into v, r, s \r\n * @param {string} signature - 130 char hex string(0x prefix)\r\n * @return {Object} - {r, s, v} all in hex string format\r\n */\r\nexport function splitECDSASignature(signature) {\r\n signature = signature.substr(2); //remove 0x\r\n const sig = {\r\n r: '0x' + signature.slice(0, 64),\r\n s: '0x' + signature.slice(64, 128),\r\n v: '0x' + signature.slice(128, 130),\r\n }\r\n return sig;\r\n}\r\n\r\nexport function GetCardType(number) {\r\n log.debug(number);\r\n // visa\r\n var re = new RegExp(\"^4\");\r\n if (number.match(re) != null)\r\n return \"Visa\";\r\n\r\n // Mastercard \r\n // Updated for Mastercard 2017 BINs expansion\r\n if (/^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$/.test(number))\r\n return \"Mastercard\";\r\n\r\n // AMEX\r\n re = new RegExp(\"^3[47]\");\r\n if (number.match(re) != null)\r\n return \"AMEX\";\r\n\r\n // Discover\r\n re = new RegExp(\"^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)\");\r\n if (number.match(re) != null)\r\n return \"Discover\";\r\n\r\n // Diners\r\n re = new RegExp(\"^36\");\r\n if (number.match(re) != null)\r\n return \"Diners\";\r\n\r\n // Diners - Carte Blanche\r\n re = new RegExp(\"^30[0-5]\");\r\n if (number.match(re) != null)\r\n return \"Diners - Carte Blanche\";\r\n\r\n // JCB\r\n re = new RegExp(\"^35(2[89]|[3-8][0-9])\");\r\n if (number.match(re) != null)\r\n return \"JCB\";\r\n\r\n // Visa Electron\r\n re = new RegExp(\"^(4026|417500|4508|4844|491(3|7))\");\r\n if (number.match(re) != null)\r\n return \"Visa Electron\";\r\n\r\n return \"\";\r\n}\r\n","import log from '../helpers/logger';\r\nimport { delay } from '../helpers/utils';\r\n\r\nexport const fetchService = {\r\n fetchAPIResult,tryParseJSON,getAPIResult\r\n};\r\n\r\nfunction tryParseJSON(content) {\r\n try { \r\n return {\r\n value : JSON.parse(content),\r\n err: null\r\n }\r\n } \r\n catch (e) {\r\n return {\r\n value : content,\r\n err: e\r\n }\r\n }\r\n}; \r\n\r\nfunction getAPIResult(result) {\r\n try {\r\n return result.data.value.d;\r\n }\r\n catch(e) {\r\n return {};\r\n }\r\n}\r\n\r\nasync function promiseWithTimeout(somePromise,timeoutInMS=0)\r\n{\r\n if (timeoutInMS<=0) \r\n return somePromise;\r\n else {\r\n const timer = new Promise((resolve,reject)=>{\r\n let wait = setTimeout(\r\n ()=>{\r\n clearTimeout(wait);\r\n reject({\r\n localTimeout:true,\r\n })\r\n }\r\n ,timeoutInMS);\r\n })\r\n return Promise.race([somePromise,timer]);\r\n }\r\n}\r\nasync function fetchAPIResult(url, options={headers:{},requestOptions:{}}) {\r\n const {access_token, getAccessToken, renewAccessToken, tokenRenewed,timeout, SystemId, CompanyId, ProjectId, CultureId} = options;\r\n const scope = '' + (SystemId > 0 ? SystemId : '') + ',' + (typeof CompanyId === \"undefined\" ? '' : CompanyId) + ',' + (typeof ProjectId === \"undefined\" ? '' : ProjectId) + ',' + (typeof CultureId === \"undefined\" ? '' : CultureId);\r\n const fetchPromise = \r\n (getAccessToken ? getAccessToken() : Promise.resolve({}))\r\n .then(token=>{\r\n const requestOptions = {\r\n method: 'post',\r\n mode: 'cors',\r\n //credentials: 'include',\r\n //credentials: 'same-origin',\r\n headers: { \r\n 'Content-Type': 'application/json', \r\n 'Accept': 'application/json',\r\n 'Authorization': 'Bearer ' + (token.access_token || \"\"),\r\n 'X-Authorization': 'Bearer ' + (token.access_token || \"\"),\r\n ...(options.headers),\r\n 'X-RintagiScope': scope\r\n },\r\n ...(options.requestOptions)\r\n }; \r\n return fetch(url,requestOptions);\r\n })\r\n .then(response=>{\r\n// JSON.parse('abc{');\r\n let ret = response.text();\r\n return ret.then(bodyText=>{\r\n let parsedRet = tryParseJSON(bodyText); \r\n \r\n if (response.ok && (((parsedRet || {}).value || {}).d || {}).status !== \"access_denied\") {\r\n return {\r\n data: parsedRet,\r\n status: \"success\",\r\n errMsg: null,\r\n errType: null\r\n }\r\n } \r\n else {\r\n if ((response.status === 401 || response.status === 403 || (((parsedRet || {}).value || {}).d || {}).status === \"access_denied\") \r\n && renewAccessToken \r\n && !tokenRenewed) {\r\n //console.log('refresh token');\r\n return renewAccessToken()\r\n .then(\r\n newToken=>{\r\n //console.log('token renewed')\r\n return fetchAPIResult(url, {\r\n ...(options),\r\n access_token:newToken.access_token,\r\n tokenRenewed:true\r\n }) \r\n }\r\n , \r\n error => {\r\n if (error.errType == 'network error' || error.errType == 'fetch error') {\r\n console.log('renew token network error, should retry via refresh');\r\n return Promise.reject({...error, renewTokenError: true});\r\n }\r\n else\r\n return Promise.reject({...error, renewTokenError: true});\r\n } \r\n )\r\n .catch(error=>{\r\n console.log('refresh token catch', error);\r\n return Promise.reject(error)\r\n }) \r\n }\r\n else {\r\n console.log('refresh token failed ');\r\n //console.log(response);\r\n return ({\r\n data: parsedRet,\r\n status: \"failed\",\r\n statusCode: response.status,\r\n errMsg: response.statusText,\r\n errType: (response.status === 401 || response.status === 403 || (((parsedRet || {}).value || {}).d || {}).status === \"access_denied\") ? \"access denied error\" : \"server error\",\r\n });\r\n }\r\n }\r\n })},\r\n err=>{\r\n const isTypeError = err.name === \"TypeError\"; // offline or other reason that failed at network level\r\n if (!isTypeError && renewAccessToken && !tokenRenewed) {\r\n // only renew(flush) token for non-network error to avoid re-login(network error can be transient)\r\n return renewAccessToken()\r\n .then(\r\n newToken=>{\r\n return fetchAPIResult(url, {\r\n ...(options),\r\n access_token:newToken.access_token,\r\n tokenRenewed:true\r\n }) \r\n }\r\n/* , error => {\r\n return Promise.reject(error);\r\n } */\r\n )\r\n .catch(error=>{\r\n return Promise.reject(error)\r\n }) \r\n }\r\n else {\r\n return Promise.reject({\r\n data: null,\r\n status: \"failed\",\r\n errMsg: err.message || err.errMsg,\r\n errType: \"network error\",\r\n });\r\n }\r\n })\r\n .catch(err=>{\r\n return Promise.reject({\r\n data: null,\r\n status: \"failed\",\r\n errMsg: err.message || err.errMsg,\r\n errSubType: err.errSubType,\r\n errType: err.errType || \"fetch error\",\r\n });\r\n //return Promise.reject(err);\r\n })\r\n return promiseWithTimeout(fetchPromise,timeout); \r\n }\r\n","import { makeBlob } from './utils';\r\nimport { v1 as v1uuid, v4 as v4uuid} from 'uuid';\r\n\r\nconst sjcl = require('sjcl');\r\nconst _pbkdf2 = require('pbkdf2');\r\n\r\nexport function base64Encode(s) {\r\n return btoa(s)\r\n}\r\n\r\nexport function base64Decode(s) {\r\n return atob(s)\r\n}\r\n\r\nexport function sha256(s) {\r\n const h = sjcl.hash.sha256.hash(s);\r\n return h;\r\n}\r\n\r\nexport function pbkdf2(password, salt, round, keyLength, hashType) {\r\n return new Promise(function (resolve, reject) { \r\n _pbkdf2.pbkdf2(password, salt, round, keyLength, \r\n (err, derivedKey)=> {\r\n if (err) reject(err);\r\n else resolve(derivedKey);\r\n }\r\n )\r\n });\r\n}\r\n\r\nfunction wordToByteArray(word, length) {\r\n var ba = [], i, xFF = 0xFF;\r\n if (length > 0)\r\n ba.push(word >>> 24);\r\n if (length > 1)\r\n ba.push((word >>> 16) & xFF);\r\n if (length > 2)\r\n ba.push((word >>> 8) & xFF);\r\n if (length > 3)\r\n ba.push(word & xFF);\r\n return ba;\r\n}\r\n\r\nfunction wordArrayToByteArray(wordArray, length) {\r\n if (wordArray.hasOwnProperty(\"sigBytes\") && wordArray.hasOwnProperty(\"words\")) {\r\n length = wordArray.sigBytes;\r\n wordArray = wordArray.words;\r\n }\r\n else {\r\n length = length * 4;\r\n }\r\n var result = [],\r\n bytes,\r\n i = 0;\r\n while (length > 0) {\r\n bytes = wordToByteArray(wordArray[i], Math.min(4, length));\r\n length -= bytes.length;\r\n result.push(bytes);\r\n i++;\r\n }\r\n return [].concat.apply([], result);\r\n}\r\n\r\nexport function arrayBufferToBase64(buffer) {\r\n var binary = '';\r\n var bytes = new Uint8Array(buffer);\r\n var len = bytes.byteLength;\r\n for (var i = 0; i < len; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return base64Encode(binary);\r\n}\r\n\r\nexport function scrambleString(s)\r\n{\r\n const h = sha256(s);\r\n return arrayBufferToBase64(wordArrayToByteArray(h, h.length));\r\n return s;\r\n}\r\n\r\nexport function uuid() {\r\n return v1uuid(); \r\n //return Array.from((window.crypto || window.msCrypto).getRandomValues(new Uint32Array(4))).map(n => n.toString(16)).join('-');\r\n}\r\n\r\nexport function uuidv4() {\r\n return v4uuid(); \r\n // return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r\n // var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n // return v.toString(16);\r\n // });\r\n}\r\n\r\nexport function getCurrentReactUrlPath() {\r\n const href = window.location.href;\r\n return href.replace(/\\?.*$/, '');\r\n}\r\n\r\nexport function getCurrentReactUrlSearch() {\r\n const href = window.location.href;\r\n return href.replace(/^[^?]*\\?/, '');\r\n}\r\n\r\nexport function isTouchDevice() {\r\n if ('ontouchstart' in window || navigator.msMaxTouchPoints) {\r\n return true;\r\n }\r\n}\r\n\r\nexport function isAndroid() {\r\n if (navigator.userAgent.includes('Android')) {\r\n return true;\r\n }\r\n}\r\n\r\nexport function isIphone() {\r\n if (navigator.userAgent.includes('iPhone')) {\r\n return true;\r\n }\r\n}\r\n\r\nexport function isSafari() {\r\n if (navigator.userAgent.includes('Safari')) {\r\n return true;\r\n }\r\n}\r\nexport function isHttps() {\r\n if (window.location.protocol === 'https:') {\r\n return true;\r\n }\r\n}\r\n\r\nexport function IsMobile() {\r\n return isAndroid() || isIphone();\r\n}\r\n\r\nexport function previewContent({ dataObj, winObj, containerUrl, download, isImage, features, replace, dataPromise, previewSig } = {}) {\r\n \r\n const isIE = window.navigator && window.navigator.msSaveOrOpenBlob && false;\r\n const containerPage = containerUrl \r\n || process.env.PUBLIC_URL + '/helper/showAttachment.html' + (previewSig ? '?fileSig=' + previewSig : '');\r\n const win = !isIE && (winObj || window.open(containerPage, '_blank', features || \"\", replace));\r\n const dataAvailable = dataObj && dataObj.base64;\r\n \r\n const deliverContent = function (dataObj) {\r\n if (previewSig) {\r\n try {\r\n sessionStorage.setItem(\"PreviewAttachment\", JSON.stringify({ ...dataObj, fileSig: previewSig }));\r\n } catch (e) {\r\n \r\n }\r\n }\r\n \r\n if ((!isIE || (/image/i).test((dataObj || {}).mimeType)) && !download) {\r\n if (win) {\r\n win.postMessage({ ...dataObj, fileSig: previewSig, download }, \"*\");\r\n }\r\n }\r\n else {\r\n const fileObjWithBlob = makeBlob(dataObj);\r\n const blob = (fileObjWithBlob || {}).blob;\r\n const fileName = (fileObjWithBlob || {}).fileName;\r\n if (isIE) {\r\n window.navigator.msSaveOrOpenBlob(blob, fileName);\r\n }\r\n else {\r\n const a = document.createElement('a');\r\n const url = URL.createObjectURL(blob);\r\n a.href = url;\r\n a.download = (fileObjWithBlob || {}).fileName;\r\n document.body.appendChild(a);\r\n a.click();\r\n setTimeout(function () {\r\n document.body.removeChild(a);\r\n window.close();\r\n }, 500);\r\n }\r\n }\r\n }\r\n let injected = false;\r\n const injectContent = function () {\r\n if (injected) return;\r\n injected = true;\r\n if (dataObj && dataObj.base64) {\r\n deliverContent(dataObj);\r\n }\r\n else if (typeof dataPromise === \"function\" \r\n || typeof dataPromise === \"object\") {\r\n if (typeof dataPromise.then === \"function\") {\r\n dataPromise\r\n .then(dataJSON => {\r\n deliverContent({ ...(dataObj || {}), ...dataJSON, download });\r\n }\r\n )\r\n .catch(error => {\r\n if (win) win.close();\r\n })\r\n }\r\n else {\r\n const dataJSON = dataPromise();\r\n deliverContent({ ...(dataObj || {}), ...dataJSON, download });\r\n }\r\n }\r\n else {\r\n if (win) win.close();\r\n // no data, no data callback do nothing ?\r\n }\r\n }\r\n \r\n setTimeout(() => {\r\n injectContent();\r\n }, 1000);\r\n \r\n if (win) {\r\n win.onload = function () {\r\n injectContent();\r\n }\r\n }\r\n \r\n return win;\r\n }\r\n\r\nexport function parsedUrl(url) {\r\n var parser = document.createElement(\"a\");\r\n parser.href = url;\r\n var o = {};\r\n // IE 8 and 9 dont load the attributes \"protocol\" and \"host\" in case the source URL\r\n // is just a pathname, that is, \"/example\" and not \"http://domain.com/example\".\r\n parser.href = parser.href.toString();\r\n\r\n // IE 7 and 6 wont load \"protocol\" and \"host\" even with the above workaround,\r\n // so we take the protocol/host from window.location and place them manually\r\n if (parser.host === \"\" && parser.protocol !== \"file:\") {\r\n var newProtocolAndHost = window.location.protocol + \"//\" + window.location.host;\r\n if (url.charAt(1) === \"/\") {\r\n parser.href = newProtocolAndHost + url;\r\n } else {\r\n // the regex gets everything up to the last \"/\"\r\n // /path/takesEverythingUpToAndIncludingTheLastForwardSlash/thisIsIgnored\r\n // \"/\" is inserted before because IE takes it of from pathname\r\n var currentFolder = (\"/\" + parser.pathname).match(/.*\\//)[0];\r\n parser.href = newProtocolAndHost + currentFolder + url;\r\n }\r\n }\r\n\r\n // copies all the properties to this object\r\n var properties = ['host', 'hostname', 'hash', 'href', 'port', 'protocol', 'search'];\r\n for (var i = 0, n = properties.length; i < n; i++) {\r\n o[properties[i]] = parser[properties[i]];\r\n }\r\n\r\n // pathname is special because IE takes the \"/\" of the starting of pathname\r\n o.pathname = (parser.pathname.charAt(0) !== \"/\" ? \"/\" : \"\") + parser.pathname;\r\n return o;\r\n}\r\n\r\nexport function setCookie(name, value, days, path) {\r\n var expires = \"\";\r\n if (days) {\r\n var date = new Date();\r\n date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));\r\n expires = \"; expires=\" + date.toUTCString();\r\n }\r\n const href = window.location.href;\r\n document.cookie = name + \"=\" + (value || \"\") + expires + \"; path=\" + (path || \"/\") + \";secure\";\r\n}\r\n\r\nexport function getCookie(name) {\r\n var nameEQ = name + \"=\";\r\n var ca = document.cookie.split(';');\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) == ' ') c = c.substring(1, c.length);\r\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);\r\n }\r\n return null;\r\n}\r\nexport function eraseCookie(name) {\r\n document.cookie = name + '=; Max-Age=-99999999;path=/;';\r\n}\r\n\r\nexport function getReactContainerInfo(documentObject={document}) {\r\n // this only work if it is using the stand minimalist layout of React\r\n // i.e. id='root' inside body of index.html and there is NO other\r\n // script file inside body and build script out something like /static/js/xxxx.js\r\n // adjust according if needed\r\n const reactInfo = {}\r\n for (var c in documentObject.body.childNodes) {\r\n try {\r\n var n = documentObject.body.childNodes[c];\r\n if (n && n.tagName === \"SCRIPT\") {\r\n var mySource = n.src.match(/^\\s*(http.*)(\\/static\\/js)(\\/main.+\\.js)\\s*$/);\r\n if (mySource && mySource.length === 4) {\r\n reactInfo.myJS = mySource[3];\r\n reactInfo.myJSHostingRoot = mySource[1]; \r\n }\r\n } \r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n return reactInfo;\r\n }\r\n \r\nexport function getReactContainerStatus(httpRet) {\r\n if (httpRet.status === 200 || httpRet.status === 304) {\r\n const content = httpRet.content;\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(content, 'text/html');\r\n const latest = getReactContainerInfo(doc);\r\n const latestContainer = {\r\n date: httpRet.headers.get('Date'),\r\n etag: httpRet.headers.get('ETag'),\r\n lastModified: httpRet.headers.get('Last-Modified'),\r\n status: httpRet.status,\r\n url: httpRet.url,\r\n redirected: httpRet.redirected,\r\n ok: httpRet.ok,\r\n ...latest,\r\n }\r\n return latestContainer; \r\n }\r\n else return {}\r\n}\r\n\r\nexport function base64Codec(urlsafe) {\r\n var chars = urlsafe\r\n ? \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\"\r\n : \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\r\n\r\n // Use a lookup table to find the index.\r\n var lookup = new Uint8Array(256);\r\n \r\n for (var i = 0; i < chars.length; i++) {\r\n lookup[chars.charCodeAt(i)] = i;\r\n }\r\n\r\n this.encode = function (arraybuffer, nopadding) {\r\n var bytes = new Uint8Array(arraybuffer),\r\n i, len = bytes.length, base64 = \"\";\r\n\r\n for (i = 0; i < len; i += 3) {\r\n base64 += chars[bytes[i] >> 2];\r\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\r\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\r\n base64 += chars[bytes[i + 2] & 63];\r\n }\r\n\r\n if ((len % 3) === 2) {\r\n base64 = base64.substring(0, base64.length - 1) + (urlsafe || nopadding ? \"\" : \"=\");\r\n } else if (len % 3 === 1) {\r\n base64 = base64.substring(0, base64.length - 2) + (urlsafe || nopadding ? \"\" : \"==\");\r\n }\r\n\r\n return base64;\r\n };\r\n\r\n this.decode = function (base64) {\r\n var bufferLength = base64.length * 0.75,\r\n len = base64.length, i, p = 0,\r\n encoded1, encoded2, encoded3, encoded4;\r\n\r\n if (base64[base64.length - 1] === \"=\") {\r\n bufferLength--;\r\n if (base64[base64.length - 2] === \"=\") {\r\n bufferLength--;\r\n }\r\n }\r\n\r\n var arraybuffer = new ArrayBuffer(bufferLength),\r\n bytes = new Uint8Array(arraybuffer);\r\n\r\n for (i = 0; i < len; i += 4) {\r\n encoded1 = lookup[base64.charCodeAt(i)];\r\n encoded2 = lookup[base64.charCodeAt(i + 1)];\r\n encoded3 = lookup[base64.charCodeAt(i + 2)];\r\n encoded4 = lookup[base64.charCodeAt(i + 3)];\r\n\r\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\r\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\r\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\r\n }\r\n\r\n return arraybuffer;\r\n };\r\n\r\n return this;\r\n}\r\n\r\nexport function ab2str(buf) {\r\n return String.fromCharCode.apply(null, new Uint16Array(buf));\r\n}\r\n\r\nexport function str2ab(str) {\r\n var buf = new ArrayBuffer(str.length * 2); // 2 bytes for each char\r\n var bufView = new Uint16Array(buf);\r\n for (var i = 0, strLen = str.length; i < strLen; i++) {\r\n bufView[i] = str.charCodeAt(i);\r\n }\r\n return buf;\r\n}\r\n\r\nexport function base64UrlEncode(s) {\r\n return new base64Codec(true).encode;\r\n}\r\n\r\nexport function base64UrlDecode(s) {\r\n return new base64Codec(true).decode;\r\n}\r\n\r\nexport function coerceToArrayBuffer(thing, name) {\r\n if (typeof thing === \"string\") {\r\n thing = thing.replace(/-/g, \"+\").replace(/_/g, \"/\");\r\n var b64Decode = new base64Codec(false).decode;\r\n thing = b64Decode(thing);\r\n if (typeof thing === \"string\") {\r\n thing = str2ab(thing);\r\n }\r\n }\r\n\r\n if (Array.isArray(thing)) {\r\n thing = new Uint8Array(thing);\r\n }\r\n // Uint8Array to ArrayBuffer\r\n if (thing instanceof Uint8Array) {\r\n thing = thing.buffer;\r\n }\r\n\r\n // error if none of the above worked\r\n if (!(thing instanceof ArrayBuffer)) {\r\n throw new TypeError(\"could not coerce '\" + name + \"' to ArrayBuffer\");\r\n }\r\n else {\r\n return new Uint8Array(thing);\r\n }\r\n}","/* configuration setup, like url of web service endpoint etc. this is dom/web based */\r\nimport { getReactContainerInfo, uuidv4 } from './domutils';\r\n\r\nvar Fingerprint2 = require('fingerprintjs2');\r\nvar sjcl = require('sjcl');\r\nvar pbkdf2 = require('pbkdf2');\r\n\r\nexport let myMachine = null;\r\nexport let myAppSig = null;\r\n\r\nexport function getMyMachine() {\r\n return myMachine;\r\n}\r\nexport function getMyAppSig() {\r\n return myAppSig;\r\n}\r\nexport function getFingerPrint() {\r\n return new Promise(function (resolve, reject) {\r\n setTimeout(() => {\r\n Fingerprint2.get(function (components) {\r\n components.sort();\r\n //log.debug(components);\r\n const a = JSON.stringify(components);\r\n const sha256 = new sjcl.hash.sha256();\r\n sha256.update(a);\r\n const h = btoa(sha256.finalize());\r\n myMachine = h;\r\n resolve(h);\r\n })\r\n }, 500);\r\n });\r\n};\r\n\r\nexport function setupRuntime() {\r\n const rintagi = document.Rintagi || {};\r\n const location = window.location;\r\n const href = location.href;\r\n const pathName = location.pathname;\r\n const origin = location.origin;\r\n const reactBase = document.appRelBase || ['React','ReactProxy','ReactPort'];\r\n let proxied = false;\r\n const appBase = reactBase.reduce((a,b)=>{\r\n const regex = new RegExp('.*((/)?' + b + '((/|#)|$))','i');\r\n const m = pathName.match(regex);\r\n if (a === undefined && m && m.length > 0) {\r\n const proxyBase = m[0].replace(m[1],'').replace(/\\/$/,'');\r\n proxied = b.match(/reactproxy/i) || b.match(/reactport/i);\r\n return proxyBase;\r\n }\r\n else return a;\r\n },undefined);\r\n const apiBasename = origin + (appBase || '');\r\n const appDomainUrl = origin + (appBase || '');\r\n rintagi.apiBasename = rintagi.apiBasename || apiBasename;\r\n rintagi.appDomainUrl = rintagi.appDomainUrl || appDomainUrl;\r\n rintagi.appNS = rintagi.appNS || appDomainUrl.replace(origin,'') || '/';\r\n if (\r\n (location.pathname === \"/\" && location.protocol === \"http:\" && location.port >= 3000 && location.port <= 3100)\r\n ||\r\n proxied\r\n ) {\r\n rintagi.apiBasename = (rintagi.localDev || {}).apiBasename || rintagi.apiBasename;\r\n rintagi.appNS = (rintagi.localDev || {}).appNS || rintagi.appNS;\r\n rintagi.appDomainUrl = (rintagi.localDev || {}).appDomainUrl || rintagi.appDomainUrl;\r\n }\r\n\r\n //const myUrl = href.match(/^\\s*(http[^#]*)(\\/?#?)(.*)$/);\r\n const myUrl = href.match(/^\\s*((http|file:)[^#]*)(\\/?#?)(.*)$/);\r\n const reactInfo = getReactContainerInfo(document);\r\n rintagi.myDocumentUrl = myUrl[1];\r\n rintagi.myJS = reactInfo.myJS;\r\n rintagi.myJSHostingRoot = reactInfo.myJSHostingRoot;\r\n \r\n document.Rintagi = rintagi;\r\n const myAppSigKey = (rintagi.appNS || '').replace(/^\\//,'') + '_AppSig';\r\n if (!localStorage[myAppSigKey]) {\r\n localStorage[myAppSigKey] = uuidv4();\r\n };\r\n myAppSig = localStorage[myAppSigKey];\r\n};\r\n \r\n \r\nexport function getRintagiConfig()\r\n{\r\n return document.Rintagi;\r\n}\r\n\r\nsetupRuntime();","/* abstract out localStorage/sessionStorage into Promise, \r\n * can be replaced with other implementation for React Native or Server side nodejs rendering\r\n */\r\nimport log from '../helpers/logger'\r\n\r\nclass AsyncStorage {\r\n\r\n constructor(session) {\r\n this.isSession = session;\r\n this.storage = session ? sessionStorage : localStorage;\r\n }\r\n\r\n setItem(k, v) {\r\n const _this = this;\r\n return new Promise(function (resolve, reject) {\r\n _this.storage.setItem(k, v);\r\n resolve({ [k]: v });\r\n });\r\n }\r\n\r\n getItem(k) {\r\n const _this = this;\r\n return new Promise(function (resolve, reject) {\r\n const v = _this.storage.getItem(k);\r\n resolve(v);\r\n });\r\n }\r\n\r\n removeItem(k) {\r\n const _this = this;\r\n return new Promise(function (resolve, reject) {\r\n _this.storage.removeItem(k);\r\n resolve({});\r\n });\r\n }\r\n\r\n clear() {\r\n const _this = this;\r\n return new Promise(function (resolve, reject) {\r\n _this.storage.clear();\r\n resolve({});\r\n });\r\n }\r\n}\r\n\r\nexport const LocalStorage = new AsyncStorage(false);\r\nexport const SessionStorage = new AsyncStorage(true);","import { fetchService } from './fetchService';\r\nimport log from '../helpers/logger';\r\nimport { delay } from '../helpers/utils';\r\nimport { getCookie, setCookie, eraseCookie, parsedUrl, scrambleString, base64Decode, base64Encode, sha256, pbkdf2 } from '../helpers/domutils';\r\nimport { setupRuntime, getRintagiConfig, getFingerPrint, myMachine } from '../helpers/config';\r\nimport { LocalStorage, SessionStorage } from '../helpers/asyncStorage';\r\n\r\nvar currentAccessScope = {};\r\n\r\nexport const authService = {\r\n login, logout, renewAccessToken, getToken, getAccessToken, getAccessControlInfo\r\n , isAuthenticated, getUsr, getMenu, getReactQuickMenu, getSystems, getServerIdentity, getRefreshToken, setAccessScope, getAccessScope, resetPwdEmail, resetPassword\r\n , getWebAuthnAssertionRequest, getWebAuthnRegistrationRequest, webauthnAssertion, webauthnRegistration\r\n , getWeb3SigningRequest, web3Assertion, web3Registration, refreshConfig\r\n};\r\n\r\nconst getMyMachine = getFingerPrint();\r\nconst rintagi = getRintagiConfig() || {};\r\n\r\n// const baseUrl = 'http://fintruxdev/RC/';\r\n//const baseUrl= '/rc/';\r\nlet runtimeConfig = rintagi;\r\nconst debuglog = runtimeConfig.debugAlert ? alert : log.debug;\r\nlet apiBasename = runtimeConfig.apiBasename;\r\nlet appDomainUrl = runtimeConfig.appDomainUrl || runtimeConfig.apiBasename || 'http://localhost';\r\nlet appNS = (runtimeConfig.appNS || (parsedUrl(appDomainUrl) || {}).pathname || '/').toUpperCase();\r\nlet baseUrl = apiBasename + \"/webservices\";\r\nconst fetchAPIResult = fetchService.fetchAPIResult;\r\nconst getAPIResult = fetchService.getAPIResult;\r\n\r\nfunction refreshConfig() {\r\n runtimeConfig = getRintagiConfig() || {};\r\n apiBasename = runtimeConfig.apiBasename;\r\n appDomainUrl = runtimeConfig.appDomainUrl || runtimeConfig.apiBasename || 'http://localhost';\r\n appNS = (runtimeConfig.appNS || (parsedUrl(appDomainUrl) || {}).pathname || '/').toUpperCase();\r\n baseUrl = apiBasename + \"/webservices\";\r\n}\r\nfunction getSystemId() {\r\n return runtimeConfig.systemId;\r\n}\r\n\r\nfunction makeNameFromNS(name) {\r\n return ((appNS.toUpperCase().replace(/^\\//, '') + '_') || '') + name;\r\n}\r\n\r\nfunction wordToByteArray(word, length) {\r\n var ba = [], i, xFF = 0xFF;\r\n if (length > 0)\r\n ba.push(word >>> 24);\r\n if (length > 1)\r\n ba.push((word >>> 16) & xFF);\r\n if (length > 2)\r\n ba.push((word >>> 8) & xFF);\r\n if (length > 3)\r\n ba.push(word & xFF);\r\n return ba;\r\n}\r\n\r\nfunction wordArrayToByteArray(wordArray, length) {\r\n if (wordArray.hasOwnProperty(\"sigBytes\") && wordArray.hasOwnProperty(\"words\")) {\r\n length = wordArray.sigBytes;\r\n wordArray = wordArray.words;\r\n }\r\n else {\r\n length = length * 4;\r\n }\r\n var result = [],\r\n bytes,\r\n i = 0;\r\n while (length > 0) {\r\n bytes = wordToByteArray(wordArray[i], Math.min(4, length));\r\n length -= bytes.length;\r\n result.push(bytes);\r\n i++;\r\n }\r\n return [].concat.apply([], result);\r\n}\r\n\r\nfunction arrayBufferToBase64(buffer) {\r\n var binary = '';\r\n var bytes = new Uint8Array(buffer);\r\n var len = bytes.byteLength;\r\n for (var i = 0; i < len; i++) {\r\n binary += String.fromCharCode(bytes[i]);\r\n }\r\n return base64Encode(binary);\r\n}\r\n\r\nfunction makeUserHandle(userIdentity) {\r\n const h = sha256(userIdentity);\r\n const handle = arrayBufferToBase64(wordArrayToByteArray(h, h.length)).replace(/=/g, '_');\r\n return handle;\r\n}\r\n\r\nasync function rememberUserHandle(userIdentity) {\r\n const h = sha256(userIdentity);\r\n const handle = arrayBufferToBase64(wordArrayToByteArray(h, h.length)).replace(/=/g, '_');\r\n const current_handle = await getUserHandle();\r\n \r\n if (handle != current_handle) {\r\n // different user logic need to flush all remembered data\r\n await LocalStorage.clear();\r\n }\r\n\r\n LocalStorage.setItem(makeNameFromNS(\"user_handle\"), handle)\r\n .then(ret => {\r\n })\r\n .catch(error => {\r\n //log.error(error);\r\n })\r\n setCookie(makeNameFromNS(\"tokenInCookieJS\"), handle, null, appNS);\r\n}\r\nasync function getTokenName(name) {\r\n const userHandle = await getUserHandle();\r\n const x = (appDomainUrl || \"\").toLowerCase() + name + (userHandle || \"\") + (myMachine || \"\");\r\n return scrambleString(x);\r\n}\r\n\r\nasync function eraseUserHandle() {\r\n LocalStorage.removeItem(makeNameFromNS(\"user_handle\"));\r\n eraseCookie(makeNameFromNS(\"tokenInCookieJS\"));\r\n}\r\nasync function getUserHandle() {\r\n const x = await LocalStorage.getItem(makeNameFromNS(\"user_handle\")) || getCookie(makeNameFromNS(\"tokenInCookieJS\"));\r\n return x;\r\n}\r\n\r\nasync function getLoginFromCookie() {\r\n try {\r\n var user_handle = getCookie(makeNameFromNS(\"tokenInCookieJS\"));\r\n var token = getCookie(makeNameFromNS(\"tokenJS\"));\r\n if (user_handle && token) {\r\n //localStorage.setItem(makeNameFromNS(\"user_handle\"), user_handle);\r\n LocalStorage.setItem(makeNameFromNS(\"user_handle\"), user_handle);\r\n var tokenName = await getTokenName(\"refresh_token\");\r\n //localStorage.setItem(tokenName, JSON.stringify({ refresh_token: token }));\r\n LocalStorage.setItem(makeNameFromNS(\"user_handle\"), user_handle);\r\n eraseCookie(makeNameFromNS(\"tokenInCookieJS\"));\r\n eraseCookie(makeNameFromNS(\"tokenJS\"));\r\n }\r\n } catch (e) {/**/ }\r\n\r\n}\r\n\r\nasync function getAccessToken() {\r\n return getMyMachine\r\n .then(async () => {\r\n try {\r\n await getLoginFromCookie();\r\n const userHandle = await getUserHandle();\r\n if (!userHandle) return {};\r\n const tokenName = await getTokenName(\"access_token\");\r\n const accessToken = await SessionStorage.getItem(tokenName) \r\n ||\r\n await LocalStorage.getItem(tokenName)\r\n ||\r\n ((base64Decode((getCookie(tokenName) || \"\").replace(\"_\", '='))) && false)\r\n ;\r\n if (accessToken)\r\n return JSON.parse(accessToken);\r\n else \r\n return {};\r\n }\r\n catch (e) {\r\n log.error(e);\r\n return {}\r\n }\r\n })\r\n .catch(error => {\r\n log.debug(error);\r\n })\r\n};\r\n\r\nasync function getRefreshToken() {\r\n try {\r\n const tokenName = await getTokenName(\"refresh_token\");\r\n const refreshToken = await SessionStorage.getItem(tokenName) \r\n ||\r\n await LocalStorage.getItem(tokenName)\r\n ||\r\n ((base64Decode((getCookie(tokenName) || \"\").replace(\"_\", '='))) && false)\r\n ;\r\n if (refreshToken) {\r\n var x = JSON.parse(refreshToken);\r\n return x; \r\n }\r\n else \r\n return {};\r\n }\r\n catch (e) {\r\n log.error(e);\r\n const tokenInCookie = getCookie(makeNameFromNS(\"tokenJS\"));\r\n if (tokenInCookie) {\r\n return {\r\n refresh_token: tokenInCookie,\r\n }\r\n }\r\n else\r\n return {}\r\n }\r\n};\r\n\r\nfunction setAccessScope(accessScope, replace) {\r\n currentAccessScope = {\r\n ...(replace ? {} : currentAccessScope),\r\n ...accessScope\r\n };\r\n return currentAccessScope;\r\n};\r\n\r\nfunction getAccessScope() { return currentAccessScope; };\r\n\r\nconst storeAccessToken = async (access_token, resources, scope, expires_in, isLogout) => {\r\n if (access_token) {\r\n const tokenString = JSON.stringify({ access_token: access_token, expires_in: expires_in });\r\n const tokenStringForCookie = base64Encode(tokenString).replace(/=/g, '_');\r\n const tokenName = await getTokenName(\"access_token\");\r\n //setCookie(getTokenName(\"access_token\"),tokenStringForCookie);\r\n //sessionStorage.setItem(getTokenName(\"access_token\"), tokenString);\r\n SessionStorage.setItem(tokenName, tokenString);\r\n //localStorage.setItem(getTokenName(\"access_token\"), tokenString);\r\n LocalStorage.setItem(tokenName, tokenString);\r\n }\r\n else {\r\n //eraseCookie(getTokenName(\"access_token\"));\r\n if (isLogout) {\r\n console.log('logout clean up');\r\n }\r\n console.log('erase access token');\r\n const tokenName = await getTokenName(\"access_token\");\r\n //sessionStorage.removeItem(getTokenName(\"access_token\"));\r\n SessionStorage.removeItem(tokenName);\r\n //localStorage.removeItem(getTokenName(\"access_token\"));\r\n LocalStorage.removeItem(tokenName);\r\n }\r\n}\r\n\r\nconst storeRefreshToken = async (refresh_token, resources, isLogout) => {\r\n if (refresh_token) {\r\n const tokenString = JSON.stringify({ refresh_token: refresh_token });\r\n const tokenStringForCookie = base64Encode(tokenString).replace(/=/g, '_');\r\n const tokenName = await getTokenName(\"refresh_token\");\r\n //setCookie(getTokenName(\"refresh_token\"),tokenStringForCookie);\r\n //sessionStorage.setItem(getTokenName(\"refresh_token\"), tokenString);\r\n SessionStorage.setItem(tokenName, tokenString);\r\n //localStorage.setItem(getTokenName(\"refresh_token\"), tokenString);\r\n LocalStorage.setItem(tokenName, tokenString);\r\n }\r\n else {\r\n //eraseCookie(getTokenName(\"refresh_token\"));\r\n if (isLogout) {\r\n console.log('logout clean up');\r\n }\r\n console.log('erase refresh token');\r\n const tokenName = await getTokenName(\"refresh_token\");\r\n //sessionStorage.removeItem(getTokenName(\"refresh_token\"));\r\n SessionStorage.removeItem(tokenName);\r\n //localStorage.removeItem(getTokenName(\"refresh_token\"));\r\n LocalStorage.removeItem(tokenName);\r\n }\r\n}\r\n\r\nconst eraseRefreshToken = async () => {\r\n //eraseCookie(getTokenName(\"refresh_token\"));\r\n eraseCookie(makeNameFromNS(\"tokenInCookieJS\"));\r\n eraseCookie(makeNameFromNS(\"tokenJS\"));\r\n const tokenName = await getTokenName(\"refresh_token\");\r\n //sessionStorage.removeItem(getTokenName(\"refresh_token\"));\r\n SessionStorage.removeItem(tokenName);\r\n //localStorage.removeItem(getTokenName(\"refresh_token\"));\r\n LocalStorage.removeItem(tokenName);\r\n}\r\n\r\nfunction getAccessControlInfo() {\r\n // const access_token = getAccessToken().access_token;\r\n return {\r\n // access_token: access_token, \r\n getAccessToken: getAccessToken,\r\n renewAccessToken: renewAccessToken,\r\n }\r\n};\r\n\r\nfunction isAuthenticated() { return false && (getUserHandle() || false); };\r\n\r\nfunction login(username, password, options = {}) {\r\n const { nonce, code_challenge_method, code_challenge, url, client_id, challenge_answered, flush_local } = options;\r\n return fetchAPIResult(url || baseUrl + \"/authWs.asmx/Login\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n client_id: client_id || null,\r\n usrName: username || null,\r\n password: password || null,\r\n nonce: nonce || null,\r\n code_challenge_method: code_challenge_method || \"plain\",\r\n code_challenge: code_challenge || null\r\n })\r\n },\r\n })\r\n .then(result => {\r\n const apiResult = fetchService.getAPIResult(result);\r\n if (apiResult.accessCode || (apiResult.accessToken || {}).refresh_token) {\r\n rememberUserHandle(username);\r\n if ((apiResult.accessToken || {}).refresh_token) {\r\n return renewAccessToken((apiResult.accessToken || {}).refresh_token)\r\n .then(\r\n accessToken => {\r\n return {\r\n accessCode: apiResult.accessCode,\r\n refresh_token: accessToken.refresh_token,\r\n status: \"success\",\r\n }\r\n },\r\n error => {\r\n eraseUserHandle();\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n else\r\n return getToken(apiResult.accessCode)\r\n .then(\r\n accessToken => {\r\n return {\r\n accessCode: apiResult.accessCode,\r\n status: \"success\",\r\n }\r\n },\r\n error => {\r\n eraseUserHandle();\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n else {\r\n if (apiResult.error === \"access_denied\" && (apiResult.message === \"Your email or password is incorrect\" || apiResult.message === \"bot detected\") && !challenge_answered) {\r\n return pbkdf2(apiResult.serverChallenge, apiResult.serverChallenge, apiResult.challengeCount, 32, 'sha1')\r\n .then(derivedKey=>{\r\n let challengeResult = base64Encode(String.fromCharCode.apply(null, new Uint8Array(derivedKey)));\r\n return login(username, password, {\r\n ...options,\r\n client_id: challengeResult,\r\n challenge_answered: true,\r\n }); \r\n })\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? result.data.value.d.error : result.errType,\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n }\r\n },\r\n (error => {\r\n return Promise.reject(error);\r\n })\r\n )\r\n}\r\n\r\nlet tokenRefreshPromise = null;\r\n\r\nasync function getToken(code, options = {}) {\r\n const { client_id, scope, code_verifier, redirect_url, client_secret, grant_type, re_auth } = options;\r\n if (!code) {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: \"authentication error\",\r\n errSubType: \"login required\",\r\n // errMsg : \"login session expired or invalid\"\r\n errMsg: \"\"\r\n });\r\n }\r\n if (tokenRefreshPromise) {\r\n return tokenRefreshPromise;\r\n }\r\n\r\n const requestPromise = tokenRefreshPromise = fetchAPIResult(baseUrl + \"/authWs.asmx/GetToken\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n client_id: client_id || \"\",\r\n scope: scope || \"\",\r\n grant_type: grant_type || \"authorization_code\",\r\n code: code || \"\",\r\n code_verifier: code_verifier || \"\",\r\n redirect_url: redirect_url || \"\",\r\n client_secret: client_secret || \"\",\r\n re_auth: re_auth ? \"Y\" : \"N\",\r\n })\r\n }\r\n })\r\n .then(result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.access_token) {\r\n const access_token = result.data.value.d.access_token;\r\n const refresh_token = result.data.value.d.refresh_token;\r\n if (!access_token || !refresh_token) {\r\n console.log('no token returned');\r\n console.log(result);\r\n }\r\n else {\r\n storeAccessToken(result.data.value.d.access_token, result.data.value.d.resources, result.data.value.d.scope, result.data.value.d.expires_in);\r\n storeRefreshToken(result.data.value.d.refresh_token, result.data.value.d.resources); \r\n }\r\n return {\r\n access_token: result.data.value.d.access_token,\r\n refresh_token: result.data.value.d.refresh_token,\r\n token_type: result.data.value.d.token_type,\r\n expires_in: result.data.value.d.expires_in,\r\n status: \"success\"\r\n }\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? result.data.value.d.error : result.errType,\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n (error => {\r\n return Promise.reject(error);\r\n })\r\n )\r\n .finally(() => {\r\n tokenRefreshPromise = null;\r\n });\r\n return requestPromise;\r\n}\r\n\r\nasync function logout(keepToken = false, currentSessionOnly = false) {\r\n return getAccessToken().then(\r\n async (token) => {\r\n console.log('logout successful');\r\n var refresh_token = (await getRefreshToken() || {}).refresh_token;\r\n if (!keepToken) {\r\n storeAccessToken(null, null, null, true);\r\n }\r\n if (!keepToken) {\r\n eraseRefreshToken();\r\n eraseUserHandle();\r\n }\r\n if (!currentSessionOnly) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/Logout\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n access_token: token.access_token || \"\",\r\n refresh_token: refresh_token || \"\",\r\n })\r\n },\r\n }).then(result => result).catch(error => Promise.reject(error));\r\n }\r\n return true;\r\n }\r\n )\r\n\r\n}\r\nasync function renewAccessToken(refresh_token, re_auth) {\r\n return getToken(refresh_token || (await getRefreshToken() || {}).refresh_token, { grant_type: \"refresh_token\", re_auth })\r\n\r\n .catch(error => {\r\n if (!refresh_token) {\r\n if (error.errType !== \"network error\" \r\n && error.errorMsg !== \"Failed to fetch\" \r\n && error.errType !== \"fetch error\" \r\n ) {\r\n console.log('failed to renew access token, flushing tokens');\r\n console.log(error);\r\n storeRefreshToken(null);\r\n storeAccessToken(null); \r\n } else {\r\n console.log('failed to renew access token, network error, keep token');\r\n }\r\n }\r\n return Promise.reject(error);\r\n }\r\n );\r\n}\r\n\r\nasync function getUsr(scope) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/GetCurrentUsrInfo\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n scope: scope || \"\",\r\n })\r\n },\r\n ...(getAccessControlInfo())\r\n })\r\n .then(\r\n async result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n supportingData: getAPIResult(result).supportingData || {}\r\n }\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || (result.status === \"success\" ? result.data.value.d.error : null),\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n\r\n}\r\n\r\nasync function resetPwdEmail(emailAddress, reCaptchaRequest, refCode) {\r\n return fetchAPIResult(baseUrl + \"/AuthWs.asmx/ResetPwdEmail\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n emailAddress: emailAddress || \"\",\r\n reCaptchaRequest: reCaptchaRequest || \"\",\r\n refCode: refCode || \"\",\r\n })\r\n }\r\n })\r\n .then(\r\n async result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n }\r\n }\r\n else {\r\n console.log(result);\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || result.data.value.d.error,\r\n errMsg: result.status === \"success\" ? result.data.value.d.message || result.data.value.d.errorMsg : result.errType\r\n })\r\n }\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n\r\n}\r\n\r\n\r\nfunction resetPassword(emailAddress, password, nounce, ticketLeft, ticketRight) {\r\n return fetchAPIResult(baseUrl + \"/AuthWs.asmx/ResetPassword\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n emailAddress: emailAddress || \"\",\r\n password: password || \"\",\r\n nounce: nounce || \"\",\r\n ticketLeft: ticketLeft || \"\",\r\n ticketRight: ticketRight || \"\",\r\n })\r\n }\r\n })\r\n .then(\r\n async result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n }\r\n }\r\n else {\r\n console.log(result);\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || result.data.value.d.error,\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nasync function getMenu(scope) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/GetMenu\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n scope: scope || \"\",\r\n systemId: getSystemId() || 5,\r\n\r\n })\r\n },\r\n ...(getAccessControlInfo())\r\n })\r\n .then(\r\n async result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n supportingData: getAPIResult(result).supportingData || {}\r\n }\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || (result.status === \"success\" ? result.data.value.d.error : null),\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nasync function getReactQuickMenu(systemId, scope) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/GetReactQuickMenu\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n scope: scope || \"\",\r\n systemId: systemId || getSystemId() || 5,\r\n\r\n })\r\n },\r\n ...(getAccessControlInfo())\r\n })\r\n .then(\r\n async result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n supportingData: getAPIResult(result).supportingData || {}\r\n }\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || (result.status === \"success\" ? result.data.value.d.error : null),\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nasync function getSystems(ignoreCache, scope) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/GetSystems\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n scope: scope || \"\",\r\n ignoreCache: ignoreCache || false,\r\n })\r\n },\r\n ...(getAccessControlInfo())\r\n })\r\n .then(\r\n async result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n supportingData: getAPIResult(result).supportingData || {}\r\n }\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || (result.status === \"success\" ? result.data.value.d.error : null),\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nasync function getServerIdentity(scope) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/GetServerIdentity\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n scope: scope || \"\"\r\n })\r\n },\r\n ...(getAccessControlInfo())\r\n })\r\n .then(\r\n async result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n supportingData: getAPIResult(result).supportingData || {}\r\n }\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || (result.status === \"success\" ? result.data.value.d.error : null),\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nasync function getWebAuthnRegistrationRequest(hostingDomainUrl, scope) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/GetWebAuthnRegistrationRequest\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n hostingDomainUrl: hostingDomainUrl,\r\n scope: scope || \"\"\r\n })\r\n },\r\n ...(getAccessControlInfo())\r\n })\r\n .then(\r\n async result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n supportingData: getAPIResult(result).supportingData || {}\r\n }\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || (result.status === \"success\" ? result.data.value.d.error : null),\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nasync function getWebAuthnAssertionRequest(hostingDomainUrl, loginName, scope) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/GetWebAuthnAssertionRequest\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n hostingDomainUrl: hostingDomainUrl || '',\r\n loginName: loginName || '',\r\n scope: scope || \"\"\r\n })\r\n },\r\n ...(getAccessControlInfo())\r\n })\r\n .then(\r\n async result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n supportingData: getAPIResult(result).supportingData || {}\r\n }\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || (result.status === \"success\" ? result.data.value.d.error : null),\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nasync function webauthnRegistration(requestJSON, resultJSON, scope) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/WebAuthnRegistration\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n requestJSON: requestJSON || '',\r\n resultJSON: resultJSON || '',\r\n scope: scope || ''\r\n })\r\n },\r\n ...(getAccessControlInfo())\r\n })\r\n .then(\r\n async result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n supportingData: getAPIResult(result).supportingData || {}\r\n }\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || (result.status === \"success\" ? result.data.value.d.error : null),\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nasync function webauthnAssertion(requestJSON, resultJSON, scope) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/WebAuthnAssertion\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n requestJSON: requestJSON || '',\r\n resultJSON: resultJSON || '',\r\n scope: scope || ''\r\n })\r\n },\r\n ...(getAccessControlInfo())\r\n })\r\n .then(result => {\r\n const apiResult = fetchService.getAPIResult(result);\r\n if (apiResult.accessCode || (apiResult.accessToken || {}).refresh_token) {\r\n rememberUserHandle(apiResult.username);\r\n if ((apiResult.accessToken || {}).refresh_token) {\r\n return renewAccessToken((apiResult.accessToken || {}).refresh_token)\r\n .then(\r\n accessToken => {\r\n return {\r\n accessCode: apiResult.accessCode,\r\n refresh_token: accessToken.refresh_token,\r\n status: \"success\",\r\n }\r\n },\r\n error => {\r\n eraseUserHandle();\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n else\r\n return getToken(apiResult.accessCode)\r\n .then(\r\n accessToken => {\r\n return {\r\n accessCode: apiResult.accessCode,\r\n status: \"success\",\r\n }\r\n },\r\n error => {\r\n eraseUserHandle();\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? result.data.value.d.error : result.errType,\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n (error => {\r\n return Promise.reject(error);\r\n })\r\n )\r\n}\r\n\r\nasync function getWeb3SigningRequest(hostingDomainUrl, loginName, scope) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/GetWeb3SigningRequest\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n hostingDomainUrl: hostingDomainUrl || '',\r\n loginName: loginName || '',\r\n })\r\n },\r\n ...(getAccessControlInfo())\r\n })\r\n .then(\r\n async result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n supportingData: getAPIResult(result).supportingData || {}\r\n }\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || (result.status === \"success\" ? result.data.value.d.error : null),\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nasync function web3Registration(requestJSON, resultJSON, scope) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/Web3Registration\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n requestJSON: requestJSON || '',\r\n resultJSON: resultJSON || '',\r\n })\r\n },\r\n ...(getAccessControlInfo())\r\n })\r\n .then(\r\n async result => {\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n supportingData: getAPIResult(result).supportingData || {}\r\n }\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || (result.status === \"success\" ? result.data.value.d.error : null),\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nasync function web3Assertion(requestJSON, resultJSON, scope) {\r\n return fetchAPIResult(baseUrl + \"/authWs.asmx/Web3Assertion\"\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n requestJSON: requestJSON || '',\r\n resultJSON: resultJSON || '',\r\n })\r\n },\r\n ...(getAccessControlInfo())\r\n })\r\n .then(result => {\r\n const apiResult = fetchService.getAPIResult(result);\r\n if (apiResult.accessCode || (apiResult.accessToken || {}).refresh_token) {\r\n rememberUserHandle(apiResult.username);\r\n if ((apiResult.accessToken || {}).refresh_token) {\r\n return renewAccessToken((apiResult.accessToken || {}).refresh_token)\r\n .then(\r\n accessToken => {\r\n return {\r\n accessCode: apiResult.accessCode,\r\n refresh_token: accessToken.refresh_token,\r\n status: \"success\",\r\n }\r\n },\r\n error => {\r\n eraseUserHandle();\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n else\r\n return getToken(apiResult.accessCode)\r\n .then(\r\n accessToken => {\r\n return {\r\n accessCode: apiResult.accessCode,\r\n status: \"success\",\r\n }\r\n },\r\n error => {\r\n eraseUserHandle();\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n else {\r\n return Promise.reject({\r\n status: \"failed\",\r\n errType: result.status === \"success\" ? result.data.value.d.error : result.errType,\r\n errMsg: result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n (error => {\r\n return Promise.reject(error);\r\n })\r\n )\r\n}","import { fetchService } from './fetchService';\r\nimport { authService } from './authService';\r\nimport { getRintagiConfig } from '../helpers/config';\r\nimport log from '../helpers/logger';\r\n\r\nconst rintagi = getRintagiConfig() || {};\r\n\r\nexport let baseUrl = rintagi.apiBasename + \"/webservices\";\r\nexport const fetchAPIResult = fetchService.fetchAPIResult;\r\nexport const getAPIResult = fetchService.getAPIResult;\r\nexport const getAccessControlInfo = authService.getAccessControlInfo;\r\nexport const getAccessScope = authService.getAccessScope;\r\n\r\nexport function refreshConfig()\r\n{\r\n baseUrl = (getRintagiConfig() || {}).apiBasename + \"/webservices\";\r\n}\r\n\r\nexport function fetchData(url,options)\r\n{\r\n return fetchAPIResult(url,options)\r\n .then(\r\n async result=>{\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status===\"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n supportingData: getAPIResult(result).supportingData || {}\r\n }\r\n }\r\n else {\r\n return Promise.reject( {\r\n status : \"failed\",\r\n url:url,\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || (result.status === \"success\" ? result.data.value.d.status || result.data.value.d.errMsg : \"\"),\r\n errMsg : result.status === \"success\" ? result.data.value.d.errorMsg : result.errType,\r\n validationErrors: result.status === \"success\" ? result.data.value.d.validationErrors : null,\r\n })\r\n }\r\n },\r\n error=>{\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nexport function ddlSuggests (url, query, contextStr, topN,accessScope) \r\n{\r\n return fetchAPIResult(baseUrl+url\r\n ,{\r\n requestOptions: {\r\n body:JSON.stringify({\r\n query:query,\r\n contextStr: contextStr,\r\n topN: topN || 50\r\n })\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n })\r\n .then(\r\n async result=>{\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status===\"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n supportingData: getAPIResult(result).supportingData || {}\r\n }\r\n }\r\n else {\r\n return Promise.reject( {\r\n status : \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || result.data.value.d.error,\r\n errMsg : result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error=>{\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nexport function MakeDdlServiceFn(serviceUrl, getAccessControlInfo, currentScope) {\r\n return function (query, topN, filterBy, accessScope){\r\n return fetchData(serviceUrl\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || \"\",\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function keepNullOrUndefinedFields (o)\r\n{\r\n if (!o || typeof o !== \"object\" || true) return o;\r\n return Object.keys(o||{}).reduce((a,k)=>{o[k] = o[k] === undefined || o[k] === null ? '' : o[k]; return a;},o)\r\n};","import log from '../helpers/logger';\r\n\r\nexport const SUCCESS = 'NOTIFICATION_SUCCESS';\r\nexport const ERROR = 'NOTIFICATION_ERROR';\r\nexport const CLEAR_ERROR = 'NOTIFICATION_CLEAR_ERROR';\r\n\r\nexport async function dispatchWithNotification(dispatch, action)\r\n{\r\n dispatch(action);\r\n // const actionType = action.type;\r\n const message = ((action || {}).payload || {}).message || ((action || {}).payload || {}).errMsg || (((action || {}).payload || {}).error || {}).errMsg;\r\n const validationErrors = ((action || {}).payload || {}).validationErrors;\r\n if (message) {\r\n if (action.type.endsWith(\".FAILED\")) {\r\n dispatch(showNotification(\"E\",{message, validationErrors}))\r\n }\r\n else if (action.type.endsWith(\".SUCCEEDED\")) {\r\n dispatch(showNotification(\"S\",{message}))\r\n }\r\n }\r\n}\r\n// Reducer\r\nexport function notificationReducer(state = null, action) {\r\n switch (action.type) {\r\n case SUCCESS:\r\n return action.payload;\r\n case ERROR:\r\n return action.payload;\r\n case CLEAR_ERROR:\r\n return null;\r\n default:\r\n return state;\r\n }\r\n }\r\n\r\n// Actions\r\nexport function showNotification(msgType, {message,timeout,dtl,validationErrors}) {\r\n if (msgType === \"E\") {\r\n return {\r\n type: ERROR,\r\n payload: {msgType: msgType, message: message, timeout,validationErrors}\r\n };\r\n }\r\n else {\r\n return {\r\n type: SUCCESS,\r\n payload: {msgType: msgType, message: message, timeout}\r\n }; \r\n }\r\n}\r\n\r\nexport function clearNotification() {\r\n return (dispatch) => {\r\n dispatch({ type: CLEAR_ERROR, payload: null });\r\n }\r\n}\r\n","/* \r\n * this is not generic persist for redux but just simple session based persist to survive browser refresh \r\n */\r\nimport { LocalStorage, SessionStorage } from '../helpers/asyncStorage';\r\n\r\nconst storageLocation =(acrossSession)=>(acrossSession ? localStorage : sessionStorage);\r\n\r\n\r\nexport function Flush(acrossSession = true) {\r\n storageLocation(acrossSession).clear(); \r\n}\r\n\r\nexport function RememberCurrent(key, item, acrossSession = true) {\r\n if (key) {\r\n try {\r\n storageLocation(acrossSession).setItem(key,JSON.stringify(item));\r\n } catch (e) {\r\n storageLocation(acrossSession).setItem(key,item);\r\n }\r\n }\r\n else {\r\n storageLocation(acrossSession).removeItem(key);\r\n }\r\n}\r\n\r\nexport function GetCurrent(key, acrossSession = true) {\r\n try {\r\n return JSON.parse(storageLocation(acrossSession)[key]); \r\n\r\n } catch (e)\r\n {\r\n return storageLocation(acrossSession)[key]; \r\n } \r\n}\r\n\r\nexport async function RememberCurrentAsync(key, item, acrossSession = true) {\r\n if (item != undefined && item != null) {\r\n try {\r\n return (acrossSession ? LocalStorage : SessionStorage).setItem(key, JSON.stringify(item));\r\n } catch (e) {\r\n return (acrossSession ? LocalStorage : SessionStorage).setItem(key, item);\r\n }\r\n }\r\n else {\r\n return (acrossSession ? LocalStorage : SessionStorage).removeItem(key);\r\n }\r\n}\r\n\r\nexport async function GetCurrentAsync(key, acrossSession = true) {\r\n return (acrossSession ? LocalStorage : SessionStorage)\r\n .getItem(key)\r\n .then(v => {\r\n try {\r\n return JSON.parse(v)\r\n } catch (e) {\r\n return v;\r\n }\r\n })\r\n .catch(error => {\r\n return null;\r\n })\r\n}","import { getAsyncTypes } from '../helpers/actionType';\r\nimport { authService } from '../services/authService'\r\nimport * as profileService from '../services/profileService'\r\nimport * as systemService from '../services/systemService'\r\nimport { showNotification, dispatchWithNotification } from '../redux/Notification'\r\nimport { switchLanguage, getCurrentLanguage } from '../helpers/formatter'\r\nimport log from '../helpers/logger';\r\nimport { setupRuntime, getRintagiConfig } from '../helpers/config';\r\nimport { Flush as FlushStorage } from './Persist';\r\n// action type\r\nconst SCREEN_PREFIX = 'Login';\r\nexport const LOGIN = getAsyncTypes(SCREEN_PREFIX, 'AUTH_LOGIN');\r\nexport const LOGOUT = getAsyncTypes(SCREEN_PREFIX, 'AUTH_LOGOUT');\r\nexport const GET_TOKEN = getAsyncTypes(SCREEN_PREFIX, 'AUTH_GET_TOKEN');\r\nexport const GET_USER = getAsyncTypes(SCREEN_PREFIX, 'AUTH_GET_USER');\r\nexport const GET_MENU = getAsyncTypes(SCREEN_PREFIX, 'AUTH_GET_MENU');\r\nexport const GET_SYSTEMLIST = getAsyncTypes(SCREEN_PREFIX, 'AUTH_GET_SYSTEMLIST');\r\nexport const GET_SERVERIDENTITY = getAsyncTypes(SCREEN_PREFIX, 'AUTH_GET_SERVERIDENTITY');\r\nexport const SESSION_TIMEOUT = getAsyncTypes(SCREEN_PREFIX, 'AUTH_LOGIN');\r\nexport const UPD_PROFILE = getAsyncTypes(SCREEN_PREFIX, 'AUTH_UPDATE_PROFILE');\r\nexport const CHANGE_PASSWORD = getAsyncTypes(SCREEN_PREFIX, 'AUTH_CHANGE_PASSWORD');\r\nexport const RESET_PASSWORD_EMAIL = getAsyncTypes(SCREEN_PREFIX, 'AUTH_RESET_PASSWORD_EMAIL');\r\nexport const SWITCH_CURRENT = getAsyncTypes(SCREEN_PREFIX, 'AUTH_SWITCH_CURRENT');\r\n\r\n\r\nconst runtimeConfig = getRintagiConfig() || {};\r\nconst systemId = runtimeConfig.systemId || 3;\r\n\r\n// reducer\r\nconst initState = {\r\n user: {\r\n desktopView: false,\r\n },\r\n menu: null,\r\n system: null,\r\n serverInfo: null,\r\n Label: {\r\n Login: \"Login\",\r\n Logout: \"Logout\",\r\n UserName: \"User Name\",\r\n Password: \"Password\",\r\n UserNameEmpty: \"User Name cannot be empty\",\r\n PasswordEmpty: \"Password cannot be empty\",\r\n LoginScreenTitle: \"Login to Your Account\",\r\n LoginScreenDesc: \"Please enter your login details\",\r\n Profile: \"Profile\",\r\n ProfileSubtitle: \"Update your profile information\",\r\n NewPassword: \"New Password\",\r\n NewPasswordSubtitle: \"Change your password\",\r\n NewLoginName: \"Login Name\",\r\n NewUserName: \"Shown as\",\r\n NewUserEmail: \"Email\",\r\n NewuserPassword: \"New Password\",\r\n ConfirmPwd: \"Confirm Password\",\r\n UpdProfileBtn: \"Update\",\r\n pdPwdBtn: \"Change Password\",\r\n NewUsrPasswordEmpty: \"Please enter a new password\",\r\n ConfirmPwdEmpty: \"Please enter a matching password\",\r\n PwdHlpMsgLabel: \"Your password should contain minimum 8 characters with at least one digit, one capital, one lower case and one symbol.\",\r\n ApplySettingsBtn: \"Apply Settings\",\r\n Settings: \"Account Settings\",\r\n SettingsSubtitle: \"Select your settings\",\r\n CompanyList: \"Company\",\r\n ProjectList: \"Project\",\r\n SystemsList: \"System\",\r\n TimeZoneList: \"TimeZone\",\r\n ResetLoginName: \"User Name\",\r\n ResetUsrEmail: \"Email\",\r\n ResetPwdBtn: \"Reset\",\r\n Or: \"OR\",\r\n ResetPwdTitle: \"Reset Password\",\r\n ResetPwdSubtitle: \"Enter your username or email to reset password\",\r\n Information: \"Information\",\r\n UnSavedPage: \"You have not saved your changes. Are you sure you want to leave?\",\r\n Language: \"Language\"\r\n },\r\n filter: {\r\n CompanyList: [\r\n { key: \"1\", Label: \"company 1\", value: \"company 1\" },\r\n { key: \"2\", Label: \"company 2\", value: \"company 2\" },\r\n ],\r\n ProjectList: [\r\n { key: \"1\", Label: \"Project 1\", value: \"Project 1\" },\r\n { key: \"2\", Label: \"Project 2\", value: \"Project 2\" },\r\n ],\r\n SystemsList: [\r\n { key: \"1\", Label: \"System 1\", value: \"System 1\" },\r\n { key: \"2\", Label: \"System 2\", value: \"System 2\" },\r\n ],\r\n TimeZoneList: [\r\n { key: \"1\", Label: \"TimeZone 1\", value: \"TimeZone 1\" },\r\n { key: \"2\", Label: \"TimeZone 2\", value: \"TimeZone 2\" },\r\n ]\r\n },\r\n nounce: null,\r\n ticketLeft: null,\r\n ticketRight: null,\r\n}\r\n\r\nfunction handleLoginResult(dispatch, data, challenge) {\r\n if (data.status === \"success\") {\r\n //dispatchWithNotification(dispatch, { type: LOGIN.SUCCEEDED, payload: data.accessCode});\r\n //dispatchWithNotification(dispatch, { type: GET_TOKEN.STARTED, payload: data.accessCode});\r\n const { accessCode, refresh_token } = data;\r\n return authService.getToken(refresh_token || accessCode, { grant_type: refresh_token && 'refresh_token' }).then(\r\n data => {\r\n //dispatchWithNotification(dispatch, { type: GET_TOKEN.SUCCEEDED, payload: data.data});\r\n //dispatchWithNotification(dispatch, { type: GET_USER.STARTED, payload: data.data});\r\n return authService.getUsr().then(\r\n data => {\r\n dispatchWithNotification(dispatch, { type: GET_USER.SUCCEEDED, payload: data.data });\r\n authService.getMenu(systemId).then(\r\n data => {\r\n dispatchWithNotification(dispatch, { type: GET_MENU.SUCCEEDED, payload: data.data });\r\n },\r\n error => {\r\n dispatchWithNotification(dispatch, { type: GET_MENU.FAILED, payload: error });\r\n }\r\n ).catch(error => {\r\n console.log(error);\r\n })\r\n\r\n authService.getSystems().then(\r\n data => {\r\n dispatchWithNotification(dispatch, { type: GET_SYSTEMLIST.SUCCEEDED, payload: data.data });\r\n },\r\n error => {\r\n dispatchWithNotification(dispatch, { type: GET_SYSTEMLIST.FAILED, payload: error });\r\n }\r\n ).catch(error => {\r\n console.log(error);\r\n })\r\n\r\n authService.getServerIdentity().then(\r\n data => {\r\n dispatchWithNotification(dispatch, { type: GET_SERVERIDENTITY.SUCCEEDED, payload: data.data });\r\n },\r\n error => {\r\n dispatchWithNotification(dispatch, { type: GET_SERVERIDENTITY.FAILED, payload: error });\r\n }\r\n ).catch(error => {\r\n console.log(error);\r\n })\r\n\r\n return Promise.resolve([data.data]);\r\n },\r\n error => {\r\n dispatchWithNotification(dispatch, { type: GET_USER.FAILED, payload: error });\r\n return Promise.reject(error);\r\n }\r\n ).catch(error => {\r\n console.log(error);\r\n return Promise.reject(error);\r\n })\r\n }, error => {\r\n dispatchWithNotification(dispatch, { type: GET_TOKEN.FAILED, payload: error });\r\n return Promise.reject(error);\r\n }).catch(error => {\r\n console.log(error);\r\n return Promise.reject(error);\r\n })\r\n }\r\n else {\r\n dispatchWithNotification(dispatch, { type: LOGIN.FAILED, payload: data });\r\n return Promise.reject(data);\r\n //dispatchWithNotification(dispatch, getNotificationAction(\"E\", data.error || data.errMsg));\r\n }\r\n\r\n}\r\n\r\nexport function authReducer(state = initState, action) {\r\n const payload = action.payload;\r\n\r\n switch (action.type) {\r\n case GET_USER.STARTED:\r\n return {\r\n // ...(state), // flush stored info, as if it is not authenticated\r\n ...state,\r\n user: {\r\n ...state.user,\r\n loading: true,\r\n loadingTime: new Date()\r\n }\r\n }\r\n case GET_USER.SUCCEEDED:\r\n return {\r\n ...(state),\r\n user: {\r\n ...state.user,\r\n ...(action.payload),\r\n loading: false,\r\n key: Date.now()\r\n },\r\n }\r\n case GET_USER.FAILED:\r\n return {\r\n ...initState,\r\n user: {\r\n desktopView: state.user.desktopView,\r\n ...(action.payload),\r\n loading: false,\r\n }\r\n }\r\n case GET_USER.ENDED:\r\n return {\r\n ...initState,\r\n user: {\r\n ...(state.user || {}),\r\n loading: false,\r\n }\r\n }\r\n case LOGIN.STARTED:\r\n return {\r\n ...state,\r\n user: {\r\n ...state.user,\r\n ...(action.payload),\r\n loading: true\r\n },\r\n }\r\n case LOGIN.SUCCEEDED:\r\n return {\r\n ...state,\r\n user: {\r\n desktopView: state.user.desktopView,\r\n ...(action.payload),\r\n loading: false\r\n },\r\n }\r\n case LOGIN.FAILED:\r\n return {\r\n ...state,\r\n user: {\r\n desktopView: state.user.desktopView,\r\n ...(action.payload),\r\n loading: false\r\n },\r\n }\r\n case LOGIN.ENDED:\r\n return {\r\n ...state,\r\n user: {\r\n ...(state.user || {}),\r\n loading: false\r\n },\r\n }\r\n case LOGOUT.STARTED:\r\n return {\r\n ...state,\r\n user: {\r\n ...state.user,\r\n loading: true\r\n },\r\n }\r\n case LOGOUT.SUCCEEDED:\r\n case LOGOUT.FAILED:\r\n return {\r\n ...state,\r\n user: {\r\n desktopView: state.user.desktopView,\r\n loading: false\r\n },\r\n }\r\n case LOGOUT.ENDED:\r\n return {\r\n ...state,\r\n user: {\r\n ...(state.user || {}),\r\n loading: false\r\n },\r\n }\r\n case UPD_PROFILE.STARTED:\r\n return {\r\n ...state,\r\n page_saving: true\r\n }\r\n case UPD_PROFILE.SUCCEEDED:\r\n return {\r\n ...state,\r\n page_saving: false,\r\n user: {\r\n ...(action.payload)\r\n , key: Date.now()\r\n },\r\n }\r\n case UPD_PROFILE.FAILED:\r\n return {\r\n ...state,\r\n page_saving: false\r\n }\r\n case CHANGE_PASSWORD.STARTED:\r\n return {\r\n ...state,\r\n page_saving: true,\r\n loading: true,\r\n }\r\n case CHANGE_PASSWORD.SUCCEEDED:\r\n return {\r\n ...state,\r\n page_saving: false,\r\n loading: false,\r\n }\r\n case CHANGE_PASSWORD.FAILED:\r\n return {\r\n ...state,\r\n page_saving: false,\r\n loading: false,\r\n }\r\n case RESET_PASSWORD_EMAIL.STARTED:\r\n return {\r\n ...state,\r\n page_saving: true,\r\n loading: true,\r\n }\r\n case RESET_PASSWORD_EMAIL.SUCCEEDED:\r\n return {\r\n ...state,\r\n page_saving: false,\r\n email: payload.email,\r\n nounce: payload.nounce,\r\n ticketRight: payload.ticketRight,\r\n loading: false,\r\n }\r\n case RESET_PASSWORD_EMAIL.FAILED:\r\n return {\r\n ...state,\r\n page_saving: false,\r\n loading: false,\r\n }\r\n case SWITCH_CURRENT.STARTED:\r\n return {\r\n ...state,\r\n page_saving: true\r\n }\r\n case SWITCH_CURRENT.SUCCEEDED:\r\n return {\r\n ...state,\r\n user: {\r\n ...state.user,\r\n CompanyId: payload.CompanyId,\r\n ProjectId: payload.ProjectId,\r\n CultureId: payload.CultureId,\r\n lang: payload.lang,\r\n key: Date.now(),\r\n },\r\n page_saving: false\r\n }\r\n case SWITCH_CURRENT.FAILED:\r\n return {\r\n ...state,\r\n page_saving: false\r\n }\r\n case GET_MENU.STARTED:\r\n return {\r\n // ...(state), // flush stored info, as if it is not authenticated\r\n ...state,\r\n menu: {\r\n menuList: state.menu.menuList,\r\n loading: true,\r\n loadingTime: new Date()\r\n }\r\n }\r\n case GET_MENU.SUCCEEDED:\r\n return {\r\n ...(state),\r\n menu: {\r\n ...state.menu,\r\n menuList: [...action.payload],\r\n loading: false,\r\n key: Date.now()\r\n },\r\n }\r\n case GET_MENU.FAILED:\r\n return {\r\n ...(state),\r\n menu: {\r\n menuList: [],\r\n // desktopView:state.menu.desktopView,\r\n // ...(action.payload),\r\n loading: false,\r\n }\r\n }\r\n case GET_SYSTEMLIST.STARTED:\r\n return {\r\n // ...(state), // flush stored info, as if it is not authenticated\r\n ...state,\r\n system: {\r\n systemList: state.system.systemList,\r\n loading: true,\r\n loadingTime: new Date()\r\n }\r\n }\r\n case GET_SYSTEMLIST.SUCCEEDED:\r\n return {\r\n ...(state),\r\n system: {\r\n ...state.system,\r\n systemList: [...action.payload],\r\n loading: false,\r\n key: Date.now()\r\n },\r\n }\r\n case GET_SYSTEMLIST.FAILED:\r\n return {\r\n ...(state),\r\n system: {\r\n systemList: [],\r\n loading: false,\r\n }\r\n }\r\n case GET_SERVERIDENTITY.STARTED:\r\n return {\r\n // ...(state), // flush stored info, as if it is not authenticated\r\n ...state,\r\n serverInfo: {\r\n ...(action.payload),\r\n loading: true,\r\n loadingTime: new Date()\r\n }\r\n }\r\n case GET_SERVERIDENTITY.SUCCEEDED:\r\n return {\r\n ...(state),\r\n serverInfo: {\r\n ...state.serverInfo,\r\n ...(action.payload),\r\n loading: false,\r\n key: Date.now()\r\n },\r\n }\r\n case GET_SERVERIDENTITY.FAILED:\r\n return {\r\n ...(state),\r\n serverInfo: {\r\n ...(action.payload),\r\n loading: false,\r\n }\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nfunction switchToSavedCulture(user) {\r\n const currentLang = getCurrentLanguage();\r\n if (currentLang.CultureId !== user.CultureId) {\r\n systemService.getCultureList(user.CultureId, \"en\")\r\n .then(ret => {\r\n //switchLanguage('en', data.data.CultureId);\r\n const mappedCulture = ret.data.data.filter(v => +v.CultureTypeId === +user.CultureId)[0];\r\n if (mappedCulture) {\r\n switchLanguage(mappedCulture.CultureTypeName, user.CultureId);\r\n }\r\n },\r\n err => {\r\n console.log(err);\r\n }\r\n )\r\n }\r\n}\r\n// action function maker\r\nexport function ShowSpinner(state) {\r\n return !state || state.page_loading || state.page_saving;\r\n}\r\n\r\nexport function login(username, password) {\r\n\r\n return (dispatch, getState, { webApi }) => {\r\n dispatchWithNotification(dispatch, { type: LOGIN.STARTED, payload: { username: username } });\r\n return authService.login(username, password).then(\r\n (data) => {\r\n handleLoginResult(dispatch, data);\r\n },\r\n (error) => {\r\n console.log(error);\r\n dispatchWithNotification(dispatch, { type: LOGIN.FAILED, payload: { ...error, errMsg: error.errMsg === \"bot challenge\" ? \"Login failed. The email and password combination is invalid. Please try again.\" : error.errMsg } });\r\n return Promise.reject(error);\r\n }\r\n );\r\n };\r\n}\r\n\r\nexport function logout(keepToken, currentSessionOnly) {\r\n return (dispatch) => {\r\n dispatchWithNotification(dispatch, { type: LOGOUT.STARTED, payload: {} });\r\n\r\n return authService.logout(keepToken, currentSessionOnly).then(\r\n (result) => {\r\n dispatchWithNotification(dispatch, { type: LOGOUT.SUCCEEDED, payload: result });\r\n dispatch({ type: GET_MENU.SUCCEEDED, payload: [] });\r\n // refresh the whole app ?\r\n //window.location.reload();\r\n return true;\r\n }\r\n )\r\n .catch(error => {\r\n dispatchWithNotification(dispatch, { type: (error.errType === \"network error\" || error.errType === \"fetch error\") ? (keepToken ? LOGOUT.SUCCEEDED : LOGOUT.ENDED) : LOGOUT.FAILED, payload: error });\r\n return Promise.reject(error);\r\n })\r\n .finally(() => {\r\n \r\n// FlushStorage();\r\n })\r\n }\r\n}\r\n\r\nexport function reloadCurrentUser(reAuth) {\r\n return (dispatch, getState, ...rest) => {\r\n return authService.renewAccessToken(null, reAuth)\r\n .then(\r\n token => {\r\n return getCurrentUser(true)(dispatch, getState, ...rest);\r\n }\r\n )\r\n .then(\r\n (currentUser) => {\r\n return currentUser;\r\n }\r\n )\r\n .catch(\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n}\r\nexport function getCurrentUser(silent = false) {\r\n return async (dispatch, getState, { webApi }) => {\r\n\r\n //if (!authService.isAuthenticated()) return;\r\n const access_token = await authService.getAccessToken();\r\n const refresh_token = (await authService.getRefreshToken()).refresh_token;\r\n if (!refresh_token) {\r\n log.debug('no refresh token');\r\n return Promise.resolve({});\r\n }\r\n dispatchWithNotification(dispatch, { type: GET_USER.STARTED, payload: null });\r\n return authService.getUsr()\r\n .then(\r\n (data) => {\r\n if (data.data) {\r\n /* have to do side effect here */\r\n switchToSavedCulture(data.data);\r\n dispatchWithNotification(dispatch, { type: GET_USER.SUCCEEDED, payload: data.data });\r\n const auth = getState().auth || {};\r\n if (!auth.menu) {\r\n authService.getMenu().then(\r\n data => {\r\n dispatchWithNotification(dispatch, { type: GET_MENU.SUCCEEDED, payload: data.data });\r\n\r\n },\r\n error => {\r\n dispatchWithNotification(dispatch, { type: GET_MENU.FAILED, payload: error });\r\n });\r\n\r\n authService.getSystems().then(\r\n data => {\r\n dispatchWithNotification(dispatch, { type: GET_SYSTEMLIST.SUCCEEDED, payload: data.data });\r\n\r\n },\r\n error => {\r\n dispatchWithNotification(dispatch, { type: GET_SYSTEMLIST.FAILED, payload: error });\r\n });\r\n\r\n authService.getServerIdentity().then(\r\n data => {\r\n dispatchWithNotification(dispatch, { type: GET_SERVERIDENTITY.SUCCEEDED, payload: data.data });\r\n },\r\n error => {\r\n dispatchWithNotification(dispatch, { type: GET_SERVERIDENTITY.FAILED, payload: error });\r\n });\r\n }\r\n return Promise.resolve(data.data);\r\n }\r\n else {\r\n //dispatchWithNotification(dispatch, { type: GET_USER.FAILED, payload: data });\r\n return Promise.reject(data.errMsg)\r\n }\r\n },\r\n (error) => {\r\n if (!silent) {\r\n // dispatchWithNotification(dispatch, getNotificationAction(\"E\", {\r\n // type: 'network',\r\n // message: 'network error'\r\n // }));\r\n }\r\n if (authService.isAuthenticated()) {\r\n //dispatchWithNotification(dispatch, { type: GET_USER.FAILED, payload: error });\r\n }\r\n return Promise.reject(error);\r\n }\r\n ).catch(\r\n error => {\r\n if (authService.isAuthenticated()) {\r\n //dispatchWithNotification(dispatch, { type: GET_USER.FAILED, payload: error });\r\n }\r\n else {\r\n // silent\r\n log.debug(\"flush user redux\");\r\n dispatch({ type: (error.errType === \"network error\" || error.errType === \"fetch error\") ? GET_USER.ENDED : GET_USER.FAILED, payload: error });\r\n }\r\n return Promise.reject(error);\r\n }\r\n );\r\n };\r\n}\r\n\r\nexport function saveProfile(values) {\r\n return (dispatch, getState, { webApi }) => {\r\n dispatchWithNotification(dispatch, { type: UPD_PROFILE.STARTED, payload: { message: \"Profile Update started\" } });\r\n\r\n const { newLoginName, newUserName, newUserEmail } = values;\r\n\r\n profileService.updateProfile(newLoginName, newUserName, newUserEmail).then(\r\n (ret => {\r\n dispatchWithNotification(dispatch, { type: UPD_PROFILE.SUCCEEDED, payload: { message: \"Profile Update succeeded\" } });\r\n })\r\n ,\r\n (err => {\r\n dispatchWithNotification(dispatch, { type: UPD_PROFILE.FAILED, payload: { error: err, message: err.errMsg } });\r\n })\r\n );\r\n };\r\n}\r\n\r\nexport function changePassword(values) {\r\n return (dispatch, getState, { webApi }) => {\r\n dispatchWithNotification(dispatch, { type: CHANGE_PASSWORD.STARTED, payload: { message: \"Password changed started\" } });\r\n\r\n const { j, p, newUsrPassword, confirmPwd } = values;\r\n\r\n profileService.updUsrPwd(j, p, newUsrPassword, confirmPwd).then(\r\n (ret => {\r\n dispatchWithNotification(dispatch, { type: CHANGE_PASSWORD.SUCCEEDED, payload: { message: \"Password changed succeeded\" } });\r\n })\r\n ,\r\n (err => {\r\n dispatchWithNotification(dispatch, { type: CHANGE_PASSWORD.FAILED, payload: { error: err, message: err.errMsg } });\r\n })\r\n );\r\n };\r\n}\r\n\r\nexport function resetPasswordEmail(values) {\r\n return (dispatch, getState, { webApi }) => {\r\n dispatchWithNotification(dispatch, { type: RESET_PASSWORD_EMAIL.STARTED, payload: { message: \"Password reset Email sent Successfully\" } });\r\n\r\n const { resetLoginName, resetUsrEmail } = values;\r\n\r\n profileService.resetPwd(resetLoginName, resetUsrEmail).then(\r\n (ret => {\r\n dispatchWithNotification(dispatch, { type: RESET_PASSWORD_EMAIL.SUCCEEDED, payload: { message: \"Password reset Email has been sent Successfully\" } });\r\n })\r\n ,\r\n (err => {\r\n dispatchWithNotification(dispatch, { type: RESET_PASSWORD_EMAIL.FAILED, payload: { error: err, message: err.errMsg } });\r\n })\r\n );\r\n };\r\n}\r\n\r\nexport function switchCurrent(companyId, projectId, culture) {\r\n return (dispatch, getState, { webApi }) => {\r\n dispatchWithNotification(dispatch, { type: SWITCH_CURRENT.STARTED, payload: { message: \"Profile Update started\" } });\r\n\r\n systemService.switchCurrent(companyId, projectId, (culture || { key: \"1\" }).key).then(\r\n (ret => {\r\n switchLanguage((culture || { lang: \"en\" }).lang, (culture || { CultureId: \"1\" }).CultureId);\r\n dispatchWithNotification(dispatch, { type: SWITCH_CURRENT.SUCCEEDED, payload: { ...ret.data, lang: (culture || { lang: \"en\" }).lang } });\r\n })\r\n ,\r\n (err => {\r\n dispatchWithNotification(dispatch, { type: SWITCH_CURRENT.FAILED, payload: { error: err, message: err.errMsg } });\r\n })\r\n );\r\n };\r\n}\r\n\r\nexport function requestResetPwdEmail(email, reCaptchaRequest, refCode) {\r\n return (dispatch, getState, { webApi }) => {\r\n dispatch({ type: RESET_PASSWORD_EMAIL.STARTED, payload: {} })\r\n authService.resetPwdEmail(email, reCaptchaRequest, refCode)\r\n .then(\r\n data => {\r\n dispatch({ type: RESET_PASSWORD_EMAIL.SUCCEEDED, payload: { ...data.data } })\r\n },\r\n error => {\r\n dispatchWithNotification(dispatch, { type: RESET_PASSWORD_EMAIL.FAILED, payload: error });\r\n }\r\n )\r\n //dispatch({ type: RESET_PASSWORD_EMAIL.SUCCEEDED, payload: { nounce: 'abc', ticketRight: '46346' } })\r\n }\r\n}\r\n\r\nexport function resetPassword(email, password, nounce, ticketLeft, ticketRight) {\r\n return (dispatch, getState, { webApi }) => {\r\n dispatch({ type: CHANGE_PASSWORD.STARTED, payload: {} })\r\n return authService.resetPassword(email, password, nounce, ticketLeft, ticketRight)\r\n .then(\r\n data => {\r\n dispatch({ type: CHANGE_PASSWORD.SUCCEEDED, payload: data.data });\r\n return data;\r\n },\r\n error => {\r\n dispatchWithNotification(dispatch, { type: CHANGE_PASSWORD.FAILED, payload: error });\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function getWebAuthnRegistrationRequest(hostingDomainUrl) {\r\n return (dispatch, getState, { webApi }) => {\r\n return authService.getWebAuthnRegistrationRequest(hostingDomainUrl)\r\n .then(\r\n data => {\r\n return data;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function getWebAuthnAssertionRequest(hostingDomainUrl, loginName) {\r\n return (dispatch, getState, { webApi }) => {\r\n return authService.getWebAuthnAssertionRequest(hostingDomainUrl, loginName)\r\n .then(\r\n data => {\r\n return data;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function webauthnRegistration(requestJSON, resultJSON) {\r\n return (dispatch, getState, { webApi }) => {\r\n return authService.webauthnRegistration(requestJSON, resultJSON)\r\n .then(\r\n data => {\r\n return data;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function webauthnAssertion(requestJSON, resultJSON) {\r\n return (dispatch, getState, { webApi }) => {\r\n return authService.webauthnAssertion(requestJSON, resultJSON).then(\r\n (data) => {\r\n return handleLoginResult(dispatch, data, false);\r\n },\r\n (error) => {\r\n console.log(error);\r\n dispatchWithNotification(dispatch, { type: LOGIN.FAILED, payload: { ...error, errMsg: error.errMsg === \"bot challenge\" ? \"login failed\" : error.errMsg } });\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function getWeb3SigningRequest(hostingDomainUrl) {\r\n return (dispatch, getState, { webApi }) => {\r\n return authService.getWeb3SigningRequest(hostingDomainUrl)\r\n .then(\r\n data => {\r\n return data;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function web3Registration(requestJSON, resultJSON) {\r\n return (dispatch, getState, { webApi }) => {\r\n return authService.web3Registration(requestJSON, resultJSON)\r\n .then(\r\n data => {\r\n return data;\r\n },\r\n error => {\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport function web3Assertion(requestJSON, resultJSON) {\r\n return (dispatch, getState, { webApi }) => {\r\n return authService.web3Assertion(requestJSON, resultJSON).then(\r\n (data) => {\r\n return handleLoginResult(dispatch, data, false);\r\n },\r\n (error) => {\r\n console.log(error);\r\n dispatchWithNotification(dispatch, { type: LOGIN.FAILED, payload: { ...error, errMsg: error.errMsg === \"bot challenge\" ? \"login failed\" : error.errMsg } });\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n}","import { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\nimport log from '../helpers/logger';\r\n\r\nexport function getCompanyList(systemId) {\r\n return fetchData(baseUrl + '/SystemWs.asmx/GetCompanyList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n SystemId: systemId || ''\r\n }),\r\n },\r\n ...(getAccessControlInfo())\r\n }\r\n )\r\n}\r\nexport function getProjectList(systemId, companyId) {\r\n return fetchData(baseUrl + '/SystemWs.asmx/GetProjectList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n SystemId: systemId || 0,\r\n CompanyId: companyId || 0\r\n }),\r\n },\r\n ...(getAccessControlInfo())\r\n }\r\n )\r\n}\r\nexport function getTimeZoneList() {\r\n return fetchData(baseUrl + '/SystemWs.asmx/GetTimeZoneList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo())\r\n }\r\n )\r\n}\r\n\r\nexport function getCultureList(CultureId, lang){\r\n return fetchData(baseUrl+'/SystemWs.asmx/GetCultureList'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n CultureId:CultureId,\r\n langCode:lang || \"\",\r\n }),\r\n },\r\n ...(getAccessControlInfo())\r\n }\r\n )\r\n}\r\n\r\nexport function switchCurrent(companyId, projectId, cultureId) {\r\n console.log(JSON.stringify({\r\n CompanyId: companyId,\r\n ProjectId: projectId,\r\n CultureId: +cultureId,\r\n }));\r\n return fetchData(baseUrl + '/SystemWs.asmx/SwitchCurrent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n CompanyId: companyId,\r\n ProjectId: projectId,\r\n CultureId: +cultureId,\r\n }),\r\n },\r\n ...(getAccessControlInfo())\r\n }\r\n )\r\n}\r\n\r\nexport function getUrl(url, options={}) {\r\n const requestOptions = {\r\n method: 'GET',\r\n ...options,\r\n }; \r\n return fetch(url, requestOptions)\r\n .then(response => {\r\n let ret = response.text();\r\n return ret.then(content => {\r\n return {\r\n headers: response.headers,\r\n content: content,\r\n status: response.status,\r\n ok: response.ok,\r\n redirected: response.redirected,\r\n url: response.url,\r\n }\r\n }\r\n )\r\n })\r\n .catch(error => {\r\n log.debug(error);\r\n return Promise.reject(error);\r\n })\r\n\r\n}","import {fetchData,getAccessControlInfo, getAccessScope, baseUrl} from './webAPIBase';\r\nimport log from '../helpers/logger';\r\n\r\nexport function updUsrPwd(j, p, newPwd, confirmPwd){\r\n return fetchData(baseUrl+'/ProfileWs.asmx/UpdUsrPwd'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n j: j,\r\n p: p,\r\n NewUsrPassword: newPwd,\r\n ConfirmPwd: confirmPwd,\r\n }),\r\n },\r\n ...(getAccessControlInfo())\r\n }\r\n )\r\n}\r\n\r\nexport function getProfileInfo(newPwd, confirmPwd){\r\n return fetchData(baseUrl+'/ProfileWs.asmx/GetProfileInfo'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo())\r\n }\r\n )\r\n}\r\n\r\nexport function updateProfile(newLoginName, newUsrName, newUsrEmail){\r\n return fetchData(baseUrl+'/ProfileWs.asmx/UpdateProfile'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n NewLoginName : newLoginName, \r\n NewUsrName: newUsrName,\r\n NewUsrEmail: newUsrEmail\r\n }),\r\n },\r\n ...(getAccessControlInfo())\r\n }\r\n )\r\n}\r\n\r\nexport function updateNotificationChannel(deviceId, fingerprint, appSig, notificationType){\r\n return fetchData(baseUrl+'/ProfileWs.asmx/UpdateNotificationChannel'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n DeviceId : deviceId, \r\n Fingerprint : fingerprint, \r\n AppSig : appSig, \r\n NotificationType: notificationType,\r\n }),\r\n },\r\n ...(getAccessControlInfo())\r\n }\r\n )\r\n}\r\n\r\nexport function resetPwd(resetLoginName, resetUsrEmail){\r\n return fetchData(baseUrl+'/ProfileWs.asmx/ResetPwd'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n ResetLoginName: resetLoginName,\r\n ResetUsrEmail: resetUsrEmail,\r\n }),\r\n },\r\n ...(getAccessControlInfo())\r\n }\r\n )\r\n}","import { AddressZero } from \"@ethersproject/constants\";\r\nimport { isAddress, getAddress } from \"@ethersproject/address\";\r\n\r\nexport type CustomNetworkConfig = {\r\n rpcUrl?: string;\r\n wsUrl?: string; \r\n apiBasename?: string;\r\n}\r\nexport type LiquityFrontendConfig = {\r\n frontendTag: string;\r\n infuraApiKey?: string;\r\n custUrlBase?: string;\r\n testnetOnly?: boolean;\r\n network?: Record;\r\n devWS?: string;\r\n devRPC?: string;\r\n chainId?: number;\r\n account?: string;\r\n storeRefreshInterval?: number;\r\n};\r\n\r\nconst defaultConfig: LiquityFrontendConfig = {\r\n frontendTag: AddressZero,\r\n// storeRefreshInterval: 61\r\n storeRefreshInterval: 0\r\n};\r\n\r\nfunction hasKey(o: object, k: K): o is Record {\r\n return k in o;\r\n}\r\n\r\nconst parseConfig = (json: unknown): LiquityFrontendConfig => {\r\n const config = { ...defaultConfig };\r\n\r\n if (typeof json === \"object\" && json !== null) {\r\n if (hasKey(json, \"frontendTag\") && json.frontendTag !== \"\") {\r\n const { frontendTag } = json;\r\n\r\n if (typeof frontendTag === \"string\" && isAddress(frontendTag)) {\r\n config.frontendTag = getAddress(frontendTag);\r\n } else {\r\n console.error(\"Malformed frontendTag:\");\r\n console.log(frontendTag);\r\n }\r\n }\r\n\r\n if (hasKey(json, \"infuraApiKey\") && json.infuraApiKey !== \"\") {\r\n const { infuraApiKey } = json;\r\n\r\n if (typeof infuraApiKey === \"string\") {\r\n config.infuraApiKey = infuraApiKey;\r\n } else {\r\n console.error(\"Malformed infuraApiKey:\");\r\n console.log(infuraApiKey);\r\n }\r\n }\r\n\r\n if (hasKey(json, \"testnetOnly\")) {\r\n const { testnetOnly } = json;\r\n\r\n if (typeof testnetOnly === \"boolean\") {\r\n config.testnetOnly = testnetOnly;\r\n } else {\r\n console.error(\"Malformed testnetOnly:\");\r\n console.log(testnetOnly);\r\n }\r\n }\r\n if (hasKey(json, \"devWS\")) {\r\n const { devWS } = json;\r\n\r\n if (typeof devWS === \"string\") {\r\n config.devWS = devWS;\r\n } else {\r\n console.error(\"Malformed devWS:\");\r\n console.log(devWS);\r\n }\r\n }\r\n if (hasKey(json, \"devRPC\")) {\r\n const { devRPC } = json;\r\n\r\n if (typeof devRPC === \"string\") {\r\n config.devRPC = devRPC;\r\n } else {\r\n console.error(\"Malformed devRPC:\");\r\n console.log(devRPC);\r\n }\r\n }\r\n if (hasKey(json, \"chainId\")) {\r\n const { chainId } = json;\r\n\r\n if (typeof chainId === \"number\") {\r\n config.chainId = chainId;\r\n } else {\r\n console.error(\"Malformed chainId:\");\r\n console.log(chainId);\r\n }\r\n }\r\n if (hasKey(json, \"account\")) {\r\n const { account } = json;\r\n\r\n if (typeof account === \"string\") {\r\n config.account = account;\r\n } else {\r\n console.error(\"Malformed account:\");\r\n console.log(account);\r\n }\r\n }\r\n if (hasKey(json, \"customUrlBase\")) {\r\n const { customUrlBase } = json;\r\n\r\n if (typeof customUrlBase === \"string\") {\r\n config.custUrlBase = customUrlBase;\r\n } else {\r\n console.error(\"Malformed customUrlBase:\");\r\n console.log(customUrlBase);\r\n }\r\n }\r\n if (hasKey(json, \"storeRefreshInterval\")) {\r\n const { storeRefreshInterval } = json;\r\n\r\n if (typeof storeRefreshInterval === \"number\") {\r\n config.storeRefreshInterval = storeRefreshInterval;\r\n } else {\r\n console.error(\"Malformed storeRefreshInterval:\");\r\n console.log(storeRefreshInterval);\r\n }\r\n }\r\n if (hasKey(json, \"network\")) {\r\n const { network } = json;\r\n\r\n if (typeof network === \"object\") {\r\n config.network = network as Record;\r\n for (let k in config.network) {\r\n if (!config.network[k].rpcUrl && !config.network[k].wsUrl)\r\n console.error(`Malformed network: missing one of wsUrl/rpcUrl for $k`);\r\n console.log(config.network[k]);\r\n }\r\n } else {\r\n console.error(\"Malformed network:\");\r\n console.log(network);\r\n }\r\n }\r\n } else {\r\n console.error(\"Malformed config:\");\r\n console.log(json);\r\n }\r\n\r\n return config;\r\n};\r\n\r\nlet configPromise: Promise | undefined = undefined;\r\n\r\nconst fetchConfig = async () => {\r\n try {\r\n const response = await fetch(\"config.json\");\r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch config.json (status ${response.status})`);\r\n }\r\n\r\n return parseConfig(await response.json());\r\n } catch (err) {\r\n console.error(err);\r\n return { ...defaultConfig };\r\n }\r\n};\r\n\r\nexport const getConfig = (): Promise => {\r\n if (!configPromise) {\r\n configPromise = fetchConfig();\r\n }\r\n\r\n return configPromise;\r\n};\r\n","import React, { createContext, useContext, useEffect, useMemo, useState } from \"react\";\r\nimport { Provider } from \"@ethersproject/abstract-provider\";\r\nimport { getNetwork } from \"@ethersproject/networks\";\r\nimport { Web3Provider } from \"@ethersproject/providers\";\r\nimport { useWeb3React } from \"@web3-react/core\";\r\nimport { logout, login } from '../redux/Auth';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { refreshConfig as apiBaseRefresh } from '../services/webAPIBase';\r\nimport { authService } from '../services/authService';\r\nimport { isBatchedProvider, isWebSocketAugmentedProvider } from \"@liquity/providers\";\r\nimport {\r\n BlockPolledLiquityStore,\r\n EthersLiquity,\r\n EthersLiquityWithStore,\r\n _connectByChainId\r\n} from \"@liquity/lib-ethers\";\r\n\r\nimport { LiquityFrontendConfig, getConfig } from \"../config\";\r\n\r\ntype LiquityContextValue = {\r\n config: LiquityFrontendConfig;\r\n account: string;\r\n provider: Provider;\r\n liquity: EthersLiquityWithStore;\r\n};\r\n\r\nconst LiquityContext = createContext(undefined);\r\n\r\ntype LiquityProviderProps = {\r\n loader?: React.ReactNode;\r\n unsupportedNetworkFallback?: (chainId: number) => React.ReactNode;\r\n unsupportedMainnetFallback?: React.ReactNode;\r\n};\r\n\r\nconst wsParams = (network: string, infuraApiKey: string): [string, string] => [\r\n `wss://${network === \"homestead\" ? \"mainnet\" : network}.infura.io/ws/v3/${infuraApiKey}`,\r\n network\r\n];\r\n\r\nconst supportedNetworks = [\"homestead\", \"kovan\", \"rinkeby\", \"ropsten\", \"goerli\"];\r\n\r\nlet currentChainId:number = 0;\r\n\r\nconst setCurretChainId= (chainId: number)=>{\r\n currentChainId = chainId;\r\n localStorage[\"currentChainId\"] = chainId.toString();\r\n};\r\n\r\nconst getCurrentChainId = ()=>{\r\n try {\r\n currentChainId = +localStorage[\"currentChainId\"];\r\n }\r\n catch (e) {\r\n\r\n }\r\n}\r\nexport const LiquityProvider: React.FC = ({\r\n children,\r\n loader,\r\n unsupportedNetworkFallback,\r\n unsupportedMainnetFallback\r\n}) => {\r\n const { library: provider, account, chainId } = useWeb3React();\r\n const [config, setConfig] = useState();\r\n const dispatch = useDispatch(); \r\n const connection = useMemo(() => {\r\n console.log(config, provider, account, chainId);\r\n if (config && provider && account && chainId) {\r\n try {\r\n return _connectByChainId(provider, provider.getSigner(account), chainId, {\r\n userAddress: account,\r\n frontendTag: config.frontendTag,\r\n useStore: \"blockPolled\",\r\n storeRefreshInterval: config.storeRefreshInterval??120\r\n });\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n }, [config, provider, account, chainId]);\r\n\r\n useEffect(() => {\r\n getConfig().then(setConfig);\r\n getCurrentChainId();\r\n }, []);\r\n\r\n useEffect(() => {\r\n console.log(config, connection);\r\n if (config && connection) {\r\n const { provider, chainId } = connection;\r\n\r\n if (isBatchedProvider(provider) && provider.chainId !== chainId) {\r\n provider.chainId = chainId;\r\n }\r\n let doc: any = document as any;\r\n const apiChainId = doc.Rintagi.chainId;\r\n if (config.network && config.network[chainId]) {\r\n doc.Rintagi.localDev.apiBasename = config.network[chainId].apiBasename;\r\n doc.Rintagi.localDev.appDomainUrl = config.network[chainId].apiBasename;\r\n doc.Rintagi.apiBasename = config.network[chainId].apiBasename;\r\n doc.Rintagi.appDomainUrl = config.network[chainId].apiBasename;\r\n doc.Rintagi.chainId = chainId;\r\n apiBaseRefresh();\r\n authService.refreshConfig();\r\n }\r\n if (apiChainId != chainId && apiChainId) {\r\n console.log(`logout chainId ${chainId} apiChainId ${apiChainId}`);\r\n dispatch(logout(false,false));\r\n setCurretChainId(chainId);\r\n }\r\n console.log(config, connection, isWebSocketAugmentedProvider(provider));\r\n if (isWebSocketAugmentedProvider(provider)) {\r\n const network = getNetwork(chainId);\r\n if (network.name && supportedNetworks.includes(network.name) && config.infuraApiKey) {\r\n provider.openWebSocket(...wsParams(network.name, config.infuraApiKey));\r\n } else if (config.network && config.network[chainId] && config.network[chainId].wsUrl) {\r\n provider.openWebSocket(config.network[chainId].wsUrl as string, chainId);\r\n } \r\n else if (connection._isDev && config.devWS) {\r\n provider.openWebSocket(config.devWS || `ws://${window.location.hostname}:8546`, chainId);\r\n }\r\n\r\n return () => {\r\n provider.closeWebSocket();\r\n };\r\n }\r\n }\r\n }, [config, connection, dispatch]);\r\n\r\n if (!config || !provider || !account || !chainId) {\r\n return <>{loader};\r\n }\r\n\r\n if (config.testnetOnly && chainId === 1) {\r\n return <>{unsupportedMainnetFallback};\r\n }\r\n\r\n if (!connection) {\r\n return unsupportedNetworkFallback ? <>{unsupportedNetworkFallback(chainId)} : null;\r\n }\r\n\r\n const liquity = EthersLiquity._from(connection);\r\n liquity.store.logging = true;\r\n\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport const useLiquity = () => {\r\n const liquityContext = useContext(LiquityContext);\r\n\r\n if (!liquityContext) {\r\n throw new Error(\"You must provide a LiquityContext via LiquityProvider\");\r\n }\r\n\r\n return liquityContext;\r\n};\r\n","import { ConnectorUpdate } from '@web3-react/types'\r\nimport { AbstractConnector } from '@web3-react/abstract-connector'\r\nimport invariant from 'tiny-invariant'\r\n\r\n// taken from ethers.js, compatible interface with web3 provider\r\ntype AsyncSendable = {\r\n isMetaMask?: boolean\r\n host?: string\r\n path?: string\r\n sendAsync?: (request: any, callback: (error: any, response: any) => void) => void\r\n send?: (request: any, callback: (error: any, response: any) => void) => void\r\n}\r\n\r\nexport class RequestError extends Error {\r\n constructor(message: string, public code: number, public data?: unknown) {\r\n super()\r\n this.name = this.constructor.name\r\n this.message = message\r\n }\r\n}\r\n\r\nclass MiniRpcProvider implements AsyncSendable {\r\n public readonly isMetaMask: false = false\r\n public readonly chainId: number\r\n public readonly url: string\r\n public readonly host: string\r\n public readonly path: string\r\n\r\n constructor(chainId: number, url: string) {\r\n this.chainId = chainId\r\n this.url = url\r\n const parsed = new URL(url)\r\n this.host = parsed.host\r\n this.path = parsed.pathname\r\n }\r\n\r\n public readonly sendAsync = (\r\n request: { jsonrpc: '2.0'; id: number | string | null; method: string; params?: unknown[] | object },\r\n callback: (error: any, response: any) => void\r\n ): void => {\r\n console.log('sendAsync', request.method, request.params)\r\n this.request(request.method, request.params)\r\n .then(result => callback(null, { jsonrpc: '2.0', id: request.id, result }))\r\n .catch(error => callback(error, null))\r\n }\r\n\r\n public readonly request = async (\r\n method: string | { method: string; params?: unknown[] | object },\r\n params?: unknown[] | object\r\n ): Promise => {\r\n if (typeof method !== 'string') {\r\n params = (method as any).params\r\n method = method.method\r\n }\r\n\r\n const result = fetch(this.url, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n }, \r\n body: JSON.stringify({\r\n jsonrpc: '2.0',\r\n id: 1,\r\n method,\r\n params\r\n })\r\n })\r\n .then(result => {\r\n console.log(result);\r\n return result;\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n return new Response();\r\n })\r\n const response = await result;\r\n if (!response.ok) throw new RequestError(`${response.status}: ${response.statusText}`, -32000)\r\n const body = await response.json()\r\n if ('error' in body) {\r\n throw new RequestError(body?.error?.message, body?.error?.code, body?.error?.data)\r\n } else if ('result' in body) {\r\n return body.result\r\n } else {\r\n throw new RequestError(`Received unexpected JSON-RPC response to ${method} request.`, -32000, body)\r\n }\r\n }\r\n}\r\n\r\ninterface NetworkConnectorArguments {\r\n urls: { [chainId: number]: string }\r\n defaultChainId?: number\r\n account: string\r\n}\r\n\r\nexport class NetworkConnector extends AbstractConnector {\r\n private readonly providers: { [chainId: number]: MiniRpcProvider }\r\n private currentChainId: number\r\n private account: string\r\n\r\n constructor({ urls, defaultChainId, account }: NetworkConnectorArguments) {\r\n invariant(defaultChainId || Object.keys(urls).length === 1, 'defaultChainId is a required argument with >1 url')\r\n super({ supportedChainIds: Object.keys(urls).map((k): number => Number(k)) })\r\n this.account = account\r\n this.currentChainId = defaultChainId || Number(Object.keys(urls)[0])\r\n this.providers = Object.keys(urls).reduce<{ [chainId: number]: MiniRpcProvider }>((accumulator, chainId) => {\r\n accumulator[Number(chainId)] = new MiniRpcProvider(Number(chainId), urls[Number(chainId)])\r\n return accumulator\r\n }, {})\r\n }\r\n\r\n public async isAuthorized(): Promise {\r\n return true;\r\n }\r\n public async activate(): Promise {\r\n return { provider: this.providers[this.currentChainId], chainId: this.currentChainId, account: this.account }\r\n }\r\n\r\n public async getProvider(): Promise {\r\n return this.providers[this.currentChainId]\r\n }\r\n\r\n public async getChainId(): Promise {\r\n return this.currentChainId\r\n }\r\n\r\n public async getAccount(): Promise {\r\n return this.account\r\n }\r\n\r\n public deactivate() {\r\n return\r\n }\r\n\r\n public changeChainId(chainId: number) {\r\n invariant(Object.keys(this.providers).includes(chainId.toString()), `No url found for chainId ${chainId}`)\r\n this.currentChainId = chainId\r\n this.emitUpdate({ provider: this.providers[this.currentChainId], chainId })\r\n }\r\n}","import { InjectedConnector } from \"@web3-react/injected-connector\";\r\nimport { NetworkConnector } from \"./networkConnector\";\r\nimport { WalletConnectConnector } from \"@web3-react/walletconnect-connector\";\r\nimport { getConfig } from \"../config\";\r\n\r\nexport const injectedConnector = new InjectedConnector({});\r\n\r\nlet networkConnector: NetworkConnector| undefined = undefined;\r\n\r\nlet walletConnectConnector: WalletConnectConnector | undefined = undefined;\r\n\r\nexport const getNetworkConnector = async() => {\r\n if (!networkConnector) {\r\n const config = await getConfig();\r\n console.log(config);\r\n let urls: Record = {};\r\n for (let k in config.network) {\r\n const chainId:number = +k;\r\n const rpcUrl = config.network[chainId].rpcUrl as string;\r\n if (rpcUrl)\r\n urls[chainId] = rpcUrl;\r\n }\r\n if (!urls[88]) {\r\n urls[88] = config.devRPC ?? 'http://1.1.1.1:8545';\r\n }\r\n networkConnector = new NetworkConnector({\r\n urls: urls\r\n // {\r\n // 1:'http://1.1.1.1:8545',\r\n // 88: config.devRPC ?? 'http://1.1.1.1:8545'\r\n // } \r\n , account: config.account ?? '0x1234567890123456789012345678901234567890'\r\n , defaultChainId: config.chainId ?? 88}); \r\n }\r\n return networkConnector;\r\n}\r\n\r\nexport const getWalletConnectConnector = async() => {\r\n if (!walletConnectConnector) {\r\n const config = await getConfig();\r\n console.log(config);\r\n walletConnectConnector = new WalletConnectConnector({\r\n rpc: config.devRPC ?? 'http://1.1.1.2:8545'\r\n });\r\n }\r\n return walletConnectConnector;\r\n}","import { useState, useEffect } from \"react\";\r\nimport { useWeb3React } from \"@web3-react/core\";\r\n\r\nimport { injectedConnector, getNetworkConnector, getWalletConnectConnector } from \"../connectors/injectedConnector\";\r\nimport { faHourglassEnd } from \"@fortawesome/free-solid-svg-icons\";\r\n\r\n/**\r\n * React hook that tries to activate the InjectedConnector if the app's already authorized in the\r\n * browser's wallet (in the case of dApp-enabled browsers) or its wallet extension (e.g. MetaMask).\r\n *\r\n * Example: user has a browser with the MetaMask extension. MetaMask injects an Ethereum provider\r\n * into the window object. We check via InjectedConnector if our app is already authorized to use\r\n * the wallet through this provider, and in that case we try to activate the connector.\r\n *\r\n * @returns true when finished trying to activate the InjectedConnector, false otherwise\r\n */\r\n\r\nexport function useAuthorizedConnection(force:boolean=false): boolean {\r\n let { activate, active, deactivate, connector } = useWeb3React();\r\n const [tried, setTried] = useState(false);\r\n\r\n useEffect(() => {\r\n const tryToActivateIfAuthorized = async () => {\r\n const networkConnector = await getNetworkConnector();\r\n let _active = active;\r\n console.log(force, active, connector, connector === networkConnector);\r\n if (force && connector === networkConnector && active) {\r\n console.log('deactivating network connector');\r\n deactivate();\r\n _active = false;\r\n }\r\n try {\r\n if (await injectedConnector.isAuthorized()) {\r\n console.log('try to activate injected', active);\r\n if (!_active)\r\n await activate(injectedConnector, undefined, true);\r\n } \r\n else if (!force && await networkConnector.isAuthorized()) {\r\n if (!_active) {\r\n const provider = await networkConnector.getProvider();\r\n const chainId = await provider.request('eth_chainId');\r\n activate(networkConnector, undefined, true)\r\n .then(() => {\r\n console.log('post activation of network connector', provider.url, chainId);\r\n })\r\n .catch(error => {\r\n setTried(true);\r\n });\r\n }\r\n } \r\n else {\r\n if (force) setTried(true);\r\n console.log('not authorizied', force);\r\n throw new Error(\"Unauthorized\");\r\n }\r\n } catch {\r\n setTried(true);\r\n }\r\n };\r\n if (!tried) tryToActivateIfAuthorized();\r\n }, [activate,deactivate,force, tried, connector, active]);\r\n\r\n useEffect(() => {\r\n if (active) {\r\n setTried(true);\r\n }\r\n }, [active]);\r\n\r\n return tried;\r\n}\r\n","import React from \"react\";\r\nimport { library, IconName, IconProp } from \"@fortawesome/fontawesome-svg-core\";\r\nimport {\r\n faCircleNotch,\r\n faCheckCircle,\r\n faExclamationTriangle,\r\n faInfoCircle,\r\n faTimes,\r\n faTrash,\r\n faChartLine,\r\n faRedo,\r\n faHistory,\r\n faChevronLeft,\r\n faChevronRight,\r\n faUserCircle,\r\n faWallet,\r\n faExternalLinkAlt,\r\n faClipboardCheck,\r\n faCog,\r\n faCheck,\r\n faPlug,\r\n faExclamationCircle,\r\n faAngleUp,\r\n faAngleDoubleUp,\r\n faAngleDown,\r\n faAngleDoubleDown,\r\n faPen,\r\n faHandPaper,\r\n faHeartbeat,\r\n faBars\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\nimport { faClipboard, faQuestionCircle } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { FontAwesomeIcon, FontAwesomeIconProps } from \"@fortawesome/react-fontawesome\";\r\n\r\nlibrary.add(\r\n faCircleNotch,\r\n faCheck,\r\n faCheckCircle,\r\n faExclamationTriangle,\r\n faInfoCircle,\r\n faTimes,\r\n faTrash,\r\n faChartLine,\r\n faRedo,\r\n faHistory,\r\n faChevronLeft,\r\n faChevronRight,\r\n faClipboard,\r\n faClipboardCheck,\r\n faUserCircle,\r\n faWallet,\r\n faExternalLinkAlt,\r\n faCog,\r\n faPlug,\r\n faExclamationCircle,\r\n faAngleUp,\r\n faAngleDoubleUp,\r\n faAngleDown,\r\n faAngleDoubleDown,\r\n faPen,\r\n faHandPaper,\r\n faHeartbeat,\r\n faBars,\r\n faQuestionCircle\r\n);\r\n\r\nconst getIcon = (name: IconName): IconProp => {\r\n switch (name) {\r\n case \"clipboard\":\r\n return [\"far\", \"clipboard\"];\r\n case \"question-circle\":\r\n return [\"far\", \"question-circle\"];\r\n default:\r\n return name;\r\n }\r\n};\r\n\r\nexport type IconProps = Pick & {\r\n name: IconName;\r\n};\r\n\r\nexport const Icon: React.FC = ({ name, style, ...rest }) => (\r\n \r\n);\r\n","import React from \"react\";\r\nimport { Heading, Flex, Card, Button, Box } from \"theme-ui\";\r\n\r\nimport { Icon } from \"./Icon\";\r\n\r\ntype DialogIntent = \"success\" | \"warning\" | \"danger\" | \"info\";\r\n\r\ntype DialogProps = {\r\n intent?: DialogIntent;\r\n title: string;\r\n icon?: React.ReactNode;\r\n cancelLabel?: string;\r\n onCancel: () => void;\r\n};\r\n\r\nconst iconFromIntent = (intent: DialogIntent | undefined) => {\r\n switch (intent) {\r\n case \"success\":\r\n return ;\r\n case \"warning\":\r\n return ;\r\n case \"danger\":\r\n return ;\r\n case \"info\":\r\n return ;\r\n }\r\n return null;\r\n};\r\n\r\nexport const Dialog: React.FC = ({\r\n intent,\r\n title,\r\n icon,\r\n cancelLabel,\r\n onCancel,\r\n children\r\n}) => (\r\n \r\n {intent ? : null}\r\n \r\n {icon || iconFromIntent(intent)}\r\n \r\n {title}\r\n \r\n \r\n \r\n {children}\r\n \r\n);\r\n","import React from \"react\";\r\nimport { Box, Button, Flex } from \"theme-ui\";\r\n\r\nimport { Dialog } from \"./Dialog\";\r\n\r\ntype RetryDialogProps = {\r\n title: string;\r\n cancelLabel?: string;\r\n retryLabel?: string;\r\n onCancel: () => void;\r\n onRetry: () => void;\r\n};\r\n\r\nexport const RetryDialog: React.FC = ({\r\n title,\r\n cancelLabel,\r\n onCancel,\r\n retryLabel,\r\n onRetry,\r\n children\r\n}) => (\r\n \r\n {children}\r\n \r\n \r\n {cancelLabel || \"Cancel\"}\r\n \r\n \r\n \r\n \r\n);\r\n","import React from \"react\";\r\nimport { Box, Flex, Spinner } from \"theme-ui\";\r\n\r\nimport { Dialog } from \"./Dialog\";\r\n\r\ntype WaitingDialogProps = {\r\n title: string;\r\n icon?: React.ReactNode;\r\n waitReason: React.ReactNode;\r\n cancelLabel?: string;\r\n onCancel: () => void;\r\n};\r\n\r\nexport const WaitingDialog: React.FC = ({\r\n title,\r\n icon,\r\n waitReason,\r\n cancelLabel,\r\n onCancel,\r\n children\r\n}) => (\r\n \r\n {children}\r\n \r\n \r\n \r\n \r\n {waitReason}\r\n \r\n \r\n \r\n \r\n);\r\n","import React from \"react\";\r\nimport { Text, Box } from \"theme-ui\";\r\n\r\nimport { WaitingDialog } from \"./WaitingDialog\";\r\n\r\ntype ConnectionConfirmationDialogProps = {\r\n title: string;\r\n icon?: React.ReactNode;\r\n onCancel: () => void;\r\n};\r\n\r\nexport const ConnectionConfirmationDialog: React.FC = ({\r\n title,\r\n icon,\r\n onCancel,\r\n children\r\n}) => (\r\n \r\n Waiting for connection confirmation...\r\n This won’t cost you any Ether\r\n \r\n }\r\n cancelLabel=\"Cancel connection\"\r\n onCancel={onCancel}\r\n >\r\n {children}\r\n \r\n);\r\n","import React from \"react\";\r\n\r\nexport const MetaMaskIcon: React.FC = () => (\r\n \r\n MetaMask extension icon\r\n \r\n \r\n \r\n \r\n \r\n);\r\n","import React from \"react\";\r\nimport { Container } from \"theme-ui\";\r\n\r\nexport const Modal: React.FC = ({ children }) => (\r\n \r\n {children}\r\n \r\n);\r\n","import React, { useEffect, useReducer, useState } from \"react\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport { useHistory, Router } from \"react-router\";\r\nimport { useWeb3React } from \"@web3-react/core\";\r\nimport { AbstractConnector } from \"@web3-react/abstract-connector\";\r\nimport { Button, Text, Flex, Link, Box } from \"theme-ui\";\r\nimport { Card, CardBody, Row, Col } from 'reactstrap';\r\n\r\nimport { injectedConnector, getNetworkConnector, getWalletConnectConnector } from \"../connectors/injectedConnector\";\r\nimport { useAuthorizedConnection } from \"../hooks/useAuthorizedConnection\";\r\n\r\nimport { RetryDialog } from \"./RetryDialog\";\r\nimport { ConnectionConfirmationDialog } from \"./ConnectionConfirmationDialog\";\r\nimport { MetaMaskIcon } from \"./MetaMaskIcon\";\r\nimport { Icon } from \"./Icon\";\r\nimport { Modal } from \"./Modal\";\r\n\r\ninterface MaybeHasMetaMask {\r\n ethereum?: {\r\n isMetaMask?: boolean;\r\n };\r\n}\r\n\r\ntype ConnectionState =\r\n | { type: \"inactive\" }\r\n | {\r\n type: \"activating\" | \"active\" | \"rejectedByUser\" | \"alreadyPending\" | \"failed\";\r\n connector: AbstractConnector;\r\n };\r\n\r\ntype ConnectionAction =\r\n | { type: \"startActivating\"; connector: AbstractConnector }\r\n | { type: \"fail\"; error: Error }\r\n | { type: \"finishActivating\" | \"retry\" | \"cancel\" | \"deactivate\" };\r\n\r\nconst connectionReducer: React.Reducer = (state, action) => {\r\n switch (action.type) {\r\n case \"startActivating\":\r\n return {\r\n type: \"activating\",\r\n connector: action.connector\r\n };\r\n case \"finishActivating\":\r\n return {\r\n type: \"active\",\r\n connector: state.type === \"inactive\" ? injectedConnector : state.connector\r\n };\r\n case \"fail\":\r\n if (state.type !== \"inactive\") {\r\n return {\r\n type: action.error.message.match(/user rejected/i)\r\n ? \"rejectedByUser\"\r\n : action.error.message.match(/already pending/i)\r\n ? \"alreadyPending\"\r\n : \"failed\",\r\n connector: state.connector\r\n };\r\n }\r\n break;\r\n case \"retry\":\r\n if (state.type !== \"inactive\") {\r\n return {\r\n type: \"activating\",\r\n connector: state.connector\r\n };\r\n }\r\n break;\r\n case \"cancel\":\r\n return {\r\n type: \"inactive\"\r\n };\r\n case \"deactivate\":\r\n return {\r\n type: \"inactive\"\r\n };\r\n }\r\n\r\n console.warn(\"Ignoring connectionReducer action:\");\r\n console.log(action);\r\n console.log(\" in state:\");\r\n console.log(state);\r\n\r\n return state;\r\n};\r\n\r\nconst detectMetaMask = () => (window as MaybeHasMetaMask).ethereum?.isMetaMask ?? false;\r\n\r\ntype WalletConnectorProps = {\r\n loader?: React.ReactNode;\r\n\r\n};\r\nlet history: any = null;\r\n\r\nexport function setHistory(h: any) {\r\n console.log('set history', h);\r\n if (h) history = h;\r\n}\r\nexport const WalletConnector: React.FC = ({ children, loader }) => {\r\n const { activate, deactivate, active, error } = useWeb3React();\r\n //const history = useHistory();\r\n const triedAuthorizedConnection = useAuthorizedConnection();\r\n const [connectionState, dispatch] = useReducer(connectionReducer, { type: \"inactive\" });\r\n const isMetaMask = detectMetaMask();\r\n const [connectLater, setConnectLater] = useState(false);\r\n console.log(history, connectLater, triedAuthorizedConnection, connectionState.type);\r\n useEffect(() => {\r\n if (error) {\r\n dispatch({ type: \"fail\", error });\r\n deactivate();\r\n }\r\n }, [error, deactivate]);\r\n\r\n useEffect(() => {\r\n if (active) {\r\n console.log('activated');\r\n dispatch({ type: \"finishActivating\" });\r\n } else {\r\n dispatch({ type: \"deactivate\" });\r\n }\r\n }, [active]);\r\n\r\n if (!triedAuthorizedConnection && !connectLater) {\r\n console.log('walletconnector loader');\r\n return <>{loader};\r\n }\r\n\r\n if (connectionState.type === \"active\" || connectLater) {\r\n return <>{children};\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n {/* \"FintruX\" { this.props.history.push('/start') }} /> */}\r\n

Connect Your Wallet

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

To get started, connect to the wallet you want to use on staked.finance.

\r\n
\r\n
\r\n
\r\n\r\n \r\n {\r\n dispatch({ type: \"startActivating\", connector: injectedConnector });\r\n activate(injectedConnector);\r\n }}\r\n >\r\n {isMetaMask ? (\r\n <>\r\n \r\n Connect to MetaMask\r\n\r\n \r\n ) : (\r\n <>\r\n \r\n Connect wallet\r\n \r\n )}\r\n \r\n {/* {\r\n const networkConnector = await getNetworkConnector();\r\n dispatch({ type: \"startActivating\", connector: networkConnector });\r\n activate(networkConnector);\r\n //must be default page that doesn't need wallet\r\n //and must be #/route as we are outside the router container\r\n history.push('#/kyc-status');\r\n //window.location.href = '/';\r\n //dispatch({ type: \"finishActivating\" });\r\n //setConnectLater(true);\r\n }}\r\n >\r\n Connect Later\r\n */}\r\n \r\n
\r\n
\r\n
\r\n\r\n {connectionState.type === \"failed\" && (\r\n \r\n dispatch({ type: \"cancel\" })}\r\n onRetry={() => {\r\n dispatch({ type: \"retry\" });\r\n activate(connectionState.connector);\r\n }}\r\n >\r\n \r\n You might need to install MetaMask or use a different browser.\r\n \r\n \r\n Learn more \r\n \r\n \r\n \r\n )}\r\n\r\n {connectionState.type === \"activating\" && (\r\n \r\n : }\r\n onCancel={() => dispatch({ type: \"cancel\" })}\r\n >\r\n \r\n Confirm the request that's just appeared.\r\n {isMetaMask ? (\r\n <> If you can't see a request, open your MetaMask extension via your browser.\r\n ) : (\r\n <> If you can't see a request, you might have to open your wallet.\r\n )}\r\n \r\n \r\n \r\n )}\r\n\r\n {connectionState.type === \"rejectedByUser\" && (\r\n \r\n dispatch({ type: \"cancel\" })}\r\n onRetry={() => {\r\n dispatch({ type: \"retry\" });\r\n activate(connectionState.connector);\r\n }}\r\n >\r\n To use staked.finance, you need to connect your Ethereum account.\r\n \r\n \r\n )}\r\n\r\n {connectionState.type === \"alreadyPending\" && (\r\n \r\n dispatch({ type: \"cancel\" })}\r\n onRetry={() => {\r\n dispatch({ type: \"retry\" });\r\n activate(connectionState.connector);\r\n }}\r\n >\r\n Please check your wallet and accept the connection request before retrying.\r\n \r\n \r\n )}\r\n \r\n );\r\n};\r\n","import React, { useState, useContext, useEffect, useCallback } from \"react\";\r\nimport { Flex, Text, Box } from \"theme-ui\";\r\nimport { Provider, TransactionResponse, TransactionReceipt } from \"@ethersproject/abstract-provider\";\r\nimport { hexDataSlice, hexDataLength } from \"@ethersproject/bytes\";\r\nimport { defaultAbiCoder } from \"@ethersproject/abi\";\r\n\r\nimport { buildStyles, CircularProgressbarWithChildren } from \"react-circular-progressbar\";\r\nimport \"react-circular-progressbar/dist/styles.css\";\r\n\r\nimport { EthersTransactionOverrides, EthersTransactionCancelledError, PopulatedEthersLiquityTransaction } from \"@liquity/lib-ethers\";\r\nimport { SentLiquityTransaction, LiquityReceipt, Decimal } from \"@liquity/lib-base\";\r\n\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\n\r\nimport { Icon } from \"./Icon\";\r\nimport { Tooltip, TooltipProps, Hoverable } from \"./Tooltip\";\r\n\r\nconst strokeWidth = 10;\r\n\r\nconst circularProgressbarStyle = {\r\n strokeLinecap: \"butt\",\r\n pathColor: \"white\",\r\n trailColor: \"rgba(255, 255, 255, 0.33)\"\r\n};\r\n\r\nconst slowProgress = {\r\n strokeWidth,\r\n styles: buildStyles({\r\n ...circularProgressbarStyle,\r\n pathTransitionDuration: 30\r\n })\r\n};\r\n\r\nconst fastProgress = {\r\n strokeWidth,\r\n styles: buildStyles({\r\n ...circularProgressbarStyle,\r\n pathTransitionDuration: 0.75\r\n })\r\n};\r\n\r\ntype TransactionIdle = {\r\n type: \"idle\";\r\n};\r\n\r\ntype TransactionFailed = {\r\n type: \"failed\";\r\n id: string;\r\n error: Error;\r\n};\r\n\r\ntype TransactionWaitingForApproval = {\r\n type: \"waitingForApproval\";\r\n id: string;\r\n};\r\n\r\ntype TransactionCancelled = {\r\n type: \"cancelled\";\r\n id: string;\r\n};\r\n\r\ntype TransactionWaitingForConfirmations = {\r\n type: \"waitingForConfirmation\";\r\n id: string;\r\n tx: SentTransaction;\r\n};\r\n\r\ntype TransactionConfirmed = {\r\n type: \"confirmed\";\r\n id: string;\r\n};\r\n\r\ntype TransactionConfirmedOneShot = {\r\n type: \"confirmedOneShot\";\r\n id: string;\r\n};\r\n\r\ntype TransactionState =\r\n | TransactionIdle\r\n | TransactionFailed\r\n | TransactionWaitingForApproval\r\n | TransactionCancelled\r\n | TransactionWaitingForConfirmations\r\n | TransactionConfirmed\r\n | TransactionConfirmedOneShot;\r\n\r\nconst TransactionContext = React.createContext<\r\n [TransactionState, (state: TransactionState) => void] | undefined\r\n>(undefined);\r\n\r\nexport const TransactionProvider: React.FC = ({ children }) => {\r\n const transactionState = useState({ type: \"idle\" });\r\n return (\r\n {children}\r\n );\r\n};\r\n\r\nconst useTransactionState = () => {\r\n const transactionState = useContext(TransactionContext);\r\n\r\n if (!transactionState) {\r\n throw new Error(\"You must provide a TransactionContext via TransactionProvider\");\r\n }\r\n\r\n return transactionState;\r\n};\r\n\r\nexport const useMyTransactionState = (myId: string | RegExp): TransactionState => {\r\n const [transactionState] = useTransactionState();\r\n\r\n return transactionState.type !== \"idle\" &&\r\n (typeof myId === \"string\" ? transactionState.id === myId : transactionState.id.match(myId))\r\n ? transactionState\r\n : { type: \"idle\" };\r\n};\r\n\r\nconst hasMessage = (error: unknown): error is { message: string } =>\r\n typeof error === \"object\" &&\r\n error !== null &&\r\n \"message\" in error &&\r\n typeof (error as { message: unknown }).message === \"string\";\r\n\r\ntype ButtonlikeProps = {\r\n disabled?: boolean;\r\n variant?: string;\r\n onClick?: () => void;\r\n};\r\n\r\ntype SentTransaction = SentLiquityTransaction<\r\n TransactionResponse,\r\n LiquityReceipt\r\n>;\r\n\r\nexport type GasEstimationState =\r\n | { type: \"idle\" | \"inProgress\" }\r\n | { type: \"error\"; txError: any }\r\n | { type: \"complete\"; populatedTx: PopulatedEthersLiquityTransaction };\r\n\r\nexport type TransactionFunction = (\r\n overrides?: EthersTransactionOverrides\r\n) => Promise;\r\n\r\nexport type EstimateGasFunction = (\r\n overrides?: EthersTransactionOverrides\r\n) => Promise;\r\n\r\ntype TransactionProps = {\r\n id: string;\r\n tooltip?: string;\r\n tooltipPlacement?: TooltipProps[\"placement\"];\r\n showFailure?: \"asTooltip\" | \"asChildText\";\r\n requires?: readonly (readonly [boolean, string])[];\r\n send: TransactionFunction;\r\n children: C;\r\n};\r\n\r\nexport const useTransactionFunction = (\r\n id: string,\r\n send: TransactionFunction,\r\n estimateGas?: EstimateGasFunction\r\n): [sendTransaction: () => Promise, transactionState: TransactionState] => {\r\n const [transactionState, setTransactionState] = useTransactionState();\r\n\r\n const sendTransaction = useCallback(async () => {\r\n setTransactionState({ type: \"waitingForApproval\", id });\r\n\r\n try {\r\n const result = await (estimateGas ? estimateGas() : Promise.resolve(undefined));\r\n console.log(`estimate Gas ${(result as { type: \"complete\"; populatedTx: PopulatedEthersLiquityTransaction })?.populatedTx.rawPopulatedTransaction.gasLimit}`);\r\n const tx = await send();\r\n\r\n setTransactionState({\r\n type: \"waitingForConfirmation\",\r\n id,\r\n tx\r\n });\r\n return tx;\r\n } catch (error) {\r\n if (hasMessage(error) && error.message.includes(\"User denied transaction signature\")) {\r\n setTransactionState({ type: \"cancelled\", id });\r\n } else {\r\n console.error(error);\r\n\r\n setTransactionState({\r\n type: \"failed\",\r\n id,\r\n error: new Error(`Failed to send transaction (try again) ${(error.data || {}).message || error}`)\r\n });\r\n }\r\n }\r\n }, [send, id, setTransactionState, estimateGas]);\r\n\r\n return [sendTransaction, transactionState];\r\n};\r\n\r\nexport function Transaction>({\r\n id,\r\n tooltip,\r\n tooltipPlacement,\r\n showFailure,\r\n requires,\r\n send,\r\n children\r\n}: TransactionProps) {\r\n const [sendTransaction, transactionState] = useTransactionFunction(id, send);\r\n const trigger = React.Children.only(children);\r\n\r\n const failureReasons = (requires || [])\r\n .filter(([requirement]) => !requirement)\r\n .map(([, reason]) => reason);\r\n\r\n if (\r\n transactionState.type === \"waitingForApproval\" ||\r\n transactionState.type === \"waitingForConfirmation\"\r\n ) {\r\n failureReasons.push(\"You must wait for confirmation\");\r\n }\r\n\r\n showFailure =\r\n failureReasons.length > 0 ? showFailure ?? (tooltip ? \"asTooltip\" : \"asChildText\") : undefined;\r\n\r\n const clonedTrigger =\r\n showFailure === \"asChildText\"\r\n ? React.cloneElement(\r\n trigger,\r\n {\r\n disabled: true,\r\n variant: \"danger\"\r\n },\r\n failureReasons[0]\r\n )\r\n : showFailure === \"asTooltip\"\r\n ? React.cloneElement(trigger, { disabled: true })\r\n : React.cloneElement(trigger, { onClick: sendTransaction });\r\n\r\n if (showFailure === \"asTooltip\") {\r\n tooltip = failureReasons[0];\r\n }\r\n\r\n return tooltip ? (\r\n <>\r\n \r\n {clonedTrigger}\r\n \r\n \r\n ) : (\r\n clonedTrigger\r\n );\r\n}\r\n\r\n// Doesn't work on Kovan:\r\n// https://github.com/MetaMask/metamask-extension/issues/5579\r\nconst tryToGetRevertReason = async (provider: Provider, tx: TransactionReceipt) => {\r\n try {\r\n const result = await provider.call(tx, tx.blockNumber);\r\n\r\n if (hexDataLength(result) % 32 === 4 && hexDataSlice(result, 0, 4) === \"0x08c379a0\") {\r\n return (defaultAbiCoder.decode([\"string\"], hexDataSlice(result, 4)) as [string])[0];\r\n }\r\n } catch {\r\n return undefined;\r\n }\r\n};\r\n\r\nconst Donut = React.memo(\r\n CircularProgressbarWithChildren,\r\n ({ value: prev }, { value: next }) => prev === next\r\n);\r\n\r\ntype TransactionProgressDonutProps = {\r\n state: TransactionState[\"type\"];\r\n};\r\n\r\nconst TransactionProgressDonut: React.FC = ({ state }) => {\r\n const [value, setValue] = useState(0);\r\n const maxValue = 1;\r\n\r\n useEffect(() => {\r\n if (state === \"confirmed\") {\r\n setTimeout(() => setValue(maxValue), 40);\r\n } else {\r\n setTimeout(() => setValue(maxValue * 0.67), 20);\r\n }\r\n }, [state]);\r\n\r\n return state === \"confirmed\" ? (\r\n \r\n \r\n \r\n ) : state === \"failed\" || state === \"cancelled\" ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport const TransactionMonitor: React.FC = () => {\r\n const { provider, liquity } = useLiquity();\r\n const [transactionState, setTransactionState] = useTransactionState();\r\n const store = liquity.store;\r\n const id = transactionState.type !== \"idle\" ? transactionState.id : undefined;\r\n const tx = transactionState.type === \"waitingForConfirmation\" ? transactionState.tx : undefined;\r\n\r\n useEffect(() => {\r\n if (id && tx) {\r\n let cancelled = false;\r\n let finished = false;\r\n\r\n const txHash = tx.rawSentTransaction.hash;\r\n\r\n const waitForConfirmation = async () => {\r\n try {\r\n store.refresh();\r\n const receipt = await tx.waitForReceipt();\r\n\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n const { confirmations } = receipt.rawReceipt;\r\n const blockNumber = receipt.rawReceipt.blockNumber + confirmations - 1;\r\n console.log(`Block #${blockNumber} ${confirmations}-confirms tx ${txHash}`);\r\n console.log(`Finish monitoring tx ${txHash}`);\r\n finished = true;\r\n\r\n if (receipt.status === \"succeeded\") {\r\n console.log(`${receipt}`);\r\n\r\n setTransactionState({\r\n type: \"confirmedOneShot\",\r\n id\r\n });\r\n } else {\r\n const reason = await tryToGetRevertReason(provider, receipt.rawReceipt);\r\n\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n console.error(`Tx ${txHash} failed`);\r\n if (reason) {\r\n console.error(`Revert reason: ${reason}`);\r\n }\r\n\r\n setTransactionState({\r\n type: \"failed\",\r\n id,\r\n error: new Error(reason ? `Reverted: ${reason}` : \"Failed\")\r\n });\r\n }\r\n } catch (rawError) {\r\n if (cancelled) {\r\n return;\r\n }\r\n\r\n finished = true;\r\n\r\n if (rawError instanceof EthersTransactionCancelledError) {\r\n console.log(`Cancelled tx ${txHash}`);\r\n setTransactionState({ type: \"cancelled\", id });\r\n } else {\r\n console.error(`Failed to get receipt for tx ${txHash}`);\r\n console.error(rawError);\r\n\r\n setTransactionState({\r\n type: \"failed\",\r\n id,\r\n error: new Error(\"Failed\")\r\n });\r\n }\r\n }\r\n };\r\n\r\n console.log(`Start monitoring tx ${txHash}`);\r\n waitForConfirmation();\r\n\r\n return () => {\r\n if (!finished) {\r\n setTransactionState({ type: \"idle\" });\r\n console.log(`Cancel monitoring tx ${txHash}`);\r\n cancelled = true;\r\n }\r\n };\r\n }\r\n }, [provider, id, tx, setTransactionState, store]);\r\n\r\n useEffect(() => {\r\n if (transactionState.type === \"confirmedOneShot\" && id) {\r\n // hack: the txn confirmed state lasts 5 seconds which blocks other states, review with Dani\r\n setTransactionState({ type: \"confirmed\", id });\r\n } else if (\r\n transactionState.type === \"confirmed\" ||\r\n transactionState.type === \"failed\" ||\r\n transactionState.type === \"cancelled\"\r\n ) {\r\n let cancelled = false;\r\n\r\n setTimeout(() => {\r\n if (!cancelled) {\r\n setTransactionState({ type: \"idle\" });\r\n }\r\n }, 5000);\r\n\r\n return () => {\r\n cancelled = true;\r\n };\r\n }\r\n }, [transactionState.type, setTransactionState, id]);\r\n\r\n if (transactionState.type === \"idle\" || transactionState.type === \"waitingForApproval\") {\r\n return null;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n {transactionState.type === \"waitingForConfirmation\"\r\n ? \"Waiting for confirmation\"\r\n : transactionState.type === \"cancelled\"\r\n ? \"Cancelled\"\r\n : transactionState.type === \"failed\"\r\n ? transactionState.error.message\r\n : \"Confirmed\"}\r\n \r\n \r\n );\r\n};\r\n","import { Theme, ThemeUIStyleObject } from \"theme-ui\";\r\n\r\nconst baseColors = {\r\n blue: \"#1542cd\",\r\n purple: \"#745ddf\",\r\n cyan: \"#2eb6ea\",\r\n green: \"#28c081\",\r\n yellow: \"#fd9d28\",\r\n red: \"#dc2c10\",\r\n lightRed: \"#ff755f\"\r\n};\r\n\r\nconst colors = {\r\n primary: baseColors.blue,\r\n secondary: baseColors.purple,\r\n accent: baseColors.cyan,\r\n\r\n success: baseColors.green,\r\n warning: baseColors.yellow,\r\n danger: baseColors.red,\r\n dangerHover: baseColors.lightRed,\r\n info: baseColors.blue,\r\n invalid: \"pink\",\r\n\r\n text: \"#293147\",\r\n background: \"white\",\r\n muted: \"#eaebed\"\r\n};\r\n\r\nconst buttonBase: ThemeUIStyleObject = {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n\r\n \":enabled\": { cursor: \"pointer\" }\r\n};\r\n\r\nconst button: ThemeUIStyleObject = {\r\n ...buttonBase,\r\n\r\n px: \"32px\",\r\n py: \"12px\",\r\n\r\n color: \"white\",\r\n border: 1,\r\n\r\n fontWeight: \"bold\",\r\n\r\n \":disabled\": {\r\n opacity: 0.5\r\n }\r\n};\r\n\r\nconst buttonOutline = (color: string, hoverColor: string): ThemeUIStyleObject => ({\r\n color,\r\n borderColor: color,\r\n background: \"none\",\r\n\r\n \":enabled:hover\": {\r\n color: \"background\",\r\n bg: hoverColor,\r\n borderColor: hoverColor\r\n }\r\n});\r\n\r\nconst iconButton: ThemeUIStyleObject = {\r\n ...buttonBase,\r\n\r\n padding: 0,\r\n width: \"40px\",\r\n height: \"40px\",\r\n\r\n background: \"none\",\r\n\r\n \":disabled\": {\r\n color: \"text\",\r\n opacity: 0.25\r\n }\r\n};\r\n\r\nconst cardHeadingFontSize = 18.7167;\r\n\r\nconst cardGapX = [0, 3, 4];\r\nconst cardGapY = [3, 3, 4];\r\n\r\nconst card: ThemeUIStyleObject = {\r\n position: \"relative\",\r\n mt: cardGapY,\r\n border: 1,\r\n boxShadow: [1, null, 2]\r\n};\r\n\r\nconst infoCard: ThemeUIStyleObject = {\r\n ...card,\r\n\r\n padding: 3,\r\n\r\n borderColor: \"rgba(122,199,240,0.4)\",\r\n background: \"linear-gradient(200deg, #d4d9fc, #cae9f9)\",\r\n\r\n h2: {\r\n mb: 2,\r\n fontSize: cardHeadingFontSize\r\n }\r\n};\r\n\r\nconst formBase: ThemeUIStyleObject = {\r\n display: \"block\",\r\n width: \"auto\",\r\n flexShrink: 0,\r\n padding: 2,\r\n fontSize: 3\r\n};\r\n\r\nconst formCell: ThemeUIStyleObject = {\r\n ...formBase,\r\n\r\n bg: \"background\",\r\n border: 1,\r\n borderColor: \"muted\",\r\n borderRadius: 0,\r\n boxShadow: [1, 2]\r\n};\r\n\r\nconst overlay: ThemeUIStyleObject = {\r\n position: \"absolute\",\r\n\r\n left: 0,\r\n top: 0,\r\n width: \"100%\",\r\n height: \"100%\"\r\n};\r\n\r\nconst modalOverlay: ThemeUIStyleObject = {\r\n position: \"fixed\",\r\n\r\n left: 0,\r\n top: 0,\r\n width: \"100vw\",\r\n height: \"100vh\"\r\n};\r\n\r\nconst headerGradient: ThemeUIStyleObject = {\r\n background: `linear-gradient(90deg, ${colors.background}, ${colors.muted})`\r\n};\r\n\r\nconst theme: Theme = {\r\n breakpoints: [\"48em\", \"52em\", \"64em\"],\r\n\r\n space: [0, 4, 8, 16, 32, 64, 128, 256, 512],\r\n\r\n fonts: {\r\n body: [\r\n \"system-ui\",\r\n \"-apple-system\",\r\n \"BlinkMacSystemFont\",\r\n '\"Segoe UI\"',\r\n \"Roboto\",\r\n '\"Helvetica Neue\"',\r\n \"sans-serif\"\r\n ].join(\", \"),\r\n heading: \"inherit\",\r\n monospace: \"Menlo, monospace\"\r\n },\r\n\r\n fontSizes: [12, 14, 16, 20, 24, 32, 48, 64, 96],\r\n\r\n fontWeights: {\r\n body: 400,\r\n heading: 600,\r\n\r\n light: 200,\r\n medium: 500,\r\n bold: 600\r\n },\r\n\r\n lineHeights: {\r\n body: 1.5,\r\n heading: 1.25\r\n },\r\n\r\n colors,\r\n\r\n borders: [0, \"1px solid\", \"2px solid\"],\r\n\r\n shadows: [\"0\", \"0px 4px 8px rgba(41, 49, 71, 0.1)\", \"0px 8px 16px rgba(41, 49, 71, 0.1)\"],\r\n\r\n text: {\r\n address: {\r\n fontFamily: \"monospace\",\r\n fontSize: 1\r\n }\r\n },\r\n\r\n buttons: {\r\n primary: {\r\n ...button,\r\n\r\n bg: \"primary\",\r\n borderColor: \"primary\",\r\n\r\n \":enabled:hover\": {\r\n bg: \"secondary\",\r\n borderColor: \"secondary\"\r\n }\r\n },\r\n\r\n outline: {\r\n ...button,\r\n ...buttonOutline(\"primary\", \"secondary\")\r\n },\r\n\r\n cancel: {\r\n ...button,\r\n ...buttonOutline(\"text\", \"text\"),\r\n\r\n opacity: 0.8\r\n },\r\n\r\n danger: {\r\n ...button,\r\n\r\n bg: \"danger\",\r\n borderColor: \"danger\",\r\n\r\n \":enabled:hover\": {\r\n bg: \"dangerHover\",\r\n borderColor: \"dangerHover\"\r\n }\r\n },\r\n\r\n icon: {\r\n ...iconButton,\r\n color: \"primary\",\r\n \":enabled:hover\": { color: \"accent\" }\r\n },\r\n\r\n dangerIcon: {\r\n ...iconButton,\r\n color: \"danger\",\r\n \":enabled:hover\": { color: \"dangerHover\" }\r\n },\r\n\r\n titleIcon: {\r\n ...iconButton,\r\n color: \"text\",\r\n \":enabled:hover\": { color: \"success\" }\r\n }\r\n },\r\n\r\n cards: {\r\n primary: {\r\n ...card,\r\n\r\n padding: 0,\r\n\r\n borderColor: \"muted\",\r\n bg: \"background\",\r\n\r\n \"> h2\": {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n\r\n height: \"56px\",\r\n\r\n pl: 3,\r\n py: 2,\r\n pr: 2,\r\n\r\n bg: \"muted\",\r\n\r\n fontSize: cardHeadingFontSize\r\n }\r\n },\r\n\r\n info: {\r\n ...infoCard,\r\n\r\n display: [\"none\", \"block\"]\r\n },\r\n\r\n infoPopup: {\r\n ...infoCard,\r\n\r\n position: \"fixed\",\r\n top: 0,\r\n right: 3,\r\n left: 3,\r\n mt: \"72px\",\r\n height: \"80%\",\r\n overflowY: \"scroll\"\r\n },\r\n\r\n tooltip: {\r\n padding: 2,\r\n\r\n border: 1,\r\n borderColor: \"muted\",\r\n borderRadius: \"4px\",\r\n bg: \"background\",\r\n boxShadow: 2,\r\n\r\n fontSize: 1,\r\n color: \"text\",\r\n fontWeight: \"body\",\r\n zIndex: 1\r\n }\r\n },\r\n\r\n forms: {\r\n label: {\r\n ...formBase\r\n },\r\n\r\n unit: {\r\n ...formCell,\r\n\r\n textAlign: \"center\",\r\n bg: \"muted\"\r\n },\r\n\r\n input: {\r\n ...formCell,\r\n\r\n flex: 1\r\n },\r\n\r\n editor: {}\r\n },\r\n\r\n layout: {\r\n header: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"stretch\",\r\n\r\n position: [\"fixed\", \"relative\"],\r\n width: \"100vw\",\r\n top: 0,\r\n zIndex: 1,\r\n\r\n px: [2, \"12px\", \"12px\", 5],\r\n py: [2, \"12px\", \"12px\"],\r\n\r\n ...headerGradient,\r\n boxShadow: [1, \"none\"]\r\n },\r\n\r\n footer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n\r\n mt: cardGapY,\r\n px: 3,\r\n minHeight: \"72px\",\r\n\r\n bg: \"muted\"\r\n },\r\n\r\n main: {\r\n width: \"100%\",\r\n maxWidth: \"912px\",\r\n mx: \"auto\",\r\n mt: [\"40px\", 0],\r\n mb: [\"40px\", \"40px\"],\r\n px: cardGapX\r\n },\r\n\r\n columns: {\r\n display: \"flex\",\r\n flexWrap: \"wrap\",\r\n justifyItems: \"center\"\r\n },\r\n\r\n left: {\r\n pr: cardGapX,\r\n width: [\"100%\", \"58%\"]\r\n },\r\n\r\n right: {\r\n width: [\"100%\", \"42%\"]\r\n },\r\n\r\n actions: {\r\n justifyContent: \"flex-end\",\r\n mt: 2,\r\n\r\n button: {\r\n ml: 2\r\n }\r\n },\r\n\r\n disabledOverlay: {\r\n ...overlay,\r\n\r\n bg: \"rgba(255, 255, 255, 0.5)\"\r\n },\r\n\r\n modalOverlay: {\r\n ...modalOverlay,\r\n\r\n bg: \"rgba(0, 0, 0, 0.8)\",\r\n\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\"\r\n },\r\n\r\n modal: {\r\n padding: 3,\r\n width: [\"100%\", \"40em\"]\r\n },\r\n\r\n infoOverlay: {\r\n ...modalOverlay,\r\n\r\n display: [\"block\", \"none\"],\r\n\r\n bg: \"rgba(255, 255, 255, 0.8)\"\r\n },\r\n\r\n infoMessage: {\r\n display: \"flex\",\r\n justifyContent: \"center\",\r\n m: 3,\r\n alignItems: \"center\",\r\n minWidth: \"128px\"\r\n },\r\n\r\n sidenav: {\r\n display: [\"flex\", \"none\"],\r\n flexDirection: \"column\",\r\n p: 0,\r\n m: 0,\r\n borderColor: \"muted\",\r\n mr: \"25vw\",\r\n height: \"100%\",\r\n ...headerGradient\r\n },\r\n\r\n badge: {\r\n border: 0,\r\n borderRadius: 3,\r\n p: 1,\r\n px: 2,\r\n backgroundColor: \"muted\",\r\n color: \"slate\",\r\n fontSize: 1,\r\n fontWeight: \"body\"\r\n }\r\n },\r\n\r\n styles: {\r\n root: {\r\n fontFamily: \"body\",\r\n lineHeight: \"body\",\r\n fontWeight: \"body\",\r\n\r\n height: \"100%\",\r\n\r\n \"#root\": {\r\n height: \"100%\"\r\n }\r\n },\r\n\r\n a: {\r\n color: \"primary\",\r\n \":hover\": { color: \"accent\" },\r\n textDecoration: \"none\",\r\n fontWeight: \"bold\"\r\n }\r\n },\r\n\r\n links: {\r\n nav: {\r\n px: 2,\r\n py: 1,\r\n fontWeight: \"medium\",\r\n fontSize: 2,\r\n textTransform: \"uppercase\",\r\n letterSpacing: \"2px\",\r\n width: [\"100%\", \"auto\"],\r\n mt: [3, \"auto\"]\r\n }\r\n }\r\n};\r\n\r\nexport default theme;\r\n","import { hexlify } from \"@ethersproject/bytes\";\r\nimport { Wallet } from \"@ethersproject/wallet\";\r\n\r\nimport { Decimal, Decimalish } from \"@liquity/lib-base\";\r\n\r\nexport class DisposableWalletProvider {\r\n private readonly url: string;\r\n private id: number = 0;\r\n\r\n private readonly wallet: Wallet;\r\n private readonly funderWallet: Wallet;\r\n\r\n private readonly ethAmount: Decimal;\r\n private haveFunded = false;\r\n\r\n constructor(url: string, funderPrivateKey: string, ethAmount: Decimalish = 100) {\r\n this.url = url;\r\n this.wallet = Wallet.createRandom();\r\n this.funderWallet = new Wallet(funderPrivateKey);\r\n this.ethAmount = Decimal.from(ethAmount);\r\n }\r\n\r\n private findWallet(address: string) {\r\n const wallet = [this.wallet, this.funderWallet].find(\r\n wallet => wallet.address.toLowerCase() === address.toLowerCase()\r\n );\r\n\r\n if (!wallet) {\r\n throw new Error(`Unknow account ${address}`);\r\n }\r\n\r\n return wallet;\r\n }\r\n\r\n private async fund() {\r\n return this.send(\"eth_sendTransaction\", [\r\n {\r\n from: this.funderWallet.address,\r\n to: this.wallet.address,\r\n value: this.ethAmount.hex,\r\n gas: hexlify(21000)\r\n }\r\n ]);\r\n\r\n // TODO maybe wait for tx to be mined (not a problem on devchains though)\r\n }\r\n\r\n async send(method: string, params: any[]): Promise {\r\n if (!this.haveFunded) {\r\n this.haveFunded = true;\r\n await this.fund();\r\n }\r\n\r\n switch (method) {\r\n case \"eth_accounts\":\r\n case \"eth_requestAccounts\":\r\n return [this.wallet.address];\r\n\r\n case \"eth_sendTransaction\":\r\n return this.send(\r\n \"eth_sendRawTransaction\",\r\n await Promise.all(\r\n params.map(async ({ from, nonce, gas, ...rest }) => {\r\n if (nonce === undefined) {\r\n nonce = await this.send(\"eth_getTransactionCount\", [from]);\r\n }\r\n\r\n return this.findWallet(from).signTransaction({\r\n from,\r\n nonce,\r\n ...(gas !== undefined ? { gasLimit: gas } : {}),\r\n ...rest\r\n });\r\n })\r\n )\r\n );\r\n }\r\n\r\n //console.log({ method, params });\r\n\r\n const response = await fetch(this.url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n body: JSON.stringify({\r\n method: method,\r\n params: params,\r\n id: this.id++,\r\n jsonrpc: \"2.0\"\r\n })\r\n });\r\n\r\n const json = await response.json();\r\n\r\n //console.log(json);\r\n\r\n if (json.error) {\r\n const { message, ...rest } = json.error;\r\n const error = new Error(`${message} ${JSON.stringify(rest)}`);\r\n throw Object.assign(error, rest);\r\n }\r\n\r\n return json.result;\r\n }\r\n\r\n request({ method, params }: { method: string; params: any[] }) {\r\n return this.send(method, params);\r\n }\r\n}\r\n","export const shortenAddress = (address: string) => address.substr(0, 6) + \"...\" + address.substr(-4);\r\n","import React from \"react\";\r\nimport { Text, Flex, Box, Heading } from \"theme-ui\";\r\n\r\nimport { LiquityStoreState } from \"@liquity/lib-base\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\n\r\nimport { COIN, GT } from \"../strings\";\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\nimport { shortenAddress } from \"../utils/shortenAddress\";\r\n\r\nimport { Icon } from \"./Icon\";\r\nimport { FontAwesomeIcon, FontAwesomeIconProps } from \"@fortawesome/react-fontawesome\";\r\nimport log from '../helpers/logger';\r\n\r\nconst select = ({ accountBalance, ftxBalance }: LiquityStoreState) => ({\r\n accountBalance,\r\n ftxBalance\r\n});\r\n\r\nexport const UserAccount: React.FC = () => {\r\n const { account, liquity } = useLiquity();\r\n const { accountBalance, ftxBalance } = useLiquitySelector(select);\r\n const testAccount = \"0x1234567890123456789012345678901234567890\";\r\n const showAccount = (account != testAccount ?? false);\r\n\r\n const fethAddress = (((liquity || {}).connection || {}).addresses || {}).fethToken;\r\n const paydAddress = (((liquity || {}).connection || {}).addresses || {}).paydToken;\r\n const ftxAddress = (((liquity || {}).connection || {}).addresses || {}).ftxToken;\r\n\r\n log.debug(\"account\", account, showAccount, liquity.connection.addresses);\r\n\r\n return (\r\n
\r\n {showAccount &&\r\n \r\n \r\n \r\n \r\n Connected as\r\n \r\n {shortenAddress(account)}\r\n \r\n \r\n \r\n\r\n \r\n \r\n {([\r\n [\"ETH\", accountBalance, \"\"],\r\n [\"FTX\", ftxBalance, ftxAddress],\r\n ] as const).map(([currency, balance, address], i) => (\r\n \r\n \r\n {currency}\r\n {address !== \"\" && {navigator.clipboard.writeText(address); alert(\"Address Copied\")}}>}\r\n \r\n {balance.prettify()}\r\n \r\n ))}\r\n \r\n \r\n }\r\n
\r\n );\r\n};\r\n","import React from \"react\";\r\nimport Tippy, { TippyProps } from \"@tippyjs/react\";\r\nimport { Icon } from \"./Icon\";\r\nimport { FontAwesomeIconProps } from \"@fortawesome/react-fontawesome\";\r\n\r\nexport type InfoIconProps = Pick &\r\n Pick & {\r\n tooltip: React.ReactNode;\r\n };\r\n\r\nexport const InfoIcon: React.FC = ({ placement = \"right\", tooltip, size = \"1x\" }) => {\r\n return (\r\n \r\n \r\n  \r\n \r\n \r\n \r\n );\r\n};\r\n","import log from '../helpers/logger';\r\nimport { RememberCurrent, GetCurrent } from './Persist';\r\n\r\nconst SCREEN_PREFIX = 'IdCheck';\r\nconst PERSIST_KEY = SCREEN_PREFIX + \"_LASTIDCHECK\"\r\nexport const SET_PAGE_TITLE = 'SET_PAGE_TITLE';\r\nexport const SHOW_SPINNER = 'SHOW_SPINNER';\r\nexport const SWITCH_ROLE = 'SWITCH_ROW';\r\nexport const SET_SAVE_AND_EXIT = 'SET_SAVE_AND_EXIT';\r\nexport const TOPBAR_LEFT = 'TOPBAR_LEFT';\r\nexport const TOPBAR_CENTER = 'TOPBAR_CENTER';\r\nexport const TOPBAR_RIGHT = 'TOPBAR_RIGHT';\r\nexport const SHOW_SKELETON = 'SHOW_SKELETON';\r\nexport const HIDE_SIDEBAR = 'HIDE_SIDEBAR';\r\nexport const SET_MENU = 'SET_MENU';\r\nexport const HIDE_TOPBAR = 'HIDE_TOPBAR';\r\n\r\n/* demo role based navigation */\r\nexport const roles = {\r\n \"1\": { role: \"borrower\", landingPage: \"/borrower\" },\r\n \"2\": { role: \"guarantor\", landingPage: \"/guarantor\" },\r\n \"3\": { role: \"lender\", landingPage: \"/lender\" },\r\n}\r\n\r\nlet spinnerCount = 0;\r\nlet skeletonCount = 0;\r\n\r\n// Reducer\r\nexport function globalReducer(state = { role: roles[\"1\"] }, action) {\r\n switch (action.type) {\r\n case SET_SAVE_AND_EXIT:\r\n return { ...state, SaveAndExit: { ...action.payload } };\r\n case TOPBAR_LEFT:\r\n return { ...state, TopbarLeft: { ...action.payload } };\r\n case TOPBAR_CENTER:\r\n return { ...state, TopbarCenter: { ...action.payload } };\r\n case TOPBAR_RIGHT:\r\n return { ...state, TopbarRight: { ...action.payload } };\r\n case SET_PAGE_TITLE:\r\n return { ...state, pageTitle: action.payload.title };\r\n case SWITCH_ROLE:\r\n return { ...state, role: roles[action.payload.role] };\r\n case SHOW_SPINNER:\r\n return { ...state, pageSpinner: action.payload.showSpinner };\r\n case SHOW_SKELETON:\r\n return { ...state, pageSkeleton: action.payload.showSkeleton };\r\n case HIDE_SIDEBAR:\r\n return { ...state, hideSidebar: action.payload.hideSidebar };\r\n case SET_MENU:\r\n return { ...state, topbarMenu: action.payload.setMenu };\r\n case HIDE_TOPBAR:\r\n return { ...state, hideTopbarMenu: action.payload.hideTopbarMenu };\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nexport function registerSaveAndExit(saveFn, pathname, visibility, label) {\r\n return {\r\n type: SET_SAVE_AND_EXIT,\r\n payload: { callback: saveFn, pathname: pathname, visibility: visibility, label: label }\r\n };\r\n}\r\n\r\nexport function registerTopbarLeft(saveFn, pathname, visibility, label, logo) {\r\n return {\r\n type: TOPBAR_LEFT,\r\n payload: { callback: saveFn, pathname: pathname, visibility: visibility, label: label, logo: logo }\r\n };\r\n}\r\n\r\nexport function registerTopbarCenter(pathname, visibility, label, left, sublabel) {\r\n return {\r\n type: TOPBAR_CENTER,\r\n payload: { pathname: pathname, visibility: visibility, label: label, left: left, sublabel: sublabel }\r\n };\r\n}\r\n\r\nexport function registerTopbarRight(saveFn, pathname, visibility, icon, text, button, countNumber, buttonIcon) {\r\n return {\r\n type: TOPBAR_RIGHT,\r\n payload: { callback: saveFn, pathname: pathname, visibility: visibility, icon: icon, text: text, button: button, countNumber: countNumber, buttonIcon: buttonIcon, }\r\n };\r\n}\r\n\r\n// Actions\r\nexport function setTitle(title) {\r\n return {\r\n type: SET_PAGE_TITLE,\r\n payload: { title: title }\r\n };\r\n}\r\n\r\nexport function hideSidebar(hideSidebar) {\r\n return {\r\n type: HIDE_SIDEBAR,\r\n payload: { hideSidebar: hideSidebar }\r\n };\r\n}\r\n\r\nexport function setSpinner(showSpinner, source) {\r\n if (!source) {\r\n // debugger;\r\n }\r\n if (showSpinner) spinnerCount++;\r\n else if (spinnerCount > 0) spinnerCount--;\r\n log.debug('#####spinner log', spinnerCount, showSpinner, source);\r\n return {\r\n type: SHOW_SPINNER,\r\n payload: { showSpinner: spinnerCount === 0 || showSpinner ? showSpinner : true }\r\n };\r\n}\r\n\r\nexport function setSkeleton(showSkeleton, source) {\r\n if (!source) {\r\n // debugger;\r\n }\r\n if (showSkeleton) skeletonCount++;\r\n else if (skeletonCount > 0) skeletonCount--;\r\n log.debug('#####skeleton log', skeletonCount, showSkeleton, source);\r\n return {\r\n type: SHOW_SKELETON,\r\n payload: { showSkeleton: skeletonCount === 0 || showSkeleton ? showSkeleton : true }\r\n };\r\n}\r\n\r\nexport function switchRole(role) {\r\n return {\r\n type: SWITCH_ROLE,\r\n payload: { role: role }\r\n };\r\n}\r\n\r\nexport function setTopbarMenu(setMenu) {\r\n return {\r\n type: SET_MENU,\r\n payload: { setMenu: setMenu }\r\n };\r\n}\r\n\r\nexport function hideTopbarMenu(hideTopbarMenu) {\r\n return {\r\n type: HIDE_TOPBAR,\r\n payload: { hideTopbarMenu: hideTopbarMenu }\r\n };\r\n}\r\n","import React, { Component } from 'react';\r\nimport EyeIcon from 'mdi-react/EyeIcon';\r\nimport { Card, CardBody, Button, Row, Col } from 'reactstrap';\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators } from 'redux';\r\nimport { Formik, Field, Form } from 'formik';\r\nimport { Redirect, withRouter } from 'react-router-dom';\r\nimport LoadingIcon from 'mdi-react/LoadingIcon';\r\nimport { login, logout, getCurrentUser } from '../../redux/Auth';\r\nimport { Link } from 'react-router-dom';\r\nimport log from '../../helpers/logger';\r\nimport { setSpinner } from '../../redux/Global';\r\nimport { getUrlBeforeRouter } from '../../helpers/formatter';\r\nimport { Spinner } from \"theme-ui\";\r\n// import Carousel from '../../components/custom/CarouselSingle';\r\n// import { loadPage, submitUsecases } from '../../redux/Usecases';\r\n\r\nclass Login extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n submitting: false,\r\n userId: (this.props.user || {}).UsrId,\r\n showBox: false,\r\n };\r\n\r\n // this.props.setSpinner(true);\r\n\r\n this.TextChange = this.TextChange.bind(this);\r\n this.ValidatePage = this.ValidatePage.bind(this);\r\n\r\n // this.props.loadPage();\r\n\r\n this.handleSubmit = ((values, { setSubmitting, setErrors /* setValues and other goodies */ }) => {\r\n this.setState({ submittedOn: Date.now(), submitting: true, setSubmitting: setSubmitting });\r\n // this.state.submitting = true;\r\n // this.state.setSubmitting = setSubmitting;t\r\n // this.props.setSpinner(true, '#####Login1');\r\n this.props.login(values.username, values.password)\r\n .catch(error => {\r\n // do nothing on error;\r\n this.setState({ submitting: false });\r\n })\r\n .finally(() => {\r\n setSubmitting(false);\r\n // this.props.setSpinner(false, '#####Login1');\r\n });\r\n });\r\n\r\n if (!this.props.user || !this.props.user.UsrId) {\r\n this.props.getCurrentUser()\r\n .then((data) => {\r\n log.debug('get current user return', this.props.user, this.props.user.UsrId);\r\n if (!this.props.user || !this.props.user.UsrId) {\r\n const _this = this;\r\n this.setState({ showBox: true });\r\n // setTimeout(() => { _this.props.setSpinner(false, '#####Login2Then'); }, 500);\r\n }\r\n log.debug(data);\r\n // do nothing if info retrieved\r\n })\r\n .catch(error => {\r\n log.debug('get current user error');\r\n const _this = this;\r\n this.setState({ showBox: true });\r\n //setTimeout(() => { _this.props.setSpinner(false);}, 500);\r\n })\r\n .finally(() => {\r\n const _this = this;\r\n log.debug('get current user done');\r\n /* must reset this */\r\n // setTimeout(() => { _this.props.setSpinner(false, '#####Login2Final'); }, 500);\r\n })\r\n ;\r\n }\r\n // else {\r\n // this.setState({ showBox: false });\r\n // }\r\n }\r\n\r\n\r\n componentDidMount() {\r\n // if (!this.props.user || !this.props.user.UsrId) {\r\n // this.props.getCurrentUser();\r\n // }\r\n // console.log(this.props.user);\r\n }\r\n\r\n componentDidUpdate(prevProps, prevStats) {\r\n\r\n const from = ((this.props.location || {}).state || {}).from;\r\n if ((!prevProps.user || !prevProps.user.UsrId) && this.props.user && this.props.user.UsrId) {\r\n //window.location.reload();\r\n }\r\n\r\n if (\r\n // this.props.global.pageSpinner &&\r\n !this.state.userId && !(this.props.user || {}).loading && !this.state.submitting) {\r\n const _this = this;\r\n // setTimeout(() => _this.props.setSpinner(false), 500);\r\n }\r\n if (this.state.submitting &&\r\n (((this.props.user || {}).status === \"failed\") ||\r\n ((this.props.user || {}).errMsg === \"Failed to fetch\" || (this.props.user || {}).errType === \"network error\" || (this.props.user || {}).loading === false)\r\n )\r\n ) {\r\n const _this = this;\r\n log.debug('login failed')\r\n // setTimeout(() => _this.props.setSpinner(false), 0);\r\n this.state.setSubmitting(false);\r\n }\r\n }\r\n\r\n TextChange(setFieldValue, setFieldTouched, name) {\r\n const _this = this;\r\n return function (evt) {\r\n const value = evt.target.value;\r\n setFieldTouched(name, true);\r\n setFieldValue(name, value);\r\n }\r\n }\r\n\r\n ValidatePage(values) {\r\n const errors = {};\r\n\r\n log.debug(values);\r\n\r\n if (!values.username) {\r\n errors.username = this.props.auth.Label.UserNameEmpty;\r\n }\r\n if (!values.password) {\r\n errors.password = this.props.auth.Label.PasswordEmpty;\r\n }\r\n\r\n return errors;\r\n }\r\n\r\n render() {\r\n log.debug(\"login rendering\", this.props);\r\n if (this.props.user && this.props.user.UsrId) {\r\n if (((this.props.location.state || {}).from || {}).pathname) {\r\n return \r\n }\r\n else {\r\n return \r\n }\r\n }\r\n\r\n // const usecasesPassed = ((this.props.usecases || {}).currentUsecases || {}).passed;\r\n\r\n return (\r\n \r\n \r\n \r\n {this.state.showBox &&\r\n
\r\n \r\n \r\n \"staked.finance\"\r\n {/*

staked.finance

*/}\r\n \r\n
\r\n (\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n {errors.username && touched.username && {errors.username}}\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n {errors.password && touched.password && {errors.password}}\r\n
\r\n \r\n \r\n {this.props.auth.Label.Login}\r\n {(isSubmitting || this.state.submitting) &&\r\n }\r\n \r\n
{ this.props.history.push('/forgot-password') }}>Forgot password?
\r\n
Don’t have an account? { this.props.history.push('/sign-up') }}>Sign Up Here
\r\n \r\n \r\n
\r\n
\r\n
\r\n )}\r\n />\r\n
\r\n }\r\n
\r\n
\r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n auth: state.auth,\r\n global: state.global,\r\n // usecases: state.usecases,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { login: login },\r\n { logout: logout },\r\n { getCurrentUser: getCurrentUser },\r\n { setSpinner: setSpinner },\r\n // { submitUsecases: submitUsecases },\r\n // { loadPage: loadPage },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Login));\r\n","import { createContext, useContext } from \"react\";\r\nimport type { CacheView, CacheEvent } from \"./types\";\r\n\r\ntype CacheViewContextType = {\r\n view: CacheView;\r\n dispatchEvent: (event: CacheEvent) => void;\r\n};\r\n\r\nexport const CacheViewContext = createContext(null);\r\n\r\nexport const useCacheView = (): CacheViewContextType => {\r\n const context: CacheViewContextType | null = useContext(CacheViewContext);\r\n\r\n if (context === null) {\r\n throw new Error(\"You must add a into the React tree\");\r\n }\r\n\r\n return context;\r\n};\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { Button, Box, Flex, Card, Heading } from \"theme-ui\";\r\n\r\nimport { Decimal, Percent, LiquityStoreState, MINIMUM_COLLATERAL_RATIO } from \"@liquity/lib-base\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\nimport { useLiquity } from \"../../hooks/LiquityContext\";\r\n\r\nimport { COIN } from \"../../strings\";\r\n\r\nimport { Icon } from \"../Icon\";\r\nimport { LoadingOverlay } from \"../LoadingOverlay\";\r\nimport { EditableRow, StaticRow } from \"../Cache/Editor\";\r\nimport { ActionDescription, Amount } from \"../ActionDescription\";\r\nimport { ErrorDescription } from \"../ErrorDescription\";\r\nimport { useMyTransactionState } from \"../Transaction\";\r\n\r\nimport { RedemptionAction, GasEstimationState } from \"./RedemptionAction\";\r\nimport { InfoIcon } from \"../InfoIcon\";\r\n\r\nconst mcrPercent = new Percent(MINIMUM_COLLATERAL_RATIO).toString(0);\r\n\r\nconst select = ({ price, fees, total, paydBalance }: LiquityStoreState) => ({\r\n price,\r\n fees,\r\n total,\r\n paydBalance\r\n});\r\n\r\nconst transactionId = \"redemption\";\r\n\r\nexport const RedemptionManager: React.FC = () => {\r\n const { price, fees, total, paydBalance } = useLiquitySelector(select);\r\n const [paydAmount, setPAYDAmount] = useState(Decimal.ZERO);\r\n const [changePending, setChangePending] = useState(false);\r\n const editingState = useState();\r\n const { liquity } = useLiquity();\r\n\r\n const dirty = !paydAmount.isZero;\r\n const ethAmount = paydAmount.div(price);\r\n const redemptionRate = fees.redemptionRate(paydAmount.div(total.debt));\r\n const feePct = new Percent(redemptionRate);\r\n const ethFee = ethAmount.mul(redemptionRate);\r\n const maxRedemptionRate = redemptionRate.add(0.001); // TODO slippage tolerance\r\n\r\n const myTransactionState = useMyTransactionState(transactionId);\r\n const [gasEstimationState, setGasEstimationState] = useState({ type: \"idle\" });\r\n\r\n useEffect(() => {\r\n if (\r\n myTransactionState.type === \"waitingForApproval\" ||\r\n myTransactionState.type === \"waitingForConfirmation\"\r\n ) {\r\n setChangePending(true);\r\n } else if (myTransactionState.type === \"failed\" || myTransactionState.type === \"cancelled\") {\r\n setChangePending(false);\r\n } else if (myTransactionState.type === \"confirmed\") {\r\n setPAYDAmount(Decimal.ZERO);\r\n setChangePending(false);\r\n }\r\n }, [myTransactionState.type, setChangePending, setPAYDAmount]);\r\n\r\n\r\n const [canRedeem, description] = total.collateralRatioIsBelowMinimum(price)\r\n ? [\r\n false,\r\n \r\n You can't redeem PAYD when the total collateral ratio is less than{\" \"}\r\n {mcrPercent}. Please try again later.\r\n \r\n ]\r\n : paydAmount.gt(paydBalance)\r\n ? [\r\n false,\r\n \r\n The amount you're trying to redeem exceeds your balance by{\" \"}\r\n \r\n {paydAmount.sub(paydBalance).prettify()} {COIN}\r\n \r\n .\r\n \r\n ]\r\n : [\r\n true,\r\n \r\n You will receive {ethAmount.sub(ethFee).prettify(4)} ETH in exchange for{\" \"}\r\n \r\n {paydAmount.prettify()} {COIN}\r\n \r\n .\r\n \r\n ];\r\n\r\n return (\r\n \r\n \r\n Redeem\r\n {dirty && !changePending && (\r\n setPAYDAmount(Decimal.ZERO)}\r\n >\r\n \r\n \r\n )}\r\n \r\n\r\n \r\n setPAYDAmount(Decimal.from(amount))}\r\n />\r\n\r\n \r\n The Redemption Fee is charged as a percentage of the redeemed Ether. The Redemption\r\n Fee depends on PAYD redemption volumes and is 0.5% at minimum.\r\n \r\n }\r\n />\r\n }\r\n />\r\n\r\n {((dirty || !canRedeem) && description) || (\r\n Enter the amount of {COIN} you'd like to redeem.\r\n )}\r\n {gasEstimationState.type == \"error\" &&\r\n \r\n {gasEstimationState.txError}\r\n \r\n }\r\n \r\n \r\n \r\n \r\n\r\n {changePending && }\r\n \r\n );\r\n};\r\n","import React, { useState, useCallback, useEffect, useRef } from \"react\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\nimport { LiquityStoreState, UserCacheStatus } from \"@liquity/lib-base\";\r\nimport { CacheViewContext } from \"./CacheViewContext\";\r\nimport type { CacheView, CacheEvent } from \"./types\";\r\n\r\ntype CacheEventTransitions = Record>>;\r\n\r\nconst transitions: CacheEventTransitions = {\r\n NONE: {\r\n OPEN_CACHE_PRESSED: \"OPENING\",\r\n CACHE_OPENED: \"ACTIVE\"\r\n },\r\n LIQUIDATED: {\r\n OPEN_CACHE_PRESSED: \"OPENING\",\r\n CACHE_SURPLUS_COLLATERAL_CLAIMED: \"NONE\",\r\n CACHE_OPENED: \"ACTIVE\"\r\n },\r\n REDEEMED: {\r\n OPEN_CACHE_PRESSED: \"OPENING\",\r\n CACHE_SURPLUS_COLLATERAL_CLAIMED: \"NONE\",\r\n CACHE_OPENED: \"ACTIVE\"\r\n },\r\n OPENING: {\r\n CANCEL_ADJUST_CACHE_PRESSED: \"NONE\",\r\n CACHE_OPENED: \"ACTIVE\"\r\n },\r\n ADJUSTING: {\r\n CANCEL_ADJUST_CACHE_PRESSED: \"ACTIVE\",\r\n CACHE_ADJUSTED: \"ACTIVE\",\r\n CACHE_CLOSED: \"NONE\",\r\n CACHE_LIQUIDATED: \"LIQUIDATED\",\r\n CACHE_REDEEMED: \"REDEEMED\"\r\n },\r\n CLOSING: {\r\n CANCEL_ADJUST_CACHE_PRESSED: \"ACTIVE\",\r\n CACHE_CLOSED: \"NONE\",\r\n CACHE_ADJUSTED: \"ACTIVE\",\r\n CACHE_LIQUIDATED: \"LIQUIDATED\",\r\n CACHE_REDEEMED: \"REDEEMED\"\r\n },\r\n ACTIVE: {\r\n ADJUST_CACHE_PRESSED: \"ADJUSTING\",\r\n CLOSE_CACHE_PRESSED: \"CLOSING\",\r\n CACHE_CLOSED: \"NONE\",\r\n CACHE_LIQUIDATED: \"LIQUIDATED\",\r\n CACHE_REDEEMED: \"REDEEMED\"\r\n }\r\n};\r\n\r\ntype CacheStateEvents = Partial>;\r\n\r\nconst cacheStatusEvents: CacheStateEvents = {\r\n open: \"CACHE_OPENED\",\r\n closedByOwner: \"CACHE_CLOSED\",\r\n closedByLiquidation: \"CACHE_LIQUIDATED\",\r\n closedByRedemption: \"CACHE_REDEEMED\"\r\n};\r\n\r\nconst transition = (view: CacheView, event: CacheEvent): CacheView => {\r\n const nextView = transitions[view][event] ?? view;\r\n return nextView;\r\n};\r\n\r\nconst getInitialView = (cacheStatus: UserCacheStatus): CacheView => {\r\n if (cacheStatus === \"closedByLiquidation\") {\r\n return \"LIQUIDATED\";\r\n }\r\n if (cacheStatus === \"closedByRedemption\") {\r\n return \"REDEEMED\";\r\n }\r\n if (cacheStatus === \"open\") {\r\n return \"ACTIVE\";\r\n }\r\n return \"NONE\";\r\n};\r\n\r\nconst select = ({ cache: { status } }: LiquityStoreState) => status;\r\n\r\nexport const CacheViewProvider: React.FC = props => {\r\n const { children } = props;\r\n const cacheStatus = useLiquitySelector(select);\r\n\r\n const [view, setView] = useState(getInitialView(cacheStatus));\r\n const viewRef = useRef(view);\r\n\r\n const dispatchEvent = useCallback((event: CacheEvent) => {\r\n const nextView = transition(viewRef.current, event);\r\n\r\n console.log(\r\n \"dispatchEvent() [current-view, event, next-view]\",\r\n viewRef.current,\r\n event,\r\n nextView\r\n );\r\n setView(nextView);\r\n }, []);\r\n\r\n useEffect(() => {\r\n viewRef.current = view;\r\n }, [view]);\r\n\r\n useEffect(() => {\r\n const event = cacheStatusEvents[cacheStatus] ?? null;\r\n if (event !== null) {\r\n dispatchEvent(event);\r\n }\r\n }, [cacheStatus, dispatchEvent]);\r\n\r\n const provider = {\r\n view,\r\n dispatchEvent\r\n };\r\n return {children};\r\n};\r\n","import { createContext, useContext } from \"react\";\r\nimport type { StabilityView, StabilityEvent } from \"./types\";\r\n\r\ntype StabilityViewContextType = {\r\n view: StabilityView;\r\n dispatchEvent: (event: StabilityEvent) => void;\r\n};\r\n\r\nexport const StabilityViewContext = createContext(null);\r\n\r\nexport const useStabilityView = (): StabilityViewContextType => {\r\n const context: StabilityViewContextType | null = useContext(StabilityViewContext);\r\n\r\n if (context === null) {\r\n throw new Error(\"You must add a into the React tree\");\r\n }\r\n\r\n return context;\r\n};\r\n","import React, { useState, useCallback, useEffect, useRef } from \"react\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\nimport { LiquityStoreState, StabilityDeposit } from \"@liquity/lib-base\";\r\nimport { StabilityViewContext } from \"./StabilityViewContext\";\r\nimport type { StabilityView, StabilityEvent } from \"./types\";\r\n\r\ntype StabilityEventTransitions = Record<\r\n StabilityView,\r\n Partial>\r\n>;\r\n\r\nconst transitions: StabilityEventTransitions = {\r\n NONE: {\r\n DEPOSIT_PRESSED: \"DEPOSITING\"\r\n },\r\n DEPOSITING: {\r\n CANCEL_PRESSED: \"NONE\",\r\n DEPOSIT_CONFIRMED: \"ACTIVE\"\r\n },\r\n ACTIVE: {\r\n REWARDS_CLAIMED: \"ACTIVE\",\r\n ADJUST_DEPOSIT_PRESSED: \"ADJUSTING\",\r\n DEPOSIT_EMPTIED: \"NONE\"\r\n },\r\n ADJUSTING: {\r\n CANCEL_PRESSED: \"ACTIVE\",\r\n DEPOSIT_CONFIRMED: \"ACTIVE\",\r\n DEPOSIT_EMPTIED: \"NONE\"\r\n }\r\n};\r\n\r\nconst transition = (view: StabilityView, event: StabilityEvent): StabilityView => {\r\n const nextView = transitions[view][event] ?? view;\r\n return nextView;\r\n};\r\n\r\nconst getInitialView = (stabilityDeposit: StabilityDeposit): StabilityView => {\r\n return stabilityDeposit.isEmpty ? \"NONE\" : \"ACTIVE\";\r\n};\r\n\r\nconst select = ({ stabilityDeposit }: LiquityStoreState): StabilityDeposit => stabilityDeposit;\r\n\r\nexport const StabilityViewProvider: React.FC = props => {\r\n const { children } = props;\r\n const stabilityDeposit = useLiquitySelector(select);\r\n\r\n const [view, setView] = useState(getInitialView(stabilityDeposit));\r\n const viewRef = useRef(view);\r\n\r\n const dispatchEvent = useCallback((event: StabilityEvent) => {\r\n const nextView = transition(viewRef.current, event);\r\n\r\n console.log(\r\n \"dispatchEvent() [current-view, event, next-view]\",\r\n viewRef.current,\r\n event,\r\n nextView\r\n );\r\n setView(nextView);\r\n }, []);\r\n\r\n useEffect(() => {\r\n viewRef.current = view;\r\n }, [view]);\r\n\r\n useEffect(() => {\r\n if (stabilityDeposit.isEmpty) {\r\n dispatchEvent(\"DEPOSIT_EMPTIED\");\r\n }\r\n }, [stabilityDeposit.isEmpty, dispatchEvent]);\r\n\r\n const provider = {\r\n view,\r\n dispatchEvent\r\n };\r\n\r\n return {children};\r\n};\r\n","import {\r\n Decimal,\r\n PAYD_MINIMUM_DEBT,\r\n PAYD_MINIMUM_NET_DEBT,\r\n Cache,\r\n CacheAdjustmentParams,\r\n CacheChange,\r\n Percent,\r\n MINIMUM_COLLATERAL_RATIO,\r\n CRITICAL_COLLATERAL_RATIO,\r\n LiquityStoreState,\r\n CacheClosureParams,\r\n CacheCreationParams\r\n} from \"@liquity/lib-base\";\r\n\r\nimport { COIN } from \"../../../strings\";\r\n\r\nimport { ActionDescription, Amount } from \"../../ActionDescription\";\r\nimport { ErrorDescription } from \"../../ErrorDescription\";\r\n\r\nconst mcrPercent = new Percent(MINIMUM_COLLATERAL_RATIO).toString(0);\r\nconst ccrPercent = new Percent(CRITICAL_COLLATERAL_RATIO).toString(0);\r\n\r\ntype CacheAdjustmentDescriptionParams = {\r\n params: CacheAdjustmentParams;\r\n};\r\n\r\nconst CacheChangeDescription: React.FC = ({ params }) => (\r\n \r\n {params.depositCollateral && params.borrowPAYD ? (\r\n <>\r\n You will deposit {params.depositCollateral.prettify()} ETH and receive{\" \"}\r\n \r\n {params.borrowPAYD.prettify()} {COIN}\r\n \r\n \r\n ) : params.repayPAYD && params.withdrawCollateral ? (\r\n <>\r\n You will pay{\" \"}\r\n \r\n {params.repayPAYD.prettify()} {COIN}\r\n {\" \"}\r\n and receive {params.withdrawCollateral.prettify()} ETH\r\n \r\n ) : params.depositCollateral && params.repayPAYD ? (\r\n <>\r\n You will deposit {params.depositCollateral.prettify()} ETH and pay{\" \"}\r\n \r\n {params.repayPAYD.prettify()} {COIN}\r\n \r\n \r\n ) : params.borrowPAYD && params.withdrawCollateral ? (\r\n <>\r\n You will receive {params.withdrawCollateral.prettify()} ETH and{\" \"}\r\n \r\n {params.borrowPAYD.prettify()} {COIN}\r\n \r\n \r\n ) : params.depositCollateral ? (\r\n <>\r\n You will deposit {params.depositCollateral.prettify()} ETH\r\n \r\n ) : params.withdrawCollateral ? (\r\n <>\r\n You will receive {params.withdrawCollateral.prettify()} ETH\r\n \r\n ) : params.borrowPAYD ? (\r\n <>\r\n You will receive{\" \"}\r\n \r\n {params.borrowPAYD.prettify()} {COIN}\r\n \r\n \r\n ) : (\r\n <>\r\n You will pay{\" \"}\r\n \r\n {params.repayPAYD.prettify()} {COIN}\r\n \r\n \r\n )}\r\n .\r\n \r\n);\r\n\r\nexport const selectForCacheChangeValidation = ({\r\n price,\r\n total,\r\n accountBalance,\r\n paydBalance,\r\n numberOfCaches\r\n}: LiquityStoreState) => ({ price, total, accountBalance, paydBalance, numberOfCaches });\r\n\r\ntype CacheChangeValidationSelectedState = ReturnType;\r\n\r\ninterface CacheChangeValidationContext extends CacheChangeValidationSelectedState {\r\n originalCache: Cache;\r\n resultingCache: Cache;\r\n recoveryMode: boolean;\r\n wouldTriggerRecoveryMode: boolean;\r\n}\r\n\r\nexport const validateCacheChange = (\r\n originalCache: Cache,\r\n adjustedCache: Cache,\r\n borrowingRate: Decimal,\r\n selectedState: CacheChangeValidationSelectedState\r\n): [\r\n validChange: Exclude, { type: \"invalidCreation\" }> | undefined,\r\n description: JSX.Element | undefined\r\n] => {\r\n const { total, price } = selectedState;\r\n const change = originalCache.whatChanged(adjustedCache, borrowingRate);\r\n\r\n if (!change) {\r\n return [undefined, undefined];\r\n }\r\n\r\n // Reapply change to get the exact state the Cache will end up in (which could be slightly\r\n // different from `edited` due to imprecision).\r\n const resultingCache = originalCache.apply(change, borrowingRate);\r\n const recoveryMode = total.collateralRatioIsBelowCritical(price);\r\n const wouldTriggerRecoveryMode = total\r\n .subtract(originalCache)\r\n .add(resultingCache)\r\n .collateralRatioIsBelowCritical(price);\r\n\r\n const context: CacheChangeValidationContext = {\r\n ...selectedState,\r\n originalCache,\r\n resultingCache,\r\n recoveryMode,\r\n wouldTriggerRecoveryMode\r\n };\r\n\r\n if (change.type === \"invalidCreation\") {\r\n // Trying to create a Cache with negative net debt\r\n return [\r\n undefined,\r\n \r\n Total debt must be at least{\" \"}\r\n \r\n {PAYD_MINIMUM_DEBT.toString()} {COIN}\r\n \r\n .\r\n \r\n ];\r\n }\r\n\r\n const errorDescription =\r\n change.type === \"creation\"\r\n ? validateCacheCreation(change.params, context)\r\n : change.type === \"closure\"\r\n ? validateCacheClosure(change.params, context)\r\n : validateCacheAdjustment(change.params, context);\r\n\r\n if (errorDescription) {\r\n return [undefined, errorDescription];\r\n }\r\n\r\n return [change, ];\r\n};\r\n\r\nconst validateCacheCreation = (\r\n { depositCollateral, borrowPAYD, stakePAYD }: CacheCreationParams,\r\n {\r\n resultingCache,\r\n recoveryMode,\r\n wouldTriggerRecoveryMode,\r\n accountBalance,\r\n price\r\n }: CacheChangeValidationContext\r\n): JSX.Element | null => {\r\n if (borrowPAYD.lt(PAYD_MINIMUM_NET_DEBT)) {\r\n return (\r\n \r\n You must borrow at least{\" \"}\r\n \r\n {PAYD_MINIMUM_NET_DEBT.toString()} {COIN}\r\n \r\n .\r\n \r\n );\r\n }\r\n\r\n if (recoveryMode) {\r\n if (!resultingCache.isOpenableInRecoveryMode(price)) {\r\n return (\r\n \r\n You're not allowed to open a Cache with less than {ccrPercent} Collateral\r\n Ratio during recovery mode. Please increase your Cache's Collateral Ratio.\r\n \r\n );\r\n }\r\n } else {\r\n if (resultingCache.collateralRatioIsBelowMinimum(price)) {\r\n return (\r\n \r\n Collateral ratio must be at least {mcrPercent}.\r\n \r\n );\r\n }\r\n\r\n if (wouldTriggerRecoveryMode) {\r\n return (\r\n \r\n You're not allowed to open a Cache that would cause the Total Collateral Ratio to fall\r\n below {ccrPercent}. Please increase your Cache's Collateral Ratio.\r\n \r\n );\r\n }\r\n }\r\n\r\n if (depositCollateral.gt(accountBalance)) {\r\n return (\r\n \r\n The amount you're trying to deposit exceeds your balance by{\" \"}\r\n {depositCollateral.sub(accountBalance).prettify()} ETH.\r\n \r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst validateCacheAdjustment = (\r\n { depositCollateral, withdrawCollateral, borrowPAYD, repayPAYD }: CacheAdjustmentParams,\r\n {\r\n originalCache,\r\n resultingCache,\r\n recoveryMode,\r\n wouldTriggerRecoveryMode,\r\n price,\r\n accountBalance,\r\n paydBalance\r\n }: CacheChangeValidationContext\r\n): JSX.Element | null => {\r\n if (recoveryMode) {\r\n if (withdrawCollateral) {\r\n return (\r\n \r\n You're not allowed to withdraw collateral during recovery mode.\r\n \r\n );\r\n }\r\n\r\n if (borrowPAYD) {\r\n if (resultingCache.collateralRatioIsBelowCritical(price)) {\r\n return (\r\n \r\n Your collateral ratio must be at least {ccrPercent} to borrow during\r\n recovery mode. Please improve your collateral ratio.\r\n \r\n );\r\n }\r\n\r\n if (resultingCache.collateralRatio(price).lt(originalCache.collateralRatio(price))) {\r\n return (\r\n \r\n You're not allowed to decrease your collateral ratio during recovery mode.\r\n \r\n );\r\n }\r\n }\r\n } else {\r\n if (resultingCache.collateralRatioIsBelowMinimum(price)) {\r\n return (\r\n \r\n Collateral ratio must be at least {mcrPercent}.\r\n \r\n );\r\n }\r\n\r\n if (wouldTriggerRecoveryMode) {\r\n return (\r\n \r\n The adjustment you're trying to make would cause the Total Collateral Ratio to fall below{\" \"}\r\n {ccrPercent}. Please increase your Cache's Collateral Ratio.\r\n \r\n );\r\n }\r\n }\r\n\r\n if (repayPAYD) {\r\n if (resultingCache.debt.lt(PAYD_MINIMUM_DEBT)) {\r\n return (\r\n \r\n Total debt must be at least{\" \"}\r\n \r\n {PAYD_MINIMUM_DEBT.toString()} {COIN}\r\n \r\n .\r\n \r\n );\r\n }\r\n\r\n if (repayPAYD.gt(paydBalance)) {\r\n return (\r\n \r\n The amount you're trying to repay exceeds your balance by{\" \"}\r\n \r\n {repayPAYD.sub(paydBalance).prettify()} {COIN}\r\n \r\n .\r\n \r\n );\r\n }\r\n }\r\n\r\n if (depositCollateral?.gt(accountBalance)) {\r\n return (\r\n \r\n The amount you're trying to deposit exceeds your balance by{\" \"}\r\n {depositCollateral.sub(accountBalance).prettify()} ETH.\r\n \r\n );\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst validateCacheClosure = (\r\n { repayPAYD }: CacheClosureParams,\r\n {\r\n recoveryMode,\r\n wouldTriggerRecoveryMode,\r\n numberOfCaches,\r\n paydBalance\r\n }: CacheChangeValidationContext\r\n): JSX.Element | null => {\r\n if (numberOfCaches === 1) {\r\n return (\r\n \r\n You're not allowed to close your Cache when there are no other Caches in the system.\r\n \r\n );\r\n }\r\n\r\n if (recoveryMode) {\r\n return (\r\n \r\n You're not allowed to close your Cache during recovery mode.\r\n \r\n );\r\n }\r\n\r\n if (repayPAYD?.gt(paydBalance)) {\r\n return (\r\n \r\n You need{\" \"}\r\n \r\n {repayPAYD.sub(paydBalance).prettify()} {COIN}\r\n {\" \"}\r\n more to close your Cache.\r\n \r\n );\r\n }\r\n\r\n if (wouldTriggerRecoveryMode) {\r\n return (\r\n \r\n You're not allowed to close a Cache if it would cause the Total Collateralization Ratio to\r\n fall below {ccrPercent}. Please wait until the Total Collateral Ratio\r\n increases.\r\n \r\n );\r\n }\r\n\r\n return null;\r\n};\r\n","\r\nimport { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\n\r\nlet activeScope = {};\r\n\r\nexport function setAccessScope(scope) {\r\n activeScope = {\r\n ...activeScope,\r\n ...scope,\r\n }\r\n}\r\n\r\nexport function GetAuthCol(accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetAuthCol'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetAuthRow(accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetAuthRow'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n\r\n}\r\nexport function GetScreenLabel(accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetScreenLabel'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope || getAccessScope())\r\n }\r\n )\r\n\r\n}\r\n\r\nexport function GetLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetSystemLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetSystemLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetScreenButtonHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetScreenButtonHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetScreenHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenCriteria(accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewMst(accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetNewMst'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewDtl(accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetNewDtl'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenFilter(accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetScreenFilter'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetSearchList(searchStr, topN, filterId, desiredScreenCriteria, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetSearchList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n desiredScreenCriteria: desiredScreenCriteria || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetEth2Wallet5List(searchStr, topN, filterId, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetEth2Wallet5List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetEth2Wallet5ById(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetEth2Wallet5ById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetMstById = GetEth2Wallet5ById;\r\nexport function GetEth2Wallet5DtlById(keyId, filterId, options, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetEth2Wallet5DtlById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n filterId: filterId || 0,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetDtlById = GetEth2Wallet5DtlById;\r\nexport function LoadInitPage(options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/LoadInitPage'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SaveData(mst, dtl, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst || {},\r\n dtl: dtl || [],\r\n options: options || {}\r\n });\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/SaveData'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function DelMst(mst, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst,\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/DelMst'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SetScreenCriteria(criteriaValues, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/SetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n criteriaValues: criteriaValues\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetRefColumnContent(mstId, dtlId, refKeyId, isMaster, refScreenColumnName, options, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetRefColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n refKeyId: refKeyId || null,\r\n refScreenColumnName: refScreenColumnName || null,\r\n isMaster: isMaster || false,\r\n options: options || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetColumnContent(mstId, dtlId, columnName, isMaster, screenColumnName, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || '',\r\n dtlId: dtlId || '',\r\n screenColumnName: screenColumnName,\r\n columnName: columnName,\r\n isMaster: isMaster || false,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetEmbeddedDoc(mstId, dtlId, isMaster, screenColumnName, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || '',\r\n dtlId: dtlId || '',\r\n isMaster: isMaster || false,\r\n columnName: screenColumnName || '',\r\n screenColumnName: screenColumnName || '',\r\n });\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetColumnContent'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function SaveEmbeddedImage(mstId, dtlId, isMaster, screenColumnName, docJson, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || '',\r\n dtlId: dtlId || '',\r\n isMaster: isMaster || false,\r\n screenColumnName: screenColumnName || '',\r\n docJson: docJson || '',\r\n options: options || {},\r\n });\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/AddDocColumnContent'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function SaveEmbeddedDoc(...args) { return SaveEmbeddedImage(...args) }\r\n\r\n\r\nexport function GetDocZipDownload(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetDocZipDownload'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || null,\r\n options: options ||{},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/*screen criteria dll and screen dropdownlist/autocomplete*/\r\n\r\nexport function GetScreenCriEth1WithdrawalAddr10List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetScreenCriteriaDdlList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n screenCriId: 3,\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetNetworkId6List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetNetworkId6List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetUsrId6List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetUsrId6List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetValidatorStatusCd5List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/GetValidatorStatusCd5List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule: Service Custom Function */\r\n\r\nexport function SyncValidators(walletAddress, multiDepositAddress, accessScope={}) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/SyncValidators'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n walletAddress: walletAddress || '',\r\n multiDepositAddress: multiDepositAddress || '',\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function WithdrawValidators(walletAddress, numberOfValidators, reason, accessScope={}) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/WithdrawValidators'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n walletAddress: walletAddress || '',\r\n numberOfValidators: numberOfValidators || 0,\r\n reason: reason || ''\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function WithdrawValidator(walletAddress, pubkey, accessScope={}) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/WithdrawValidator'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n walletAddress: walletAddress || '',\r\n pubkey: pubkey || ''\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function DisplayMnemonic(walletAddress, accessScope={}) {\r\n return fetchData(baseUrl + '/Eth2WalletWs.asmx/DisplayMnemonic'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n walletAddress: walletAddress || '',\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule End: Service Custom Function */\r\n","let _ScreenButtonDef = {\r\n MstList: {\r\n MoreButton: { label: 'Master List More Button holder', iconClassName: 'fa fa-ellipsis-h icon-holder', className: 'mw-50', buttonType: 'More', visible: true, order: 1, expose: true },\r\n DropdownMenuButtons: {\r\n NewButton: { label: 'Add New Master', iconClassName: 'fa fa-plus', className: 'dropdown-button-blue', buttonType: 'New', visible: true, order: 2, expose: true },\r\n ExpTxtButton: { label: 'Export List', iconClassName: 'fa fa-file-text mr-10', className: 'dropdown-button-blue', buttonType: 'ExpTxt', visible: false, order: 4, expose: false },\r\n CopyButton: { label: 'Copy Master Record', iconClassName: 'fa fa-clipboard mr-10', className: 'dropdown-button-blue', buttonType: 'Copy', visible: true, order: 3, expose: false },\r\n DeleteButton: { label: 'Delete Master Record', iconClassName: 'fa fa-trash mr-10', className: 'dropdown-button-red', buttonType: 'Delete', visible: true, order: 5, expose: false },\r\n // InsRowButton: { label: 'Add Detail Record', iconClassName: 'fa fa-plus mr-10', className: 'dropdown-button-blue', buttonType: 'InsRow', visible: false, order: 6, expose: false },\r\n DrillDownButton: { label: 'View Detail List', iconClassName: 'fa fa-list-ul mr-10', className: 'dropdown-button-blue', buttonType: 'DrillDown', visible: false, order: 1, expose: false },\r\n },\r\n RowButtons: {\r\n DrillDownButton: { label: 'View Detail List', iconClassName: 'fa fa-list-ul', exposedClassName: 'edit-icon', className: 'dropdown-button-blue', buttonType: 'DrillDown', visible: true, order: 2, expose: false },\r\n InsRowButton: { label: 'Add', labelLong: 'Add New Item', iconClassName: 'fa fa-plus', exposedClassName: 'edit-icon', className: 'dropdown-button-blue', buttonType: 'InsRow', visible: true, order: 1, expose: false },\r\n EditHdrButton: { label: 'View Master Record', iconClassName: 'fa fa-eye', exposedClassName: 'edit-icon', className: 'dropdown-button-blue', buttonType: 'EditHdr', visible: true, order: 3, expose: false },\r\n CopyButton: { label: 'Copy Master Record', iconClassName: 'fa fa-clipboard', exposedClassName: 'edit-icon', className: 'dropdown-button-blue', buttonType: 'Copy', visible: false, order: 4, expose: false },\r\n DeleteButton: { label: 'Delete Master Record', iconClassName: 'fa fa-trash', exposedClassName: 'edit-icon', className: 'dropdown-button-red', buttonType: 'Delete', visible: true, order: 5, expose: false },\r\n },\r\n BottomButtons: {\r\n InsRowButton: { label: 'Add Detail Record', buttonType: 'InsRow', visible: true, order: 1, expose: true },\r\n }\r\n },\r\n Mst: {\r\n DropdownMenuButtons: {\r\n SaveCloseButton: { label: 'Save&Close Master', iconClassName: 'fa fa-envelope mr-10', className: 'dropdown-button-blue', buttonType: 'SaveClose', visible: true, order: 2, expose: true },\r\n CopyButton: { label: 'Copy Master Record', iconClassName: 'fa fa-clipboard mr-10', className: 'dropdown-button-blue', buttonType: 'Copy', visible: true, order: 3, expose: false },\r\n PrintButton: { label: 'Print Master Record', iconClassName: 'fa fa-print mr-10', className: 'dropdown-button-blue', buttonType: 'Print', visible: false, order: 4, expose: false },\r\n DeleteButton: { label: 'Delete Master Record', iconClassName: 'fa fa-trash mr-10', className: 'dropdown-button-red', buttonType: 'Delete', visible: true, order: 5, expose: false },\r\n InsRowButton: { label: 'Add Detail Record', iconClassName: 'fa fa-plus mr-10', className: 'dropdown-button-blue', buttonType: 'InsRow', visible: false, order: 6, expose: false },\r\n DrillDownButton: { label: 'View Detail List', iconClassName: 'fa fa-list-ul mr-10', className: 'dropdown-button-blue', buttonType: 'DrillDown', visible: false, order: 1, expose: false },\r\n },\r\n BottomButtons: {\r\n SaveButton: { label: 'Save', visible: true, buttonType: 'Save', order: 1, expose: true },\r\n SaveCloseButton: { label: 'Save&Close Master', buttonType: 'SaveClose', visible: true, order: 2, expose: true },\r\n DrillDownButton: { label: 'View Detail Record', buttonType: 'DrillDown', visible: false, order: 3, expose: true },\r\n DeleteButton: { label: 'Delete Master Record', buttonType: 'Delete', visible: false, order: 4, expose: false },\r\n CopyButton: { label: 'Copy Master Record', buttonType: 'Copy', visible: false, order: 5, expose: true },\r\n }\r\n },\r\n DtlList: {\r\n DropdownMenuButtons: {\r\n CopyRowButton: { label: 'Copy Detail Record', visible: true, iconClassName: 'fa fa-clipboard mr-10', className: 'dropdown-button-blue', buttonType: 'CopyRow', order: 1, expose: false },\r\n DelRowButton: { label: 'Delete Detail Record', visible: true, iconClassName: 'fa fa-trash mr-10', className: 'dropdown-button-red', buttonType: 'DelRow', order: 2, expose: false },\r\n InsRowButton: { label: 'Add', labelLong: 'Add Detail', buttonType: 'InsRow', visible: true, iconClassName: 'fa fa-plus', className: 'dropdown-button-blue', order: 3, expose: true },\r\n },\r\n RowButtons: {\r\n DelRowButton: { label: 'Delete Detail Record', visible: true, iconClassName: 'fa fa-trash', exposedClassName: 'edit-icon', className: 'dropdown-button-red', buttonType: 'DelRow', order: 3, expose: false },\r\n CopyRowButton: { label: 'Copy Detail Record', visible: true, iconClassName: 'fa fa-clipboard', exposedClassName: 'edit-icon', className: 'dropdown-button-blue', buttonType: 'CopyRow', order: 2, expose: false },\r\n EditRowButton: { label: 'View Detail Record', visible: true, iconClassName: 'fa fa-eye', exposedClassName: 'edit-icon', className: 'dropdown-button-blue', buttonType: 'EditRow', order: 1, expose: false },\r\n },\r\n BottomButtons: {\r\n InsRowButton: { label: 'Add Detail Record', visible: true, buttonType: 'InsRow', order: 1, expose: true },\r\n DelRowButton: { label: 'Delete Detail Record', visible: false, buttonType: 'DelRow', order: 3, expose: true },\r\n CopyRowButton: { label: 'Copy Detail Record', visible: false, buttonType: 'CopyRow', order: 5, expose: true },\r\n }\r\n },\r\n Dtl: {\r\n DropdownMenuButtons: {\r\n CopyRowButton: { label: 'Copy Detail Record', visible: true, iconClassName: 'fa fa-clipboard mr-10', className: 'dropdown-button-blue', buttonType: 'CopyRow', order: 1, expose: false },\r\n DelRowButton: { label: 'Delete Detail Record', visible: true, iconClassName: 'fa fa-trash mr-10', className: 'dropdown-button-red', buttonType: 'DelRow', order: 2, expose: false },\r\n },\r\n BottomButtons: {\r\n NewSaveDtlButton: { label: 'Save & New Detail Record', buttonType: 'NewSaveDtl', order: 1, visible: false, expose: true },\r\n// SaveDtlButton: { label: 'Save', buttonType: 'SaveDtl', order: 2, visible: true, expose: true },\r\n// SaveCloseDtlButton: { label: 'Save & Close Detail', buttonType: 'SaveCloseDtl', visible: false, order: 3, expose: true },\r\n SaveButton: { label: 'Save', buttonType: 'Save', order: 2, visible: true, expose: true },\r\n DelRowButton: { label: 'Delete Detail', buttonType: 'DelRow', visible: false, order: 4, expose: true },\r\n }\r\n }\r\n }\r\n\r\n export default _ScreenButtonDef;","import { getAsyncTypes } from '../helpers/actionType';\r\nimport { dispatchWithNotification } from '../redux/Notification';\r\nimport {\r\n objectListToDict, mergeArray\r\n , makeMultiDocFileObjectFromServer\r\n , reviseMultiDocFileObjectFromServer\r\n , reviseDocList, removeDocList\r\n} from '../helpers/utils';\r\nimport { RememberCurrentAsync, GetCurrentAsync } from './Persist';\r\nimport ButtonDef from './_ScreenButtonDef';\r\nimport log from '../helpers/logger';\r\nimport { } from '../helpers/actionType';\r\n\r\nexport const initialRintagiScreenReduxState = {\r\n\r\n AuthRow: [{}],\r\n AuthCol: {},\r\n ColumnLabel: {},\r\n Label: {\r\n SearchListTitle: \"Search List\",\r\n SearchListSubtitle: \"Please enter the master record\",\r\n SearchListNaviBar: \"Search List Navigator\",\r\n MstTitle: \"Edit Master Record Title\",\r\n MstSubtitle: \"Edit Master Record SubTitle\",\r\n MstNaviBar: \"Master Navigator\",\r\n MstFound: \"Reports found\",\r\n DtlListTitle: \"Detail list Title\",\r\n DtlListSubtitle: \"List of detail inside current master\",\r\n DtlListFilterLabel: \"Filter\",\r\n DltListFilteredCountLabel: \"Dtl records found:\",\r\n DtlListNaviBar: \"Detail List\",\r\n DtlTitle: \"Edit Detail Record\",\r\n DtlSubtitle: \"Enter or update detail\",\r\n DtlNaviBar: \"Detail\",\r\n ViewMoreButton: \"View {0} more\",\r\n HelpButton: \"Help\",\r\n UnSavedPage: \"You have not saved your changes. Are you sure you want to leave?\",\r\n SearchPlaceholder: \"On\",\r\n QuickFilterLabel: \"Quick Filter\",\r\n NoResultsLabel: \"No results found\",\r\n NoDtlMessage: \"No detail record selected\",\r\n AddDtlMessage: \"Click here to add a detail record\",\r\n NoMstMessage: \"No master record selected\",\r\n AddMstMessage: \"Click here to start a new master\",\r\n NewMstLabel: \"New master\",\r\n CancelFileButton: \"Cancel\",\r\n DeleteFileButton: \"Delete\",\r\n FileLabel: \"File\",\r\n },\r\n Buttons: {\r\n ...ButtonDef,\r\n key: Date.now(),\r\n },\r\n MaxImageSize: {\r\n Width: 1024,\r\n Height: 768,\r\n },\r\n SearchList: {\r\n key: Date.now(),\r\n data: [],\r\n },\r\n Mst: {},\r\n NewMst: {},\r\n EditDtl: {},\r\n NewDtl: {},\r\n DtlList: {\r\n key: Date.now(),\r\n list: [],\r\n },\r\n ddl: {},\r\n ScreenFilter: [],\r\n ScreenCriteria: {\r\n SearchStr: '',\r\n TopN: 5,\r\n MatchCount: 0,\r\n Increment: 5,\r\n FilterId: 0,\r\n ShowFilter: true,\r\n key: Date.now(),\r\n },\r\n DtlFilter: {\r\n FilterColumnDdl: [],\r\n FilteredColumn: \"_\",\r\n FilteredValue: \"\",\r\n PageSize: 5,\r\n SortColumn: \"\",\r\n SortOrder: \"A\",\r\n ShowFilter: false,\r\n Limit: 5,\r\n },\r\n page_loading: true,\r\n searchlist_loading: false,\r\n saving: false,\r\n initialized: false,\r\n searchListVersion: Date.now(),\r\n mstVersion: Date.now(),\r\n dtlListVersion: Date.now(),\r\n dtlVersion: Date.now(),\r\n};\r\n\r\n/* exported general helper functions(no this nor class) */\r\nexport function GetBottomAction(state) {\r\n return (state || {}).BottomButtons || {};\r\n}\r\nexport function GetRowAction(state) {\r\n return (state || {}).RowButtons || {};\r\n}\r\nexport function GetDropdownAction(state) {\r\n return (state || {}).DropdownMenuButtons || {};\r\n}\r\n\r\n/* internal helper functions */\r\nfunction ReviseButton(button, buttonDef, label) {\r\n if (button) {\r\n const buttonType = buttonDef.ButtonTypeName\r\n if ((button.RowButtons || {})[buttonType + \"Button\"]) {\r\n button.RowButtons[buttonType + \"Button\"].visible = buttonDef.ButtonVisible === \"Y\" && (buttonDef.RowVisible === \"L\" || buttonDef.RowVisible === \"B\");\r\n button.RowButtons[buttonType + \"Button\"].expose = buttonDef.RowVisible === \"B\";\r\n if (buttonDef.ButtonName) button.RowButtons[buttonType + \"Button\"].label = buttonDef.ButtonName;\r\n if (buttonDef.ButtonLongNm) button.RowButtons[buttonType + \"Button\"].labelLong = buttonDef.ButtonLongNm;\r\n if (label) button.RowButtons[buttonType + \"Button\"].label = label;\r\n button.RowButtons[buttonType + \"Button\"].tid = buttonDef.ButtonTypeId;\r\n }\r\n if ((button.DropdownMenuButtons || {})[buttonType + \"Button\"]) {\r\n button.DropdownMenuButtons[buttonType + \"Button\"].visible = buttonDef.ButtonVisible === \"Y\" && (buttonDef.TopVisible === \"L\" || buttonDef.TopVisible === \"B\");\r\n button.DropdownMenuButtons[buttonType + \"Button\"].expose = buttonDef.TopVisible === \"B\";\r\n if (buttonDef.ButtonName) button.DropdownMenuButtons[buttonType + \"Button\"].label = buttonDef.ButtonName;\r\n if (buttonDef.ButtonLongNm) button.DropdownMenuButtons[buttonType + \"Button\"].labelLong = buttonDef.ButtonLongNm;\r\n if (label) button.DropdownMenuButtons[buttonType + \"Button\"].label = label;\r\n button.DropdownMenuButtons[buttonType + \"Button\"].tid = buttonDef.ButtonTypeId;\r\n }\r\n if ((button.BottomButtons || {})[buttonType + \"Button\"]) {\r\n button.BottomButtons[buttonType + \"Button\"].visible = buttonDef.ButtonVisible === \"Y\" && (buttonDef.BotVisible === \"L\" || buttonDef.BotVisible === \"B\");\r\n button.BottomButtons[buttonType + \"Button\"].expose = buttonDef.BotVisible === \"B\";\r\n if (buttonDef.ButtonName) button.BottomButtons[buttonType + \"Button\"].label = buttonDef.ButtonName;\r\n if (buttonDef.ButtonLongNm) button.BottomButtons[buttonType + \"Button\"].labelLong = buttonDef.ButtonLongNm;\r\n if (label) button.BottomButtons[buttonType + \"Button\"].label = label;\r\n button.BottomButtons[buttonType + \"Button\"].tid = buttonDef.ButtonTypeId;\r\n }\r\n }\r\n}\r\n\r\nfunction MakeAutocompleteSearchValue(v) {\r\n return v ? \"**\" + v : \"\";\r\n}\r\n\r\nfunction ReviseScreenButtons(Buttons, ScreenButtons, Label) {\r\n const revisedLabels = Label || {};\r\n return (ScreenButtons || []).reduce(\r\n (b, v, i, _a) => {\r\n const buttonType = v.ButtonTypeName;\r\n const ml = b.MstList;\r\n const m = b.Mst;\r\n const dl = b.DtlList;\r\n const d = b.Dtl;\r\n ReviseButton(b.MstList, v, revisedLabels[buttonType + \"Button\"]);\r\n ReviseButton(b.Mst, v, revisedLabels[buttonType + \"Button\"]);\r\n ReviseButton(b.DtlList, v, revisedLabels[buttonType + \"Button\"]);\r\n ReviseButton(b.Dtl, v, revisedLabels[buttonType + \"Button\"]);\r\n return b;\r\n },\r\n JSON.parse(JSON.stringify(Buttons))\r\n )\r\n}\r\n\r\nfunction RefreshMst(mst, refresh) { return refresh ? { ...mst, key: Date.now() } : mst }\r\nfunction RefreshEditDtl(dtl, refresh) { return refresh ? { ...dtl, key: Date.now() } : dtl }\r\nfunction ReviseSearchListSelection(SearchList, payload, masterKeyColumnName) {\r\n return SearchList\r\n .filter(v => v.key || v[masterKeyColumnName])\r\n .map(\r\n (v, i) => {\r\n return {\r\n ...v,\r\n isSelected: (payload.SelectedKeyId && payload.SelectedKeyId === (v[masterKeyColumnName] || v.key))\r\n }\r\n }\r\n )\r\n}\r\n\r\n\r\nfunction ExpandDtlFilter(authCol, columnLabel) {\r\n const cols = authCol\r\n .filter((v) => v.MasterTable === \"N\" && v.ColVisible !== \"N\" && !v.DisplayName.match(/Button/g))\r\n .map((v) => ({ ColName: v.ColName, ColumnHeader: (columnLabel[v.ColName] || {}).ColumnHeader || v.ColName }));\r\n return cols;\r\n}\r\n\r\nfunction AutoCompleteSearch({ dispatch, v, topN, filterOn, searchApi, SucceededActionType, FailedActionType, ColumnName, forDtl, forMst }) {\r\n\r\n const keyLookup = (v || '').startsWith(\"**\")\r\n ? searchApi(v, topN, filterOn)\r\n : new Promise((resolve) => resolve({ data: { data: [] } }));\r\n const promises = [\r\n keyLookup,\r\n searchApi((v || '').startsWith(\"**\") ? null : v, topN, filterOn),\r\n ];\r\n return Promise.all(promises)\r\n .then(([keyLookup, ret]) => {\r\n dispatchWithNotification(dispatch, {\r\n type: SucceededActionType,\r\n payload: {\r\n ColumnName: ColumnName,\r\n forDtl: forDtl,\r\n forMst: forMst,\r\n data: mergeArray(keyLookup.data.data, ret.data.data, (o) => o.key),\r\n backfill: (v || '').startsWith(\"**\"),\r\n }\r\n });\r\n }\r\n , (err) => {\r\n log.trace(err);\r\n })\r\n .catch(err => {\r\n log.trace(err);\r\n })\r\n}\r\n\r\nexport class RintagiScreenRedux {\r\n GetScreenName() { throw new TypeError(this + \" Must implement GetScreenName function\"); }\r\n GetMstKeyColumnName() { throw new TypeError(this + \" Must implement GetMstKeyColumnName function\"); }\r\n GetDtlKeyColumnName() { throw new TypeError(this + \" Must implement GetDtlKeyColumnName function\"); }\r\n GetPersistDtlName() { throw new TypeError(this + \" Must implement GetPersistDtlName function\"); }\r\n GetPersistMstName() { throw new TypeError(this + \" Must implement GetPersistMstName function\"); }\r\n GetWebService() { throw new TypeError(this + \" Must implement GetWebSerice function\"); }\r\n GetReducerActionTypePrefix() { throw new TypeError(this + \" Must implement GetReducerActionTypePrefix function\"); };\r\n GetActionType(actionTypeName) { throw new TypeError(this + \" Must implement GetActionType function\"); }\r\n GetInitState() { throw new TypeError(this + \" Must implement GetInitState function\"); };\r\n GetDefaultDtl(state) { throw new TypeError(this + \" Must implement GetDefaultDtl function\"); }\r\n ExpandMst(mst, state, copy) { throw new TypeError(this + \" Must implement ExpandMst function\"); };\r\n ExpandDtl(dtlList, copy) { throw new TypeError(this + \" Must implement ExpandDtl function\"); };\r\n SearchListToSelectList(state) { throw new TypeError(this + \" Must implement SearchListToSelectList function\"); }\r\n\r\n /* reducer */\r\n ExpandDtlReducer(dtlList, copy) {\r\n if (!copy) return dtlList;\r\n else return dtlList.map(v => {\r\n return {\r\n ...v,\r\n [this.GetMstKeyColumnName()]: null,\r\n [this.GetDtlKeyColumnName()]: null,\r\n }\r\n });\r\n }\r\n ViewMoreDetailReducer(state, action) {\r\n return {\r\n ...state,\r\n DtlFilter: {\r\n ...state.DtlFilter,\r\n Limit: state.DtlFilter.Limit + state.DtlFilter.PageSize\r\n },\r\n };\r\n }\r\n ToggleMstListFilterReducer(state, action) {\r\n return {\r\n ...state,\r\n ScreenCriteria: {\r\n ...state.ScreenCriteria,\r\n ShowFilter: typeof action.show === \"undefined\" ? !state.ScreenCriteria.ShowFilter : action.show\r\n }\r\n }\r\n }\r\n ToggleDtlListFilterReducer(state, action) {\r\n return {\r\n ...state,\r\n DtlFilter: {\r\n ...state.DtlFilter,\r\n ShowFilter: typeof action.show === \"undefined\" ? !state.DtlFilter.ShowFilter : action.show\r\n }\r\n }\r\n }\r\n ChangeDtlListFilterReducer(state, action) {\r\n const payload = action.payload;\r\n return {\r\n ...state,\r\n DtlFilter: {\r\n ...state.DtlFilter,\r\n FilteredColumn: payload.FilteredColumn || state.DtlFilter.FilteredColumn,\r\n FilteredValue: payload.FilteredValue,\r\n }\r\n }\r\n };\r\n\r\n LoadPageReducer(state, action) {\r\n const actionTypeString = action.type;\r\n\r\n if (actionTypeString.endsWith(\".STARTED\")) {\r\n return { ...state, page_loading: true };\r\n\r\n } else if (actionTypeString.endsWith(\".FAILED\") || actionTypeString.endsWith(\".ENDED\")) {\r\n return { ...state, page_loading: false, access_denied: (action.payload.error || {}).errType === \"access denied error\" };\r\n } else if (actionTypeString.endsWith(\".SUCCEEDED\")) {\r\n\r\n const payload = action.payload;\r\n const revisedState = {\r\n ...state,\r\n AuthCol: payload.AuthCol,\r\n AuthRow: payload.AuthRow,\r\n ColumnLabel: payload.ColumnLabel,\r\n SearchList: {\r\n key: Date.now(),\r\n data: payload.SearchList || [],\r\n },\r\n NewMst: payload.NewMst,\r\n NewDtl: payload.NewDtl,\r\n ScreenFilter: payload.ScreenFilter,\r\n ScreenHlp: payload.ScreenHlp,\r\n ScreenButtonHlp: payload.ScreenButtonHlp,\r\n ScreenCriteria: {\r\n SearchStr: state.ScreenCriteria.SearchStr,\r\n FilterId: state.ScreenCriteria.FilterId,\r\n Increment: state.ScreenCriteria.Increment,\r\n ...payload.ScreenCriteria,\r\n TopN: state.ScreenCriteria.TopN,\r\n key: Date.now()\r\n },\r\n ScreenCriDdl: this.ScreenCriDdl(state, action),\r\n Label: {\r\n ...state.Label,\r\n ...payload.Label,\r\n },\r\n SystemLabel: {\r\n ...state.SystemLabel,\r\n ...payload.SystemLabel,\r\n },\r\n ddl:\r\n {\r\n ...state.ddl,\r\n ...this.ScreenDdl(state, action),\r\n },\r\n DtlFilter: {\r\n ...state.DtlFilter,\r\n FilterColumnDdl: [{ ColName: '_', ColumnHeader: 'All' }, ...ExpandDtlFilter(payload.AuthCol, payload.ColumnLabel)],\r\n },\r\n page_loading: false,\r\n initialized: true,\r\n access_denied: false,\r\n Buttons: {\r\n ...ReviseScreenButtons(state.Buttons, payload.ScreenButtonHlp, payload.Label),\r\n key: Date.now(),\r\n },\r\n //key: (payload.ScopeKey || {}).key,\r\n key: payload.ScopeKey,\r\n };\r\n return (revisedState);\r\n }\r\n };\r\n GetSearchListReducer(state, action) {\r\n const actionTypeString = action.type;\r\n if (actionTypeString.endsWith(\".STARTED\")) {\r\n return { ...state, searchlist_loading: true };\r\n\r\n } else if (actionTypeString.endsWith(\".FAILED\") || actionTypeString.endsWith(\".ENDED\")) {\r\n return { ...state, searchlist_loading: false };\r\n }\r\n else if (actionTypeString.endsWith(\".SUCCEEDED\")) {\r\n const payload = action.payload;\r\n return {\r\n ...state,\r\n SearchList: {\r\n key: Date.now(),\r\n data: ReviseSearchListSelection(payload.SearchList, payload, this.GetMstKeyColumnName()),\r\n },\r\n ScreenCriteria: {\r\n ...state.ScreenCriteria,\r\n SearchStr: payload.SearchStr,\r\n TopN: payload.TopN,\r\n Total: payload.Total,\r\n MatchCount: payload.MatchCount,\r\n FilterId: payload.FilterId,\r\n key: Date.now(),\r\n },\r\n searchlist_loading: false,\r\n searchListVersion: Date.now(),\r\n };\r\n }\r\n };\r\n SelectMstReducer(state, action) {\r\n const payload = action.payload;\r\n return {\r\n ...state,\r\n Mst: {\r\n ...state.Mst,\r\n },\r\n SearchList: {\r\n key: Date.now(),\r\n data: ReviseSearchListSelection((state.SearchList || {}).data, payload, this.GetMstKeyColumnName()),\r\n },\r\n searchListVersion: Date.now(),\r\n mstVersion: Date.now(),\r\n };\r\n };\r\n GetMstReducer(state, action) {\r\n const actionTypeString = action.type;\r\n if (actionTypeString.endsWith(\".STARTED\")) {\r\n return { ...state, page_loading: true };\r\n\r\n } else if (actionTypeString.endsWith(\".FAILED\") || actionTypeString.endsWith(\".ENDED\")) {\r\n return { ...state, page_loading: false };\r\n }\r\n else if (actionTypeString.endsWith(\".SUCCEEDED\")) {\r\n const payload = action.payload;\r\n const mstKeyColumnName = this.GetMstKeyColumnName();\r\n return {\r\n ...state\r\n , Mst: this.ExpandMst(payload.Mst, state, payload.copy)\r\n , SearchList: {\r\n key: Date.now(),\r\n data: ReviseSearchListSelection((state.SearchList || {}).data, { ...payload, SelectedKeyId: payload.Mst[mstKeyColumnName] }, mstKeyColumnName)\r\n }\r\n , EditDtl: {\r\n ...this.GetDefaultDtl(state),\r\n key: Date.now()\r\n }\r\n , page_loading: false\r\n , searchListVersion: Date.now()\r\n , mstVersion: Date.now()\r\n };\r\n }\r\n };\r\n GetDtlListReducer(state, action) {\r\n const payload = action.payload;\r\n return {\r\n ...state\r\n , DtlList: {\r\n key: Date.now(),\r\n data: this.ExpandDtl(payload.Dtl, payload.copy)\r\n },\r\n };\r\n };\r\n\r\n GetDdlReducer(state, action) {\r\n const actionTypeString = action.type;\r\n if (actionTypeString.endsWith(\".STARTED\")) {\r\n return state;\r\n } else if (actionTypeString.endsWith(\".FAILED\") || actionTypeString.endsWith(\".ENDED\")) {\r\n return state;\r\n } else if (actionTypeString.endsWith(\".SUCCEEDED\")) {\r\n const payload = action.payload;\r\n return {\r\n ...state,\r\n ddl:\r\n {\r\n ...state.ddl,\r\n [payload.ColumnName]: payload.data || state.ddl[payload.ColumnName]\r\n },\r\n EditDtl: RefreshEditDtl(state.EditDtl, payload.forDtl && payload.backfill),\r\n Mst: RefreshMst(state.Mst, payload.forMst && payload.backfill),\r\n };\r\n }\r\n }\r\n\r\n GetColumnOnDemandReducer(state, action) {\r\n const actionTypeString = action.type;\r\n if (actionTypeString.endsWith(\".STARTED\")) {\r\n return state;\r\n } else if (actionTypeString.endsWith(\".FAILED\") || actionTypeString.endsWith(\".ENDED\")) {\r\n return state;\r\n } else if (actionTypeString.endsWith(\".SUCCEEDED\")) {\r\n const payload = action.payload;\r\n if (payload.forMst) {\r\n return {\r\n ...state,\r\n Mst: {\r\n ...state.Mst,\r\n [payload.ColumnName]: payload.data,\r\n key: Date.now()\r\n }\r\n };\r\n\r\n }\r\n else {\r\n return {\r\n ...state,\r\n EditDtl: {\r\n ...state.EditDtl,\r\n [payload.ColumnName]: payload.data,\r\n key: Date.now()\r\n }\r\n };\r\n }\r\n }\r\n }\r\n GetDocumentListReducer(state, action) {\r\n const actionTypeString = action.type;\r\n if (actionTypeString.endsWith(\".STARTED\")) {\r\n return state;\r\n } else if (actionTypeString.endsWith(\".FAILED\") || actionTypeString.endsWith(\".ENDED\")) {\r\n return state;\r\n } else if (actionTypeString.endsWith(\".SUCCEEDED\")) {\r\n const payload = action.payload;\r\n if (payload.forMst) {\r\n return {\r\n ...state,\r\n Mst: {\r\n ...state.Mst,\r\n [(payload.reduxColumnName || payload.ColumnName)]: ((payload || {}).docList || []).map((o) => ({ ...makeMultiDocFileObjectFromServer(o), MasterId: payload.MasterId })),\r\n key: Date.now()\r\n }\r\n };\r\n\r\n }\r\n else {\r\n return {\r\n ...state,\r\n EditDtl: {\r\n ...state.EditDtl,\r\n [(payload.reduxColumnName || payload.ColumnName)]: ((payload || {}).docList || []).map((o) => ({ ...makeMultiDocFileObjectFromServer(o), MasterId: payload.MasterId })),\r\n key: Date.now()\r\n }\r\n };\r\n }\r\n }\r\n }\r\n GetDocumentContentReducer(state, action) {\r\n const actionTypeString = action.type;\r\n if (actionTypeString.endsWith(\".STARTED\")) {\r\n return state;\r\n } else if (actionTypeString.endsWith(\".FAILED\") || actionTypeString.endsWith(\".ENDED\")) {\r\n return state;\r\n } else if (actionTypeString.endsWith(\".SUCCEEDED\")) {\r\n const payload = action.payload;\r\n if (payload.forMst) {\r\n return {\r\n ...state,\r\n Mst: {\r\n ...state.Mst,\r\n [(payload.reduxColumnName || payload.ColumnName)]: reviseMultiDocFileObjectFromServer((state.Mst || {})[(payload.reduxColumnName || payload.ColumnName)], payload.result),\r\n key: Date.now()\r\n }\r\n };\r\n\r\n }\r\n else {\r\n return {\r\n ...state,\r\n EditDtl: {\r\n ...state.EditDtl,\r\n [(payload.reduxColumnName || payload.ColumnName)]: reviseMultiDocFileObjectFromServer((state.EditDtl || {})[(payload.reduxColumnName || payload.ColumnName)], payload.result),\r\n key: Date.now()\r\n }\r\n };\r\n }\r\n }\r\n }\r\n AddDocumentContentReducer(state, action) {\r\n const actionTypeString = action.type;\r\n if (actionTypeString.endsWith(\".STARTED\")) {\r\n return state;\r\n } else if (actionTypeString.endsWith(\".FAILED\") || actionTypeString.endsWith(\".ENDED\")) {\r\n return state;\r\n } else if (actionTypeString.endsWith(\".SUCCEEDED\")) {\r\n const payload = action.payload;\r\n if (payload.forMst) {\r\n return {\r\n ...state,\r\n Mst: {\r\n ...state.Mst,\r\n [(payload.reduxColumnName || payload.ColumnName)]: reviseDocList((state.Mst || {})[(payload.reduxColumnName || payload.ColumnName)], { ...payload.src, ...payload.result }),\r\n key: Date.now()\r\n }\r\n };\r\n\r\n }\r\n else {\r\n return {\r\n ...state,\r\n EditDtl: {\r\n ...state.EditDtl,\r\n [(payload.reduxColumnName || payload.ColumnName)]: reviseDocList((state.EditDtl || {})[(payload.reduxColumnName || payload.ColumnName)], { ...payload.src, ...payload.result }),\r\n key: Date.now()\r\n }\r\n };\r\n }\r\n }\r\n }\r\n DelDocumentContentReducer(state, action) {\r\n const actionTypeString = action.type;\r\n if (actionTypeString.endsWith(\".STARTED\")) {\r\n return state;\r\n } else if (actionTypeString.endsWith(\".FAILED\") || actionTypeString.endsWith(\".ENDED\")) {\r\n return state;\r\n } else if (actionTypeString.endsWith(\".SUCCEEDED\")) {\r\n const payload = action.payload;\r\n if (payload.forMst) {\r\n return {\r\n ...state,\r\n Mst: {\r\n ...state.Mst,\r\n [(payload.reduxColumnName || payload.ColumnName)]: removeDocList((state.Mst || {})[(payload.reduxColumnName || payload.ColumnName)], payload.result.docIdList),\r\n key: Date.now()\r\n }\r\n };\r\n\r\n }\r\n else {\r\n return {\r\n ...state,\r\n EditDtl: {\r\n ...state.EditDtl,\r\n [(payload.reduxColumnName || payload.ColumnName)]: removeDocList((state.EditDtl || {})[(payload.reduxColumnName || payload.ColumnName)], payload.result.docIdList),\r\n key: Date.now()\r\n }\r\n };\r\n }\r\n }\r\n }\r\n EditDtlReducer(state, action) {\r\n const payload = action.payload;\r\n return {\r\n ...state\r\n ,\r\n EditDtl: {\r\n ...this.GetDefaultDtl(state),\r\n ...payload.dtl,\r\n ...payload.copy ? { [this.GetDtlKeyColumnName()]: null } : {},\r\n key: Date.now()\r\n }\r\n };\r\n };\r\n SaveMstReducer(state, action) {\r\n const actionTypeString = action.type;\r\n const payload = action.payload;\r\n if (actionTypeString.endsWith(\".STARTED\")) {\r\n return { ...state, page_saving: true, submittedOn: Date.now() };\r\n } else if (actionTypeString.endsWith(\".FAILED\") || actionTypeString.endsWith(\".ENDED\")) {\r\n return { ...state, page_saving: false, };\r\n } else if (actionTypeString.endsWith(\".SUCCEEDED\")) {\r\n return {\r\n ...state\r\n , Mst: this.ExpandMst(payload.Mst, state)\r\n , EditDtl:\r\n {\r\n ...(payload.keepDtl ? state.EditDtl : this.GetDefaultDtl(state)),\r\n key: Date.now()\r\n }\r\n , page_saving: false\r\n , page_loading: payload.deferredRelease ? true : state.page_loading\r\n };\r\n }\r\n\r\n };\r\n SaveCriReducer(state, action) {\r\n const actionTypeString = action.type;\r\n if (actionTypeString.endsWith(\".STARTED\")) {\r\n return { ...state, page_saving: true };\r\n\r\n } else if (actionTypeString.endsWith(\".FAILED\") || actionTypeString.endsWith(\".ENDED\")) {\r\n return { ...state, page_saving: false };\r\n }\r\n else if (actionTypeString.endsWith(\".SUCCEEDED\"))\r\n return {\r\n ...state,\r\n Mst: {\r\n ...state.Mst,\r\n key: Date.now()\r\n },\r\n ScreenCriteria: this.ReviseScreenCri(state, action),\r\n page_saving: false\r\n };\r\n };\r\n\r\n /* general selectors */\r\n GetDefaultMst(searchList, state) {\r\n const mst = searchList.reduce((r, v, i, a) => {\r\n return (v.isSelected || (i === 0) ? v : r);\r\n }, {});\r\n return mst;\r\n }\r\n LoadPageStaticData(dispatch, apiService, user, current) {\r\n const LOAD_PAGE = this.GetActionType(\"LOAD_PAGE\");\r\n const isInitialized = current.initialized;\r\n const scopeKey = current.key;\r\n const scope = (({ CompanyId, ProjectId, SystemId, CultureId, key }) => ({ CompanyId, ProjectId, SystemId, CultureId, key }))(user || {});\r\n const screenName = this.GetScreenName();\r\n const _this = this;\r\n\r\n if (isInitialized && scopeKey && scopeKey >= user.key) {\r\n return new Promise(function (resolve, reject) {\r\n resolve({\r\n SystemLabel: current.SystemLabel,\r\n AuthCol: current.AuthCol,\r\n AuthRow: current.AuthRow,\r\n ColumnLabel: current.ColumnLabel,\r\n ScreenHlp: current.ScreenHlp,\r\n ScreenButtonHlp: current.ScreenButtonHlp,\r\n Label: current.Label,\r\n NewMst: current.NewMst,\r\n NewDtl: current.NewDtl,\r\n ..._this.ResolveDdlPromise(current),\r\n })\r\n })\r\n }\r\n else {\r\n\r\n // below should only happens once\r\n dispatchWithNotification(dispatch, { type: LOAD_PAGE.STARTED, payload: {} });\r\n const promises = [\r\n apiService.GetSystemLabels('cSystem'),\r\n apiService.GetAuthCol(scope),\r\n apiService.GetAuthRow(scope),\r\n apiService.GetScreenLabel(scope),\r\n apiService.GetScreenHlp(scope),\r\n apiService.GetScreenFilter(scope),\r\n apiService.GetScreenCriteria(scope),\r\n apiService.GetScreenButtonHlp(scope),\r\n apiService.GetLabels(screenName),\r\n apiService.GetNewMst(),\r\n apiService.GetNewDtl(),\r\n ..._this.GetScreenDdlApiPromise(apiService, scope),\r\n ..._this.GetCriDdlApiPromise(apiService, scope),\r\n ]\r\n\r\n return Promise.all(promises)\r\n .then(\r\n ([SystemLabels, AuthCol, AuthRow, ColumnLabel, ScreenHlp, ScreenFilter, ScreenCriteria, ScreenButtonHlp, Labels, NewMst, NewDtl, ...Rest\r\n ]) => {\r\n const payload = {\r\n SystemLabel: objectListToDict(SystemLabels.data.data, \"LabelKey\", (v) => (v.LabelText)),\r\n AuthCol: AuthCol.data.data,\r\n AuthRow: AuthRow.data.data,\r\n ColumnLabel: ColumnLabel.data.data,\r\n ScreenHlp: ScreenHlp.data,\r\n ScreenFilter: ScreenFilter.data.data,\r\n ScreenCriteria: ScreenCriteria.data.data,\r\n ScreenButtonHlp: ScreenButtonHlp.data.data,\r\n Label: objectListToDict(Labels.data.data, \"LabelKey\", (v) => (v.LabelText)),\r\n NewMst: NewMst.data[0],\r\n NewDtl: NewDtl.data[0],\r\n ..._this.ResolveDdlPromise(Rest),\r\n ScopeKey: scope.key || Date.now(),\r\n }\r\n\r\n dispatchWithNotification(dispatch, {\r\n type: LOAD_PAGE.SUCCEEDED,\r\n payload: payload\r\n });\r\n return payload;\r\n }\r\n ,\r\n (error) => {\r\n log.debug(error);\r\n dispatchWithNotification(dispatch, { type: LOAD_PAGE.FAILED, payload: { error: error } })\r\n return Promise.reject(error);\r\n }\r\n )\r\n .catch(error => {\r\n log.debug(error);\r\n return Promise.reject(error);\r\n });\r\n }\r\n }\r\n\r\n\r\n /* exposed action creators via 'this' */\r\n LoadPage(src, options) {\r\n const screenName = this.GetScreenName();\r\n const webServiceName = screenName + \"Service\";\r\n const persistMstName = this.GetPersistMstName();\r\n const mstKeyColumeName = this.GetMstKeyColumnName();\r\n return (async (dispatch, getState, { webApi }) => {\r\n const apiService = (webApi || {})[webServiceName] || this.GetWebService();\r\n const currentRedux = getState()[screenName] || {};\r\n const user = (getState().auth || {}).user; // use with cautions, if possible should be passed in from callers if the coupling is tight\r\n const { mstId, dtlId, reloadMst, reloadMstList, reloadDtl } = options;\r\n const searchStr = currentRedux.ScreenCriteria.SearchStr;\r\n const topN = ((options || {}).topN) || currentRedux.ScreenCriteria.TopN;\r\n const filterId = ((options || {}).FilterId) || currentRedux.ScreenCriteria.FilterId;\r\n const isInitialized = currentRedux.initialized;\r\n const specificMstId = typeof mstId !== 'undefined' && mstId !== '_';\r\n // const rememberedMst = GetCurrent(persistMstName);\r\n const rememberedMst = await GetCurrentAsync(persistMstName);\r\n const rememberedMstId = (mstId === \"_\") && (rememberedMst || {})[mstKeyColumeName];\r\n const _this = this;\r\n const skipMetaData = (options || {}).SkipMetaData === true || (options || {}).SkipMetaData === 'Y';\r\n const skipSupportingData = (options || {}).SkipSupportingData === true || (options || {}).SkipSupportingData === 'Y';\r\n\r\n // shortcut due to programmer laziness\r\n if (skipMetaData\r\n || skipSupportingData\r\n // only first time and in some situation multiple download is better\r\n // for low latency network\r\n || (false && !isInitialized)\r\n ) {\r\n const currentKeyId = specificMstId ? mstId\r\n : (typeof mstId !== 'undefined'\r\n ? (currentRedux.Mst || {})[mstKeyColumeName] || rememberedMstId\r\n : undefined);\r\n return this.LoadInitPage({\r\n MstId: mstId !== '!' ? currentKeyId : null,\r\n TopN: topN,\r\n ...options,\r\n FirstOrDefault: options.FirstOrDefault || (mstId && (mstId !== '_' || rememberedMstId)),\r\n })(dispatch, getState, { webApi })\r\n .then(ret => {\r\n return _this.LoadSearchList(src, mstId, options, searchStr, topN, filterId)(dispatch, getState, { webApi });\r\n })\r\n .catch(error => {\r\n return Promise.reject(error);\r\n })\r\n }\r\n\r\n return this.LoadPageStaticData(dispatch, apiService, user, currentRedux)\r\n .then(\r\n (payload) => {\r\n return this.LoadSearchList(src, mstId, options, searchStr, topN, filterId)(dispatch, getState, { webApi });\r\n }\r\n ,\r\n (error) => {\r\n log.debug(error);\r\n return Promise.reject(error);\r\n })\r\n .catch(error => {\r\n return Promise.reject(error);\r\n });\r\n }).bind(this);\r\n }\r\n\r\n LoadInitPage(options, user = {}, current = {}) {\r\n const screenName = this.GetScreenName();\r\n const webServiceName = screenName + \"Service\";\r\n const LOAD_PAGE = this.GetActionType(\"LOAD_PAGE\");\r\n const scopeKey = current.key;\r\n const scope = (({ CompanyId, ProjectId, SystemId, CultureId, key }) => ({ CompanyId, ProjectId, SystemId, CultureId, key }))(user || {});\r\n const _this = this;\r\n return ((dispatch, getState, { webApi }) => {\r\n const apiService = (webApi || {})[webServiceName] || this.GetWebService();\r\n const current = getState()[screenName] || {};\r\n const user = (getState().auth || {}).user; // use with cautions, if possible should be passed in from callers if the coupling is tight\r\n const GET_SEARCH_LIST = this.GetActionType(\"GET_SEARCH_LIST\");\r\n const loadPageOptions = {\r\n ...options,\r\n SkipMetaData: options.SkipMetaData === true || options.SkipMetaData == 'Y' ? 'Y' : 'N',\r\n SkipSupportingData: options.SkipSupportingData === true || options.SkipSupportingData == 'Y' ? 'Y' : 'N',\r\n SkipOnDemandData: options.SkipOnDemandData === true || options.SkipOnDemandData == 'Y' ? 'Y' : 'N',\r\n ReAuth: options.ReAuth === true || options.ReAuth == 'Y' ? 'Y' : 'N',\r\n FirstOrDefault: options.FirstOrDefault === true || options.FirstOrDefault == 'Y' ? 'Y' : 'N',\r\n }\r\n dispatchWithNotification(dispatch, { type: GET_SEARCH_LIST.STARTED, payload: {} });\r\n const promises = Promise.all([\r\n apiService.LoadInitPage(loadPageOptions),\r\n ...(!options.SkipSupportingData && _this.GetCriDdlApiPromise(apiService, scope)),\r\n ]);\r\n\r\n return promises\r\n .then(([ret, ...rest]) => {\r\n if (!options.skipMetaData) {\r\n const i = 0;\r\n const ScreenCriDdl =\r\n _this.ScreenCriDdlDef\r\n .filter(c => c.payloadDdlName)\r\n .reduce((a, v, i) => { a[v.payloadDdlName] = rest[i].data.data; return a; }, {})\r\n const payload = {\r\n SystemLabel: objectListToDict(ret.data.SystemLabels || [], \"LabelKey\", (v) => (v.LabelText)),\r\n AuthCol: ret.data.AuthCol,\r\n AuthRow: ret.data.AuthRow,\r\n ColumnLabel: objectListToDict(ret.data.ColumnDef, (v) => (v.ColumnName + v.TableId), (v) => (v)),\r\n ScreenHlp: (ret.data.ScreenHlp || [])[0] || {},\r\n ScreenFilter: ret.data.ScreenFilter,\r\n ScreenCriteria: objectListToDict(ret.data.ScreenCriteria || [], \"ColumnName\", (v) => (v)),\r\n ScreenButtonHlp: ret.data.ScreenButtonHlp,\r\n Label: objectListToDict(ret.data.Labels || [], \"LabelKey\", (v) => (v.LabelText)),\r\n NewMst: ret.data.NewMst || {},\r\n NewDtl: ret.data.NewDtl || {},\r\n ScopeKey: scope.key || Date.now(),\r\n ...(ret.data.Ddl || {}),\r\n ScreenCriDdl: ScreenCriDdl,\r\n }\r\n\r\n dispatchWithNotification(dispatch, {\r\n type: LOAD_PAGE.SUCCEEDED,\r\n payload: payload\r\n });\r\n }\r\n\r\n dispatchWithNotification(dispatch, {\r\n type: GET_SEARCH_LIST.SUCCEEDED,\r\n payload: {\r\n SearchStr: '',\r\n TopN: 50,\r\n Total: (ret.data.SearchList || []).length,\r\n FilterId: '',\r\n SearchList: ret.data.SearchList || [],\r\n SelectedKeyId: '',\r\n MatchCount: (ret.data.SearchList || []).length + 5,\r\n }\r\n });\r\n return Promise.resolve(ret);\r\n })\r\n .catch(\r\n (error => {\r\n dispatchWithNotification(dispatch, { type: GET_SEARCH_LIST.FAILED, payload: { error: error } })\r\n return Promise.reject(error);\r\n })\r\n )\r\n }).bind(this);\r\n }\r\n\r\n LoadSearchList(src, mstId, options, searchStr, topN, filterId) {\r\n const screenName = this.GetScreenName();\r\n const GET_SEARCH_LIST = this.GetActionType(\"GET_SEARCH_LIST\");\r\n const webServiceName = screenName + \"Service\";\r\n const persistMstName = this.GetPersistMstName();\r\n const mstKeyColumeName = this.GetMstKeyColumnName();\r\n const searchListApiName = this.GetApiName(\"GET_SEARCH_LIST\");\r\n return (async (dispatch, getState, { webApi }) => {\r\n const apiService = (webApi || {})[webServiceName] || this.GetWebService();\r\n const current = getState()[screenName] || {};\r\n const { dtlId, reloadMst, reloadMstList, reloadDtl, refreshCri } = options;\r\n const rememberedMst = await GetCurrentAsync(persistMstName);\r\n const rememberedMstId = (mstId === \"_\" || (refreshCri)) && (rememberedMst || {})[mstKeyColumeName];\r\n const specificKeyId = typeof mstId !== 'undefined' && mstId !== '_';\r\n const currKeyId = specificKeyId ? mstId\r\n : (typeof mstId !== 'undefined'\r\n ? (current.Mst || {})[mstKeyColumeName] || rememberedMstId\r\n : undefined);\r\n dispatchWithNotification(dispatch, { type: GET_SEARCH_LIST.STARTED, payload: {} });\r\n\r\n return apiService[searchListApiName](searchStr, topN, filterId)\r\n .then(\r\n (SearchList => {\r\n return dispatchWithNotification(dispatch, {\r\n type: GET_SEARCH_LIST.SUCCEEDED,\r\n payload: {\r\n SearchStr: searchStr,\r\n TopN: topN,\r\n Total: SearchList.data.total,\r\n FilterId: filterId,\r\n SearchList: SearchList.data.data,\r\n SelectedKeyId: currKeyId,\r\n MatchCount: SearchList.data.matchCount,\r\n }\r\n }).then(\r\n () => {\r\n //this.LoadMst(currKeyId || mstId, src, options)(dispatch, getState, { webApi });\r\n const _currKeyId = mstId === '!' ? ((((SearchList || {}).data || {}).data || [])[0] || {}).key : currKeyId;\r\n const refreshedMstId = (mstId === '!' && !_currKeyId) ? 0 : (_currKeyId || mstId || (refreshCri && rememberedMstId));\r\n this.LoadMst(refreshedMstId, src, options)(dispatch, getState, { webApi })\r\n .then(result => {\r\n log.debug(`refreshed ${this.getMstApiName()} ${refreshedMstId}`)\r\n })\r\n .catch(err =>{\r\n log.debug(`fail to reload mst after search list refresh ${refreshedMstId}`);\r\n })\r\n return Promise.resolve(SearchList);\r\n }\r\n )\r\n })\r\n , (error => {\r\n log.debug(error);\r\n dispatchWithNotification(dispatch, { type: GET_SEARCH_LIST.FAILED, payload: { error: error } });\r\n return Promise.reject(error);\r\n })\r\n ).catch(error => {\r\n return Promise.reject(error);\r\n })\r\n }).bind(this);\r\n }\r\n LoadMst(mstId, src, options = {}) {\r\n const screenName = this.GetScreenName();\r\n const GET_MST = this.GetActionType(\"GET_MST\");\r\n const GET_DTL_LIST = this.GetActionType(\"GET_DTL_LIST\");\r\n const EDIT_DTL = this.GetActionType(\"EDIT_DTL\");\r\n const webServiceName = screenName + \"Service\";\r\n const persistMstName = this.GetPersistMstName();\r\n const persistDtlName = this.GetPersistDtlName();\r\n const mstKeyColumeName = this.GetMstKeyColumnName();\r\n const getMstApiName = this.GetApiName(\"GET_MST\");\r\n const getDtlListApiName = this.GetApiName(\"GET_DTL_LIST\");\r\n return (async (dispatch, getState, { webApi }) => {\r\n const apiService = (webApi || {})[webServiceName] || this.GetWebService();\r\n const current = getState()[screenName] || {};\r\n const rememberedMst = await GetCurrentAsync(persistMstName);\r\n const rememberedDtl = (await GetCurrentAsync(persistDtlName) || {}).dtl;\r\n const rememberedMstId = (rememberedMst || {})[mstKeyColumeName] || (rememberedDtl || {}).mstId;\r\n const selectedMst = this.GetDefaultMst((current.SearchList || {}).data, current);\r\n const newMst = current.NewMst || {};\r\n const newDtl = current.NewDtl || {};\r\n const currMst = current.Mst;\r\n const keyId = mstId !== '_' ? (mstId || ({}).key) : mstId && (rememberedMst || {})[mstKeyColumeName];\r\n const { dtlId, copy, refreshCri } = options;\r\n const currentDtlList = (current.DtlList || {}).data || [];\r\n\r\n if (keyId\r\n //&& src !== \"Dtl\" && src !== \"DtlList\" \r\n &&\r\n ((currMst[mstKeyColumeName] !== keyId) || true)\r\n ) {\r\n dispatch({ type: GET_MST.STARTED, payload: { SelectedKeyId: keyId } })\r\n\r\n return Promise.all([\r\n apiService[getMstApiName](keyId),\r\n apiService[getDtlListApiName](keyId),\r\n ])\r\n .then(([mst, dtl]) => {\r\n if (mst.data.length > 0) {\r\n const revisedMst = this.ExpandMst({\r\n ...mst.data[0],\r\n [mstKeyColumeName]: copy ? null : mst.data[0][mstKeyColumeName]\r\n }, current, copy);\r\n RememberCurrentAsync(persistMstName, revisedMst);\r\n // setTimeout(() => {\r\n dispatchWithNotification(dispatch, { type: GET_MST.SUCCEEDED, payload: { Mst: revisedMst, message: copy ? \"This is a new copy of the master\" : \"\", copy, Src: src } })\r\n dispatchWithNotification(dispatch, { type: GET_DTL_LIST.SUCCEEDED, payload: { Dtl: dtl.data, copy, Src: src } });\r\n // }, 2000);\r\n this.BackFillMstAsyncColumns(revisedMst, dispatch, getState, { webApi }, options);\r\n if (dtlId) {\r\n this.SelectDtl(mstId, dtlId, -1)(dispatch, getState, { webApi });\r\n }\r\n else {\r\n this.BackFillDtlAsyncColumns(revisedMst, newDtl, dispatch, getState, { webApi });\r\n }\r\n return revisedMst;\r\n }\r\n else {\r\n RememberCurrentAsync(persistMstName, null);\r\n dispatchWithNotification(dispatch, { type: GET_MST.FAILED, payload: { message: \"failed to load required record \" + keyId } });\r\n return Promise.resolve({})\r\n }\r\n },\r\n (err) => {\r\n dispatchWithNotification(dispatch, { type: GET_MST.FAILED, payload: {} })\r\n dispatchWithNotification(dispatch, { type: GET_DTL_LIST.FAILED, payload: {} })\r\n const isAccessDenied = !!(err.errMsg || '').match(/access denied.*/);\r\n if (rememberedMstId === keyId && rememberedMstId && isAccessDenied) {\r\n // flush remembered, probably no longer valid(deleted/acl changed etc.)\r\n RememberCurrentAsync(persistMstName, null);\r\n RememberCurrentAsync(persistDtlName, null);\r\n }\r\n return Promise.reject(err);\r\n }\r\n )\r\n .catch(error => {\r\n log.debug(error);\r\n dispatchWithNotification(dispatch, { type: GET_MST.FAILED, payload: {} })\r\n dispatchWithNotification(dispatch, { type: GET_DTL_LIST.FAILED, payload: {} })\r\n const isAccessDenied = !!(error.errMsg || '').match(/access denied.*/);\r\n if (rememberedMstId === keyId && rememberedMstId && isAccessDenied) {\r\n // flush remembered, probably no longer valid(deleted/acl changed etc.)\r\n RememberCurrentAsync(persistMstName, null);\r\n RememberCurrentAsync(persistDtlName, null);\r\n }\r\n return Promise.reject(error);\r\n })\r\n }\r\n else {\r\n const useCopy = rememberedMst && !rememberedMst[mstKeyColumeName] && (keyId || mstId);\r\n const revisedMst = keyId ? currMst : (useCopy || refreshCri ? (rememberedMst || newMst) : newMst);\r\n dispatchWithNotification(dispatch, { type: GET_MST.SUCCEEDED, payload: { Mst: revisedMst, Src: src } });\r\n dispatchWithNotification(dispatch, { type: GET_DTL_LIST.SUCCEEDED, payload: { Dtl: keyId ? currentDtlList : useCopy || refreshCri ? currentDtlList : [], Src: src } });\r\n this.BackFillMstAsyncColumns(keyId ? currMst : useCopy || refreshCri ? rememberedMst : newMst, dispatch, getState, { webApi }, options);\r\n if (dtlId) {\r\n const dtl = await this.GetDtl(currentDtlList, dtlId, -1, revisedMst);\r\n dispatchWithNotification(dispatch, { type: EDIT_DTL.SUCCEEDED, payload: { dtl: dtl || (dtlId === '_' && (mstId === rememberedMstId) ? rememberedDtl : {}) } });\r\n return Promise.reslove(dtl);\r\n }\r\n else {\r\n this.BackFillDtlAsyncColumns(revisedMst, newDtl, dispatch, getState, { webApi });\r\n return Promise.resolve({});\r\n }\r\n }\r\n\r\n }).bind(this);\r\n }\r\n\r\n AddMst(mstId, src, idx) {\r\n return ((dispatch, getState, { webApi }) => {\r\n const persistMstName = this.GetPersistMstName();\r\n RememberCurrentAsync(persistMstName, null);\r\n return this.LoadMst(mstId, src, { copy: mstId && true })(dispatch, getState, { webApi });\r\n }).bind(this);\r\n }\r\n\r\n AddDtl(mstId, dtlId, idx) {\r\n const screenName = this.GetScreenName();\r\n const EDIT_DTL = this.GetActionType(\"EDIT_DTL\");\r\n const persistDtlName = this.GetPersistDtlName();\r\n const mstKeyColumeName = this.GetMstKeyColumnName();\r\n const dtlKeyColumnName = this.GetDtlKeyColumnName();\r\n return (async (dispatch, getState, { webApi }) => {\r\n const current = getState()[screenName] || {};\r\n const mst = current.Mst;\r\n const currentDtlList = (current.DtlList || {}).data;\r\n const dtl = await this.GetDtl(currentDtlList, dtlId, idx, mst);\r\n const newDtl = { ...(dtl || current.NewDtl), [dtlKeyColumnName]: null };\r\n RememberCurrentAsync(persistDtlName, { mstId: mst[mstKeyColumeName], dtl: newDtl });\r\n //log.debug(\"add detail\", newDtl, GetCurrent(persistDtlName));\r\n dispatchWithNotification(dispatch, { type: EDIT_DTL.SUCCEEDED, payload: { dtl: newDtl || {}, message: dtlId ? \"New copy of the detail\" : \"\" } });\r\n // return Promise.reslove(newDtl);\r\n return newDtl;\r\n }).bind(this);\r\n }\r\n\r\n SelectMst(keyId, altKeyId, idx) {\r\n const SELECT_MST = this.GetActionType(\"SELECT_MST\");\r\n const screenName = this.GetScreenName();\r\n return ((dispatch, getState, { webApi }) => {\r\n const current = getState()[screenName] || {};\r\n const currentList = (current.SearchList || {}).data || [];\r\n const currentMstId = currentList.length > 0 ? currentList[idx].keyId || currentList[idx].key : null;\r\n if (currentList.length > 0) {\r\n dispatchWithNotification(dispatch, { type: SELECT_MST.SUCCEEDED, payload: { SelectedKeyId: currentMstId } });\r\n return this.LoadMst(currentMstId, \"MstList\")(dispatch, getState, { webApi });\r\n }\r\n else {\r\n dispatchWithNotification(dispatch, { type: SELECT_MST.FAILED, payload: { error: \"empty selection list\" } });\r\n return Promise.resolve({});\r\n }\r\n }).bind(this);\r\n }\r\n\r\n SelectDtl(mstId, dtlId, idx) {\r\n const screenName = this.GetScreenName();\r\n const EDIT_DTL = this.GetActionType(\"EDIT_DTL\");\r\n const webServiceName = screenName + \"Service\";\r\n const persistDtlName = this.GetPersistDtlName();\r\n const mstKeyColumeName = this.GetMstKeyColumnName();\r\n const dtlKeyColumnName = this.GetDtlKeyColumnName();\r\n return (async (dispatch, getState, { webApi }) => {\r\n const apiService = (webApi || {})[webServiceName] || this.GetWebService();\r\n const current = getState()[screenName] || {};\r\n const currentMstList = (current.SearchList || {}).data;\r\n const mst = current.Mst;\r\n const currentDtlList = (current.DtlList || {}).data;\r\n if (mst[mstKeyColumeName] === mstId || mstId === \"_\") {\r\n const rememberedDtl = (await GetCurrentAsync(persistDtlName) || {}).dtl;\r\n const rememberedMstId = (await GetCurrentAsync(persistDtlName) || {}).mstId;\r\n if (currentDtlList.length > 0) {\r\n const dtl = await this.GetDtl(currentDtlList, dtlId, idx, mst);\r\n if (dtl) RememberCurrentAsync(persistDtlName, {\r\n mstId: mst[mstKeyColumeName],\r\n dtl: dtl\r\n });\r\n this.BackFillDtlAsyncColumns(mst, dtl, dispatch, getState, { webApi });\r\n dispatch({ type: EDIT_DTL.SUCCEEDED, payload: { dtl: dtl || (dtlId === '_' && (rememberedMstId === mst[mstKeyColumeName]) ? rememberedDtl : {}) } });\r\n return dtl;\r\n }\r\n else {\r\n dispatch({ type: EDIT_DTL.SUCCEEDED, payload: { dtl: {} } });\r\n return {};\r\n }\r\n }\r\n else {\r\n return this.LoadMst(mstId, { dtlId: dtlId })(dispatch, getState, { webApi });\r\n }\r\n }).bind(this);\r\n }\r\n\r\n async GetDtl(dtlList, dtlId, idx, mst) {\r\n const persistDtlName = this.GetPersistDtlName();\r\n const mstKeyColumeName = this.GetMstKeyColumnName();\r\n const dtlKeyColumnName = this.GetDtlKeyColumnName();\r\n const { mstId, dtl } = await GetCurrentAsync(persistDtlName) || {};\r\n const rememberedDtl = dtl;\r\n return dtlList.reduce((a, v, i) =>\r\n (\r\n (dtlId && v[dtlKeyColumnName] === dtlId)\r\n ||\r\n (dtlId === \"_\"\r\n && idx < 0\r\n &&\r\n (\r\n (rememberedDtl || {})[dtlKeyColumnName] === v[dtlKeyColumnName] || (v.TmpKeyId && (rememberedDtl || {}).TmpKeyId === v.TmpKeyId && !v[dtlKeyColumnName])\r\n )\r\n )\r\n ||\r\n ((!dtlId || dtlId === \"_\") && i === idx && ((mstId === mst[mstKeyColumeName] && mst[mstKeyColumeName]) || !v[dtlKeyColumnName]))\r\n ) ? v : a, null);\r\n }\r\n\r\n async GetMst(mstList, mstId, idx) {\r\n const persistMstName = this.GetPersistMstName();\r\n const mstKeyColumeName = this.GetMstKeyColumnName();\r\n const rememberedMst = await GetCurrentAsync(persistMstName);\r\n return mstList.reduce((a, v, i) =>\r\n (\r\n (mstId && v.key === mstId)\r\n ||\r\n (mstId === \"_\"\r\n && idx < 0\r\n &&\r\n (\r\n (rememberedMst || {})[mstKeyColumeName] === v.key || (v.TmpKeyId && (rememberedMst || {}).TmpKeyId === v.TmpKeyId && !v.key)\r\n )\r\n )\r\n ||\r\n ((!mstId || mstId === \"_\") && i === idx)\r\n ) ? v : a, null);\r\n }\r\n\r\n SavePage(currentState, mst, dtl, { persist, keepDtl, ...rest }) {\r\n const screenName = this.GetScreenName();\r\n const SAVE_MST = this.GetActionType(\"SAVE_MST\");\r\n const webServiceName = screenName + \"Service\";\r\n const persistDtlName = this.GetPersistDtlName();\r\n const mstKeyColumeName = this.GetMstKeyColumnName();\r\n const dtlKeyColumnName = this.GetDtlKeyColumnName();\r\n return ((dispatch, getState, { webApi }) => {\r\n const apiService = (webApi || {})[webServiceName] || this.GetWebService();\r\n const current = getState()[screenName] || {};\r\n const currentCriteria = current.ScreenCriteria || {};\r\n dispatchWithNotification(dispatch, { type: SAVE_MST.STARTED, payload: {} });\r\n const _mst = {\r\n ...currentState.Mst,\r\n ...mst\r\n }\r\n const _dtl = [\r\n ...dtl\r\n ];\r\n\r\n const _options = {\r\n ...rest\r\n }\r\n\r\n return apiService.SaveData(\r\n Object.keys(_mst || {}).reduce((a, k, i) => { a[k] = Array.isArray(_mst[k]) ? null : _mst[k]; return a; }, {})\r\n , _dtl.map(o => Object.keys(o || {}).reduce((a, k, i) => { a[k] = Array.isArray(o[k]) ? null : o[k]; return a; }, {}))\r\n , { ...rest })\r\n .then(\r\n (ret => {\r\n dispatchWithNotification(dispatch, { type: SAVE_MST.SUCCEEDED, payload: { Mst: ret.data.mst, keepDtl: keepDtl, message: ret.data.message, deferredRelease: true, } });\r\n if (!keepDtl) RememberCurrentAsync(persistDtlName, null);\r\n return this.LoadSearchList(\"SaveData\", ret.data.mst[mstKeyColumeName], { dtlId: keepDtl && (currentState.EditDtl || {})[dtlKeyColumnName] }, currentCriteria.SearchStr, currentCriteria.TopN || 0, currentCriteria.FilterId)(dispatch, getState, { webApi });\r\n })\r\n ,\r\n (err => {\r\n log.debug(err);\r\n dispatchWithNotification(dispatch, { type: SAVE_MST.FAILED, payload: { error: err, message: err.errMsg, validationErrors: err.validationErrors } })\r\n return Promise.reject(err);\r\n })\r\n )\r\n .catch(err => {\r\n return Promise.reject(err);\r\n })\r\n // .finally(x => {\r\n // dispatchWithNotification(dispatch, { type: SAVE_MST.ENDED, payload: {} });\r\n // })\r\n }).bind(this);\r\n }\r\n\r\n DelMst(currentState, mstId, { ...rest }) {\r\n const screenName = this.GetScreenName();\r\n const DEL_MST = this.GetActionType(\"DEL_MST\");\r\n const webServiceName = screenName + \"Service\";\r\n return ((dispatch, getState, { webApi }) => {\r\n const apiService = (webApi || {})[webServiceName] || this.GetWebService();\r\n dispatchWithNotification(dispatch, { type: DEL_MST.STARTED, payload: {} });\r\n const _mst = {\r\n [this.GetMstKeyColumnName()]: mstId,\r\n }\r\n const _options = {\r\n ...rest\r\n }\r\n\r\n return apiService.DelMst(_mst, { ...rest })\r\n .then(\r\n (ret => {\r\n const persistMstName = this.GetPersistMstName();\r\n RememberCurrentAsync(persistMstName, null);\r\n dispatchWithNotification(dispatch, { type: DEL_MST.SUCCEEDED, payload: { message: ret.data.message } })\r\n return this.LoadPage(\"MstList\", {})(dispatch, getState, { webApi });\r\n })\r\n ,\r\n (err => {\r\n log.debug(err);\r\n dispatchWithNotification(dispatch, { type: DEL_MST.FAILED, payload: { error: err, message: err.errMsg } })\r\n return Promise.reject(err);\r\n })\r\n )\r\n .catch(err => {\r\n return Promise.reject(err);\r\n })\r\n // .finally(x => {\r\n // dispatchWithNotification(dispatch, { type: SAVE_MST.ENDED, payload: {} });\r\n // })\r\n }).bind(this);\r\n }\r\n\r\n SetScreenCriteria(searchStr, criteria, filterId) {\r\n const screenName = this.GetScreenName();\r\n const SAVE_CRI = this.GetActionType(\"SAVE_CRI\");\r\n const webServiceName = screenName + \"Service\";\r\n return ((dispatch, getState, { webApi }) => {\r\n const apiService = (webApi || {})[webServiceName] || this.GetWebService();\r\n const current = getState()[screenName] || {};\r\n const topN = current.ScreenCriteria.TopN;\r\n dispatchWithNotification(dispatch, { type: SAVE_CRI.STARTED, payload: {} });\r\n\r\n return apiService.SetScreenCriteria(criteria)\r\n .then(\r\n (ret => {\r\n dispatchWithNotification(dispatch, { type: SAVE_CRI.SUCCEEDED, payload: { Cri: ret.data, message: ret.data.message } })\r\n .then((ret) => {\r\n return this.LoadSearchList(null, null, { refreshCri: true }, searchStr, topN, filterId)(dispatch, getState, { webApi });\r\n },\r\n (err) => {\r\n return Promise.reject(err);\r\n });\r\n })\r\n ,\r\n (err => {\r\n dispatchWithNotification(dispatch, { type: SAVE_CRI.FAILED, payload: { error: err, message: err.errMsg } })\r\n })\r\n ).catch(err => {\r\n return Promise.reject(err);\r\n })\r\n // .finally(x => {\r\n // dispatchWithNotification(dispatch, { type: SAVE_MST.ENDED, payload: {} });\r\n // })\r\n }).bind(this);\r\n }\r\n\r\n ViewMoreDtl() {\r\n const VIEW_MORE_DTL = this.GetActionType(\"VIEW_MORE_DTL\");\r\n return {\r\n type: VIEW_MORE_DTL.SUCCEEDED, payload: {}\r\n };\r\n }\r\n\r\n ChangeMstListFilterVisibility(show) {\r\n const CHANGE_MSTLIST_FILTER_VISIBILITY = this.GetActionType(\"CHANGE_MSTLIST_FILTER_VISIBILITY\");\r\n return {\r\n type: CHANGE_MSTLIST_FILTER_VISIBILITY.SUCCEEDED, payload: { show: show || true }\r\n };\r\n }\r\n\r\n ChangeDtlListFilterVisibility(show) {\r\n const CHANGE_DTLLIST_FILTER_VISIBILITY = this.GetActionType(\"CHANGE_DTLLIST_FILTER_VISIBILITY\");\r\n return {\r\n type: CHANGE_DTLLIST_FILTER_VISIBILITY.SUCCEEDED, payload: { show: show || true }\r\n };\r\n }\r\n ChangeDtlListFilter(FilteredColumn, FilteredValue) {\r\n const CHANGE_DTLLIST_FILTER = this.GetActionType(\"CHANGE_DTLLIST_FILTER\");\r\n return {\r\n type: CHANGE_DTLLIST_FILTER.SUCCEEDED, payload: { FilteredColumn, FilteredValue }\r\n };\r\n }\r\n\r\n ReviseScreenCri(state, action) {\r\n const payload = action.payload;\r\n return {\r\n ...state.ScreenCriteria,\r\n ...this.ScreenCriDdlDef.reduce((a, v) => {\r\n a[v.columnName] = { ...state.ScreenCriteria[v.columnName], LastCriteria: payload.Cri[v.columnName] }; return a;\r\n }, {}\r\n ),\r\n key: Date.now()\r\n }\r\n }\r\n\r\n /* exposed helper functions via 'this' */\r\n DtlListToSelectList(state, keyColumnName) {\r\n const isDdlType = {\r\n \"ComboBox\": true, \"DropDownList\": true, \"ListBox\": true, \"RadioButtonList\": true\r\n };\r\n const DtlFilter = state.DtlFilter;\r\n const DtlList = (state.DtlList || {}).data || [];\r\n const FilteredColumn = DtlFilter.FilteredColumn;\r\n\r\n if (!Array.isArray(state.AuthCol)) return DtlList;\r\n\r\n const columnsToCheck = state.AuthCol\r\n .filter((v) => v.MasterTable === \"N\" && v.ColVisible !== \"N\" && !v.DisplayName.match(/Button/g) && (FilteredColumn === \"_\" || v.ColName === FilteredColumn))\r\n .reduce((a, v) => { a[v.ColName + (isDdlType[v.DisplayName] ? \"Text\" : \"\")] = true; return a; }, {});\r\n const EditDtl = state.EditDtl || {};\r\n const FilterColumn = DtlFilter.FilterColumnDdl;\r\n const FilteredValue = DtlFilter.FilteredValue;\r\n const noFilter = FilteredValue === \"\" || FilteredValue === undefined || FilteredValue === null;\r\n const searchRegEx = new RegExp(FilteredValue, 'i');\r\n return DtlList\r\n .filter(v => {\r\n return noFilter\r\n || (Object.keys(v).filter(n => columnsToCheck[n] && (v[n] || \"\").match(searchRegEx)).length > 0)\r\n }\r\n )\r\n .map((v, i) => {\r\n return {\r\n ...v,\r\n idx: i,\r\n isSelected: ((EditDtl || {})[keyColumnName] && ((EditDtl || {})[keyColumnName] === (v || {})[keyColumnName])) || ((EditDtl || {}).TmpKeyId === v.TmpKeyId && v.TmpKeyId && !(v || {})[keyColumnName]),\r\n }\r\n })\r\n }\r\n\r\n ScreenCriDdl(state, { payload }) {\r\n return this.ScreenCriDdlDef.filter(c => c.payloadDdlName).reduce(\r\n (a, v) => { a[v.columnName] = (payload.ScreenCriDdl || {})[v.payloadDdlName]; return a }, {}\r\n )\r\n }\r\n ScreenDdl(state, { payload }) {\r\n return this.ScreenDdlDef.reduce(\r\n (a, v) => { a[v.columnName] = payload[v.payloadDdlName] || state.ddl[v.columnName]; return a }, {}\r\n )\r\n }\r\n\r\n GetActionHandler() {\r\n return this.actionReducers;\r\n }\r\n GetApiName(actionTypeName) {\r\n return this.ActionApiNameMapper[actionTypeName];\r\n }\r\n GetScreenButtons(state) {\r\n return ((state || {}).ScreenButtonHlp || []).reduce((a, v) => { a[v.ButtonTypeName] = { label: v.ButtonName, labelLong: v.ButtonLongNm, tid: v.ButtonTypeId, ButtonTypeName: v.ButtonTypeName }; return a; }, {})\r\n }\r\n\r\n ResolveDdlPromise(results) {\r\n if (Array.isArray(results)) {\r\n let screenDdlCount = 0;\r\n const screenDdl = this.ScreenDdlDef.reduce((a, v, i) => { a[v.payloadDdlName] = results[i].data.data; screenDdlCount++; return a; }, {})\r\n const screenCriDdl = this.ScreenCriDdlDef.filter(c => c.payloadDdlName).reduce((a, v, i) => { a[v.payloadDdlName] = results[i + screenDdlCount].data.data; return a; }, {})\r\n const x = {\r\n ...screenDdl,\r\n ScreenCriDdl: screenCriDdl,\r\n }\r\n return x;\r\n }\r\n else {\r\n return this.ScreenDdlDef.reduce((a, v, i) => { a[v.columeName] = results[v.columeName]; return a; }, {})\r\n }\r\n }\r\n GetScreenDdlApiPromise(apiService, scope) { return this.ScreenDdlDef.map(v => apiService[v.apiServiceName](\"\", 32767, \"\", scope)) }\r\n GetCriDdlApiPromise(apiService, scope) { return this.ScreenCriDdlDef.filter(c => c.payloadDdlName).map(v => apiService[v.apiServiceName](\"\", 32767, \"\", scope)) }\r\n BackFillDtlAsyncColumns(mst, dtl, dispatch, getState, { webApi }) {\r\n const mstId = (mst || {})[this.GetMstKeyColumnName()];\r\n const dtlId = (dtl || {})[this.GetDtlKeyColumnName()];\r\n this.ScreenDdlDef\r\n .filter(v => !v.forMst && v.isAutoComplete)\r\n .forEach(v => {\r\n const name = \"Search\" + v.columnName;\r\n this.SearchActions[name](MakeAutocompleteSearchValue((dtl || {})[v.columnName]), v.filterByColumnName ? (v.filterByMaster ? (mst || {})[v.filterByColumnName] : (dtl || {})[v.filterByColumnName]) : null)(dispatch, getState, { webApi })\r\n });\r\n this.ScreenOnDemandDef\r\n .filter(v => !v.forMst && mstId && dtlId)\r\n .filter(v => !v.forMst && v.type !== \"RefColumn\")\r\n .filter(v => !v.isFileObject || (mstId && dtlId))\r\n .forEach(v => {\r\n const name = \"Get\" + v.columnName;\r\n this.SearchActions[name](\r\n (mst || {})[this.GetMstKeyColumnName()]\r\n , (dtl || {})[this.GetDtlKeyColumnName()]\r\n , (mst || {})[v.refColumnName], (dtl || {})[v.refColumnName]\r\n )(dispatch, getState, { webApi })\r\n });\r\n const refColumns = this.ScreenOnDemandDef\r\n .filter(v => !v.forMst && v.type === \"RefColumn\")\r\n .reduce((a, v) => { a[v.refColumnName] = [...(a[v.refColumnName] || []), v]; return a; }, {})\r\n Object.keys(refColumns)\r\n .forEach(v => {\r\n const refColumnName = v;\r\n const name = 'GetRef' + refColumnName;\r\n this.SearchActions[name](\r\n (mst || {})[this.GetMstKeyColumnName()]\r\n , (dtl || {})[this.GetDtlKeyColumnName()]\r\n , (mst || {})[refColumnName], (dtl || {})[v.refColumnName], true)(dispatch, getState, { webApi })\r\n });\r\n\r\n }\r\n BackFillMstAsyncColumns(mst, dispatch, getState, { webApi }, options = {}) {\r\n const mstId = (mst || {})[this.GetMstKeyColumnName()];\r\n const _this = this;\r\n const skipDocList = options.SkipDocList;\r\n this.ScreenDdlDef\r\n .filter(v => v.forMst && v.isAutoComplete)\r\n .forEach(v => {\r\n const name = \"Search\" + v.columnName;\r\n this.SearchActions[(\"Search\" + v.columnName)](MakeAutocompleteSearchValue((mst || {})[v.columnName]), v.filterByColumnName ? (mst || {})[v.filterByColumnName] : null)(dispatch, getState, { webApi })\r\n }\r\n );\r\n this.ScreenOnDemandDef\r\n .filter(v => v.forMst && mstId)\r\n .filter(v => v.forMst && v.type !== \"RefColumn\")\r\n .filter(v => !skipDocList || v.type !== \"DocList\")\r\n .filter(v => !v.isFileObject || mstId)\r\n .forEach(v => {\r\n const name = \"Get\" + v.columnName;\r\n this.SearchActions[name](\r\n (mst || {})[this.GetMstKeyColumnName()]\r\n , null\r\n , (mst || {})[v.refColumnName], null)(dispatch, getState, { webApi })\r\n });\r\n const refColumns = this.ScreenOnDemandDef\r\n .filter(v => v.forMst && v.type === \"RefColumn\")\r\n .reduce((a, v) => { a[v.refColumnName] = [...(a[v.refColumnName] || []), v]; return a; }, {})\r\n Object.keys(refColumns)\r\n .forEach(v => {\r\n const refColumnName = v;\r\n const name = 'GetRef' + refColumnName;\r\n this.SearchActions[name](\r\n (mst || {})[this.GetMstKeyColumnName()]\r\n , null, (mst || {})[refColumnName], null, true)(dispatch, getState, { webApi })\r\n })\r\n }\r\n BackFillCriAsyncColumns(screenCriteria, dispatch, getState, { webApi }) {\r\n this.ScreenCriDdlDef\r\n .filter(v => v.isAutoComplete)\r\n .forEach(v => {\r\n const name = \"Search\" + v.columnName;\r\n this.SearchActions[(\"Search\" + v.columnName)](MakeAutocompleteSearchValue(((screenCriteria || {})[v.columnName] || {}).LastCriteria), v.filterByColumnName ? ((screenCriteria || {})[v.columnName] || {}).LastCriteria : null)(dispatch, getState, { webApi })\r\n }\r\n )\r\n }\r\n\r\n MakeSearchAction(ddlColumnDef) {\r\n const _this = this;\r\n const screenName = this.GetScreenName();\r\n const webServiceName = screenName + \"Service\";\r\n return ((v, filterByVal) => {\r\n return ((dispatch, getState, { webApi }) => {\r\n const apiService = webApi[webServiceName] || _this.GetWebService();\r\n const actionType = _this.GetActionType(ddlColumnDef.actionTypeName);\r\n return AutoCompleteSearch(\r\n {\r\n dispatch,\r\n v,\r\n topN: 50,\r\n filterOn: filterByVal || \"\",\r\n forMst: ddlColumnDef.forMst,\r\n forDtl: !ddlColumnDef.forMst,\r\n searchApi: apiService[ddlColumnDef.apiServiceName],\r\n SucceededActionType: actionType.SUCCEEDED,\r\n FailedActionType: actionType.FAILED,\r\n ColumnName: ddlColumnDef.columnName\r\n })\r\n }).bind(this);\r\n }).bind(this);\r\n }\r\n\r\n MakeGetColumnOnDemandAction(columnDef) {\r\n const _this = this;\r\n const screenName = this.GetScreenName();\r\n const webServiceName = screenName + \"Service\";\r\n const forMst = columnDef.forMst;\r\n const columnName = columnDef.columnName;\r\n const tableColumnName = columnDef.tableColumnName;\r\n const actionType = _this.GetActionType(columnDef.actionTypeName);\r\n return ((mstId, dtlId, mst = {}, dtl = {}) => {\r\n return ((dispatch, getState, { webApi }) => {\r\n const apiService = webApi[webServiceName] || _this.GetWebService();\r\n const api = apiService[columnDef.apiServiceName];\r\n return apiService[columnDef.apiServiceName](mstId, dtlId, tableColumnName, forMst, columnName)\r\n .then(\r\n ret => {\r\n dispatch({ type: actionType.SUCCEEDED, payload: { data: ret.data && ret.data.length > 0 ? (ret.data[0] || {})[tableColumnName] : null, ColumnName: columnName, forMst: forMst, forDtl: !forMst } });\r\n }\r\n , err => {\r\n log.trace(\"dynamic column error\", err);\r\n // dispatch({ type: actionType.FAILED, payload: { data:null, ColumnName:columeName, forMst:forMst, forDtl:!forMstr });\r\n }\r\n )\r\n .catch(err => {\r\n log.trace(\"dynamic column exception\", err);\r\n })\r\n }\r\n ).bind(this);\r\n }).bind(this);\r\n }\r\n\r\n MakeGetRefColumnOnDemandAction(columnDef) {\r\n const _this = this;\r\n const screenName = this.GetScreenName();\r\n const webServiceName = screenName + \"Service\";\r\n const forMst = columnDef.forMst;\r\n const refColumnName = columnDef.type === \"RefColumn\" ? columnDef.refColumnName : columnDef.columnName;\r\n const columnName = columnDef.columnName;\r\n const tableColumnName = columnDef.tableColumnName;\r\n const actionType = _this.GetActionType(columnDef.actionTypeName);\r\n return ((mstId, dtlId, refMstKeyId, refDtlKeyId, backfill) => {\r\n return ((dispatch, getState, { webApi }) => {\r\n const apiService = webApi[webServiceName] || _this.GetWebService();\r\n const api = apiService[columnDef.apiServiceName];\r\n const refKeyId = (forMst ? refMstKeyId : refDtlKeyId);\r\n return apiService[columnDef.apiServiceName](mstId, dtlId, refKeyId, forMst, refColumnName)\r\n .then(\r\n ret => {\r\n dispatch({ type: actionType.SUCCEEDED, payload: { data: ret.data && ret.data.length > 0 ? (ret.data[0] || {})[tableColumnName] : null, ColumnName: columnName, backfill, forMst: forMst, forDtl: !forMst } });\r\n }\r\n , err => {\r\n log.trace(\"dynamic column error\", err);\r\n // dispatch({ type: actionType.FAILED, payload: { data:null, ColumnName:columeName, forMst:forMst, forDtl:!forMstr });\r\n }\r\n )\r\n .catch(err => {\r\n log.trace(\"dynamic column exception\", err);\r\n })\r\n }\r\n ).bind(this);\r\n }).bind(this);\r\n }\r\n\r\n MakePullUpOnDemandAction(refObjs) {\r\n return Object.keys(refObjs).reduce(\r\n (a, k) => {\r\n const dependents = refObjs[k].dependents;\r\n const columnDef = dependents[0];\r\n const _this = this;\r\n const screenName = this.GetScreenName();\r\n const webServiceName = screenName + \"Service\";\r\n const forMst = columnDef.forMst;\r\n const refColumnName = columnDef.type === \"RefColumn\" ? columnDef.refColumnName : columnDef.columnName;\r\n a[k] = ((mstId, dtlId, refMstKeyId, refDtlKeyId, backfill) => {\r\n return ((dispatch, getState, { webApi }) => {\r\n const apiService = webApi[webServiceName] || _this.GetWebService();\r\n const api = apiService[columnDef.apiServiceName];\r\n const refKeyId = (forMst ? refMstKeyId : refDtlKeyId);\r\n return apiService[columnDef.apiServiceName](mstId, dtlId, refKeyId, forMst, refColumnName)\r\n .then(\r\n ret => {\r\n (backfill) && dependents.forEach(dependent => {\r\n // only dispatch on backfill(i.e. pull up for existing record), as this is also used for front end search which cannot update redux\r\n const columnName = dependent.columnName;\r\n const tableColumnName = dependent.tableColumnName;\r\n const actionType = _this.GetActionType(dependent.actionTypeName);\r\n dispatch({ type: actionType.SUCCEEDED, payload: { data: ret.data && ret.data.length > 0 ? (ret.data[0] || {})[tableColumnName] : null, ColumnName: columnName, backfill, forMst: forMst, forDtl: !forMst } });\r\n });\r\n return {\r\n dependents: dependents,\r\n result: ret.data && ret.data.length > 0 ? ret.data[0] : null\r\n };\r\n }\r\n , err => {\r\n log.trace(\"dynamic column error\", err);\r\n // dispatch({ type: actionType.FAILED, payload: { data:null, ColumnName:columeName, forMst:forMst, forDtl:!forMstr });\r\n }\r\n )\r\n .catch(err => {\r\n log.trace(\"dynamic column exception\", err);\r\n })\r\n }\r\n ).bind(this);\r\n }).bind(this);\r\n return a;\r\n },\r\n {}\r\n )\r\n }\r\n\r\n MakeGetDocumentListAction(columnDef) {\r\n const _this = this;\r\n const screenName = this.GetScreenName();\r\n const webServiceName = screenName + \"Service\";\r\n const forMst = columnDef.forMst;\r\n const columnName = columnDef.columnName;\r\n const tableColumnName = columnDef.tableColumnName;\r\n const actionType = _this.GetActionType(columnDef.actionTypeName);\r\n return ((mstId, dtlId) => {\r\n return ((dispatch, getState, { webApi }) => {\r\n const apiService = webApi[webServiceName] || _this.GetWebService();\r\n const api = apiService[columnDef.apiServiceName];\r\n return apiService[columnDef.apiServiceName](mstId, dtlId, forMst)\r\n .then(\r\n ret => {\r\n const resultDocList = (((ret || {}).data || {}).data || []);\r\n dispatch({\r\n type: actionType.SUCCEEDED\r\n , payload: { reduxColumnName: columnName, MasterId: mstId, forMst: forMst, forDtl: !forMst, docList: resultDocList }\r\n });\r\n return { mstId, dtlId, resultDocList };\r\n }\r\n , err => {\r\n log.trace(\"get document list column error\", err);\r\n // dispatch({ type: actionType.FAILED, payload: { data:null, ColumnName:columeName, forMst:forMst, forDtl:!forMstr });\r\n return Promise.reject(err);\r\n }\r\n )\r\n .catch(err => {\r\n log.trace(\"get document list column exception\", err);\r\n return Promise.reject(err);\r\n })\r\n }\r\n ).bind(this);\r\n }).bind(this);\r\n }\r\n\r\n MakeGetDocumentContentAction(columnDef) {\r\n const _this = this;\r\n const screenName = this.GetScreenName();\r\n const webServiceName = screenName + \"Service\";\r\n const forMst = columnDef.forMst;\r\n const columnName = columnDef.columnName;\r\n const tableColumnName = columnDef.tableColumnName;\r\n const actionType = _this.GetActionType(columnDef.actionTypeName);\r\n return (({ mstId, dtlId, docId }) => {\r\n return ((dispatch, getState, { webApi }) => {\r\n const apiService = webApi[webServiceName] || _this.GetWebService();\r\n const api = apiService[columnDef.apiServiceName];\r\n return apiService[columnDef.apiServiceName](mstId, dtlId, forMst, docId, columnName)\r\n .then(\r\n ret => {\r\n dispatch({\r\n type: actionType.SUCCEEDED\r\n , payload: { result: { ...((ret || {}).data || [])[0], DocId: docId }, reduxColumnName: columnName, ColumnName: columnName, forMst: forMst, forDtl: !forMst }\r\n })\r\n return ret;\r\n }\r\n , err => {\r\n log.trace(\"get document content error\", err);\r\n // dispatch({ type: actionType.FAILED, payload: { data:null, ColumnName:columeName, forMst:forMst, forDtl:!forMstr });\r\n return Promise.reject(err);\r\n }\r\n )\r\n .catch(err => {\r\n log.trace(\"get document content exception\", err);\r\n return Promise.reject(err);\r\n })\r\n }\r\n ).bind(this);\r\n }).bind(this);\r\n }\r\n\r\n MakeAddDocumentContentAction(columnDef) {\r\n const _this = this;\r\n const screenName = this.GetScreenName();\r\n const webServiceName = screenName + \"Service\";\r\n const forMst = columnDef.forMst;\r\n const columnName = columnDef.columnName;\r\n const tableColumnName = columnDef.tableColumnName;\r\n const actionType = _this.GetActionType(columnDef.actionTypeName);\r\n const overwrite = true;\r\n return (({ mstId, dtlId, file }) => {\r\n return ((dispatch, getState, { webApi }) => {\r\n const apiService = webApi[webServiceName] || _this.GetWebService();\r\n const api = apiService[columnDef.apiServiceName];\r\n const docId = (file || {}).DocId;\r\n const docJson = JSON.stringify(file);\r\n return apiService[columnDef.apiServiceName](mstId, dtlId, forMst, docId, overwrite, columnName, docJson)\r\n .then(\r\n ret => {\r\n dispatch({\r\n type: actionType.SUCCEEDED\r\n , payload: { keyId: mstId, reduxColumnName: columnName, forMst: forMst, forDtl: !forMst, result: ret.data[forMst ? 'mst' : 'dtl'] || {}, src: file }\r\n })\r\n return ret;\r\n }\r\n , err => {\r\n log.trace(\"add document content error\", err);\r\n // dispatch({ type: actionType.FAILED, payload: { data:null, ColumnName:columeName, forMst:forMst, forDtl:!forMstr });\r\n return Promise.reject(err);\r\n }\r\n )\r\n .catch(err => {\r\n log.trace(\"add document content exception \", err);\r\n return Promise.reject(err);\r\n })\r\n }\r\n ).bind(this);\r\n }).bind(this);\r\n }\r\n\r\n MakeDelDocumentContentAction(columnDef) {\r\n const _this = this;\r\n const screenName = this.GetScreenName();\r\n const webServiceName = screenName + \"Service\";\r\n const forMst = columnDef.forMst;\r\n const columnName = columnDef.columnName;\r\n const tableColumnName = columnDef.tableColumnName;\r\n const actionType = _this.GetActionType(columnDef.actionTypeName);\r\n return (({ mstId, dtlId, docId } = {}) => {\r\n return ((dispatch, getState, { webApi }) => {\r\n const apiService = webApi[webServiceName] || _this.GetWebService();\r\n const api = apiService[columnDef.apiServiceName];\r\n return apiService[columnDef.apiServiceName](mstId, dtlId, forMst, columnName, [docId + \"\"])\r\n .then(\r\n ret => {\r\n dispatch({\r\n type: actionType.SUCCEEDED,\r\n payload: { keyId: mstId, forMst: forMst, forDtl: !forMst, reduxColumnName: columnName, result: ret.data[forMst ? 'mst' : 'dtl'] || {}, src: { DocId: docId } }\r\n })\r\n return ret;\r\n }\r\n , err => {\r\n log.trace(\"delete document error\", err);\r\n return Promise.reject(err);\r\n // dispatch({ type: actionType.FAILED, payload: { data:null, ColumnName:columeName, forMst:forMst, forDtl:!forMstr });\r\n }\r\n )\r\n .catch(err => {\r\n log.trace(\"delete document exception\", err);\r\n return Promise.reject(err);\r\n })\r\n }\r\n ).bind(this);\r\n }).bind(this);\r\n }\r\n\r\n MakeDdlSelectors(ddlColumnDef) {\r\n const _this = this;\r\n return (state) => {\r\n return ((((state || {}).ddl || {})[ddlColumnDef.columnName]) || []).map((v, i) => {\r\n return {\r\n key: (ddlColumnDef.isAutoComplete ? v.key : v[ddlColumnDef.keyName]) || null,\r\n label: (ddlColumnDef.isAutoComplete ? v.label : v[ddlColumnDef.labelName]) || \" \",\r\n value: (ddlColumnDef.isAutoComplete ? v.key : v[ddlColumnDef.keyName]) || \"\",\r\n obj: v,\r\n idx: i\r\n }\r\n })\r\n }\r\n }\r\n\r\n MakeCriDdlSelectors(ddlColumnDef) {\r\n const _this = this;\r\n return (state) => {\r\n return ((((state || {}).ScreenCriDdl || {})[ddlColumnDef.columnName]) || []).map((v, i) => {\r\n return {\r\n key: (ddlColumnDef.isAutoComplete ? v.key : v[ddlColumnDef.keyName]) || null,\r\n label: (ddlColumnDef.isAutoComplete ? v.label : v[ddlColumnDef.labelName]) || \" \",\r\n value: (ddlColumnDef.isAutoComplete ? v.key : v[ddlColumnDef.keyName]) || \"\",\r\n obj: v,\r\n idx: i\r\n }\r\n })\r\n }\r\n }\r\n\r\n QuickFilterDdlToSelectList(state) {\r\n return ((state || {}).ScreenFilter || {}).map((v, i) => {\r\n return {\r\n key: v.ScreenFilterId,\r\n label: v.FilterName || \" \",\r\n value: v.ScreenFilterId,\r\n obj: v,\r\n idx: i\r\n }\r\n })\r\n }\r\n\r\n MakeActionReducers() {\r\n const defaultReducer = (state, action) => (state);\r\n const LOAD_PAGE = getAsyncTypes(this.GetReducerActionTypePrefix(), 'LOAD_PAGE');\r\n const SAVE_CRI = getAsyncTypes(this.GetReducerActionTypePrefix(), 'SAVE_CRI');\r\n const GET_SEARCH_LIST = getAsyncTypes(this.GetReducerActionTypePrefix(), 'GET_SEARCH_LIST');\r\n const GET_MST = getAsyncTypes(this.GetReducerActionTypePrefix(), 'GET_MST');\r\n const SELECT_MST = getAsyncTypes(this.GetReducerActionTypePrefix(), 'SELECT_MST');\r\n const GET_DTL_LIST = getAsyncTypes(this.GetReducerActionTypePrefix(), 'GET_DTL_LIST');\r\n const SAVE_MST = getAsyncTypes(this.GetReducerActionTypePrefix(), 'SAVE_MST');\r\n const ADD_MST = getAsyncTypes(this.GetReducerActionTypePrefix(), 'ADD_MST');\r\n const DEL_MST = getAsyncTypes(this.GetReducerActionTypePrefix(), 'DEL_MST');\r\n const ADD_DTL = getAsyncTypes(this.GetReducerActionTypePrefix(), 'ADD_DTL');\r\n const EDIT_DTL = getAsyncTypes(this.GetReducerActionTypePrefix(), 'EDIT_DTL');\r\n const DEL_DTL = getAsyncTypes(this.GetReducerActionTypePrefix(), 'ADD_DTL');\r\n const DEL_ALLDTL = getAsyncTypes(this.GetReducerActionTypePrefix(), 'ADD_ALLDTL');\r\n const SAVE_DTL = getAsyncTypes(this.GetReducerActionTypePrefix(), 'SAVE_DTL');\r\n const VIEW_MORE_DTL = getAsyncTypes(this.GetReducerActionTypePrefix(), 'VIEW_MORE_DTL');\r\n const CHANGE_MSTLIST_FILTER_VISIBILITY = getAsyncTypes(this.GetReducerActionTypePrefix(), 'CHANGE_MSTLIST_FILTER_VISIBILITY');\r\n const CHANGE_DTLLIST_FILTER_VISIBILITY = getAsyncTypes(this.GetReducerActionTypePrefix(), 'CHANGE_DTLLIST_FILTER_VISIBILITY');\r\n const CHANGE_DTLLIST_FILTER = getAsyncTypes(this.GetReducerActionTypePrefix(), 'CHANGE_DTLLIST_FILTER');\r\n\r\n return {\r\n ...(LOAD_PAGE.bindActionReducer(this.LoadPageReducer.bind(this), true)),\r\n ...(SAVE_CRI.bindActionReducer(this.SaveCriReducer.bind(this), true)),\r\n ...(GET_SEARCH_LIST.bindActionReducer(this.GetSearchListReducer.bind(this), true)),\r\n ...(GET_MST.bindActionReducer(this.GetMstReducer.bind(this), true)),\r\n ...(SELECT_MST.bindActionReducer(this.SelectMstReducer.bind(this), true)),\r\n ...(GET_DTL_LIST.bindActionReducer(this.GetDtlListReducer.bind(this), true)),\r\n ...(SAVE_MST.bindActionReducer(this.SaveMstReducer.bind(this), true)),\r\n ...(ADD_MST.bindActionReducer(defaultReducer)),\r\n ...(DEL_MST.bindActionReducer(defaultReducer)),\r\n ...(ADD_DTL.bindActionReducer(defaultReducer)),\r\n ...(EDIT_DTL.bindActionReducer(this.EditDtlReducer.bind(this), true)),\r\n ...(DEL_DTL.bindActionReducer(defaultReducer)),\r\n ...(DEL_ALLDTL.bindActionReducer(defaultReducer)),\r\n ...(SAVE_DTL.bindActionReducer(defaultReducer)),\r\n ...(VIEW_MORE_DTL.bindActionReducer(this.ViewMoreDetailReducer.bind(this), true)),\r\n ...(CHANGE_MSTLIST_FILTER_VISIBILITY.bindActionReducer(this.ToggleMstListFilterReducer.bind(this), true)),\r\n ...(CHANGE_DTLLIST_FILTER_VISIBILITY.bindActionReducer(this.ToggleDtlListFilterReducer.bind(this), true)),\r\n ...(CHANGE_DTLLIST_FILTER.bindActionReducer(this.ChangeDtlListFilterReducer.bind(this), true)),\r\n ...(this.ScreenDdlDef.reduce((a, v) => ({ ...a, ...getAsyncTypes(this.GetReducerActionTypePrefix(), v.actionTypeName).bindActionReducer(this.GetDdlReducer.bind(this), true) }), {})),\r\n ...((this.ScreenOnDemandDef || []).filter(f => f.type !== \"DocList\").reduce((a, v) => ({ ...a, ...getAsyncTypes(this.GetReducerActionTypePrefix(), v.actionTypeName).bindActionReducer(this.GetColumnOnDemandReducer.bind(this), true) }), {})),\r\n ...((this.ScreenOnDemandDef || []).filter(f => f.type === \"DocList\").reduce((a, v) => ({ ...a, ...getAsyncTypes(this.GetReducerActionTypePrefix(), v.actionTypeName).bindActionReducer(this.GetDocumentListReducer.bind(this), true) }), {})),\r\n ...((this.ScreenDocumentDef || []).filter(f => f.type === \"Get\").reduce((a, v) => ({ ...a, ...getAsyncTypes(this.GetReducerActionTypePrefix(), v.actionTypeName).bindActionReducer(this.GetDocumentContentReducer.bind(this), true) }), {})),\r\n ...((this.ScreenDocumentDef || []).filter(f => f.type === \"Add\").reduce((a, v) => ({ ...a, ...getAsyncTypes(this.GetReducerActionTypePrefix(), v.actionTypeName).bindActionReducer(this.AddDocumentContentReducer.bind(this), true) }), {})),\r\n ...((this.ScreenDocumentDef || []).filter(f => f.type === \"Del\").reduce((a, v) => ({ ...a, ...getAsyncTypes(this.GetReducerActionTypePrefix(), v.actionTypeName).bindActionReducer(this.DelDocumentContentReducer.bind(this), true) }), {})),\r\n }\r\n }\r\n ReduxReducer() {\r\n const initState = this.GetInitState();\r\n const reducerPrefix = this.GetReducerActionTypePrefix();\r\n const reduxActionHandler = this.GetActionHandler();\r\n\r\n return (function (state = initState, action) {\r\n const actionType = action.type || \"\";\r\n if (reducerPrefix && actionType.startsWith(reducerPrefix)) {\r\n const handler = reduxActionHandler[action.type];\r\n if (typeof handler === \"function\") return handler(state, action);\r\n else return state;\r\n }\r\n else return state;\r\n }).bind(this);\r\n }\r\n}\r\n","\r\nimport { getAsyncTypes } from '../helpers/actionType'\r\nimport * as Eth2WalletService from '../services/Eth2WalletService'\r\nimport { RintagiScreenRedux, initialRintagiScreenReduxState } from './_ScreenReducer'\r\nclass Eth2WalletRedux extends RintagiScreenRedux {\r\n allowTmpDtl = false;\r\n constructor() {\r\n super();\r\n this.ActionApiNameMapper = {\r\n 'GET_SEARCH_LIST': 'GetEth2Wallet5List',\r\n 'GET_MST': 'GetEth2Wallet5ById',\r\n 'GET_DTL_LIST': 'GetEth2Wallet5DtlById',\r\n }\r\n this.ScreenDdlDef = [\r\n { columnName: 'NetworkId6', payloadDdlName: 'NetworkId6List', keyName: 'NetworkId6', labelName: 'NetworkId6Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetNetworkId6List', actionTypeName: 'GET_DDL_NetworkId6' },\r\n { columnName: 'UsrId6', payloadDdlName: 'UsrId6List', keyName: 'UsrId6', labelName: 'UsrId6Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetUsrId6List', actionTypeName: 'GET_DDL_UsrId6' },\r\n { columnName: 'ValidatorStatusCd5', payloadDdlName: 'ValidatorStatusCd5List', keyName: 'ValidatorStatusCd5', labelName: 'ValidatorStatusCd5Text', forMst: false, isAutoComplete: false, apiServiceName: 'GetValidatorStatusCd5List', actionTypeName: 'GET_DDL_ValidatorStatusCd5' },\r\n ]\r\n this.ScreenOnDemandDef = [\r\n { columnName: 'DepositJsonFile6', isFileObject: true, tableColumnName: 'DepositJsonFile', forMst: true, apiServiceName: 'GetColumnContent', actionTypeName: 'GET_COLUMN_DepositJsonFile6' },\r\n { columnName: 'ValidatorJson5', isFileObject: true, tableColumnName: 'ValidatorJson', forMst: false, apiServiceName: 'GetColumnContent', actionTypeName: 'GET_COLUMN_ValidatorJson5' },\r\n { columnName: 'DepositJson5', isFileObject: true, tableColumnName: 'DepositJson', forMst: false, apiServiceName: 'GetColumnContent', actionTypeName: 'GET_COLUMN_DepositJson5' },\r\n ]\r\n this.ScreenDocumentDef = [\r\n\r\n ]\r\n this.ScreenCriDdlDef = [\r\n { columnName: 'Eth1WithdrawalAddr10', payloadDdlName: '', keyName: '', labelName: '', isCheckBox:false, isAutoComplete: false, apiServiceName: '', actionTypeName: 'GET_Eth1WithdrawalAddr10' },\r\n ]\r\n this.SearchActions = {\r\n ...[...this.ScreenDdlDef].reduce((a, v) => { a['Search' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenCriDdlDef].reduce((a, v) => { a['SearchCri' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type !== 'DocList' && f.type !== 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetColumnOnDemandAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetRefColumnOnDemandAction(v); return a; }, {}),\r\n ...this.MakePullUpOnDemandAction([...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['GetRef' + v.refColumnName] = { dependents: [...((a['GetRef' + v.refColumnName] || {}).dependents || []), v] }; return a; }, {})),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'DocList').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetDocumentListAction(v); return a; }, {}),\r\n }\r\n this.OnDemandActions = {\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Get').reduce((a, v) => { a['Get' + v.columnName + 'Content'] = this.MakeGetDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Add').reduce((a, v) => { a['Add' + v.columnName + 'Content'] = this.MakeAddDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Del').reduce((a, v) => { a['Del' + v.columnName + 'Content'] = this.MakeDelDocumentContentAction(v); return a; }, {}),\r\n }\r\n this.ScreenDdlSelectors = this.ScreenDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeDdlSelectors(v); return a; }, {})\r\n this.ScreenCriDdlSelectors = this.ScreenCriDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeCriDdlSelectors(v); return a; }, {})\r\n this.actionReducers = this.MakeActionReducers();\r\n }\r\n GetScreenName() { return 'Eth2Wallet' }\r\n GetMstKeyColumnName(isUnderlining = false) { return isUnderlining ? 'Eth2WalletId' : 'Eth2WalletId6'; }\r\n GetDtlKeyColumnName(isUnderlining = false) { return isUnderlining ? 'Eth2ValidatorId' : 'Eth2ValidatorId5'; }\r\n GetPersistDtlName() { return this.GetScreenName() + '_Dtl'; }\r\n GetPersistMstName() { return this.GetScreenName() + '_Mst'; }\r\n GetWebService() { return Eth2WalletService; }\r\n GetReducerActionTypePrefix() { return this.GetScreenName(); };\r\n GetActionType(actionTypeName) { return getAsyncTypes(this.GetReducerActionTypePrefix(), actionTypeName); }\r\n GetInitState() {\r\n return {\r\n ...initialRintagiScreenReduxState,\r\n Label: {\r\n ...initialRintagiScreenReduxState.Label,\r\n }\r\n }\r\n };\r\n\r\n GetDefaultDtl(state) {\r\n return (state || {}).NewDtl ||\r\n {\r\n Eth2ValidatorId5: null,\r\n Idx5: null,\r\n DeactivateBtn: null,\r\n ValidatorStatusCd5: null,\r\n Balance5: null,\r\n ValidatorJson5: null,\r\n CreatedOnUtc5: null,\r\n StatusTimeStampUtc5: null,\r\n DepositJson5: null,\r\n JsonFileName5: null,\r\n PubKey5: null,\r\n Remark5: null,\r\n RemoveValidatorBtn: null,\r\n ValidatorIndex5: null,\r\n ActivationEpoch5: null,\r\n ActivationUtc5: null,\r\n ExitEpoch5: null,\r\n ExitUtc5: null,\r\n }\r\n }\r\n ExpandMst(mst, state, copy) {\r\n return {\r\n ...mst,\r\n key: Date.now(),\r\n Eth2WalletId6: copy ? null : mst.Eth2WalletId6,\r\n }\r\n }\r\n ExpandDtl(dtlList, copy) {\r\n if (!copy) return dtlList;\r\n else if (!this.allowTmpDtl) return [];\r\n else {\r\n const now = Date.now();\r\n return dtlList.map((v, i) => {\r\n return {\r\n ...v,\r\n Eth2WalletId6: null,\r\n Eth2ValidatorId5: null,\r\n TmpKeyId: now + i,\r\n }\r\n })\r\n };\r\n }\r\n\r\n SearchListToSelectList(state) {\r\n const searchList = ((state || {}).SearchList || {}).data || [];\r\n return searchList\r\n .map((v, i) => {\r\n return {\r\n key: v.key || null,\r\n value: v.labelL || v.label || ' ',\r\n label: v.labelL || v.label || ' ',\r\n labelR: v.labelR || ' ',\r\n detailR: v.detailR || ' ',\r\n detail: v.detail || ' ',\r\n idx: i,\r\n isSelected: v.isSelected,\r\n }\r\n })\r\n }\r\n}\r\n\r\n/* ReactRule: Redux Custom Function */\r\n\r\n/* ReactRule End: Redux Custom Function */\r\n\r\n/* helper functions */\r\n\r\nexport function ShowMstFilterApplied(state) {\r\n return !state\r\n || !state.ScreenCriteria\r\n || (state.ScreenCriteria.Eth1WithdrawalAddr10 || {}).LastCriteria\r\n || state.ScreenCriteria.SearchStr;\r\n}\r\n\r\nexport default new Eth2WalletRedux()\r\n","\r\nimport { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\n\r\nlet activeScope = {};\r\n\r\nexport function setAccessScope(scope) {\r\n activeScope = {\r\n ...activeScope,\r\n ...scope,\r\n }\r\n}\r\n\r\nexport function GetAuthCol(accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetAuthCol'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetAuthRow(accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetAuthRow'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n\r\n}\r\nexport function GetScreenLabel(accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetScreenLabel'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope || getAccessScope())\r\n }\r\n )\r\n\r\n}\r\n\r\nexport function GetLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetSystemLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetSystemLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetScreenButtonHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetScreenButtonHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetScreenHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenCriteria(accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewMst(accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetNewMst'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewDtl(accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetNewDtl'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenFilter(accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetScreenFilter'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetSearchList(searchStr, topN, filterId, desiredScreenCriteria, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetSearchList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n desiredScreenCriteria: desiredScreenCriteria || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetEthTxHistory13List(searchStr, topN, filterId, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetEthTxHistory13List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetEthTxHistory13ById(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetEthTxHistory13ById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetMstById = GetEthTxHistory13ById;\r\nexport function GetEthTxHistory13DtlById(keyId, filterId, options, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetEthTxHistory13DtlById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n filterId: filterId || 0,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetDtlById = GetEthTxHistory13DtlById;\r\nexport function LoadInitPage(options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/LoadInitPage'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SaveData(mst, dtl, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst || {},\r\n dtl: dtl || [],\r\n options: options || {}\r\n });\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/SaveData'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function DelMst(mst, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst,\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/DelMst'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SetScreenCriteria(criteriaValues, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/SetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n criteriaValues: criteriaValues\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetRefColumnContent(mstId, dtlId, refKeyId, isMaster, refScreenColumnName, options, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetRefColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n refKeyId: refKeyId || null,\r\n refScreenColumnName: refScreenColumnName || null,\r\n isMaster: isMaster || false,\r\n options: options || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/*screen criteria dll and screen dropdownlist/autocomplete*/\r\n\r\nexport function GetScreenCriEth1WithdrawalAddr10List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetScreenCriteriaDdlList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n screenCriId: 9,\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetUsrId6List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetUsrId6List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetTxStatusCd22List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetTxStatusCd22List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule: Service Custom Function */\r\n\r\nexport function GetRewards(walletAddress, accessScope={}) {\r\n return fetchData(baseUrl + '/EthTxHistoryWs.asmx/GetRewards'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n walletAddress: walletAddress || '',\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n/* ReactRule End: Service Custom Function */\r\n","\r\nimport { getAsyncTypes } from '../helpers/actionType'\r\nimport * as EthTxHistoryService from '../services/EthTxHistoryService'\r\nimport { RintagiScreenRedux, initialRintagiScreenReduxState } from './_ScreenReducer'\r\nclass EthTxHistoryRedux extends RintagiScreenRedux {\r\n allowTmpDtl = false;\r\n constructor() {\r\n super();\r\n this.ActionApiNameMapper = {\r\n 'GET_SEARCH_LIST': 'GetEthTxHistory13List',\r\n 'GET_MST': 'GetEthTxHistory13ById',\r\n 'GET_DTL_LIST': 'GetEthTxHistory13DtlById',\r\n }\r\n this.ScreenDdlDef = [\r\n { columnName: 'UsrId6', payloadDdlName: 'UsrId6List', keyName: 'UsrId6', labelName: 'UsrId6Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetUsrId6List', actionTypeName: 'GET_DDL_UsrId6' },\r\n { columnName: 'TxStatusCd22', payloadDdlName: 'TxStatusCd22List', keyName: 'TxStatusCd22', labelName: 'TxStatusCd22Text', forMst: false, isAutoComplete: false, apiServiceName: 'GetTxStatusCd22List', actionTypeName: 'GET_DDL_TxStatusCd22' },\r\n ]\r\n this.ScreenOnDemandDef = [\r\n\r\n ]\r\n this.ScreenDocumentDef = [\r\n\r\n ]\r\n this.ScreenCriDdlDef = [\r\n { columnName: 'Eth1WithdrawalAddr10', payloadDdlName: '', keyName: '', labelName: '', isCheckBox:false, isAutoComplete: false, apiServiceName: '', actionTypeName: 'GET_Eth1WithdrawalAddr10' },\r\n ]\r\n this.SearchActions = {\r\n ...[...this.ScreenDdlDef].reduce((a, v) => { a['Search' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenCriDdlDef].reduce((a, v) => { a['SearchCri' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type !== 'DocList' && f.type !== 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetColumnOnDemandAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetRefColumnOnDemandAction(v); return a; }, {}),\r\n ...this.MakePullUpOnDemandAction([...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['GetRef' + v.refColumnName] = { dependents: [...((a['GetRef' + v.refColumnName] || {}).dependents || []), v] }; return a; }, {})),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'DocList').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetDocumentListAction(v); return a; }, {}),\r\n }\r\n this.OnDemandActions = {\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Get').reduce((a, v) => { a['Get' + v.columnName + 'Content'] = this.MakeGetDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Add').reduce((a, v) => { a['Add' + v.columnName + 'Content'] = this.MakeAddDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Del').reduce((a, v) => { a['Del' + v.columnName + 'Content'] = this.MakeDelDocumentContentAction(v); return a; }, {}),\r\n }\r\n this.ScreenDdlSelectors = this.ScreenDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeDdlSelectors(v); return a; }, {})\r\n this.ScreenCriDdlSelectors = this.ScreenCriDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeCriDdlSelectors(v); return a; }, {})\r\n this.actionReducers = this.MakeActionReducers();\r\n }\r\n GetScreenName() { return 'EthTxHistory' }\r\n GetMstKeyColumnName(isUnderlining = false) { return isUnderlining ? 'Eth2WalletId' : 'Eth2WalletId6'; }\r\n GetDtlKeyColumnName(isUnderlining = false) { return isUnderlining ? 'TxHistoryId' : 'TxHistoryId22'; }\r\n GetPersistDtlName() { return this.GetScreenName() + '_Dtl'; }\r\n GetPersistMstName() { return this.GetScreenName() + '_Mst'; }\r\n GetWebService() { return EthTxHistoryService; }\r\n GetReducerActionTypePrefix() { return this.GetScreenName(); };\r\n GetActionType(actionTypeName) { return getAsyncTypes(this.GetReducerActionTypePrefix(), actionTypeName); }\r\n GetInitState() {\r\n return {\r\n ...initialRintagiScreenReduxState,\r\n Label: {\r\n ...initialRintagiScreenReduxState.Label,\r\n }\r\n }\r\n };\r\n\r\n GetDefaultDtl(state) {\r\n return (state || {}).NewDtl ||\r\n {\r\n TxHistoryId22: null,\r\n Eth2ValidatorId22: null,\r\n StakeAmt22: null,\r\n WithdrawAmt22: null,\r\n StakeRewardAmt22: null,\r\n MiningRewardAmt22: null,\r\n MEVRewardAmt22: null,\r\n TimeStamp22: null,\r\n BlockNbr22: null,\r\n EpochNbr22: null,\r\n SlotNbr22: null,\r\n TxHash22: null,\r\n TxStatusCd22: null,\r\n }\r\n }\r\n ExpandMst(mst, state, copy) {\r\n return {\r\n ...mst,\r\n key: Date.now(),\r\n Eth2WalletId6: copy ? null : mst.Eth2WalletId6,\r\n }\r\n }\r\n ExpandDtl(dtlList, copy) {\r\n if (!copy) return dtlList;\r\n else if (!this.allowTmpDtl) return [];\r\n else {\r\n const now = Date.now();\r\n return dtlList.map((v, i) => {\r\n return {\r\n ...v,\r\n Eth2WalletId6: null,\r\n TxHistoryId22: null,\r\n TmpKeyId: now + i,\r\n }\r\n })\r\n };\r\n }\r\n\r\n SearchListToSelectList(state) {\r\n const searchList = ((state || {}).SearchList || {}).data || [];\r\n return searchList\r\n .map((v, i) => {\r\n return {\r\n key: v.key || null,\r\n value: v.labelL || v.label || ' ',\r\n label: v.labelL || v.label || ' ',\r\n labelR: v.labelR || ' ',\r\n detailR: v.detailR || ' ',\r\n detail: v.detail || ' ',\r\n idx: i,\r\n isSelected: v.isSelected,\r\n }\r\n })\r\n }\r\n}\r\n\r\n/* ReactRule: Redux Custom Function */\r\n\r\n/* ReactRule End: Redux Custom Function */\r\n\r\n/* helper functions */\r\n\r\nexport function ShowMstFilterApplied(state) {\r\n return !state\r\n || !state.ScreenCriteria\r\n || (state.ScreenCriteria.Eth1WithdrawalAddr10 || {}).LastCriteria\r\n || state.ScreenCriteria.SearchStr;\r\n}\r\n\r\nexport default new EthTxHistoryRedux()\r\n","import React, { Component } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators } from 'redux';\r\nimport {Button, ButtonToolbar, Modal} from 'reactstrap';\r\nimport log from '../../helpers/logger';\r\n\r\nclass ModalDialog extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n // modal: false,\r\n backdrop: \"static\"\r\n };\r\n this.end = this.end.bind(this);\r\n this.continue = this.continue.bind(this);\r\n }\r\n \r\n end() { \r\n if (this.props.onChange) this.props.onChange(\"N\");\r\n }\r\n\r\n continue(){\r\n \r\n if (this.props.onChange) this.props.onChange(\"Y\");\r\n }\r\n \r\n render() {\r\n let Icon; \r\n switch (this.props.color) {\r\n case 'primary':\r\n Icon = ;\r\n break;\r\n case 'success':\r\n Icon = ;\r\n break;\r\n case 'warning':\r\n Icon = ;\r\n break;\r\n case 'error':\r\n Icon = ;\r\n break;\r\n case 'danger':\r\n Icon = ;\r\n break;\r\n default:\r\n break;\r\n }\r\n \r\n return (\r\n
\r\n \r\n
{this.props.component}
\r\n
\r\n \r\n {this.props.header ? '' : Icon}\r\n

{this.props.title}

\r\n
\r\n
\r\n {this.props.message}\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n \r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ModalDialog));","import React, { Component } from 'react';\r\nimport { Pagination, PaginationItem, PaginationLink } from 'reactstrap';\r\nimport range from 'lodash.range';\r\nimport ChevronRightIcon from 'mdi-react/ChevronRightIcon';\r\nimport ChevronLeftIcon from 'mdi-react/ChevronLeftIcon';\r\n\r\n//to call this component, call and pass in the item array list\r\nlet pageNum = 1;\r\n\r\nexport default class Paging extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { pager: {}, initialPage: 1, size: this.props.pageSize };\r\n this.setPage = this.setPage.bind(this);\r\n this.getPager = this.getPager.bind(this);\r\n }\r\n\r\n componentWillMount() {\r\n // set page if items array isn't empty\r\n if (this.props.items && this.props.items.length) {\r\n this.setPage(this.props.initialPage);\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n // reset page if items array has changed\r\n if (this.props.items !== prevProps.items) {\r\n //console.log('pager source changed', prevProps.items, this.props.items)\r\n this.setPage(this.props.initialPage, true);\r\n }\r\n }\r\n\r\n setPage(page, sourceChanged) {\r\n const items = this.props.items;\r\n const pager = this.state.pager;\r\n const size = this.state.size;\r\n\r\n //console.log('pager to go page', page, pager.totalPages)\r\n \r\n if (page < 1 || (page > pager.totalPages && !sourceChanged)) {\r\n return;\r\n }\r\n\r\n // get new pager object for specified page\r\n // use parent 'filter' to get interested items\r\n const filteredItem = typeof this.props.filter !== 'function' || !items ? items || [] : items.filter(this.props.filter) || [];\r\n this.pager = this.getPager(filteredItem.length, page, size);\r\n\r\n // get new page of items from items array\r\n const pageOfItems = filteredItem.slice(pager.startIndex, pager.endIndex + 1);\r\n //console.log(\"startIndex: \" + this.pager.startIndex);\r\n //console.log(\"endIndex: \" + this.pager.endIndex);\r\n //console.log(filteredItem.slice(this.pager.startIndex, this.pager.endIndex + 1));\r\n\r\n // update state\r\n this.setState({ pager: this.pager });\r\n\r\n // call change page function in parent component\r\n //console.log(pageOfItems);\r\n // this.props.onChangePage(pageOfItems);\r\n //console.log('update pager parent', filteredItem.slice(this.pager.startIndex, this.pager.endIndex + 1), page)\r\n this.props.onChangePage(filteredItem.slice(this.pager.startIndex, this.pager.endIndex + 1), page);\r\n }\r\n\r\n getPager(totalItems, currentPage, pageSize) {\r\n // default to first page\r\n currentPage = currentPage || 1;\r\n\r\n // default page size is 10\r\n pageSize = pageSize || 10;\r\n\r\n // calculate total pages\r\n let totalPages = Math.ceil(totalItems / pageSize);\r\n\r\n let startPage, endPage;\r\n if (totalPages <= 10) {\r\n // less than 10 total pages so show all\r\n startPage = 1;\r\n endPage = totalPages;\r\n } else {\r\n // more than 10 total pages so calculate start and end pages\r\n if (currentPage <= 6) {\r\n startPage = 1;\r\n endPage = 10;\r\n } else if (currentPage + 4 >= totalPages) {\r\n startPage = totalPages - 9;\r\n endPage = totalPages;\r\n } else {\r\n startPage = currentPage - 5;\r\n endPage = currentPage + 4;\r\n }\r\n }\r\n\r\n // calculate start and end item indexes\r\n let startIndex = (currentPage - 1) * pageSize;\r\n // let endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1);\r\n let endIndex = (currentPage - 1) * pageSize + pageSize -1;\r\n\r\n // create an array of pages to ng-repeat in the pager control\r\n let pages = range(startPage, endPage + 1);\r\n\r\n // return object with all pager properties required by the view\r\n pageNum = currentPage;\r\n return {\r\n totalItems: totalItems,\r\n currentPage: currentPage,\r\n pageSize: pageSize,\r\n totalPages: totalPages,\r\n startPage: startPage,\r\n endPage: endPage,\r\n startIndex: startIndex,\r\n endIndex: endIndex,\r\n pages: pages,\r\n };\r\n }\r\n\r\n render() {\r\n\r\n const filteredItem = typeof this.props.filter !== 'function' || !this.props.items ? this.props.items || [] : this.props.items.filter(this.props.filter) || [];\r\n return (\r\n
\r\n {this.pager === undefined ? '' :\r\n
\r\n {(!this.pager.pages || this.pager.pages.length <= 1) ? '' :\r\n \r\n \r\n this.setPage(1)}>\r\n \r\n \r\n \r\n {this.pager.pages.map((page, index) =>\r\n \r\n this.setPage(page)}>\r\n {page}\r\n \r\n \r\n )}\r\n \r\n this.setPage(this.pager.totalPages)}>\r\n \r\n \r\n \r\n \r\n }\r\n
\r\n Showing {this.pager.pageSize * (this.pager.currentPage - 1) + 1 + ' '}\r\n to {this.pager.pageSize * this.pager.currentPage > filteredItem.length ? filteredItem.length\r\n : this.pager.pageSize * this.pager.currentPage} of {filteredItem.length} items\r\n
\r\n
\r\n }\r\n
\r\n );\r\n }\r\n}\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Badge, Card, CardBody, Col, Collapse,\r\n} from 'reactstrap';\r\nimport CloseIcon from 'mdi-react/CloseIcon';\r\nimport MinusIcon from 'mdi-react/MinusIcon';\r\nimport AutorenewIcon from 'mdi-react/AutorenewIcon';\r\nimport LoadingIcon from 'mdi-react/LoadingIcon';\r\n\r\nconst AlertComponent = ({\r\n md, lg, xl, sm, xs, color, divider, icon, title, label, subhead, before,\r\n panelClass, children,\r\n}) => {\r\n const [visible, setVisible] = useState(true);\r\n const [collapse, setCollapse] = useState(true);\r\n const [refresh, setRefresh] = useState(false);\r\n\r\n const onDismiss = () => {\r\n setVisible(false);\r\n };\r\n\r\n const toggleCollapse = () => {\r\n setCollapse(prevState => !prevState);\r\n };\r\n\r\n // your async logic here\r\n const onRefresh = () => {\r\n setRefresh(true);\r\n };\r\n\r\n useEffect(() => {\r\n if (refresh) {\r\n // fake timeout\r\n setTimeout(() => setRefresh(false), 5000);\r\n }\r\n }, [refresh]);\r\n\r\n if (visible) {\r\n return (\r\n \r\n \r\n \r\n {refresh ?
: ''}\r\n
\r\n
\r\n {icon ? : ''}\r\n {title}\r\n {label}\r\n
\r\n \r\n
\r\n \r\n
\r\n {children}\r\n
\r\n
\r\n
\r\n \r\n {before}\r\n \r\n );\r\n }\r\n\r\n return '';\r\n};\r\n\r\nAlertComponent.propTypes = {\r\n divider: PropTypes.bool,\r\n color: PropTypes.string,\r\n title: PropTypes.string,\r\n subhead: PropTypes.string,\r\n label: PropTypes.string,\r\n icon: PropTypes.string,\r\n md: PropTypes.number,\r\n lg: PropTypes.number,\r\n xl: PropTypes.number,\r\n sm: PropTypes.number,\r\n xs: PropTypes.number,\r\n before: PropTypes.element,\r\n panelClass: PropTypes.string,\r\n};\r\n\r\nAlertComponent.defaultProps = {\r\n divider: false,\r\n color: '',\r\n title: '',\r\n subhead: '',\r\n label: '',\r\n icon: '',\r\n md: 0,\r\n lg: 0,\r\n xl: 0,\r\n sm: 0,\r\n xs: 0,\r\n before: null,\r\n panelClass: '',\r\n};\r\n\r\nexport default AlertComponent;\r\n\r\nexport const PanelTitle = ({ title }) => (\r\n
\r\n
\r\n {title}\r\n
\r\n
\r\n);\r\n\r\nPanelTitle.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n};\r\n","import { Container } from \"theme-ui\";\r\n\r\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { logout, login } from '../redux/Auth';\r\n\r\n// liquity functionalities(smart contract related)\r\nimport {\r\n LiquityStoreState,\r\n Decimal,\r\n Cache,\r\n} from \"@liquity/lib-base\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\nimport { useTransactionFunction } from \"../components/Transaction\";\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\n\r\nimport {\r\n selectForCacheChangeValidation,\r\n validateCacheChange\r\n} from \"../components/Cache/validation/validateCacheChange\";\r\nimport { CacheChange } from \"@liquity/lib-base\";\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar, Table, Nav, NavItem, NavLink, TabContent, TabPane } from 'reactstrap';\r\nimport Eth2WalletReduxObj from '../redux/Eth2Wallet';\r\nimport EthTxHistoryReduxObj from '../redux/EthTxHistory';\r\nimport ModalDialog from '../components/custom/ModalDialog';\r\nimport log from '../helpers/logger';\r\nimport { useMyTransactionState } from \"../components/Transaction\";\r\nimport { BigNumber } from \"@ethersproject/bignumber\";\r\nimport { string } from \"prop-types\";\r\nimport { shortenAddress } from \"../utils/shortenAddress\";\r\nimport { SyncValidators } from '../services/Eth2WalletService';\r\nimport { GetRewards } from '../services/EthTxHistoryService';\r\nimport Paging from '../components/custom/Paging';\r\nimport classnames from 'classnames';\r\nimport Panel from '../components/custom/Panel';\r\nimport { Spinner } from \"theme-ui\";\r\nimport * as XLSX from 'xlsx';\r\nimport { InfoIcon } from \"../components/InfoIcon\";\r\n\r\n//let InitPageNumber = 1;\r\nlet visibleValidatorList = [];\r\n\r\nconst selector = (state) => {\r\n const { cache, fees, price, accountBalance, stabilityDeposit, total } = state;\r\n return {\r\n cache,\r\n fees,\r\n price,\r\n accountBalance,\r\n stabilityDeposit,\r\n total,\r\n validationContext: selectForCacheChangeValidation(state)\r\n };\r\n};\r\n\r\nconst TRANSACTION_ID = \"cache-management\";\r\n\r\nconst Dashboard = (props) => {\r\n const {\r\n cache: previousCache\r\n , fees\r\n , price: ethPrice\r\n , accountBalance: walletEthAmount\r\n , stabilityDeposit\r\n , total: systemTotal\r\n , rewardEthAmt\r\n , validationContext } = useLiquitySelector(selector);\r\n const {\r\n account,\r\n liquity: { send: liquitySend, populate: liquityTry, store, connection }\r\n } = useLiquity();\r\n const multiDepositAddress = ((connection || {}).addresses || {}).multipleDeposit;\r\n const walletAddress = (connection || {}).userAddress;\r\n const chainId = (connection || {}).chainId;\r\n\r\n const transactionState = useMyTransactionState(TRANSACTION_ID);\r\n\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n rewards: [],\r\n cacheOpened: !!previousCache,\r\n ethStakingAmt: 0,\r\n ethStakingAmtError: undefined,\r\n ethMinStakingAmt: undefined,\r\n errorFlag: false,\r\n txListPageOfItems: [],\r\n ValidatorPageOfItems: [],\r\n //InitPageNumber: 1,\r\n\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n });\r\n\r\n const [didMount, setDidMount] = useState(false);\r\n const [emptyValidatorList] = useState([]);\r\n const [latestValidatorList, setLatestValidatorList] = useState(emptyValidatorList);\r\n const [filteredValidatorList, setFilteredValidatorList] = useState(emptyValidatorList);\r\n const [InitPageNumber, setInitPageNumber] = useState(1);\r\n const [txHistoryLoading, setTxHistoryLoading] = useState(true);\r\n const [eth2WalletLoading, setEth2WalletLoading] = useState(true);\r\n const [loadedTime] = useState(Date.now())\r\n\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, global, Eth2Wallet, EthTxHistory } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n global: reduxState.global,\r\n Eth2Wallet: reduxState.Eth2Wallet,\r\n EthTxHistory: reduxState.EthTxHistory,\r\n };\r\n });\r\n\r\n // log.debug(kycPerson, user, auth);\r\n // simulating class(this -> _this)\r\n const [_state, setState] = useState(0);\r\n\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n setMyState({ ...myState, ...newState });\r\n setState(_state + 1);\r\n },\r\n\r\n stakeETH: (event) => {\r\n props.history.push('/stakeEth');\r\n },\r\n\r\n withdrawETH: (event) => {\r\n props.history.push('/withdrawETH');\r\n },\r\n\r\n onChangePage(pageOfItems, page) {\r\n // update state with new page of items\r\n //InitPageNumber = page;\r\n setInitPageNumber(page);\r\n _this.setState({ txListPageOfItems: pageOfItems });\r\n },\r\n\r\n onValidatorChangePage(pageOfItems, page) {\r\n // update state with new page of items\r\n //InitPageNumber = page;\r\n setInitPageNumber(page);\r\n _this.setState({ ValidatorPageOfItems: pageOfItems });\r\n },\r\n\r\n handleSubmit: (event) => {\r\n // alert('A name was submitted: ' + this.state.value);\r\n event.preventDefault();\r\n },\r\n\r\n exportToSpreadsheet: (event) => {\r\n // Modify the toDateString function to format as \"yyyy-mm-dd\"\r\n // const toDateString = (timestamp) => {\r\n // const date = new Date(timestamp);\r\n // const year = date.getFullYear();\r\n // const month = String(date.getMonth() + 1).padStart(2, '0'); // Ensure two digits for month\r\n // const day = String(date.getDate()).padStart(2, '0'); // Ensure two digits for day\r\n // return `${year}-${month}-${day}`; // Format as yyyy-mm-dd\r\n // };\r\n\r\n // Helper function to convert a JavaScript date to an Excel serial date\r\n function toExcelDate(timestamp) {\r\n const date = new Date(timestamp);\r\n return (date - new Date(1899, 11, 30)) / (24 * 60 * 60 * 1000);\r\n }\r\n\r\n // Function to get current date and format as \"yyyymmdd\"\r\n const getCurrentDateString = () => {\r\n const currentDate = new Date();\r\n const year = currentDate.getFullYear();\r\n const month = String(currentDate.getMonth() + 1).padStart(2, '0'); // Two digits for month\r\n const day = String(currentDate.getDate()).padStart(2, '0'); // Two digits for day\r\n return `${year}${month}${day}`; // Format as \"yyyymmdd\" without dashes for the file name\r\n };\r\n\r\n // Prepare data for the spreadsheet\r\n const data = txList.map(item => ({\r\n Status: item.TxStatusCd22Text || 'N/A',\r\n Transaction: getTransaction(item),\r\n // Date: toDateString(item.TimeStamp22),\r\n Date: toExcelDate(item.TimeStamp22), // Convert to Excel serial date number\r\n Amount: parseFloat(getAmount(item)), // Convert the amount to a number (retain its precision)\r\n FullAmount: getFullAmount(item), // Get full 18 decimals amount\r\n Currency: \"ETH\",\r\n Explorer: (item.TxHash22 || item.Eth2ValidatorId22Text) ? getTxOrVLink(item) : \"N/A\"\r\n }));\r\n\r\n // Map the data to worksheet format and ensure numbers are stored as numbers\r\n const wsData = data.map((item) => [\r\n { v: item.Status, t: \"s\" }, // String\r\n { v: item.Transaction, t: \"s\" }, // String\r\n { v: item.Date, t: \"n\" }, // Excel serial date (number)\r\n { v: item.Amount, t: \"n\" }, // Numeric value with the correct precision\r\n { v: item.FullAmount.toString(), t: \"s\" }, // String\r\n { v: item.Currency, t: \"s\" }, // String\r\n { v: item.Explorer, t: \"s\" }, // String\r\n ]);\r\n\r\n\r\n const XLSX = require('xlsx-js-style');\r\n // Create a worksheet with headers\r\n const ws = XLSX.utils.aoa_to_sheet([[\"Status\", \"Transaction\", \"Date (yyyy-mm-dd)\", \"Amount\", \"Full Amount\", \"Currency\", \"Explorer\"], ...wsData]);\r\n \r\n // Apply number format for 8 decimal places in the Amount column (4th column)\r\n ws['!cols'] = [\r\n { width: 15 }, // Adjust the width of the Status column\r\n { width: 15 }, // Adjust the width of the Transaction column\r\n { width: 20, z: 'yyyy-mm-dd' }, // Apply date format to the Date column\r\n { width: 15, z: '0.00000000' }, // Apply 8 decimal format to the Amount column\r\n { width: 30}, // Keep the width, but remove the `z` formatting\r\n { width: 10 }, // Adjust the width of the Currency column\r\n { width: 150 }, // Adjust the width of the Explorer column\r\n ];\r\n\r\n // Apply right alignment to the \"Date\" and \"Amount\" headers\r\n ws['A1'].s = { font: { bold: true } };\r\n ws['B1'].s = { font: { bold: true } };\r\n ws['C1'].s = { alignment: { horizontal: 'right' }, font: { bold: true } }; \r\n ws['D1'].s = { alignment: { horizontal: 'right' }, font: { bold: true } }; \r\n ws['E1'].s = { alignment: { horizontal: 'right' }, font: { bold: true } };\r\n ws['F1'].s = { font: { bold: true } };\r\n ws['G1'].s = { font: { bold: true } };\r\n\r\n // Apply the 8 decimal places format directly to the 'Amount' cells\r\n wsData.forEach((row, index) => {\r\n const dateCellAddress = XLSX.utils.encode_cell({ r: index + 1, c: 2 }); // Date is in the 3rd column (zero-indexed)\r\n if (ws[dateCellAddress]) {\r\n ws[dateCellAddress].z = 'yyyy-mm-dd'; // Set the format for date\r\n }\r\n\r\n const cellAddress = XLSX.utils.encode_cell({ r: index + 1, c: 3 }); // Amount is in the 4th column (zero-indexed)\r\n if (ws[cellAddress]) {\r\n ws[cellAddress].z = '0.00000000'; // Set the format for 8 decimal places\r\n }\r\n\r\n const fullAmountCellAddress = XLSX.utils.encode_cell({ r: index + 1, c: 4 }); // FullAmount is in the 5th column (zero-indexed)\r\n if (ws[fullAmountCellAddress]) {\r\n // Force Excel to treat FullAmount as text by setting numberFormat to '@' and apply right alignment\r\n ws[fullAmountCellAddress].s = {\r\n alignment: { horizontal: 'right' }, // Right align the FullAmount column\r\n };\r\n ws[fullAmountCellAddress].z = '@'; // Forces Excel to treat it as text\r\n }\r\n });\r\n\r\n // Create a new workbook and add the worksheet\r\n const wb = XLSX.utils.book_new();\r\n XLSX.utils.book_append_sheet(wb, ws, 'Transactions');\r\n\r\n // Get the current date string and add it to the filename\r\n const fileName = \"LTD Transactions \" + getCurrentDateString() + \".xlsx\";\r\n\r\n // Export to XLSX file\r\n XLSX.writeFile(wb, fileName);\r\n }\r\n\r\n }), [_state, myState, props.history]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n const { mstId } = { ...props.match.params };\r\n if (!didMount && (!(EthTxHistory || {}).AuthCol || true)) {\r\n const from = walletAddress;\r\n log.debug(\"dashboard start loading tx history\");\r\n dispatch(EthTxHistoryReduxObj.SetScreenCriteria('', { Eth1WithdrawalAddr10: from, }, 0));\r\n dispatch(EthTxHistoryReduxObj.LoadPage('MstRecord', { mstId: mstId || '!', DtlBlob: 'C', MstBlob: 'C' }));\r\n\r\n GetRewards(walletAddress)\r\n .then(data => {\r\n log.debug(\"rewards result\", data);\r\n _this.setState({\r\n rewards: (data.data || {}).Dtl || (data.data || {}).dtl || [],\r\n });\r\n })\r\n .catch(error => {\r\n log.debug(\"rewards result\", error);\r\n _this.setState({\r\n rewards: [],\r\n });\r\n });\r\n }\r\n\r\n if (!didMount && (!(Eth2Wallet || {}).AuthCol || true)) {\r\n setDidMount(true);\r\n // must use the dispatch form for the redux binding\r\n const from = walletAddress;\r\n\r\n log.debug(\"dashboard start syncing validators\");\r\n SyncValidators(walletAddress, multiDepositAddress)\r\n .then(data => {\r\n log.debug(\"validator sync result\", data);\r\n })\r\n .catch(error => {\r\n log.debug(\"validator sync result\", error);\r\n })\r\n .finally(() => {\r\n log.debug(\"dashboard start loading synced validators\");\r\n dispatch(Eth2WalletReduxObj.SetScreenCriteria('', { Eth1WithdrawalAddr10: from, }, 0));\r\n dispatch(Eth2WalletReduxObj.LoadPage('MstRecord', { mstId: mstId || '!', DtlBlob: 'C', MstBlob: 'C' }));\r\n })\r\n\r\n store.refresh();\r\n }\r\n\r\n //InitPageNumber = 1;\r\n\r\n }, [didMount, dispatch, Eth2Wallet, EthTxHistory, props, _this, ethPrice, store, walletAddress, multiDepositAddress]);\r\n\r\n // ComponentDidUpdate() equivalent\r\n useEffect(() => {\r\n // Anything in here is fired on component mount.\r\n //InitPageNumber = 1;\r\n const latestDtl = (((Eth2Wallet || {}).DtlList || {}).data || emptyValidatorList);\r\n if (latestDtl !== latestValidatorList) {\r\n setLatestValidatorList(latestDtl);\r\n setFilteredValidatorList(latestDtl.filter(item => item.ValidatorStatusCd5Text != '' && item.ValidatorStatusCd5Text != 'UNKNOWN'));\r\n }\r\n //console.log('latest dtl in didupdate()',latestDtl, filteredValidatorList);\r\n //visibleValidatorList.length = 0;\r\n //const dtl = (((Eth2Wallet || {}).DtlList || {}).data || []).filter(item=>item.ValidatorStatusCd5Text != '' && item.ValidatorStatusCd5Text != 'UNKNOWN');\r\n //dtl.forEach(item => visibleValidatorList.push(item));\r\n return () => {\r\n // Anything in here is fired on component unmount.\r\n //InitPageNumber = 1;\r\n }\r\n }, [transactionState, latestValidatorList, emptyValidatorList, Eth2Wallet, _this]);\r\n\r\n // body of the render()\r\n const toUTCString = (d) => new Date(d.toString()).toUTCString();\r\n const toDateString = (d) => { const x = new Date(d.toString()); return x.toLocaleString('default', { year: 'numeric' }) + '-' + x.toLocaleString('default', { month: 'short' }) + '-' + x.toLocaleString('default', { day: 'numeric' }); };\r\n const toDecimalStr = (n, d = 8) => n * 1 >= 0 ? Decimal.fromBigNumberString(n).prettify(d || 8) : '-' + Decimal.fromBigNumberString(n.substring(1)).prettify(d || 8);\r\n const getRewards = (n) => (n.StakeRewardAmt22 != 0) ? toDecimalStr(n.StakeRewardAmt22) : (n.MiningRewardAmt22 > 0) ? toDecimalStr(n.MiningRewardAmt22) : toDecimalStr(n.MEVRewardAmt22);\r\n const getTransaction = (n) => (n.StakeAmt22 > 0) ? 'Deposit' : (n.WithdrawAmt22 < 0) ? 'Withdraw' : (n.StakeRewardAmt22 > 0) ? 'Staking Reward' : (n.MiningRewardAmt22 > 0) ? 'Fees Reward' : 'MEV Reward';\r\n const getAmount = (n) => (n.StakeAmt22 > 0) ? toDecimalStr(n.StakeAmt22) : (n.WithdrawAmt22 < 0) ? toDecimalStr(n.WithdrawAmt22) : getRewards(n);\r\n // get full rewards amount in 18 decimals\r\n const toFullDecimalStr = (n, d = 18) => n * 1 >= 0 ? Decimal.fromBigNumberString(n).prettify(d || 18) : '-' + Decimal.fromBigNumberString(n.substring(1)).prettify(d || 18);\r\n const getFullRewards = (n) => (n.StakeRewardAmt22 != 0) ? toFullDecimalStr(n.StakeRewardAmt22) : (n.MiningRewardAmt22 > 0) ? toFullDecimalStr(n.MiningRewardAmt22) : toFullDecimalStr(n.MEVRewardAmt22);\r\n const getFullAmount = (n) => (n.StakeAmt22 > 0) ? toFullDecimalStr(n.StakeAmt22) : (n.WithdrawAmt22 < 0) ? toFullDecimalStr(n.WithdrawAmt22) : getFullRewards(n);\r\n \r\n const getTxLink = (tx) => 'https://' + getChainPrefix() + 'etherscan.io/tx/' + tx;\r\n const getVLink = (v) => 'https://' + getChainPrefix() + 'beaconcha.in/validator/' + v;\r\n const getTxOrVLink = (item) => (item.TxHash22 != '') ? 'https://' + getChainPrefix() + 'etherscan.io/tx/' + item.TxHash22 : 'https://' + getChainPrefix() + 'beaconcha.in/validator/' + item.Eth2ValidatorId22Text + getSection(item);\r\n const getSection = (item) => (item.StakeRewardAmt22 > 0 || item.WithdrawAmt22 < 0) ? '#withdrawals' : '#blocks';\r\n const getChainPrefix = () => (chainId == '5') ? 'goerli.' : '';\r\n const toDurationStr = (d) => {\r\n const diff = Math.abs(new Date().valueOf() - new Date(d.toString()).valueOf());\r\n const days = diff / (24 * 60 * 60 * 1000);\r\n const hours = (days % 1) * 24;\r\n //const minutes = (hours % 1) * 60;\r\n //const secs = (minutes % 1) * 60;\r\n return Math.floor(days) + ' days, ' + Math.floor(hours) + ' hours';\r\n };\r\n const isPendingValidator = (s) => parseInt(s) < 3;\r\n const toEstimateStr = (d) => {\r\n const diff = Math.abs(new Date(d.toString()).valueOf() - new Date().valueOf());\r\n const days = diff / (24 * 60 * 60 * 1000);\r\n const hours = (days % 1) * 24;\r\n //const minutes = (hours % 1) * 60;\r\n //const secs = (minutes % 1) * 60;\r\n return Math.floor(days) + ' days, ' + Math.floor(hours) + ' hours';\r\n };\r\n\r\n const txList = ((EthTxHistory || {}).DtlList || {}).data || [];\r\n console.log('txList', txList);\r\n\r\n const rewards = (_this.state.rewards || []);\r\n\r\n console.log('rewards', rewards);\r\n\r\n const currMst = ((Eth2Wallet || {}).Mst || {});\r\n const currDtlList = ((Eth2Wallet || {}).DtlList || {}).data || [];\r\n //const currDtlList = visibleValidatorList;\r\n //const currDtlList = filteredValidatorList;\r\n const displayStatus = ['1', '2', '3', '4', '6', '7']; // DEPOSITED, PENDING, ACTIVE, EXITING, EXITED, DEPLOYED\r\n const visibleValidatorFilter = (item => {\r\n const include = displayStatus.includes(item.ValidatorStatusCd5);\r\n return include;\r\n });\r\n\r\n const stakedStatus = ['1', '2', '3', '4', '7']; // DEPOSITED, PENDING, ACTIVE, EXITING, DEPLOYED\r\n const totalStaked = currDtlList.reduce((a, v) => { (stakedStatus.includes(v.ValidatorStatusCd5)) ? a += 32 : a += 0; return a; }, 0);\r\n console.log('currDtlList', currDtlList);\r\n if (_this.state.txListPageOfItems && _this.state.txListPageOfItems.length == 0 && txList.length > 0) {\r\n _this.setState({ txListPageOfItems: txList.slice(0, 5) });\r\n }\r\n\r\n if (_this.state.ValidatorPageOfItems && _this.state.ValidatorPageOfItems.length == 0 && currDtlList.length > 0) {\r\n _this.setState({ ValidatorPageOfItems: currDtlList.slice(0, 5) });\r\n }\r\n\r\n const txListPageOfItems = (_this.state.txListPageOfItems || []);\r\n const ValidatorPageOfItems = (_this.state.ValidatorPageOfItems || []).filter(visibleValidatorFilter);\r\n\r\n if (txHistoryLoading && (EthTxHistory || {}).mstVersion > loadedTime) {\r\n setTxHistoryLoading(false);\r\n }\r\n if (eth2WalletLoading && (Eth2Wallet || {}).mstVersion > loadedTime) {\r\n setEth2WalletLoading(false);\r\n }\r\n //const txHistoryLoading = ((EthTxHistory || {}).searchlist_loading || false);\r\n //const eth2WalletLoading = ((Eth2Wallet || {}).searchlist_loading || false);\r\n\r\n const loadingData = txHistoryLoading || eth2WalletLoading;\r\n\r\n console.log('loading data', loadingData);\r\n\r\n // const { t } = useTranslation('common');\r\n const [activeTab, setActiveTab] = useState('1');\r\n\r\n const toggle = (tab) => {\r\n if (activeTab !== tab) setActiveTab(tab);\r\n };\r\n\r\n return (\r\n // export const Dashboard = () => (\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

Total Staked

{totalStaked} ETH

\r\n
\r\n \r\n
\r\n \r\n \r\n { _this.stakeETH() }}>Stake ETH\r\n \r\n \r\n { _this.withdrawETH() }}>Withdraw ETH\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n

Rewards \r\n \r\n
Rewards are shown with 8 decimal places for readability. The total is calculated using full-precision values before rounding to 8 decimal places for accuracy. As a result, summing the displayed rewards may slightly differ from the total. To view full-precision values, use the Export function at the bottom right of the Transactions dashboard to download them in Excel format.
\r\n

\r\n }\r\n />\r\n \r\n \r\n

Reward Statements
\r\n
\r\n \r\n \r\n
\r\n {(loadingData) && Loading...}\r\n {!loadingData && rewards.length > 0 &&\r\n \r\n }\r\n {!loadingData && rewards.length > 0 && \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {rewards.map((item, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
Total RewardsStaking RewardsMEV RewardsFees Rewards
\r\n {item.Daily_TotalRewardPct}%
\r\n {toDecimalStr(item.Daily_TotalRewardAmt)} ETH\r\n
\r\n {item.Daily_StakeRewardPct}%
\r\n {toDecimalStr(item.Daily_StakeRewardAmt)} ETH\r\n
\r\n {item.Daily_MEVRewardPct}%
\r\n {toDecimalStr(item.Daily_MEVRewardAmt)} ETH\r\n
\r\n {item.Daily_MiningRewardPct}%
\r\n {toDecimalStr(item.Daily_MiningRewardAmt)} ETH\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {rewards.map((item, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
Total RewardsStaking RewardsMEV RewardsFees Rewards
\r\n {item.Weekly_TotalRewardPct}%
\r\n {toDecimalStr(item.Weekly_TotalRewardAmt)} ETH\r\n
\r\n {item.Weekly_StakeRewardPct}%
\r\n {toDecimalStr(item.Weekly_StakeRewardAmt)} ETH\r\n
\r\n {item.Weekly_MEVRewardPct}%
\r\n {toDecimalStr(item.Weekly_MEVRewardAmt)} ETH\r\n
\r\n {item.Weekly_MiningRewardPct}%
\r\n {toDecimalStr(item.Weekly_MiningRewardAmt)} ETH\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {rewards.map((item, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
Total RewardsStaking RewardsMEV RewardsFees Rewards
\r\n {item.Monthly_TotalRewardPct}%
\r\n {toDecimalStr(item.Monthly_TotalRewardAmt)} ETH\r\n
\r\n {item.Monthly_StakeRewardPct}%
\r\n {toDecimalStr(item.Monthly_StakeRewardAmt)} ETH\r\n
\r\n {item.Monthly_MEVRewardPct}%
\r\n {toDecimalStr(item.Monthly_MEVRewardAmt)} ETH\r\n
\r\n {item.Monthly_MiningRewardPct}%
\r\n {toDecimalStr(item.Monthly_MiningRewardAmt)} ETH\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {rewards.map((item, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
Total RewardsStaking RewardsMEV RewardsFees Rewards
\r\n {item.TotalRewardPctAnnualized}% *
\r\n {item.TotalRewardPct}%
\r\n {toDecimalStr(item.TotalRewardAmt)} ETH\r\n
\r\n {item.StakeRewardPctAnnualized}% *
\r\n {item.StakeRewardPct}%
\r\n {toDecimalStr(item.StakeRewardAmt)} ETH\r\n
\r\n {item.MEVRewardPctAnnualized}% *
\r\n {item.MEVRewardPct}%
\r\n {toDecimalStr(item.MEVRewardAmt)} ETH\r\n
\r\n {item.MiningRewardPctAnnualized}% *
\r\n {item.MiningRewardPct}%
\r\n {toDecimalStr(item.MiningRewardAmt)} ETH\r\n
\r\n
* LTD Annualized %
\r\n
\r\n
\r\n
\r\n
\r\n }\r\n {\r\n (!loadingData && rewards.length == 0) &&\r\n

No recent rewards.

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

Transactions

\r\n
\r\n \r\n
\r\n {(loadingData) && Loading...}\r\n {!loadingData && txList.length > 0 &&\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {txListPageOfItems.map((item, i) => (\r\n // {txList.map((item, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n\r\n \r\n
StatusTransactionDateAmount (ETH)Explorer
\r\n
\r\n {item.TxStatusCd22Text != \"\" ? item.TxStatusCd22Text : \"N/A\"}\r\n
\r\n {getTransaction(item)}
\r\n
\r\n {toDateString(item.TimeStamp22)}
\r\n
\r\n {getAmount(item)}
\r\n
\r\n {(item.TxHash22 || item.Eth2ValidatorId22Text) ? View : \"N/A\"}
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n }\r\n {\r\n (txList.length == 0 && !txHistoryLoading) &&\r\n

No recent transactions.

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

Validators

\r\n
\r\n \r\n
\r\n {(loadingData) && Loading...}\r\n {!loadingData && currDtlList.length > 0 &&\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {ValidatorPageOfItems.map((item, i) => (\r\n // {currDtlList.map((item, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
StatusAddressCreated OnUptimeExplorer
\r\n
\r\n {item.ValidatorStatusCd5Text != '' ? item.ValidatorStatusCd5Text : '—'}\r\n
\r\n {shortenAddress(\"0x\" + item.PubKey5)}
\r\n
\r\n {toDateString(item.CreatedOnUtc5)}
\r\n
\r\n {(!isPendingValidator(item.ValidatorStatusCd5)) ? toDurationStr(item.ActivationUtc5) : (item.ActivationUtc5 != '') ? 'Active in ~' + toEstimateStr(item.ActivationUtc5) : '—'}
\r\n
\r\n {View}
\r\n
\r\n
\r\n
\r\n }\r\n {\r\n (!loadingData && currDtlList.length == 0) &&\r\n

No validators, please stake ETH.

\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRouter(Dashboard);\r\n","export default __webpack_public_path__ + \"static/media/personImg.9ad9de14.png\";","export default __webpack_public_path__ + \"static/media/businessImg.a503f244.png\";","import React, { Component } from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col } from 'reactstrap';\r\nimport log from '../helpers/logger';\r\nimport { setSpinner, registerTopbarLeft } from '../redux/Global';\r\nimport CheckCircleIcon from 'mdi-react/CheckCircleIcon';\r\nimport { isEmpty } from '../helpers/utils';\r\nimport { showNotification } from '../redux/Notification';\r\nimport personImg from '../img/personImg.png';\r\nimport businessImg from '../img/businessImg.png';\r\n\r\nclass StakeOption extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n reduxRefreshed: false,\r\n individualChecked: true,\r\n businessChecked: false,\r\n };\r\n\r\n this.props.setSpinner(true, 'GSS');\r\n\r\n const loadPageOptions = { SkipMetaData: true, SkipSupportingData: true };\r\n\r\n this.Continue = this.Continue.bind(this);\r\n\r\n const _this = this;\r\n }\r\n\r\n Back() {\r\n this.props.history.push('/stakeOption');\r\n }\r\n\r\n Continue() {\r\n if (this.state.individualChecked == true) {\r\n this.props.history.push('/stakeETH');\r\n } else if (this.state.businessChecked == true) {\r\n this.props.history.push('/dashboard');\r\n }\r\n }\r\n\r\n onIndividualChecked = () => {\r\n this.setState({\r\n individualChecked: true,\r\n businessChecked: false\r\n });\r\n }\r\n\r\n onBusinessChecked = () => {\r\n this.setState({\r\n individualChecked: false,\r\n businessChecked: true\r\n });\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n
\r\n

What do you want to do today?

\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n { this.Continue() }}>Continue\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { setSpinner: setSpinner },\r\n { registerTopbarLeft: registerTopbarLeft },\r\n // { logout: logout},\r\n { showNotification: showNotification },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(StakeOption));","\r\nimport { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\n\r\nlet activeScope = {};\r\n\r\nexport function setAccessScope(scope) {\r\n activeScope = {\r\n ...activeScope,\r\n ...scope,\r\n }\r\n}\r\n\r\nexport function GetAuthCol(accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetAuthCol'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetAuthRow(accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetAuthRow'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n\r\n}\r\nexport function GetScreenLabel(accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetScreenLabel'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope || getAccessScope())\r\n }\r\n )\r\n\r\n}\r\n\r\nexport function GetLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetSystemLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetSystemLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetScreenButtonHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetScreenButtonHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetScreenHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenCriteria(accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewMst(accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetNewMst'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewDtl(accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetNewDtl'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenFilter(accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetScreenFilter'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetSearchList(searchStr, topN, filterId, desiredScreenCriteria, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetSearchList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n desiredScreenCriteria: desiredScreenCriteria || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetStakePayment3List(searchStr, topN, filterId, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetStakePayment3List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetStakePayment3ById(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetStakePayment3ById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetMstById = GetStakePayment3ById;\r\nexport function GetStakePayment3DtlById(keyId, filterId, options, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetStakePayment3DtlById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n filterId: filterId || 0,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetDtlById = GetStakePayment3DtlById;\r\nexport function LoadInitPage(options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/LoadInitPage'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SaveData(mst, dtl, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst || {},\r\n dtl: dtl || [],\r\n options: options || {}\r\n });\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/SaveData'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function DelMst(mst, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst,\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/DelMst'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SetScreenCriteria(criteriaValues, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/SetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n criteriaValues: criteriaValues\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetRefColumnContent(mstId, dtlId, refKeyId, isMaster, refScreenColumnName, options, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetRefColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n refKeyId: refKeyId || null,\r\n refScreenColumnName: refScreenColumnName || null,\r\n isMaster: isMaster || false,\r\n options: options || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/*screen criteria dll and screen dropdownlist/autocomplete*/\r\n\r\nexport function GetPmtTypeCd4List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetPmtTypeCd4List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetUsrId4List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetUsrId4List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetStakeWalletAddrId4List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetStakeWalletAddrId4List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule: Service Custom Function */\r\n\r\nexport function GetFtxPayment(txHash, ftxTokenAddress, walletAddress, fintruxWallet, ftxAmt, creditAmt, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetFtxPayment'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n txHash: txHash || '',\r\n ftxTokenAddress: ftxTokenAddress || '',\r\n walletAddress: walletAddress || '',\r\n fintruxWallet: fintruxWallet || '',\r\n ftxAmt: ftxAmt || '',\r\n creditAmt: creditAmt || '',\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetEthPayment(txHash, walletAddress, fintruxWallet, ethAmt, creditAmt, accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetEthPayment'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n txHash: txHash || '',\r\n walletAddress: walletAddress || '',\r\n fintruxWallet: fintruxWallet || '',\r\n ethAmt: ethAmt || '',\r\n creditAmt: creditAmt || '',\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetRates(accessScope) {\r\n return fetchData(baseUrl + '/StakePaymentWs.asmx/GetRates'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n/* ReactRule End: Service Custom Function */\r\n","import { Container, Flex, Spinner, Heading } from \"theme-ui\";\r\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { logout, login } from '../redux/Auth';\r\n\r\n// liquity functionalities(smart contract related)\r\nimport {\r\n LiquityStoreState,\r\n Decimal,\r\n BigNumber,\r\n Cache,\r\n} from \"@liquity/lib-base\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\nimport { useTransactionFunction } from \"../components/Transaction\";\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\n\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar } from 'reactstrap';\r\nimport Eth2WalletReduxObj from '../redux/Eth2Wallet'\r\nimport { SyncValidators } from '../services/Eth2WalletService';\r\nimport ModalDialog from '../components/custom/ModalDialog';\r\nimport log from '../helpers/logger';\r\nimport { useMyTransactionState } from \"../components/Transaction\";\r\nimport CheckIcon from 'mdi-react/CheckIcon';\r\nimport { InfoIcon } from \"../components/InfoIcon\";\r\nimport { GetRates } from '../services/StakePaymentService';\r\n\r\nconst selector = (state) => {\r\n const { cache, fees, price, accountBalance, ftxBalance, stabilityDeposit, paydInRewardsPool,\r\n total, ethAmt, rewardEthAmt, ftxStake, ftxAllowance } = state;\r\n return {\r\n cache,\r\n fees,\r\n price,\r\n accountBalance,\r\n ftxBalance,\r\n stabilityDeposit,\r\n paydInRewardsPool,\r\n total,\r\n ethAmt,\r\n rewardEthAmt,\r\n ftxStake,\r\n ftxAllowance\r\n };\r\n};\r\n\r\nconst TRANSACTION_ID = \"stability-deposit\";\r\n\r\nconst StakeETH = (props) => {\r\n const {\r\n cache: previousCache\r\n , fees\r\n , price: ethPrice\r\n , accountBalance: walletEthAmount\r\n , ftxBalance: walletFtxAmount\r\n , stabilityDeposit\r\n , paydInRewardsPool: paydInRewardsPool\r\n , total\r\n , ethAmt\r\n , rewardEthAmt\r\n , ftxStake\r\n , ftxAllowance } = useLiquitySelector(selector);\r\n const {\r\n liquity: { send: liquitySend, populate: liquityTry, store, connection }\r\n , config\r\n } = useLiquity();\r\n const multipleDepositAddress = ((connection || {}).addresses || {}).multipleDeposit;\r\n const walletAddress = (connection || {}).userAddress;\r\n const chainId = (connection || {}).chainId;\r\n\r\n\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n cacheOpened: !!previousCache,\r\n transactions: [],\r\n ethWithdrawSelection: \"\",\r\n validatorStakingvalue: \"\",\r\n ethStakingvalue: \"\",\r\n ethStakingInTransit: 0,\r\n ethStakingError: undefined,\r\n errorFlag: false,\r\n confirmWithdrawalAddr: false,\r\n withdrawalAddr: walletAddress,\r\n confirmStake: false,\r\n // spinnerStatus: false,\r\n\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n });\r\n const myStateRef = useRef(myState);\r\n const privateChainIds = [88, 99, 8888, 9999];\r\n const isPrivateChain = privateChainIds.filter(c => c == chainId).length > 0;\r\n const [spinnerStatus, setSpinnerStatus] = useState(false);\r\n const [didMount, setDidMount] = useState(false);\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, global, Eth2Wallet } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n global: reduxState.global,\r\n Eth2Wallet: reduxState.Eth2Wallet,\r\n };\r\n });\r\n const transactionState = useMyTransactionState(TRANSACTION_ID);\r\n const isTransactionPending =\r\n transactionState.type === \"waitingForApproval\" ||\r\n transactionState.type === \"waitingForConfirmation\";\r\n\r\n const depositEth = async () => {\r\n // acquire the updated deposit_json\r\n const { pubkeys, withdrawal_credentials, signatures, deposit_data_roots, fork_version } = _this.deposit_json || {};\r\n return liquitySend.depositMultipleValidators((+fork_version), pubkeys, withdrawal_credentials, signatures, deposit_data_roots, {});\r\n };\r\n\r\n const [depositTransaction] = useTransactionFunction(\r\n TRANSACTION_ID,\r\n depositEth);\r\n\r\n const waitForConfirmation = async (tx) => {\r\n return await tx.waitForReceipt();\r\n }\r\n\r\n const submitDepositTransaction = (confirm) => {\r\n if (confirm) {\r\n const currDtlList = ((Eth2Wallet || {}).DtlList || {}).data || [];\r\n\r\n if (currDtlList.length > 0) {\r\n try {\r\n const validatorCnt = _this.state.validatorStakingvalue;\r\n // remove duplicates\r\n var unusedValidators = [\r\n ...new Map(currDtlList.filter(x => x.ValidatorStatusCd5 == '').map((item) => [item[\"PubKey5\"], item])).values(),\r\n ];\r\n\r\n var newValidators = (unusedValidators.length > validatorCnt) ? unusedValidators.slice(0, validatorCnt) : unusedValidators;\r\n var depositFiles = newValidators.map(a => JSON.parse(atob(JSON.parse(a.DepositJson5).base64))[0]);\r\n\r\n var pubkeys = depositFiles.map(a => \"0x\" + a.pubkey);\r\n var withdrawal_credentials = depositFiles.map(a => \"0x\" + a.withdrawal_credentials);\r\n var signatures = depositFiles.map(a => \"0x\" + a.signature);\r\n var deposit_data_roots = depositFiles.map(a => \"0x\" + a.deposit_data_root);\r\n var fork_version = depositFiles.map(a => a.fork_version)[0];\r\n // directly use _this(or object property) and not react state\r\n // js is single threaded so this would be run first and\r\n // when this accessed(by call below), it is guaranteed to be updated by this\r\n\r\n _this.deposit_json = {\r\n pubkeys: pubkeys,\r\n withdrawal_credentials: withdrawal_credentials,\r\n signatures: signatures,\r\n deposit_data_roots: deposit_data_roots,\r\n fork_version\r\n };\r\n\r\n depositTransaction().then((tx) => {\r\n if (tx) {\r\n dispatch(Eth2WalletReduxObj.SavePage(\r\n currMst,\r\n currMst,\r\n newValidators.map(a => { a.ValidatorStatusCd5 = '0'; return a; }),\r\n {\r\n persist: true\r\n }\r\n ));\r\n return tx;\r\n }\r\n else {\r\n return Promise.reject('cancelled');\r\n }\r\n }).then((tx) => { return waitForConfirmation(tx) }).then((txReceipt) => {\r\n log.debug('Stake ETH txhash', txReceipt.rawReceipt.transactionHash);\r\n const multiDepositAddress = ((connection || {}).addresses || {}).multipleDeposit;\r\n SyncValidators(walletAddress, multiDepositAddress)\r\n .then(data => {\r\n log.debug(\"validator sync result\", data);\r\n })\r\n .catch(error => {\r\n log.debug(\"validator sync result\", error);\r\n })\r\n .finally(() => {\r\n setTimeout(() => {\r\n props.history.push('/'); // go to 'root' so if currently in dashboard it would be 'reloaded'\r\n }, 1 * 1000); // SavePage currently is async(no await), defer 1s to give dashboard time to have latest 'save' \r\n })\r\n\r\n }).catch(e => {\r\n log.debug('Stake ETH error', e);\r\n });\r\n\r\n } catch (error) {\r\n _this.setState({\r\n confirmWithdrawalAddr: false,\r\n });\r\n console.log(error);\r\n }\r\n }\r\n\r\n };\r\n }\r\n\r\n // simulating class(this -> _this)\r\n const [_state, setState] = useState(0);\r\n\r\n const [_lastSync, setLastSync] = useState(Date.now());\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n myStateRef.current = { ...myStateRef.current, ...newState };\r\n setMyState(myStateRef.current);\r\n setState(_state + 1);\r\n },\r\n\r\n ReviewTransaction: (callback) => {\r\n const confirm = () => {\r\n if (callback) callback(true);\r\n }\r\n const cancel = () => {\r\n if (callback) callback(false);\r\n }\r\n const modalChange = (YesNo) => {\r\n _this.setState({ ModalOpen: false });\r\n if (YesNo === \"Y\") confirm();\r\n else cancel();\r\n };\r\n\r\n var confirmationSummary = \"
\" +\r\n \"
Stake Amount
\" +\r\n \"\" + Decimal.ZERO.add(_this.state.validatorStakingvalue) + \" Validators ( \" +\r\n \"\" + Decimal.ZERO.add(_this.state.ethStakingvalue) + \" ETH )\" +\r\n \"
\" +\r\n \"
Withdrawal address
\" +\r\n \"

\" + walletAddress + \"

\" +\r\n \"
Send ETH Into ETH Deposit Contract
\" +\r\n \"

We do not hold any of your ETH. You are sending your ETH to our audited
ETH deposit contract to save you time and gas fee while depositing into your validators.

\" +\r\n \"
\";\r\n\r\n var messageCnt = \"
\" +\r\n confirmationSummary +\r\n \"
\";\r\n\r\n _this.setState({\r\n ModalOpen: true,\r\n ModalSuccess: confirm,\r\n ModalCancel: cancel,\r\n OnModalReturn: modalChange,\r\n ModalHeader: false,\r\n ModalColor: \"success\",\r\n ModalTitle: 'Transaction Summary',\r\n ModalMsg:
\r\n });\r\n },\r\n\r\n\r\n handleValidatorChange: (event) => {\r\n var ethAmount = Decimal.ZERO.add(event.target.value * 32);\r\n var ethStakingErrorMsg = \"\";\r\n if (walletEthAmount.lt(ethAmount || 0)) {\r\n ethStakingErrorMsg = \"You are staking more ETH than you have in your wallet. Please refresh this page and try again.\";\r\n }\r\n\r\n //limit the input box to be max 0 decimal\r\n var t = event.target.value;\r\n event.target.value = (t.indexOf(\".\") >= 0) ? (t.substr(0, t.indexOf(\".\")) + t.substr(t.indexOf(\".\"), 0)) : t;\r\n\r\n _this.setState({\r\n validatorStakingvalue: event.target.value,\r\n ethStakingvalue: ethAmount,\r\n ethStakingError: ethStakingErrorMsg,\r\n });\r\n },\r\n\r\n handleConfirmWithdrawalAddrChange: (event) => {\r\n _this.setState({\r\n confirmWithdrawalAddr: !_this.state.confirmWithdrawalAddr,\r\n });\r\n },\r\n\r\n handleWithdrawalAddrChange: (event) => {\r\n _this.setState({\r\n withdrawalAddr: event.target.value,\r\n });\r\n },\r\n\r\n\r\n Back: (event) => {\r\n props.history.push('/stakeOption');\r\n },\r\n\r\n BackToPrev: (event) => {\r\n _this.setState({\r\n confirmStake: !_this.state.confirmStake,\r\n confirmWithdrawalAddr: !_this.state.confirmWithdrawalAddr,\r\n });\r\n },\r\n\r\n Continue: (event) => {\r\n setTimeout(() => setSpinnerStatus(true), 0);\r\n\r\n const currMst = ((Eth2Wallet || {}).Mst || {});\r\n const currDtlList = ((Eth2Wallet || {}).DtlList || {}).data || [];\r\n const eth2WalletId = (currMst || {}).Eth2WalletId6 || '';\r\n // chain id affects if the created deposit json can be used for the current chain\r\n // cannot mix 2 deposit json using different chain\r\n if (currMst.NetworkId6 && currMst.NetworkId6 != chainId) {\r\n log.debug(`cannot mix chain for the same account`);\r\n setTimeout(() => setSpinnerStatus(false), 0);\r\n return;\r\n }\r\n\r\n dispatch(Eth2WalletReduxObj.SavePage(\r\n currMst,\r\n {\r\n //Eth2WalletId6: currMst.Eth2WalletId6 || '',\r\n Eth2WalletId6: eth2WalletId,\r\n Eth1WithdrawalAddr6: currMst.Eth1WithdrawalAddr6 || _this.state.withdrawalAddr || '',\r\n StartIdx6: 0, // calculated server-side\r\n ValidatorCnt6: _this.state.validatorStakingvalue || 0,\r\n Remark6: _this.state.withdrawalAddr + ' - ' + currDtlList.length + ' validators', //calculated server-side\r\n NetworkId6: currMst.NetworkId6 || chainId,\r\n Unlocked6: 'N',\r\n },\r\n currDtlList,\r\n {\r\n persist: true,\r\n CreateValidator: 'Y'\r\n }\r\n )).then(data => {\r\n setTimeout(() => setSpinnerStatus(false), 0);\r\n\r\n _this.setState({\r\n confirmStake: !_this.state.confirmStake,\r\n });\r\n }).catch(e => {\r\n log.debug('Continue ETH error', e);\r\n setTimeout(() => setSpinnerStatus(false), 0);\r\n });;\r\n },\r\n\r\n handleSubmit: (event) => {\r\n // alert('A name was submitted: ' + this.state.value);\r\n event.preventDefault();\r\n }\r\n }), [_state, myState, walletFtxAmount]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n const { mstId } = { ...props.match.params };\r\n if (!didMount) {\r\n setDidMount(true);\r\n // must use the dispatch form for the redux binding\r\n\r\n const getRate = GetRates().then(data => {\r\n console.log('get rates', data.data);\r\n return data.data;\r\n });\r\n \r\n const srvCalls = Promise.all([\r\n getRate\r\n ]).then(values => {\r\n console.log('values', values);\r\n _this.setState({\r\n usdRate: values[0].USD,\r\n });\r\n });\r\n\r\n const from = walletAddress;\r\n dispatch(Eth2WalletReduxObj.SetScreenCriteria('', { Eth1WithdrawalAddr10: from, }, 0));\r\n dispatch(Eth2WalletReduxObj.LoadPage('MstRecord', { mstId: mstId || '!', DtlBlob: 'C', MstBlob: 'C' }));\r\n store.refresh();\r\n }\r\n\r\n\r\n\r\n }, [didMount, dispatch, Eth2Wallet, props, _this, ethPrice, multipleDepositAddress, walletAddress, store]);\r\n\r\n // ComponentDidUpdate() equivalent\r\n useEffect(() => {\r\n var now = Date.now()\r\n if (transactionState.type === \"confirmed\" && (now - (_lastSync || 0) > 5000)) {\r\n log.debug('re-sync');\r\n //lastSync = now;\r\n setLastSync(now);\r\n // empty out data input if successful\r\n _this.setState({\r\n validatorStakingvalue: 0,\r\n ethStakingvalue: 0,\r\n ethStakingInTransit: _this.state.ethStakingvalue,\r\n confirmStake: !_this.state.confirmStake\r\n });\r\n }\r\n }, [transactionState, _lastSync, setLastSync, _this, walletAddress, multipleDepositAddress]);\r\n\r\n // body of the render()\r\n const currMst = ((Eth2Wallet || {}).Mst || {});\r\n const currDtlList = ((Eth2Wallet || {}).DtlList || {}).data || [];\r\n const stakedStatus = ['1', '2', '3']; // DEPOSITED, PENDING, ACTIVE\r\n const totalStaked = currDtlList.filter(x => stakedStatus.includes(x.ValidatorStatusCd5)).length * 32;\r\n const smartContractLink = (chainId == '5') ? 'https://goerli.etherscan.io/address/' + multipleDepositAddress + \"#code\"\r\n : 'https://etherscan.io/address/' + multipleDepositAddress + \"#code\";\r\n\r\n console.log('currMst', currMst);\r\n console.log('currDtl', currDtlList);\r\n\r\n const loader = (\r\n
\r\n
\r\n
Creating Validator(s)...
\r\n

Please don't refresh or leave the screen.

\r\n
\r\n );\r\n\r\n return (\r\n \r\n \r\n
\r\n {/* Staking Section */}\r\n {spinnerStatus &&
{loader}
\r\n }\r\n {!_this.state.confirmStake && !spinnerStatus &&\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

How many validators do you want to run?

Currently Staked: {totalStaked} ETH

\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n ['e', 'E', '+', '-', '.'].includes(e.key) && e.preventDefault()}\r\n onWheel={(e) => e.target.blur()}\r\n />\r\n VALIDATORS\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n ['e', 'E', '+', '-'].includes(e.key) && e.preventDefault()}\r\n onWheel={(e) => e.target.blur()}\r\n disabled\r\n />\r\n ETH\r\n
\r\n
\r\n {/* \r\n {_this.state.ethStakingError}\r\n */}\r\n
\r\n \r\n \r\n \r\n {_this.state.ethStakingError}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Each staked validator will be charged {myState.usdRate} U.S. dollar(s) per day in USD/ETH/FTX; visit pricing for more details.

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

Delegate my existing ETH staking services to Staked.Finance

\r\n \r\n
To delegate your ETH staking services to our platform, we recommend you close your services on your previous platform and create new validator(s) using Staked.Finance.
\r\n
\r\n }\r\n />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n }\r\n\r\n {!_this.state.confirmStake && !spinnerStatus &&\r\n \r\n \r\n {/* {hasAllowance && */}\r\n
\r\n {/* no staked PAYD */}\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n

Withdrawal address

\r\n
\r\n {/* } */}\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n ['e', 'E', '+', '-'].includes(e.key) && e.preventDefault()}\r\n onWheel={(e) => e.target.blur()}\r\n onChange={_this.handleWithdrawalAddrChange}\r\n />\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n

Please confirm that you understand that this address cannot be changed once a validator is established.

\r\n

ETH will be fully withdrawn to this address and only this address when the validator is exited. MEV+ rewards will also be accumulated to this address.

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

I understand and wish to continue.

\r\n
\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n { _this.Continue() }}>Continue\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n }\r\n\r\n {_this.state.confirmStake && !spinnerStatus &&\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
Stake Amount to Send
\r\n
\r\n {_this.state.validatorStakingvalue.toString()} Validators\r\n {_this.state.ethStakingvalue.toString()} ETH \r\n
\r\n
\r\n Withdrawal address\r\n
\r\n

{walletAddress}

\r\n
Send ETH Into Validators on EVM
\r\n

We do not hold any of your ETH. You are sending your ETH via our simple ETH Deposit Smart Contract into your validators on EVM to save you time and gas fee.

\r\n

Please be aware that if a Ledger hardware wallet is used, Blind Signing must be enabled in your device settings.

\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n }\r\n\r\n {_this.state.confirmStake && !spinnerStatus &&\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n { _this.BackToPrev() }}> Back\r\n \r\n \r\n { submitDepositTransaction(true) }}>Send ETH\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n }\r\n \r\n \r\n );\r\n};\r\n\r\nexport default withRouter(StakeETH);\r\n","const blocker = []\r\n\r\nexport function registerBlocker(blockFn) {\r\n if (blocker.indexOf(blockFn) < 0) blocker.push(blockFn);\r\n}\r\n\r\nexport function unregisterBlocker(blockFn) {\r\n const idx = blocker.indexOf(blockFn);\r\n if (blocker.indexOf(blockFn) >= 0) blocker.splice(idx,1);\r\n}\r\n\r\nexport function getUserConfirmation(message, callback) {\r\n if (blocker.length > 0) return blocker[0](message,callback);\r\n else callback(window.confirm(message));\r\n}\r\n\r\nexport function hasBlocker() { return blocker.length > 0;}","import log from '../helpers/logger';\r\nimport { getUrl } from '../services/systemService';\r\nimport { getDefaultPath } from '../helpers/utils';\r\nimport { getReactContainerInfo, getReactContainerStatus, uuid } from '../helpers/domutils';\r\n\r\n/* this is rintagi controlled redux, DO NOT EXPAND OR MODIFY\r\n * it would be overwritten\r\n */\r\n\r\nexport const BUNDLE_CHECK_RESULT = 'BUNDLE_CHECK_RESULT';\r\n\r\nconst initState={\r\n bundleStatus: {\r\n currentJSBundleName: null,\r\n cachedJSBundleName: null,\r\n latestJSBundleName: null,\r\n lastCheckedBundleName: null,\r\n lastBundleCheckOn: null, \r\n latestBundleLastModified: null,\r\n latestBundleETag: null,\r\n }\r\n}\r\n\r\n// Reducer\r\nexport function rintagiReducer(state = initState, action) {\r\n switch (action.type) {\r\n case BUNDLE_CHECK_RESULT:\r\n return { \r\n ...state, \r\n bundleStatus: {\r\n ...state.bundleStatus,\r\n ...action.payload,\r\n }\r\n }\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nconst onGoingCheck = {\r\n waiting: undefined,\r\n};\r\nlet lastCheckOn = 0;\r\nlet refreshing = false;\r\nexport function refreshApp(refresh) {\r\n if (refreshing) return false;\r\n else if (refresh) return refreshing = refresh;\r\n else return false;\r\n}\r\nexport function checkBundleUpdate(docObj, fromLocation) {\r\n return (dispatch, getState, { webApi }) => {\r\n const currentBundleStatus = (getState().rintagi || {}).bundleStatus || {};\r\n if (onGoingCheck.waiting) {\r\n return onGoingCheck.waiting;\r\n }\r\n const _uuid = uuid();\r\n const rintagi = docObj.Rintagi;\r\n const swRegistration = docObj.swRegistration;\r\n const swUnRegister = docObj.swUnRegister;\r\n const myRunningJS = rintagi.myJS;\r\n const indexCached = rintagi.indexCached !== false;\r\n const defaultCheckIntervalSec = 60;\r\n const checkInterval = rintagi.bundleCheckInterval || defaultCheckIntervalSec;\r\n const myself = rintagi.myDocumentUrl;\r\n const myselfLatest = myself + (myself[myself.length - 1] === '/' ? '' : '/') + '?' + uuid(); // bypass caching via (?) and don't need server urlrewrite support\r\n const lastCheckedVersion = currentBundleStatus.lastCheckedBundleName;\r\n const lastModified = currentBundleStatus.latestBundleLastModified;\r\n const eTag = currentBundleStatus.latestBundleETag;\r\n const now = Date.now();\r\n const options = {\r\n headers: {\r\n }\r\n }\r\n log.debug(indexCached, now - lastCheckOn, now, lastCheckOn);\r\n if (lastModified) options.headers['If-Modified-Since'] = lastModified;\r\n //if (eTag) options.headers['If-None-Match'] = eTag;\r\n const me = (now - lastCheckOn) < checkInterval * 1000\r\n ? Promise.resolve({})\r\n : getUrl(myself, options)\r\n .then(ret => {\r\n lastCheckOn = !indexCached ? now : lastCheckOn;\r\n return getReactContainerStatus(ret);\r\n })\r\n .catch(error => {\r\n return {\r\n\r\n }\r\n });\r\n const latestMe = \r\n (!indexCached || (now - lastCheckOn) < checkInterval * 1000)\r\n ? Promise.resolve({})\r\n : getUrl(myselfLatest, options)\r\n .then(ret => {\r\n lastCheckOn = now;\r\n log.debug('forced check ' + myselfLatest);\r\n return getReactContainerStatus(ret);\r\n })\r\n .catch(error => {\r\n return {\r\n\r\n }\r\n });\r\n const meAndLatestMe = Promise.all([me, latestMe]);\r\n onGoingCheck.waiting = meAndLatestMe\r\n .then(([me, newMe]) => {\r\n const latestMe = newMe.myJS ? newMe : (me.myJS ? me : {});\r\n const latestBundleJS = newMe.myJS || me.myJS;\r\n const latestLastModified = newMe.lastModified || me.lastModified;\r\n const latestETag = newMe.etag || me.etag;\r\n log.debug(myself, myselfLatest, latestMe, myRunningJS);\r\n if (\r\n (newMe.myJS && myRunningJS !== newMe.myJS)\r\n ||\r\n (me.myJS && myRunningJS !== me.myJS)\r\n ||\r\n (newMe.myJS && newMe.myJS !== me.myJS)\r\n ) {\r\n const currentUrl = fromLocation.href;\r\n const refreshUrl = currentUrl.replace(myself, myselfLatest);\r\n //lastCheckOn = now;\r\n // this (.update()) doesn't work, still use the old one even after call\r\n if (swRegistration) {\r\n false && swRegistration.update()\r\n .then(r => {\r\n console.log('sw refreshed via update')\r\n console.log(r);\r\n })\r\n .catch(error => {\r\n console.log('sw refreshed failed')\r\n console.log(error);\r\n })\r\n }\r\n if ((\r\n !lastCheckedVersion ||\r\n (latestBundleJS && lastCheckedVersion !== latestBundleJS)\r\n )\r\n ) {\r\n log.info(myRunningJS, latestBundleJS);\r\n console.log('a new version is available, please refresh the page');\r\n if (typeof swUnRegister === 'function') {\r\n // this is a must to force no caching before reload, basically disable service worker\r\n // we don't do it here, leave to front end(see screen.js)\r\n // document.swUnRegister();\r\n }\r\n // alert('a new version is available, please refresh the page');\r\n // window.location.reload();\r\n }\r\n //window.location = refreshUrl;\r\n //window.location.reload();\r\n }\r\n if (latestBundleJS\r\n // only dispatch if there is change ?\r\n //&& latestBundleJS !== lastCheckedVersion\r\n ) {\r\n dispatch({ type: BUNDLE_CHECK_RESULT\r\n , payload: {\r\n currentJSBundleName: myRunningJS,\r\n cachedJSBundleName: me.myJS,\r\n latestJSBundleName: latestBundleJS,\r\n lastCheckedBundleName: latestBundleJS,\r\n lastBundleCheckOn: now, \r\n latestBundleLastModified: latestLastModified,\r\n latestBundleETag: latestETag,\r\n \r\n } });\r\n \r\n }\r\n return {\r\n latestMe:latestMe || {},\r\n currentJSBundleName: myRunningJS,\r\n } \r\n })\r\n .catch(error => {\r\n console.log(error);\r\n return Promise.reject(error);\r\n })\r\n .finally(() => {\r\n onGoingCheck.waiting = undefined;\r\n })\r\n return onGoingCheck.waiting;\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { getIn, setIn } from 'formik';\r\nimport moment from 'moment';\r\nimport { getAddMstPath, getAddDtlPath, getNaviPath, getEditDtlPath, getEditMstPath, debounce, isEmailFormat, isEmpty, isEmptyArray, isEmptyObject, isEmptyId, isValidRange, delay } from '../../helpers/utils'\r\nimport { registerBlocker, unregisterBlocker } from '../../helpers/navigation';\r\nimport { GetDropdownAction, GetBottomAction, GetRowAction } from '../../redux/_ScreenReducer'\r\nimport { getDefaultPath } from '../../helpers/utils';\r\nimport { getReactContainerInfo, getReactContainerStatus, uuid } from '../../helpers/domutils';\r\nimport { parsedUrl } from '../../helpers/domutils';\r\nimport { getUrl } from '../../services/systemService';\r\nimport log from '../../helpers/logger';\r\nimport { toCapital , _getQueryString, getUrlBeforeRouter } from '../../helpers/formatter';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect, dispatch } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { checkBundleUpdate, refreshApp } from '../../redux/_Rintagi';\r\n\r\nconst isEmptyFileList = (fileList) => Array.isArray(fileList) && (fileList.length === 0 || (fileList.length === 1 && fileList[0].isEmptyFileObject))\r\n\r\n//export default class RintagiScreen extends Component {\r\nclass RintagiScreen extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.ScreenButtonAction = {\r\n InsRow: this.AddNewDtl.bind(this),\r\n Clear: this.AddNewMst.bind(this),\r\n Delete: this.DelMst.bind(this),\r\n EditHdr: this.EditHdr.bind(this),\r\n EditRow: this.EditRow.bind(this),\r\n DrillDown: this.DrillDown.bind(this),\r\n DelRow: this.DelDtl.bind(this),\r\n Copy: this.CopyHdr.bind(this),\r\n CopyRow: this.CopyRow.bind(this),\r\n Save: this.SaveMst.bind(this),\r\n SaveDtl: this.SaveDtl.bind(this),\r\n New: this.AddNewMst.bind(this),\r\n NewSave: this.NewSaveMst.bind(this),\r\n NewSaveDtl: this.NewSaveDtl.bind(this),\r\n SaveClose: this.SaveCloseMst.bind(this),\r\n SaveCloseDtl: this.SaveCloseDtl.bind(this),\r\n ExpTxt: this.ExpMstTxt.bind(this),\r\n Print: this.Print.bind(this),\r\n MstFilter: this.ToggleMstListFilterVisibility.bind(this),\r\n }\r\n\r\n if (this.props.checkBundleUpdate) {\r\n const bundleCheck = this.props.checkBundleUpdate;\r\n if (bundleCheck) {\r\n bundleCheck(document, window.location)\r\n .then(bundle => {\r\n const latestJS = bundle.latestMe.myJS;\r\n const [myBaseUrl, path] = window.location.href.split('#');\r\n if (latestJS \r\n && latestJS !== bundle.currentJSBundleName \r\n && !this.noAutoRefresh) {\r\n setTimeout(() => {\r\n if (!this.noAutoRefresh && refreshApp(true)) {\r\n log.info('force reloading of app');\r\n if (typeof document.swUnRegister === 'function') {\r\n log.info('disable SW');\r\n // this is a must to force no caching before reload\r\n document.swUnRegister();\r\n }\r\n alert('A new version of application is available. Application will be refreshed!');\r\n setTimeout(() => {\r\n window.location.reload(); \r\n //window.location = myBaseUrl + \"_\" + uuid() + \"#\" + path; \r\n }, 100);\r\n }\r\n else {\r\n \r\n }\r\n }, 0); \r\n }\r\n return bundle;\r\n })\r\n .catch(error => {\r\n console.log(error);\r\n return Promise.reject(error);\r\n })\r\n }\r\n }\r\n }\r\n\r\n static GetScreenButtonDef(buttons, screenType, prevReactState) {\r\n if (buttons.key && buttons.key !== ((prevReactState || {}).buttons || {}).key) {\r\n\r\n const dropdownMenuButtons = GetDropdownAction(buttons[screenType]);\r\n const rowButtons = GetRowAction(buttons[screenType]);\r\n const bottomButtons = GetBottomAction(buttons[screenType]);\r\n // const moreButton =\r\n const hasDropdownMenuButton = Object.keys(dropdownMenuButtons).filter(v => dropdownMenuButtons[v].visible).length > 0;\r\n const hasRowButton = Object.keys(rowButtons).filter(v => rowButtons[v].visible).length > 0;\r\n const hasBottomButton = Object.keys(bottomButtons).filter(v => bottomButtons[v].visible).length > 0;\r\n const dropdownMenuButtonList = Object.keys(dropdownMenuButtons)\r\n .map(n => dropdownMenuButtons[n])\r\n .filter(v => v.visible)\r\n .sort((a, b) => a.order - b.order);\r\n const rowMenuButtonList = Object.keys(rowButtons)\r\n .map(n => rowButtons[n])\r\n .filter(v => v.visible)\r\n .sort((a, b) => a.order - b.order);\r\n const bottomButtonList = Object.keys(bottomButtons)\r\n .map(n => bottomButtons[n])\r\n .filter(v => v.visible)\r\n .sort((a, b) => a.order - b.order);\r\n return {\r\n key: buttons.key,\r\n bottomButtons: bottomButtons,\r\n rowButtons: rowButtons,\r\n dropdownMenuButtons: dropdownMenuButtons,\r\n hasDropdownMenuButton: hasDropdownMenuButton,\r\n hasRowButton: hasRowButton,\r\n hasBottomButton: hasBottomButton,\r\n dropdownMenuButtonList: dropdownMenuButtonList,\r\n rowMenuButtonList: rowMenuButtonList,\r\n bottomButtonList: bottomButtonList,\r\n }\r\n }\r\n else return null;\r\n\r\n }\r\n\r\n static ShowSpinner(state, src) {\r\n return !state || (src === \"MstList\" && state.searchlist_loading) || (!src && (state.page_loading || state.page_saving));\r\n }\r\n\r\n static ShowMoreMstBtn(state) {\r\n return state && (state.ScreenCriteria.TopN < state.ScreenCriteria.MatchCount)\r\n }\r\n\r\n GetAuthCol(state) {\r\n const authCol = !Array.isArray(state.AuthCol) ? state.AuthCol : (state.AuthCol || []).reduce((a, v, i, _a) => {\r\n a[v.ColName] = {\r\n ...v,\r\n readonly: v.ColReadOnly === \"Y\",\r\n visible: v.ColVisible !== \"N\",\r\n }; return a;\r\n }, {});\r\n return authCol;\r\n }\r\n\r\n ActionSuppressed(authRow, buttonType, mstId, dtlId) {\r\n const canAdd = authRow.AllowAdd === \"Y\" && authRow.ViewOnly !== \"Y\";\r\n const canUpd = authRow.AllowUpd === \"Y\" && authRow.ViewOnly !== \"Y\";\r\n const canDel = authRow.AllowDel === \"Y\" && authRow.ViewOnly !== \"Y\";\r\n\r\n return (\r\n (buttonType === \"EditHdr\" && !this.state.isMobile)\r\n ||\r\n (buttonType === \"EditRow\" && !this.state.isMobile)\r\n ||\r\n (buttonType === \"Delete\" && (!canDel || !mstId))\r\n ||\r\n (buttonType === \"DelRow\" && (!mstId || !dtlId))\r\n ||\r\n (buttonType === \"DrillDown\" && (!mstId))\r\n ||\r\n (buttonType === \"InsRow\" && (!mstId))\r\n ||\r\n (buttonType === \"Copy\" && (!mstId))\r\n ||\r\n (buttonType === \"CopyRow\" && (!dtlId))\r\n ||\r\n ((buttonType || \"\").match(/New|Copy/i) && !canAdd)\r\n ||\r\n ((buttonType || \"\").match(/Save|InsRow|DelRow|CopyRow/i) && !canUpd && mstId)\r\n ||\r\n ((buttonType || \"\").match(/Save|InsRow|DelRow|CopyRow/i) && !canAdd && !mstId)\r\n );\r\n }\r\n\r\n OnModalReturn(result) {\r\n if (result === \"Y\" && this.state.ModalSuccess) {\r\n this.state.ModalSuccess();\r\n }\r\n else if (result === \"N\" && this.state.ModalCancel) {\r\n this.state.ModalCancel();\r\n }\r\n this.setState({ ModalOpen: false, ModalSuccess: null, ModalCancel: null });\r\n }\r\n\r\n /* search list action handlers */\r\n SearchBoxFocus(e) {\r\n e.preventDefault();\r\n this.setState({\r\n searchFocus: !this.state.searchFocus\r\n })\r\n }\r\n\r\n ShowMoreSearchList() {\r\n return function (e) {\r\n const cri = this.GetReduxState().ScreenCriteria || {};\r\n const auxSystemLabels = this.GetReduxState().SystemLabel || {};\r\n e.preventDefault();\r\n const searchMstFn = (() => {\r\n this.props.LoadSearchList(\"MstList\", \"_\", {}, cri.SearchStr, cri.TopN + cri.Increment, cri.FilterId);\r\n }).bind(this);\r\n if (!this.hasChangedContent) searchMstFn();\r\n else this.setState({ ModalOpen: true, ModalSuccess: searchMstFn, ModalColor: \"warning\", ModalTitle: auxSystemLabels.UnsavedPageTitle || \"\", ModalMsg: auxSystemLabels.UnsavedPageMsg || \"\" });\r\n }.bind(this);\r\n }\r\n\r\n SearchFilterValueChange(handleSubmit, setFieldValue, type, controlName) {\r\n return function (name, value) {\r\n if (type === 'autocomplete') {\r\n setFieldValue(name, value[0]);\r\n }\r\n else {\r\n setFieldValue(name, value);\r\n }\r\n setTimeout(() => {\r\n handleSubmit();\r\n }, 0);\r\n }.bind(this);\r\n }\r\n\r\n SearchFilterTextValueChange(handleSubmit, setFieldValue, type, controlName) {\r\n return function (evt) {\r\n const value = evt.target.value;\r\n setFieldValue(controlName, value);\r\n setTimeout(() => {\r\n handleSubmit();\r\n }, 0);\r\n }.bind(this);\r\n }\r\n\r\n SetCurrentRecordState(isDirty) {\r\n this.hasChangedContent = isDirty;\r\n }\r\n\r\n SelectMstListRow({ naviBar, useMobileView }) {\r\n const buttons = this.state.Buttons;\r\n const hasNoActionButtons = !(buttons.hasBottomButton || buttons.hasRowButton || buttons.hasDropdownMenuButton);\r\n const reduxState = this.GetReduxState();\r\n const auxSystemLabels = reduxState.SystemLabel || {};\r\n\r\n\r\n return function (e) {\r\n e.preventDefault();\r\n\r\n const idx = e.currentTarget.getAttribute('listidx');\r\n const keyId = e.currentTarget.getAttribute('keyid');\r\n const altKeyId = e.currentTarget.getAttribute('altkeyid');\r\n\r\n const reduxState = this.GetReduxState();\r\n const auxSystemLabels = reduxState.SystemLabel || {};\r\n\r\n const selectMstFn = (() => {\r\n this.props.SelectMst(keyId, altKeyId, idx);\r\n if (hasNoActionButtons) {\r\n this.props.history.push(getEditMstPath(getNaviPath(naviBar, \"MstRecord\", \"/\"), keyId || '_'));\r\n }\r\n }).bind(this);\r\n if (!this.hasChangedContent) selectMstFn();\r\n else this.setState({ ModalOpen: true, ModalSuccess: selectMstFn, ModalColor: \"warning\", ModalTitle: auxSystemLabels.UnsavedPageTitle || \"\", ModalMsg: auxSystemLabels.UnsavedPageMsg || \"\" });\r\n }.bind(this);\r\n }\r\n\r\n SelectDtlListRow = (naviBar, mst, dtl, i, mstKeyColumnName, dtlKeyColumeName) => {\r\n const _this = this;\r\n const buttons = this.state.Buttons;\r\n const hasNoActionButtons = !(buttons.hasRowButton || buttons.hasDropdownMenuButton);\r\n const reduxState = this.GetReduxState();\r\n const auxSystemLabels = reduxState.SystemLabel || {};\r\n return ((e) => {\r\n e.preventDefault();\r\n const selectDtlFn = (() => {\r\n _this.props.SelectDtl(mst[mstKeyColumnName], dtl[dtlKeyColumeName], i);\r\n const path = getEditDtlPath(getNaviPath(naviBar, \"DtlRecord\", \"/\"), dtl[dtlKeyColumeName] || '_');\r\n if (hasNoActionButtons) {\r\n _this.props.history.push(path);\r\n }\r\n }\r\n ).bind(this);\r\n if (!this.hasChangedContent) selectDtlFn();\r\n else this.setState({ ModalOpen: true, ModalSuccess: selectDtlFn, ModalColor: \"warning\", ModalTitle: auxSystemLabels.UnsavedPageTitle || \"\", ModalMsg: auxSystemLabels.UnsavedPageMsg || \"\" });\r\n }).bind(this);\r\n }\r\n\r\n FilterDtlList(values, { setErrors, resetForm, setValues /* setValues and other goodies */ }) {\r\n this.props.ChangeDtlListFilter(values.FilterBy.value, values.FilteredValue);\r\n }\r\n\r\n ResetFilterList(values, { setFieldValue }) {\r\n this.props.ChangeDtlListFilter('', '');\r\n const input = document.querySelector('.FilteredValueClass');\r\n input.value = '';\r\n }\r\n\r\n FilteredColumnChange(handleSubmit, setFieldValue, type, controlName) {\r\n const _this = this;\r\n return function (name, value) {\r\n if (type === 'autocomplete') {\r\n setFieldValue(name, value[0]);\r\n }\r\n else {\r\n setFieldValue(name, value);\r\n }\r\n _this.setState({\r\n DtlFilter: {\r\n ..._this.state.DtlFilter,\r\n FilteredColumn: value,\r\n }\r\n })\r\n }\r\n }\r\n\r\n /* screen action handlers for different input type assume formik is used \r\n * should works hand in hand with validator logic(see TextChange/DropdownChange) to indicate what field trigger the change\r\n * to work around formik deficiency \r\n */\r\n AutocompleteChange = (setFieldValue, setFieldTouched, forName, blur, values, dependents = []) => {\r\n const _this = this;\r\n return function (name, value) {\r\n log.debug('autocomplete change', value, name, forName)\r\n if (blur) setFieldTouched(name || forName, true);\r\n else {\r\n _this.FieldInFocus = name || forName;\r\n const choice = ((value || [])[0] || {});\r\n // only the 'value'(or key) not the object\r\n const val = choice.value;\r\n setFieldValue(name || forName, val);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, blur, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n }\r\n }\r\n\r\n FieldChange(setFieldValue, setFieldTouched, forName, blur, values, dependents = []) {\r\n const _this = this;\r\n return function (name, value) {\r\n log.debug('field change', value, name)\r\n if (blur) setFieldTouched(name || forName, true);\r\n else {\r\n _this.FieldInFocus = name || forName;\r\n // object itself(different from above AutocompleteChange)\r\n const val = value[0];\r\n setFieldValue(name || forName, val);\r\n dependents\r\n .filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, blur, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n }\r\n }\r\n\r\n PhoneChange(setFieldValue, setFieldTouched, name, blur, values, dependents = []) {\r\n const _this = this;\r\n const forName = name;\r\n return function (value) {\r\n log.debug('phone change', value, name);\r\n if (blur) setFieldTouched(name, true);\r\n else {\r\n _this.FieldInFocus = name;\r\n // const formattedPhone = value.replace(/[- )(]/g,'');\r\n // log.debug(value, formattedPhone);\r\n const val = value;\r\n setFieldValue(name, value);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, blur, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n }\r\n }\r\n\r\n\r\n DateChange(setFieldValue, setFieldTouched, name, blur, values, dependents = []) {\r\n const _this = this;\r\n const forName = name;\r\n return function (value) {\r\n log.debug('date change', value, name)\r\n if (blur) setFieldTouched(name, true);\r\n else {\r\n _this.FieldInFocus = name;\r\n const date = (value || {})._d;\r\n const isDate = typeof date === \"object\" && date.constructor === Date;\r\n const _date = isDate ? date : new Date(date);\r\n const localSortableDateString = new Date(_date - _date.getTimezoneOffset() * 60 * 1000).toISOString().replace(/Z/, '');\r\n const val = localSortableDateString;\r\n setFieldValue(name, localSortableDateString);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, blur, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n }\r\n }\r\n\r\n DateChangeUTC(setFieldValue, setFieldTouched, name, blur, values, dependents = []) {\r\n const _this = this;\r\n const forName = name;\r\n return function (value) {\r\n log.debug('date change', value, name)\r\n if (blur) setFieldTouched(name, true);\r\n else {\r\n _this.FieldInFocus = name;\r\n const date = (value || {})._d;\r\n const isDate = typeof date === \"object\" && date.constructor === Date;\r\n const date8601 = isDate ? date.toISOString() : date;\r\n const val = date8601;\r\n setFieldValue(name, date8601);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, blur, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n }\r\n }\r\n\r\n DropdownChange(setFieldValue, setFieldTouched, forName, values, dependents = []) {\r\n const _this = this;\r\n return function (name, value) {\r\n _this.FieldInFocus = name || forName;\r\n const val = value.value;\r\n log.debug('drop down change', val, name, forName)\r\n setFieldTouched(name || forName, true);\r\n setFieldValue(name || forName, val);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n }\r\n\r\n DropdownChangeV1(setFieldValue, setFieldTouched, forName, values, dependents = []) {\r\n const _this = this;\r\n return function (name, value) {\r\n _this.FieldInFocus = name || forName;\r\n const val = value;\r\n log.debug('drop down change', val, name, forName)\r\n setFieldTouched(name || forName, true);\r\n setFieldValue(name || forName, val);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n }\r\n\r\n RadioChange(setFieldValue, setFieldTouched, name, list, values, dependents = []) {\r\n const _this = this;\r\n const forName = name;\r\n return function (evt) {\r\n const idx = evt.currentTarget.getAttribute('listidx');\r\n const val = list[idx].value;\r\n log.debug('radio change', val, name)\r\n _this.FieldInFocus = name;\r\n setFieldTouched(name, true);\r\n setFieldValue(name, val);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n }\r\n\r\n CheckboxChange(setFieldValue, setFieldTouched, name, list, values, dependents = []) {\r\n const _this = this;\r\n const forName = name;\r\n return function (evt) {\r\n const idx = evt.currentTarget.getAttribute('listidx');\r\n const val = list[idx].value;\r\n log.debug('checkbox change', idx, val, name)\r\n _this.FieldInFocus = name;\r\n setFieldTouched(name, true);\r\n setFieldValue(name, val);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n }\r\n\r\n CheckListChange(setFieldValue, setFieldTouched, name, value, values, dependents = []) {\r\n const _this = this;\r\n const forName = name;\r\n return function (evt) {\r\n const idx = evt.currentTarget.getAttribute('listidx');\r\n const selected = values[name] || '';\r\n const selectedList = selected ? selected.replace('(', '').replace(')', '').split(',') : [];\r\n const check = selectedList.filter(o => (value == o)).length > 0;\r\n var val = '';\r\n\r\n if (check) {\r\n val = selectedList.filter(o => (value != o)).join(\",\");\r\n\r\n } else {\r\n val = selected + \",\" + value;\r\n }\r\n\r\n _this.FieldInFocus = name;\r\n setFieldTouched(name, true);\r\n setFieldValue(name, val);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n }\r\n\r\n ListBoxChange(setFieldValue, setFieldTouched, forName, formikCurValues, dependents = []) {\r\n const _this = this;\r\n return function (name, value) {\r\n _this.FieldInFocus = name || forName;\r\n const val = value && '(' + value + ')';\r\n log.debug('List Box Change', val, name, forName)\r\n setFieldTouched(name || forName, true);\r\n setFieldValue(name || forName, val);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , formikCurValues);\r\n }\r\n }\r\n\r\n //new added\r\n SignatureChange(setFieldValue, setFieldTouched, forName, formikCurValues, dependents = []) {\r\n const _this = this;\r\n return function (name, value) {\r\n _this.FieldInFocus = name || forName;\r\n const val = value;\r\n log.debug('Signature Change', val, name, forName)\r\n setFieldTouched(name || forName, true);\r\n setFieldValue(name || forName, val);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , formikCurValues);\r\n }\r\n }\r\n\r\n TextFocus(event) {\r\n // log.debug(event);\r\n // event.target.select();\r\n // event.preventDefault();\r\n // setTimeout(() =>\r\n // event.target.setSelectionRange(0, 9999)\r\n // , 0);\r\n event.preventDefault();\r\n const target = event.target;\r\n target.setSelectionRange(0, target.value.length);\r\n // setTimeout(target.select.bind(target), 0);\r\n // setTimeout(target.setSelectionRange(0, target.value.length), 0);\r\n }\r\n\r\n TextChange(setFieldValue, setFieldTouched, name, values, dependents = [], debObj) {\r\n const _this = this;\r\n const forName = name;\r\n return function (evt) {\r\n const value = evt.target.value;\r\n const val = value;\r\n _this.FieldInFocus = name;\r\n setFieldTouched(name, true);\r\n setFieldValue(name, value);\r\n\r\n const deb = () => {\r\n log.debug(dependents, values);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(val, name || forName, values, { setFieldValue, setFieldTouched, forName, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n\r\n if (!(debObj || {}).waitTime) deb();\r\n else debounce(deb, debObj)();\r\n }\r\n }\r\n \r\n TextChangeEX = (evt) => {\r\n const formikBag = this.FormikBag;\r\n const value = evt.currentTarget.value;\r\n const idx = evt.currentTarget.getAttribute('listidx');\r\n const fieldname = evt.currentTarget.getAttribute('fieldname');\r\n const fieldpath = evt.currentTarget.getAttribute('fieldpath');\r\n const name = evt.currentTarget.getAttribute('name');\r\n const values = formikBag.values;\r\n log.debug('TextChangeEX', value, idx, fieldname, fieldpath, name, values, evt.currentTarget);\r\n this.FieldInFocus = name;\r\n formikBag.setFieldValue(name, value);\r\n // if (idx !== undefined && idx !== null && (values[fieldpath] || []).length > idx ) {\r\n // const revisedList = values[fieldpath].map((o,i)=>( i===(+idx) ? {...o, [fieldname]: value} : o));\r\n // log.debug('revised list', revisedList)\r\n // formikBag.setFieldValue(fieldpath,revisedList);\r\n // // /* must be flatten to handle error in formik */\r\n // // formikBag.setFieldValue(name,value);\r\n // }\r\n }\r\n\r\n FileUploadChange(setFieldValue, setFieldTouched, name, values, dependents = []) {\r\n const _this = this;\r\n const forName = name;\r\n return function (fileList) {\r\n const revisedList = !fileList || fileList.length === 0 ? [{ fileName: '', mimeType: '', lastModified: '', base64: '', isEmptyFileObject: true }] : [...fileList];\r\n setFieldValue(name, revisedList);\r\n (setFieldTouched || (_this.FormikBag || {}).setFieldTouched || (v => v))(name, true, false);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(revisedList, name, values, { setFieldValue, setFieldTouched, forName, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n }\r\n\r\n FileUploadChangeV1(setFieldValue, setFieldTouched, name, values, dependents = []) {\r\n const _this = this;\r\n const forName = name;\r\n return function (value) {\r\n const file = value.base64.result ? {\r\n fileName: value.name,\r\n mimeType: value.mimeType,\r\n lastModified: value.lastModified,\r\n base64: value.base64.result,\r\n ts: value.ts,\r\n } : null;\r\n _this.setState({ filename: (file || {}).fileName });\r\n setFieldValue(name, file);\r\n dependents.filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(file, name, values, { setFieldValue, setFieldTouched, forName, _this });\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n }\r\n }\r\n\r\n FileUploadChangeEX = (fileList, name, { listidx, fieldpath, dependents }) => {\r\n const formikBag = this.FormikBag;\r\n const values = formikBag.values;\r\n const revisedList = !fileList || fileList.length === 0 ? [{ fileName: '', mimeType: '', lastModified: '', base64: '', isEmptyFileObject: true }] : [...fileList];\r\n this.FieldInFocus = name;\r\n formikBag.setFieldValue(name, revisedList);\r\n (dependents || []).filter(f => typeof f === \"function\")\r\n .reduce((values, f) => {\r\n const ret = f(revisedList, name, values);\r\n if (typeof ret == \"object\" && ret.then === \"function\") {\r\n return values; // can't handle promise, just pass formik values down the pipe\r\n }\r\n else\r\n return ret;\r\n }\r\n , values);\r\n // if (listidx !== undefined && listidx !== null && (values[fieldpath] || []).length > listidx ) {\r\n // const revisedList = values[fieldpath].map((o,i)=>( i===(+listidx) ? {...o, [fieldname]: revisedList} : o));\r\n // log.debug('revised list', revisedList)\r\n // formikBag.setFieldValue(fieldpath,revisedList);\r\n // }\r\n }\r\n\r\n DropZoneChange(setFieldValue, name) {\r\n const _this = this;\r\n return function (value) {\r\n console.log(value);\r\n setFieldValue(name, value);\r\n }\r\n // return function (value) {\r\n // const file = value.base64.result ? {\r\n // fileName: value.name,\r\n // mimeType: value.mimeType,\r\n // lastModified: value.lastModified,\r\n // base64: value.base64.result,\r\n // } : null;\r\n // _this.setState({ filename: (file || {}).fileName });\r\n // setFieldValue(name, file);\r\n // }\r\n }\r\n /* end on change function */\r\n\r\n /* standard validators */\r\n SubmitForm = formGroup => (evt) => {\r\n /* \r\n this is intended to be used as OnClick for form submission. would be run BEFORE actual submit so we can use state/instance variable\r\n to control ValidatePage() behavior as Formik cannot distinguish between field level triggered validation and form level triggered validation\r\n MUST BE reset in the form validation function\r\n */\r\n\r\n // log.debug(this.FormikBag || {});\r\n\r\n // if (!(this.FormikBag || {}).isValid) {\r\n // this.props.showNotification('E', { message: 'One or more fields contain errors' });\r\n // }\r\n\r\n this.IsFormSubmit = true;\r\n this.FormGroup = formGroup;\r\n this.FormAction = formGroup;\r\n /* block further, uncomment \r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n */\r\n }\r\n\r\n GrabFormikBag = ({ ...rest }) => {\r\n /* grab formik callbacks during rendering{this.GrabFormikBag({...})}, undersirable but only way to interact with formik from non-user events like \r\n * server side retrieval, timer based action etc as well as writing EX version of set field value and */\r\n /* we store in instance variable and not state so no re-render is triggered */\r\n\r\n /* store full bag value if available, otherwise whatever passed in */\r\n this.FormikBag = this.Formik ? this.Formik.getFormikBag() : { ...rest }\r\n if (this.NotifyPostValidation) {\r\n // this is set from the form validator indicating require post validation treatment\r\n this.NotifyPostValidation = false; // done once per validate\r\n if (typeof this.FormikPostValidate === \"function\") {\r\n delay(this.FormikPostValidate, 0); // always async(i.e. not current stack frame)\r\n }\r\n }\r\n }\r\n\r\n /* written in this form so it is auto bind to 'this', DO NOT USE this form if intended to be override by sub-class(i.e. virtual in C#/C++ lingual) */\r\n ReceiveFormikRef = (formik) => {\r\n /* this is done via standard React construct, formik === null is a reset back React */\r\n this.Formik = formik\r\n }\r\n\r\n ValidatePage(values) {\r\n /* a generic way to handle post validation errors for formik \r\n * mainly design for passing Formik info to components outside Formik context\r\n * like global buttons that depends on state of error, dirty flags etc.\r\n * it is better to be a callback by Formik but not available as of Formik 1.4\r\n * this should be called by the Formik Page validator\r\n * works hand in hand with GrabFormikBag in the rendering \r\n */\r\n if (this.Formik && typeof this.FormikPostValidate === \"function\") {\r\n this.NotifyPostValidation = true;\r\n }\r\n // always return true if we are here so subclass can go on\r\n return true;\r\n }\r\n\r\n PassAll({ setFieldValue, setFieldTouched, name, message, values, formGroup, validators = [] }) {\r\n const _this = this;\r\n return function (value) {\r\n if (formGroup && _this.FormGroup && _this.FormGroup !== formGroup) return null;\r\n if (this.Formik && _this.deferValidation && !_this.isDeferredValidation) return null;\r\n for (var i = 0; i < validators.length; i = i + 1) {\r\n const validator = validators[i];\r\n if (typeof validator !== \"string\" && typeof validator !== \"function\" && typeof validator !== \"boolean\") {\r\n throw new TypeError(\"validator can only be function/string(considered failed if not empty)/boolean(consider fail if false)\");\r\n }\r\n const error = typeof validator === \"function\" ? validator(value, { setFieldValue, setFieldTouched, name, message, values, formGroup }) : validator;\r\n if ((typeof error === \"string\" && error) || (typeof error === \"boolean\" && !error)) {\r\n if (_this.FieldInFocus === name || _this.IsFormSubmit) setFieldTouched(name, true, false);\r\n return typeof error === \"string\" ? error : message;\r\n }\r\n }\r\n return null;\r\n }\r\n }\r\n PassAny({ setFieldValue, setFieldTouched, name, message, values, formGroup, validators = [] }) {\r\n const _this = this;\r\n return function (value) {\r\n if (formGroup && _this.FormGroup && _this.FormGroup !== formGroup) return null;\r\n if (this.Formik && _this.deferValidation && !_this.isDeferredValidation) return null;\r\n for (var i = 0; i < validators.length; i = i + 1) {\r\n const validator = validators[i];\r\n if (typeof validator !== \"string\" && typeof validator !== \"function\" && typeof validator !== \"boolean\") {\r\n throw TypeError(\"validator can only be function/string(considered failed if not empty)/boolean(consider fail if false)\");\r\n }\r\n const error = typeof validator === \"function\" ? validator(value, { setFieldValue, setFieldTouched, name, message, values, formGroup }) : validator;\r\n if ((typeof error === \"boolean\" && error) || (typeof error !== \"boolean\" && !error)) return null;\r\n }\r\n if (_this.FieldInFocus === name || _this.IsFormSubmit) setFieldTouched(name, true, false);\r\n return message;\r\n }.bind(this);\r\n }\r\n PassAnyEX({ setFieldValue, setFieldTouched, fieldname, message, values, formGroup, validators = [] }) {\r\n const _this = this;\r\n return function (value) {\r\n if (formGroup && _this.FormGroup && _this.FormGroup !== formGroup) return null;\r\n if (this.Formik && _this.deferValidation && !_this.isDeferredValidation) return null;\r\n for (var i = 0; i < validators.length; i = i + 1) {\r\n const validator = validators[i];\r\n if (typeof validator !== \"string\" && typeof validator !== \"function\" && typeof validator !== \"boolean\") {\r\n throw TypeError(\"validator can only be function/string(considered failed if not empty)/boolean(consider fail if false)\");\r\n }\r\n const error = typeof validator === \"function\" ? validator(value, { setFieldValue, setFieldTouched, fieldname, message, values, formGroup }) : validator;\r\n if ((typeof error === \"boolean\" && error) || (typeof error !== \"boolean\" && !error)) return null;\r\n }\r\n if (_this.FieldInFocus && fieldname && _this.FieldInFocus.match(new RegExp(fieldname + '$')) && !_this.IsFormSubmit) {\r\n setFieldTouched(_this.FieldInFocus, true, false);\r\n }\r\n return message;\r\n }\r\n }\r\n FailNone({ setFieldValue, setFieldTouched, name, message, values, formGroup, validators = [] }) {\r\n const _this = this;\r\n return function (value) {\r\n if (formGroup && _this.FormGroup && _this.FormGroup !== formGroup) return null;\r\n if (this.Formik && _this.deferValidation && !_this.isDeferredValidation) return null;\r\n for (var i = 0; i < validators.length; i = i + 1) {\r\n const validator = validators[i];\r\n if (typeof validator !== \"string\" && typeof validator !== \"function\" && typeof validator !== \"boolean\") {\r\n throw TypeError(\"validator can only be function/string(considered failed if not empty)/boolean(consider fail if false)\");\r\n }\r\n const error = typeof validator === \"function\" ? validator(value, { setFieldValue, setFieldTouched, name, message, values, formGroup }) : validator;\r\n if ((typeof error === \"boolean\" && error) || (typeof error !== \"boolean\" && !error)) return null;\r\n }\r\n if (_this.FieldInFocus === name || _this.IsFormSubmit) setFieldTouched(name, true, false);\r\n return message;\r\n }\r\n }\r\n IsEmptyFieldValue = (value) => isEmpty(value) || isEmptyArray(value) || isEmptyObject(value) || isEmptyFileList(value)\r\n IsNotEmptyFieldValue = (value) => {\r\n const v = !(isEmpty(value) || isEmptyArray(value) || isEmptyObject(value) || isEmptyFileList(value))\r\n return v;\r\n }\r\n\r\n IsEmptyFileList = (value) => isEmptyFileList(value)\r\n RequiredField({ setFieldValue, setFieldTouched, name, message, values, formGroup }) {\r\n const _this = this;\r\n return function (value) {\r\n if (formGroup && _this.FormGroup && _this.FormGroup !== formGroup) return null;\r\n if (this.Formik && _this.deferValidation && !_this.isDeferredValidation) return null;\r\n if (isEmpty(value)\r\n || (Array.isArray(value) && value.length === 0)\r\n // only simple object test, anything that is not simple we assume it is not empty(including Date which has no key)\r\n || (!Array.isArray(value) && typeof value === 'object' && value.constructor === Object && Object.keys(value).length === 0)\r\n // file list array needs to be handled differently to work around problem of Formik dirty detection\r\n || (isEmptyFileList(value))\r\n ) {\r\n if (_this.FieldInFocus === name || _this.IsFormSubmit) setFieldTouched(name, true, false);\r\n\r\n return message;\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n RequiredFieldEX({ setFieldValue, setFieldTouched, fieldname, message, values, formGroup }) {\r\n const _this = this;\r\n return function (value) {\r\n if (formGroup && _this.FormGroup && _this.FormGroup !== formGroup) return null;\r\n if (this.Formik && _this.deferValidation && !_this.isDeferredValidation) return null;\r\n if (_this.IsEmptyFieldValue(value)) {\r\n if (_this.FieldInFocus || _this.IsFormSubmit) {\r\n setFieldTouched(_this.FieldInFocus, true, false);\r\n }\r\n return message;\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n MinLengthField(length, { setFieldValue, setFieldTouched, name, message, values, formGroup, allowEmpty }) {\r\n const _this = this;\r\n return function (value) {\r\n if (formGroup && _this.FormGroup && _this.FormGroup !== formGroup) return null;\r\n if (this.Formik && _this.deferValidation && !_this.isDeferredValidation) return null;\r\n if ((value && value.length < length) || (!allowEmpty && isEmpty(value))) {\r\n if (_this.FieldInFocus === name || _this.IsFormSubmit) setFieldTouched(name, true, false);\r\n return message;\r\n }\r\n return null;\r\n }\r\n }\r\n ValidEmailField({ setFieldValue, setFieldTouched, name, message, values, formGroup, allowEmpty }) {\r\n const _this = this;\r\n return function (value) {\r\n if (formGroup && _this.FormGroup && _this.FormGroup !== formGroup) return null;\r\n if (this.Formik && _this.deferValidation && !_this.isDeferredValidation) return null;\r\n if ((value && !isEmailFormat(value)) || (!allowEmpty && isEmpty(value))) {\r\n if (_this.FieldInFocus === name || _this.IsFormSubmit) setFieldTouched(name, true, false);\r\n return message;\r\n }\r\n return null;\r\n }\r\n }\r\n ValidRangeField(min, max, { setFieldValue, setFieldTouched, name, message, values, formGroup, lowerBound, upperBound, allowEmpty }) {\r\n const _this = this;\r\n const validRange = isValidRange(lowerBound, upperBound);\r\n return function (value) {\r\n if (formGroup && _this.FormGroup && _this.FormGroup !== formGroup) return null;\r\n if (this.Formik && _this.deferValidation && !_this.isDeferredValidation) return null;\r\n if ((value && !validRange(value)) || (!allowEmpty && isEmpty(value))) {\r\n if (_this.FieldInFocus === name || _this.IsFormSubmit) setFieldTouched(name, true, false);\r\n return message;\r\n }\r\n return null;\r\n }\r\n }\r\n /* end validator function */\r\n\r\n TranslateHyperLink(url, dtl, relative, options) {\r\n var fullUrl = (url || '').match('^[a-zA-Z0-9]+:'); \r\n if (!url) return url;\r\n else if (fullUrl) {\r\n //window.open(url);\r\n return url;\r\n }\r\n else {\r\n var x = parsedUrl(url);\r\n if (x.pathname.match(/\\.aspx$/i)) {\r\n var path = (x.pathname ||'').replace(/\\.aspx$/i,'');\r\n var key = _getQueryString(x,'key');\r\n var sub = key ? (dtl ? \"/Dtl/\" :\"/Mst/\") + (key || '') : (dtl ? \"/DtlList\" :\"\"); \r\n return (relative ? \"\" : \"/#\") + path + sub; \r\n }\r\n else return url;\r\n }\r\n }\r\n\r\n PopUpSearchLink(url, dtl, sameWindow, options) {\r\n const _this = this;\r\n return function (evt) {\r\n var fullUrl = (url || '').match('^[a-zA-Z0-9]+:');\r\n if (fullUrl) {\r\n //window.open(url);\r\n return true;\r\n }\r\n else {\r\n var translatedPath = _this.TranslateHyperLink(url, dtl, true, options);\r\n var myBaseUrl = getUrlBeforeRouter();\r\n if (translatedPath) {\r\n var newUrl = myBaseUrl + \"/#\" + translatedPath;\r\n if (sameWindow) {\r\n //window.location = newUrl;\r\n this.props.history.push(translatedPath);\r\n }\r\n else {\r\n window.open(newUrl);\r\n }\r\n evt.preventDefault();\r\n return false;\r\n }\r\n else {\r\n\r\n }\r\n return true;\r\n }\r\n }.bind(this);\r\n }\r\n \r\n StripEmbeddedBase64Prefix(base64string) {\r\n if (base64string && base64string.length > 0) {\r\n return base64string.replace(/^data:.+;base64,/, '');\r\n if (base64string.indexOf(\"data:image/jpeg;base64,\") >= 0) {\r\n return base64string.replace(\"data:image/jpeg;base64,\", \"\");\r\n }\r\n else if (base64string.indexOf(\"data:image/png;base64,\") >= 0) {\r\n return base64string.replace(\"data:image/png;base64,\", \"\");\r\n }\r\n }\r\n return base64string;\r\n }\r\n\r\n SetPageTitle(reduxState) {\r\n const screenHlp = reduxState.ScreenHlp;\r\n const siteTitle = ((screenHlp || {}).ScreenTitle || '') + ' - ' + this.SystemName;\r\n\r\n if (!this.titleSet && reduxState.initialized) {\r\n this.props.setTitle(siteTitle);\r\n this.titleSet = true;\r\n }\r\n }\r\n\r\n /* end of standard functions */\r\n\r\n /* screen button handlers */\r\n AddNewMst({ naviBar }) {\r\n return function (evt) {\r\n const path = getNaviPath(naviBar, \"MstRecord\", \"/\");\r\n const x = getAddMstPath(path);\r\n const _this = this;\r\n this.props.AddMst(null, \"MstRecord\", 0)\r\n .then(newMst => {\r\n _this.props.history.push(getAddMstPath(getNaviPath(naviBar, \"MstRecord\", \"/\")))\r\n })\r\n evt.preventDefault();\r\n }.bind(this);\r\n };\r\n AddNewDtl({ naviBar, mstId }) {\r\n return function (evt) {\r\n const _this = this;\r\n this.props.AddDtl(mstId, null, -1)\r\n .then(newDtl => {\r\n _this.props.history.push(getAddDtlPath(getNaviPath(naviBar, \"DtlRecord\", \"/\")));\r\n })\r\n evt.preventDefault();\r\n }.bind(this);\r\n }\r\n DrillDown({ naviBar, mstId, useMobileView }) {\r\n return function (evt) {\r\n if (this.props.history) {\r\n this.props.history.push(getNaviPath(naviBar, \"DtlList\", \"/\"));\r\n }\r\n else {\r\n\r\n }\r\n evt.preventDefault();\r\n }.bind(this);\r\n }\r\n EditHdr({ naviBar, mstId, useMobileView }) {\r\n return function (evt) {\r\n if (useMobileView) {\r\n const path = getEditMstPath(getNaviPath(naviBar, \"MstRecord\", \"/\"), mstId);\r\n this.props.history.push(getEditMstPath(getNaviPath(naviBar, \"MstRecord\", \"/\"), mstId));\r\n }\r\n evt.preventDefault();\r\n }.bind(this);\r\n }\r\n EditRow({ naviBar, mstId, dtlId, useMobileView }) {\r\n return function (evt) {\r\n if (useMobileView) {\r\n this.props.history.push(getEditDtlPath(getNaviPath(naviBar, \"DtlRecord\", \"/\"), dtlId || '_'));\r\n }\r\n evt.preventDefault();\r\n }.bind(this);\r\n }\r\n\r\n ToggleMstListFilterVisibility() {\r\n return this.props.changeMstListFilterVisibility;\r\n }\r\n\r\n Prompt({ requireConfirm, okFn, cancelFn, message }) {\r\n const reduxState = this.GetReduxState();\r\n const auxSystemLabels = reduxState.SystemLabel || {};\r\n return function (evt) {\r\n evt.preventDefault();\r\n if (!requireConfirm || requireConfirm(evt)) {\r\n if (this.state.ModalOpen !== undefined) {\r\n this.setState({ ModalOpen: true, ModalSuccess: okFn, ModalColor: \"danger\", ModalTitle: auxSystemLabels.WarningTitle || \"\", ModalMsg: message });\r\n }\r\n else if (window.confirm()) okFn(evt);\r\n else if (cancelFn) cancelFn(evt);\r\n }\r\n else if (okFn) okFn(evt);\r\n }.bind(this);\r\n }\r\n\r\n /* dirty prompt coordination */\r\n setDirtyFlag(dirty) {\r\n /* this is called during rendering but has side-effect, undesirable but only way to pass formik dirty flag around */\r\n if (dirty) {\r\n if (this.blocker) unregisterBlocker(this.blocker);\r\n this.blocker = this.confirmUnload;\r\n registerBlocker(this.confirmUnload);\r\n }\r\n else {\r\n if (this.blocker) unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n if (this.props.updateChangedState) this.props.updateChangedState(dirty);\r\n this.SetCurrentRecordState(dirty);\r\n return true;\r\n }\r\n\r\n confirmUnload(message, callback) {\r\n const confirm = () => {\r\n callback(true);\r\n }\r\n const cancel = () => {\r\n callback(false);\r\n }\r\n this.setState({ ModalOpen: true, ModalSuccess: confirm, ModalCancel: cancel, ModalHeader: false, ModalColor: \"danger\", ModalTitle: 'Unsaved Changes', ModalMsg: 'You have unsaved changes on this page. Are you sure you want to leave?' });\r\n }\r\n\r\n GetTargetId() {\r\n const { mstId, dtlId } = { ...this.props.match.params };\r\n return {\r\n targetMstId: mstId,\r\n targetDtlId: dtlId,\r\n }\r\n }\r\n /* binding function to simple data to various component */\r\n BindDateField = (value, { keyfieldname, valuefieldname, selectedObject } = {}) => {\r\n return new moment(value);\r\n }\r\n BindDropDownField = (value, choices, { keyfieldname, valuefieldname, selectedObject } = {}) => {\r\n const x = (choices || []).filter(o =>\r\n o === value\r\n || o[keyfieldname || 'value' || 'key'] === value\r\n || o[keyfieldname || 'value' || 'key'] === (value || {})[keyfieldname || 'value' || 'key']\r\n )[0]\r\n return selectedObject || typeof x !== \"object\" || true ? x : x[keyfieldname || 'value' || 'key']\r\n }\r\n BindAutocompleteField = (value, choices, { keyfieldname, valuefieldname } = {}) => {\r\n return (choices || []).filter(o => o === value || o[keyfieldname || 'value' || 'key'] === value || o[keyfieldname || 'value' || 'key'] === (value || {})[keyfieldname || 'value' || 'key'])\r\n // .map(o => ({\r\n // ...o,\r\n // label: toCapital(o.label)\r\n // }));\r\n }\r\n BindRadioField = (value, choice, { keyfieldname, valuefieldname } = {}) => {\r\n return choice === value || choice[keyfieldname || 'value' || 'key'] === value\r\n }\r\n BindCheckBoxField = (value, choice, { keyfieldname, valuefieldname } = {}) => {\r\n return choice === value || choice[keyfieldname || 'value' || 'key'] === value\r\n }\r\n BindCheckListField = (value, selected, { keyfieldname, valuefieldname } = {}) => {\r\n const selectedList = selected ? selected.replace('(', '').replace(')', '').split(',') : [];\r\n return selectedList.filter(o => (value == o)).length > 0;\r\n }\r\n BindMultiDocFileObject = (serverList, currentList) => {\r\n /* the initial server list can be # of attachments ! */\r\n if (!currentList) return (typeof serverList !== \"object\") ? [] : serverList;\r\n if (!serverList || (Array.isArray(serverList) && serverList.length === 0)) return currentList;\r\n const lookup = (serverList || []).reduce((a, o) => { a[o.DocId] = o; return a }, {});\r\n\r\n const revisedList = !Array.isArray(currentList)\r\n ? currentList\r\n : currentList.map(o => {\r\n return {\r\n ...o,\r\n base64: o && (o.DocId && lookup[o.DocId] ? (lookup[o.DocId] || {}).base64 : o.base64),\r\n mimeType: o && (o.DocId && lookup[o.DocId] ? (lookup[o.DocId] || {}).mimeType : o.mimeType),\r\n src: o && ('data:' + (o.DocId && lookup[o.DocId] ? (lookup[o.DocId] || {}).mimeType : o.mimeType) + ';base64,' + (o.DocId && lookup[o.DocId] ? (lookup[o.DocId] || {}).base64 : o.base64)),\r\n }\r\n }\r\n )\r\n return revisedList;\r\n }\r\n BindFileObject = (serverList, currentList) => {\r\n if (!currentList) {\r\n if (serverList) {\r\n return (Array.isArray(serverList) ? serverList : [serverList]);\r\n }\r\n return [];\r\n }\r\n if (!serverList || (Array.isArray(serverList) && serverList.length === 0)) {\r\n return currentList || [];\r\n }\r\n serverList = Array.isArray(serverList) ? serverList : [serverList];\r\n currentList = Array.isArray(currentList) ? currentList : [currentList];\r\n const revisedList =\r\n currentList.map(\r\n (o, i) => o.base64 || o.isEmptyFileObject ? o : (serverList[i].base64 ? serverList[i] : o)\r\n )\r\n return revisedList || [];\r\n }\r\n\r\n BindReferenceField = (value, choices, { keyfieldname, valuefieldname, selectedObject } = {}) => {\r\n const x = (choices || []).filter(o =>\r\n o === value\r\n || o[keyfieldname || 'value' || 'key'] === value\r\n || o[keyfieldname || 'value' || 'key'] === (value || {})[keyfieldname || 'value' || 'key']\r\n )[0];\r\n return selectedObject || typeof x !== \"object\" ? (x || {}).obj : ((x || {}).obj || {})[valuefieldname];\r\n }\r\n\r\n /* end binding function */\r\n DelMst({ mstId }) {\r\n throw new TypeError(this + \" Must implement DelMst\");\r\n }\r\n DelDtl({ mstId, dtlId }) {\r\n throw new TypeError(this + \" Must implement DelDtl\");\r\n }\r\n SaveMst({ mst }) {\r\n throw new TypeError(\"Must implement SaveMst\");\r\n }\r\n SaveDtl({ mst }) {\r\n throw new TypeError(\"Must implement SaveDtl\");\r\n }\r\n CopyHdr({ mstId }) {\r\n throw new TypeError(\"Must implement CopyHdr\");\r\n }\r\n CopyRow({ mstId, dtlId }) {\r\n throw new TypeError(\"Must implement CopyRow\");\r\n }\r\n // New({mst})\r\n // {\r\n // throw new TypeError(\"Must implement New\");\r\n // }\r\n NewSaveMst({ mst }) {\r\n throw new TypeError(\"Must implement NewSaveMst\");\r\n }\r\n NewSaveDtl({ mstId, dtl }) {\r\n throw new TypeError(\"Must implement NewSaveDtl\");\r\n }\r\n SaveCloseMst({ naviBar, mst, redirectTo }) {\r\n throw new TypeError(\"Must implement SaveCloseMst\");\r\n }\r\n SaveCloseDtl({ naviBar, mstId, dtl, redirectTo }) {\r\n throw new TypeError(\"Must implement SaveCloseDtl\");\r\n }\r\n ExpMstTxt() {\r\n throw new TypeError(\"Must implement ExpMstTxt\");\r\n }\r\n ExpMstRtf() {\r\n throw new TypeError(\"Must implement ExpMstTxt\");\r\n }\r\n Print() {\r\n throw new TypeError(\"Must implement Print\");\r\n }\r\n FormatSearchTitleL(v) {\r\n return v;\r\n }\r\n\r\n FormatSearchTitleR(v) {\r\n return v;\r\n }\r\n\r\n FormatSearchSubTitleL(v) {\r\n return v;\r\n }\r\n\r\n FormatSearchSubTitleR(v) {\r\n return v;\r\n }\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n global: state.global,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { checkBundleUpdate: checkBundleUpdate },\r\n ), dispatch)\r\n)\r\n\r\nexport default RintagiScreen\r\n//export default withRouter(connect(mapStateToProps, mapDispatchToProps)(RintagiScreen));","import React, { Component } from 'react';\r\nimport Dropdown from 'react-dropdown';\r\nimport log from '../../helpers/logger'\r\nexport default class DropdownField extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n handleChange = (value => {\r\n // this is going to call setFieldValue and manually update values.this.props.name\r\n if (typeof this.props.onChange === \"function\" && this.props.field) {\r\n this.props.onChange(this.props.name || (this.props.field || {}).name, value,{fieldname:this.props.fieldname,listidx:this.props.listidx, fieldpath:this.props.fieldpath});\r\n }\r\n else {\r\n this.props.onChange(value);\r\n }\r\n // simulate formik validation routine \r\n // if (typeof this.props.validate === \"function\")\r\n // this.props.validate(value);\r\n }).bind(this);\r\n\r\n render() {\r\n return (\r\n //
\r\n \r\n //
\r\n );\r\n };\r\n};\r\n","\r\nimport { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\n\r\nlet activeScope = {};\r\n\r\nexport function setAccessScope(scope) {\r\n activeScope = {\r\n ...activeScope,\r\n ...scope,\r\n }\r\n}\r\n\r\nexport function GetAuthCol(accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetAuthCol'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetAuthRow(accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetAuthRow'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n\r\n}\r\nexport function GetScreenLabel(accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetScreenLabel'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope || getAccessScope())\r\n }\r\n )\r\n\r\n}\r\n\r\nexport function GetLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetSystemLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetSystemLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetScreenButtonHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetScreenButtonHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetScreenHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenCriteria(accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewMst(accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetNewMst'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewDtl(accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetNewDtl'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenFilter(accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetScreenFilter'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetSearchList(searchStr, topN, filterId, desiredScreenCriteria, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetSearchList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n desiredScreenCriteria: desiredScreenCriteria || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetKycPerson2List(searchStr, topN, filterId, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetKycPerson2List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetKycPerson2ById(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetKycPerson2ById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetMstById = GetKycPerson2ById;\r\nexport function GetKycPerson2DtlById(keyId, filterId, options, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetKycPerson2DtlById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n filterId: filterId || 0,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetDtlById = GetKycPerson2DtlById;\r\nexport function LoadInitPage(options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/LoadInitPage'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SaveData(mst, dtl, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst || {},\r\n dtl: dtl || [],\r\n options: options || {}\r\n });\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/SaveData'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function DelMst(mst, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst,\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/DelMst'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SetScreenCriteria(criteriaValues, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/SetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n criteriaValues: criteriaValues\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetRefColumnContent(mstId, dtlId, refKeyId, isMaster, refScreenColumnName, options, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetRefColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n refKeyId: refKeyId || null,\r\n refScreenColumnName: refScreenColumnName || null,\r\n isMaster: isMaster || false,\r\n options: options || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetColumnContent(mstId, dtlId, columnName, isMaster, screenColumnName, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || '',\r\n dtlId: dtlId || '',\r\n screenColumnName: screenColumnName,\r\n columnName: columnName,\r\n isMaster: isMaster || false,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetEmbeddedDoc(mstId, dtlId, isMaster, screenColumnName, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || '',\r\n dtlId: dtlId || '',\r\n isMaster: isMaster || false,\r\n columnName: screenColumnName || '',\r\n screenColumnName: screenColumnName || '',\r\n });\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetColumnContent'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function SaveEmbeddedImage(mstId, dtlId, isMaster, screenColumnName, docJson, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || '',\r\n dtlId: dtlId || '',\r\n isMaster: isMaster || false,\r\n screenColumnName: screenColumnName || '',\r\n docJson: docJson || '',\r\n options: options || {},\r\n });\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/AddDocColumnContent'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function SaveEmbeddedDoc(...args) { return SaveEmbeddedImage(...args) }\r\n\r\n\r\nexport function GetDoc(mstId, dtlId, isMaster, docId, screenColumnName, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n isMaster: isMaster || false,\r\n docId: docId || null,\r\n screenColumnName: screenColumnName,\r\n });\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetDoc'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetDocZipDownload(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetDocZipDownload'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || null,\r\n options: options ||{},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/*screen criteria dll and screen dropdownlist/autocomplete*/\r\n\r\nexport function GetGenderCd15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetGenderCd15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetNationalityId15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetNationalityId15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetCountryOfResId15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetCountryOfResId15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetTitle15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetTitle15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetCountryOfBirthId15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetCountryOfBirthId15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetIndustryId15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetIndustryId15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetOccupationId15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetOccupationId15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetSourceOfFundsId15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetSourceOfFundsId15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetSourceOfWealthId15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetSourceOfWealthId15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetPurposeId15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetPurposeId15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetIdTypeId15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetIdTypeId15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetIdIssueCountryId15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetIdIssueCountryId15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetPep15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetPep15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function SaveKycPersonDoc15(mstId, dtlId, isMaster, docId, overwrite, screenColumnName, docJson, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n isMaster: isMaster || false,\r\n docId: docId || null,\r\n overwrite: overwrite || false,\r\n screenColumnName: 'KycPersonDoc15',\r\n docJson: docJson || null,\r\n options: options || {}\r\n });\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/SaveKycPersonDoc15'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function DelKycPersonDoc15(mstId, dtlId, isMaster, screenColumnName, docIdList, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n isMaster: isMaster || false,\r\n screenColumnName: 'KycPersonDoc15',\r\n docIdList: docIdList || [],\r\n });\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/DelKycPersonDoc15'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetKycPersonDoc15List(mstId, dtlId, isMaster, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || '',\r\n dtlId: dtlId || '',\r\n isMaster: isMaster || false,\r\n });\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetKycPersonDoc15List'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetInternalStatus15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetInternalStatus15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetKycStatusId15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetKycStatusId15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetKycRiskRatingId15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetKycRiskRatingId15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetInputBy15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetInputBy15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetModifiedBy15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetModifiedBy15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetInputFor15List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycPersonWs.asmx/GetInputFor15List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule: Service Custom Function */\r\n\r\nexport async function sendNotEnoughLiquidityEmail(emailAddress, ethAmount, accessScope) {\r\n return fetchData(baseUrl+'/KycPersonWs.asmx/SendNotEnoughLiquidityEmail'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n emailAddress: emailAddress || \"\",\r\n ethAmount: ethAmount || \"\"\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport async function sendBusinessAccountRequestEmail(emailAddress, accessScope) {\r\n return fetchData(baseUrl+'/KycPersonWs.asmx/SendBusinessAccountRequestEmail'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n emailAddress: emailAddress || \"\"\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n/* ReactRule End: Service Custom Function */\r\n","\r\nimport { getAsyncTypes } from '../helpers/actionType'\r\nimport * as KycPersonService from '../services/KycPersonService'\r\nimport { RintagiScreenRedux, initialRintagiScreenReduxState } from './_ScreenReducer'\r\nclass KycPersonRedux extends RintagiScreenRedux {\r\n allowTmpDtl = false;\r\n constructor() {\r\n super();\r\n this.ActionApiNameMapper = {\r\n 'GET_SEARCH_LIST': 'GetKycPerson2List',\r\n 'GET_MST': 'GetKycPerson2ById',\r\n 'GET_DTL_LIST': 'GetKycPerson2DtlById',\r\n }\r\n this.ScreenDdlDef = [\r\n { columnName: 'GenderCd15', payloadDdlName: 'GenderCd15List', keyName: 'GenderCd15', labelName: 'GenderCd15Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetGenderCd15List', actionTypeName: 'GET_DDL_GenderCd15' },\r\n { columnName: 'NationalityId15', payloadDdlName: 'NationalityId15List', keyName: 'NationalityId15', labelName: 'NationalityId15Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetNationalityId15List', actionTypeName: 'GET_DDL_NationalityId15' },\r\n { columnName: 'CountryOfResId15', payloadDdlName: 'CountryOfResId15List', keyName: 'CountryOfResId15', labelName: 'CountryOfResId15Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetCountryOfResId15List', actionTypeName: 'GET_DDL_CountryOfResId15' },\r\n { columnName: 'Title15', payloadDdlName: 'Title15List', keyName: 'Title15', labelName: 'Title15Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetTitle15List', actionTypeName: 'GET_DDL_Title15' },\r\n { columnName: 'CountryOfBirthId15', payloadDdlName: 'CountryOfBirthId15List', keyName: 'CountryOfBirthId15', labelName: 'CountryOfBirthId15Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetCountryOfBirthId15List', actionTypeName: 'GET_DDL_CountryOfBirthId15' },\r\n { columnName: 'IndustryId15', payloadDdlName: 'IndustryId15List', keyName: 'IndustryId15', labelName: 'IndustryId15Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetIndustryId15List', actionTypeName: 'GET_DDL_IndustryId15' },\r\n { columnName: 'OccupationId15', payloadDdlName: 'OccupationId15List', keyName: 'OccupationId15', labelName: 'OccupationId15Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetOccupationId15List', actionTypeName: 'GET_DDL_OccupationId15' },\r\n { columnName: 'SourceOfFundsId15', payloadDdlName: 'SourceOfFundsId15List', keyName: 'SourceOfFundsId15', labelName: 'SourceOfFundsId15Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetSourceOfFundsId15List', actionTypeName: 'GET_DDL_SourceOfFundsId15' },\r\n { columnName: 'SourceOfWealthId15', payloadDdlName: 'SourceOfWealthId15List', keyName: 'SourceOfWealthId15', labelName: 'SourceOfWealthId15Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetSourceOfWealthId15List', actionTypeName: 'GET_DDL_SourceOfWealthId15' },\r\n { columnName: 'PurposeId15', payloadDdlName: 'PurposeId15List', keyName: 'PurposeId15', labelName: 'PurposeId15Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetPurposeId15List', actionTypeName: 'GET_DDL_PurposeId15' },\r\n { columnName: 'IdTypeId15', payloadDdlName: 'IdTypeId15List', keyName: 'IdTypeId15', labelName: 'IdTypeId15Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetIdTypeId15List', actionTypeName: 'GET_DDL_IdTypeId15' },\r\n { columnName: 'IdIssueCountryId15', payloadDdlName: 'IdIssueCountryId15List', keyName: 'IdIssueCountryId15', labelName: 'IdIssueCountryId15Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetIdIssueCountryId15List', actionTypeName: 'GET_DDL_IdIssueCountryId15' },\r\n { columnName: 'Pep15', payloadDdlName: 'Pep15List', keyName: 'Pep15', labelName: 'Pep15Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetPep15List', actionTypeName: 'GET_DDL_Pep15' },\r\n { columnName: 'InternalStatus15', payloadDdlName: 'InternalStatus15List', keyName: 'InternalStatus15', labelName: 'InternalStatus15Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetInternalStatus15List', actionTypeName: 'GET_DDL_InternalStatus15' },\r\n { columnName: 'KycStatusId15', payloadDdlName: 'KycStatusId15List', keyName: 'KycStatusId15', labelName: 'KycStatusId15Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetKycStatusId15List', actionTypeName: 'GET_DDL_KycStatusId15' },\r\n { columnName: 'KycRiskRatingId15', payloadDdlName: 'KycRiskRatingId15List', keyName: 'KycRiskRatingId15', labelName: 'KycRiskRatingId15Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetKycRiskRatingId15List', actionTypeName: 'GET_DDL_KycRiskRatingId15' },\r\n { columnName: 'InputBy15', payloadDdlName: 'InputBy15List', keyName: 'InputBy15', labelName: 'InputBy15Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetInputBy15List', actionTypeName: 'GET_DDL_InputBy15' },\r\n { columnName: 'ModifiedBy15', payloadDdlName: 'ModifiedBy15List', keyName: 'ModifiedBy15', labelName: 'ModifiedBy15Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetModifiedBy15List', actionTypeName: 'GET_DDL_ModifiedBy15' },\r\n { columnName: 'InputFor15', payloadDdlName: 'InputFor15List', keyName: 'InputFor15', labelName: 'InputFor15Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetInputFor15List', actionTypeName: 'GET_DDL_InputFor15' },\r\n ]\r\n this.ScreenOnDemandDef = [\r\n { columnName: 'KycPersonDoc15', tableColumnName: 'KycPersonDoc', type: 'DocList', forMst: true, apiServiceName: 'GetKycPersonDoc15List', actionTypeName: 'GET_COLUMN_KycPersonDoc15' },\r\n { columnName: 'PicMed15', isFileObject: true, tableColumnName: 'PicMed', forMst: true, apiServiceName: 'GetColumnContent', actionTypeName: 'GET_COLUMN_PicMed15' },\r\n ]\r\n this.ScreenDocumentDef = [\r\n { columnName: 'KycPersonDoc15', tableColumnName: 'KycPersonDoc', type: 'Get', forMst: true, apiServiceName: 'GetDoc', actionTypeName: 'GET_COLUMN_CONTENT_KycPersonDoc15' },\r\n { columnName: 'KycPersonDoc15', tableColumnName: 'KycPersonDoc', type: 'Add', forMst: true, apiServiceName: 'SaveKycPersonDoc15', actionTypeName: 'ADD_COLUMN_CONTENT_KycPersonDoc15' },\r\n { columnName: 'KycPersonDoc15', tableColumnName: 'KycPersonDoc', type: 'Del', forMst: true, apiServiceName: 'DelKycPersonDoc15', actionTypeName: 'DEL_COLUMN_CONTENT_KycPersonDoc15' },\r\n ]\r\n this.ScreenCriDdlDef = [\r\n\r\n ]\r\n this.SearchActions = {\r\n ...[...this.ScreenDdlDef].reduce((a, v) => { a['Search' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenCriDdlDef].reduce((a, v) => { a['SearchCri' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type !== 'DocList' && f.type !== 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetColumnOnDemandAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetRefColumnOnDemandAction(v); return a; }, {}),\r\n ...this.MakePullUpOnDemandAction([...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['GetRef' + v.refColumnName] = { dependents: [...((a['GetRef' + v.refColumnName] || {}).dependents || []), v] }; return a; }, {})),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'DocList').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetDocumentListAction(v); return a; }, {}),\r\n }\r\n this.OnDemandActions = {\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Get').reduce((a, v) => { a['Get' + v.columnName + 'Content'] = this.MakeGetDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Add').reduce((a, v) => { a['Add' + v.columnName + 'Content'] = this.MakeAddDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Del').reduce((a, v) => { a['Del' + v.columnName + 'Content'] = this.MakeDelDocumentContentAction(v); return a; }, {}),\r\n }\r\n this.ScreenDdlSelectors = this.ScreenDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeDdlSelectors(v); return a; }, {})\r\n this.ScreenCriDdlSelectors = this.ScreenCriDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeCriDdlSelectors(v); return a; }, {})\r\n this.actionReducers = this.MakeActionReducers();\r\n }\r\n GetScreenName() { return 'KycPerson' }\r\n GetMstKeyColumnName(isUnderlining = false) { return isUnderlining ? 'KycPersonId' : 'KycPersonId15'; }\r\n GetDtlKeyColumnName(isUnderlining = false) { return isUnderlining ? '' : ''; }\r\n GetPersistDtlName() { return this.GetScreenName() + '_Dtl'; }\r\n GetPersistMstName() { return this.GetScreenName() + '_Mst'; }\r\n GetWebService() { return KycPersonService; }\r\n GetReducerActionTypePrefix() { return this.GetScreenName(); };\r\n GetActionType(actionTypeName) { return getAsyncTypes(this.GetReducerActionTypePrefix(), actionTypeName); }\r\n GetInitState() {\r\n return {\r\n ...initialRintagiScreenReduxState,\r\n Label: {\r\n ...initialRintagiScreenReduxState.Label,\r\n }\r\n }\r\n };\r\n\r\n GetDefaultDtl(state) {\r\n return (state || {}).NewDtl ||\r\n {\r\n\r\n }\r\n }\r\n ExpandMst(mst, state, copy) {\r\n return {\r\n ...mst,\r\n key: Date.now(),\r\n KycPersonId15: copy ? null : mst.KycPersonId15,\r\n }\r\n }\r\n ExpandDtl(dtlList, copy) {\r\n return dtlList;\r\n }\r\n\r\n SearchListToSelectList(state) {\r\n const searchList = ((state || {}).SearchList || {}).data || [];\r\n return searchList\r\n .map((v, i) => {\r\n return {\r\n key: v.key || null,\r\n value: v.labelL || v.label || ' ',\r\n label: v.labelL || v.label || ' ',\r\n labelR: v.labelR || ' ',\r\n detailR: v.detailR || ' ',\r\n detail: v.detail || ' ',\r\n idx: i,\r\n isSelected: v.isSelected,\r\n }\r\n })\r\n }\r\n}\r\n\r\n/* ReactRule: Redux Custom Function */\r\n\r\n/* ReactRule End: Redux Custom Function */\r\n\r\n/* helper functions */\r\n\r\nexport function ShowMstFilterApplied(state) {\r\n return !state\r\n || !state.ScreenCriteria\r\n\r\n || state.ScreenCriteria.SearchStr;\r\n}\r\n\r\nexport default new KycPersonRedux()\r\n","\r\nimport { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\n\r\nlet activeScope = {};\r\n\r\nexport function setAccessScope(scope) {\r\n activeScope = {\r\n ...activeScope,\r\n ...scope,\r\n }\r\n}\r\n\r\nexport function GetAuthCol(accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetAuthCol'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetAuthRow(accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetAuthRow'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n\r\n}\r\nexport function GetScreenLabel(accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetScreenLabel'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope || getAccessScope())\r\n }\r\n )\r\n\r\n}\r\n\r\nexport function GetLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetSystemLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetSystemLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetScreenButtonHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetScreenButtonHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetScreenHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenCriteria(accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewMst(accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetNewMst'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewDtl(accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetNewDtl'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenFilter(accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetScreenFilter'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetSearchList(searchStr, topN, filterId, desiredScreenCriteria, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetSearchList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n desiredScreenCriteria: desiredScreenCriteria || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetKycCorporate3List(searchStr, topN, filterId, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetKycCorporate3List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetKycCorporate3ById(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetKycCorporate3ById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetMstById = GetKycCorporate3ById;\r\nexport function GetKycCorporate3DtlById(keyId, filterId, options, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetKycCorporate3DtlById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n filterId: filterId || 0,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetDtlById = GetKycCorporate3DtlById;\r\nexport function LoadInitPage(options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/LoadInitPage'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SaveData(mst, dtl, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst || {},\r\n dtl: dtl || [],\r\n options: options || {}\r\n });\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/SaveData'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function DelMst(mst, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst,\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/DelMst'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SetScreenCriteria(criteriaValues, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/SetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n criteriaValues: criteriaValues\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetRefColumnContent(mstId, dtlId, refKeyId, isMaster, refScreenColumnName, options, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetRefColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n refKeyId: refKeyId || null,\r\n refScreenColumnName: refScreenColumnName || null,\r\n isMaster: isMaster || false,\r\n options: options || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetDoc(mstId, dtlId, isMaster, docId, screenColumnName, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n isMaster: isMaster || false,\r\n docId: docId || null,\r\n screenColumnName: screenColumnName,\r\n });\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetDoc'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetDocZipDownload(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetDocZipDownload'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || null,\r\n options: options ||{},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/*screen criteria dll and screen dropdownlist/autocomplete*/\r\n\r\nexport function GetEntityTypeId16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetEntityTypeId16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetOwnershipTypeId16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetOwnershipTypeId16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetCountryOfIncorpId16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetCountryOfIncorpId16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetCountryOfOpId16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetCountryOfOpId16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetBusinessTypeId16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetBusinessTypeId16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetCountryOfAddrId16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetCountryOfAddrId16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetSourceOfFundsId16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetSourceOfFundsId16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetBusSourceOfWealthId16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetBusSourceOfWealthId16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetPurposeId16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetPurposeId16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetPep16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetPep16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function SaveKycCorpDoc16(mstId, dtlId, isMaster, docId, overwrite, screenColumnName, docJson, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n isMaster: isMaster || false,\r\n docId: docId || null,\r\n overwrite: overwrite || false,\r\n screenColumnName: 'KycCorpDoc16',\r\n docJson: docJson || null,\r\n options: options || {}\r\n });\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/SaveKycCorpDoc16'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function DelKycCorpDoc16(mstId, dtlId, isMaster, screenColumnName, docIdList, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n isMaster: isMaster || false,\r\n screenColumnName: 'KycCorpDoc16',\r\n docIdList: docIdList || [],\r\n });\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/DelKycCorpDoc16'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetKycCorpDoc16List(mstId, dtlId, isMaster, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || '',\r\n dtlId: dtlId || '',\r\n isMaster: isMaster || false,\r\n });\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetKycCorpDoc16List'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetInternalStatus16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetInternalStatus16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetKycStatusId16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetKycStatusId16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetKycRiskRatingId16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetKycRiskRatingId16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetInputBy16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetInputBy16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetModifiedBy16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetModifiedBy16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetInputFor16List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetInputFor16List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetKycPersonId23List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetKycPersonId23List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetKycCorpRelationId23List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetKycCorpRelationId23List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetRoleId23List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/KycCorporateWs.asmx/GetRoleId23List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule: Service Custom Function */\r\n\r\n\r\n/* ReactRule End: Service Custom Function */\r\n","\r\nimport { getAsyncTypes } from '../helpers/actionType'\r\nimport * as KycCorporateService from '../services/KycCorporateService'\r\nimport { RintagiScreenRedux, initialRintagiScreenReduxState } from './_ScreenReducer'\r\nclass KycCorporateRedux extends RintagiScreenRedux {\r\n allowTmpDtl = false;\r\n constructor() {\r\n super();\r\n this.ActionApiNameMapper = {\r\n 'GET_SEARCH_LIST': 'GetKycCorporate3List',\r\n 'GET_MST': 'GetKycCorporate3ById',\r\n 'GET_DTL_LIST': 'GetKycCorporate3DtlById',\r\n }\r\n this.ScreenDdlDef = [\r\n { columnName: 'EntityTypeId16', payloadDdlName: 'EntityTypeId16List', keyName: 'EntityTypeId16', labelName: 'EntityTypeId16Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetEntityTypeId16List', actionTypeName: 'GET_DDL_EntityTypeId16' },\r\n { columnName: 'OwnershipTypeId16', payloadDdlName: 'OwnershipTypeId16List', keyName: 'OwnershipTypeId16', labelName: 'OwnershipTypeId16Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetOwnershipTypeId16List', actionTypeName: 'GET_DDL_OwnershipTypeId16' },\r\n { columnName: 'CountryOfIncorpId16', payloadDdlName: 'CountryOfIncorpId16List', keyName: 'CountryOfIncorpId16', labelName: 'CountryOfIncorpId16Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetCountryOfIncorpId16List', actionTypeName: 'GET_DDL_CountryOfIncorpId16' },\r\n { columnName: 'CountryOfOpId16', payloadDdlName: 'CountryOfOpId16List', keyName: 'CountryOfOpId16', labelName: 'CountryOfOpId16Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetCountryOfOpId16List', actionTypeName: 'GET_DDL_CountryOfOpId16' },\r\n { columnName: 'BusinessTypeId16', payloadDdlName: 'BusinessTypeId16List', keyName: 'BusinessTypeId16', labelName: 'BusinessTypeId16Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetBusinessTypeId16List', actionTypeName: 'GET_DDL_BusinessTypeId16' },\r\n { columnName: 'CountryOfAddrId16', payloadDdlName: 'CountryOfAddrId16List', keyName: 'CountryOfAddrId16', labelName: 'CountryOfAddrId16Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetCountryOfAddrId16List', actionTypeName: 'GET_DDL_CountryOfAddrId16' },\r\n { columnName: 'SourceOfFundsId16', payloadDdlName: 'SourceOfFundsId16List', keyName: 'SourceOfFundsId16', labelName: 'SourceOfFundsId16Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetSourceOfFundsId16List', actionTypeName: 'GET_DDL_SourceOfFundsId16' },\r\n { columnName: 'BusSourceOfWealthId16', payloadDdlName: 'BusSourceOfWealthId16List', keyName: 'BusSourceOfWealthId16', labelName: 'BusSourceOfWealthId16Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetBusSourceOfWealthId16List', actionTypeName: 'GET_DDL_BusSourceOfWealthId16' },\r\n { columnName: 'PurposeId16', payloadDdlName: 'PurposeId16List', keyName: 'PurposeId16', labelName: 'PurposeId16Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetPurposeId16List', actionTypeName: 'GET_DDL_PurposeId16' },\r\n { columnName: 'Pep16', payloadDdlName: 'Pep16List', keyName: 'Pep16', labelName: 'Pep16Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetPep16List', actionTypeName: 'GET_DDL_Pep16' },\r\n { columnName: 'InternalStatus16', payloadDdlName: 'InternalStatus16List', keyName: 'InternalStatus16', labelName: 'InternalStatus16Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetInternalStatus16List', actionTypeName: 'GET_DDL_InternalStatus16' },\r\n { columnName: 'KycStatusId16', payloadDdlName: 'KycStatusId16List', keyName: 'KycStatusId16', labelName: 'KycStatusId16Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetKycStatusId16List', actionTypeName: 'GET_DDL_KycStatusId16' },\r\n { columnName: 'KycRiskRatingId16', payloadDdlName: 'KycRiskRatingId16List', keyName: 'KycRiskRatingId16', labelName: 'KycRiskRatingId16Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetKycRiskRatingId16List', actionTypeName: 'GET_DDL_KycRiskRatingId16' },\r\n { columnName: 'InputBy16', payloadDdlName: 'InputBy16List', keyName: 'InputBy16', labelName: 'InputBy16Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetInputBy16List', actionTypeName: 'GET_DDL_InputBy16' },\r\n { columnName: 'ModifiedBy16', payloadDdlName: 'ModifiedBy16List', keyName: 'ModifiedBy16', labelName: 'ModifiedBy16Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetModifiedBy16List', actionTypeName: 'GET_DDL_ModifiedBy16' },\r\n { columnName: 'InputFor16', payloadDdlName: 'InputFor16List', keyName: 'InputFor16', labelName: 'InputFor16Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetInputFor16List', actionTypeName: 'GET_DDL_InputFor16' },\r\n { columnName: 'KycPersonId23', payloadDdlName: 'KycPersonId23List', keyName: 'KycPersonId23', labelName: 'KycPersonId23Text', forMst: false, isAutoComplete: true, apiServiceName: 'GetKycPersonId23List', actionTypeName: 'GET_DDL_KycPersonId23' },\r\n { columnName: 'KycCorpRelationId23', payloadDdlName: 'KycCorpRelationId23List', keyName: 'KycCorpRelationId23', labelName: 'KycCorpRelationId23Text', forMst: false, isAutoComplete: true, apiServiceName: 'GetKycCorpRelationId23List', actionTypeName: 'GET_DDL_KycCorpRelationId23' },\r\n { columnName: 'RoleId23', payloadDdlName: 'RoleId23List', keyName: 'RoleId23', labelName: 'RoleId23Text', forMst: false, isAutoComplete: true, apiServiceName: 'GetRoleId23List', actionTypeName: 'GET_DDL_RoleId23' },\r\n ]\r\n this.ScreenOnDemandDef = [\r\n { columnName: 'KycCorpDoc16', tableColumnName: 'KycCorpDoc', type: 'DocList', forMst: true, apiServiceName: 'GetKycCorpDoc16List', actionTypeName: 'GET_COLUMN_KycCorpDoc16' },\r\n ]\r\n this.ScreenDocumentDef = [\r\n { columnName: 'KycCorpDoc16', tableColumnName: 'KycCorpDoc', type: 'Get', forMst: true, apiServiceName: 'GetDoc', actionTypeName: 'GET_COLUMN_CONTENT_KycCorpDoc16' },\r\n { columnName: 'KycCorpDoc16', tableColumnName: 'KycCorpDoc', type: 'Add', forMst: true, apiServiceName: 'SaveKycCorpDoc16', actionTypeName: 'ADD_COLUMN_CONTENT_KycCorpDoc16' },\r\n { columnName: 'KycCorpDoc16', tableColumnName: 'KycCorpDoc', type: 'Del', forMst: true, apiServiceName: 'DelKycCorpDoc16', actionTypeName: 'DEL_COLUMN_CONTENT_KycCorpDoc16' },\r\n ]\r\n this.ScreenCriDdlDef = [\r\n\r\n ]\r\n this.SearchActions = {\r\n ...[...this.ScreenDdlDef].reduce((a, v) => { a['Search' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenCriDdlDef].reduce((a, v) => { a['SearchCri' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type !== 'DocList' && f.type !== 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetColumnOnDemandAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetRefColumnOnDemandAction(v); return a; }, {}),\r\n ...this.MakePullUpOnDemandAction([...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['GetRef' + v.refColumnName] = { dependents: [...((a['GetRef' + v.refColumnName] || {}).dependents || []), v] }; return a; }, {})),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'DocList').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetDocumentListAction(v); return a; }, {}),\r\n }\r\n this.OnDemandActions = {\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Get').reduce((a, v) => { a['Get' + v.columnName + 'Content'] = this.MakeGetDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Add').reduce((a, v) => { a['Add' + v.columnName + 'Content'] = this.MakeAddDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Del').reduce((a, v) => { a['Del' + v.columnName + 'Content'] = this.MakeDelDocumentContentAction(v); return a; }, {}),\r\n }\r\n this.ScreenDdlSelectors = this.ScreenDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeDdlSelectors(v); return a; }, {})\r\n this.ScreenCriDdlSelectors = this.ScreenCriDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeCriDdlSelectors(v); return a; }, {})\r\n this.actionReducers = this.MakeActionReducers();\r\n }\r\n GetScreenName() { return 'KycCorporate' }\r\n GetMstKeyColumnName(isUnderlining = false) { return isUnderlining ? 'KycCorpId' : 'KycCorpId16'; }\r\n GetDtlKeyColumnName(isUnderlining = false) { return isUnderlining ? 'KycCorpCrpId' : 'KycCorpCrpId23'; }\r\n GetPersistDtlName() { return this.GetScreenName() + '_Dtl'; }\r\n GetPersistMstName() { return this.GetScreenName() + '_Mst'; }\r\n GetWebService() { return KycCorporateService; }\r\n GetReducerActionTypePrefix() { return this.GetScreenName(); };\r\n GetActionType(actionTypeName) { return getAsyncTypes(this.GetReducerActionTypePrefix(), actionTypeName); }\r\n GetInitState() {\r\n return {\r\n ...initialRintagiScreenReduxState,\r\n Label: {\r\n ...initialRintagiScreenReduxState.Label,\r\n }\r\n }\r\n };\r\n\r\n GetDefaultDtl(state) {\r\n return (state || {}).NewDtl ||\r\n {\r\n KycCorpCrpId23: null,\r\n KycPersonId23: null,\r\n KycCorpRelationId23: null,\r\n RoleId23: null,\r\n DateAppointed23: null,\r\n DateResigned23: null,\r\n Active23: null,\r\n }\r\n }\r\n ExpandMst(mst, state, copy) {\r\n return {\r\n ...mst,\r\n key: Date.now(),\r\n KycCorpId16: copy ? null : mst.KycCorpId16,\r\n }\r\n }\r\n ExpandDtl(dtlList, copy) {\r\n if (!copy) return dtlList;\r\n else if (!this.allowTmpDtl) return [];\r\n else {\r\n const now = Date.now();\r\n return dtlList.map((v, i) => {\r\n return {\r\n ...v,\r\n KycCorpId16: null,\r\n KycCorpCrpId23: null,\r\n TmpKeyId: now + i,\r\n }\r\n })\r\n };\r\n }\r\n\r\n SearchListToSelectList(state) {\r\n const searchList = ((state || {}).SearchList || {}).data || [];\r\n return searchList\r\n .map((v, i) => {\r\n return {\r\n key: v.key || null,\r\n value: v.labelL || v.label || ' ',\r\n label: v.labelL || v.label || ' ',\r\n labelR: v.labelR || ' ',\r\n detailR: v.detailR || ' ',\r\n detail: v.detail || ' ',\r\n idx: i,\r\n isSelected: v.isSelected,\r\n }\r\n })\r\n }\r\n}\r\n\r\n/* ReactRule: Redux Custom Function */\r\n\r\n/* ReactRule End: Redux Custom Function */\r\n\r\n/* helper functions */\r\n\r\nexport function ShowMstFilterApplied(state) {\r\n return !state\r\n || !state.ScreenCriteria\r\n\r\n || state.ScreenCriteria.SearchStr;\r\n}\r\n\r\nexport default new KycCorporateRedux()\r\n","\r\nimport { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\n\r\nlet activeScope = {};\r\n\r\nexport function setAccessScope(scope) {\r\n activeScope = {\r\n ...activeScope,\r\n ...scope,\r\n }\r\n}\r\n\r\nexport function GetAuthCol(accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetAuthCol'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetAuthRow(accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetAuthRow'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n\r\n}\r\nexport function GetScreenLabel(accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetScreenLabel'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope || getAccessScope())\r\n }\r\n )\r\n\r\n}\r\n\r\nexport function GetLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetSystemLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetSystemLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetScreenButtonHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetScreenButtonHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetScreenHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenCriteria(accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewMst(accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetNewMst'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewDtl(accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetNewDtl'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenFilter(accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetScreenFilter'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetSearchList(searchStr, topN, filterId, desiredScreenCriteria, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetSearchList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n desiredScreenCriteria: desiredScreenCriteria || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetSupportRequest20List(searchStr, topN, filterId, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetSupportRequest20List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetSupportRequest20ById(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetSupportRequest20ById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetMstById = GetSupportRequest20ById;\r\nexport function GetSupportRequest20DtlById(keyId, filterId, options, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetSupportRequest20DtlById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n filterId: filterId || 0,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetDtlById = GetSupportRequest20DtlById;\r\nexport function LoadInitPage(options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/LoadInitPage'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SaveData(mst, dtl, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst || {},\r\n dtl: dtl || [],\r\n options: options || {}\r\n });\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/SaveData'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function DelMst(mst, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst,\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/DelMst'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SetScreenCriteria(criteriaValues, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/SetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n criteriaValues: criteriaValues\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetRefColumnContent(mstId, dtlId, refKeyId, isMaster, refScreenColumnName, options, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetRefColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n refKeyId: refKeyId || null,\r\n refScreenColumnName: refScreenColumnName || null,\r\n isMaster: isMaster || false,\r\n options: options || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/*screen criteria dll and screen dropdownlist/autocomplete*/\r\n\r\nexport function GetUserId51List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetUserId51List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetKycPersonId51List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetKycPersonId51List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetKycCorpId51List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetKycCorpId51List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetRequestTypeId51List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/SupportRequestWs.asmx/GetRequestTypeId51List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule: Service Custom Function */\r\n\r\nexport async function sendLivenessIssueEmail(userInfo, accessScope) {\r\n return fetchData(baseUrl+'/SupportRequestWs.asmx/SendLivenessIssueEmail'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n userInfo: userInfo || \"\"\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n/* ReactRule End: Service Custom Function */\r\n","\r\nimport { getAsyncTypes } from '../helpers/actionType'\r\nimport * as SupportRequestService from '../services/SupportRequestService'\r\nimport { RintagiScreenRedux, initialRintagiScreenReduxState } from './_ScreenReducer'\r\nclass SupportRequestRedux extends RintagiScreenRedux {\r\n allowTmpDtl = false;\r\n constructor() {\r\n super();\r\n this.ActionApiNameMapper = {\r\n 'GET_SEARCH_LIST': 'GetSupportRequest20List',\r\n 'GET_MST': 'GetSupportRequest20ById',\r\n 'GET_DTL_LIST': 'GetSupportRequest20DtlById',\r\n }\r\n this.ScreenDdlDef = [\r\n { columnName: 'UserId51', payloadDdlName: 'UserId51List', keyName: 'UserId51', labelName: 'UserId51Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetUserId51List', actionTypeName: 'GET_DDL_UserId51' },\r\n { columnName: 'KycPersonId51', payloadDdlName: 'KycPersonId51List', keyName: 'KycPersonId51', labelName: 'KycPersonId51Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetKycPersonId51List', actionTypeName: 'GET_DDL_KycPersonId51' },\r\n { columnName: 'KycCorpId51', payloadDdlName: 'KycCorpId51List', keyName: 'KycCorpId51', labelName: 'KycCorpId51Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetKycCorpId51List', actionTypeName: 'GET_DDL_KycCorpId51' },\r\n { columnName: 'RequestTypeId51', payloadDdlName: 'RequestTypeId51List', keyName: 'RequestTypeId51', labelName: 'RequestTypeId51Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetRequestTypeId51List', actionTypeName: 'GET_DDL_RequestTypeId51' },\r\n ]\r\n this.ScreenOnDemandDef = [\r\n\r\n ]\r\n this.ScreenDocumentDef = [\r\n\r\n ]\r\n this.ScreenCriDdlDef = [\r\n\r\n ]\r\n this.SearchActions = {\r\n ...[...this.ScreenDdlDef].reduce((a, v) => { a['Search' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenCriDdlDef].reduce((a, v) => { a['SearchCri' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type !== 'DocList' && f.type !== 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetColumnOnDemandAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetRefColumnOnDemandAction(v); return a; }, {}),\r\n ...this.MakePullUpOnDemandAction([...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['GetRef' + v.refColumnName] = { dependents: [...((a['GetRef' + v.refColumnName] || {}).dependents || []), v] }; return a; }, {})),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'DocList').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetDocumentListAction(v); return a; }, {}),\r\n }\r\n this.OnDemandActions = {\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Get').reduce((a, v) => { a['Get' + v.columnName + 'Content'] = this.MakeGetDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Add').reduce((a, v) => { a['Add' + v.columnName + 'Content'] = this.MakeAddDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Del').reduce((a, v) => { a['Del' + v.columnName + 'Content'] = this.MakeDelDocumentContentAction(v); return a; }, {}),\r\n }\r\n this.ScreenDdlSelectors = this.ScreenDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeDdlSelectors(v); return a; }, {})\r\n this.ScreenCriDdlSelectors = this.ScreenCriDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeCriDdlSelectors(v); return a; }, {})\r\n this.actionReducers = this.MakeActionReducers();\r\n }\r\n GetScreenName() { return 'SupportRequest' }\r\n GetMstKeyColumnName(isUnderlining = false) { return isUnderlining ? 'SupportRequestId' : 'SupportRequestId51'; }\r\n GetDtlKeyColumnName(isUnderlining = false) { return isUnderlining ? '' : ''; }\r\n GetPersistDtlName() { return this.GetScreenName() + '_Dtl'; }\r\n GetPersistMstName() { return this.GetScreenName() + '_Mst'; }\r\n GetWebService() { return SupportRequestService; }\r\n GetReducerActionTypePrefix() { return this.GetScreenName(); };\r\n GetActionType(actionTypeName) { return getAsyncTypes(this.GetReducerActionTypePrefix(), actionTypeName); }\r\n GetInitState() {\r\n return {\r\n ...initialRintagiScreenReduxState,\r\n Label: {\r\n ...initialRintagiScreenReduxState.Label,\r\n }\r\n }\r\n };\r\n\r\n GetDefaultDtl(state) {\r\n return (state || {}).NewDtl ||\r\n {\r\n\r\n }\r\n }\r\n ExpandMst(mst, state, copy) {\r\n return {\r\n ...mst,\r\n key: Date.now(),\r\n SupportRequestId51: copy ? null : mst.SupportRequestId51,\r\n }\r\n }\r\n ExpandDtl(dtlList, copy) {\r\n return dtlList;\r\n }\r\n\r\n SearchListToSelectList(state) {\r\n const searchList = ((state || {}).SearchList || {}).data || [];\r\n return searchList\r\n .map((v, i) => {\r\n return {\r\n key: v.key || null,\r\n value: v.labelL || v.label || ' ',\r\n label: v.labelL || v.label || ' ',\r\n labelR: v.labelR || ' ',\r\n detailR: v.detailR || ' ',\r\n detail: v.detail || ' ',\r\n idx: i,\r\n isSelected: v.isSelected,\r\n }\r\n })\r\n }\r\n}\r\n\r\n/* ReactRule: Redux Custom Function */\r\n\r\n/* ReactRule End: Redux Custom Function */\r\n\r\n/* helper functions */\r\n\r\nexport function ShowMstFilterApplied(state) {\r\n return !state\r\n || !state.ScreenCriteria\r\n\r\n || state.ScreenCriteria.SearchStr;\r\n}\r\n\r\nexport default new SupportRequestRedux()\r\n","import React, { Fragment, Component } from 'react';\r\nimport { Typeahead, TypeaheadMenu, Menu,MenuItem } from 'react-bootstrap-typeahead';\r\nimport log from '../../helpers/logger';\r\nexport default class AutoCompleteField extends Component {\r\n \r\n constructor(props) {\r\n super(props);\r\n this.menuVisible = false; // can't use state as it is not reflected UNTIL next render, use instance variable instead\r\n this.isEnter = false;\r\n this.state = {\r\n lastSelectedValue:this.props.defaultSelected\r\n }\r\n }\r\n renderMenu=((results, menuProps) => {\r\n this.currentMatches = results;\r\n return (); \r\n /* this are for more advanced customization say showing multiple columns like icon/photo etc., not needed for now\r\n return (\r\n \r\n {results.map((result, index) => (\r\n \r\n {result.label}\r\n \r\n ))}\r\n \r\n )\r\n */\r\n }).bind(this)\r\n\r\n // handleFocus = (...rest)=>{\r\n // this.hasFocus = true;\r\n // }\r\n handleFocus = ((event) => {\r\n this.hasFocus = true;\r\n // event.preventDefault();\r\n // const target = event.target;\r\n // setTimeout(target.select.bind(target), 0);\r\n }).bind(this)\r\n\r\n handleKeyDown = ((inputChar,...rest) =>{\r\n const value = inputChar.target.value;\r\n this.isEnter = inputChar.keyCode === 13;\r\n this.isTab = inputChar.keyCode === 9;\r\n this.isEscape = inputChar.keyCode === 27;\r\n this.isEmpty = !value;\r\n if (this.isEnter || this.isTab || this.isEscape) {\r\n const pickFirst = (this.currentMatches || []).length > 0 && value && this.props.pickFirst;\r\n if (typeof this.props.onChange === \"function\") {\r\n if (pickFirst) this.props.onChange(this.props.name || (this.props.field || {}).name,[this.currentMatches[0]], {fieldname:this.props.fieldname,listidx:this.props.listidx, fieldpath:this.props.fieldpath});\r\n else if (this.isEmpty) this.props.onChange(this.props.name || (this.props.field || {}).name,[{}], {fieldname:this.props.fieldname,listidx:this.props.listidx, fieldpath:this.props.fieldpath});\r\n else if (this.isEnter || this.isEscape ) {\r\n const instance = typeof this.typeahead.getInput === \"function\" ? this.typeahead : this.typeahead.getInstance();\r\n const priorValue = (this.currentValue || this.state.lastSelectedValue || this.props.defaultSelected || [null])[0] ;\r\n const priorSelected = priorValue || this.props.value || {};\r\n const priorLabel = priorSelected.label;\r\n if (priorLabel) {\r\n instance.setState({text:priorLabel});\r\n instance._updateSelected([priorSelected]);\r\n if (this.isEnter && false) this.props.onChange(this.props.name || (this.props.field || {}).name, [priorSelected], {fieldname:this.props.fieldname,listidx:this.props.listidx, fieldpath:this.props.fieldpath});\r\n //instance.blur();\r\n instance.focus();\r\n instance._hideMenu(); // not public interface\r\n }\r\n }\r\n\r\n }\r\n }\r\n }).bind(this)\r\n\r\n handleMenuShow = ((...rest) => {\r\n this.menuVisible = true;\r\n }).bind(this)\r\n\r\n handleMenuHide = ((...rest) => {\r\n this.menuVisible = false;\r\n }).bind(this)\r\n\r\n handlePaginate = () =>{\r\n const _this = this;\r\n return function(e, ...rest) {\r\n if (typeof _this.props.onPaginate === \"function\") {\r\n const instance = !_this.typeahead ? {} : typeof _this.typeahead.getInput === \"function\" ? _this.typeahead : this.typeahead.getInstance();\r\n const shownResults = (instance.state || {}).shownResults;\r\n const value = (instance.state || {}).text;\r\n _this.props.onPaginate(_this.props.name || (_this.props.field || {}).name, value, shownResults , {fieldname:_this.props.fieldname,listidx:_this.props.listidx, fieldpath:_this.props.fieldpath});\r\n }\r\n }\r\n }\r\n handleChange = ((value,...rest) => {\r\n this.currentValue = value;\r\n if (this.typeahead) {\r\n const instance = typeof this.typeahead.getInput === \"function\" ? this.typeahead : this.typeahead.getInstance();\r\n if (!instance.getInput().value) {\r\n this.handleInputChange(\"\");\r\n if (!this.hasFocus) {\r\n if (typeof this.props.onBlur === \"function\") this.props.onBlur(this.props.name || (this.props.field || {}).name, true);\r\n instance.focus();\r\n setTimeout(()=>{(instance._hideMenu || instance.hideMenu)();},0); // _hideMenu was not public interface, hideMenu was added in V4+\r\n }\r\n else {\r\n //instance.blur();\r\n //instance.focus();\r\n }\r\n } \r\n }\r\n this.setState({lastSelectedValue:value});\r\n // this is going to call setFieldValue and manually update values.this.props.name\r\n if (typeof this.props.onChange === \"function\" \r\n && !this.menuVisible // a selection is made\r\n && (value.length > 0 || true) // empty would not trigger onchange\r\n ) {\r\n this.props.onChange(this.props.name || (this.props.field || {}).name, value, {fieldname:this.props.fieldname,listidx:this.props.listidx, fieldpath:this.props.fieldpath});\r\n }\r\n }).bind(this)\r\n\r\n handleBlur = ((e) => {\r\n this.hasFocus = false;\r\n // this is going to call setFieldTouched and manually update touched.this.props.name\r\n const value = e.target.value;\r\n const pickFirst = (this.currentMatches || []).length > 0 && value && this.props.pickFirst;\r\n if (typeof this.props.onBlur === \"function\") {\r\n this.props.onBlur(this.props.name || (this.props.field || {}).name, true, {fieldname:this.props.fieldname,listidx:this.props.listidx, fieldpath:this.props.fieldpath});\r\n }\r\n else {\r\n if (value && typeof this.props.onChange === \"function\" && pickFirst) {\r\n this.props.onChange(this.props.name || (this.props.field || {}).name,[this.currentMatches[0]], {listidx:this.props.listidx, fieldpath:this.props.fieldpath});\r\n }\r\n }\r\n }).bind(this)\r\n\r\n handleInputChange = ((value,...rest) => {\r\n // this is going to call setFieldValue and manually update values.this.props.name\r\n if (typeof this.props.onInputChange === \"function\") this.props.onInputChange(this.props.name || (this.props.field || {}).name, value, {fieldname:this.props.fieldname,listidx:this.props.listidx, fieldpath:this.props.fieldpath});\r\n }).bind(this)\r\n\r\n filterBy = (option,props)=>{\r\n /* customeized client side filtering */\r\n const item = option;\r\n const itemText = option.label;\r\n const searchStr = props.text;\r\n return true;\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n this.typeahead = typeahead}\r\n renderMenu={this.renderMenu}\r\n onPaginate={this.handlePaginate()}\r\n //options={range(0, 1000).map((o) => o.toString())}\r\n options={this.props.options}\r\n paginate={true}\r\n placeholder={this.props.placeholder}\r\n maxResults = {20}\r\n flip = {false}\r\n bsSize= {\"sm\"}\r\n defaultInputValue = {\"\"}\r\n delay = {500}\r\n value={this.props.value}\r\n onChange={this.handleChange}\r\n onBlur={this.handleBlur}\r\n onSelect={this.handleChange}\r\n onKeyDown={this.handleKeyDown}\r\n onFocus={this.handleFocus}\r\n name={this.props.name || (this.props.field || {}).name}\r\n onInputChange = {this.handleInputChange}\r\n defaultSelected = {this.props.defaultSelected}\r\n onMenuShow={this.handleMenuShow}\r\n onMenuHide={this.handleMenuHide}\r\n clearButton = {true}\r\n disabled={this.props.disabled}\r\n filterBy = {this.props.filterBy}\r\n renderMenuItemChildren={this.props.renderMenuItemChildren}\r\n />\r\n \r\n
\r\n );\r\n };\r\n};\r\n","import React from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col, Table } from 'reactstrap';\r\nimport log from '../helpers/logger';\r\nimport RintagiScreen from '../components/custom/Screen';\r\nimport { registerBlocker, unregisterBlocker } from '../helpers/navigation';\r\nimport ModalDialog from '../components/custom/ModalDialog';\r\nimport DropdownField from '../components/custom/DropdownField';\r\nimport KycPersonReduxObj, { ShowMstFilterApplied } from '../redux/KycPerson';\r\nimport KycCorporateReduxObj from '../redux/KycCorporate';\r\nimport SupportRequestReduxObj from '../redux/SupportRequest';\r\nimport { login } from '../redux/Auth';\r\nimport { Container, Flex, Spinner, Heading } from \"theme-ui\";\r\nimport { Formik, Field, Form } from 'formik';\r\nimport { formatContent } from '../helpers/formatter';\r\nimport AutoCompleteField from '../components/custom/AutoCompleteField';\r\nimport { isEmptyId } from '../helpers/utils'\r\n\r\n\r\nclass CustomerSupport extends RintagiScreen {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n initialing: true,\r\n formikValidatedTime: null,\r\n currentSupportKey: Date.now(),\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n submitting: false,\r\n reduxRefreshed: false,\r\n }\r\n\r\n this.DateChange = this.DateChange.bind(this);\r\n this.DropdownChange = this.DropdownChange.bind(this);\r\n this.TextChange = this.TextChange.bind(this);\r\n this.ValidatePage = this.ValidatePage.bind(this);\r\n this.OnModalReturn = this.OnModalReturn.bind(this);\r\n this.setDirtyFlag = this.setDirtyFlag.bind(this);\r\n this.SavePage = this.SavePage.bind(this);\r\n this.DropdownChangeV1 = this.DropdownChangeV1.bind(this);\r\n\r\n const loadPageOptions = { SkipMetaData: true, SkipSupportingData: true };\r\n }\r\n\r\n RequestTypeId51InputChange() { const _this = this; return function (name, v) { const filterBy = ''; _this.props.SearchRequestTypeId51(v, filterBy); } }\r\n\r\n SavePage(values, { setSubmitting, setErrors, resetForm, setFieldValue, setValues }) {\r\n const errors = [];\r\n const currMst = (this.props.SupportRequest || {}).Mst || {};\r\n\r\n if (errors.length > 0) {\r\n this.props.showNotification('E', { message: errors[0] });\r\n setSubmitting(false);\r\n }\r\n else {\r\n const { ScreenButton, OnClickColumeName } = this;\r\n const currMst = ((this.props.KycPerson || {}).Mst || {});\r\n const kycPersonId = currMst.KycPersonId15 || \"\";\r\n //KYC Corporate info \r\n const currCorpMst = ((this.props.KycCorporate || {}).Mst || {});\r\n const kycCorpId = currCorpMst.KycCorpId16 || \"\";\r\n\r\n this.setState({ submittedOn: Date.now(), submitting: true, setSubmitting: setSubmitting, key: currMst.key, ScreenButton: ScreenButton, OnClickColumeName: OnClickColumeName });\r\n this.ScreenButton = null;\r\n this.OnClickColumeName = null;\r\n this.props.SavePage(\r\n this.props.SupportRequest,\r\n {\r\n SupportRequestId51: '',\r\n UserId51: this.props.user.UsrId || '',\r\n KycPersonId51: kycPersonId,\r\n KycCorpId51: kycCorpId,\r\n RequestTypeId51: (values.requestType || {}).value || '',\r\n RequestInfo51: values.request || '',\r\n InputOn51: '',\r\n },\r\n [],\r\n {\r\n persist: true,\r\n ScreenButton: (ScreenButton || {}).buttonType,\r\n OnClickColumeName: OnClickColumeName,\r\n }\r\n ).then(result => {\r\n log.debug('submit done');\r\n this.props.history.push('/confirm-message');\r\n }).catch(error => {\r\n log.debug('submit Support Request error', error)\r\n }).finally(\r\n () => {\r\n setSubmitting(false);\r\n this.setState({ submitting: false });\r\n }\r\n );\r\n }\r\n }\r\n /* end of form related handling functions */\r\n\r\n\r\n ValidatePage(values) {\r\n const errors = {};\r\n /* sync formik values to state values */\r\n this.setState({ currentPersonalDetail: { ...values } });\r\n\r\n /* validators go here but not recommended unless it doesn't fit in field based validation */\r\n if (isEmptyId((values.requestType || {}).value)) { errors.requestType = \"Please select a request type.\" }\r\n\r\n this.IsFormSubmit = false; // this is used by field validator and needs to be reset when we are here \r\n this.FormGroup = undefined; // this is used by field validator and needs to be reset when we are here \r\n\r\n /* arrange post validation actions, should be the last to call \r\n * for promise based validation, this call MUST BE DONE inside the then or error block\r\n * as Formik would wait for promise before revising its states\r\n */\r\n super.ValidatePage();\r\n\r\n log.debug(\"birthday\", (values.birthday || {}));\r\n\r\n return errors;\r\n }\r\n\r\n componentDidMount(a, b) {\r\n const { mstId } = { ...this.props.match.params };\r\n if (!(this.props.KycPerson || {}).AuthCol || true) {\r\n this.props.LoadPage('MstRecord', { mstId: mstId || '!' });\r\n }\r\n\r\n if (!(this.props.KycCorporate || {}).AuthCol || true) {\r\n this.props.LoadCorpPage('MstRecord', { mstId: mstId || '!' });\r\n }\r\n\r\n if (!(this.props.SupportRequest || {}).AuthCol || true) {\r\n this.props.LoadSupportPage('MstRecord', { mstId: mstId || '!' });\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevStates) {\r\n log.debug('component did update');\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.blocker) {\r\n unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n }\r\n\r\n render() {\r\n //KYC individual info\r\n const currMst = ((this.props.KycPerson || {}).Mst || {});\r\n const kycPersonId = currMst.KycPersonId15 || \"\";\r\n const internalStatus = currMst.InternalStatus15 || \"\";\r\n const livenessPassed = currMst.LivenessPassed15 || \"\";\r\n const disclosuresChked = currMst.DisclosuresChked15 || \"\";\r\n\r\n //KYC Corporate info \r\n const currCorpMst = ((this.props.KycCorporate || {}).Mst || {});\r\n const kycCorpId = currCorpMst.KycCorpId16 || \"\";\r\n const corpInternalStatus = currCorpMst.InternalStatus16 || \"\";\r\n\r\n if (kycPersonId != \"\") { // check if this is individual account\r\n if (internalStatus != 'AP') {\r\n return ;\r\n } else {\r\n if (livenessPassed === \"N\" || disclosuresChked === \"N\") {\r\n return ;\r\n }\r\n }\r\n } else if (kycCorpId != \"\") { // check if this is corporate account\r\n if (corpInternalStatus != 'AP') {\r\n return ;\r\n }\r\n }\r\n\r\n const reduxObj = this.props.SupportRequest || {};\r\n const currSupportRequestMst = ((this.props.SupportRequest || {}).Mst || {});\r\n\r\n const RequestTypeId51List = SupportRequestReduxObj.ScreenDdlSelectors.RequestTypeId51(reduxObj) || [];\r\n const RequestTypeId51 = currSupportRequestMst.RequestTypeId51;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n (\r\n
\r\n {this.GrabFormikBag({ errors, touched, isSubmitting, dirty, isValid })}\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n {errors.requestType && touched.requestType && {errors.requestType}}\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n {errors.request && touched.request && {errors.request}}\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n Send Message\r\n \r\n \r\n
\r\n
\r\n
\r\n )}\r\n />\r\n
\r\n
\r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n KycPerson: state.KycPerson,\r\n KycCorporate: state.KycCorporate,\r\n SupportRequest: state.SupportRequest,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { login: login },\r\n { LoadPage: KycPersonReduxObj.LoadPage.bind(KycPersonReduxObj) },\r\n { LoadCorpPage: KycCorporateReduxObj.LoadPage.bind(KycCorporateReduxObj) },\r\n { LoadSupportPage: SupportRequestReduxObj.LoadPage.bind(SupportRequestReduxObj) },\r\n { SavePage: SupportRequestReduxObj.SavePage.bind(SupportRequestReduxObj) },\r\n { SearchRequestTypeId51: SupportRequestReduxObj.SearchActions.SearchRequestTypeId51.bind(SupportRequestReduxObj) },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(CustomerSupport));","import { Container, Flex, Spinner, Heading } from \"theme-ui\";\r\n\r\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { logout, login } from '../redux/Auth';\r\n\r\n// liquity functionalities(smart contract related)\r\nimport {\r\n LiquityStoreState,\r\n Decimal,\r\n Cache,\r\n} from \"@liquity/lib-base\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\nimport { useTransactionFunction } from \"../components/Transaction\";\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\n\r\nimport {\r\n selectForCacheChangeValidation,\r\n validateCacheChange\r\n} from \"../components/Cache/validation/validateCacheChange\";\r\nimport { CacheChange, StabilityDepositChange } from \"@liquity/lib-base\";\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar } from 'reactstrap';\r\nimport Eth2WalletReduxObj from '../redux/Eth2Wallet';\r\nimport ModalDialog from '../components/custom/ModalDialog';\r\nimport log from '../helpers/logger';\r\nimport { useMyTransactionState } from \"../components/Transaction\";\r\nimport DropdownField from '../components/custom/DropdownField';\r\nimport { SyncValidators, WithdrawValidators } from '../services/Eth2WalletService';\r\nimport { showNotification, dispatchWithNotification } from '../redux/Notification';\r\n\r\nconst selector = (state) => {\r\n const { cache, fees, price, accountBalance, paydBalance, ftxBalance, stabilityDeposit,\r\n total, ethAmt, rewardEthAmt, ftxStake, ftxAllowance } = state;\r\n return {\r\n cache,\r\n fees,\r\n price,\r\n accountBalance,\r\n ftxBalance,\r\n stabilityDeposit,\r\n total,\r\n ethAmt,\r\n rewardEthAmt,\r\n ftxStake,\r\n ftxAllowance,\r\n validationContext: selectForCacheChangeValidation(state)\r\n };\r\n};\r\n\r\nconst TRANSACTION_ID = \"stability-deposit\";\r\n\r\nconst WithdrawETH = (props) => {\r\n const {\r\n cache: previousCache\r\n , fees\r\n , price: ethPrice\r\n , accountBalance: walletEthAmount\r\n , ftxBalance: walletFtxAmount\r\n , stabilityDeposit\r\n , total\r\n , ethAmt\r\n , rewardEthAmt\r\n , ftxStake\r\n , ftxAllowance\r\n , validationContext } = useLiquitySelector(selector);\r\n const {\r\n liquity: { send: liquitySend, populate: liquityTry, store, connection }\r\n , config\r\n } = useLiquity();\r\n const multiDepositAddress = ((connection || {}).addresses || {}).multipleDeposit;\r\n const walletAddress = (connection || {}).userAddress;\r\n\r\n\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n cacheOpened: !!previousCache,\r\n transactions: [],\r\n ethWithdrawSelection: \"\",\r\n validatorStakingvalue: \"\",\r\n ethStakingvalue: \"\",\r\n ethStakingInTransit: 0,\r\n ethStakingError: undefined,\r\n errorFlag: false,\r\n reasonValue: \"\",\r\n disableButton: false,\r\n\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n });\r\n const myStateRef = useRef(myState);\r\n const [spinnerStatus, setSpinnerStatus] = useState(false);\r\n const [didMount, setDidMount] = useState(false);\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, global, Eth2Wallet } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n global: reduxState.global,\r\n Eth2Wallet: reduxState.Eth2Wallet\r\n };\r\n });\r\n const transactionState = useMyTransactionState(TRANSACTION_ID);\r\n const isTransactionPending =\r\n transactionState.type === \"waitingForApproval\" ||\r\n transactionState.type === \"waitingForConfirmation\";\r\n\r\n\r\n // simulating class(this -> _this)\r\n const [_state, setState] = useState(0);\r\n\r\n const [_lastSync, setLastSync] = useState(Date.now());\r\n\r\n const WithdrawValidator = (confirm) => {\r\n if (confirm) {\r\n setTimeout(() => setSpinnerStatus(true), 0);\r\n _this.setState({\r\n disableButton: true,\r\n });\r\n \r\n WithdrawValidators(walletAddress, _this.state.validatorStakingvalue, _this.state.reasonValue)\r\n .then(data => {\r\n log.debug(\"withdraw validator result\", data);\r\n setTimeout(() => setSpinnerStatus(false), 0);\r\n _this.setState({\r\n disableButton: false,\r\n });\r\n props.history.push('/withdrawConfirm');\r\n })\r\n .catch(error => {\r\n log.debug(\"withdraw validator result\", error);\r\n dispatchWithNotification(dispatch, { type: 'SAVE_MST.FAILED', payload: { error: error, message: error.errMsg } });\r\n setTimeout(() => setSpinnerStatus(false), 0);\r\n _this.setState({\r\n disableButton: false,\r\n });\r\n })\r\n }\r\n }\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n myStateRef.current = { ...myStateRef.current, ...newState };\r\n setMyState(myStateRef.current);\r\n setState(_state + 1);\r\n },\r\n\r\n handleValidatorChange: (event) => {\r\n var ethAmount = Decimal.ZERO.add(event.target.value * 32);\r\n var ethStakingErrorMsg = \"\";\r\n if (totalStaked < ethAmount) {\r\n ethStakingErrorMsg = \"You are drawing down more ETH than you have staked.\";\r\n }\r\n var validatorAmount = Decimal.ZERO.add(event.target.value * 1);\r\n if (withdrawalableValidator < validatorAmount){\r\n ethStakingErrorMsg = \"Not enough active validator(s) to be withdrawn at this moment.\";\r\n }\r\n\r\n //limit the ETH input box to be digit only\r\n var t = event.target.value;\r\n event.target.value = (t.indexOf(\".\") >= 0) ? (t.substr(0, t.indexOf(\".\")) + t.substr(t.indexOf(\".\"), 0)) : t;\r\n\r\n _this.setState({\r\n validatorStakingvalue: event.target.value,\r\n ethStakingvalue: ethAmount,\r\n ethStakingError: ethStakingErrorMsg,\r\n });\r\n },\r\n\r\n // onChangeValue: (event) => {\r\n // _this.setState({\r\n // ethWithdrawSelection: event.target.value,\r\n // });\r\n // },\r\n handleReasonChange: (event) => {\r\n _this.setState({\r\n reasonValue: event.target.value,\r\n });\r\n },\r\n\r\n\r\n Back: (event) => {\r\n props.history.push('/stakeOption');\r\n },\r\n\r\n // WithdrawValidator: (event) => {\r\n // setTimeout(() => setSpinnerStatus(true), 0);\r\n // _this.setState({\r\n // disableButton: true,\r\n // });\r\n\r\n // WithdrawValidators(walletAddress, _this.state.validatorStakingvalue, _this.state.reasonValue)\r\n // .then(data => {\r\n // log.debug(\"withdraw validator result\", data);\r\n // setTimeout(() => setSpinnerStatus(false), 0);\r\n // _this.setState({\r\n // disableButton: false,\r\n // });\r\n // props.history.push('/withdrawConfirm');\r\n // })\r\n // .catch(error => {\r\n // log.debug(\"withdraw validator result\", error);\r\n // dispatchWithNotification(dispatch, { type: 'SAVE_MST.FAILED', payload: { error: error, message: error.errMsg } });\r\n // setTimeout(() => setSpinnerStatus(false), 0);\r\n // _this.setState({\r\n // disableButton: false,\r\n // });\r\n // })\r\n // },\r\n\r\n ReviewWithdrawTransaction: (callback) => {\r\n const confirm = () => {\r\n if (callback) callback(true);\r\n }\r\n const cancel = () => {\r\n if (callback) callback(false);\r\n }\r\n const modalChange = (YesNo) => {\r\n _this.setState({ ModalOpen: false });\r\n if (YesNo === \"Y\") confirm();\r\n else cancel();\r\n };\r\n\r\n var confirmationSummary = \"
\" +\r\n \"

Do you confirm your intention to proceed with the withdrawal of the validator(s)?

\" +\r\n \"
\";\r\n\r\n var messageCnt = \"
\" +\r\n confirmationSummary +\r\n \"
\";\r\n\r\n _this.setState({\r\n ModalOpen: true,\r\n ModalSuccess: confirm,\r\n ModalCancel: cancel,\r\n OnModalReturn: modalChange,\r\n ModalHeader: false,\r\n ModalColor: \"success\",\r\n ModalTitle: 'Withdrawal Confirmation',\r\n ModalMsg:
\r\n });\r\n },\r\n\r\n handleSubmit: (event) => {\r\n // alert('A name was submitted: ' + this.state.value);\r\n event.preventDefault();\r\n }\r\n }), [_state, myState, walletFtxAmount]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n const { mstId } = { ...props.match.params };\r\n if (!didMount && (!(Eth2Wallet || {}).AuthCol || true)) {\r\n setDidMount(true);\r\n // must use the dispatch form for the redux binding\r\n\r\n const from = walletAddress;\r\n\r\n SyncValidators(walletAddress, multiDepositAddress)\r\n .then(data => {\r\n log.debug(\"validator sync result\", data);\r\n })\r\n .catch(error => {\r\n log.debug(\"validator sync result\", error);\r\n });\r\n dispatch(Eth2WalletReduxObj.SetScreenCriteria('', { Eth1WithdrawalAddr10: from, }, 0));\r\n dispatch(Eth2WalletReduxObj.LoadPage('MstRecord', { mstId: mstId || '!', DtlBlob: 'C', MstBlob: 'C' }));\r\n store.refresh();\r\n }\r\n\r\n }, [didMount, dispatch, Eth2Wallet, props, _this, ethPrice, walletAddress, store]);\r\n\r\n // ComponentDidUpdate() equivalent\r\n useEffect(() => {\r\n var now = Date.now()\r\n if (transactionState.type === \"confirmed\" && (now - (_lastSync || 0) > 5000)) {\r\n log.debug('re-sync');\r\n //lastSync = now;\r\n setLastSync(now);\r\n // empty out data input if successful\r\n _this.setState({\r\n validatorStakingvalue: 0,\r\n ethStakingvalue: 0,\r\n ethStakingInTransit: _this.state.ethStakingvalue,\r\n });\r\n }\r\n }, [transactionState, _lastSync, setLastSync, _this, walletAddress]);\r\n\r\n // body of the render()\r\n\r\n const currMst = ((Eth2Wallet || {}).Mst || {});\r\n const currDtlList = ((Eth2Wallet || {}).DtlList || {}).data || [];\r\n const stakedStatus = ['1', '2', '3']; // DEPOSITED, PENDING, ACTIVE\r\n const totalStaked = currDtlList.filter(x => stakedStatus.includes(x.ValidatorStatusCd5)).length * 32;\r\n const maxmiumnWaitTime = (new Date().valueOf()) - 48*60*60*1000; //active validator can be withdrawn after 48 hours\r\n const withdrawalableValidator = currDtlList.filter(x => { return x.ValidatorStatusCd5 === '3' && x.ActivationUtc5 != '' && (new Date(x.ActivationUtc5).valueOf() <= maxmiumnWaitTime)}).length;\r\n\r\n // console.log('currDtlList', currDtlList, withdrawalableValidator, (new Date((currDtlList[5] || {}).ActivationUtc5).valueOf()), maxmiumnWaitTime, \" ------\" + (currDtlList[5] || {}).ActivationUtc5, \"-------\" + new Date().toISOString(), \" ------- \" + (new Date((currDtlList[5] || {}).ActivationUtc5).valueOf() <= maxmiumnWaitTime) );\r\n\r\n const loader = (\r\n
\r\n
\r\n
Withdrawing...Please wait.
\r\n

Please don't refresh or leave the screen.

\r\n
\r\n );\r\n\r\n if (spinnerStatus) {\r\n return (\r\n
{loader}
\r\n );\r\n }\r\n\r\n\r\n return (\r\n \r\n \r\n
\r\n {/* Staking Section */}\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

How many validators to do a full withdrawal?

Currently Staked: {totalStaked} ETH

\r\n
\r\n\r\n \r\n
\r\n \r\n
Validators available for withdrawal: {withdrawalableValidator} Validator(s)
\r\n \r\n
\r\n
\r\n
\r\n ['e', 'E', '+', '-', '.'].includes(e.key) && e.preventDefault()}\r\n onWheel={(e) => e.target.blur()}\r\n />\r\n VALIDATORS\r\n
\r\n
\r\n \r\n {_this.state.ethStakingError}\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n ['e', 'E', '+', '-'].includes(e.key) && e.preventDefault()}\r\n onWheel={(e) => e.target.blur()}\r\n disabled\r\n />\r\n ETH\r\n
\r\n
\r\n {/* \r\n {_this.state.ethStakingError}\r\n */}\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n

Please be aware that the queue time to withdraw a validator is approximately between 2 - 5 days.

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

Reason For Withdrawal (Optional)

\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n {/* */}\r\n
\r\n ['e', 'E', '+', '-'].includes(e.key) && e.preventDefault()}\r\n onWheel={(e) => e.target.blur()}\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n { _this.WithdrawValidator() }}>\r\n onClick={() => { _this.ReviewWithdrawTransaction(WithdrawValidator) }}>\r\n Continue\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRouter(WithdrawETH);\r\n","import { Container, Flex, Spinner, Heading } from \"theme-ui\";\r\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { logout, login } from '../redux/Auth';\r\n\r\n// liquity functionalities(smart contract related)\r\nimport {\r\n LiquityStoreState,\r\n Decimal,\r\n Cache,\r\n} from \"@liquity/lib-base\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\nimport { useTransactionFunction } from \"../components/Transaction\";\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\n\r\nimport {\r\n selectForCacheChangeValidation,\r\n validateCacheChange\r\n} from \"../components/Cache/validation/validateCacheChange\";\r\nimport { CacheChange, StabilityDepositChange } from \"@liquity/lib-base\";\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar, Table } from 'reactstrap';\r\nimport Eth2WalletReduxObj from '../redux/Eth2Wallet';\r\nimport ModalDialog from '../components/custom/ModalDialog';\r\nimport log from '../helpers/logger';\r\nimport { useMyTransactionState } from \"../components/Transaction\";\r\nimport DropdownField from '../components/custom/DropdownField';\r\nimport Paging from '../components/custom/Paging';\r\nimport { shortenAddress } from \"../utils/shortenAddress\";\r\nimport { DisplayMnemonic, WithdrawValidator } from '../services/Eth2WalletService';\r\nimport { showNotification, dispatchWithNotification } from '../redux/Notification';\r\n\r\nconst selector = (state) => {\r\n const { cache, fees, price, accountBalance, ftxBalance, stabilityDeposit,\r\n total, ethAmt, rewardEthAmt } = state;\r\n return {\r\n cache,\r\n fees,\r\n price,\r\n accountBalance,\r\n ftxBalance,\r\n stabilityDeposit,\r\n total,\r\n ethAmt,\r\n rewardEthAmt,\r\n validationContext: selectForCacheChangeValidation(state)\r\n };\r\n};\r\n\r\nconst TRANSACTION_ID = \"stability-deposit\";\r\n//let disableButton = false;\r\n\r\nconst ManageValidator = (props) => {\r\n const {\r\n cache: previousCache\r\n , fees\r\n , price: ethPrice\r\n , accountBalance: walletEthAmount\r\n , ftxBalance: walletFtxAmount\r\n , stabilityDeposit\r\n , total\r\n , ethAmt\r\n , rewardEthAmt\r\n , validationContext } = useLiquitySelector(selector);\r\n const {\r\n liquity: { send: liquitySend, populate: liquityTry, store, connection }\r\n , config\r\n } = useLiquity();\r\n const walletAddress = (connection || {}).userAddress;\r\n const chainId = (connection || {}).chainId;\r\n\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n cacheOpened: !!previousCache,\r\n transactions: [],\r\n ethWithdrawSelection: \"\",\r\n validatorStakingvalue: \"\",\r\n ethStakingvalue: \"\",\r\n ethStakingInTransit: 0,\r\n ethStakingError: undefined,\r\n errorFlag: false,\r\n validatorValue: \"\",\r\n disableButton: false,\r\n\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n ModalHideCancelBtn: false,\r\n });\r\n const myStateRef = useRef(myState);\r\n const [spinnerStatus, setSpinnerStatus] = useState(false);\r\n const [didMount, setDidMount] = useState(false);\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, global, Eth2Wallet } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n global: reduxState.global,\r\n Eth2Wallet: reduxState.Eth2Wallet\r\n };\r\n });\r\n const transactionState = useMyTransactionState(TRANSACTION_ID);\r\n const isTransactionPending =\r\n transactionState.type === \"waitingForApproval\" ||\r\n transactionState.type === \"waitingForConfirmation\";\r\n\r\n // simulating class(this -> _this)\r\n const [_state, setState] = useState(0);\r\n\r\n const [_lastSync, setLastSync] = useState(Date.now());\r\n\r\n const exitValidator = (confirm) => {\r\n if (confirm) {\r\n setTimeout(() => setSpinnerStatus(true), 0);\r\n _this.setState({\r\n disableButton: true,\r\n });\r\n\r\n //disableButton = true;\r\n\r\n WithdrawValidator(walletAddress, _this.state.validatorValue)\r\n .then(data => {\r\n log.debug(\"withdraw validator result\", data);\r\n setTimeout(() => setSpinnerStatus(false), 0);\r\n props.history.push('/withdrawConfirm');\r\n })\r\n .catch(error => {\r\n log.debug(\"withdraw validator result\", error);\r\n dispatchWithNotification(dispatch, { type: 'SAVE_MST.FAILED', payload: { error: error, message: error.errMsg } });\r\n setTimeout(() => setSpinnerStatus(false), 0);\r\n _this.setState({\r\n disableButton: false,\r\n });\r\n });\r\n }\r\n }\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n myStateRef.current = { ...myStateRef.current, ...newState };\r\n setMyState(myStateRef.current);\r\n setState(_state + 1);\r\n },\r\n\r\n ReviewTransaction: async (currDtlList) => {\r\n const confirm = () => {\r\n // if (callback) callback(true);\r\n }\r\n const cancel = () => {\r\n // if (callback) callback(false);\r\n }\r\n const modalChange = (YesNo) => {\r\n _this.setState({ ModalOpen: false });\r\n if (YesNo === \"Y\") confirm();\r\n else cancel();\r\n };\r\n\r\n var mnemonic = \"\";\r\n\r\n try {\r\n var number = 0;\r\n var resp = await DisplayMnemonic(walletAddress);\r\n var mnArr = resp.data.mst.Mnemonic.split(\" \");\r\n var copyMnemonic = resp.data.mst.Mnemonic || \"\";\r\n log.debug(\"mnemonic result\", mnArr, copyMnemonic);\r\n\r\n const mnArr2D = [];\r\n while (mnArr.length) mnArr2D.push(mnArr.splice(0, 6));\r\n\r\n for (let row = 0; row < mnArr2D.length; row++) {\r\n mnemonic += \"\";\r\n for (let col = 0; col < mnArr2D[row].length; col++) {\r\n number++;\r\n mnemonic += '' + number + ': ' + '' + mnArr2D[row][col] + '';\r\n }\r\n mnemonic += \"\";\r\n }\r\n }\r\n catch (error) {\r\n log.debug(\"mnemonic result\", error);\r\n }\r\n\r\n const getChainLink = (chainId == '5') ? 'https://autumn-empty-model.ethereum-goerli.quiknode.pro/36b557d7636821492a6f0dba8eb8011244a6051e/' : 'https://greatest-fluent-frost.quiknode.pro/9809fb70c1923c69860a42cf4119b6d66d649894/';\r\n const getChainText = (chainId == '5') ? 'goerli.' : '';\r\n\r\n var copyInstruction = \"Manual Withdrawal Instructions:\" + \"\\\\n\" +\r\n \"#1. Download Release 1.29.2 from https://github.com/wealdtech/ethdo/releases\" + \"\\\\n\" +\r\n \"#2. Click on Assets, find your O/S version, download the zip file then expand it\" + \"\\\\n\" +\r\n \"#3. Save the content eg. ethdo.exe at a directory of your choice, eg.temp\" + \"\\\\n\" +\r\n \"#4. Follow instructions on https://github.com/wealdtech/ethdo/blob/master/docs/exitingvalidators.md\" + \"\\\\n\" +\r\n \"#5. Visit https://auth.quicknode.com/ or similar to create an end-point (eg. \" + getChainText + \"quiknode.pro/36b557d7636821492a6f0dba8eb8011244a6051e/) on Ethereum mainnet for free, you may skip the add-ons\" + \"\\\\n\" +\r\n \"#6. On Cmd, type to test end-point at the directory on #3 eg.: ethdo --connection=\" + getChainLink + \" node info\" + \"\\\\n\" +\r\n \"#7. Expect Syncing: true/false and either is fine\" + \"\\\\n\" +\r\n \"#8. On Cmd, type the following to exit your validators one by one:\" + \"\\\\n\" +\r\n \"#9. eg. ethdo validator exit --mnemonic="unit identify account radio crawl interest siren monitor canvas wealth style horn maid patient salon innocent village impact say armor sphere carry people strategy" --connection=\" + getChainLink + \" --timeout 600s --validator=123456 --verbose --debug\";\r\n\r\n var validatorIndexList = \"\";\r\n var copyValidatorIndex = \"Validator Indexes:\" + \"\\\\n\";\r\n //const stakedStatus = ['1', '2', '3']; // DEPOSITED, PENDING, ACTIVE\r\n for (let row = 0; row < currDtlList.length; row++) {\r\n if(currDtlList[row].ValidatorStatusCd5 === '1' || currDtlList[row].ValidatorStatusCd5 === '2' || currDtlList[row].ValidatorStatusCd5 === '3' ){\r\n copyValidatorIndex += currDtlList[row].ValidatorIndex5 + \"\\\\n\";\r\n validatorIndexList += \"
\" + currDtlList[row].ValidatorIndex5 + \"
\";\r\n }\r\n };\r\n\r\n\r\n var confirmationSummary = \"
\" +\r\n \"
Staked.Finance is a non-custodial service. That means you are the owner of your validator. Make sure no one else knows this information.
\" +\r\n \"
\" +\r\n mnemonic +\r\n \"
\" +\r\n (copyMnemonic ? \" \" : \"\") +\r\n \"
\" +\r\n \"
#1. Download Release 1.29.2 from https://github.com/wealdtech/ethdo/releases
\" +\r\n \"
#2. Click on Assets, find your O/S version, download the zip file then expand it
\" +\r\n \"
#3. Save the content eg. ethdo.exe at a directory of your choice, eg.temp
\" +\r\n \"
#4. Follow instructions on https://github.com/wealdtech/ethdo/blob/master/docs/exitingvalidators.md
\" +\r\n \"
#5. Visit https://auth.quicknode.com/ or similar to create an end-point (eg. \" + getChainText + \"quiknode.pro/36b557d7636821492a6f0dba8eb8011244a6051e/) on Ethereum mainnet for free, you may skip the add-ons
\" +\r\n \"
#6. On Cmd, type to test end-point at the directory on #3 eg.: ethdo --connection=\" + getChainLink + \" node info
\" +\r\n \"
#7. Expect Syncing: true/false and either is fine
\" +\r\n \"
#8. On Cmd, type the following to exit your validators one by one:
\" +\r\n \"
#9. eg. ethdo validator exit --mnemonic=\\\"unit identify account radio crawl interest siren monitor canvas wealth style horn maid patient salon innocent village impact say armor sphere carry people strategy\\\" --connection=\" + getChainLink + \" --timeout 600s --validator=123456 --verbose --debug
\" +\r\n \"
\" + \r\n \"
\" +\r\n \"Please substitute the above --validator=123456 with the following for the vaidator that you wish to withdraw manually, one after another:\" +\r\n \"
\" + validatorIndexList + \"
\" +\r\n \"
\" +\r\n \"
\";\r\n\r\n var messageCnt = \"
\" +\r\n confirmationSummary +\r\n \"
\";\r\n\r\n _this.setState({\r\n ModalOpen: true,\r\n ModalSuccess: confirm,\r\n ModalCancel: cancel,\r\n OnModalReturn: modalChange,\r\n ModalHeader: false,\r\n ModalColor: \"success\",\r\n ModalTitle: 'Withdrawal Key',\r\n ModalHideCancelBtn: true,\r\n ModalMsg:
\r\n });\r\n },\r\n\r\n // onChangeValue: (event) => {\r\n // _this.setState({\r\n // ethWithdrawSelection: event.target.value,\r\n // });\r\n // },\r\n handleValidatorChange: (event) => {\r\n _this.setState({\r\n validatorValue: event.value,\r\n });\r\n },\r\n\r\n // exitValidator: (event) => {\r\n // setTimeout(() => setSpinnerStatus(true), 0);\r\n // _this.setState({\r\n // disableButton: true,\r\n // });\r\n\r\n // //disableButton = true;\r\n\r\n // WithdrawValidator(walletAddress, _this.state.validatorValue)\r\n // .then(data => {\r\n // log.debug(\"withdraw validator result\", data);\r\n // setTimeout(() => setSpinnerStatus(false), 0);\r\n // props.history.push('/withdrawConfirm');\r\n // })\r\n // .catch(error => {\r\n // log.debug(\"withdraw validator result\", error);\r\n // dispatchWithNotification(dispatch, { type: 'SAVE_MST.FAILED', payload: { error: error, message: error.errMsg } });\r\n // setTimeout(() => setSpinnerStatus(false), 0);\r\n // _this.setState({\r\n // disableButton: false,\r\n // });\r\n // });\r\n // },\r\n\r\n ReviewWithdrawTransaction: (callback) => {\r\n const confirm = () => {\r\n if (callback) callback(true);\r\n }\r\n const cancel = () => {\r\n if (callback) callback(false);\r\n }\r\n const modalChange = (YesNo) => {\r\n _this.setState({ ModalOpen: false });\r\n if (YesNo === \"Y\") confirm();\r\n else cancel();\r\n };\r\n\r\n var confirmationSummary = \"
\" +\r\n \"

Do you confirm your intention to proceed with the withdrawal of the validator?

\" +\r\n \"
\";\r\n\r\n var messageCnt = \"
\" +\r\n confirmationSummary +\r\n \"
\";\r\n\r\n _this.setState({\r\n ModalOpen: true,\r\n ModalSuccess: confirm,\r\n ModalCancel: cancel,\r\n OnModalReturn: modalChange,\r\n ModalHeader: false,\r\n ModalColor: \"success\",\r\n ModalTitle: 'Withdrawal Confirmation',\r\n ModalMsg:
\r\n });\r\n },\r\n\r\n Back: (event) => {\r\n props.history.push('/stakeOption');\r\n },\r\n\r\n handleSubmit: (event) => {\r\n // alert('A name was submitted: ' + this.state.value);\r\n event.preventDefault();\r\n }\r\n }), [_state, myState, walletFtxAmount]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n const { mstId } = { ...props.match.params };\r\n if (!didMount && (!(Eth2Wallet || {}).AuthCol || true)) {\r\n setDidMount(true);\r\n // must use the dispatch form for the redux binding\r\n const from = walletAddress;\r\n dispatch(Eth2WalletReduxObj.SetScreenCriteria('', { Eth1WithdrawalAddr10: from, }, 0));\r\n dispatch(Eth2WalletReduxObj.LoadPage('MstRecord', { mstId: mstId || '!', DtlBlob: 'C', MstBlob: 'C' }));\r\n\r\n store.refresh();\r\n }\r\n }, [didMount, dispatch, Eth2Wallet, props, _this, ethPrice, walletAddress, chainId, store]);\r\n\r\n // ComponentDidUpdate() equivalent\r\n useEffect(() => {\r\n var now = Date.now()\r\n if (transactionState.type === \"confirmed\" && (now - (_lastSync || 0) > 5000)) {\r\n log.debug('re-sync');\r\n //lastSync = now;\r\n setLastSync(now);\r\n // empty out data input if successful\r\n _this.setState({\r\n validatorStakingvalue: 0,\r\n ethStakingvalue: 0,\r\n ethStakingInTransit: _this.state.ethStakingvalue,\r\n });\r\n }\r\n }, [transactionState, _lastSync, setLastSync, _this, walletAddress, chainId]);\r\n\r\n // body of the render()\r\n const toDateString = (d) => { const x = new Date(d.toString()); return x.toLocaleString('default', { year: 'numeric' }) + '-' + x.toLocaleString('default', { month: 'short' }) + '-' + x.toLocaleString('default', { day: 'numeric' }); };\r\n const getVLink = (v) => (chainId == '5') ? 'https://goerli.beaconcha.in/validator/' + v : 'https://beaconcha.in/validator/' + v;\r\n const toDurationStr = (d) => {\r\n const diff = Math.abs(new Date().valueOf() - new Date(d.toString()).valueOf());\r\n const days = diff / (24 * 60 * 60 * 1000);\r\n const hours = (days % 1) * 24;\r\n //const minutes = (hours % 1) * 60;\r\n //const secs = (minutes % 1) * 60;\r\n return Math.floor(days) + ' days, ' + Math.floor(hours) + ' hours';\r\n };\r\n\r\n const currDtlList = ((Eth2Wallet || {}).DtlList || {}).data || [];\r\n const stakedStatus = ['1', '2', '3']; // DEPOSITED, PENDING, ACTIVE\r\n const ValidatorList = currDtlList.filter(x => stakedStatus.includes(x.ValidatorStatusCd5)).map(a => ({ value: a.PubKey5, label: 'Validator (' + shortenAddress(\"0x\" + a.PubKey5) + ') - ' + a.ValidatorStatusCd5Text }));\r\n const currValidator = currDtlList.filter(x => x.PubKey5 == _this.state.validatorValue) || [];\r\n const maxmiumnWaitTime = (new Date().valueOf()) - 48 * 60 * 60 * 1000; //active validator can be withdrawn after 48 hours\r\n const withdrawalableValidator = (currValidator.length > 0 && currValidator[0].ValidatorStatusCd5 === '3' && currValidator[0].ActivationUtc5 != '' && (new Date(currValidator[0].ActivationUtc5).valueOf() <= maxmiumnWaitTime)) ? true : false;\r\n\r\n log.debug(\"currValidator\", currValidator, withdrawalableValidator, currDtlList);\r\n\r\n const loader = (\r\n
\r\n
\r\n
Exiting Validator...Please wait.
\r\n

Please don't refresh or leave the screen.

\r\n
\r\n );\r\n\r\n if (spinnerStatus) {\r\n return (\r\n
{loader}
\r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n

Withdrawal address

\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n ['e', 'E', '+', '-'].includes(e.key) && e.preventDefault()}\r\n onWheel={(e) => e.target.blur()}\r\n />\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n

Withdrawal Key

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

Staked.Finance is a non-custodial service. That means you are the owner of your validator(s). Make sure no one else knows this information.

\r\n
\r\n \r\n \r\n 0 ? false : true}\r\n onClick={() => { _this.ReviewTransaction(currDtlList) }}>Reveal 24 word mnemonic\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n

Manage Your Validator(s)

\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n {/* */}\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {currValidator.length > 0 &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {currValidator.map((item, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n {/*
*/}\r\n \r\n
StatusAddressCreated OnValidator IndexUptimeBeaconcha.in
\r\n {item.ValidatorStatusCd5Text != '' ? item.ValidatorStatusCd5Text : '—'}
\r\n
\r\n {shortenAddress(\"0x\" + item.PubKey5)}
\r\n
\r\n {toDateString(item.CreatedOnUtc5)}
\r\n
\r\n {/* {'m/12381/3600/' + item.Idx5 + '/0/0'}
*/}\r\n {item.ValidatorIndex5 ? item.ValidatorIndex5 : \"N/A\"}
\r\n
\r\n {(item.ValidatorStatusCd5 != '6' && item.ActivationUtc5 != '') ? toDurationStr(item.ActivationUtc5) : '—'}
\r\n
\r\n {(item.ValidatorIndex5) ? Link : \"N/A\"}
\r\n
\r\n }\r\n {\r\n currDtlList.length == 0 &&\r\n

No validators, please stake ETH.

\r\n }\r\n\r\n {_this.state.validatorValue != '' && !withdrawalableValidator &&\r\n
\r\n \r\n The current validator is not ready for withdrawal yet.\r\n \r\n
\r\n }\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n { _this.exitValidator() }}>\r\n onClick={() => { _this.ReviewWithdrawTransaction(exitValidator) }}>\r\n {!_this.state.disableButton && Exit Validator}\r\n {_this.state.disableButton && Processing}\r\n \r\n \r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRouter(ManageValidator);\r\n","import { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\nimport log from '../helpers/logger';\r\n\r\n\r\nexport function Create(amount, accessScope) {\r\n return fetchData(baseUrl + '/PaymentWs.asmx/Create'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n amount: amount,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}","\r\nimport { getAsyncTypes } from '../helpers/actionType'\r\nimport * as StakePaymentService from '../services/StakePaymentService'\r\nimport { RintagiScreenRedux, initialRintagiScreenReduxState } from './_ScreenReducer'\r\nclass StakePaymentRedux extends RintagiScreenRedux {\r\n allowTmpDtl = false;\r\n constructor() {\r\n super();\r\n this.ActionApiNameMapper = {\r\n 'GET_SEARCH_LIST': 'GetStakePayment3List',\r\n 'GET_MST': 'GetStakePayment3ById',\r\n 'GET_DTL_LIST': 'GetStakePayment3DtlById',\r\n }\r\n this.ScreenDdlDef = [\r\n { columnName: 'PmtTypeCd4', payloadDdlName: 'PmtTypeCd4List', keyName: 'PmtTypeCd4', labelName: 'PmtTypeCd4Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetPmtTypeCd4List', actionTypeName: 'GET_DDL_PmtTypeCd4' },\r\n { columnName: 'UsrId4', payloadDdlName: 'UsrId4List', keyName: 'UsrId4', labelName: 'UsrId4Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetUsrId4List', actionTypeName: 'GET_DDL_UsrId4' },\r\n { columnName: 'StakeWalletAddrId4', payloadDdlName: 'StakeWalletAddrId4List', keyName: 'StakeWalletAddrId4', labelName: 'StakeWalletAddrId4Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetStakeWalletAddrId4List', actionTypeName: 'GET_DDL_StakeWalletAddrId4' },\r\n ]\r\n this.ScreenOnDemandDef = [\r\n\r\n ]\r\n this.ScreenDocumentDef = [\r\n\r\n ]\r\n this.ScreenCriDdlDef = [\r\n\r\n ]\r\n this.SearchActions = {\r\n ...[...this.ScreenDdlDef].reduce((a, v) => { a['Search' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenCriDdlDef].reduce((a, v) => { a['SearchCri' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type !== 'DocList' && f.type !== 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetColumnOnDemandAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetRefColumnOnDemandAction(v); return a; }, {}),\r\n ...this.MakePullUpOnDemandAction([...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['GetRef' + v.refColumnName] = { dependents: [...((a['GetRef' + v.refColumnName] || {}).dependents || []), v] }; return a; }, {})),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'DocList').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetDocumentListAction(v); return a; }, {}),\r\n }\r\n this.OnDemandActions = {\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Get').reduce((a, v) => { a['Get' + v.columnName + 'Content'] = this.MakeGetDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Add').reduce((a, v) => { a['Add' + v.columnName + 'Content'] = this.MakeAddDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Del').reduce((a, v) => { a['Del' + v.columnName + 'Content'] = this.MakeDelDocumentContentAction(v); return a; }, {}),\r\n }\r\n this.ScreenDdlSelectors = this.ScreenDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeDdlSelectors(v); return a; }, {})\r\n this.ScreenCriDdlSelectors = this.ScreenCriDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeCriDdlSelectors(v); return a; }, {})\r\n this.actionReducers = this.MakeActionReducers();\r\n }\r\n GetScreenName() { return 'StakePayment' }\r\n GetMstKeyColumnName(isUnderlining = false) { return isUnderlining ? 'PmtId' : 'PmtId4'; }\r\n GetDtlKeyColumnName(isUnderlining = false) { return isUnderlining ? '' : ''; }\r\n GetPersistDtlName() { return this.GetScreenName() + '_Dtl'; }\r\n GetPersistMstName() { return this.GetScreenName() + '_Mst'; }\r\n GetWebService() { return StakePaymentService; }\r\n GetReducerActionTypePrefix() { return this.GetScreenName(); };\r\n GetActionType(actionTypeName) { return getAsyncTypes(this.GetReducerActionTypePrefix(), actionTypeName); }\r\n GetInitState() {\r\n return {\r\n ...initialRintagiScreenReduxState,\r\n Label: {\r\n ...initialRintagiScreenReduxState.Label,\r\n }\r\n }\r\n };\r\n\r\n GetDefaultDtl(state) {\r\n return (state || {}).NewDtl ||\r\n {\r\n\r\n }\r\n }\r\n ExpandMst(mst, state, copy) {\r\n return {\r\n ...mst,\r\n key: Date.now(),\r\n PmtId4: copy ? null : mst.PmtId4,\r\n }\r\n }\r\n ExpandDtl(dtlList, copy) {\r\n return dtlList;\r\n }\r\n\r\n SearchListToSelectList(state) {\r\n const searchList = ((state || {}).SearchList || {}).data || [];\r\n return searchList\r\n .map((v, i) => {\r\n return {\r\n key: v.key || null,\r\n value: v.labelL || v.label || ' ',\r\n label: v.labelL || v.label || ' ',\r\n labelR: v.labelR || ' ',\r\n detailR: v.detailR || ' ',\r\n detail: v.detail || ' ',\r\n idx: i,\r\n isSelected: v.isSelected,\r\n }\r\n })\r\n }\r\n}\r\n\r\n/* ReactRule: Redux Custom Function */\r\n\r\n/* ReactRule End: Redux Custom Function */\r\n\r\n/* helper functions */\r\n\r\nexport function ShowMstFilterApplied(state) {\r\n return !state\r\n || !state.ScreenCriteria\r\n\r\n || state.ScreenCriteria.SearchStr;\r\n}\r\n\r\nexport default new StakePaymentRedux()\r\n","import React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\nimport ReactDOM from 'react-dom';\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Container } from \"theme-ui\";\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar, Table } from 'reactstrap';\r\nimport { Create } from '../services/paymentService';\r\nimport StakePaymentReduxObj, { ShowMstFilterApplied } from '../redux/StakePayment';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport log from '../helpers/logger';\r\nimport { loadStripe } from '@stripe/stripe-js';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport {\r\n PaymentElement,\r\n Elements,\r\n useStripe,\r\n useElements,\r\n} from '@stripe/react-stripe-js';\r\nimport { getRintagiConfig } from '../helpers/config';\r\n\r\n\r\nconst CheckoutForm = (props) => {\r\n // const CheckoutForm = () => {\r\n const stripe = useStripe();\r\n const elements = useElements();\r\n const history = useHistory();\r\n\r\n const [errorMessage, setErrorMessage] = useState(null);\r\n\r\n const [spinnerStatus, setSpinnerStatus] = useState(true);\r\n\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n showCreditPaymentTopError: false,\r\n paymentDetailErrMsg: '',\r\n hidePaymentBtn: false,\r\n disableButton: false,\r\n });\r\n\r\n const [didMount, setDidMount] = useState(false);\r\n\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, StakePayment } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n StakePayment: reduxState.StakePayment,\r\n };\r\n });\r\n\r\n const [_state, setState] = useState(0);\r\n\r\n const handleSubmit = async (event) => {\r\n event.preventDefault();\r\n\r\n if (elements == null) {\r\n return;\r\n }\r\n\r\n const location = window.location;\r\n const origin = location.origin;\r\n\r\n // Trigger form validation and wallet collection\r\n const { error: submitError } = await elements.submit();\r\n if (submitError) {\r\n // Show error to your customer\r\n // setErrorMessage(submitError.message);\r\n //no need to show top bar message is it's form validation\r\n setState({\r\n showCreditPaymentTopError: false\r\n });\r\n return;\r\n }\r\n\r\n setState({\r\n disableButton: true\r\n });\r\n\r\n // Create the PaymentIntent and obtain clientSecret from your server endpoint\r\n //1000.00 => 100000\r\n var amount = (props.paymentAmount || {}).amount * 100 || 0;\r\n var usdAmount = amount * (props.paymentAmount || {}).rate || 0;\r\n var amountAfterDiscount = usdAmount * (props.paymentAmount || {}).discountRate || 0;\r\n\r\n var clientSecret = '';\r\n var res = null;\r\n\r\n try {\r\n res = await Create(amountAfterDiscount);\r\n clientSecret = res.data.clientSecret;\r\n }\r\n catch (error) {\r\n log.debug(error);\r\n }\r\n\r\n if (clientSecret == '') {\r\n setState({\r\n showCreditPaymentTopError: true,\r\n paymentDetailErrMsg: null,\r\n disableButton: false,\r\n });\r\n\r\n return;\r\n }\r\n\r\n const { error } = await stripe.confirmPayment({\r\n //`Elements` instance that was used to create the Payment Element\r\n elements,\r\n clientSecret,\r\n confirmParams: {\r\n return_url: origin + '/#/PaymentConfirm',\r\n },\r\n\r\n redirect: 'if_required'\r\n });\r\n\r\n if (error) {\r\n // This point will only be reached if there is an immediate error when\r\n // confirming the payment. Show error to your customer (for example, payment\r\n // details incomplete)\r\n // setErrorMessage(error.message);\r\n setState({\r\n showCreditPaymentTopError: true,\r\n paymentDetailErrMsg: error.message,\r\n disableButton: false,\r\n });\r\n\r\n } else {\r\n // Your customer will be redirected to your `return_url`. For some payment\r\n // methods like iDEAL, your customer will be redirected to an intermediate\r\n // site first to authorize the payment, then redirected to the `return_url`.\r\n dispatch(\r\n StakePaymentReduxObj.SavePage(\r\n StakePayment,\r\n {\r\n PmtId4: '',\r\n PmtTypeCd4: 'C',\r\n PmtAmt4: amountAfterDiscount / 100,\r\n CreditAmt4: amount / 100,\r\n PmtStatusCd4: 'S',\r\n PaidOn4: '',\r\n UsrId4: ((auth || {}).user || {}).UsrId || '',\r\n StakeWalletAddrId4: '', // populated server-sdie\r\n StripeRef4: '',\r\n stripeId: res.data.id\r\n },\r\n [],\r\n {\r\n persist: true,\r\n }\r\n )\r\n )\r\n .then(result => {\r\n log.debug('submit done');\r\n setState({\r\n showCreditPaymentTopError: false,\r\n disableButton: false,\r\n });\r\n history.push('/PaymentConfirm');\r\n })\r\n .catch(error => {\r\n setState({\r\n showCreditPaymentTopError: false,\r\n disableButton: false,\r\n });\r\n log.debug('submit payment error', error)\r\n })\r\n .finally(\r\n () => {\r\n }\r\n );\r\n\r\n }\r\n };\r\n\r\n const handleError = async (event) => {\r\n log.debug(\"Payment Element Error:\", event.error)\r\n setState({\r\n showCreditPaymentTopError: true,\r\n paymentDetailErrMsg: null,\r\n hidePaymentBtn: true,\r\n disableButton: false,\r\n });\r\n return;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n
Total Payment Amount: {((props.paymentAmount || {}).amount || 0) * ((props.paymentAmount || {}).rate || 0) * ((props.paymentAmount || {}).discountRate || 0)} USD
\r\n {_state.showCreditPaymentTopError &&
Credit card payment is temporarily unavailable. Please use an alternative payment method (ETH or FTX). {_state.paymentDetailErrMsg}
}\r\n \r\n {!_state.hidePaymentBtn &&
Please note that all top-ups are non-refundable prepayments.
}\r\n \r\n
\r\n {/* Show error message to your customers */}\r\n {errorMessage &&
{errorMessage}
}\r\n {!_state.hidePaymentBtn &&\r\n \r\n \r\n \r\n \r\n \r\n }\r\n
\r\n );\r\n};\r\n\r\nconst runtimeConfig = getRintagiConfig() || {};\r\nconst stripePromise = loadStripe(runtimeConfig.stripeKey);\r\n\r\nconst options = {\r\n mode: 'payment',\r\n amount: 50,\r\n currency: 'usd',\r\n // Fully customizable with appearance API.\r\n appearance: {\r\n /*...*/\r\n },\r\n};\r\n\r\nconst StripeCheckout = (amount) => (\r\n \r\n \r\n \r\n);\r\n\r\n\r\nexport default withRouter(StripeCheckout);","\r\nimport { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\n\r\nlet activeScope = {};\r\n\r\nexport function setAccessScope(scope) {\r\n activeScope = {\r\n ...activeScope,\r\n ...scope,\r\n }\r\n}\r\n\r\nexport function GetAuthCol(accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetAuthCol'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetAuthRow(accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetAuthRow'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n\r\n}\r\nexport function GetScreenLabel(accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetScreenLabel'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope || getAccessScope())\r\n }\r\n )\r\n\r\n}\r\n\r\nexport function GetLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetSystemLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetSystemLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetScreenButtonHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetScreenButtonHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetScreenHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenCriteria(accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewMst(accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetNewMst'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewDtl(accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetNewDtl'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenFilter(accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetScreenFilter'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetSearchList(searchStr, topN, filterId, desiredScreenCriteria, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetSearchList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n desiredScreenCriteria: desiredScreenCriteria || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetStakeStmt5List(searchStr, topN, filterId, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetStakeStmt5List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n //topN: topN || 0,\r\n topN: 50,\r\n filterId: ('' + (filterId || 0)),\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetStakeStmt5ById(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetStakeStmt5ById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetMstById = GetStakeStmt5ById;\r\nexport function GetStakeStmt5DtlById(keyId, filterId, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetStakeStmt5DtlById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n filterId: filterId || 0,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetDtlById = GetStakeStmt5DtlById;\r\nexport function LoadInitPage(options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/LoadInitPage'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SaveData(mst, dtl, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst || {},\r\n dtl: dtl || [],\r\n options: options || {}\r\n });\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/SaveData'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function DelMst(mst, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst,\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/DelMst'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SetScreenCriteria(criteriaValues, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/SetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n criteriaValues: criteriaValues\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetRefColumnContent(mstId, dtlId, refKeyId, isMaster, refScreenColumnName, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetRefColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n refKeyId: refKeyId || null,\r\n refScreenColumnName: refScreenColumnName || null,\r\n isMaster: isMaster || false,\r\n options: options || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetColumnContent(mstId, dtlId, columnName, isMaster, screenColumnName, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || '',\r\n dtlId: dtlId || '',\r\n screenColumnName: screenColumnName,\r\n columnName: columnName,\r\n isMaster: isMaster || false,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetEmbeddedDoc(mstId, dtlId, isMaster, screenColumnName, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || '',\r\n dtlId: dtlId || '',\r\n isMaster: isMaster || false,\r\n columnName: screenColumnName || '',\r\n screenColumnName: screenColumnName || '',\r\n });\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetColumnContent'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function SaveEmbeddedImage(mstId, dtlId, isMaster, screenColumnName, docJson, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mstId: mstId || '',\r\n dtlId: dtlId || '',\r\n isMaster: isMaster || false,\r\n screenColumnName: screenColumnName || '',\r\n docJson: docJson || '',\r\n options: options || {},\r\n });\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/AddDocColumnContent'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function SaveEmbeddedDoc(...args) { return SaveEmbeddedImage(...args) }\r\n\r\n\r\nexport function GetDocZipDownload(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetDocZipDownload'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || null,\r\n options: options ||{},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/*screen criteria dll and screen dropdownlist/autocomplete*/\r\n\r\nexport function GetScreenCriStmtTypeCd10List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetScreenCriteriaDdlList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n screenCriId: 1,\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetStmtTypeCd8List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetStmtTypeCd8List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetUsrId8List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetUsrId8List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule: Service Custom Function */\r\nexport function GetDownloadLink(keyId, accessScope) {\r\n return fetchData(baseUrl + '/StakeStmtWs.asmx/GetDownloadLink'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || null,\r\n //options: options ||{},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule End: Service Custom Function */\r\n","import { Container } from \"theme-ui\";\r\n\r\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { logout, login } from '../redux/Auth';\r\n\r\n// liquity functionalities(smart contract related)\r\nimport {\r\n LiquityStoreState,\r\n Decimal,\r\n Cache,\r\n} from \"@liquity/lib-base\";\r\nimport { EthersTransactionCancelledError } from \"@liquity/lib-ethers\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\nimport { ErrorCode } from \"@ethersproject/logger\";\r\nimport { useTransactionFunction } from \"../components/Transaction\";\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\n\r\nimport {\r\n selectForCacheChangeValidation,\r\n validateCacheChange\r\n} from \"../components/Cache/validation/validateCacheChange\";\r\nimport { CacheChange } from \"@liquity/lib-base\";\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar, Table } from 'reactstrap';\r\nimport ModalDialog from '../components/custom/ModalDialog';\r\nimport log from '../helpers/logger';\r\nimport { useMyTransactionState } from \"../components/Transaction\";\r\nimport StripeCheckout from \"./StripeCheckout\";\r\nimport { GetBalance } from '../services/StakeAcctBalanceService';\r\nimport { GetFtxPayment, GetEthPayment, GetFtxRate, GetRates } from '../services/StakePaymentService';\r\nimport { GetDownloadLink } from '../services/StakeStmtService';\r\nimport StakePaymentReduxObj, { ShowMstFilterApplied } from '../redux/StakePayment';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport Paging from '../components/custom/Paging';\r\nimport { Spinner } from \"theme-ui\";\r\nimport * as XLSX from 'xlsx';\r\n\r\nlet InitPageNumber = 1;\r\nlet creditValue = \"\";\r\n\r\nconst selector = (state) => {\r\n const { cache, fees, price, accountBalance, stabilityDeposit, total } = state;\r\n return {\r\n cache,\r\n fees,\r\n price,\r\n accountBalance,\r\n stabilityDeposit,\r\n total,\r\n validationContext: selectForCacheChangeValidation(state)\r\n };\r\n};\r\n\r\nconst TRANSACTION_ID = \"ftx-payment\";\r\nconst GAS_ROOM_ETH = Decimal.from(0.1);\r\nconst FtxDiscount = Decimal.from(0.8); // 20% off\r\nconst PaymentDiscount = Decimal.from(0.9); //10% off for Credit card or ETH payment if paying more than 365 days\r\n\r\n\r\nconst Payment = (props) => {\r\n const {\r\n cache: previousCache\r\n , fees\r\n , price: ethPrice\r\n , accountBalance: walletEthAmount\r\n , stabilityDeposit\r\n , total: systemTotal\r\n , rewardEthAmt\r\n , validationContext } = useLiquitySelector(selector);\r\n const {\r\n account,\r\n liquity: { send: liquitySend, populate: liquityTry, store, connection }\r\n } = useLiquity();\r\n const ftxTokenAddress = ((connection || {}).addresses || {}).ftxToken;\r\n const fintruxAddress = ((connection || {}).addresses || {}).stakingWallet;\r\n const walletAddress = (connection || {}).userAddress;\r\n\r\n const transactionState = useMyTransactionState(TRANSACTION_ID);\r\n const history = useHistory();\r\n\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n balances: [],\r\n ftxRate: undefined,\r\n ethRate: undefined,\r\n cacheOpened: !!previousCache,\r\n ethStakingAmt: 0,\r\n ethStakingAmtError: undefined,\r\n ethMinStakingAmt: undefined,\r\n StakeToggleSelected: true,\r\n errorFlag: false,\r\n ToggleStripePaymentSec: false,\r\n paymentPageOfItems: [],\r\n showRateMsg: false,\r\n paymentAmountError: undefined,\r\n\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n });\r\n\r\n const [didMount, setDidMount] = useState(false);\r\n const [stakePaymentLoading, setStakePaymentLoading] = useState(true);\r\n const [loadedTime] = useState(Date.now())\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, global, StakePayment } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n global: reduxState.global,\r\n StakePayment: reduxState.StakePayment,\r\n };\r\n });\r\n\r\n // simulating class(this -> _this)\r\n const [_state, setState] = useState(0);\r\n\r\n const sendEth = async () => {\r\n const signer = connection.provider.getSigner();\r\n\r\n const tx = await signer.sendTransaction({\r\n to: fintruxAddress,\r\n value: Decimal.from(myState.creditValue * myState.ethRate * ((myState.creditValue >= validators * 365 && validators > 0) ? PaymentDiscount : Decimal.from(1))).hex\r\n });\r\n\r\n return {\r\n rawSentTransaction: tx,\r\n waitForReceipt: async () => {\r\n return tx.wait()\r\n .then(receipt => {\r\n return {\r\n rawReceipt: receipt,\r\n status: (receipt.status == 1) ? 'succeeded' : 'failed',\r\n };\r\n }\r\n ).catch(error => {\r\n // duplicating liquity handling\r\n const TRANSACTION_FAILED = \"transaction failed\";\r\n const TRANSACTION_CANCELLED = \"cancelled\";\r\n const TRANSACTION_REPLACED = \"replaced\";\r\n const TRANSACTION_REPRICED = \"repriced\";\r\n const transactionReplacementReasons = [\r\n TRANSACTION_CANCELLED,\r\n TRANSACTION_REPLACED,\r\n TRANSACTION_REPRICED\r\n ];\r\n const { code, reason } = error;\r\n if (code === ErrorCode.TRANSACTION_REPLACED\r\n &&\r\n transactionReplacementReasons.includes(reason)) {\r\n if (error.cancelled) {\r\n throw new EthersTransactionCancelledError(error);\r\n } else {\r\n return {\r\n rawReceipt: error.receipt,\r\n status: (error.receipt || {}).status || 'failed',\r\n }\r\n }\r\n }\r\n else if (code === ErrorCode.CALL_EXCEPTION &&\r\n reason === TRANSACTION_FAILED) {\r\n return {\r\n rawReceipt: error.receipt,\r\n status: (error.receipt | {}).status || 'failed',\r\n }\r\n }\r\n throw error;\r\n });\r\n }\r\n }\r\n };\r\n\r\n const waitForConfirmation = async (tx) => {\r\n return await tx.waitForReceipt();\r\n }\r\n\r\n const submitTransaction = (confirm) => {\r\n if (confirm) {\r\n const sendTx = transferFTXTransaction;\r\n GetRates().then(data => {\r\n console.log('get rates', data.data);\r\n if (data.data.FTX == myState.ftxRate) {\r\n return Promise.resolve(data.data.FTX);\r\n }\r\n else {\r\n _this.setState({\r\n showRateMsg: true\r\n });\r\n return Promise.reject({ msg: 'rate changed', rate: data.data.FTX });\r\n }\r\n }).then(result => {\r\n sendTx().then((tx) => { return waitForConfirmation(tx) }).then((tx) => {\r\n log.debug('ftx payment tx', tx);\r\n GetFtxPayment(tx.rawReceipt.transactionHash, ftxTokenAddress, walletAddress, fintruxAddress, myState.creditValue * myState.ftxRate * FtxDiscount * ((myState.creditValue >= validators * 365 && validators > 0) ? PaymentDiscount : Decimal.from(1)), myState.creditValue)\r\n .then(\r\n data => {\r\n log.debug('GetFtxPayment', data);\r\n history.push('/PaymentConfirm');\r\n })\r\n .catch(error => { log.debug('GetFtxPayment error', error) });\r\n }).catch(e => {\r\n log.debug('submitTransaction error', e);\r\n });\r\n }).catch(e => {\r\n // TODO: handle rate change in UX\r\n console.log(e);\r\n console.log('error')\r\n });\r\n }\r\n }\r\n\r\n const submitEthTransaction = (confirm) => {\r\n if (confirm) {\r\n const sendTx = transferETHTransaction;\r\n // Modify the following section\r\n GetRates().then(data => {\r\n console.log('get rates', data.data);\r\n if (data.data.ETH == myState.ethRate) {\r\n return Promise.resolve(data.data.ETH);\r\n }\r\n else {\r\n _this.setState({\r\n showRateMsg: true\r\n });\r\n return Promise.reject({ msg: 'rate changed', rate: data.data.ETH });\r\n }\r\n }).then(result => {\r\n sendTx().then((tx) => { return waitForConfirmation(tx) }).then((tx) => {\r\n log.debug('ethpayment tx', tx);\r\n //tx.rawSentTransaction.hash,\r\n GetEthPayment(tx.rawReceipt.transactionHash, walletAddress, fintruxAddress, myState.creditValue * myState.ethRate * ((myState.creditValue >= validators * 365 && validators > 0) ? PaymentDiscount : Decimal.from(1)), myState.creditValue)\r\n .then(\r\n data => {\r\n log.debug('GetEthPayment', data);\r\n history.push('/PaymentConfirm');\r\n })\r\n .catch(error => { log.debug('GetEthPayment error', error) });\r\n }).catch(e => {\r\n log.debug('submitEthTransaction error', e);\r\n });\r\n }).catch(e => {\r\n // TODO: handle rate change in UX\r\n console.log(e);\r\n console.log('error')\r\n });\r\n }\r\n }\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n setMyState({ ...myState, ...newState });\r\n setState(_state + 1);\r\n },\r\n\r\n topUpCredits: async (event) => {\r\n // props.history.push('/stripeCheckout');\r\n _this.setState({\r\n ToggleStripePaymentSec: !_this.state.ToggleStripePaymentSec,\r\n });\r\n },\r\n\r\n handleSubmit: (event) => {\r\n // alert('A name was submitted: ' + this.state.value);\r\n event.preventDefault();\r\n },\r\n\r\n handleDownload: (key) => {\r\n\r\n GetDownloadLink(key)\r\n .then(data => {\r\n log.debug(\"download result\", data);\r\n window.open(data.data);\r\n })\r\n .catch(error => {\r\n log.debug(\"download result\", error);\r\n });\r\n\r\n },\r\n\r\n handleValidatorChange: (event) => {\r\n //limit the USD input box to be be max 2 decimal places\r\n var t = event.target.value;\r\n event.target.value = (t.indexOf(\".\") >= 0) ? (t.substr(0, t.indexOf(\".\")) + t.substr(t.indexOf(\".\"), 3)) : t;\r\n\r\n creditValue = event.target.value;\r\n\r\n var paymentAmountErrorMsg = \"\";\r\n var showStripePaymentSec = _this.state.ToggleStripePaymentSec;\r\n if (creditValue < 1) {\r\n paymentAmountErrorMsg = \"The minimum top-up amount is 1 Credit.\";\r\n showStripePaymentSec = false;\r\n } else {\r\n showStripePaymentSec = _this.state.ToggleStripePaymentSec;\r\n }\r\n\r\n _this.setState({\r\n creditValue: event.target.value,\r\n paymentAmountError: paymentAmountErrorMsg,\r\n ToggleStripePaymentSec: showStripePaymentSec,\r\n });\r\n },\r\n\r\n onChangePage(pageOfItems, page) {\r\n // update state with new page of items\r\n InitPageNumber = page;\r\n _this.setState({ paymentPageOfItems: pageOfItems });\r\n },\r\n\r\n ReviewFtxTransaction: (callback) => {\r\n const confirm = () => {\r\n if (callback) callback(true);\r\n }\r\n const cancel = () => {\r\n if (callback) callback(false);\r\n }\r\n const modalChange = (YesNo) => {\r\n _this.setState({ ModalOpen: false });\r\n if (YesNo === \"Y\") confirm();\r\n else cancel();\r\n };\r\n\r\n var confirmationSummary = \"
\" +\r\n \"
Top-Up Amount
\" +\r\n \"\" + _this.state.creditValue + \" Credit\" +\r\n \"
\" +\r\n \"
FTX Amount
\" +\r\n \"
\" + _this.state.creditValue * _this.state.ftxRate * FtxDiscount * ((_this.state.creditValue >= validators * 365 && validators > 0) ? PaymentDiscount : 1) + \" FTX (20% off\" + ((_this.state.creditValue >= validators * 365 && validators > 0) ? \") + (extra 10% off)
\" : \")
\") +\r\n \"
Payment Discount
\" +\r\n \"

By using the FTX as the payment method, you are qualified for 20% off.

\" +\r\n ((_this.state.creditValue >= validators * 365 && validators > 0) ? \"

By topping up more than 12 months of credits, you are qualified for an extra 10% discount.

\" : \"\") +\r\n \"
1 Credit = \" + _this.state.ftxRate + \" FTX i
\" +\r\n ((_this.state.showRateMsg) ? \"

Credit Rate is changed. Please refresh the page and top-up again.

\" : \"\") +\r\n \"

Please note that all top-ups are non-refundable prepayments.

\" +\r\n \"
\";\r\n\r\n var messageCnt = \"
\" +\r\n confirmationSummary +\r\n \"
\";\r\n\r\n _this.setState({\r\n ModalOpen: true,\r\n ModalSuccess: confirm,\r\n ModalCancel: cancel,\r\n OnModalReturn: modalChange,\r\n ModalHeader: false,\r\n ModalColor: \"success\",\r\n ModalTitle: 'Transaction Summary',\r\n ModalMsg:
\r\n });\r\n },\r\n\r\n ReviewEthTransaction: (callback) => {\r\n const confirm = () => {\r\n if (callback) callback(true);\r\n }\r\n const cancel = () => {\r\n if (callback) callback(false);\r\n }\r\n const modalChange = (YesNo) => {\r\n _this.setState({ ModalOpen: false });\r\n if (YesNo === \"Y\") confirm();\r\n else cancel();\r\n };\r\n\r\n var confirmationSummary = \"
\" +\r\n \"
Top-Up Amount
\" +\r\n \"\" + _this.state.creditValue + \" Credit\" +\r\n \"
\" +\r\n \"
ETH Amount
\" +\r\n \"
\" + _this.state.creditValue * _this.state.ethRate * ((_this.state.creditValue >= validators * 365 && validators > 0) ? PaymentDiscount : 1) + \" ETH \" +\r\n ((_this.state.creditValue >= validators * 365 && validators > 0) ? \" (10% Off)\" : \"\") + \"
\" +\r\n ((_this.state.creditValue >= validators * 365 && validators > 0) ? \"
Payment Discount

By topping up more than 12 months of credits, you are qualified for an extra 10% discount.

\" : \"\") +\r\n \"
1 Credit = \" + _this.state.ethRate + \" ETH i
\" +\r\n ((_this.state.showRateMsg) ? \"

Credit Rate is changed. Please refresh the page and top-up again.

\" : \"\") +\r\n \"

Please note that all top-ups are non-refundable prepayments.

\" +\r\n \"
\";\r\n\r\n var messageCnt = \"
\" +\r\n confirmationSummary +\r\n \"
\";\r\n\r\n _this.setState({\r\n ModalOpen: true,\r\n ModalSuccess: confirm,\r\n ModalCancel: cancel,\r\n OnModalReturn: modalChange,\r\n ModalHeader: false,\r\n ModalColor: \"success\",\r\n ModalTitle: 'Transaction Summary',\r\n ModalMsg:
\r\n });\r\n },\r\n\r\n exportToSpreadsheet: (event) => {\r\n // Modify the toDateString function to format as \"yyyy-mm-dd\"\r\n // const toDateString = (timestamp) => {\r\n // const date = new Date(timestamp);\r\n // const year = date.getFullYear();\r\n // const month = String(date.getMonth() + 1).padStart(2, '0'); // Ensure two digits for month\r\n // const day = String(date.getDate()).padStart(2, '0'); // Ensure two digits for day\r\n // return `${year}-${month}-${day}`; // Format as yyyy-mm-dd\r\n // };\r\n\r\n // Helper function to convert a JavaScript date to an Excel serial date\r\n function toExcelDate(timestamp) {\r\n const date = new Date(timestamp);\r\n return (date - new Date(1899, 11, 30)) / (24 * 60 * 60 * 1000);\r\n }\r\n\r\n // Function to get current date and format as \"yyyymmdd\"\r\n const getCurrentDateString = () => {\r\n const currentDate = new Date();\r\n const year = currentDate.getFullYear();\r\n const month = String(currentDate.getMonth() + 1).padStart(2, '0'); // Two digits for month\r\n const day = String(currentDate.getDate()).padStart(2, '0'); // Two digits for day\r\n return `${year}${month}${day}`; // Format as \"yyyymmdd\" without dashes for the file name\r\n };\r\n\r\n // Function to format the payment type based on labelR\r\n const getPaymentType = (labelR) => {\r\n if (labelR === \"T\") return \"FTX Payment\";\r\n if (labelR === \"C\") return \"Credit Card\";\r\n if (labelR === \"E\") return \"ETH Payment\";\r\n return \"Arbitrary\";\r\n };\r\n\r\n // Function to get the currency type based on labelR\r\n const getCurrency = (labelR) => {\r\n if (labelR === \"T\") return \"FTX\";\r\n if (labelR === \"C\") return \"USD\";\r\n if (labelR === \"E\") return \"ETH\";\r\n return \"USD\";\r\n };\r\n\r\n // Prepare data for the spreadsheet\r\n const data = paymentList.map(item => ({\r\n Type: getPaymentType(item.labelR), // Payment type based on labelR\r\n // Date: toDateString(item.detailR), // Date formatted in UTC\r\n Date: toExcelDate(item.detailR), // Convert to Excel serial date number\r\n Amount: parseFloat(toDecimalStr(item.detail, 4).replace(/,/g, '')), // Convert to number and remove commas\r\n Currency: `${getCurrency(item.labelR)}`, // Currency based on labelR\r\n }));\r\n\r\n // Map the data to worksheet format and ensure numbers are stored as numbers\r\n const wsData = data.map((item) => [\r\n { v: item.Type, t: \"s\" }, // String\r\n { v: item.Date, t: \"n\" }, // Excel serial date (number)\r\n { v: item.Amount, t: \"n\" }, // Numeric value with the correct precision\r\n { v: item.Currency, t: \"s\" }, // String\r\n ]);\r\n\r\n const XLSX = require('xlsx-js-style');\r\n\r\n // Create a worksheet with headers\r\n const ws = XLSX.utils.aoa_to_sheet([[\"Payment Type\", \"Date (yyyy-mm-dd)\", \"Amount\", \"Currency\"], ...wsData]);\r\n\r\n // Apply number format for 4 decimal places in the Amount column (third column)\r\n ws['!cols'] = [\r\n { width: 15 }, // Adjust the width of the Transaction column\r\n { width: 20, z: 'yyyy-mm-dd' }, // Adjust the width of the Date column\r\n { width: 15, z: '0.0000' }, // Apply 8 decimal format to the Amount column\r\n { width: 10 }, // Adjust the width of the Currency column\r\n ];\r\n\r\n // Apply right alignment to the \"Date\" and \"Amount\" headers\r\n ws['A1'].s = { font: { bold: true } };\r\n ws['B1'].s = { alignment: { horizontal: 'right' }, font: { bold: true } };\r\n ws['C1'].s = { alignment: { horizontal: 'right' }, font: { bold: true } }; \r\n ws['D1'].s = { font: { bold: true }, };\r\n\r\n // Apply the 4 decimal places format directly to the 'Amount' cells\r\n wsData.forEach((row, index) => {\r\n const dateCellAddress = XLSX.utils.encode_cell({ r: index + 1, c: 1 }); // Date is in the second column (zero-indexed)\r\n if (ws[dateCellAddress]) {\r\n ws[dateCellAddress].z = 'yyyy-mm-dd'; // Set the format for date\r\n }\r\n\r\n const cellAddress = XLSX.utils.encode_cell({ r: index + 1, c: 2 }); // Amount is in the third column (zero-indexed)\r\n if (ws[cellAddress]) {\r\n ws[cellAddress].z = '0.0000'; // Set the format for 8 decimal places\r\n }\r\n });\r\n\r\n // Create a new workbook and add the data\r\n const wb = XLSX.utils.book_new();\r\n XLSX.utils.book_append_sheet(wb, ws, 'Payment History');\r\n\r\n // Get the current date string and add it to the filename\r\n const fileName = \"LTD Payment History \" + getCurrentDateString() + \".xlsx\";\r\n // Export to XLSX file\r\n XLSX.writeFile(wb, fileName);\r\n }\r\n\r\n }), [_state, myState, props.history]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n const { mstId } = { ...props.match.params };\r\n\r\n if (!didMount && (!(StakePayment || {}).AuthCol || true)) {\r\n setDidMount(true);\r\n\r\n const getRate = GetRates().then(data => {\r\n console.log('get rates', data.data);\r\n return data.data;\r\n });\r\n\r\n const usrId = '';\r\n const getBalances = GetBalance(usrId, walletAddress)\r\n .then(data => {\r\n log.debug(\"balance result\", data);\r\n return (data.data || {}).Dtl || (data.data || {}).dtl || [];\r\n })\r\n .catch(error => {\r\n log.debug(\"balance result error\", error);\r\n return [];\r\n });\r\n\r\n const srvCalls = Promise.all([\r\n getRate,\r\n getBalances\r\n ]).then(values => {\r\n console.log('values', values);\r\n _this.setState({\r\n creditValue: creditValue,\r\n usdRate: values[0].USD,\r\n ftxRate: values[0].FTX,\r\n ethRate: values[0].ETH,\r\n // dailyValidatorCost: values[0].DailyValidatorCost,\r\n balances: values[1],\r\n });\r\n });\r\n\r\n // must use the dispatch form for the redux binding\r\n dispatch(StakePaymentReduxObj.LoadPage('MstRecord', { mstId: mstId || '!', topN: 200 }));\r\n _this.setState({ loading: false });\r\n store.refresh();\r\n }\r\n\r\n InitPageNumber = 1;\r\n\r\n }, [didMount, dispatch, props, _this, ethPrice, store, walletAddress, ftxTokenAddress, fintruxAddress, StakePayment]);\r\n\r\n // ComponentDidUpdate() equivalent\r\n useEffect(() => {\r\n // Anything in here is fired on component mount.\r\n InitPageNumber = 1;\r\n return () => {\r\n // Anything in here is fired on component unmount.\r\n InitPageNumber = 1;\r\n }\r\n }, [transactionState, _this]);\r\n\r\n const balances = (_this.state.balances || [])[0];\r\n\r\n const credits = (balances || {}).Credits || 0;\r\n const topups = (balances || {}).Topups || 0;\r\n const charges = (balances || {}).Charges || 0;\r\n const remaining = (balances || {}).Remaining || 0;\r\n const validators = (balances || {}).Validators || 0;\r\n\r\n const [transferFTXTransaction] = useTransactionFunction(\r\n TRANSACTION_ID,\r\n liquitySend.transferFTX.bind(liquitySend, myState.creditValue * myState.ftxRate * FtxDiscount * ((myState.creditValue >= validators * 365 && validators > 0) ? PaymentDiscount : Decimal.from(1)))\r\n );\r\n\r\n const [transferETHTransaction] = useTransactionFunction(\r\n TRANSACTION_ID,\r\n // Modify the following section\r\n sendEth\r\n );\r\n\r\n // body of the render()\r\n const toDateString = (d) => { const x = new Date(d.toString()); return x.toLocaleString('default', { year: 'numeric' }) + '-' + x.toLocaleString('default', { month: 'short' }) + '-' + x.toLocaleString('default', { day: 'numeric' }); };\r\n const toDecimalStr = (n, d) => n * 1 >= 0 ? Decimal.from(n).prettify(d || 2) : '-' + Decimal.from(n.substring(1)).prettify(d || 2);\r\n const displayRemaining = (r, v) => (r > 30) ? '~' + Math.round(r / 30) + ' months of credit for ' + v + ' validator(s)' : (r > 0) ? '~' + r + ' days of credit for ' + v + ' validators' : 'No credits remaining, topup to keep your validators alive';\r\n const toMonthStr = (d) => new Date(Number(Date.parse(d))).toLocaleString('default', { month: 'short', year: 'numeric' });\r\n const toUTCString = (d) => new Date(d.toString()).toUTCString();\r\n\r\n const paymentList = (((StakePayment || {}).SearchList || {}).data || []).sort((a, b) => b.detailR.localeCompare(a.detailR));\r\n\r\n if (_this.state.paymentPageOfItems && _this.state.paymentPageOfItems.length == 0 && paymentList.length > 0) {\r\n _this.setState({ paymentPageOfItems: paymentList.slice(0, 5) });\r\n }\r\n\r\n if (stakePaymentLoading && (StakePayment || {}).mstVersion > loadedTime) {\r\n setStakePaymentLoading(false);\r\n }\r\n\r\n const loadingData = stakePaymentLoading;\r\n\r\n const paymentPageOfItems = (_this.state.paymentPageOfItems || []);\r\n\r\n return (\r\n \r\n \r\n\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

Total Balance

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

0) ? 'color-green' : 'color-red'}>{toDecimalStr(credits)} CREDITS

{(validators == 0) ? \"No Validators\" : displayRemaining(remaining, validators)}

\r\n\r\n \r\n \r\n
\r\n \r\n \r\n
{toDecimalStr(topups)}
\r\n

This Month's Top-Ups

\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
{toDecimalStr(charges)}
\r\n

This Month's Accumulated Charges

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

Each staked validator will be charged {myState.usdRate} U.S. dollar(s) per day in USD/ETH/FTX; visit pricing for more details. Please be advised that this is a prepaid service. To ensure continued operation of your validators, kindly top up your account promptly. Existing validators past UTC 12:00 AM will be considered charged for the full day.

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

How much do you want to top up?

\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n ['e', 'E', '+', '-'].includes(e.key) && e.preventDefault()}\r\n onWheel={(e) => e.target.blur()}\r\n disabled={(validators <= 0 && credits >= 0)}\r\n />\r\n Credit\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n {_this.state.paymentAmountError}\r\n \r\n\r\n {(_this.state.showRateMsg) &&\r\n
\r\n

Credit Rate is changed. Please refresh the page and top-up again.

\r\n
\r\n }\r\n {/* If paying more than 12 months of credit for all validators, get extra 10% off */}\r\n {(validators > 0) &&\r\n
\r\n

Top-up 12 months or more ({validators * 365} credits), to qualify for an extra 10% discount.

\r\n
\r\n }\r\n\r\n {/* If there are no validators and the credits are not negative, show the message */}\r\n {(validators <= 0 && credits >= 0) &&\r\n
\r\n

No validators yet, please stake a validator first.

\r\n
\r\n }\r\n\r\n \r\n \r\n = 0))}\r\n onClick={() => { _this.ReviewFtxTransaction(submitTransaction) }}>Top-Up via FTX (20% Discount)\r\n {_this.state.ftxRate == 0 &&\r\n No FTX rate available, payment is disabled.\r\n }\r\n \r\n\r\n \r\n = 0))}\r\n onClick={() => { _this.ReviewEthTransaction(submitEthTransaction) }}>Top-Up via ETH\r\n {_this.state.ftxRate == 0 &&\r\n No ETH rate available, payment is disabled.\r\n }\r\n \r\n\r\n \r\n {/* test Stripe Payment URL */}\r\n = 0))}\r\n onClick={() => { _this.topUpCredits() }}>Top-Up via USD\r\n \r\n \r\n\r\n
\r\n

\r\n For a smoother top-up experience, we recommend using ETH or FTX.\r\n

\r\n
\r\n\r\n {_this.state.ToggleStripePaymentSec &&\r\n
\r\n = validators * 365 && validators > 0) ? PaymentDiscount : 1}>\r\n
\r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

Payment History

Account Statements
\r\n
\r\n \r\n
\r\n {(loadingData) && Loading...}\r\n {!loadingData && paymentList.length > 0 &&\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {paymentPageOfItems.map((item, i) => (\r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
Payment TypeDateAmount
\r\n {item.labelR == \"T\" ? \"FTX Payment\" : item.labelR == \"C\" ? \"Credit Card\" : item.labelR == \"E\" ? \"ETH Payment\" : \"Arbitrary\"}
\r\n
\r\n {toDateString(item.detailR)}
\r\n
\r\n {toDecimalStr(item.detail, 4)} {item.labelR == \"T\" ? \"FTX\" : item.labelR == \"C\" ? \"USD\" : item.labelR == \"E\" ? \"ETH\" : \"USD\"}
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n }\r\n {\r\n !loadingData && paymentList.length == 0 &&\r\n

No recent payment history.

\r\n }\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRouter(Payment);\r\n","\r\nimport { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\n\r\nlet activeScope = {};\r\n\r\nexport function setAccessScope(scope) {\r\n activeScope = {\r\n ...activeScope,\r\n ...scope,\r\n }\r\n}\r\n\r\nexport function GetAuthCol(accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetAuthCol'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetAuthRow(accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetAuthRow'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n\r\n}\r\nexport function GetScreenLabel(accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetScreenLabel'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope || getAccessScope())\r\n }\r\n )\r\n\r\n}\r\n\r\nexport function GetLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetSystemLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetSystemLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetScreenButtonHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetScreenButtonHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetScreenHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenCriteria(accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewMst(accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetNewMst'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewDtl(accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetNewDtl'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenFilter(accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetScreenFilter'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetSearchList(searchStr, topN, filterId, desiredScreenCriteria, accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetSearchList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n desiredScreenCriteria: desiredScreenCriteria || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetStakeAcctBalance4List(searchStr, topN, filterId, accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetStakeAcctBalance4List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetStakeAcctBalance4ById(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetStakeAcctBalance4ById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetMstById = GetStakeAcctBalance4ById;\r\nexport function GetStakeAcctBalance4DtlById(keyId, filterId, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetStakeAcctBalance4DtlById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n filterId: filterId || 0,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetDtlById = GetStakeAcctBalance4DtlById;\r\nexport function LoadInitPage(options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/LoadInitPage'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SaveData(mst, dtl, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst || {},\r\n dtl: dtl || [],\r\n options: options || {}\r\n });\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/SaveData'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function DelMst(mst, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst,\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/DelMst'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SetScreenCriteria(criteriaValues, accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/SetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n criteriaValues: criteriaValues\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetRefColumnContent(mstId, dtlId, refKeyId, isMaster, refScreenColumnName, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetRefColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n refKeyId: refKeyId || null,\r\n refScreenColumnName: refScreenColumnName || null,\r\n isMaster: isMaster || false,\r\n options: options || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/*screen criteria dll and screen dropdownlist/autocomplete*/\r\n\r\nexport function GetStakeWalletAddrId5List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetStakeWalletAddrId5List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetUsrId5List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetUsrId5List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule: Service Custom Function */\r\nexport function GetBalance(usrId, walletAddress, accessScope={}) {\r\n return fetchData(baseUrl + '/StakeAcctBalanceWs.asmx/GetBalance'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n usrId: usrId || '',\r\n walletAddress: walletAddress || '',\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule End: Service Custom Function */\r\n","\r\nimport { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\n\r\nlet activeScope = {};\r\n\r\nexport function setAccessScope(scope) {\r\n activeScope = {\r\n ...activeScope,\r\n ...scope,\r\n }\r\n}\r\n\r\nexport function GetAuthCol(accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetAuthCol'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetAuthRow(accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetAuthRow'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n\r\n}\r\nexport function GetScreenLabel(accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetScreenLabel'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope || getAccessScope())\r\n }\r\n )\r\n\r\n}\r\n\r\nexport function GetLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetSystemLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetSystemLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetScreenButtonHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetScreenButtonHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetScreenHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenCriteria(accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewMst(accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetNewMst'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewDtl(accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetNewDtl'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenFilter(accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetScreenFilter'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetSearchList(searchStr, topN, filterId, desiredScreenCriteria, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetSearchList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n desiredScreenCriteria: desiredScreenCriteria || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetStakeWalletAddress1List(searchStr, topN, filterId, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetStakeWalletAddress1List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetStakeWalletAddress1ById(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetStakeWalletAddress1ById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetMstById = GetStakeWalletAddress1ById;\r\nexport function GetStakeWalletAddress1DtlById(keyId, filterId, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetStakeWalletAddress1DtlById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n filterId: filterId || 0,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetDtlById = GetStakeWalletAddress1DtlById;\r\nexport function LoadInitPage(options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/LoadInitPage'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SaveData(mst, dtl, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst || {},\r\n dtl: dtl || [],\r\n options: options || {}\r\n });\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/SaveData'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function DelMst(mst, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst,\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/DelMst'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SetScreenCriteria(criteriaValues, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/SetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n criteriaValues: criteriaValues\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetRefColumnContent(mstId, dtlId, refKeyId, isMaster, refScreenColumnName, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetRefColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n refKeyId: refKeyId || null,\r\n refScreenColumnName: refScreenColumnName || null,\r\n isMaster: isMaster || false,\r\n options: options || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/*screen criteria dll and screen dropdownlist/autocomplete*/\r\n\r\nexport function GetStakeWalletStatusCd2List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetStakeWalletStatusCd2List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetInputBy2List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetInputBy2List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetModifiedBy2List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeWalletAddressWs.asmx/GetModifiedBy2List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule: Service Custom Function */\r\n\r\n\r\n/* ReactRule End: Service Custom Function */\r\n","\r\nimport { getAsyncTypes } from '../helpers/actionType'\r\nimport * as StakeWalletAddressService from '../services/StakeWalletAddressService'\r\nimport { RintagiScreenRedux, initialRintagiScreenReduxState } from './_ScreenReducer'\r\nclass StakeWalletAddressRedux extends RintagiScreenRedux {\r\n allowTmpDtl = false;\r\n constructor() {\r\n super();\r\n this.ActionApiNameMapper = {\r\n 'GET_SEARCH_LIST': 'GetStakeWalletAddress1List',\r\n 'GET_MST': 'GetStakeWalletAddress1ById',\r\n 'GET_DTL_LIST': 'GetStakeWalletAddress1DtlById',\r\n }\r\n this.ScreenDdlDef = [\r\n { columnName: 'StakeWalletStatusCd2', payloadDdlName: 'StakeWalletStatusCd2List', keyName: 'StakeWalletStatusCd2', labelName: 'StakeWalletStatusCd2Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetStakeWalletStatusCd2List', actionTypeName: 'GET_DDL_StakeWalletStatusCd2' },\r\n { columnName: 'InputBy2', payloadDdlName: 'InputBy2List', keyName: 'InputBy2', labelName: 'InputBy2Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetInputBy2List', actionTypeName: 'GET_DDL_InputBy2' },\r\n { columnName: 'ModifiedBy2', payloadDdlName: 'ModifiedBy2List', keyName: 'ModifiedBy2', labelName: 'ModifiedBy2Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetModifiedBy2List', actionTypeName: 'GET_DDL_ModifiedBy2' },\r\n ]\r\n this.ScreenOnDemandDef = [\r\n\r\n ]\r\n this.ScreenDocumentDef = [\r\n\r\n ]\r\n this.ScreenCriDdlDef = [\r\n\r\n ]\r\n this.SearchActions = {\r\n ...[...this.ScreenDdlDef].reduce((a, v) => { a['Search' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenCriDdlDef].reduce((a, v) => { a['SearchCri' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type !== 'DocList' && f.type !== 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetColumnOnDemandAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetRefColumnOnDemandAction(v); return a; }, {}),\r\n ...this.MakePullUpOnDemandAction([...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['GetRef' + v.refColumnName] = { dependents: [...((a['GetRef' + v.refColumnName] || {}).dependents || []), v] }; return a; }, {})),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'DocList').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetDocumentListAction(v); return a; }, {}),\r\n }\r\n this.OnDemandActions = {\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Get').reduce((a, v) => { a['Get' + v.columnName + 'Content'] = this.MakeGetDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Add').reduce((a, v) => { a['Add' + v.columnName + 'Content'] = this.MakeAddDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Del').reduce((a, v) => { a['Del' + v.columnName + 'Content'] = this.MakeDelDocumentContentAction(v); return a; }, {}),\r\n }\r\n this.ScreenDdlSelectors = this.ScreenDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeDdlSelectors(v); return a; }, {})\r\n this.ScreenCriDdlSelectors = this.ScreenCriDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeCriDdlSelectors(v); return a; }, {})\r\n this.actionReducers = this.MakeActionReducers();\r\n }\r\n GetScreenName() { return 'StakeWalletAddress' }\r\n GetMstKeyColumnName(isUnderlining = false) { return isUnderlining ? 'StakeWalletAddrId' : 'StakeWalletAddrId2'; }\r\n GetDtlKeyColumnName(isUnderlining = false) { return isUnderlining ? '' : ''; }\r\n GetPersistDtlName() { return this.GetScreenName() + '_Dtl'; }\r\n GetPersistMstName() { return this.GetScreenName() + '_Mst'; }\r\n GetWebService() { return StakeWalletAddressService; }\r\n GetReducerActionTypePrefix() { return this.GetScreenName(); };\r\n GetActionType(actionTypeName) { return getAsyncTypes(this.GetReducerActionTypePrefix(), actionTypeName); }\r\n GetInitState() {\r\n return {\r\n ...initialRintagiScreenReduxState,\r\n Label: {\r\n ...initialRintagiScreenReduxState.Label,\r\n }\r\n }\r\n };\r\n\r\n GetDefaultDtl(state) {\r\n return (state || {}).NewDtl ||\r\n {\r\n\r\n }\r\n }\r\n ExpandMst(mst, state, copy) {\r\n return {\r\n ...mst,\r\n key: Date.now(),\r\n StakeWalletAddrId2: copy ? null : mst.StakeWalletAddrId2,\r\n }\r\n }\r\n ExpandDtl(dtlList, copy) {\r\n return dtlList;\r\n }\r\n\r\n SearchListToSelectList(state) {\r\n const searchList = ((state || {}).SearchList || {}).data || [];\r\n return searchList\r\n .map((v, i) => {\r\n return {\r\n key: v.key || null,\r\n value: v.labelL || v.label || ' ',\r\n label: v.labelL || v.label || ' ',\r\n labelR: v.labelR || ' ',\r\n detailR: v.detailR || ' ',\r\n detail: v.detail || ' ',\r\n idx: i,\r\n isSelected: v.isSelected,\r\n }\r\n })\r\n }\r\n}\r\n\r\n/* ReactRule: Redux Custom Function */\r\n\r\n/* ReactRule End: Redux Custom Function */\r\n\r\n/* helper functions */\r\n\r\nexport function ShowMstFilterApplied(state) {\r\n return !state\r\n || !state.ScreenCriteria\r\n\r\n || state.ScreenCriteria.SearchStr;\r\n}\r\n\r\nexport default new StakeWalletAddressRedux()\r\n","\r\nimport { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\n\r\nlet activeScope = {};\r\n\r\nexport function setAccessScope(scope) {\r\n activeScope = {\r\n ...activeScope,\r\n ...scope,\r\n }\r\n}\r\n\r\nexport function GetAuthCol(accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetAuthCol'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetAuthRow(accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetAuthRow'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n\r\n}\r\nexport function GetScreenLabel(accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetScreenLabel'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope || getAccessScope())\r\n }\r\n )\r\n\r\n}\r\n\r\nexport function GetLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetSystemLabels(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetSystemLabels'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n labelCat: labelCat\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function GetScreenButtonHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetScreenButtonHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenHlp(labelCat, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetScreenHlp'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenCriteria(accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewMst(accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetNewMst'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetNewDtl(accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetNewDtl'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetScreenFilter(accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetScreenFilter'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetSearchList(searchStr, topN, filterId, desiredScreenCriteria, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetSearchList'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n desiredScreenCriteria: desiredScreenCriteria || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetStakeUserInfo7List(searchStr, topN, filterId, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetStakeUserInfo7List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n searchStr: searchStr || '',\r\n topN: topN || 0,\r\n filterId: ('' + (filterId || 0)),\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetStakeUserInfo7ById(keyId, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetStakeUserInfo7ById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetMstById = GetStakeUserInfo7ById;\r\nexport function GetStakeUserInfo7DtlById(keyId, filterId, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetStakeUserInfo7DtlById'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n keyId: keyId || '',\r\n options: options || {\r\n CurrentScreenCriteria: JSON.stringify({}),\r\n },\r\n filterId: filterId || 0,\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport const GetDtlById = GetStakeUserInfo7DtlById;\r\nexport function LoadInitPage(options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/LoadInitPage'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SaveData(mst, dtl, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst || {},\r\n dtl: dtl || [],\r\n options: options || {}\r\n });\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/SaveData'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function DelMst(mst, options, accessScope) {\r\n const reqJson = JSON.stringify({\r\n mst: mst,\r\n options: options\r\n });\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/DelMst'\r\n , {\r\n requestOptions: {\r\n body: reqJson,\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function SetScreenCriteria(criteriaValues, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/SetScreenCriteria'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n criteriaValues: criteriaValues\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\nexport function GetRefColumnContent(mstId, dtlId, refKeyId, isMaster, refScreenColumnName, options, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetRefColumnContent'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n mstId: mstId || null,\r\n dtlId: dtlId || null,\r\n refKeyId: refKeyId || null,\r\n refScreenColumnName: refScreenColumnName || null,\r\n isMaster: isMaster || false,\r\n options: options || {},\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/*screen criteria dll and screen dropdownlist/autocomplete*/\r\n\r\nexport function GetIpCountry17List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetIpCountry17List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetAgentNumber17List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetAgentNumber17List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetKycStatus17List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetKycStatus17List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetInputBy17List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetInputBy17List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n\r\nexport function GetModifiedBy17List(query, topN, filterBy, accessScope) {\r\n return fetchData(baseUrl + '/StakeUserInfoWs.asmx/GetModifiedBy17List'\r\n , {\r\n requestOptions: {\r\n body: JSON.stringify({\r\n query: query || '',\r\n topN: topN || 0,\r\n filterBy: filterBy || null\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\n/* ReactRule: Service Custom Function */\r\n\r\n\r\n/* ReactRule End: Service Custom Function */\r\n","\r\nimport { getAsyncTypes } from '../helpers/actionType'\r\nimport * as StakeUserInfoService from '../services/StakeUserInfoService'\r\nimport { RintagiScreenRedux, initialRintagiScreenReduxState } from './_ScreenReducer'\r\nclass StakeUserInfoRedux extends RintagiScreenRedux {\r\n allowTmpDtl = false;\r\n constructor() {\r\n super();\r\n this.ActionApiNameMapper = {\r\n 'GET_SEARCH_LIST': 'GetStakeUserInfo7List',\r\n 'GET_MST': 'GetStakeUserInfo7ById',\r\n 'GET_DTL_LIST': 'GetStakeUserInfo7DtlById',\r\n }\r\n this.ScreenDdlDef = [\r\n { columnName: 'IpCountry17', payloadDdlName: 'IpCountry17List', keyName: 'IpCountry17', labelName: 'IpCountry17Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetIpCountry17List', actionTypeName: 'GET_DDL_IpCountry17' },\r\n { columnName: 'AgentNumber17', payloadDdlName: 'AgentNumber17List', keyName: 'AgentNumber17', labelName: 'AgentNumber17Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetAgentNumber17List', actionTypeName: 'GET_DDL_AgentNumber17' },\r\n { columnName: 'KycStatus17', payloadDdlName: 'KycStatus17List', keyName: 'KycStatus17', labelName: 'KycStatus17Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetKycStatus17List', actionTypeName: 'GET_DDL_KycStatus17' },\r\n { columnName: 'InputBy17', payloadDdlName: 'InputBy17List', keyName: 'InputBy17', labelName: 'InputBy17Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetInputBy17List', actionTypeName: 'GET_DDL_InputBy17' },\r\n { columnName: 'ModifiedBy17', payloadDdlName: 'ModifiedBy17List', keyName: 'ModifiedBy17', labelName: 'ModifiedBy17Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetModifiedBy17List', actionTypeName: 'GET_DDL_ModifiedBy17' },\r\n ]\r\n this.ScreenOnDemandDef = [\r\n\r\n ]\r\n this.ScreenDocumentDef = [\r\n\r\n ]\r\n this.ScreenCriDdlDef = [\r\n\r\n ]\r\n this.SearchActions = {\r\n ...[...this.ScreenDdlDef].reduce((a, v) => { a['Search' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenCriDdlDef].reduce((a, v) => { a['SearchCri' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type !== 'DocList' && f.type !== 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetColumnOnDemandAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetRefColumnOnDemandAction(v); return a; }, {}),\r\n ...this.MakePullUpOnDemandAction([...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['GetRef' + v.refColumnName] = { dependents: [...((a['GetRef' + v.refColumnName] || {}).dependents || []), v] }; return a; }, {})),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'DocList').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetDocumentListAction(v); return a; }, {}),\r\n }\r\n this.OnDemandActions = {\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Get').reduce((a, v) => { a['Get' + v.columnName + 'Content'] = this.MakeGetDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Add').reduce((a, v) => { a['Add' + v.columnName + 'Content'] = this.MakeAddDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Del').reduce((a, v) => { a['Del' + v.columnName + 'Content'] = this.MakeDelDocumentContentAction(v); return a; }, {}),\r\n }\r\n this.ScreenDdlSelectors = this.ScreenDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeDdlSelectors(v); return a; }, {})\r\n this.ScreenCriDdlSelectors = this.ScreenCriDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeCriDdlSelectors(v); return a; }, {})\r\n this.actionReducers = this.MakeActionReducers();\r\n }\r\n GetScreenName() { return 'StakeUserInfo' }\r\n GetMstKeyColumnName(isUnderlining = false) { return isUnderlining ? 'StakeInfoId' : 'StakeInfoId17'; }\r\n GetDtlKeyColumnName(isUnderlining = false) { return isUnderlining ? '' : ''; }\r\n GetPersistDtlName() { return this.GetScreenName() + '_Dtl'; }\r\n GetPersistMstName() { return this.GetScreenName() + '_Mst'; }\r\n GetWebService() { return StakeUserInfoService; }\r\n GetReducerActionTypePrefix() { return this.GetScreenName(); };\r\n GetActionType(actionTypeName) { return getAsyncTypes(this.GetReducerActionTypePrefix(), actionTypeName); }\r\n GetInitState() {\r\n return {\r\n ...initialRintagiScreenReduxState,\r\n Label: {\r\n ...initialRintagiScreenReduxState.Label,\r\n }\r\n }\r\n };\r\n\r\n GetDefaultDtl(state) {\r\n return (state || {}).NewDtl ||\r\n {\r\n\r\n }\r\n }\r\n ExpandMst(mst, state, copy) {\r\n return {\r\n ...mst,\r\n key: Date.now(),\r\n StakeInfoId17: copy ? null : mst.StakeInfoId17,\r\n }\r\n }\r\n ExpandDtl(dtlList, copy) {\r\n return dtlList;\r\n }\r\n\r\n SearchListToSelectList(state) {\r\n const searchList = ((state || {}).SearchList || {}).data || [];\r\n return searchList\r\n .map((v, i) => {\r\n return {\r\n key: v.key || null,\r\n value: v.labelL || v.label || ' ',\r\n label: v.labelL || v.label || ' ',\r\n labelR: v.labelR || ' ',\r\n detailR: v.detailR || ' ',\r\n detail: v.detail || ' ',\r\n idx: i,\r\n isSelected: v.isSelected,\r\n }\r\n })\r\n }\r\n}\r\n\r\n/* ReactRule: Redux Custom Function */\r\n\r\n/* ReactRule End: Redux Custom Function */\r\n\r\n/* helper functions */\r\n\r\nexport function ShowMstFilterApplied(state) {\r\n return !state\r\n || !state.ScreenCriteria\r\n\r\n || state.ScreenCriteria.SearchStr;\r\n}\r\n\r\nexport default new StakeUserInfoRedux()\r\n","import { Flex, Spinner, Heading } from \"theme-ui\";\r\n\r\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { logout, login } from '../redux/Auth';\r\n\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Link, Route } from 'react-router-dom';\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar } from 'reactstrap';\r\nimport ModalDialog from '../components/custom/ModalDialog';\r\nimport log from '../helpers/logger';\r\nimport { shortenAddress } from \"../utils/shortenAddress\";\r\nimport CheckIcon from 'mdi-react/CheckIcon';\r\nimport { useWeb3React } from \"@web3-react/core\";\r\nimport StakeWalletAddressReduxObj from '../redux/StakeWalletAddress';\r\nimport StakeUserInfoReduxObj from '../redux/StakeUserInfo';\r\nimport { Formik, Field, Form } from 'formik';\r\nimport DropdownField from '../components/custom/DropdownField';\r\n\r\nconst AccountStatus = (props) => {\r\n const { account, liquity: { send: liquitySend, populate: liquityTry, store, connection } } = useLiquity();\r\n let { activate, active, deactivate, connector } = useWeb3React();\r\n const walletAddress = (connection || {}).userAddress;\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n loading: true,\r\n ButtonDisabled: false,\r\n cAgentNumber17: \"\",\r\n\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n });\r\n\r\n const [spinnerStatus, setSpinnerStatus] = useState(true);\r\n\r\n const [didMount, setDidMount] = useState(false);\r\n\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, global, StakeWalletAddress, StakeUserInfo } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n global: reduxState.global,\r\n StakeWalletAddress: reduxState.StakeWalletAddress,\r\n StakeUserInfo: reduxState.StakeUserInfo\r\n };\r\n });\r\n\r\n // log.debug(kycPerson, user, auth);\r\n // simulating class(this -> _this)\r\n const [_state, setState] = useState(0);\r\n\r\n const StakeUserInfoState = StakeUserInfo || {};\r\n const currUserInfoSearchList = ((StakeUserInfo || {}).SearchList || {}).data || [];\r\n const currUserInfoMst = currUserInfoSearchList.filter(obj => { return obj.detailR === ((auth || {}).user || {}).UsrId }) || [];\r\n const AgentNumber17List = StakeUserInfoReduxObj.ScreenDdlSelectors.AgentNumber17(StakeUserInfoState);\r\n // const AgentNumber17 = currUserInfoMst.AgentNumber17;\r\n log.debug(\"test\", AgentNumber17List, StakeUserInfoState, currUserInfoSearchList, currUserInfoMst, ((auth || {}).user || {}).UsrId);\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n setMyState({ ...myState, ...newState });\r\n setState(_state + 1);\r\n },\r\n\r\n // Continue: (event) => {\r\n // props.history.push('/customer-support');\r\n // },\r\n\r\n SaveWalletAddress: (event) => {\r\n _this.setState({\r\n ButtonDisabled: true,\r\n });\r\n dispatch(\r\n StakeWalletAddressReduxObj.SavePage(\r\n StakeWalletAddress,\r\n {\r\n StakeWalletAddrId2: '',\r\n StakeWalletAddr2: walletAddress || '',\r\n StakeWalletStatusCd2: 'A',\r\n StakeWalletAddrDesc2: ''\r\n },\r\n [],\r\n {\r\n persist: true,\r\n }\r\n ),\r\n )\r\n .then(result => {\r\n log.debug('submit done');\r\n dispatch(\r\n StakeUserInfoReduxObj.SavePage(\r\n StakeUserInfo,\r\n {\r\n StakeInfoId17: (currUserInfoMst.length > 0) ? currUserInfoMst[0].labelR : '',\r\n AgentNumber17: _this.state.cAgentNumber17 || '',\r\n },\r\n [],\r\n {\r\n persist: true,\r\n }\r\n ),\r\n ).then(result => {\r\n props.history.push('/dashboard');\r\n })\r\n .catch(error => {\r\n log.debug('submit agent id error', error)\r\n _this.setState({\r\n ButtonDisabled: false,\r\n });\r\n })\r\n .finally(\r\n () => {\r\n }\r\n );\r\n })\r\n .catch(error => {\r\n log.debug('submit metamask address error', error)\r\n _this.setState({\r\n ButtonDisabled: false,\r\n });\r\n })\r\n .finally(\r\n () => {\r\n }\r\n );\r\n },\r\n\r\n handleAgentChange: (event) => {\r\n _this.setState({\r\n cAgentNumber17: event.value,\r\n });\r\n },\r\n\r\n handleSubmit: (event) => {\r\n // alert('A name was submitted: ' + this.state.value);\r\n event.preventDefault();\r\n }\r\n }), [_state, myState, props.history]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n const { mstId } = { ...props.match.params };\r\n let pageload = 0;\r\n if (!didMount && (!(StakeWalletAddress || {}).AuthCol || true)) {\r\n log.debug(\"StakeWalletAddress is loading.\")\r\n setDidMount(true);\r\n // must use the dispatch form for the redux binding\r\n dispatch(StakeWalletAddressReduxObj.LoadPage('MstRecord', { mstId: mstId || '!', topN: 200 }))\r\n .then(data => {\r\n setTimeout(() => setSpinnerStatus(false), 1200);\r\n\r\n pageload++;\r\n if (pageload == 2) {\r\n _this.setState({ loading: false });\r\n }\r\n });\r\n\r\n // setTimeout(() => {\r\n // pageload++;\r\n // if (pageload == 2) {\r\n // _this.setState({ loading: false });\r\n // }\r\n // }, 2000);\r\n\r\n store.refresh();\r\n }\r\n\r\n if (!didMount && (!(StakeUserInfo || {}).AuthCol || true)) {\r\n setDidMount(true);\r\n // must use the dispatch form for the redux binding\r\n dispatch(StakeUserInfoReduxObj.LoadPage('MstRecord', { mstId: mstId || '!', topN: 200 }))\r\n .then(data => {\r\n setTimeout(() => setSpinnerStatus(false), 1200);\r\n\r\n pageload++;\r\n if (pageload == 2) {\r\n _this.setState({ loading: false });\r\n }\r\n });\r\n\r\n // setTimeout(() => {\r\n // pageload++;\r\n // if (pageload == 2) {\r\n // _this.setState({ loading: false });\r\n // }\r\n // }, 2000);\r\n store.refresh();\r\n }\r\n\r\n }, [didMount, dispatch, props, StakeWalletAddress, StakeUserInfo, store, _this]);\r\n\r\n // ComponentDidUpdate() equivalent\r\n useEffect(() => {\r\n\r\n }, [_this]);\r\n\r\n // body of the render()\r\n // const accountSuspended = false;\r\n // if (accountSuspended == false){\r\n // return ;\r\n // }\r\n\r\n\r\n\r\n\r\n const currAddrCheckSearchList = ((StakeWalletAddress || {}).SearchList || {}).data || [];\r\n const currentAddress = currAddrCheckSearchList.filter(obj => { return obj.detailR === walletAddress }) || [];\r\n const currentStatusCd = ((currentAddress)[0] || {}).labelR || \"\";\r\n\r\n const currentAddrInfo = ((currentAddress)[0] || {}).detailR || \"\";\r\n\r\n //check if this address is declined\r\n const includeDeclinedAddress = currentStatusCd == \"D\" ? true : false;\r\n const walletUsedByOthers = false;\r\n\r\n log.debug(\"hit metamask status page\", StakeWalletAddress, currAddrCheckSearchList, currentAddress, currentAddrInfo, account);\r\n //if address is approved, redirect to dashboard page\r\n if (!includeDeclinedAddress && !walletUsedByOthers && currentStatusCd == \"A\" && !_this.state.loading && (currentAddrInfo != \"\" && currentAddrInfo == account)) {\r\n return ( (\r\n \r\n )} />)\r\n }\r\n\r\n\r\n const loader = (\r\n \r\n \r\n Loading...\r\n \r\n );\r\n\r\n if (spinnerStatus) {\r\n return (
{loader}
);\r\n }\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n {!includeDeclinedAddress &&\r\n
\r\n

Wallet Status

\r\n
\r\n }\r\n\r\n {!includeDeclinedAddress && !walletUsedByOthers && currentStatusCd == \"\" && currAddrCheckSearchList.length <= 0 &&\r\n
\r\n

Your Agent

\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n }\r\n\r\n {includeDeclinedAddress &&\r\n
\r\n

Account Has Been Terminated

\r\n
\r\n }\r\n\r\n {!includeDeclinedAddress && walletUsedByOthers == true &&\r\n
\r\n
\r\n
\r\n

{shortenAddress(walletAddress)}

\r\n

This wallet address is used by other users. Please try a different wallet address.

\r\n
\r\n
\r\n
\r\n }\r\n\r\n {includeDeclinedAddress && walletUsedByOthers == false &&\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n

Due to an insufficient account balance to cover the monthly charges, we regret to inform you that your validators have been exited. The ETH in your validators has been moved to your withdrawal address. If you need to access your account statements or want further clarification, please contact our support team.

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n }\r\n\r\n {includeDeclinedAddress == false && walletUsedByOthers == false && currAddrCheckSearchList.length <= 0 &&\r\n
\r\n
\r\n
\r\n {shortenAddress(walletAddress)}\r\n {currentStatusCd == \"\" &&\r\n

is not associated to your account yet.
Please click the button below to confirm the wallet registration.

\r\n }\r\n
\r\n
\r\n
\r\n }\r\n\r\n {includeDeclinedAddress == false && walletUsedByOthers == false && currAddrCheckSearchList.length > 0 &&\r\n
\r\n
\r\n
\r\n {shortenAddress(walletAddress)}\r\n {currentStatusCd == \"\" &&\r\n

You already have a wallet address that is associated with your email account. Please switch to the wallet address that is shown below or create a new account. Thank you.

\r\n }\r\n
\r\n
\r\n
\r\n }\r\n\r\n\r\n {!includeDeclinedAddress &&
\r\n

Your Associated Wallet

\r\n
\r\n {/* {filteredAddrCheckSearchList */}\r\n {currAddrCheckSearchList\r\n .map((v, i) => {\r\n return
\r\n
\r\n {shortenAddress(v.detailR)}\r\n {(v.labelR == \"A\" ? \"Approved\" : (v.labelR == \"D\" ? \"Declined\" : \"Not Registered\"))}\r\n
\r\n
\r\n })\r\n }\r\n
\r\n }\r\n
\r\n\r\n {/* {!includeDeclinedAddress && walletUsedByOthers == true &&\r\n
\r\n
\r\n \r\n \r\n { _this.Continue() }}>Connect to Another Wallet Address\r\n \r\n \r\n
\r\n
\r\n } */}\r\n {/* \r\n {includeDeclinedAddress &&\r\n
\r\n
\r\n \r\n \r\n { _this.Continue() }}>Contact Support\r\n \r\n \r\n
\r\n
\r\n } */}\r\n\r\n {!includeDeclinedAddress && !walletUsedByOthers && currentStatusCd == \"\" && currAddrCheckSearchList.length <= 0 &&\r\n
\r\n
\r\n
\r\n \r\n \r\n { _this.SaveWalletAddress() }}>Confirm Wallet Registration\r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default withRouter(AccountStatus);\r\n","import React from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col, Table } from 'reactstrap';\r\nimport log from '../helpers/logger';\r\nimport RintagiScreen from '../components/custom/Screen';\r\nimport { registerBlocker, unregisterBlocker } from '../helpers/navigation';\r\nimport { login } from '../redux/Auth';\r\nimport { Container, Flex, Spinner, Heading } from \"theme-ui\";\r\n\r\nclass PaymentConfirm extends RintagiScreen {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n initialing: true,\r\n reduxRefreshed: false,\r\n }\r\n\r\n this.DateChange = this.DateChange.bind(this);\r\n this.DropdownChange = this.DropdownChange.bind(this);\r\n this.TextChange = this.TextChange.bind(this);\r\n this.ValidatePage = this.ValidatePage.bind(this);\r\n this.OnModalReturn = this.OnModalReturn.bind(this);\r\n this.setDirtyFlag = this.setDirtyFlag.bind(this);\r\n this.DropdownChangeV1 = this.DropdownChangeV1.bind(this);\r\n\r\n const loadPageOptions = { SkipMetaData: true, SkipSupportingData: true };\r\n }\r\n\r\n /* end of form related handling functions */\r\n\r\n componentDidMount(a, b) {\r\n const { mstId } = { ...this.props.match.params };\r\n }\r\n\r\n componentDidUpdate(prevProps, prevStates) {\r\n log.debug('component did update');\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.blocker) {\r\n unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n }\r\n\r\n Continue() {\r\n this.props.history.push('/payment');\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n
\r\n

Your payment is successful

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

Thank you for your payment. Your payment has been received.

\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n { this.Continue() }}>Go Back to Payment\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { login: login },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(PaymentConfirm));","\r\nimport { getAsyncTypes } from '../helpers/actionType'\r\nimport * as StakeStmtService from '../services/StakeStmtService'\r\nimport { RintagiScreenRedux, initialRintagiScreenReduxState } from './_ScreenReducer'\r\nclass RewardStmtRedux extends RintagiScreenRedux {\r\n allowTmpDtl = false;\r\n constructor() {\r\n super();\r\n this.ActionApiNameMapper = {\r\n 'GET_SEARCH_LIST': 'GetStakeStmt5List',\r\n 'GET_MST': 'GetStakeStmt5ById',\r\n 'GET_DTL_LIST': 'GetStakeStmt5DtlById',\r\n }\r\n this.ScreenDdlDef = [\r\n { columnName: 'StmtTypeCd8', payloadDdlName: 'StmtTypeCd8List', keyName: 'StmtTypeCd8', labelName: 'StmtTypeCd8Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetStmtTypeCd8List', actionTypeName: 'GET_DDL_StmtTypeCd8' },\r\n { columnName: 'UsrId8', payloadDdlName: 'UsrId8List', keyName: 'UsrId8', labelName: 'UsrId8Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetUsrId8List', actionTypeName: 'GET_DDL_UsrId8' },\r\n ]\r\n this.ScreenOnDemandDef = [\r\n { columnName: 'StmtDoc8', isFileObject: true, tableColumnName: 'StmtDoc', forMst: true, apiServiceName: 'GetColumnContent', actionTypeName: 'GET_COLUMN_StmtDoc8' },\r\n ]\r\n this.ScreenDocumentDef = [\r\n\r\n ]\r\n this.ScreenCriDdlDef = [\r\n\r\n ]\r\n this.SearchActions = {\r\n ...[...this.ScreenDdlDef].reduce((a, v) => { a['Search' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenCriDdlDef].reduce((a, v) => { a['SearchCri' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type !== 'DocList' && f.type !== 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetColumnOnDemandAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetRefColumnOnDemandAction(v); return a; }, {}),\r\n ...this.MakePullUpOnDemandAction([...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['GetRef' + v.refColumnName] = { dependents: [...((a['GetRef' + v.refColumnName] || {}).dependents || []), v] }; return a; }, {})),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'DocList').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetDocumentListAction(v); return a; }, {}),\r\n }\r\n this.OnDemandActions = {\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Get').reduce((a, v) => { a['Get' + v.columnName + 'Content'] = this.MakeGetDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Add').reduce((a, v) => { a['Add' + v.columnName + 'Content'] = this.MakeAddDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Del').reduce((a, v) => { a['Del' + v.columnName + 'Content'] = this.MakeDelDocumentContentAction(v); return a; }, {}),\r\n }\r\n this.ScreenDdlSelectors = this.ScreenDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeDdlSelectors(v); return a; }, {})\r\n this.ScreenCriDdlSelectors = this.ScreenCriDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeCriDdlSelectors(v); return a; }, {})\r\n this.actionReducers = this.MakeActionReducers();\r\n }\r\n GetScreenName() { return 'RewardStmt' }\r\n GetMstKeyColumnName(isUnderlining = false) { return isUnderlining ? 'StmtId' : 'StmtId8'; }\r\n GetDtlKeyColumnName(isUnderlining = false) { return isUnderlining ? '' : ''; }\r\n GetPersistDtlName() { return this.GetScreenName() + '_Dtl'; }\r\n GetPersistMstName() { return this.GetScreenName() + '_Mst'; }\r\n GetWebService() { return StakeStmtService; }\r\n GetReducerActionTypePrefix() { return this.GetScreenName(); };\r\n GetActionType(actionTypeName) { return getAsyncTypes(this.GetReducerActionTypePrefix(), actionTypeName); }\r\n GetInitState() {\r\n return {\r\n ...initialRintagiScreenReduxState,\r\n Label: {\r\n ...initialRintagiScreenReduxState.Label,\r\n }\r\n }\r\n };\r\n\r\n GetDefaultDtl(state) {\r\n return (state || {}).NewDtl ||\r\n {\r\n\r\n }\r\n }\r\n ExpandMst(mst, state, copy) {\r\n return {\r\n ...mst,\r\n key: Date.now(),\r\n StmtId8: copy ? null : mst.StmtId8,\r\n }\r\n }\r\n ExpandDtl(dtlList, copy) {\r\n return dtlList;\r\n }\r\n\r\n SearchListToSelectList(state) {\r\n const searchList = ((state || {}).SearchList || {}).data || [];\r\n return searchList\r\n .map((v, i) => {\r\n return {\r\n key: v.key || null,\r\n value: v.labelL || v.label || ' ',\r\n label: v.labelL || v.label || ' ',\r\n labelR: v.labelR || ' ',\r\n detailR: v.detailR || ' ',\r\n detail: v.detail || ' ',\r\n idx: i,\r\n isSelected: v.isSelected,\r\n }\r\n })\r\n }\r\n}\r\n\r\n/* ReactRule: Redux Custom Function */\r\n\r\n/* ReactRule End: Redux Custom Function */\r\n\r\n/* helper functions */\r\n\r\nexport function ShowMstFilterApplied(state) {\r\n return !state\r\n || !state.ScreenCriteria\r\n\r\n || state.ScreenCriteria.SearchStr;\r\n}\r\n\r\nexport default new RewardStmtRedux()\r\n","import { Container } from \"theme-ui\";\r\n\r\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { logout, login } from '../redux/Auth';\r\n\r\n// liquity functionalities(smart contract related)\r\nimport {\r\n LiquityStoreState,\r\n Decimal,\r\n Cache,\r\n} from \"@liquity/lib-base\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\nimport { useTransactionFunction } from \"../components/Transaction\";\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\n\r\nimport {\r\n selectForCacheChangeValidation,\r\n validateCacheChange\r\n} from \"../components/Cache/validation/validateCacheChange\";\r\nimport { CacheChange } from \"@liquity/lib-base\";\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar, Table } from 'reactstrap';\r\nimport Eth2WalletReduxObj from '../redux/Eth2Wallet';\r\nimport EthTxHistoryReduxObj from '../redux/EthTxHistory';\r\nimport ModalDialog from '../components/custom/ModalDialog';\r\nimport log from '../helpers/logger';\r\nimport { useMyTransactionState } from \"../components/Transaction\";\r\nimport { BigNumber } from \"@ethersproject/bignumber\";\r\nimport { string } from \"prop-types\";\r\nimport { shortenAddress } from \"../utils/shortenAddress\";\r\nimport { SyncValidators } from '../services/Eth2WalletService';\r\nimport RewardStmtReduxObj from '../redux/RewardStmt';\r\nimport { GetDownloadLink } from '../services/StakeStmtService';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Spinner } from \"theme-ui\";\r\n\r\nconst selector = (state) => {\r\n const { cache, fees, price, accountBalance, stabilityDeposit, total } = state;\r\n return {\r\n cache,\r\n fees,\r\n price,\r\n accountBalance,\r\n stabilityDeposit,\r\n total,\r\n validationContext: selectForCacheChangeValidation(state)\r\n };\r\n};\r\n\r\nconst TRANSACTION_ID = \"cache-management\";\r\n\r\nconst RewardStatements = (props) => {\r\n const {\r\n cache: previousCache\r\n , fees\r\n , price: ethPrice\r\n , accountBalance: walletEthAmount\r\n , stabilityDeposit\r\n , total: systemTotal\r\n , rewardEthAmt\r\n , validationContext } = useLiquitySelector(selector);\r\n const {\r\n account,\r\n liquity: { send: liquitySend, populate: liquityTry, store, connection }\r\n } = useLiquity();\r\n const multiDepositAddress = ((connection || {}).addresses || {}).multipleDeposit;\r\n const walletAddress = (connection || {}).userAddress;\r\n\r\n const transactionState = useMyTransactionState(TRANSACTION_ID);\r\n\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n rewards: [],\r\n cacheOpened: !!previousCache,\r\n ethStakingAmt: 0,\r\n ethStakingAmtError: undefined,\r\n ethMinStakingAmt: undefined,\r\n errorFlag: false,\r\n\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n });\r\n\r\n const [didMount, setDidMount] = useState(false);\r\n const [rewardStmtLoading, setRewardStmtLoading] = useState(true);\r\n const [loadedTime] = useState(Date.now())\r\n\r\n const history = useHistory();\r\n\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, global, RewardStmt } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n global: reduxState.global,\r\n RewardStmt: reduxState.RewardStmt,\r\n };\r\n });\r\n\r\n // log.debug(kycPerson, user, auth);\r\n // simulating class(this -> _this)\r\n const [_state, setState] = useState(0);\r\n\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n setMyState({ ...myState, ...newState });\r\n setState(_state + 1);\r\n },\r\n\r\n Back: (event) => {\r\n props.history.push('/dashboard');\r\n },\r\n\r\n handleDownload: (key) => {\r\n GetDownloadLink(key)\r\n .then(data => {\r\n log.debug(\"download result\", data);\r\n window.open(data.data + '&inline=Y');\r\n // history.push('/StmtDownloadConfirm');\r\n })\r\n .catch(error => {\r\n log.debug(\"download result\", error);\r\n });\r\n },\r\n\r\n handleSubmit: (event) => {\r\n // alert('A name was submitted: ' + this.state.value);\r\n event.preventDefault();\r\n }\r\n }), [_state, myState, props.history]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n const { mstId } = { ...props.match.params };\r\n if (!didMount && (!(RewardStmt || {}).AuthCol || true)) {\r\n setDidMount(true);\r\n // must use the dispatch form for the redux binding\r\n const from = walletAddress;\r\n const rewardFilterId = 11;\r\n dispatch(RewardStmtReduxObj.SetScreenCriteria('', {StmtTypeCd10: '',},rewardFilterId));\r\n // unnecessary due to databinding to SearchList \r\n //dispatch(RewardStmtReduxObj.LoadPage('MstRecord', { mstId: mstId || '!', DtlBlob: 'C', MstBlob: 'C' }));\r\n store.refresh();\r\n }\r\n\r\n\r\n }, [didMount, dispatch, RewardStmt, props, _this, ethPrice, store, walletAddress, multiDepositAddress]);\r\n\r\n // ComponentDidUpdate() equivalent\r\n useEffect(() => {\r\n\r\n }, [transactionState, _this]);\r\n\r\n // body of the render()\r\n const toUTCString = (d) => new Date(d.toString()).toUTCString();\r\n const toDecimalStr = (n, d) => n * 1 >= 0 ? '+' + Decimal.fromBigNumberString(n).prettify(d || 8) : '-' + Decimal.fromBigNumberString(n.substring(1)).prettify(d || 8);\r\n const toMonthStr = (d) => new Date(Number(Date.parse(d))).toLocaleString('default', { month: 'short', year: 'numeric' }) ;\r\n\r\n const rewardStatements = (((RewardStmt || {}).SearchList || {}).data || []).sort((a, b) => b.detail.localeCompare(a.detail));\r\n\r\n console.log('rewardStatements', rewardStatements);\r\n\r\n if (rewardStmtLoading && (RewardStmt || {}).mstVersion > loadedTime) {\r\n setRewardStmtLoading(false);\r\n }\r\n \r\n const loadingData = rewardStmtLoading;\r\n\r\n return (\r\n // export const Dashboard = () => (\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

Reward Statements

\r\n
\r\n \r\n
\r\n {(loadingData) && Loading...}\r\n {!loadingData && rewardStatements.length > 0 &&\r\n \r\n \r\n {rewardStatements.map((item, i) => (\r\n \r\n \r\n {toMonthStr(item.detail)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n {/*
*/}\r\n \r\n
\r\n { _this.handleDownload(item.key) }} style={{ cursor: 'pointer' }}>\r\n \r\n
\r\n }\r\n {\r\n !loadingData && rewardStatements.length == 0 &&\r\n

No reward statements.

\r\n }\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n { _this.Back() }}> Back\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRouter(RewardStatements);\r\n","\r\nimport { getAsyncTypes } from '../helpers/actionType'\r\nimport * as StakeStmtService from '../services/StakeStmtService'\r\nimport { RintagiScreenRedux, initialRintagiScreenReduxState } from './_ScreenReducer'\r\nclass StakeStmtRedux extends RintagiScreenRedux {\r\n allowTmpDtl = false;\r\n constructor() {\r\n super();\r\n this.ActionApiNameMapper = {\r\n 'GET_SEARCH_LIST': 'GetStakeStmt5List',\r\n 'GET_MST': 'GetStakeStmt5ById',\r\n 'GET_DTL_LIST': 'GetStakeStmt5DtlById',\r\n }\r\n this.ScreenDdlDef = [\r\n { columnName: 'StmtTypeCd8', payloadDdlName: 'StmtTypeCd8List', keyName: 'StmtTypeCd8', labelName: 'StmtTypeCd8Text', forMst: true, isAutoComplete: false, apiServiceName: 'GetStmtTypeCd8List', actionTypeName: 'GET_DDL_StmtTypeCd8' },\r\n { columnName: 'UsrId8', payloadDdlName: 'UsrId8List', keyName: 'UsrId8', labelName: 'UsrId8Text', forMst: true, isAutoComplete: true, apiServiceName: 'GetUsrId8List', actionTypeName: 'GET_DDL_UsrId8' },\r\n ]\r\n this.ScreenOnDemandDef = [\r\n { columnName: 'StmtDoc8', isFileObject: true, tableColumnName: 'StmtDoc', forMst: true, apiServiceName: 'GetColumnContent', actionTypeName: 'GET_COLUMN_StmtDoc8' },\r\n ]\r\n this.ScreenDocumentDef = [\r\n\r\n ]\r\n this.ScreenCriDdlDef = [\r\n\r\n ]\r\n this.SearchActions = {\r\n ...[...this.ScreenDdlDef].reduce((a, v) => { a['Search' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenCriDdlDef].reduce((a, v) => { a['SearchCri' + v.columnName] = this.MakeSearchAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type !== 'DocList' && f.type !== 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetColumnOnDemandAction(v); return a; }, {}),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetRefColumnOnDemandAction(v); return a; }, {}),\r\n ...this.MakePullUpOnDemandAction([...this.ScreenOnDemandDef].filter(f => f.type === 'RefColumn').reduce((a, v) => { a['GetRef' + v.refColumnName] = { dependents: [...((a['GetRef' + v.refColumnName] || {}).dependents || []), v] }; return a; }, {})),\r\n ...[...this.ScreenOnDemandDef].filter(f => f.type === 'DocList').reduce((a, v) => { a['Get' + v.columnName] = this.MakeGetDocumentListAction(v); return a; }, {}),\r\n }\r\n this.OnDemandActions = {\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Get').reduce((a, v) => { a['Get' + v.columnName + 'Content'] = this.MakeGetDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Add').reduce((a, v) => { a['Add' + v.columnName + 'Content'] = this.MakeAddDocumentContentAction(v); return a; }, {}),\r\n ...[...this.ScreenDocumentDef].filter(f => f.type === 'Del').reduce((a, v) => { a['Del' + v.columnName + 'Content'] = this.MakeDelDocumentContentAction(v); return a; }, {}),\r\n }\r\n this.ScreenDdlSelectors = this.ScreenDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeDdlSelectors(v); return a; }, {})\r\n this.ScreenCriDdlSelectors = this.ScreenCriDdlDef.reduce((a, v) => { a[v.columnName] = this.MakeCriDdlSelectors(v); return a; }, {})\r\n this.actionReducers = this.MakeActionReducers();\r\n }\r\n GetScreenName() { return 'StakeStmt' }\r\n GetMstKeyColumnName(isUnderlining = false) { return isUnderlining ? 'StmtId' : 'StmtId8'; }\r\n GetDtlKeyColumnName(isUnderlining = false) { return isUnderlining ? '' : ''; }\r\n GetPersistDtlName() { return this.GetScreenName() + '_Dtl'; }\r\n GetPersistMstName() { return this.GetScreenName() + '_Mst'; }\r\n GetWebService() { return StakeStmtService; }\r\n GetReducerActionTypePrefix() { return this.GetScreenName(); };\r\n GetActionType(actionTypeName) { return getAsyncTypes(this.GetReducerActionTypePrefix(), actionTypeName); }\r\n GetInitState() {\r\n return {\r\n ...initialRintagiScreenReduxState,\r\n Label: {\r\n ...initialRintagiScreenReduxState.Label,\r\n }\r\n }\r\n };\r\n\r\n GetDefaultDtl(state) {\r\n return (state || {}).NewDtl ||\r\n {\r\n\r\n }\r\n }\r\n ExpandMst(mst, state, copy) {\r\n return {\r\n ...mst,\r\n key: Date.now(),\r\n StmtId8: copy ? null : mst.StmtId8,\r\n }\r\n }\r\n ExpandDtl(dtlList, copy) {\r\n return dtlList;\r\n }\r\n\r\n SearchListToSelectList(state) {\r\n const searchList = ((state || {}).SearchList || {}).data || [];\r\n return searchList\r\n .map((v, i) => {\r\n return {\r\n key: v.key || null,\r\n value: v.labelL || v.label || ' ',\r\n label: v.labelL || v.label || ' ',\r\n labelR: v.labelR || ' ',\r\n detailR: v.detailR || ' ',\r\n detail: v.detail || ' ',\r\n idx: i,\r\n isSelected: v.isSelected,\r\n }\r\n })\r\n }\r\n}\r\n\r\n/* ReactRule: Redux Custom Function */\r\n\r\n/* ReactRule End: Redux Custom Function */\r\n\r\n/* helper functions */\r\n\r\nexport function ShowMstFilterApplied(state) {\r\n return !state\r\n || !state.ScreenCriteria\r\n\r\n || state.ScreenCriteria.SearchStr;\r\n}\r\n\r\nexport default new StakeStmtRedux()\r\n","import { Container } from \"theme-ui\";\r\n\r\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { logout, login } from '../redux/Auth';\r\n\r\n// liquity functionalities(smart contract related)\r\nimport {\r\n LiquityStoreState,\r\n Decimal,\r\n Cache,\r\n} from \"@liquity/lib-base\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\nimport { useTransactionFunction } from \"../components/Transaction\";\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\n\r\nimport {\r\n selectForCacheChangeValidation,\r\n validateCacheChange\r\n} from \"../components/Cache/validation/validateCacheChange\";\r\nimport { CacheChange } from \"@liquity/lib-base\";\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar, Table } from 'reactstrap';\r\nimport Eth2WalletReduxObj from '../redux/Eth2Wallet';\r\nimport EthTxHistoryReduxObj from '../redux/EthTxHistory';\r\nimport ModalDialog from '../components/custom/ModalDialog';\r\nimport log from '../helpers/logger';\r\nimport { useMyTransactionState } from \"../components/Transaction\";\r\nimport { BigNumber } from \"@ethersproject/bignumber\";\r\nimport { string } from \"prop-types\";\r\nimport { shortenAddress } from \"../utils/shortenAddress\";\r\nimport { SyncValidators } from '../services/Eth2WalletService';\r\nimport StakeStmtReduxObj from '../redux/StakeStmt';\r\nimport { GetDownloadLink } from '../services/StakeStmtService';\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { Spinner } from \"theme-ui\";\r\n\r\nconst selector = (state) => {\r\n const { cache, fees, price, accountBalance, stabilityDeposit, total } = state;\r\n return {\r\n cache,\r\n fees,\r\n price,\r\n accountBalance,\r\n stabilityDeposit,\r\n total,\r\n validationContext: selectForCacheChangeValidation(state)\r\n };\r\n};\r\n\r\nconst TRANSACTION_ID = \"cache-management\";\r\n\r\nconst AccountStatements = (props) => {\r\n const {\r\n cache: previousCache\r\n , fees\r\n , price: ethPrice\r\n , accountBalance: walletEthAmount\r\n , stabilityDeposit\r\n , total: systemTotal\r\n , rewardEthAmt\r\n , validationContext } = useLiquitySelector(selector);\r\n const {\r\n account,\r\n liquity: { send: liquitySend, populate: liquityTry, store, connection }\r\n } = useLiquity();\r\n const multiDepositAddress = ((connection || {}).addresses || {}).multipleDeposit;\r\n const walletAddress = (connection || {}).userAddress;\r\n\r\n const transactionState = useMyTransactionState(TRANSACTION_ID);\r\n\r\n const history = useHistory();\r\n\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n rewards: [],\r\n cacheOpened: !!previousCache,\r\n ethStakingAmt: 0,\r\n ethStakingAmtError: undefined,\r\n ethMinStakingAmt: undefined,\r\n errorFlag: false,\r\n\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n });\r\n\r\n const [didMount, setDidMount] = useState(false);\r\n const [stakeStmtLoading, setStakeStmtLoading] = useState(true);\r\n const [loadedTime] = useState(Date.now())\r\n\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, global, StakeStmt } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n global: reduxState.global,\r\n StakeStmt: reduxState.StakeStmt,\r\n };\r\n });\r\n\r\n // log.debug(kycPerson, user, auth);\r\n // simulating class(this -> _this)\r\n const [_state, setState] = useState(0);\r\n\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n setMyState({ ...myState, ...newState });\r\n setState(_state + 1);\r\n },\r\n\r\n Back: (event) => {\r\n props.history.push('/payment');\r\n },\r\n\r\n handleDownload: (key) => {\r\n GetDownloadLink(key)\r\n .then(data => {\r\n log.debug(\"download result\", data);\r\n window.open(data.data + '&inline=Y');\r\n // history.push('/StmtDownloadConfirm');\r\n })\r\n .catch(error => {\r\n log.debug(\"download result\", error);\r\n });\r\n },\r\n\r\n handleSubmit: (event) => {\r\n // alert('A name was submitted: ' + this.state.value);\r\n event.preventDefault();\r\n }\r\n }), [_state, myState, props.history]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n const { mstId } = { ...props.match.params };\r\n if (!didMount && (!(StakeStmt || {}).AuthCol || true)) {\r\n setDidMount(true);\r\n // must use the dispatch form for the redux binding\r\n const from = walletAddress;\r\n const acctFilterId = 12;\r\n dispatch(StakeStmtReduxObj.SetScreenCriteria('', {StmtTypeCd10: '',},acctFilterId));\r\n // unnecessary due to databinding to SearchList \r\n //dispatch(StakeStmtReduxObj.LoadPage('MstRecord', { mstId: mstId || '!', DtlBlob: 'C', MstBlob: 'C' }));\r\n store.refresh();\r\n }\r\n\r\n\r\n }, [didMount, dispatch, StakeStmt, props, _this, ethPrice, store, walletAddress, multiDepositAddress]);\r\n\r\n // ComponentDidUpdate() equivalent\r\n useEffect(() => {\r\n\r\n }, [transactionState, _this]);\r\n\r\n // body of the render()\r\n const toUTCString = (d) => new Date(d.toString()).toUTCString();\r\n const toDecimalStr = (n, d) => n * 1 >= 0 ? '+' + Decimal.fromBigNumberString(n).prettify(d || 8) : '-' + Decimal.fromBigNumberString(n.substring(1)).prettify(d || 8);\r\n const toMonthStr = (d) => new Date(Number(Date.parse(d))).toLocaleString('default', { month: 'short', year: 'numeric' }) ;\r\n\r\n const accountStatements = (((StakeStmt || {}).SearchList || {}).data || []).sort((a, b) => b.detail.localeCompare(a.detail));\r\n\r\n console.log('accountStatements', accountStatements);\r\n\r\n if (stakeStmtLoading && (StakeStmt || {}).mstVersion > loadedTime) {\r\n setStakeStmtLoading(false);\r\n }\r\n \r\n const loadingData = stakeStmtLoading;\r\n\r\n return (\r\n // export const Dashboard = () => (\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

Account Statements

\r\n
\r\n \r\n
\r\n {(loadingData) && Loading...}\r\n {!loadingData && accountStatements.length > 0 &&\r\n \r\n \r\n {accountStatements.map((item, i) => (\r\n \r\n \r\n {toMonthStr(item.detail)}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n {/*
*/}\r\n \r\n
\r\n { _this.handleDownload(item.key) }} style={{ cursor: 'pointer' }}>\r\n \r\n
\r\n }\r\n {\r\n !loadingData && accountStatements.length == 0 &&\r\n

No account statements.

\r\n }\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n { _this.Back() }}> Back\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRouter(AccountStatements);\r\n","import { Container } from \"theme-ui\";\r\n\r\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { logout, login } from '../redux/Auth';\r\n\r\n// liquity functionalities(smart contract related)\r\nimport {\r\n LiquityStoreState,\r\n Decimal,\r\n Cache,\r\n} from \"@liquity/lib-base\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\nimport { useTransactionFunction } from \"../components/Transaction\";\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\n\r\nimport {\r\n selectForCacheChangeValidation,\r\n validateCacheChange\r\n} from \"../components/Cache/validation/validateCacheChange\";\r\nimport { CacheChange } from \"@liquity/lib-base\";\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar, Table } from 'reactstrap';\r\nimport Eth2WalletReduxObj from '../redux/Eth2Wallet';\r\nimport EthTxHistoryReduxObj from '../redux/EthTxHistory';\r\nimport ModalDialog from '../components/custom/ModalDialog';\r\nimport log from '../helpers/logger';\r\nimport { useMyTransactionState } from \"../components/Transaction\";\r\nimport { BigNumber } from \"@ethersproject/bignumber\";\r\nimport { string } from \"prop-types\";\r\nimport { shortenAddress } from \"../utils/shortenAddress\";\r\nimport { SyncValidators } from '../services/Eth2WalletService';\r\nimport { GetRewards } from '../services/EthTxHistoryService';\r\n\r\nconst selector = (state) => {\r\n const { cache, fees, price, accountBalance, stabilityDeposit, total } = state;\r\n return {\r\n cache,\r\n fees,\r\n price,\r\n accountBalance,\r\n stabilityDeposit,\r\n total,\r\n validationContext: selectForCacheChangeValidation(state)\r\n };\r\n};\r\n\r\nconst TRANSACTION_ID = \"cache-management\";\r\n\r\nconst RewardStatementDetail = (props) => {\r\n const {\r\n cache: previousCache\r\n , fees\r\n , price: ethPrice\r\n , accountBalance: walletEthAmount\r\n , stabilityDeposit\r\n , total: systemTotal\r\n , rewardEthAmt\r\n , validationContext } = useLiquitySelector(selector);\r\n const {\r\n account,\r\n liquity: { send: liquitySend, populate: liquityTry, store, connection }\r\n } = useLiquity();\r\n const multiDepositAddress = ((connection || {}).addresses || {}).multipleDeposit;\r\n const walletAddress = (connection || {}).userAddress;\r\n\r\n const transactionState = useMyTransactionState(TRANSACTION_ID);\r\n\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n rewards: [],\r\n cacheOpened: !!previousCache,\r\n ethStakingAmt: 0,\r\n ethStakingAmtError: undefined,\r\n ethMinStakingAmt: undefined,\r\n errorFlag: false,\r\n\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n });\r\n\r\n const [didMount, setDidMount] = useState(false);\r\n\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, global, Eth2Wallet, EthTxHistory } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n global: reduxState.global,\r\n Eth2Wallet: reduxState.Eth2Wallet,\r\n EthTxHistory: reduxState.EthTxHistory,\r\n };\r\n });\r\n\r\n // log.debug(kycPerson, user, auth);\r\n // simulating class(this -> _this)\r\n const [_state, setState] = useState(0);\r\n\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n setMyState({ ...myState, ...newState });\r\n setState(_state + 1);\r\n },\r\n\r\n Back: (event) => {\r\n props.history.push('/rewardStatements');\r\n },\r\n\r\n\r\n handleSubmit: (event) => {\r\n // alert('A name was submitted: ' + this.state.value);\r\n event.preventDefault();\r\n }\r\n }), [_state, myState, props.history]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n const { mstId } = { ...props.match.params };\r\n if (!didMount && (!(EthTxHistory || {}).AuthCol || true)) {\r\n const from = walletAddress;\r\n dispatch(EthTxHistoryReduxObj.SetScreenCriteria('', { Eth1WithdrawalAddr10: from, }, 0));\r\n dispatch(EthTxHistoryReduxObj.LoadPage('MstRecord', { mstId: mstId || '!', DtlBlob: 'C', MstBlob: 'C' }));\r\n\r\n GetRewards(walletAddress)\r\n .then(data => {\r\n log.debug(\"rewards result\", data);\r\n _this.setState({\r\n rewards: (data.data || {}).Dtl || (data.data || {}).dtl || [],\r\n });\r\n })\r\n .catch(error => {\r\n log.debug(\"rewards result\", error);\r\n _this.setState({\r\n rewards: [],\r\n });\r\n });\r\n\r\n }\r\n\r\n if (!didMount && (!(Eth2Wallet || {}).AuthCol || true)) {\r\n setDidMount(true);\r\n // must use the dispatch form for the redux binding\r\n const from = walletAddress;\r\n\r\n SyncValidators(walletAddress, multiDepositAddress)\r\n .then(data => {\r\n log.debug(\"validator sync result\", data);\r\n })\r\n .catch(error => {\r\n log.debug(\"validator sync result\", error);\r\n })\r\n\r\n dispatch(Eth2WalletReduxObj.SetScreenCriteria('', { Eth1WithdrawalAddr10: from, }, 0));\r\n dispatch(Eth2WalletReduxObj.LoadPage('MstRecord', { mstId: mstId || '!', DtlBlob: 'C', MstBlob: 'C' }));\r\n store.refresh();\r\n }\r\n\r\n }, [didMount, dispatch, Eth2Wallet, EthTxHistory, props, _this, ethPrice, store, walletAddress, multiDepositAddress]);\r\n\r\n // ComponentDidUpdate() equivalent\r\n useEffect(() => {\r\n\r\n }, [transactionState, _this]);\r\n\r\n // body of the render()\r\n const toUTCString = (d) => new Date(d.toString()).toUTCString();\r\n const toDecimalStr = (n, d) => n * 1 >= 0 ? '+' + Decimal.fromBigNumberString(n).prettify(d || 8) : '-' + Decimal.fromBigNumberString(n.substring(1)).prettify(d || 8);\r\n const toFullDecimalStr = (n, d) => n * 1 >= 0 ? '+' + Decimal.fromBigNumberString(n).toString() : '-' + Decimal.fromBigNumberString(n.substring(1)).toString();\r\n const getRewards = (n) => (n.StakeRewardAmt22 > 0) ? toDecimalStr(n.StakeRewardAmt22) : (n.MiningRewardAmt22 > 0) ? toDecimalStr(n.MiningRewardAmt22) : toDecimalStr(n.MEVRewardAmt22);\r\n const getStatus = (n) => (n.StakeAmt22 > 0) ? 'Deposit' : (n.WithdrawAmt22 < 0) ? 'Withdraw' : 'Rewards';\r\n const getAmount = (n) => (n.StakeAmt22 > 0) ? toDecimalStr(n.StakeAmt22) : (n.WithdrawAmt22 < 0) ? toDecimalStr(n.WithdrawAmt22) : getRewards(n);\r\n\r\n const txList = ((EthTxHistory || {}).DtlList || {}).data || [];\r\n\r\n console.log('txList', txList);\r\n\r\n // const rewards = (_this.state.rewards || []);\r\n\r\n // console.log('rewards', rewards);\r\n\r\n const rewardStatements = [{ date: \"31 Mar 2023\", transaction: \"March Rewards\", stake: \"\", rewards: \"2.86 ETH\" }\r\n , { date: \"1 Mar 2023\", transaction: \"Open Validator 21920 (0xcf3...s2d)\", stake: \"32.00 ETH\", rewards: \"\" }\r\n ]\r\n\r\n const currMst = ((Eth2Wallet || {}).Mst || {});\r\n const currDtlList = ((Eth2Wallet || {}).DtlList || {}).data || [];\r\n const stakedStatus = ['1', '2', '3']; // DEPOSITED, PENDING, ACTIVE\r\n const totalStaked = currDtlList.filter(x => stakedStatus.includes(x.ValidatorStatusCd5)).length * 32;\r\n\r\n console.log('currDtlList', currDtlList);\r\n\r\n return (\r\n // export const Dashboard = () => (\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

Monthly Reward Statement

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

Period

March 1 2023 - March 31 2023

Account

0xF123...c28a

\r\n
\r\n
\r\n {/* { rewards.length > 0 && */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {rewardStatements.map((item, i) => (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n {/*
*/}\r\n \r\n
DateTransactionTotal StakeRewards
\r\n {item.date}%\r\n \r\n {item.transaction}\r\n \r\n {item.stake}\r\n \r\n {item.rewards}\r\n
\r\n {/* }\r\n {\r\n rewards.length == 0 &&\r\n

No reward statements.

\r\n } */}\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n { _this.Back() }}> Back\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRouter(RewardStatementDetail);\r\n","import React from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col, Table } from 'reactstrap';\r\nimport log from '../helpers/logger';\r\nimport RintagiScreen from '../components/custom/Screen';\r\nimport { registerBlocker, unregisterBlocker } from '../helpers/navigation';\r\nimport { login } from '../redux/Auth';\r\nimport { Container, Flex, Spinner, Heading } from \"theme-ui\";\r\n\r\nclass WithdrawConfirm extends RintagiScreen {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n initialing: true,\r\n reduxRefreshed: false,\r\n }\r\n\r\n this.DateChange = this.DateChange.bind(this);\r\n this.DropdownChange = this.DropdownChange.bind(this);\r\n this.TextChange = this.TextChange.bind(this);\r\n this.ValidatePage = this.ValidatePage.bind(this);\r\n this.OnModalReturn = this.OnModalReturn.bind(this);\r\n this.setDirtyFlag = this.setDirtyFlag.bind(this);\r\n this.DropdownChangeV1 = this.DropdownChangeV1.bind(this);\r\n\r\n const loadPageOptions = { SkipMetaData: true, SkipSupportingData: true };\r\n }\r\n\r\n /* end of form related handling functions */\r\n\r\n componentDidMount(a, b) {\r\n const { mstId } = { ...this.props.match.params };\r\n }\r\n\r\n componentDidUpdate(prevProps, prevStates) {\r\n log.debug('component did update');\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.blocker) {\r\n unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n }\r\n\r\n Continue() {\r\n this.props.history.push('/dashboard');\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n
\r\n

Your withdraw request is received

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

Thank you for submitting your withdrawal request. The withdrawal status is currently pending, and you can expect an update within the next few days on your dashboard.

\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n { this.Continue() }}>Go to Dashboard\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { login: login },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(WithdrawConfirm));","import { Container } from \"theme-ui\";\r\n\r\nimport React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { logout, login } from '../redux/Auth';\r\n\r\nimport {\r\n selectForCacheChangeValidation,\r\n} from \"../components/Cache/validation/validateCacheChange\";\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar, Table } from 'reactstrap';\r\nimport log from '../helpers/logger';\r\nimport { GetRates } from '../services/StakePaymentService';\r\nimport ethereumImg from '../img/ethereum.png';\r\nimport fintruxImg from '../img/fintrux.png';\r\n\r\nconst selector = (state) => {\r\n const { cache, fees, price, accountBalance, stabilityDeposit, total } = state;\r\n return {\r\n cache,\r\n fees,\r\n price,\r\n accountBalance,\r\n stabilityDeposit,\r\n total,\r\n validationContext: selectForCacheChangeValidation(state)\r\n };\r\n};\r\n\r\nconst Pricing = (props) => {\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n ftxRate: undefined,\r\n ethRate: undefined,\r\n });\r\n\r\n const [didMount, setDidMount] = useState(false);\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, global } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n global: reduxState.global,\r\n };\r\n });\r\n\r\n // simulating class(this -> _this)\r\n const [_state, setState] = useState(0);\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n setMyState({ ...myState, ...newState });\r\n setState(_state + 1);\r\n },\r\n\r\n handleSubmit: (event) => {\r\n // alert('A name was submitted: ' + this.state.value);\r\n event.preventDefault();\r\n },\r\n\r\n }), [_state, myState, props.history]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n if (!didMount) {\r\n setDidMount(true);\r\n\r\n const getRate = GetRates().then(data => {\r\n console.log('get rates', data.data);\r\n return data.data;\r\n });\r\n\r\n const srvCalls = Promise.all([\r\n getRate\r\n ]).then(values => {\r\n console.log('values', values);\r\n _this.setState({\r\n crAmt: values[0].CR,\r\n usdRate: values[0].USD,\r\n ftxRate: values[0].FTX,\r\n ethRate: values[0].ETH,\r\n });\r\n });\r\n\r\n }\r\n\r\n }, [didMount, dispatch, props, _this]);\r\n\r\n // ComponentDidUpdate() equivalent\r\n useEffect(() => {\r\n\r\n }, [_this]);\r\n\r\n return (\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

Pricing

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

\r\n {myState.crAmt} Credit = $ {myState.usdRate} USD\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \"ethereum\"\r\n

\r\n {myState.crAmt} Credit = {myState.ethRate} ETH
\r\n\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \"fintrux\"\r\n

\r\n {myState.crAmt} Credit = {myState.ftxRate} FTX
\r\n\r\n \r\n
\r\n
\r\n \r\n

Note: Prices may not match any listed conversion rates; they are set for your convenience only.

\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRouter(Pricing);\r\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAWCAYAAADwza0nAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAASBJREFUeNpi/P//PwM2wMjImAmkmIHyU7DK49EIkwBp/ocuz4RD03Qk7iysJoNsRMZAYAgSRsOmGOqwaLwLVfwPSeMDvBqBoAZJ8T80WxuxagQCWTRN/7A4WQGbxpNomrBpPIOiEQiSCNiEjNNgUSgMxH9w+AsbBqkRBWk8Q4RidHyBGUi8AmIVIJZiIA6cBeJmEEME6uZQIH6Lx5b3QBwOVSsCC5hDoOQHFWzCoqkFKscIVZsCC9UtUAWZUD4XEO8D4v1AzA0Vy4Cq2YkejzehEreB2A5J3AaIb0Hl7mJLAKBo+YvkvOVQjOxkMVxp1RdP4AQSyh1TsSSGWQSzFVTzdSRNt7GqwaFRFluOQMYsOEqFx8Diow4atw+wqQEIMADR7ZH7dzpBgwAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAUCAYAAABmvqYOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAehJREFUeNqclUsoRGEUx+fOjEeN12Rlock8ZCM2UpLksbL2TB5lyootZSGRbCwsZcNGkkdpSrOTGpmNsSAKRRZSSh4NwvU/9b/6ut07M3z1q/nuOed/v3se32iO1CsX1IA20ABKwDe4BDsgouv6leMfqx0kgJ6CZzAHCvAShxnNQtQF5sGI8uwQnFAsB/hAPchX7P0QPE934kXlZHugxcYvAGYV32vgV09uXn2K8xrIyyB9neCdMVHgtBL3ghs6RYA7k8JQJKwcathKfIzGJxDKtOqKUJTxMbN4IdincfsvLaUINTP+S34b3dIIZkAd/TvAukmjCPSyk8zrE6yAbHBB3zswJMY4NzoHpNpCoDxNvwd4+lPuX6TTpGhOisr6AK8W4mJ/48TegkegEXmeNLKk+GtGKx3TII5BC/EgbeLTw0AncfPUxeBBaYqwEexjeuSNVWnEu2wKWsN42QyYW3Gahm4b8aQyiQl+7aYUmULLtJ+BLLN4KQuxm0Zc5Z4iTayXbCbsxn+cDv4UadkCU2BSLisKG7k+Ah47cenjA4tBUsVbleeD7C6jiLWpLi6j6nIbjtqIL4EF5vY3PXJ7mu9zu+XlfV7JfYiTaDVAG6Ai0z8LdXn42WX8GhcLKzmOgVWIxO2CfwQYANJqKG5WNEpSAAAAAElFTkSuQmCC\"","import React from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col, Table } from 'reactstrap';\r\nimport log from '../helpers/logger';\r\nimport RintagiScreen from '../components/custom/Screen';\r\nimport { registerBlocker, unregisterBlocker } from '../helpers/navigation';\r\nimport { login } from '../redux/Auth';\r\nimport { Container, Flex, Spinner, Heading } from \"theme-ui\";\r\n\r\nclass StmtDownloadConfirm extends RintagiScreen {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n initialing: true,\r\n reduxRefreshed: false,\r\n }\r\n\r\n this.DateChange = this.DateChange.bind(this);\r\n this.DropdownChange = this.DropdownChange.bind(this);\r\n this.TextChange = this.TextChange.bind(this);\r\n this.ValidatePage = this.ValidatePage.bind(this);\r\n this.OnModalReturn = this.OnModalReturn.bind(this);\r\n this.setDirtyFlag = this.setDirtyFlag.bind(this);\r\n this.DropdownChangeV1 = this.DropdownChangeV1.bind(this);\r\n\r\n const loadPageOptions = { SkipMetaData: true, SkipSupportingData: true };\r\n }\r\n\r\n /* end of form related handling functions */\r\n\r\n componentDidMount(a, b) {\r\n const { mstId } = { ...this.props.match.params };\r\n }\r\n\r\n componentDidUpdate(prevProps, prevStates) {\r\n log.debug('component did update');\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.blocker) {\r\n unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n }\r\n\r\n Continue() {\r\n this.props.history.goBack();\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n \r\n \r\n \r\n
\r\n
\r\n

Statement Downloaded

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

Your statement has been successfully downloaded. Kindly review your download folder. In case the download was interrupted, kindly return to the statement screen and attempt it once more.

\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n { this.Continue() }}>Go Back to Statement\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { login: login },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(StmtDownloadConfirm));","export const CHANGE_SIDEBAR_VISIBILITY = 'CHANGE_SIDEBAR_VISIBILITY';\r\nexport const CHANGE_MOBILE_SIDEBAR_VISIBILITY = 'CHANGE_MOBILE_SIDEBAR_VISIBILITY';\r\nexport const HIDE_MOBILE_SIDEBAR_VISIBILITY = 'HIDE_MOBILE_SIDEBAR_VISIBILITY';\r\nexport const HIDE_SIDEBAR = 'HIDE_SIDEBAR';\r\n\r\n//reducer\r\nconst initialState = {\r\n show: false,\r\n collapse: false,\r\n hide: false\r\n};\r\n\r\nexport function sidebarReducer(state = initialState, action) {\r\n switch (action.type) {\r\n case CHANGE_SIDEBAR_VISIBILITY:\r\n return {...state, collapse: !state.collapse};\r\n case CHANGE_MOBILE_SIDEBAR_VISIBILITY:\r\n return {...state, show: !state.show};\r\n case HIDE_MOBILE_SIDEBAR_VISIBILITY:\r\n return {...state, show: false};\r\n case HIDE_SIDEBAR:\r\n return {...state, hide: action.payload.status};\r\n default:\r\n return state;\r\n }\r\n}\r\n\r\n//action\r\nexport function changeSidebarVisibility() {\r\n return {\r\n type: CHANGE_SIDEBAR_VISIBILITY\r\n };\r\n}\r\n\r\nexport function changeMobileSidebarVisibility() {\r\n return {\r\n type: CHANGE_MOBILE_SIDEBAR_VISIBILITY\r\n };\r\n}\r\n\r\nexport function hideMobileSidebarVisibility() {\r\n return {\r\n type: HIDE_MOBILE_SIDEBAR_VISIBILITY\r\n };\r\n}\r\n\r\n\r\nexport function hideSidebar(status) {\r\n return {\r\n type: HIDE_SIDEBAR,\r\n payload: {status: status}\r\n };\r\n}\r\n","// import React from 'react';\r\n// import PropTypes from 'prop-types';\r\n\r\n// const icon = `${process.env.PUBLIC_URL}/img/burger.svg`;\r\n\r\n// const TopbarSidebarButton = ({ changeMobileSidebarVisibility, changeSidebarVisibility }) => (\r\n//
\r\n// \r\n// \r\n//
\r\n// );\r\n\r\n// TopbarSidebarButton.propTypes = {\r\n// changeMobileSidebarVisibility: PropTypes.func.isRequired,\r\n// changeSidebarVisibility: PropTypes.func.isRequired,\r\n// };\r\n\r\n// export default TopbarSidebarButton;\r\n\r\nimport React, {PureComponent} from 'react';\r\nimport MenuIcon from 'mdi-react/MenuIcon';\r\nimport {changeSidebarVisibility, changeMobileSidebarVisibility} from '../../../redux/SideBar';\r\nimport {connect} from 'react-redux';\r\n\r\nconst icon = process.env.PUBLIC_URL + '/img/burger.svg';\r\n\r\nclass TopbarSidebarButton extends PureComponent {\r\n \r\n changeSidebarVisibility = () => {\r\n this.props.dispatch(changeSidebarVisibility());\r\n };\r\n \r\n changeMobileSidebarVisibility = () => {\r\n this.props.dispatch(changeMobileSidebarVisibility());\r\n };\r\n \r\n render() {\r\n return (\r\n
\r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default connect(state => {\r\n return {sidebar: state.sidebar};\r\n})(TopbarSidebarButton);\r\n\r\n\r\n","import React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { useLiquity } from \"../../../hooks/LiquityContext\";\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport KycPersonReduxObj, { ShowMstFilterApplied } from '../../../redux/KycPerson';\r\nimport KycCorporateReduxObj from '../../../redux/KycCorporate';\r\nimport { UserAccount } from \"../../../components/UserAccount\";\r\nimport { SystemInfoPopup } from \"../../../components/SystemInfoPopup\";\r\n\r\nconst Ava = `${process.env.PUBLIC_URL}/img/ava.png`;\r\n\r\nconst TopbarProfile = (props) => {\r\n const { account } = useLiquity();\r\n\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n });\r\n\r\n const [spinnerStatus, setSpinnerStatus] = useState(true);\r\n const [didMount, setDidMount] = useState(false);\r\n\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n // const { kycPerson, KycCorporate } = useSelector((reduxState) => {\r\n // return {\r\n // kycPerson: reduxState.KycPerson,\r\n // KycCorporate: reduxState.KycCorporate\r\n // };\r\n // });\r\n\r\n const [_state, setState] = useState(0);\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n setMyState({ ...myState, ...newState });\r\n setState(_state + 1);\r\n },\r\n\r\n }), [_state, myState]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n // const { mstId } = { ...props.match.params };\r\n // if (!didMount && (!(kycPerson || {}).AuthCol || true)) {\r\n // setDidMount(true);\r\n // // must use the dispatch form for the redux binding\r\n // dispatch(KycPersonReduxObj.LoadPage('MstRecord', { mstId: mstId || '!' }))\r\n // .then(data => {\r\n // setTimeout(() => setSpinnerStatus(false), 0);\r\n // })\r\n // // store.refresh();\r\n // }\r\n\r\n // if (!didMount && (!(KycCorporate || {}).AuthCol || true)) {\r\n // setDidMount(true);\r\n // // must use the dispatch form for the redux binding\r\n // dispatch(KycCorporateReduxObj.LoadPage('MstRecord', { mstId: mstId || '!' }))\r\n // .then(data => {\r\n // setTimeout(() => setSpinnerStatus(false), 0);\r\n // });\r\n // // store.refresh();\r\n // }\r\n\r\n }, [didMount, dispatch, props, _this]);\r\n\r\n // //KYC individual info\r\n // const currMst = ((kycPerson || {}).Mst || {});\r\n // const AllowAdminStatistic = (currMst.AllowAdminStatistic15 || \"\") == \"Y\" ? true : false;\r\n // const kycPersonId = currMst.KycPersonId15 || \"\";\r\n // const internalStatus = currMst.InternalStatus15 || \"\";\r\n\r\n // // //KYC Corporate info \r\n // const currCorpMst = ((KycCorporate || {}).Mst || {});\r\n // const kycCorpId = currCorpMst.KycCorpId16 || \"\";\r\n // const corpInternalStatus = currCorpMst.InternalStatus16 || \"\";\r\n\r\n // const showSystemInfo = ((kycPersonId != \"\" && internalStatus == 'AP') || (kycCorpId != \"\" && corpInternalStatus == 'AP')) ? true : false;\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n {/*
\r\n {showSystemInfo && }\r\n
*/}\r\n
\r\n );\r\n};\r\n\r\nexport default withRouter(TopbarProfile);\r\n\r\n\r\n// import React, { useState } from 'react';\r\n// import DownIcon from 'mdi-react/ChevronDownIcon';\r\n// import { Collapse } from 'reactstrap';\r\n// import TopbarMenuLink from './TopbarMenuLink';\r\n// import { UserAccount } from \"../../../components/UserAccount\";\r\n// import { SystemInfoPopup } from \"../../../components/SystemInfoPopup\";\r\n\r\n// const Ava = `${process.env.PUBLIC_URL}/img/ava.png`;\r\n\r\n// const TopbarProfile = () => {\r\n// const [isCollapsed, setIsCollapsed] = useState(false);\r\n\r\n// const handleToggleCollapse = () => {\r\n// setIsCollapsed(!isCollapsed);\r\n// };\r\n\r\n// //put logic here ---------------------------------------------------------\r\n\r\n// return (\r\n//
\r\n//
\r\n// \r\n//
\r\n//
\r\n// \r\n//
\r\n//
\r\n// );\r\n// };\r\n\r\n// export default TopbarProfile;","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link } from 'react-router-dom';\r\nimport TopbarSidebarButton from './TopbarSidebarButton';\r\nimport TopbarProfile from './TopbarProfile';\r\n\r\nconst Topbar = ({ changeMobileSidebarVisibility, changeSidebarVisibility }) => (\r\n
\r\n {/*
*/}\r\n
\r\n \r\n {/* staked.finance */}\r\n \"staked.finance\"\r\n
\r\n
\r\n \r\n
\r\n {/*
*/}\r\n
\r\n);\r\n\r\nTopbar.propTypes = {\r\n changeMobileSidebarVisibility: PropTypes.func.isRequired,\r\n changeSidebarVisibility: PropTypes.func.isRequired,\r\n};\r\n\r\nexport default Topbar;\r\n\r\n// import React, {PureComponent} from 'react';\r\n// import TopbarSidebarButton from './TopbarSidebarButton';\r\n// import {Link} from 'react-router-dom';\r\n// import { bindActionCreators } from 'redux';\r\n// import { connect } from 'react-redux';\r\n// import { login, logout, getCurrentUser } from '../../../redux/Auth';\r\n// // import LoginInfo from '../../../components/custom/LoginInfo'\r\n// import TopbarProfile from './TopbarProfile';\r\n\r\n// class Topbar extends PureComponent {\r\n// render() {\r\n// return (\r\n//
\r\n//
\r\n//
\r\n// \r\n// \r\n// {/* */}\r\n// STAKE.FINANCE\r\n// \r\n//
\r\n//
\r\n// {/* */}\r\n// \r\n//
\r\n//
\r\n//
\r\n// )\r\n// }\r\n// }\r\n\r\n// const mapStateToProps = (state) => ({\r\n// user: (state.auth || {}).user,\r\n// auth: state.auth,\r\n// menu: (state.auth || {}).menu,\r\n// });\r\n\r\n// const mapDispatchToProps = (dispatch) => (\r\n// bindActionCreators(Object.assign({},\r\n// { login: login },\r\n// { logout: logout },\r\n// { getCurrentUser: getCurrentUser },\r\n// ), dispatch)\r\n// )\r\n\r\n// export default connect(mapStateToProps, mapDispatchToProps)(Topbar);\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Badge } from 'reactstrap';\r\nimport { NavLink } from 'react-router-dom';\r\n\r\nconst SidebarLink = ({\r\n title, icon, newLink, route, onClick,\r\n}) => (\r\n \r\n
  • \r\n {icon ? : ''}\r\n

    \r\n {title}\r\n {newLink ? New : ''}\r\n

    \r\n
  • \r\n \r\n);\r\n\r\nSidebarLink.propTypes = {\r\n title: PropTypes.string.isRequired,\r\n icon: PropTypes.string,\r\n newLink: PropTypes.bool,\r\n route: PropTypes.string,\r\n onClick: PropTypes.func,\r\n};\r\n\r\nSidebarLink.defaultProps = {\r\n icon: '',\r\n newLink: false,\r\n route: '/',\r\n onClick: () => {},\r\n};\r\n\r\nexport default SidebarLink;\r\n","import React, { useState, useEffect } from \"react\";\r\nimport { useLiquitySelector } from \"@liquity/lib-react\";\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\n\r\nconst selector = (state) => {\r\n const { cache, fees, price, accountBalance, paydBalance, stabilityDeposit, paydInRewardsPool, total } = state;\r\n return {\r\n cache,\r\n fees,\r\n price,\r\n accountBalance,\r\n paydBalance,\r\n stabilityDeposit,\r\n paydInRewardsPool,\r\n total,\r\n };\r\n };\r\n// we use this to 're-export' hooks as component that can be used by class based compnents, via callback\r\nexport const UseLiquity = ({ getLiquity, ...rest }) => {\r\n const {\r\n cache\r\n , fees\r\n , price: ethPrice\r\n , accountBalance: walletEthAmount\r\n , paydBalance: walletPaydAmount\r\n , stabilityDeposit\r\n , paydInRewardsPool: paydInRewardsPool\r\n , total: systemTotal\r\n } = useLiquitySelector(selector);\r\n\r\n const {\r\n// liquity: { send: liquitySend, populate: liquityTry, store, connection }\r\n liquity\r\n } = useLiquity();\r\n\r\n useEffect(() => {\r\n getLiquity(liquity,{cache, fees, ethPrice, walletEthAmount, walletPaydAmount, paydInRewardsPool})\r\n }, [liquity, getLiquity, cache, fees, ethPrice, walletEthAmount, walletPaydAmount, paydInRewardsPool]);\r\n\r\n return null // component does not render anything\r\n}","import React, {PureComponent} from 'react';\r\nimport {Collapse} from 'reactstrap';\r\nimport PropTypes from 'prop-types';\r\n\r\nexport default class SidebarCategory extends PureComponent {\r\n static propTypes = {\r\n title: PropTypes.string.isRequired,\r\n icon: PropTypes.string\r\n };\r\n \r\n constructor(props) {\r\n super(props);\r\n this.toggle = this.toggle.bind(this);\r\n this.state = {\r\n collapse: false\r\n };\r\n }\r\n \r\n toggle() {\r\n this.setState({collapse: !this.state.collapse});\r\n }\r\n \r\n render() {\r\n return (\r\n
    \r\n
  • \r\n {this.props.icon ? : ''}\r\n

    {this.props.title}

    \r\n \r\n
  • \r\n \r\n
      \r\n
      \r\n {this.props.children}\r\n
      \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n}","// import React from 'react';\r\nimport React, { PureComponent } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport SidebarLink from './SidebarLink';\r\nimport SidebarCategory from './SidebarCategory';\r\n// import { logout } from '../../../redux/Auth';\r\nimport { login, logout, getCurrentUser } from '../../../redux/Auth';\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators } from 'redux';\r\nimport { Redirect, NavLink, Link } from 'react-router-dom';\r\nimport { pagesRoutes } from '../../../app/Router.js';\r\nimport { getDefaultPath } from '../../../helpers/utils'\r\n\r\nimport log from '../../../helpers/logger';\r\n\r\nimport { UseLiquity } from \"../../../components/UseLiquity\";\r\nimport { PriceDisplay } from \"../../../components/PriceDisplay\";\r\nimport StakeWalletAddressReduxObj from '../../../redux/StakeWalletAddress';\r\n\r\nclass SidebarContent extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n walletAddr: \"\",\r\n };\r\n\r\n this.handleLogout = this.handleLogout.bind(this);\r\n this.handleHideSidebar = this.handleHideSidebar.bind(this);\r\n this.liquityCallback = this.liquityCallback.bind(this);\r\n }\r\n\r\n // componentDidMount(a, b) {\r\n // const { mstId } = { ...this.props.match.params || \"\"};\r\n // if (!(this.props.StakeWalletAddress || {}).AuthCol || true) {\r\n // this.props.LoadPage('MstRecord', { mstId: mstId || '!' });\r\n // }\r\n // }\r\n\r\n handleHideSidebar = () => {\r\n // onClick();\r\n this.props.onClick();\r\n };\r\n\r\n handleLogout(event) {\r\n this.props.onClick();\r\n this.props.logout();\r\n }\r\n\r\n hideSidebar = () => {\r\n this.props.onClick();\r\n };\r\n\r\n liquityCallback(liquity, liquityState) {\r\n const _this = this;\r\n const walletAddress = ((liquity || {}).connection || {}).userAddress;\r\n _this.setState({\r\n walletAddr: walletAddress,\r\n });\r\n }\r\n\r\n render() {\r\n const currAddrCheckSearchList = ((this.props.StakeWalletAddress || {}).SearchList || {}).data || [];\r\n const currentAddress = currAddrCheckSearchList.filter(obj => { return obj.detailR === this.state.walletAddr }) || [];\r\n const currentStatusCd = ((currentAddress)[0] || []).labelR || \"\";\r\n\r\n //check if this address is declined\r\n const includeDeclinedAddress = currentStatusCd == \"D\" ? true : false;\r\n const walletUsedByOthers = false;\r\n log.debug(\"sidebarcheck\", this.props.StakeWalletAddress, includeDeclinedAddress, walletUsedByOthers);\r\n\r\n var showMenu = false;\r\n if (!includeDeclinedAddress && !walletUsedByOthers && currentStatusCd == \"A\") {\r\n showMenu = true;\r\n }\r\n\r\n return (\r\n
    \r\n \r\n {showMenu &&\r\n
      \r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n
    \r\n }\r\n\r\n {this.props.user.UsrName &&
      \r\n \r\n \r\n
    \r\n }\r\n\r\n
    \r\n
    {this.props.user.UsrName}
    \r\n {/* */}\r\n
    : support@fintrux.com
    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n auth: state.auth,\r\n StakeWalletAddress: state.StakeWalletAddress\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { login: login },\r\n { logout: logout },\r\n { getCurrentUser: getCurrentUser },\r\n { LoadPage: StakeWalletAddressReduxObj.LoadPage.bind(StakeWalletAddressReduxObj) },\r\n ), dispatch)\r\n)\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SidebarContent);","// import React from 'react';\r\nimport Scrollbar from 'react-smooth-scrollbar';\r\n// import classNames from 'classnames';\r\nimport PropTypes from 'prop-types';\r\n// import SidebarContent from './SidebarContent';\r\n\r\nimport React, { PureComponent } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators } from 'redux';\r\n//import Scrollbar from 'react-smooth-scrollbar';\r\n// import Scrollbar from '../../../components/custom/ScrollBar';\r\nimport { withRouter } from 'react-router';\r\nimport classNames from 'classnames';\r\nimport SidebarContent from './SidebarContent';\r\nimport { changeMobileSidebarVisibility, hideSidebar } from '../../../redux/SideBar';\r\nimport { pagesRoutes } from '../../../app/Router.js';\r\nimport log from '../../../helpers/logger';\r\nimport { login, logout, getCurrentUser } from '../../../redux/Auth';\r\n\r\nclass Sidebar extends PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n changeMobileSidebarVisibility = () => {\r\n this.props.dispatch(changeMobileSidebarVisibility());\r\n };\r\n\r\n render() {\r\n let sidebarClass = classNames({\r\n 'sidebar': true,\r\n 'sidebar--show': this.props.sidebar.show,\r\n 'sidebar--collapse': this.props.sidebar.collapse\r\n });\r\n\r\n return (\r\n
    \r\n {/* {this.props.user.UsrName && */}\r\n
    \r\n {/* */}\r\n {/*
    */}\r\n \r\n
    \r\n { }}\r\n />\r\n
    \r\n
    \r\n { }}\r\n />\r\n
    \r\n
    \r\n
    \r\n {/* } */}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nSidebar.propTypes = {\r\n sidebarShow: PropTypes.bool.isRequired,\r\n sidebarCollapse: PropTypes.bool.isRequired,\r\n changeMobileSidebarVisibility: PropTypes.func.isRequired,\r\n changeSidebarVisibility: PropTypes.func.isRequired,\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n auth: state.auth,\r\n menu: (state.auth || {}).menu,\r\n sidebar: state.sidebar,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { login: login },\r\n { logout: logout },\r\n { getCurrentUser: getCurrentUser },\r\n ), dispatch)\r\n)\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Sidebar);","import React, { useState } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport classNames from 'classnames';\r\nimport Topbar from './topbar/Topbar';\r\nimport Sidebar from './sidebar/Sidebar';\r\n\r\nconst Layout = () => {\r\n const [isSidebarShown, setIsSidebarShown] = useState(false);\r\n const [isSidebarCollapsed, setIsSidebarCollapsed] = useState(false);\r\n const layoutClass = classNames({\r\n layout: true,\r\n 'layout--collapse': isSidebarCollapsed,\r\n });\r\n\r\n const changeSidebarVisibility = () => {\r\n setIsSidebarCollapsed(!isSidebarCollapsed);\r\n };\r\n\r\n const changeMobileSidebarVisibility = () => {\r\n setIsSidebarShown(!isSidebarShown);\r\n };\r\n\r\n return (\r\n
    \r\n \r\n \r\n
    \r\n );\r\n};\r\n\r\nexport default withRouter(Layout);\r\n","import React, {PureComponent} from 'react';\r\nimport {connect} from 'react-redux';\r\nimport classNames from 'classnames';\r\n\r\n\r\nclass MainWrapper extends PureComponent {\r\n\r\n render() {\r\n let wrapperClass = classNames({\r\n 'wrapper': true,\r\n 'wrapper--full-width': this.props.sidebar.collapse,\r\n });\r\n \r\n return (\r\n
    \r\n
    \r\n {this.props.children}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default connect(state => {\r\n return {\r\n sidebar: state.sidebar,\r\n }\r\n})(MainWrapper);","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport ReCAPTCHA from \"react-google-recaptcha\";\r\nimport { getUrlBeforeRouter } from \"../../helpers/formatter\";\r\n\r\nconst TEST_SITE_KEY = \"6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI\";\r\n// const PRODUCTION_SITE_KEY = \"6Lee3tsUAAAAAB5JOiK3xtm--Jb6YI8-Yb3twsV9\";\r\n//recaptcha key for cases.fintrux.com\r\nconst PRODUCTION_SITE_KEY = \"6Lf8oRopAAAAAFwFHbDfk_dn28mFqJNa2zsrY9PZ\"\r\n\r\nconst DELAY = 1500;\r\n\r\nlet rerenders = 0;\r\n\r\nexport default class Recaptcha extends React.Component {\r\n constructor(props, ...args) {\r\n super(props, ...args);\r\n this.state = {\r\n fireRerender: rerenders,\r\n callback: \"not fired\",\r\n value: \"[empty]\",\r\n load: false,\r\n expired: \"false\"\r\n };\r\n this._reCaptchaRef = React.createRef();\r\n }\r\n\r\n componentDidMount() {\r\n setTimeout(() => {\r\n this.setState({ load: true });\r\n }, DELAY);\r\n console.log(\"didMount - reCaptcha Ref-\", this._reCaptchaRef);\r\n }\r\n\r\n handleChange = value => {\r\n console.log(\"Captcha value:\", value);\r\n this.setState({ value });\r\n if (value !== null || value !== \"\"){\r\n this.props.onChange(value);\r\n }\r\n };\r\n\r\n asyncScriptOnLoad = () => {\r\n this.setState({ callback: \"called!\" });\r\n console.log(\"scriptLoad - reCaptcha Ref-\", this._reCaptchaRef);\r\n };\r\n handleExpired = () => {\r\n this.setState({ expired: \"true\" });\r\n };\r\n handleExpired2 = () => {\r\n this.setState({ expired2: \"true\" });\r\n };\r\n\r\n render() {\r\n const { value, callback, load, expired } = this.state || {};\r\n\r\n const prdOnly = getUrlBeforeRouter().includes('app2.staked.finance');\r\n\r\n return (\r\n
    \r\n {load && (\r\n \r\n )}\r\n
    \r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router-dom';\r\nimport { Button, Row, Col, Progress, Card, CardBody } from 'reactstrap';\r\nimport log from '../../helpers/logger';\r\nimport { Prompt } from 'react-router';\r\nimport { registerBlocker, unregisterBlocker } from '../../helpers/navigation';\r\nimport ModalDialog from '../../components/custom/ModalDialog';\r\nimport Recaptcha from '../../components/custom/Recaptcha';\r\nimport { setSpinner } from '../../redux/Global';\r\nimport { Formik, Field, Form } from 'formik';\r\nimport CheckIcon from 'mdi-react/CheckIcon';\r\nimport { getQueryString } from '../../helpers/formatter'\r\nimport { isEmailFormat, deepEqualX, deepNotEqualX } from '../../helpers/utils'\r\nimport RintagiScreen from '../../components/custom/Screen';\r\nimport { showNotification } from '../../redux/Notification'\r\nimport { login, getCurrentUser } from '../../redux/Auth'\r\n// import { requestSignUp, activateAccount, resetSignup } from '../../redux/SignUp'\r\nimport { requestResetPwdEmail, resetPassword } from '../../redux/Auth';\r\nimport { Spinner } from \"theme-ui\";\r\n\r\nclass ForgotPassword extends RintagiScreen {\r\n constructor(props) {\r\n super(props);\r\n this.lastValidated = {}\r\n this.state = {\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalClassName: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n changing: false,\r\n }\r\n\r\n this.props.setSpinner(true);\r\n\r\n this.TokenChange = this.TokenChange.bind(this);\r\n this.TextChange = this.TextChange.bind(this);\r\n this.LoseFocus = this.LoseFocus.bind(this);\r\n this.ValidatePage = this.ValidatePage.bind(this);\r\n // this.TermsModal = this.TermsModal.bind(this);\r\n this.confirmUnload = this.confirmUnload.bind(this);\r\n this.OnModalReturn = this.OnModalReturn.bind(this);\r\n this.setDirtyFlag = this.setDirtyFlag.bind(this);\r\n this.onCaptChaChange = this.onCaptChaChange.bind(this);\r\n\r\n this.props.getCurrentUser(true);\r\n }\r\n\r\n LoseFocus(setFieldTouched, validateField, name) {\r\n return function (evt) {\r\n log.debug('lose focus', name);\r\n setFieldTouched(name, true);\r\n //validateField(name);\r\n }\r\n }\r\n ValidateField = name => value => {\r\n log.debug('validate', name, value);\r\n }\r\n\r\n\r\n TextChange(setFieldValue, setFieldTouched, name) {\r\n const _this = this;\r\n return function (evt) {\r\n const value = evt.target.value;\r\n setFieldTouched(name, true);\r\n setFieldValue(name, value);\r\n }\r\n }\r\n\r\n TokenChange(setFieldValue, setFieldTouched, name) {\r\n const _this = this;\r\n return function (evt) {\r\n const value = evt.target.value;\r\n setFieldTouched(name, true);\r\n setFieldValue(name, value.toUpperCase());\r\n }\r\n }\r\n\r\n onCaptChaChange(setFieldValue, setFieldTouched, name) {\r\n return function (evt) {\r\n console.log(evt);\r\n setFieldTouched(name, evt);\r\n setFieldValue(name, evt);\r\n }\r\n }\r\n\r\n setDirtyFlag(dirty) {\r\n /* this is called during rendering but has side-effect, undesirable but only way to pass formik dirty flag around */\r\n if (dirty) {\r\n if (this.blocker) unregisterBlocker(this.blocker);\r\n this.blocker = this.confirmUnload;\r\n registerBlocker(this.confirmUnload);\r\n }\r\n else {\r\n if (this.blocker) unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n if (this.props.updateChangedState) this.props.updateChangedState(dirty);\r\n this.SetCurrentRecordState(dirty);\r\n return true;\r\n }\r\n\r\n confirmUnload(message, callback) {\r\n const confirm = () => {\r\n callback(true);\r\n }\r\n const cancel = () => {\r\n callback(false);\r\n }\r\n this.setState({ ModalOpen: true, ModalSuccess: confirm, ModalCancel: cancel, ModalClassName: 'mw-520', ModalHeader: false, ModalColor: \"danger\", ModalTitle: 'Unsaved Changes', ModalMsg: 'You have unsaved changes on this page. Are you sure you want to leave?' });\r\n }\r\n\r\n /* field validators */\r\n ValidateEmail = (isTouched, setFieldTouched, setFieldValue, values) => value => {\r\n log.debug('validate email', isTouched, value);\r\n if (this.FormGroup && this.FormGroup !== \"Reset\") return;\r\n if (!value) return 'Please enter your email address'\r\n if (!isEmailFormat(value)) return 'Please enter a valid email address'\r\n // if (this.lastValidated.email !== value || this.IsFormSubmit) {\r\n if (this.IsFormSubmit) {\r\n this.lastValidated.email = value;\r\n }\r\n else {\r\n log.debug('not touched, skip expensive validation')\r\n }\r\n }\r\n\r\n ValidateRecaptcha = (isTouched, setFieldTouched, setFieldValue, values) => value => {\r\n log.debug('recaptcha checked', value);\r\n if (this.FormGroup && this.FormGroup !== \"Reset\") return;\r\n if (!value) return \"Your must check the recaptcha to proceed\";\r\n }\r\n\r\n ValidatePassword = (isTouched, setFieldTouched, setFieldValue, values) => value => {\r\n log.debug('validate password', value.length);\r\n if (this.FormGroup && this.FormGroup !== \"Change\") return;\r\n if (!value) return 'Please enter your password'\r\n if (value.length < 8) return 'Your password must be at least 8 characters long'\r\n }\r\n\r\n ValidateReTypePassword = (isTouched, setFieldTouched, setFieldValue, values) => value => {\r\n log.debug('validate retype password', values.password, value);\r\n if (this.FormGroup && this.FormGroup !== \"Change\") return;\r\n if (values.password !== value) return \"Your passwords don't match\";\r\n }\r\n\r\n ValidateToken = (isTouched, setFieldTouched, setFieldValue, values) => value => {\r\n log.debug('validate token', value);\r\n if (this.FormGroup && this.FormGroup !== \"Change\") return;\r\n if (!value) return \"Please enter your confirmation code from the email\";\r\n }\r\n\r\n /* end field validators */\r\n ValidatePage(values) {\r\n /* formik form validation, only non-field level validation should go to here. field validation should be done at individual level and they are always called by formik \r\n inter field validation should be done here\r\n */\r\n const errors = {};\r\n\r\n log.debug('form validate triggered');\r\n if (values.retypeNewPassword !== values.password) {\r\n if (this.FormGroup && this.FormGroup !== \"Change\") return;\r\n errors.retypeNewPassword = \"Your passwords don't match\";\r\n }\r\n\r\n console.log(values.recaptcha);\r\n\r\n if (!values.recaptcha) {\r\n errors.recaptcha = \"Your must check the recaptcha to proceed\";\r\n }\r\n\r\n this.IsFormSubmit = false; // this is used by field validator and needs to be reset when we are here \r\n this.FormGroup = undefined; // this is used by field validator and needs to be reset when we are here \r\n\r\n return errors;\r\n }\r\n\r\n SubmitForm = formGroup => (evt) => {\r\n /* \r\n this is intended to be used as OnClick for form submission. would be run BEFORE actual submit so we can use state/instance variable\r\n to control ValidatePage() behavior as Formik cannot distinguish between field level triggered validation and form level triggered validation\r\n */\r\n this.IsFormSubmit = true;\r\n this.FormGroup = formGroup;\r\n this.FormAction = formGroup;\r\n /* block further, uncomment \r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n */\r\n }\r\n\r\n // resendEmail = (values) => {\r\n // const signUpRequest = this.props.signup;\r\n // log.debug(this.state.email, this.state.password, \"\", signUpRequest.nounce, values.token, signUpRequest.ticketRight)\r\n // this.props.activateAccount(this.state.email, this.state.password, \"\", signUpRequest.nounce, values.token, signUpRequest.ticketRight);\r\n // }\r\n\r\n // ActivateAccount = (values, { setSubmitting, validateField }) => (evt) => {\r\n // this.setState({ changing: true, submitting: true, setSubmitting: setSubmitting });\r\n // const signUpRequest = this.props.signup;\r\n // this.props.activateAccount(signUpRequest.email, signUpRequest.password, signUpRequest.role, signUpRequest.nounce, values.token, signUpRequest.ticketRight, getQueryString(\"refCode\"));\r\n // }\r\n\r\n ResetPassword = (values, { setSubmitting }) => {\r\n // log.debug('signup request submitted');\r\n const recaptchaTicket = \"\";\r\n const restPwdRequest = this.props.auth;\r\n this.IsFormSubmit = false;\r\n this.setState({ submittedOn: Date.now(), submitting: true, setSubmitting: setSubmitting });\r\n\r\n if (this.FormAction === \"Reset\") {\r\n this.props.requestResetPwdEmail(values.email, recaptchaTicket, getQueryString(this.props.history.location, \"refCode\"));\r\n this.props.setSpinner(true);\r\n }\r\n else if (this.FormAction === \"ResendEmail\") {\r\n this.props.requestResetPwdEmail(values.email, \"\", getQueryString(this.props.history.location, \"refCode\"));\r\n this.props.showNotification(\"EMAIL HAS BEEN SENT\", { message: 'Verification email has been resent' });\r\n }\r\n else if (this.FormAction === \"Change\") {\r\n this.setState({ changing: true, email: values.email, password: values.password });\r\n // log.debug(values.email, values.password, \"\", restPwdRequest.nounce, values.token, restPwdRequest.ticketRight)\r\n this.props.resetPassword(values.email, values.password, restPwdRequest.nounce, values.token, restPwdRequest.ticketRight)\r\n .then(() => {\r\n this.setState({ passwordChanged: true });\r\n this.props.showNotification(\"PASSWORD CHANGED SUCCESSFUL\", { message: 'Password has been changed. Please login.' });\r\n this.props.history.push('/login');\r\n })\r\n .catch((error) => {\r\n this.props.showNotification(\"E\", { message: 'Confirmation code is not valid. Please Try it again.' })\r\n })\r\n .finally(() => {\r\n this.setState({ changing: false, submitting: false });\r\n setSubmitting(false);\r\n })\r\n ;\r\n\r\n }\r\n this.FormAction = undefined;\r\n }\r\n\r\n // Needs to be updated\r\n componentDidUpdate(prevProps, prevStates) {\r\n if (\r\n // !(this.props.signup || {}).loading && \r\n this.props.global.pageSpinner) {\r\n const _this = this;\r\n setTimeout(() => _this.props.setSpinner(false), 500);\r\n }\r\n if (this.state.submitting &&\r\n !(this.props.auth || {}).loading\r\n ) {\r\n this.state.setSubmitting(false);\r\n }\r\n\r\n const currentLogin = this.props.user || {};\r\n // const currentSignUp = this.props.signup || {};\r\n // const selectedRole = this.props.global.role || {};\r\n\r\n // log.debug(currentLogin, this.state, this.props.signUp);\r\n // if (currentLogin.UsrId) {\r\n // this.props.resetSignup();\r\n // this.props.history.push(selectedRole.landingPage)\r\n // }\r\n // else {\r\n // if (!this.state.loginTried && this.props.signup.usrId && !currentLogin.loading) {\r\n // this.setState({ loginTried: true });\r\n // this.props.login(this.state.email, this.state.password);\r\n // }\r\n // }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.blocker) {\r\n unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n }\r\n\r\n render() {\r\n const restPwdRequest = this.props.auth;\r\n\r\n if (this.props.user && this.props.user.UsrId) {\r\n if (((this.props.location.state || {}).from || {}).pathname) {\r\n return \r\n }\r\n else {\r\n return \r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n \r\n
    \r\n\r\n \r\n \r\n {/*

    staked.finance

    */}\r\n \"staked.finance\"\r\n \r\n
    \r\n (\r\n
    \r\n {/* {this.setDirtyFlag(dirty) &&\r\n \r\n } */}\r\n
    \r\n
    \r\n \r\n \r\n {!restPwdRequest.nounce &&\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n {errors.email && touched.email && {errors.email}}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n {errors.recaptcha && touched.recaptcha && {errors.recaptcha}}\r\n
    \r\n \r\n Send Email\r\n {(isSubmitting || this.state.submitting) &&\r\n }\r\n \r\n
    { this.props.history.push('/login') }}>Back to login
    \r\n \r\n
    \r\n }\r\n {restPwdRequest.nounce &&\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n {errors.token && touched.token && {errors.token}}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n Must be at least 8 characters\r\n \r\n {errors.password && touched.password && {errors.password}}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n {errors.retypeNewPassword && touched.retypeNewPassword && {errors.retypeNewPassword}}\r\n
    \r\n \r\n \r\n {this.state.changing && } {this.state.changing ? 'Changing...' : 'Change Password'}\r\n \r\n \r\n \r\n
    \r\n }\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n )}\r\n />\r\n
    \r\n
    \r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n auth: state.auth,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n {\r\n setSpinner: setSpinner,\r\n showNotification: showNotification,\r\n requestResetPwdEmail: requestResetPwdEmail,\r\n resetPassword: resetPassword,\r\n // activateAccount: activateAccount,\r\n // resetSignup: resetSignup,\r\n login: login,\r\n getCurrentUser: getCurrentUser,\r\n },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(ForgotPassword));\r\n","import React, { Component } from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { getCurrentUser } from '../../redux/Auth';\r\n\r\nimport log from '../../helpers/logger';\r\n\r\nclass Error extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n render() {\r\n log.debug(\"error page\");\r\n return (

    Access denied

    )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth ||{}).user,\r\n auth: state.auth,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) =>(\r\n bindActionCreators(Object.assign({},\r\n { getCurrentUser: getCurrentUser },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Error));\r\n","import { fetchService } from './fetchService';\r\n\r\nexport const signUpService = {\r\n signUp,activate,emailAvailable,checkCountry\r\n};\r\n\r\nconst baseUrl = (document.Rintagi || {}).apiBasename + \"/webservices\";\r\nconst fetchAPIResult = fetchService.fetchAPIResult;\r\nconst getAPIResult = fetchService.getAPIResult;\r\n\r\nasync function emailAvailable(emailAddress) {\r\n return fetchAPIResult(baseUrl+\"/SignUpWs.asmx/EmailAvailable\"\r\n ,{\r\n requestOptions: {\r\n body:JSON.stringify({\r\n emailAddress:emailAddress || \"\",\r\n })\r\n }\r\n })\r\n .then(\r\n async result=>{\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n }\r\n }\r\n else {\r\n return Promise.reject( {\r\n status : \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || result.data.value.d.error,\r\n errMsg : result.status === \"success\" ? result.data.value.d.message || result.data.value.d.errorMsg : result.errType\r\n })\r\n }\r\n },\r\n error=>{\r\n return Promise.reject(error);\r\n }\r\n )\r\n\r\n}\r\n\r\nasync function signUp(emailAddress, reCaptchaRequest, refCode) {\r\n return fetchAPIResult(baseUrl+\"/SignUpWs.asmx/SignUp\"\r\n ,{\r\n requestOptions: {\r\n body:JSON.stringify({\r\n emailAddress:emailAddress || \"\",\r\n reCaptchaRequest: reCaptchaRequest || \"\",\r\n refCode:refCode || \"\",\r\n })\r\n }\r\n })\r\n .then(\r\n async result=>{\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n }\r\n }\r\n else {\r\n console.log(result);\r\n return Promise.reject( {\r\n status : \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || result.data.value.d.error,\r\n errMsg : result.status === \"success\" ? result.data.value.d.message || result.data.value.d.errorMsg : result.errType\r\n })\r\n }\r\n },\r\n error=>{\r\n return Promise.reject(error);\r\n }\r\n )\r\n\r\n}\r\n\r\nfunction activate(emailAddress, password, role, nounce, ticketLeft, ticketRight, refCode) {\r\n return fetchAPIResult(baseUrl+\"/SignUpWs.asmx/Activate\"\r\n ,{\r\n requestOptions: {\r\n body:JSON.stringify({\r\n emailAddress:emailAddress || \"\",\r\n password: password || \"\",\r\n role:role || \"\",\r\n nounce: nounce || \"\",\r\n ticketLeft:ticketLeft || \"\",\r\n ticketRight: ticketRight || \"\",\r\n refCode: refCode || \"\",\r\n })\r\n }\r\n })\r\n .then(\r\n async result=>{\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n }\r\n }\r\n else {\r\n console.log(result);\r\n return Promise.reject( {\r\n status : \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || result.data.value.d.error,\r\n errMsg : result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error=>{\r\n return Promise.reject(error);\r\n }\r\n )\r\n}\r\n\r\nfunction checkCountry() {\r\n return fetchAPIResult(baseUrl+\"/SignUpWs.asmx/CheckCountry\"\r\n ,{\r\n requestOptions: {\r\n body:JSON.stringify({\r\n })\r\n }\r\n })\r\n .then(\r\n async result=>{\r\n if (result.status === \"success\" && result.data.value.d && result.data.value.d.status === \"success\") {\r\n return {\r\n data: getAPIResult(result).data,\r\n }\r\n }\r\n else {\r\n console.log(result);\r\n return Promise.reject( {\r\n status : \"failed\",\r\n errType: result.status === \"success\" ? \"api call error\" : result.errType,\r\n errSubType: result.errSubType || result.data.value.d.error,\r\n errMsg : result.status === \"success\" ? result.data.value.d.message : result.errType\r\n })\r\n }\r\n },\r\n error=>{\r\n return Promise.reject(error);\r\n }\r\n )\r\n}","import { getAsyncTypes } from '../helpers/actionType'\r\nimport { showNotification, dispatchWithNotification } from '../redux/Notification'\r\nimport { signUpService } from '../services/signUpService'\r\n\r\nconst SCREEN_PREFIX = 'SignUp';\r\nexport const SIGNUP = getAsyncTypes(SCREEN_PREFIX, 'SIGNUP');\r\nexport const ACTIVATE = getAsyncTypes(SCREEN_PREFIX, 'ACTIVATE');\r\nexport const RESET = getAsyncTypes(SCREEN_PREFIX, \"RESET\");\r\nconst initState = {\r\n email: null,\r\n password: null,\r\n nounce: null,\r\n ticketLeft: null,\r\n ticketRight: null,\r\n}\r\n\r\n// reducer\r\nexport function signUpReducer(state = initState, action) {\r\n const payload = action.payload;\r\n switch (action.type) {\r\n case RESET.SUCCEEDED:\r\n return initState\r\n case ACTIVATE.STARTED:\r\n return {\r\n ...state,\r\n loading: true,\r\n }\r\n case ACTIVATE.FAILED:\r\n return {\r\n ...state,\r\n loading: false,\r\n }\r\n case ACTIVATE.SUCCEEDED:\r\n return {\r\n ...state,\r\n email: payload.email,\r\n usrId: payload.usrId,\r\n loading: false,\r\n }\r\n case SIGNUP.STARTED:\r\n return {\r\n ...state,\r\n loading: true,\r\n }\r\n case SIGNUP.FAILED:\r\n return {\r\n loading: false,\r\n }\r\n case SIGNUP.SUCCEEDED:\r\n return {\r\n email: payload.email,\r\n nounce: payload.nounce,\r\n password: payload.password,\r\n ticketRight: payload.ticketRight,\r\n loading: false,\r\n }\r\n default:\r\n return state;\r\n\r\n }\r\n}\r\n\r\n// action\r\nexport function resetSignup() {\r\n return { type: RESET.SUCCEEDED, payload: {} }\r\n}\r\nexport function requestSignUp(email, password, reCaptchaRequest, refCode) {\r\n return (dispatch, getState, { webApi }) => {\r\n dispatch({ type: SIGNUP.STARTED, payload: {} })\r\n return signUpService.signUp(email, reCaptchaRequest, refCode)\r\n .then(\r\n data => {\r\n dispatch({ type: SIGNUP.SUCCEEDED, payload: { ...data.data } })\r\n return '';\r\n },\r\n error => {\r\n dispatchWithNotification(dispatch, { type: SIGNUP.FAILED, payload: error });\r\n return Promise.reject(error);\r\n }\r\n )\r\n // dispatch({ type: SIGNUP.SUCCEEDED, payload: { nounce: 'abc', ticketRight: '46346' } })\r\n }\r\n}\r\n\r\nexport function activateAccount(email, password, role, nounce, ticketLeft, ticketRight,refCode) {\r\n return (dispatch, getState, { webApi }) => {\r\n dispatch({ type: ACTIVATE.STARTED, payload: {} })\r\n return signUpService.activate(email, password, role, nounce, ticketLeft, ticketRight,refCode)\r\n .then(\r\n data => {\r\n dispatch({ type: ACTIVATE.SUCCEEDED, payload: data.data })\r\n return '';\r\n },\r\n error => {\r\n dispatchWithNotification(dispatch, { type: ACTIVATE.FAILED, payload: error });\r\n return Promise.reject(error);\r\n }\r\n )\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router-dom';\r\nimport { Button, Row, Col, Progress, Card, CardBody } from 'reactstrap';\r\nimport log from '../../helpers/logger';\r\nimport { Prompt } from 'react-router';\r\nimport { registerBlocker, unregisterBlocker } from '../../helpers/navigation';\r\nimport ModalDialog from '../../components/custom/ModalDialog';\r\nimport Recaptcha from '../../components/custom/Recaptcha';\r\nimport { setSpinner } from '../../redux/Global';\r\nimport { Formik, Field, Form } from 'formik';\r\nimport CheckIcon from 'mdi-react/CheckIcon';\r\nimport { getQueryString } from '../../helpers/formatter'\r\nimport { isEmailFormat, deepEqualX, deepNotEqualX } from '../../helpers/utils'\r\nimport RintagiScreen from '../../components/custom/Screen';\r\nimport { showNotification } from '../../redux/Notification'\r\nimport { login, getCurrentUser } from '../../redux/Auth'\r\nimport { signUpService } from '../../services/signUpService'\r\nimport { requestSignUp, activateAccount, resetSignup } from '../../redux/SignUp'\r\nimport { Spinner } from \"theme-ui\";\r\n\r\nclass SignUp extends RintagiScreen {\r\n constructor(props) {\r\n super(props);\r\n this.lastValidated = {}\r\n this.state = {\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalClassName: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n activating: false,\r\n submitting: false,\r\n restricted: false,\r\n }\r\n\r\n this.props.setSpinner(true);\r\n\r\n this.TokenChange = this.TokenChange.bind(this);\r\n this.TextChange = this.TextChange.bind(this);\r\n this.LoseFocus = this.LoseFocus.bind(this);\r\n this.ValidatePage = this.ValidatePage.bind(this);\r\n // this.TermsModal = this.TermsModal.bind(this);\r\n this.confirmUnload = this.confirmUnload.bind(this);\r\n this.OnModalReturn = this.OnModalReturn.bind(this);\r\n this.setDirtyFlag = this.setDirtyFlag.bind(this);\r\n this.onCaptChaChange = this.onCaptChaChange.bind(this);\r\n\r\n this.props.getCurrentUser(true);\r\n }\r\n\r\n LoseFocus(setFieldTouched, validateField, name) {\r\n return function (evt) {\r\n log.debug('lose focus', name);\r\n setFieldTouched(name, true);\r\n //validateField(name);\r\n }\r\n }\r\n ValidateField = name => value => {\r\n log.debug('validate', name, value);\r\n }\r\n\r\n\r\n TextChange(setFieldValue, setFieldTouched, name) {\r\n const _this = this;\r\n return function (evt) {\r\n const value = evt.target.value;\r\n setFieldTouched(name, true);\r\n setFieldValue(name, value);\r\n }\r\n }\r\n\r\n TokenChange(setFieldValue, setFieldTouched, name) {\r\n const _this = this;\r\n return function (evt) {\r\n const value = evt.target.value;\r\n setFieldTouched(name, true);\r\n setFieldValue(name, value.toUpperCase());\r\n }\r\n }\r\n\r\n onCaptChaChange(setFieldValue, setFieldTouched, name) {\r\n return function (evt) {\r\n console.log(evt);\r\n setFieldTouched(name, evt);\r\n setFieldValue(name, evt);\r\n }\r\n }\r\n\r\n // TermsModal() {\r\n // const _this = this;\r\n // // let TiCtext = 'Lender/borrower/guarantor commit and abide to the following rules / policy:'\r\n // return _this.setState({\r\n // ModalOpen: true,\r\n // ModalColor: \"success\",\r\n // ModalClassName: 'mw-800',\r\n // ModalHeader: true,\r\n // ModalTitle: \"Terms & Conditions\",\r\n // ModalMsg:
    Lender/borrower/guarantor commit and abide to the following rules/policy:

    • All fees and rewards are subject to change without notice;
    • Agrees to pay FintruX’s published fees in local dollar equivalent of FTX when requested;
    • FintruX charges a fee in FTX/CR/Credit-Card/Fiat on every transaction; in particular, there will be a charge for each partner service agent, processing the loan, maintaining the loan, and administering irregularities
    • FTX tokens can be purchased from major exchanges including Qryptos, Hitbtc, Bancor, etc. and all decentralized exchanges;
    • Goes through ID/KYC/AML check to verify identity and clean record;


    • Guarantors can only be individual for now;
    • Lenders must be verified Financial Institution (F/I), Companies in Good Standing (C/O), Accredited Investor (A/I), or Ordinary Citizen (O/C);
    • Borrowers must be SME, no consumer is allowed;
    • Lender, borrower, and guarantor(s) execute loan agreement directly among each other, FintruX is not a party of the agreement


    • FintruX does not handle money, lenders
      • deposit and withdraw 10% of loan in fiat currencies from licensed trust institution(s) as escrow agent(s) in its jurisdiction, and
      • honor blockchain ledger that they create representing the 90% of loan in fiat currency that they are ready to lend, and destroy them immediately when tendered for their fiat currency
    • FintruX will only bring borrower leads to trust accounts that have a balance of the equivalent of S$5k (minimum loan amount and country dependent) or more in CR blockchain ledger;
    • Lender agrees to provide one unique Ethereum address to each of their trust accounts; this wallet address will be used to store CR, tracking of their trust account balance; Lender authorizes FintruX (POA) to transfer the appropriate CR from this address to other addresses on their loan agreements;
    • Borrower can use different (recommended) or the same Ethereum address for each loan agreement; fiat currency can be withdrawn from designated trust account in exchange for CR stored in this address;
    • Lenders acknowledge that CR is the equivalent of their fiat currency in their trust accounts and it is a ledger; Lenders further agree to take care of their CR as good as money; CR gets created and destroyed as fiat money deposit and withdrawn from their bank accounts; One CR is equivalent to one unit of the named fiat currency at the named trust account.


    • FintruX will not provide advice or recommendation to either borrower or lender, only facts, analysis, and popular options will be presented; However, the assignment of credit risk pools will be determined by FintruX’s internal risk rating;
    • With the exception of determining credit risk pool, FintruX does not make any decision for any participant (lender, borrower, guarantor, partner service agent, etc.)
    • With the exception of onboarding, FintruX does not perform any decisioning service; Lenders pick their service agents to perform ID/KYC/AML/CREDIT/MODEL/DUE-DILIGENCE/COLLECTION on their borrowers
    • Lender gives detail instructions how to move how much of their money, and has the ultimate decision who to lend their money to; Borrower has the ultimate decision who to borrower their money from
    • FintruX only provides leads to lenders and absolutely will not act as broker to any participant


    • Lenders must provide evidence of equivalent knowledge or have attended at least one online course in credit analysis conducted by other accredited instructor or our senior credit analyst which is available to the general public;
    • Lenders can make lending decisions at any time, as long as it is reasonable, including but not limited to who to lend, the amount and terms to lend;
    • Lenders have full control of their money, no one can access their money without their explicit instructions;
    • Borrowers agree to share their credit and financial information with their selected lenders and FintruX;


    • Borrowers agree that 10% of their borrowing will be held back in as security deposit in a credit risk pool held by trust-institution to mitigate the risk together with other borrowers;
      • Borrowers are responsible for all their direct delinquencies and are liable to pay to their lenders excess over 10% their security deposit;
      • Lenders should incur the loss should this 10% depleted in the credit risk pool not caused by their borrowers but by other borrowers’ delinquencies;
    • FintruX’s FTX reserve is distributed proportionally to the same categories of the credit risk pools and only kick-in to pay lender for loan loss when all else failed; this is the last resort;
    • Delinquencies longer than six (6) months will automatically passed to partner collection agent selected by lender in advance to pursue defaulted borrowers;
    • Partner collection agents have the rights to use all reasonable and legal means to contact and collect from borrower on any defaulted amounts and late charges, including but not limited to telephone calls, site visits, etc.;
    • Borrowers are obligated to pay the credit risk pool or FintruX reserve, not the lender, if lenders have been paid by these already;


    • Lenders, borrowers, guarantors, partner trust-institutions, and partner servicing agents can rate and comment on each other after funding is completed for one or more loans;
    • All owner(s) of borrower SME having 20% or more shareholdings (country dependent) must be registered as a Guarantor and sign as guarantor on the loan agreement.
    • A paper loan agreement must be signed electronically by borrower (on behalf of the SME), lender, and at least one guarantor; this agreement will be tied to an immutable smart contract on a public blockchain accessible only by Lender/Borrower/Guarantor; no private information will be stored on any smart contract.
    • There are four public smart contracts:
      • one and only reputation smart contract;
      • one and only FTX smart contract for FintruX to process fee payments;
      • one CR smart contract for each combination of lender + fiat-currency; and
      • one loan smart contract for each loan;
    '\r\n // }} />\r\n // });\r\n // }\r\n\r\n setDirtyFlag(dirty) {\r\n /* this is called during rendering but has side-effect, undesirable but only way to pass formik dirty flag around */\r\n if (dirty) {\r\n if (this.blocker) unregisterBlocker(this.blocker);\r\n this.blocker = this.confirmUnload;\r\n registerBlocker(this.confirmUnload);\r\n }\r\n else {\r\n if (this.blocker) unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n if (this.props.updateChangedState) this.props.updateChangedState(dirty);\r\n this.SetCurrentRecordState(dirty);\r\n return true;\r\n }\r\n\r\n confirmUnload(message, callback) {\r\n const confirm = () => {\r\n callback(true);\r\n }\r\n const cancel = () => {\r\n callback(false);\r\n }\r\n this.setState({ ModalOpen: true, ModalSuccess: confirm, ModalCancel: cancel, ModalClassName: 'mw-520', ModalHeader: false, ModalColor: \"danger\", ModalTitle: 'Unsaved Changes', ModalMsg: 'You have unsaved changes on this page. Are you sure you want to leave?' });\r\n }\r\n\r\n /* field validators */\r\n ValidateEmail = (isTouched, setFieldTouched, setFieldValue, values) => value => {\r\n log.debug('validate email', isTouched, value);\r\n if (this.FormGroup && this.FormGroup !== \"SignUp\") return;\r\n if (!value) return 'Please enter your email address'\r\n if (!isEmailFormat(value)) return 'Please enter a valid email address'\r\n // if (this.lastValidated.email !== value || this.IsFormSubmit) {\r\n if (this.IsFormSubmit) {\r\n this.lastValidated.email = value;\r\n // return signUpService.emailAvailable(value).then(\r\n // result => {\r\n // log.debug(result);\r\n // },\r\n // err => {\r\n // log.debug(err);\r\n // throw 'email not available';\r\n // }\r\n // )\r\n }\r\n else {\r\n log.debug('not touched, skip expensive validation')\r\n }\r\n }\r\n ValidatePassword = (isTouched, setFieldTouched, setFieldValue, values) => value => {\r\n log.debug('validate password', value.length);\r\n if (this.FormGroup && this.FormGroup !== \"SignUp\") return;\r\n if (!value) return 'Please enter your password'\r\n if (value.length < 8) return 'Your password must be at least 8 characters long'\r\n }\r\n\r\n ValidateReTypePassword = (isTouched, setFieldTouched, setFieldValue, values) => value => {\r\n log.debug('validate retype password');\r\n if (this.FormGroup && this.FormGroup !== \"SignUp\") return;\r\n if (values.password !== value) return \"Your passwords don't match\";\r\n }\r\n\r\n ValidateAgree = (isTouched, setFieldTouched, setFieldValue, values) => value => {\r\n log.debug('validate term agreed', value);\r\n if (this.FormGroup && this.FormGroup !== \"SignUp\") return;\r\n if (!value) return \"Your must agree to terms and conditions to proceed\";\r\n }\r\n\r\n ValidateRecaptcha = (isTouched, setFieldTouched, setFieldValue, values) => value => {\r\n log.debug('recaptcha checked', value);\r\n if (this.FormGroup && this.FormGroup !== \"SignUp\") return;\r\n if (!value) return \"Your must check the recaptcha to proceed\";\r\n }\r\n\r\n ValidateToken = (isTouched, setFieldTouched, setFieldValue, values) => value => {\r\n log.debug('validate token', value);\r\n if (this.FormGroup && this.FormGroup !== \"Activate\") return;\r\n if (!value) return \"Please enter your confirmation code from the email\";\r\n }\r\n\r\n /* end field validators */\r\n ValidatePage(values) {\r\n /* formik form validation, only non-field level validation should go to here. field validation should be done at individual level and they are always called by formik \r\n inter field validation should be done here\r\n */\r\n const errors = {};\r\n\r\n log.debug('form validate triggered');\r\n if (values.retypePassword !== values.password) {\r\n errors.retypePassword = \"Your passwords don't match\";\r\n }\r\n\r\n if (!values.agree) {\r\n errors.agree = \"Your must agree to terms and conditions to proceed\";\r\n }\r\n\r\n console.log(values.recaptcha);\r\n\r\n if (!values.recaptcha) {\r\n errors.recaptcha = \"Your must check the recaptcha to proceed\";\r\n }\r\n\r\n this.IsFormSubmit = false; // this is used by field validator and needs to be reset when we are here \r\n this.FormGroup = undefined; // this is used by field validator and needs to be reset when we are here \r\n\r\n return errors;\r\n }\r\n\r\n SubmitForm = formGroup => (evt) => {\r\n /* \r\n this is intended to be used as OnClick for form submission. would be run BEFORE actual submit so we can use state/instance variable\r\n to control ValidatePage() behavior as Formik cannot distinguish between field level triggered validation and form level triggered validation\r\n */\r\n this.IsFormSubmit = true;\r\n this.FormGroup = formGroup;\r\n this.FormAction = formGroup;\r\n /* block further, uncomment \r\n evt.preventDefault();\r\n evt.stopPropagation();\r\n */\r\n }\r\n\r\n resendEmail = (values) => {\r\n const signUpRequest = this.props.signup;\r\n log.debug(this.state.email, this.state.password, \"\", signUpRequest.nounce, values.token, signUpRequest.ticketRight)\r\n this.props.activateAccount(this.state.email, this.state.password, \"\", signUpRequest.nounce, values.token, signUpRequest.ticketRight);\r\n }\r\n\r\n ActivateAccount = (values, { setSubmitting, validateField }) => (evt) => {\r\n this.setState({ activating: true, submitting: true, setSubmitting: setSubmitting });\r\n const signUpRequest = this.props.signup;\r\n this.props.activateAccount(signUpRequest.email, signUpRequest.password, signUpRequest.role, signUpRequest.nounce, values.token, signUpRequest.ticketRight, getQueryString(\"refCode\"));\r\n }\r\n\r\n signUp = (values, { setSubmitting }) => {\r\n log.debug('signup request submitted');\r\n const recaptchaTicket = values.recaptcha;\r\n const signUpRequest = this.props.signup;\r\n this.IsFormSubmit = false;\r\n this.setState({ submittedOn: Date.now(), submitting: true, setSubmitting: setSubmitting });\r\n if (this.FormAction === \"SignUp\") {\r\n this.props.requestSignUp(values.email, values.password, recaptchaTicket, getQueryString(this.props.history.location, \"refCode\"))\r\n .catch((e) => {\r\n this.setState({ submitting: false });\r\n })\r\n .finally(() => {\r\n setSubmitting(false);\r\n });\r\n this.props.setSpinner(true);\r\n }\r\n else if (this.FormAction === \"ResendEmail\") {\r\n this.props.requestSignUp(values.email, values.password, \"\", getQueryString(this.props.history.location, \"refCode\"));\r\n this.props.showNotification(\"EMAIL HAS BEEN SENT\", { message: 'Verification email has been resent' });\r\n }\r\n else if (this.FormAction === \"Activate\") {\r\n this.setState({ activating: true, email: values.email, password: values.password });\r\n log.debug(values.email, values.password, \"\", signUpRequest.nounce, values.token, signUpRequest.ticketRight)\r\n this.props.activateAccount(values.email, values.password, \"\", signUpRequest.nounce, values.token, signUpRequest.ticketRight, getQueryString(this.props.history.location, \"refCode\"))\r\n .catch((e) => {\r\n log.debug(e);\r\n this.props.showNotification('E', { message: 'Confirmation code is incorrect' });\r\n this.setState({ activating: false, submitting: false, });\r\n setSubmitting(false);\r\n })\r\n .finally(() => {\r\n\r\n })\r\n }\r\n this.FormAction = undefined;\r\n }\r\n\r\n componentDidMount() {\r\n signUpService.checkCountry().then(result => {\r\n console.log('country result', result);\r\n this.setState({ restricted: result.data });\r\n });\r\n }\r\n\r\n componentDidUpdate(prevProps, prevStates) {\r\n if (!(this.props.signup || {}).loading && this.props.global.pageSpinner) {\r\n const _this = this;\r\n setTimeout(() => _this.props.setSpinner(false), 500);\r\n }\r\n if (this.state.submitting &&\r\n !(this.props.signup || {}).loading\r\n ) {\r\n this.state.setSubmitting(false);\r\n }\r\n\r\n const currentLogin = this.props.user || {};\r\n const currentSignUp = this.props.signup || {};\r\n const selectedRole = this.props.global.role || {};\r\n log.debug(currentLogin, this.state, this.props.signUp);\r\n if (currentLogin.UsrId) {\r\n this.props.resetSignup();\r\n this.props.history.push(selectedRole.landingPage)\r\n }\r\n else {\r\n if (!this.state.loginTried && this.props.signup.usrId && !currentLogin.loading) {\r\n this.setState({ loginTried: true });\r\n this.props.login(this.state.email, this.state.password);\r\n }\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.blocker) {\r\n unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n }\r\n\r\n render() {\r\n const sigUpRequest = this.props.signup;\r\n const user = this.props.user;\r\n const envPublicUrl = process.env.PUBLIC_URL;\r\n // const termsAndConditions = envPublicUrl + '/TermsAndConditions.pdf';\r\n const termsAndConditions = \"https://www.fintrux.com/home/doc/TermsOfUse_Staking.pdf\";\r\n log.debug(user, sigUpRequest);\r\n log.debug(this.state);\r\n\r\n if (!this.state.restricted) {\r\n if (this.props.user && this.props.user.UsrId) {\r\n if (((this.props.location.state || {}).from || {}).pathname) {\r\n return \r\n }\r\n else {\r\n return \r\n }\r\n }\r\n }\r\n else {\r\n return \r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n
    \r\n \r\n \r\n {/*

    staked.finance

    */}\r\n \"staked.finance\"\r\n \r\n
    \r\n (\r\n
    \r\n {/* {this.setDirtyFlag(dirty) &&\r\n \r\n } */}\r\n
    \r\n
    \r\n \r\n \r\n {!sigUpRequest.nounce &&\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n {errors.email && touched.email && {errors.email}}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n Must be at least 8 characters\r\n \r\n {errors.password && touched.password && {errors.password}}\r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n {errors.retypePassword && touched.retypePassword && {errors.retypePassword}}\r\n
    \r\n
    \r\n
    \r\n \r\n By signing up, I agree to the terms and conditions, which may change from time to time.\r\n
    \r\n {errors.agree && touched.agree && {errors.agree}}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n {errors.recaptcha && touched.recaptcha && {errors.recaptcha}}\r\n
    \r\n\r\n \r\n Sign up\r\n {(isSubmitting || this.state.submitting) &&\r\n }\r\n \r\n
    Already have an account? { this.props.history.push('/login') }} className=\"color-green text-underline pointer\">Log in here
    \r\n \r\n
    \r\n }\r\n {sigUpRequest.nounce &&\r\n
    \r\n \r\n \r\n {/* \r\n \"\"\r\n */}\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n {errors.token && touched.token && {errors.token}}\r\n
    \r\n \r\n \r\n {this.state.activating && } {this.state.activating ? 'Activating...' : 'Activate'}\r\n \r\n \r\n \r\n
    \r\n }\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n )}\r\n />\r\n
    \r\n
    \r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n signup: state.signup\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n {\r\n setSpinner: setSpinner,\r\n showNotification: showNotification,\r\n requestSignUp: requestSignUp,\r\n activateAccount: activateAccount,\r\n resetSignup: resetSignup,\r\n login: login,\r\n getCurrentUser: getCurrentUser,\r\n },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(SignUp));","import React, { Component } from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router';\r\nimport { Button, Row, Col } from 'reactstrap';\r\nimport log from '../../helpers/logger';\r\nimport { setSpinner } from '../../redux/Global';\r\nimport RintagiScreen from '../../components/custom/Screen';\r\n// import Div100vh from 'react-div-100vh';\r\n\r\nclass EmailSent extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.props.setSpinner(true);\r\n }\r\n\r\n componentDidUpdate(prevProps, prevStates) {\r\n if (this.props.global.pageSpinner) {\r\n const _this = this;\r\n setTimeout(() => _this.props.setSpinner(false), 500);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n
    \r\n
    \r\n
    \r\n {/* */}\r\n
    \r\n \r\n \r\n \r\n \"\"\r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n { this.props.history.push('#') }}>Resend Email\r\n { this.props.history.push('/sign-up') }}>Change Email Address\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n {/*
    */}\r\n
    \r\n
    \r\n
    \r\n );\r\n };\r\n};\r\n\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { setSpinner: setSpinner },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(EmailSent));","import React, { Component } from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router-dom';\r\nimport { Button, Row, Col, Progress, Card, CardBody } from 'reactstrap';\r\nimport log from '../../helpers/logger';\r\nimport { Prompt } from 'react-router';\r\nimport { registerBlocker, unregisterBlocker } from '../../helpers/navigation';\r\nimport { setSpinner } from '../../redux/Global';\r\nimport RintagiScreen from '../../components/custom/Screen';\r\nimport { showNotification } from '../../redux/Notification'\r\nimport { login, getCurrentUser } from '../../redux/Auth'\r\n// import { requestSignUp, activateAccount, resetSignup } from '../../redux/SignUp'\r\nimport { requestResetPwdEmail, resetPassword } from '../../redux/Auth';\r\nimport { Spinner } from \"theme-ui\";\r\n\r\nclass SignUpRestriction extends RintagiScreen {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n }\r\n\r\n this.props.setSpinner(true);\r\n this.props.getCurrentUser(true);\r\n }\r\n\r\n // Needs to be updated\r\n componentDidUpdate(prevProps, prevStates) {\r\n if (\r\n // !(this.props.signup || {}).loading && \r\n this.props.global.pageSpinner) {\r\n const _this = this;\r\n setTimeout(() => _this.props.setSpinner(false), 500);\r\n }\r\n if (this.state.submitting &&\r\n !(this.props.auth || {}).loading\r\n ) {\r\n this.state.setSubmitting(false);\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.blocker) {\r\n unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n }\r\n\r\n render() {\r\n if (this.props.user && this.props.user.UsrId) {\r\n if (((this.props.location.state || {}).from || {}).pathname) {\r\n return \r\n }\r\n else {\r\n return \r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \"staked.finance\"\r\n \r\n \r\n {/*
    \r\n

    Service Not Available

    \r\n
    */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n

    We regret to inform you that our services are currently not available in your region. We apologize for any inconvenience this may cause. Thank you for considering our platform.

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    { this.props.history.push('/login') }}>Back to login
    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n auth: state.auth,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n {\r\n setSpinner: setSpinner,\r\n showNotification: showNotification,\r\n requestResetPwdEmail: requestResetPwdEmail,\r\n resetPassword: resetPassword,\r\n login: login,\r\n getCurrentUser: getCurrentUser,\r\n },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(SignUpRestriction));\r\n","/* this is external interface(for import) for this screen */\r\nimport { naviPath } from '../../helpers/utils'\r\nimport SignUp from './SignUp';\r\nimport EmailSent from './EmailSent';\r\n\r\nimport log from '../../helpers/logger';\r\nimport SignUpRestriction from './SignUpRestriction';\r\n// import Usecases from './Usecases';\r\n/* react router match by order of appearance in list so make sure wider match comes last, use order to control display order */\r\nexport const pagesRoutes = [\r\n {\r\n path: \"/sign-up\",\r\n name: \"Sign Up\",\r\n short: \"Sign Up\",\r\n component: SignUp,\r\n icon: \"Home\",\r\n isPublic: true,\r\n type: 'SignUp',\r\n order: 1,\r\n inMenu: false,\r\n menuLabel: \"Sign Up\"\r\n },\r\n {\r\n path: \"/sign-up-restriction\",\r\n name: \"Sign Up Restriction\",\r\n short: \"Sign Up Restriction\",\r\n component: SignUpRestriction,\r\n icon: \"Home\",\r\n isPublic: true,\r\n type: 'SignUpRestriction',\r\n order: 2,\r\n inMenu: false,\r\n menuLabel: \"Sign Up Restriction\"\r\n }\r\n]\r\n\r\nfunction naviLabel(label, type) {\r\n if (type === \"SignUp\") return 'Sign Up';\r\n else if (type === \"SignUpRestriction\") return 'Sign Up Restriction';\r\n else return type;\r\n}\r\n\r\nexport function getNaviBar(type,label)\r\n{\r\n return pagesRoutes\r\n .sort((a,b) => a.order - b.order)\r\n .map((v,i)=>{\r\n return {\r\n path: v.path,\r\n label: naviLabel(label,v.type),\r\n type:v.type,\r\n active: v.type===type,\r\n }\r\n });\r\n }\r\n","export default __webpack_public_path__ + \"static/media/welcomeImg.5760404b.png\";","import React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { logout, login } from '../../redux/Auth';\r\n\r\nimport { useLiquity } from \"../../hooks/LiquityContext\";\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Link, Route } from 'react-router-dom';\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar } from 'reactstrap';\r\nimport KycPersonReduxObj, { ShowMstFilterApplied } from '../../redux/KycPerson';\r\nimport KycCorporateReduxObj from '../../redux/KycCorporate';\r\nimport log from '../../helpers/logger';\r\nimport welcomeImg from '../../img/welcomeImg.png';\r\nimport { Flex, Spinner, Heading } from \"theme-ui\";\r\nimport { string } from \"prop-types\";\r\nimport { getRintagiConfig } from '../../helpers/config';\r\n\r\nconst Welcome = (props) => {\r\n const { account } = useLiquity();\r\n\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n });\r\n\r\n const [spinnerStatus, setSpinnerStatus] = useState(true);\r\n\r\n const [didMount, setDidMount] = useState(false);\r\n\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, global, kycPerson, KycCorporate } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n global: reduxState.global,\r\n kycPerson: reduxState.KycPerson,\r\n KycCorporate: reduxState.KycCorporate,\r\n };\r\n });\r\n\r\n //log.debug(kycPerson, user, auth);\r\n // simulating class(this -> _this)\r\n const [_state, setState] = useState(0);\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n setMyState({ ...myState, ...newState });\r\n setState(_state + 1);\r\n },\r\n\r\n Back: (event) => {\r\n props.history.push('/what-next');\r\n },\r\n\r\n Continue: (event) => {\r\n props.history.push('/user-option');\r\n }\r\n\r\n }), [_state, myState, props.history]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n const { mstId } = { ...props.match.params };\r\n if (!didMount && (!(kycPerson || {}).AuthCol || true)) {\r\n setDidMount(true);\r\n // must use the dispatch form for the redux binding\r\n dispatch(KycPersonReduxObj.LoadPage('MstRecord', { mstId: mstId || '!' }))\r\n .then(data => {\r\n setTimeout(() => setSpinnerStatus(false), 0);\r\n })\r\n // store.refresh();\r\n }\r\n\r\n if (!didMount && (!(KycCorporate || {}).AuthCol || true)) {\r\n setDidMount(true);\r\n // must use the dispatch form for the redux binding\r\n dispatch(KycCorporateReduxObj.LoadPage('MstRecord', { mstId: mstId || '!' }))\r\n .then(data => {\r\n setTimeout(() => setSpinnerStatus(false), 0);\r\n })\r\n // store.refresh();\r\n }\r\n\r\n }, [didMount, dispatch, kycPerson, KycCorporate, props, _this]);\r\n\r\n // ComponentDidUpdate() equivalent\r\n useEffect(() => {\r\n\r\n }, [_this]);\r\n\r\n // body of the render()\r\n const runtimeConfig = getRintagiConfig() || {};\r\n const prdAllowKycOnly = runtimeConfig.prdAllowKycOnly || false;\r\n\r\n //KYC individual info\r\n const kycInfoLoaded = typeof (((kycPerson || {}).Mst || {}).KycPersonId15);\r\n const currMst = ((kycPerson || {}).Mst || {});\r\n const kycPersonId = currMst.KycPersonId15 || \"\";\r\n const internalStatus = currMst.InternalStatus15 || \"\";\r\n const livenessPassed = currMst.LivenessPassed15 || \"\";\r\n const disclosuresChked = currMst.DisclosuresChked15 || \"\";\r\n\r\n //KYC Corporate info \r\n const kycCorpInfoLoaded = typeof (((KycCorporate || {}).Mst || {}).KycCorpId16);\r\n const currCorpMst = ((KycCorporate || {}).Mst || {});\r\n const kycCorpId = currCorpMst.KycCorpId16 || \"\";\r\n const corpInternalStatus = currCorpMst.InternalStatus16 || \"\";\r\n\r\n log.debug(\"welcome\", currMst, currCorpMst, kycPersonId, kycCorpId);\r\n\r\n if (kycPersonId != \"\") { // check if this is individual account\r\n if (internalStatus != '') {\r\n if (internalStatus == 'AP' && livenessPassed == \"Y\" && disclosuresChked == \"Y\") {\r\n if (prdAllowKycOnly == true) {\r\n return ;\r\n } else {\r\n return ;\r\n }\r\n } else {\r\n return ;\r\n }\r\n }\r\n } else if (kycCorpId != \"\") { // check if this is corporate account\r\n if (corpInternalStatus != '') {\r\n if (corpInternalStatus == 'AP') {\r\n if (prdAllowKycOnly == true) {\r\n return ;\r\n } else {\r\n return ;\r\n }\r\n } else {\r\n return ;\r\n }\r\n }\r\n }\r\n\r\n const loader = (\r\n \r\n \r\n Loading...\r\n \r\n );\r\n\r\n log.debug(\"spinner\", spinnerStatus, kycPersonId, kycInfoLoaded, kycCorpId, kycCorpInfoLoaded, (kycPersonId != \"\" && kycInfoLoaded == \"undefined\"), (kycCorpId != \"\" && (kycCorpInfoLoaded == \"undefined\" || kycCorpInfoLoaded == \"string\")));\r\n if (spinnerStatus || kycInfoLoaded == \"undefined\" || kycCorpInfoLoaded == \"undefined\") {\r\n return (
    {loader}
    );\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    Welcome To staked.finance.

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

    To get started, we need to get to know you better.

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n { _this.Continue() }}>Continue\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default withRouter(Welcome);\r\n","import React, { Component } from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col } from 'reactstrap';\r\nimport log from '../../helpers/logger';\r\nimport { setSpinner, registerTopbarLeft } from '../../redux/Global';\r\nimport CheckCircleIcon from 'mdi-react/CheckCircleIcon';\r\nimport { isEmpty } from '../../helpers/utils';\r\nimport { showNotification } from '../../redux/Notification';\r\nimport personImg from '../../img/personImg.png';\r\nimport businessImg from '../../img/businessImg.png';\r\n\r\nclass UserOption extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n reduxRefreshed: false,\r\n individualChecked: true,\r\n businessChecked: false,\r\n };\r\n\r\n this.props.setSpinner(true, 'GSS');\r\n\r\n const loadPageOptions = { SkipMetaData: true, SkipSupportingData: true };\r\n\r\n this.Continue = this.Continue.bind(this);\r\n\r\n const _this = this;\r\n }\r\n\r\n Back() {\r\n this.props.history.push('/what-next');\r\n }\r\n\r\n Continue() {\r\n if (this.state.individualChecked == true) {\r\n this.props.history.push('/personal-detail');\r\n } else if (this.state.businessChecked == true) {\r\n this.props.history.push('/business-request');\r\n }\r\n }\r\n\r\n onIndividualChecked = () => {\r\n this.setState({\r\n individualChecked: true,\r\n businessChecked: false\r\n });\r\n }\r\n\r\n onBusinessChecked = () => {\r\n this.setState({\r\n individualChecked: false,\r\n businessChecked: true\r\n });\r\n }\r\n\r\n render() {\r\n const currMst = ((this.props.KycPerson || {}).Mst || {});\r\n\r\n const internalStatus = currMst.InternalStatus15 || \"\";\r\n const livenessPassed = currMst.LivenessPassed15 || \"\";\r\n\r\n if (internalStatus != '') {\r\n if (internalStatus == 'AP' && livenessPassed == \"Y\") {\r\n return ;\r\n } else {\r\n return ;\r\n }\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    Which User Best Represents You?

    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n \r\n { this.Continue() }}>Continue\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { setSpinner: setSpinner },\r\n { registerTopbarLeft: registerTopbarLeft },\r\n // { logout: logout},\r\n { showNotification: showNotification },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(UserOption));","export default __webpack_public_path__ + \"static/media/personalGoal.9ac3fd66.png\";","import React, { Component } from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col } from 'reactstrap';\r\nimport log from '../../helpers/logger';\r\nimport { setSpinner, registerTopbarLeft } from '../../redux/Global';\r\nimport CheckCircleIcon from 'mdi-react/CheckCircleIcon';\r\nimport { isEmpty } from '../../helpers/utils';\r\n// import { loadPage as loadDeclaration } from '../../redux/Declaration';\r\n// import { loadPage as loadTrustProfile } from '../../redux/TrustProfile';\r\n// import { loadPage as loadBusinessProfile } from '../../redux/BusinessProfile';\r\n// import { logout } from '../../redux/Auth';\r\nimport { showNotification } from '../../redux/Notification';\r\nimport personalGoalImg from '../../img/personalGoal.png';\r\nclass GetStartedSteps extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n reduxRefreshed: false,\r\n };\r\n\r\n this.props.setSpinner(true, 'GSS');\r\n\r\n const loadPageOptions = { SkipMetaData: true, SkipSupportingData: true };\r\n\r\n log.debug('IM HERE');\r\n\r\n this.Continue = this.Continue.bind(this);\r\n const _this = this;\r\n // Promise.all([\r\n // this.props.loadDeclaration(),\r\n // this.props.loadTrustProfile('', loadPageOptions),\r\n // this.props.loadBusinessProfile(),\r\n // ]).then(data=>{\r\n // }).catch(error=>{\r\n // setTimeout(() => {\r\n // if (!_this.props.declaration.loading \r\n // && _this.props.declaration.status === \"failed\"\r\n // && !_this.props.trustProfile.loading \r\n // && _this.props.trustProfile.status === \"failed\"\r\n // && !_this.props.businessProfile.loading\r\n // && _this.props.businessProfile.status === \"failed\"\r\n // ) {\r\n // _this.props.logout(true).finally(()=>{\r\n // _this.props.showNotification(\"E\", { message: 'Server down, retry later' });\r\n // })\r\n // }\r\n // }, 1000);\r\n // }).finally(()=>{\r\n // this.setState({reduxRefreshed:true})\r\n // setTimeout(() => this.props.setSpinner(false, 'GSS'), 500);\r\n // })\r\n }\r\n\r\n Back() {\r\n this.props.history.push('/what-next');\r\n }\r\n\r\n Continue() {\r\n // if (!isEmpty(((this.props.declaration || {}).currentDeclaration || {}).businessLegalName) && !isEmpty(((this.props.declaration || {}).currentDeclaration || {}).tradeName)) {\r\n // if (!isEmpty(((this.props.trustProfile || {}).currentTrustProfile || {}).description)) {\r\n // this.props.history.push('/get-started-my-network');\r\n // }\r\n // else {\r\n // this.props.history.push('/get-started-edit-trust-profile');\r\n // }\r\n // }\r\n // else {\r\n this.props.history.push('/personal-detail');\r\n // }\r\n }\r\n\r\n // componentDidUpdate(prevProps, prevStates) {\r\n // if (!(this.props.declaration || {}).loading && !(this.props.businessProfile || {}).loading && !(this.props.trustProfile || {}).loading && this.props.global.pageSpinner) {\r\n // const _this = this;\r\n // setTimeout(() => _this.props.setSpinner(false), 500);\r\n // }\r\n // }\r\n\r\n render() {\r\n log.debug(this.props);\r\n // if (this.state.reduxRefreshed && ((this.props.businessProfile || {}).currentBusinessProfile || {}).status === 'C3') {\r\n // return ;\r\n // }\r\n\r\n // const Step1Active = isEmpty(((this.props.declaration || {}).currentDeclaration || {}).businessLegalName) && isEmpty(((this.props.declaration || {}).currentDeclaration || {}).tradeName);\r\n // const Step1Done = !isEmpty(((this.props.declaration || {}).currentDeclaration || {}).businessLegalName) && !isEmpty(((this.props.declaration || {}).currentDeclaration || {}).tradeName);;\r\n // const Step2Inactive = Step1Active;\r\n // const Step2Active = Step1Done && isEmpty(((this.props.trustProfile || {}).currentTrustProfile || {}).description);\r\n // const Step2Done = Step1Done && !isEmpty(((this.props.trustProfile || {}).currentTrustProfile || {}).description);\r\n // const Step3Inactive = (Step1Active || Step1Done || Step2Active) && !Step2Done;\r\n // const Step3Active = Step1Done && Step2Done;\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    Please Provide Us Your Customer Details

    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {/*
    \r\n 1 Personal Details\r\n {Step1Done &&
    }\r\n
    */}\r\n
    \r\n 1 Personal Details\r\n {/* {
    } */}\r\n
    \r\n
    \r\n
    \r\n {/*
    \r\n 2 Supporting Documentation\r\n {Step2Done &&
    }\r\n
    */}\r\n
    \r\n 2 Supporting Documentation\r\n {/* {
    } */}\r\n
    \r\n
    \r\n
    \r\n {/*
    \r\n 3 Risks and Disclosures\r\n
    */}\r\n
    \r\n 3 Risks and Disclosures\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n { this.Continue() }}>Continue\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n // declaration: state.declaration,\r\n // trustProfile: state.trustProfile,\r\n // businessProfile: state.businessProfile,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { setSpinner: setSpinner },\r\n { registerTopbarLeft: registerTopbarLeft },\r\n // { loadDeclaration: loadDeclaration },\r\n // { loadTrustProfile: loadTrustProfile },\r\n // { loadBusinessProfile: loadBusinessProfile },\r\n // { logout: logout},\r\n { showNotification: showNotification },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(GetStartedSteps));","import React, { Component } from 'react';\r\nimport DatePicker from 'react-datepicker';\r\nimport moment from 'moment';\r\nimport log from '../../helpers/logger';\r\n\r\nexport default class DatePickerField extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n // startDate: this.props.selected ? moment(this.props.selected) : moment()\r\n startDate: this.props.selected ? moment(this.props.selected) : null,\r\n isOpen: false,\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleBlur = this.handleBlur.bind(this);\r\n this.toggleCalendar = this.toggleCalendar.bind(this);\r\n this.handleOutsideClick = this.handleOutsideClick.bind(this);\r\n }\r\n\r\n handleChange(date) {\r\n if (!this.props.disabled) {\r\n this.setState({\r\n startDate: date\r\n });\r\n this.toggleCalendar();\r\n this.props.onChange(date, this.props.name || (this.props.field || {}).name, { fieldname: this.props.fieldname, listidx: this.props.listidx, fieldpath: this.props.fieldpath });\r\n }\r\n }\r\n\r\n toggleCalendar = (e) => {\r\n e && e.preventDefault();\r\n if (!this.props.disabled) {\r\n this.setState({ isOpen: !this.state.isOpen });\r\n }\r\n };\r\n\r\n handleOutsideClick = (e) => {\r\n e && e.preventDefault();\r\n if (!this.props.disabled) {\r\n this.setState({ isOpen: false });\r\n }\r\n }\r\n\r\n handleBlur = (e) => {\r\n if (!this.props.disabled) {\r\n if (typeof this.props.onBlur === \"function\") {\r\n this.props.onBlur(this.props.name || (this.props.field || {}).name, true, { fieldname: this.props.fieldname, listidx: this.props.listidx, fieldpath: this.props.fieldpath });\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n\r\n //log.debug(this.props.value);\r\n const isUTC = this.props.isUTC;\r\n //const contentHasTZInfo = /z$/i.test(this.props.value) || /[\\-\\+0-9\\:]$/i.test(this.props.value);\r\n return (\r\n
    \r\n \r\n {(this.props.value === '' || this.props.value === undefined) ? '' : moment(this.props.value, isUTC ? moment.ISO_8601 : undefined).format('MMMM D, YYYY')}\r\n \r\n {this.state.isOpen &&\r\n }\r\n name={this.props.name || (this.props.field || {}).name}\r\n className='form__form-group-datepicker'\r\n selected={this.state.startDate}\r\n onChange={this.handleChange}\r\n dateFormat='LL'\r\n onClickOutside={this.handleOutsideClick}\r\n // showTimeSelect\r\n onBlur={this.handleBlur}\r\n showMonthDropdown\r\n showYearDropdown\r\n dropdownMode=\"select\"\r\n autoComplete='off'\r\n withPortal\r\n disabled={this.props.disabled}\r\n fixedHeight\r\n // readOnly=\"readonly\"\r\n // readOnly={true}\r\n // minDate={moment().subtract(12, 'M')}\r\n // maxDate={moment().subtract(21, 'Y')}\r\n minDate={this.props.minDate}\r\n maxDate={this.props.maxDate}\r\n showDisabledMonthNavigation={this.props.showDisabledMonthNavigation}\r\n inline\r\n />\r\n }\r\n
    \r\n )\r\n }\r\n}\r\n\r\n","import React, { Component } from 'react';\r\nimport log from '../../helpers/logger';\r\nimport ReactHintFactory from 'react-hint';\r\nimport { Button, Spinner } from 'reactstrap';\r\nimport 'react-hint/css/index.css';\r\n\r\nconst ReactHint = ReactHintFactory(React);\r\n\r\nexport default class Hint extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n textAreaMessage: '',\r\n error: false,\r\n }\r\n }\r\n\r\n handleChange = (e) => {\r\n // e.target.value = this.state.textAreaValue\r\n // const _this = this;\r\n // return function (e, ...rest) {\r\n // const value = e.target.value;\r\n // if (typeof _this.props.onChange === \"function\") {\r\n // _this.props.onChange(_this.props.name || (_this.props.field || {}).name, value);\r\n // }\r\n // }\r\n // this.setState({ textAreaMessage: e.target.value });\r\n this.error = false;\r\n \r\n this.textAreaMessage = e.target.value;\r\n if(this.textAreaMessage.length === 0) {\r\n this.error = true;\r\n }\r\n else {\r\n this.error = false;\r\n }\r\n }\r\n\r\n onSubmit = () => {\r\n if(this.error) {\r\n this.setState({ error: true });\r\n }\r\n else {\r\n this.props.onSubmit(this.textAreaMessage || this.props.textAreaDefaultValue);\r\n this.setState({ error: false });\r\n // log.debug(this.state.error);\r\n }\r\n }\r\n\r\n onRenderContent = (target, content) => {\r\n // const { catId } = target.dataset\r\n // const width = 240\r\n // const url = `https://images.pexels.com/photos/${catId}/pexels-photo-${catId}.jpeg?w=${width}`\r\n\r\n return
    \r\n {this.props.message}\r\n {(this.props.customButtonOnClick || this.props.onSubmit) &&\r\n
    \r\n {this.props.textArea &&
    \r\n
    \r\n \r\n
    \r\n {this.props.textAreaBlock}\r\n \r\n \r\n
    \r\n {this.error && Welcome message could not be empty}\r\n
    \r\n
    }\r\n {this.props.customButtonOnClick && ref && ref.focus()}\r\n onClick={this.props.customButtonOnClick}\r\n className=\"btn btn-sm-custom rounded btn-hint btn-outline-success\">\r\n {this.props.requestOngoing && } {this.props.customButtonName}\r\n }\r\n {this.props.onSubmit && ref && ref.focus()}\r\n onClick={this.onSubmit}\r\n className=\"btn btn-sm-custom rounded btn-hint btn-outline-success\">\r\n {this.props.requestOngoing && } {this.props.customButtonName}\r\n }\r\n
    }\r\n {this.props.customButtonRoute && ref && ref.focus()}\r\n onClick={() => { this.props.history.push(`${this.props.customButtonRoute}`) }}\r\n className=\"btn btn-sm-custom rounded btn-hint btn-outline-success\">\r\n {this.props.customButtonName}\r\n }\r\n
    \r\n }\r\n\r\n render() {\r\n // log.debug(this.state.textAreaMessage);\r\n // log.debug(this.props.textAreaValue);\r\n return (\r\n \r\n \r\n this.instance = ref} />\r\n {this.props.button && \r\n {this.props.buttonName}\r\n }\r\n {this.props.customButton && \r\n {this.props.buttonName}\r\n }\r\n {!this.props.button && !this.props.customButton && \r\n }\r\n {/* */}\r\n {/* \r\n \r\n */}\r\n \r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport ReactPhoneInput from 'react-phone-input-2';\r\nimport 'react-phone-input-2/dist/style.css';\r\nimport log from '../../helpers/logger';\r\n\r\nexport default class PhoneField extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n handleChange(phone) {\r\n this.props.onChange(phone, this.props.name || (this.props.field || {}).name, { fieldname: this.props.fieldname, listidx: this.props.listidx, fieldpath: this.props.fieldpath });\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n );\r\n };\r\n};\r\n","import React from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col } from 'reactstrap';\r\nimport log from '../../helpers/logger';\r\nimport { Formik, Field, Form } from 'formik';\r\nimport RintagiScreen from '../../components/custom/Screen';\r\nimport AutoCompleteField from '../../components/custom/AutoCompleteField';\r\nimport DropdownField from '../../components/custom/DropdownField';\r\nimport DatePicker from '../../components/custom/DatePicker';\r\nimport { registerBlocker, unregisterBlocker } from '../../helpers/navigation';\r\nimport ModalDialog from '../../components/custom/ModalDialog';\r\n// import Layout from '../_layout/Layout';\r\nimport Hint from '../../components/custom/Hint';\r\nimport { formatContent } from '../../helpers/formatter';\r\nimport KycPersonReduxObj, { ShowMstFilterApplied } from '../../redux/KycPerson';\r\nimport { login } from '../../redux/Auth';\r\nimport { isEmptyId } from '../../helpers/utils'\r\nimport { InfoIcon } from \"../../components/InfoIcon\";\r\nimport PhoneField from '../../components/custom/PhoneField';\r\nimport CheckIcon from 'mdi-react/CheckIcon';\r\nimport { Spinner } from \"theme-ui\";\r\n\r\nclass PersonalDetail extends RintagiScreen {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n initialing: true,\r\n formikValidatedTime: null,\r\n currentPersonalDetailKey: Date.now(),\r\n othersOfWealthDisable: true,\r\n othersOfFundsDisable: true,\r\n othersOfPurposeDisable: true,\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n submitting: false,\r\n reduxRefreshed: false,\r\n }\r\n\r\n this.DateChange = this.DateChange.bind(this);\r\n this.DropdownChange = this.DropdownChange.bind(this);\r\n this.TextChange = this.TextChange.bind(this);\r\n this.ValidatePage = this.ValidatePage.bind(this);\r\n this.OnModalReturn = this.OnModalReturn.bind(this);\r\n this.setDirtyFlag = this.setDirtyFlag.bind(this);\r\n this.SavePage = this.SavePage.bind(this);\r\n this.DropdownChangeV1 = this.DropdownChangeV1.bind(this);\r\n\r\n const loadPageOptions = { SkipMetaData: true, SkipSupportingData: true };\r\n }\r\n\r\n NationalityId15InputChange() { const _this = this; return function (name, v) { const filterBy = ''; _this.props.SearchNationalityId15(v, filterBy); } }\r\n CountryOfResId15InputChange() { const _this = this; return function (name, v) { const filterBy = ''; _this.props.SearchCountryOfResId15(v, filterBy); } }\r\n CountryOfBirthId15InputChange() { const _this = this; return function (name, v) { const filterBy = ''; _this.props.SearchCountryOfBirthId15(v, filterBy); } }\r\n IndustryId15InputChange() { const _this = this; return function (name, v) { const filterBy = ''; _this.props.SearchIndustryId15(v, filterBy); } }\r\n OccupationId15InputChange() { const _this = this; return function (name, v) { const filterBy = ''; _this.props.SearchOccupationId15(v, filterBy); } }\r\n SourceOfFundsId15InputChange() { const _this = this; return function (name, v) { const filterBy = ''; _this.props.SearchSourceOfFundsId15(v, filterBy); } }\r\n SourceOfWealthId15InputChange() { const _this = this; return function (name, v) { const filterBy = ''; _this.props.SearchSourceOfWealthId15(v, filterBy); } }\r\n PurposeId15InputChange() { const _this = this; return function (name, v) { const filterBy = ''; _this.props.SearchPurposeId15(v, filterBy); } }\r\n IdIssueCountryId15InputChange() { const _this = this; return function (name, v) { const filterBy = ''; _this.props.SearchIdIssueCountryId15(v, filterBy); } }\r\n\r\n Back() {\r\n this.props.history.goBack();\r\n }\r\n\r\n SavePage(values, { setSubmitting, setErrors, resetForm, setFieldValue, setValues }) {\r\n const errors = [];\r\n const currMst = (this.props.KycPerson || {}).Mst || {};\r\n\r\n if (errors.length > 0) {\r\n this.props.showNotification('E', { message: errors[0] });\r\n setSubmitting(false);\r\n }\r\n else {\r\n const { ScreenButton, OnClickColumeName } = this;\r\n this.setState({ submittedOn: Date.now(), submitting: true, setSubmitting: setSubmitting, key: currMst.key, ScreenButton: ScreenButton, OnClickColumeName: OnClickColumeName });\r\n this.ScreenButton = null;\r\n this.OnClickColumeName = null;\r\n this.props.SavePage(\r\n this.props.KycPerson,\r\n {\r\n KycPersonId15: currMst.KycPersonId15 || '',\r\n Name15: (values.name) || '',\r\n GenderCd15: (values.gender || {}).value || '',\r\n NationalityId15: (values.nationality || {}).value || '',\r\n CountryOfResId15: (values.residency || {}).value || '',\r\n DateOfBirth15: values.birthday || '',\r\n FormerName15: '',\r\n Alias15: '',\r\n EmailAddrs15: this.props.user.UsrName || '',\r\n PhoneNbrs15: (values.contactNumber) || '',\r\n Addresses15: (values.address) || '',\r\n PostalCode15: (values.postalCode) || '',\r\n BankAccts15: '',\r\n Title15: '',\r\n CountryOfBirthId15: (values.countryOfBirth || {}).value || '',\r\n IndustryId15: (values.industry || {}).value || '',\r\n OccupationId15: (values.occupation || {}).value || '',\r\n SourceOfFundsId15: (values.sourceOfFunds || {}).value || '',\r\n OthersOfFunds15: (values.othersOfFunds) || '',\r\n SourceOfWealthId15: (values.sourceOfWealth || {}).value || '',\r\n OthersOfWealth15: (values.othersOfWealth) || '',\r\n AnnualIncome15: (values.annualIncome) || '',\r\n TransAmount15: '',\r\n TransFrequency15: '',\r\n PurposeId15: (values.purpose || {}).value || '',\r\n OthersOfPurpose15: (values.othersOfPurpose) || '',\r\n IdTypeId15: (values.idType || {}).value || '',\r\n IdNumber15: values.idNumber || '',\r\n IdIssueCountryId15: (values.idIssueCountry || {}).value || '',\r\n IdIssueDate15: values.issueDate || '',\r\n IdExpiryDate15: values.expiryDate || '',\r\n KycDesc15: '',\r\n Pep15: (values.pep || {}).value || '',\r\n InternalStatus15: 'P1',\r\n Reason15: '',\r\n KycCustomerId15: '',\r\n KycRecordId15: '',\r\n KycStatusId15: '',\r\n KycRiskRatingId15: '',\r\n Response15: '',\r\n RiskReport15: '',\r\n Active15: 'Y',\r\n InputBy15: this.props.user.UsrId || '',\r\n InputOn15: '',\r\n ModifiedBy15: this.props.user.UsrId || '',\r\n ModifiedOn15: '',\r\n },\r\n [],\r\n {\r\n persist: true,\r\n ScreenButton: (ScreenButton || {}).buttonType,\r\n OnClickColumeName: OnClickColumeName,\r\n }\r\n ).then(result => {\r\n log.debug('submit done');\r\n this.props.history.push('/supporting-doc');\r\n }).catch(error => {\r\n log.debug('submit Personal Detail error', error)\r\n }).finally(\r\n () => {\r\n setSubmitting(false);\r\n this.setState({ submitting: false });\r\n }\r\n );\r\n }\r\n }\r\n /* end of form related handling functions */\r\n\r\n getAge(dateString) {\r\n var today = new Date();\r\n var birthDate = new Date(dateString);\r\n var age = today.getFullYear() - birthDate.getFullYear();\r\n var m = today.getMonth() - birthDate.getMonth();\r\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\r\n age--;\r\n }\r\n return age;\r\n }\r\n\r\n getExpiryDate(dateString) {\r\n var today = new Date();\r\n var expiryDate = new Date(dateString);\r\n var year = expiryDate.getFullYear() - today.getFullYear();\r\n var m = expiryDate.getMonth() - today.getMonth();\r\n var monthLeft = 0;\r\n monthLeft = year * 12 + m;\r\n if (expiryDate.getDate() >= today.getDate()) {\r\n monthLeft++;\r\n }\r\n return monthLeft;\r\n }\r\n\r\n ValidatePage(values) {\r\n const errors = {};\r\n /* sync formik values to state values */\r\n this.setState({ currentPersonalDetail: { ...values } });\r\n\r\n /* validators go here but not recommended unless it doesn't fit in field based validation */\r\n if (isEmptyId((values.gender || {}).value)) { errors.gender = \"Please select a gender\" }\r\n if (isEmptyId((values.nationality || {}).value)) { errors.nationality = \"Please select a nationality\" }\r\n if (isEmptyId((values.residency || {}).value)) { errors.residency = \"Please select a country of residency\" }\r\n if (isEmptyId((values.countryOfBirth || {}).value)) { errors.countryOfBirth = \"Please select a country of birth\" }\r\n if (this.getAge(values.birthday) < 18) { errors.birthday = \"Age is less than 18 years old\" }\r\n if (isEmptyId((values.occupation || {}).value)) { errors.occupation = \"Please select an occupation\" }\r\n if (isEmptyId((values.industry || {}).value)) { errors.industry = \"Please select an industry\" }\r\n if (isEmptyId((values.sourceOfFunds || {}).value)) { errors.sourceOfFunds = \"Please select a source of funds\" }\r\n if ((values.sourceOfFunds || {}).value == 8) { this.setState({ othersOfFundsDisable: false }) } else { this.setState({ othersOfFundsDisable: true }) }\r\n if (isEmptyId((values.sourceOfWealth || {}).value)) { errors.sourceOfWealth = \"Please select a source of wealth\" }\r\n if ((values.sourceOfWealth || {}).value == 5) { this.setState({ othersOfWealthDisable: false }) } else { this.setState({ othersOfWealthDisable: true }) }\r\n if (isEmptyId((values.purpose || {}).value)) { errors.purpose = \"Please select a purpose\" }\r\n if ((values.purpose || {}).value == 4) { this.setState({ othersOfPurposeDisable: false }) } else { this.setState({ othersOfPurposeDisable: true }) }\r\n if (isEmptyId((values.pep || {}).value)) { errors.pep = \"Please select yes or no.\" }\r\n if (isEmptyId((values.idIssueCountry || {}).value)) { errors.idIssueCountry = \"Please select an Id issuance country\" }\r\n if (isEmptyId((values.idType || {}).value)) { errors.idType = \"Please select an Id type\" }\r\n if (this.getExpiryDate(values.expiryDate) < 6) { errors.expiryDate = \"Expiry date is less than 6 months\" }\r\n\r\n this.IsFormSubmit = false; // this is used by field validator and needs to be reset when we are here \r\n this.FormGroup = undefined; // this is used by field validator and needs to be reset when we are here \r\n\r\n /* arrange post validation actions, should be the last to call \r\n * for promise based validation, this call MUST BE DONE inside the then or error block\r\n * as Formik would wait for promise before revising its states\r\n */\r\n super.ValidatePage();\r\n\r\n log.debug(\"birthday\", (values.birthday || {}));\r\n\r\n return errors;\r\n }\r\n\r\n componentDidMount(a, b) {\r\n log.debug('component did mount');\r\n\r\n const { mstId } = { ...this.props.match.params };\r\n if (!(this.props.KycPerson || {}).AuthCol || true) {\r\n this.props.LoadPage('MstRecord', { mstId: mstId || '!' });\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevStates) {\r\n log.debug('component did update');\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.blocker) {\r\n unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n }\r\n\r\n render() {\r\n const reduxObj = this.props.KycPerson || {};\r\n const currMst = ((this.props.KycPerson || {}).Mst || {});\r\n\r\n const GenderCd15List = KycPersonReduxObj.ScreenDdlSelectors.GenderCd15(reduxObj) || [];\r\n const gender = currMst.GenderCd15;\r\n\r\n const NationalityId15List = KycPersonReduxObj.ScreenDdlSelectors.NationalityId15(reduxObj) || [];\r\n const NationalityId15 = currMst.NationalityId15;\r\n\r\n const CountryOfResId15List = KycPersonReduxObj.ScreenDdlSelectors.CountryOfResId15(reduxObj) || [];\r\n const CountryOfResId15 = currMst.CountryOfResId15;\r\n\r\n const CountryOfBirthId15List = KycPersonReduxObj.ScreenDdlSelectors.CountryOfBirthId15(reduxObj) || [];\r\n const CountryOfBirthId15 = currMst.CountryOfBirthId15;\r\n\r\n const OccupationId15List = KycPersonReduxObj.ScreenDdlSelectors.OccupationId15(reduxObj) || [];\r\n const OccupationId15 = currMst.OccupationId15;\r\n\r\n const IndustryId15List = KycPersonReduxObj.ScreenDdlSelectors.IndustryId15(reduxObj) || [];\r\n const IndustryId15 = currMst.IndustryId15;\r\n\r\n const SourceOfFundsId15List = KycPersonReduxObj.ScreenDdlSelectors.SourceOfFundsId15(reduxObj) || [];\r\n const SourceOfFundsId15 = currMst.SourceOfFundsId15;\r\n\r\n const SourceOfWealthId15List = KycPersonReduxObj.ScreenDdlSelectors.SourceOfWealthId15(reduxObj) || [];\r\n const SourceOfWealthId15 = currMst.SourceOfWealthId15;\r\n\r\n const PurposeId15List = KycPersonReduxObj.ScreenDdlSelectors.PurposeId15(reduxObj) || [];\r\n const PurposeId15 = currMst.PurposeId15;\r\n\r\n const IdIssueCountryId15List = KycPersonReduxObj.ScreenDdlSelectors.IdIssueCountryId15(reduxObj) || [];\r\n const IdIssueCountryId15 = currMst.IdIssueCountryId15;\r\n\r\n const Pep15List = KycPersonReduxObj.ScreenDdlSelectors.Pep15(reduxObj);\r\n const Pep = currMst.Pep15;\r\n\r\n const IdTypeId15List = KycPersonReduxObj.ScreenDdlSelectors.IdTypeId15(reduxObj) || [];\r\n const IdTypeId15 = currMst.IdTypeId15;\r\n\r\n const internalStatus = currMst.InternalStatus15 || \"\";\r\n const isDisabled = (internalStatus === \"p1\" || internalStatus === \"P3\" || internalStatus === \"P4\" || internalStatus === \"AP\" || internalStatus === \"DE\");\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n { return obj.key === currMst.GenderCd15 })[0],\r\n nationality: NationalityId15List.filter(obj => { return obj.key === NationalityId15 })[0],\r\n residency: CountryOfResId15List.filter(obj => { return obj.key === CountryOfResId15 })[0],\r\n countryOfBirth: CountryOfBirthId15List.filter(obj => { return obj.key === CountryOfBirthId15 })[0],\r\n occupation: OccupationId15List.filter(obj => { return obj.key === OccupationId15 })[0],\r\n industry: IndustryId15List.filter(obj => { return obj.key === IndustryId15 })[0],\r\n sourceOfFunds: SourceOfFundsId15List.filter(obj => { return obj.key === SourceOfFundsId15 })[0],\r\n othersOfFunds: formatContent(currMst.OthersOfFunds15 || '', 'TextBox'),\r\n sourceOfWealth: SourceOfWealthId15List.filter(obj => { return obj.key === SourceOfWealthId15 })[0],\r\n othersOfWealth: formatContent(currMst.OthersOfWealth15 || '', 'TextBox'),\r\n birthday: currMst.DateOfBirth15 || new Date(),\r\n contactNumber: formatContent(currMst.PhoneNbrs15 || '', 'TextBox'),\r\n address: formatContent(currMst.Addresses15 || '', 'TextBox'),\r\n postalCode: formatContent(currMst.PostalCode15 || '', 'TextBox'),\r\n annualIncome: formatContent(currMst.AnnualIncome15 || '', 'TextBox'),\r\n purpose: PurposeId15List.filter(obj => { return obj.key === PurposeId15 })[0],\r\n othersOfPurpose: formatContent(currMst.OthersOfPurpose15 || '', 'TextBox'),\r\n pep: Pep15List.filter(obj => { return obj.key === currMst.Pep15 })[0],\r\n idType: IdTypeId15List.filter(obj => { return obj.key === currMst.IdTypeId15 })[0],\r\n idNumber: formatContent(currMst.IdNumber15 || '', 'TextBox'),\r\n idIssueCountry: IdIssueCountryId15List.filter(obj => { return obj.key === IdIssueCountryId15 })[0],\r\n issueDate: currMst.IdIssueDate15,\r\n expiryDate: currMst.IdExpiryDate15,\r\n }}\r\n key={this.state.currentPersonalDetailKey}\r\n isInitialValid={true}\r\n validate={this.ValidatePage}\r\n validateOnChange={true}\r\n validateOnBlur={true}\r\n // onSubmit={this.SubmitDeclaration}\r\n onSubmit={this.SavePage}\r\n render={({\r\n values,\r\n errors,\r\n touched,\r\n isSubmitting,\r\n dirty,\r\n setFieldValue,\r\n setFieldTouched,\r\n handleChange,\r\n submitForm,\r\n setFieldError,\r\n isValid\r\n }) => (\r\n
    \r\n {this.GrabFormikBag({ errors, touched, isSubmitting, dirty, isValid })}\r\n \r\n \r\n
    \r\n

    Step 1 of 4: Personal Details

    \r\n {dirty && }\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {/*
    */}\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {errors.name && touched.name && {errors.name}}\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {errors.gender && touched.gender && {errors.gender}}\r\n
    \r\n \r\n
    \r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n { return obj.key === CountryOfBirthId15 })}\r\n options={CountryOfBirthId15List}\r\n filterBy={this.AutoCompleteFilterBy}\r\n // disabled={(authCol.NationalityId15 || {}).readonly ? true : false} \r\n disabled={isDisabled}\r\n />\r\n
    \r\n {errors.countryOfBirth && touched.countryOfBirth && {errors.countryOfBirth}}\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {errors.birthday && touched.birthday && {errors.birthday}}\r\n
    \r\n \r\n
    \r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n { return obj.key === NationalityId15 })}\r\n options={NationalityId15List}\r\n filterBy={this.AutoCompleteFilterBy}\r\n // disabled={(authCol.NationalityId15 || {}).readonly ? true : false} \r\n disabled={isDisabled}\r\n />\r\n
    \r\n {errors.nationality && touched.nationality && {errors.nationality}}\r\n
    \r\n \r\n \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n \r\n \r\n
    \r\n
    \r\n }\r\n />\r\n \r\n
    \r\n \r\n
    \r\n {errors.address && touched.address && {errors.address}}\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {errors.postalCode && touched.postalCode && {errors.postalCode}}\r\n
    \r\n \r\n \r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n { return obj.key === CountryOfResId15 })}\r\n options={CountryOfResId15List}\r\n filterBy={this.AutoCompleteFilterBy}\r\n // disabled={(authCol.NationalityId15 || {}).readonly ? true : false} \r\n disabled={isDisabled}\r\n />\r\n
    \r\n {errors.residency && touched.residency && {errors.residency}}\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n {/* */}\r\n \r\n
    \r\n {errors.contactNumber && touched.contactNumber && {errors.contactNumber}}\r\n
    \r\n \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n { return obj.key === OccupationId15 })}\r\n options={OccupationId15List}\r\n filterBy={this.AutoCompleteFilterBy}\r\n // disabled={(authCol.NationalityId15 || {}).readonly ? true : false} \r\n disabled={isDisabled}\r\n />\r\n
    \r\n {errors.occupation && touched.occupation && {errors.occupation}}\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n { return obj.key === IndustryId15 })}\r\n options={IndustryId15List}\r\n filterBy={this.AutoCompleteFilterBy}\r\n // disabled={(authCol.NationalityId15 || {}).readonly ? true : false} \r\n disabled={isDisabled}\r\n />\r\n
    \r\n {errors.industry && touched.industry && {errors.industry}}\r\n
    \r\n \r\n
    \r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n { return obj.key === SourceOfWealthId15 })}\r\n options={SourceOfWealthId15List}\r\n filterBy={this.AutoCompleteFilterBy}\r\n // disabled={(authCol.NationalityId15 || {}).readonly ? true : false} \r\n disabled={isDisabled}\r\n />\r\n
    \r\n {errors.sourceOfWealth && touched.sourceOfWealth && {errors.sourceOfWealth}}\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {/* {errors.othersOfWealth && touched.othersOfWealth && {errors.othersOfWealth}} */}\r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n { return obj.key === SourceOfFundsId15 })}\r\n options={SourceOfFundsId15List}\r\n filterBy={this.AutoCompleteFilterBy}\r\n // disabled={(authCol.NationalityId15 || {}).readonly ? true : false} \r\n disabled={isDisabled}\r\n />\r\n
    \r\n {errors.sourceOfFunds && touched.sourceOfFunds && {errors.sourceOfFunds}}\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {/* {errors.othersOfFunds && touched.othersOfFunds && {errors.othersOfFunds}} */}\r\n
    \r\n \r\n
    \r\n\r\n {/* \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {errors.transAmount && touched.transAmount && {errors.transAmount}}\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {errors.transFrequency && touched.transFrequency && {errors.transFrequency}}\r\n
    \r\n \r\n
    */}\r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n { return obj.key === PurposeId15 })}\r\n options={PurposeId15List}\r\n filterBy={this.AutoCompleteFilterBy}\r\n // disabled={(authCol.NationalityId15 || {}).readonly ? true : false} \r\n disabled={isDisabled}\r\n />\r\n
    \r\n {errors.purpose && touched.purpose && {errors.purpose}}\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {/* {errors.othersOfPurpose && touched.othersOfPurpose && {errors.othersOfPurpose}} */}\r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {errors.annualIncome && touched.annualIncome && {errors.annualIncome}}\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n }\r\n />\r\n \r\n
    \r\n \r\n
    \r\n {errors.pep && touched.pep && {errors.pep}}\r\n
    \r\n \r\n \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {errors.idType && touched.idType && {errors.idType}}\r\n
    \r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {errors.idNumber && touched.idNumber && {errors.idNumber}}\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n { return obj.key === IdIssueCountryId15 })}\r\n options={IdIssueCountryId15List}\r\n filterBy={this.AutoCompleteFilterBy}\r\n // disabled={(authCol.IdIssueCountryId15 || {}).readonly ? true : false} \r\n disabled={isDisabled}\r\n />\r\n
    \r\n {errors.idIssueCountry && touched.idIssueCountry && {errors.idIssueCountry}}\r\n
    \r\n \r\n
    \r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {errors.issueDate && touched.issueDate && {errors.issueDate}}\r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n {errors.expiryDate && touched.expiryDate && {errors.expiryDate}}\r\n
    \r\n \r\n
    \r\n\r\n {!isDisabled && \r\n \r\n Save and Continue\r\n {(isSubmitting || reduxObj.loading) &&\r\n \r\n }\r\n \r\n }\r\n
    \r\n \r\n
    \r\n )}\r\n />\r\n \r\n \r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n KycPerson: state.KycPerson,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { login: login },\r\n { LoadPage: KycPersonReduxObj.LoadPage.bind(KycPersonReduxObj) },\r\n { SavePage: KycPersonReduxObj.SavePage.bind(KycPersonReduxObj) },\r\n { SearchNationalityId15: KycPersonReduxObj.SearchActions.SearchNationalityId15.bind(KycPersonReduxObj) },\r\n { SearchCountryOfResId15: KycPersonReduxObj.SearchActions.SearchCountryOfResId15.bind(KycPersonReduxObj) },\r\n { SearchCountryOfBirthId15: KycPersonReduxObj.SearchActions.SearchCountryOfBirthId15.bind(KycPersonReduxObj) },\r\n { SearchIndustryId15: KycPersonReduxObj.SearchActions.SearchIndustryId15.bind(KycPersonReduxObj) },\r\n { SearchOccupationId15: KycPersonReduxObj.SearchActions.SearchOccupationId15.bind(KycPersonReduxObj) },\r\n { SearchSourceOfFundsId15: KycPersonReduxObj.SearchActions.SearchSourceOfFundsId15.bind(KycPersonReduxObj) },\r\n { SearchSourceOfWealthId15: KycPersonReduxObj.SearchActions.SearchSourceOfWealthId15.bind(KycPersonReduxObj) },\r\n { SearchPurposeId15: KycPersonReduxObj.SearchActions.SearchPurposeId15.bind(KycPersonReduxObj) },\r\n { SearchIdIssueCountryId15: KycPersonReduxObj.SearchActions.SearchIdIssueCountryId15.bind(KycPersonReduxObj) },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(PersonalDetail));","import React from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col } from 'reactstrap';\r\nimport log from '../../helpers/logger';\r\nimport { Formik, Field, Form } from 'formik';\r\nimport RintagiScreen from '../../components/custom/Screen';\r\nimport AutoCompleteField from '../../components/custom/AutoCompleteField';\r\nimport DropdownField from '../../components/custom/DropdownField';\r\nimport { registerBlocker, unregisterBlocker } from '../../helpers/navigation';\r\nimport ModalDialog from '../../components/custom/ModalDialog';\r\nimport Hint from '../../components/custom/Hint';\r\nimport { formatContent } from '../../helpers/formatter';\r\nimport KycCorporateReduxObj, { ShowMstFilterApplied } from '../../redux/KycCorporate';\r\nimport { login } from '../../redux/Auth';\r\nimport { isEmptyId } from '../../helpers/utils'\r\nimport PhoneField from '../../components/custom/PhoneField';\r\n\r\nclass CorporateDetail extends RintagiScreen {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n initialing: true,\r\n formikValidatedTime: null,\r\n currentPersonalDetailKey: Date.now(),\r\n othersOfWealthDisable: true,\r\n othersOfFundsDisable: true,\r\n othersOfPurposeDisable: true,\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n submitting: false,\r\n reduxRefreshed: false,\r\n }\r\n\r\n this.DropdownChange = this.DropdownChange.bind(this);\r\n this.TextChange = this.TextChange.bind(this);\r\n this.ValidatePage = this.ValidatePage.bind(this);\r\n this.OnModalReturn = this.OnModalReturn.bind(this);\r\n this.setDirtyFlag = this.setDirtyFlag.bind(this);\r\n\r\n const loadPageOptions = { SkipMetaData: true, SkipSupportingData: true };\r\n }\r\n\r\n CountryOfIncorpId16InputChange() { const _this = this; return function (name, v) { const filterBy = ''; _this.props.SearchCountryOfIncorpId16(v, filterBy); } }\r\n\r\n Back() {\r\n this.props.history.goBack();\r\n }\r\n\r\n /* end of form related handling functions */\r\n\r\n componentDidMount(a, b) {\r\n log.debug('component did mount');\r\n\r\n const { mstId } = { ...this.props.match.params };\r\n if (!(this.props.KycCorporate || {}).AuthCol || true) {\r\n this.props.LoadPage('MstRecord', { mstId: mstId || '!' });\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevStates) {\r\n log.debug('component did update');\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.blocker) {\r\n unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n }\r\n\r\n render() {\r\n const reduxObj = this.props.KycCorporate || {};\r\n const currMst = ((this.props.KycCorporate || {}).Mst || {});\r\n\r\n const CountryOfIncorpId16List = KycCorporateReduxObj.ScreenDdlSelectors.CountryOfIncorpId16(reduxObj);\r\n const CountryOfIncorpId16 = currMst.CountryOfIncorpId16;\r\n\r\n const isDisabled = true;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n { return obj.key === CountryOfIncorpId16 })[0],\r\n addresses: formatContent(currMst.Addresses16 || '', 'TextBox'),\r\n phoneNbrs: formatContent(currMst.PhoneNbrs16 || '', 'TextBox'),\r\n }}\r\n key={this.state.currentPersonalDetailKey}\r\n isInitialValid={true}\r\n validate={this.ValidatePage}\r\n validateOnChange={true}\r\n validateOnBlur={true}\r\n // onSubmit={this.SubmitDeclaration}\r\n onSubmit={this.SavePage}\r\n render={({\r\n values,\r\n errors,\r\n touched,\r\n isSubmitting,\r\n dirty,\r\n setFieldValue,\r\n setFieldTouched,\r\n handleChange,\r\n submitForm,\r\n setFieldError,\r\n isValid\r\n }) => (\r\n
    \r\n {this.GrabFormikBag({ errors, touched, isSubmitting, dirty, isValid })}\r\n \r\n \r\n
    \r\n

    Corporate Details

    \r\n {dirty && }\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {/*
    */}\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n { return obj.key === CountryOfIncorpId16 })}\r\n options={CountryOfIncorpId16List}\r\n filterBy={this.AutoCompleteFilterBy}\r\n disabled={isDisabled}\r\n />\r\n
    \r\n
    \r\n \r\n \r\n\r\n \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n {/* */}\r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n )}\r\n />\r\n
    \r\n
    \r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n KycCorporate: state.KycCorporate,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { login: login },\r\n { LoadPage: KycCorporateReduxObj.LoadPage.bind(KycCorporateReduxObj) },\r\n { SavePage: KycCorporateReduxObj.SavePage.bind(KycCorporateReduxObj) },\r\n { SearchCountryOfIncorpId16: KycCorporateReduxObj.SearchActions.SearchCountryOfIncorpId16.bind(KycCorporateReduxObj) },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(CorporateDetail));","import React, { useCallback, useEffect, useLayoutEffect, useMemo, useState, useRef, FunctionComponent } from \"react\";\r\n\r\n// below are for connecting to react-redux\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { logout, login } from '../../redux/Auth';\r\nimport { useLiquity } from \"../../hooks/LiquityContext\";\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col, Progress, ButtonGroup, ButtonToolbar } from 'reactstrap';\r\nimport KycPersonReduxObj, { ShowMstFilterApplied } from '../../redux/KycPerson';\r\nimport log from '../../helpers/logger';\r\n\r\nimport businessImg from '../../img/businessImg.png';\r\nimport CommentAlertOutlineIcon from 'mdi-react/CommentAlertOutlineIcon';\r\nimport CloseCircleOutlineIcon from 'mdi-react/CloseCircleOutlineIcon';\r\nimport { sendBusinessAccountRequestEmail } from '../../services/KycPersonService';\r\nimport ModalDialog from '../../components/custom/ModalDialog';\r\n\r\nconst BusinessRequest = (props) => {\r\n const { account } = useLiquity();\r\n\r\n // initial state equivalent in constructor\r\n const [myState, setMyState] = useState({\r\n reduxRefreshed: false,\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n buttonDisable: false,\r\n });\r\n\r\n const [spinnerStatus, setSpinnerStatus] = useState(true);\r\n\r\n const [didMount, setDidMount] = useState(false);\r\n\r\n // react-redux connection equivalent\r\n const dispatch = useDispatch();\r\n const { user, auth, global, kycPerson } = useSelector((reduxState) => {\r\n return {\r\n user: reduxState.auth.user || {},\r\n auth: reduxState.auth,\r\n global: reduxState.global,\r\n kycPerson: reduxState.KycPerson,\r\n };\r\n });\r\n\r\n // simulating class(this -> _this)\r\n const [_state, setState] = useState(0);\r\n\r\n const _this = useMemo(() => ({\r\n state: myState,\r\n\r\n setState: (newState) => {\r\n setMyState({ ...myState, ...newState });\r\n setState(_state + 1);\r\n },\r\n\r\n Back: (event) => {\r\n // this.props.history.push('/what-next');\r\n },\r\n\r\n SubmitRequest: (callback) => {\r\n //email function here\r\n const userEmail = ((user || {}).UsrName || {});\r\n _this.setState({buttonDisable: true});\r\n\r\n sendBusinessAccountRequestEmail(userEmail).then(\r\n (resp) => {\r\n if (resp.data.result == \"success\") {\r\n const confirm = () => {\r\n if (callback) callback(true);\r\n }\r\n const cancel = () => {\r\n if (callback) callback(false);\r\n }\r\n const modalChange = (YesNo) => {\r\n _this.setState({ ModalOpen: false });\r\n if (YesNo === \"Y\") confirm();\r\n else cancel();\r\n };\r\n\r\n var messageCnt = \"\";\r\n messageCnt = \"
    \" +\r\n \"

    A notification email has been sent to the FIntrux team.
    One of our representatives will get in touch with you shortly.

    \" +\r\n \"
    \";\r\n\r\n _this.setState({\r\n buttonDisable: false,\r\n ModalOpen: true,\r\n ModalSuccess: confirm,\r\n ModalCancel: cancel,\r\n OnModalReturn: modalChange,\r\n ModalHeader: false,\r\n ModalColor: \"success\",\r\n ModalTitle: 'Business Account Request Email Sent',\r\n ModalMsg:
    \r\n });\r\n }\r\n },\r\n (error) => {\r\n log.debug(\"email error\", error);\r\n }\r\n )\r\n }\r\n\r\n }), [_state, myState, user]);\r\n\r\n // ComponentDidMount() equivalent below but must do only once controled by didMount\r\n useLayoutEffect(() => {\r\n const { mstId } = { ...props.match.params };\r\n if (!didMount && (!(kycPerson || {}).AuthCol || true)) {\r\n setDidMount(true);\r\n // must use the dispatch form for the redux binding\r\n dispatch(KycPersonReduxObj.LoadPage('MstRecord', { mstId: mstId || '!' }))\r\n .then(data => {\r\n setTimeout(() => setSpinnerStatus(false), 0);\r\n })\r\n // store.refresh();\r\n\r\n }\r\n\r\n }, [didMount, dispatch, kycPerson, props, _this]);\r\n\r\n // ComponentDidUpdate() equivalent\r\n useEffect(() => {\r\n\r\n }, [_this]);\r\n\r\n // body of the render()\r\n const currMst = ((kycPerson || {}).Mst || {});\r\n const UsrName = ((user || {}).UsrName || {});\r\n const kycName = currMst.Name15 || \"\";\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n

    Business User

    \r\n
    \r\n
    \r\n
    \r\n {kycName == \"\" &&\r\n
    \r\n
    \r\n

    Thanks for letting us know! Please click the \"Confirm Request\" button below to verify your request.

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

    Thanks for letting us know! We’ll contact you in the next 24 hours after confirming your request.

    \r\n
    */}\r\n
    \r\n
    \r\n }\r\n {kycName != \"\" &&\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    You already have a personal account as \"{kycName}\". If you want to switch to a business account, click the button \"confirm request\" below and our customer service will reach you within 24 hours to confirm your request.\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n }\r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n

    You’ll be contacted at
    {UsrName}

    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n \r\n { _this.SubmitRequest() }}>Confirm Request\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n};\r\n\r\nexport default withRouter(BusinessRequest);\r\n","import React, { Component } from 'react';\r\nimport log from '../../helpers/logger';\r\nimport classNames from 'classnames';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport fixOrientation from 'fix-orientation';\r\nimport { Row, Col, Spinner } from 'reactstrap';\r\nimport { showNotification } from '../../redux/Notification';\r\nimport Skeleton from 'react-skeleton-loader';\r\nimport { formatBytes, readUrl } from '../../helpers/formatter';\r\nimport { previewContent, uuid } from '../../helpers/domutils';\r\nimport moment from 'moment';\r\n\r\nfunction calcSize(width, height, max_width, max_height, noSwap) {\r\n\r\n if (!max_height && !max_width) return { width, height };\r\n if (width > height) {\r\n if (max_height) {\r\n if (height > max_height) {\r\n width *= max_height / height;\r\n height = max_height;\r\n }\r\n else if (max_width) {\r\n if (width > max_width) {\r\n height *= max_width / width;\r\n width = max_width;\r\n }\r\n }\r\n }\r\n else if (max_width) {\r\n if (width > max_width) {\r\n height *= max_width / width;\r\n width = max_width;\r\n }\r\n }\r\n }\r\n else {\r\n if (noSwap) { const x = max_width; max_width = max_height; max_width = x; }\r\n if (max_height) {\r\n if (width > max_height) {\r\n height *= max_height / width;\r\n width = max_height;\r\n }\r\n else if (max_width) {\r\n if (height > max_width) {\r\n width *= max_width / height;\r\n height = max_width;\r\n }\r\n }\r\n }\r\n else {\r\n if (height > max_width) {\r\n width *= max_width / height;\r\n height = max_width;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n width: width,\r\n height: height\r\n }\r\n}\r\n\r\nfunction stripEmbeddedBase64Prefix(base64string) {\r\n if (base64string && base64string.length > 0) {\r\n return base64string.replace(/^data:.+;base64,/, '');\r\n if (base64string.indexOf(\"data:image/jpeg;base64,\") >= 0) {\r\n return base64string.replace(\"data:image/jpeg;base64,\", \"\");\r\n }\r\n else if (base64string.indexOf(\"data:image/png;base64,\") >= 0) {\r\n return base64string.replace(\"data:image/png;base64,\", \"\");\r\n }\r\n }\r\n return base64string;\r\n}\r\n\r\nfunction addPreviewUrl(o) {\r\n if (!o) {\r\n return {\r\n previewUrl: 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAhwAAAABCAQAAAA/IL+bAAAAFElEQVR42mN89p9hFIyCUTAKSAIABgMB58aXfLgAAAAASUVORK5CYII='\r\n }\r\n }\r\n return {\r\n ...o,\r\n previewUrl: o.iconUrl ||\r\n (o.mimeType\r\n && o.mimeType.match(/image/)\r\n && (o.base64 || o.icon) \r\n ? 'data:' + o.mimeType + ';base64,' + (o.base64 || o.icon) \r\n : ''),\r\n contentUrl: o.mimeType\r\n && (o.base64 || o.icon) ? 'data:' + o.mimeType + ';base64,' + (o.base64 || o.icon) : '',\r\n }\r\n}\r\n\r\nfunction getFile(file, index, options, success, state, setState) {\r\n let reader = new FileReader();\r\n var fileType = file['type'];\r\n var progress = false;\r\n\r\n // debugger;\r\n // log.debug(reader);\r\n\r\n reader.fileName = file.name;\r\n\r\n reader.onloadstart = () => {\r\n // log.debug('IM PROGRESSING!!!!');\r\n // success(index, {\r\n // fileName: reader.fileName,\r\n // width: '',\r\n // height: '',\r\n // mimeType: file.type,\r\n // size: file.size,\r\n // lastModified: file.lastModified,\r\n // base64: stripEmbeddedBase64Prefix(readerResizedImg.result),\r\n // progress: true,\r\n // });\r\n setState({ progress: true });\r\n }\r\n if (fileType.split('/')[0] === 'image') {\r\n\r\n // const _this = this;\r\n\r\n reader.onloadend = () => {\r\n // Handles autorotation first\r\n fixOrientation(reader.result, { image: true }, function (fixed) {\r\n\r\n var properlyRotatedImg = {\r\n result: fixed\r\n }\r\n\r\n var img = document.createElement(\"img\");\r\n\r\n // Assiging rotated image to img canvas\r\n img.src = properlyRotatedImg.result;\r\n\r\n img.onload = () => {\r\n // Resizing image\r\n var canvas = document.createElement('canvas');\r\n var ctx = canvas.getContext(\"2d\");\r\n\r\n ctx.drawImage(img, 0, 0);\r\n\r\n // var options = _this.props.options || {};\r\n // var width = img.width;\r\n // var height = img.height;\r\n\r\n var MAX_WIDTH = (options.MaxImageSize || {}).Width;\r\n var MAX_HEIGHT = (options.MaxImageSize || {}).Height;\r\n\r\n var { width, height } = calcSize(img.width, img.height, MAX_WIDTH, MAX_HEIGHT);\r\n\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n // var ctx = canvas.getContext(\"2d\");\r\n\r\n // This lines turns tranparent background on PNG image to white when transforming from PNG to JPEG at the end\r\n ctx.fillStyle = \"#FFF\";\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n\r\n ctx.drawImage(img, 0, 0, width, height);\r\n\r\n var readerResizedImg = {\r\n result: canvas.toDataURL(\"image/jpeg\")\r\n }\r\n\r\n success(index, {\r\n fileName: reader.fileName,\r\n width: width,\r\n height: height,\r\n mimeType: file.type,\r\n size: file.size,\r\n lastModified: file.lastModified,\r\n base64: stripEmbeddedBase64Prefix(readerResizedImg.result),\r\n progress: false,\r\n });\r\n\r\n setState({ progress: false });\r\n //log.debug('IM FINISHED');\r\n }\r\n })\r\n };\r\n }\r\n else {\r\n reader.onloadend = () => {\r\n success(index, {\r\n // file: file,\r\n fileName: reader.fileName,\r\n mimeType: file.type || (reader.fileName.includes('.xls') && 'application/vnd.ms-excel'),\r\n size: file.size,\r\n lastModified: file.lastModified,\r\n base64: stripEmbeddedBase64Prefix(reader.result),\r\n progress: false,\r\n });\r\n\r\n setState({ progress: false });\r\n // log.debug('IM FINISHED');\r\n // _this.setState({ progress: false });\r\n // this.props.onChange({ name: file.name, mimeType: file.type, size: file.size, lastModified: file.lastModified, base64: reader });\r\n // this.props.onChange({ name: files[0].name, base64: reader });\r\n };\r\n }\r\n\r\n try {\r\n reader.readAsDataURL(file);\r\n }\r\n catch (e) {\r\n // if (this.props.onError) {\r\n // if (file === undefined) { } else {\r\n // this.props.onError(e, file.name);\r\n // }\r\n // }\r\n }\r\n}\r\n\r\nconst MAX_FILE_SIZE = 10 * 1024 * 1024;\r\nconst ALLOWED_MIME_TYPE = ['image/png', 'image/jpeg', 'image/gif', 'pdf',\r\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'text/csv',\r\n 'application/msword',\r\n 'application/vnd.ms-excel'\r\n];\r\nconst MAX_ALLOWED = 999999;\r\n\r\nclass FileInputField extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n files: props.files || [],\r\n deleteBtnVisibility: true,\r\n storedImgSize: { width: 0, height: 0 },\r\n progress: false,\r\n }\r\n\r\n this.getImgSize = this.getImgSize.bind(this);\r\n this.icon = this.icon.bind(this);\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps, prevState) {\r\n if (!prevState.files || !prevState.files.length) return { files: nextProps.files };\r\n var isMultiDoc = false;\r\n\r\n const revisedFiles = (nextProps.files || []).reduce((a, o) => { a[o.DocId || o.fileName] = o; isMultiDoc = isMultiDoc || (o.DocId && true); return a; }, {});\r\n const x = [\r\n ...prevState.files.map(o => ({\r\n ...o\r\n , base64: o && (o.base64 || (revisedFiles[o.DocId || o.fileName] || {}).base64 || (!isMultiDoc && (nextProps.files || []).length == 1 && nextProps.files[0].base64))\r\n , mimeType: o && (o.mimeType || (revisedFiles[o.DocId || o.fileName] || {}).mimeType || (!isMultiDoc && (nextProps.files || []).length == 1 && nextProps.files[0].mimeType))\r\n , fileName: o && (o.fileName || (!isMultiDoc && (nextProps.files || []).length == 1 && nextProps.files[0].mimeType))\r\n })),\r\n ];\r\n return {\r\n files: x\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevStates) {\r\n }\r\n\r\n roundTrip = () => {\r\n return ((state) => {\r\n this.setState(state);\r\n }).bind(this);\r\n }\r\n\r\n getImgSize(img, stateKey) {\r\n var imgTag = document.createElement(\"img\");\r\n var existingImgSize = this.state.storedImgSize;\r\n imgTag.src = img;\r\n imgTag.onload = () => {\r\n const { width, height } = imgTag;\r\n if (existingImgSize.width !== width || existingImgSize.height !== height) {\r\n this.setState({ [stateKey]: { width: width, height: height } });\r\n }\r\n };\r\n }\r\n\r\n handleChange = value => {\r\n // this is going to call setFieldValue and manually update values.this.props.name\r\n // this.props.onChange(this.props.name, value);\r\n this.setState({ deleteBtnVisibility: false });\r\n\r\n value.preventDefault();\r\n // convert files to an array\r\n const files = [...value.target.files];\r\n // log.debug(files);\r\n\r\n const _this = this;\r\n\r\n const fileCount = files.length;\r\n let fileList = [...(this.props.multiple ? _this.state.files.sort((a, b) => a.DocId - b.DocId) : [])];\r\n const existingCount = fileList.length;\r\n let x = 0;\r\n let maxErrorShown = false;\r\n const maxSize = (_this.props.options || {}).maxSize || MAX_FILE_SIZE;\r\n const allowedMime = (_this.props.options || {}).allowedMime || ALLOWED_MIME_TYPE;\r\n const fileTypeAllowed = (fileType) => allowedMime.filter(t => fileType.indexOf(t) >= 0).length > 0;\r\n const actionTimeStamp = Date.now();\r\n const newFiles = [];\r\n const maxAllowed = (_this.props.options || {}).maxFileCount || MAX_ALLOWED;\r\n const receiveFile = (i, file) => {\r\n x = x + 1;\r\n if (file.base64.length > maxSize * 4 / 3) {\r\n // alert('maximum allowed upload file size is ' + maxSize)\r\n this.props.showNotification(\"E\", { message: 'Maximum allowed upload file size is ' + formatBytes(maxSize) })\r\n }\r\n else if (allowedMime && !fileTypeAllowed(file.mimeType)) {\r\n // alert('selected file type is not allowed')\r\n this.props.showNotification(\"E\", { message: 'Selected file type is not allowed' })\r\n }\r\n else if (x + existingCount > maxAllowed) {\r\n // log.debug(x, existingCount, x + existingCount);\r\n // log.debug('MAX REACHED');\r\n if (!maxErrorShown) {\r\n this.props.showNotification(\"E\", { message: 'Maximum allowed amount of files is ' + maxAllowed });\r\n maxErrorShown = true;\r\n }\r\n // return;\r\n }\r\n else {\r\n // log.debug(x, existingCount, file);\r\n const newFile = { ...file, ts: actionTimeStamp + 1 };\r\n fileList[existingCount + i] = newFile;\r\n newFiles.push(newFile);\r\n _this.setState({ files: fileList });\r\n\r\n }\r\n if (fileCount === x && typeof _this.props.onChange === \"function\") {\r\n // newFiles = newFile.filter(f => f);\r\n // log.debug(_this.state.files);\r\n _this.setState({ files: _this.state.files.filter(f => f && f.base64) });\r\n _this.props.onChange(fileList.filter(f => f), _this.props.name || (_this.props.field || {}).name, { fieldname: this.props.fieldname, listidx: _this.props.listidx, fieldpath: _this.props.fieldpath });\r\n if (typeof this.props.onAdd === \"function\" && this.props.multiple) {\r\n newFiles.forEach(o => {\r\n this.props.onAdd(o)\r\n .then(\r\n result => {\r\n\r\n }\r\n )\r\n .catch(\r\n error => {\r\n\r\n }\r\n )\r\n })\r\n }\r\n }\r\n\r\n }\r\n\r\n var filesArray = files.forEach((obj, i) => {\r\n getFile(obj, i, this.props.options, receiveFile, this.state, this.roundTrip());\r\n });\r\n };\r\n\r\n downloadFile = i => () => {\r\n const _this = this;\r\n const currentUrlTitle = document.getElementsByTagName(\"title\")[0].innerHTML;\r\n const selectedFile = this.props.multiple ? this.state.files.sort((a, b) => a.DocId - b.DocId)[i] : this.state.files.sort((a, b) => a.DocId - b.DocId)[0];\r\n const envPublicUrl = process.env.PUBLIC_URL;\r\n const isIE = window.navigator && window.navigator.msSaveOrOpenBlob && false;\r\n const isImage = (/image/i).test((selectedFile || {}).mimeType);\r\n\r\n if (typeof this.props.onClick === \"function\" && !selectedFile.base64) {\r\n this.props.onClick(selectedFile);\r\n }\r\n else {\r\n log.debug('no content file selected document', selectedFile);\r\n };\r\n\r\n }\r\n previewSelectedFile = i => () => {\r\n // must open window during the click event and not in the promise, browser security prevent that from happening\r\n const _this = this;\r\n const currentUrlTitle = document.getElementsByTagName(\"title\")[0].innerHTML;\r\n const selectedFile = this.props.multiple ? this.state.files.sort((a, b) => a.DocId - b.DocId)[i] : this.state.files.sort((a, b) => a.DocId - b.DocId)[0];\r\n const envPublicUrl = process.env.PUBLIC_URL;\r\n const isIE = window.navigator && window.navigator.msSaveOrOpenBlob && false;\r\n const isImage = (/image/i).test((selectedFile || {}).mimeType);\r\n const download = false;\r\n const previewSig = uuid();\r\n const dataObj = {\r\n ...selectedFile,\r\n title: currentUrlTitle + ' ' + ((selectedFile || {}).fileName || ''),\r\n fileSig: previewSig,\r\n };\r\n /* window.open MUST BE DONE here in the click even function or it would be blocked by popup blocker */\r\n // sessionStorage.setItem(\"PreviewAttachment\", JSON.stringify({ ...dataObj, fileSig: previewSig }));\r\n const win = (!isIE || isImage) && !download && window.open(envPublicUrl + '/helper/showAttachment.html' + '?fileSig=' + previewSig, '_blank');\r\n previewContent({\r\n dataObj: dataObj\r\n , download: false\r\n , winObj: win\r\n , dataPromise: undefined\r\n , previewSig: previewSig\r\n , containerUrl: envPublicUrl + '/helper/showAttachment.html' + '?fileSig=' + previewSig\r\n });\r\n return;\r\n const makeDoc = (body) => {\r\n return \"
    \" + \"\" + currentUrlTitle + ' ' + (selectedFile.fileName || '') + \"\"\r\n + \"
    \" + body + \"\"\r\n }\r\n const injectContent = function (file) {\r\n //debugger;\r\n const header = win.document.getElementById('header');\r\n const body = win.document.getElementsByTagName('body');\r\n const target = body[0] || body;\r\n const innerHTML = target.innerHTML;\r\n //const content = makeDoc('');\r\n //const content = '';\r\n const content = addPreviewUrl(selectedFile).contentUrl;\r\n //const content = 'https://www.youtube.com/embed/01ON04GCwKs'\r\n //const content = ''\r\n win.postMessage(content, \"*\");\r\n // if (body[0])\r\n // body[0].innerHTML = makeDoc('');\r\n // else\r\n // body.innerHTML = makeDoc('');\r\n }\r\n if (typeof this.props.onClick === \"function\" && !selectedFile.base64) {\r\n\r\n }\r\n else {\r\n setTimeout(() => {\r\n injectContent(selectedFile);\r\n }, 500);\r\n };\r\n\r\n // win.onload = function(){\r\n\r\n // //debugger;\r\n // injectContent(selectedFile);\r\n // // const header = win.document.getElementById('header');\r\n // // const body = win.document.getElementsByTagName('body');\r\n // // //header.innerHTML = \"\" + currentUrlTitle + ' ' + (selectedFile.fileName || '') + \"\";\r\n // // if (body[0])\r\n // // body.innerHTML = makeDoc('');\r\n // // else\r\n // // body[0].innerHTML = makeDoc('');\r\n // };\r\n // const currentUrlTitle = document.getElementsByTagName(\"title\")[0].innerHTML;\r\n // const makeDoc = (body) => {\r\n // return \"
    \" + \"\" + currentUrlTitle + ' ' + (selectedFile.fileName || '') + \"\"\r\n // + \"
    \" + body + \"\"\r\n // }\r\n // const preview = (file) => {\r\n // win.document.write(makeDoc(''));\r\n // };\r\n\r\n // if (typeof this.props.onClick === \"function\" && !selectedFile.base64) {\r\n // win.document.write(makeDoc('Loading... please wait'));\r\n // Promise.resolve(this.props.onClick(this.state.files[i]))\r\n // .then(\r\n // result => {\r\n // log.debug('file input return', result)\r\n // //preview(result);\r\n // }\r\n // )\r\n // .catch(\r\n // error => {\r\n // log.debug('error', error)\r\n // }\r\n // )\r\n // }\r\n // else {\r\n // preview(selectedFile);\r\n // }\r\n }\r\n\r\n // previewServerFile = (base64ImgContent, mimeType) => {\r\n // return () => {\r\n // var win = window.open();\r\n // var img = base64ImgContent;\r\n // var wrappedImg = (img.startsWith('data') ? '' : \"data:\" + mimeType + \";base64,\") + img;\r\n // win.document.write('');\r\n // }\r\n // }\r\n\r\n removeSelectedFile = i => (event) => {\r\n // log.debug(event.target.value);\r\n // log.debug(i);\r\n // const sortedFiles = this.state.files.sort((a, b) => a.DocId - b.DocId);\r\n const file = this.state.files.sort((a, b) => a.DocId - b.DocId)[i];\r\n // log.debug(this.state.files)\r\n\r\n this.state.files.splice(i, 1);\r\n this.setState({\r\n // file: null,\r\n // previewUrl: null,\r\n // deleteBtnVisibility: true,\r\n files: [...this.state.files]\r\n });\r\n if ((file.DocId || !file.ts) && (typeof this.props.onDelete === \"function\")) {\r\n this.props.onDelete(file)\r\n .then(\r\n (result) => {\r\n //log.debug('remove file result', result)\r\n }\r\n )\r\n .catch(error => {\r\n log.debug('remove file from server error', error)\r\n })\r\n }\r\n\r\n const fileInput = document.getElementsByName(this.props.name || (this.props.field || {}).name)[0];\r\n // log.debug(fileInput);\r\n fileInput.value = '';\r\n // log.debug(fileInput);\r\n\r\n this.props.onChange(this.state.files, this.props.name || (this.props.field || {}).name, { fieldname: this.props.fieldname, listidx: this.props.listidx, fieldpath: this.props.fieldpath });\r\n }\r\n\r\n sendEmptyFile = () => {\r\n var emptyObject = {\r\n result: \"iVBORw0KGgoAAAANSUhEUgAAAhwAAAABCAQAAAA/IL+bAAAAFElEQVR42mN89p9hFIyCUTAKSAIABgMB58aXfLgAAAAASUVORK5CYII=\",\r\n }\r\n\r\n this.props.onChange({ name: '', base64: emptyObject }, this.props.name || (this.props.field || {}).name, { fieldname: this.props.fieldname, listidx: this.props.listidx, fieldpath: this.props.fieldpath });\r\n this.setState({ deleteBtnVisibility: false });\r\n }\r\n\r\n icon = i => {\r\n const file = (this.state.files.sort((a, b) => a.DocId - b.DocId))[i];\r\n const mimeType = (file || {}).mimeType;\r\n const iconUrl = (file || {}).iconUrl;\r\n \r\n if (this.iconUrl) return '';\r\n\r\n if (mimeType === 'image/png') {\r\n return 'fa-file-image-o';\r\n }\r\n if (mimeType === 'image/jpeg') {\r\n return 'fa-file-image-o';\r\n }\r\n if (mimeType === 'image/gif') {\r\n return 'fa-file-image-o';\r\n }\r\n if (mimeType === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') {\r\n return 'fa-file-word-o';\r\n }\r\n if (mimeType === 'application/msword') {\r\n return 'fa-file-word-o';\r\n }\r\n if (mimeType === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') {\r\n return 'fa-file-excel-o';\r\n }\r\n if (mimeType === 'text/csv') {\r\n return 'fa-file-excel-o';\r\n }\r\n if (mimeType === 'application/vnd.ms-excel') {\r\n return 'fa-file-excel-o';\r\n }\r\n if (mimeType === 'application/pdf') {\r\n return 'fa-file-pdf-o';\r\n }\r\n if (mimeType !== 'image/png' ||\r\n mimeType !== 'image/jpeg' ||\r\n mimeType !== 'image/gif' ||\r\n mimeType !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' ||\r\n mimeType !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ||\r\n mimeType !== 'application/pdf' ||\r\n mimeType !== 'application/msword' ||\r\n mimeType !== 'text/csv' ||\r\n mimeType !== 'application/vnd.ms-excel') {\r\n return 'fa-file-o';\r\n }\r\n }\r\n\r\n render() {\r\n\r\n // let previewClass = classNames({\r\n // 'd-none': true,\r\n // 'd-block': this.state.files[0].previewUrl != null,\r\n // });\r\n\r\n // let deleteClass = classNames({\r\n // 'd-none': !this.state.deleteBtnVisibility,\r\n // 'd-block': this.state.deleteBtnVisibility,\r\n // });\r\n\r\n // let previewIconClass = classNames({\r\n // 'd-none': true,\r\n // 'd-block': this.state.files[0].previewUrl !== null,\r\n // })\r\n\r\n // let deleteIconClass = classNames({\r\n // 'd-none': !this.state.deleteBtnVisibility,\r\n // 'd-block': this.state.deleteBtnVisibility,\r\n // })\r\n\r\n // const fileInfo = this.props.value || {};\r\n const mimeType = ((this.state.files || [])[0] || {}).mimeType;\r\n const options = this.props.options || {};\r\n // const inPlaceImg = ((this.state.files[0] || {}).mimeType || '').startsWith('image/') || true;\r\n // const fileContent = ((this.state.files[0] || {}).base64 || '').startsWith('data:') ? '' : 'data:' + mimeType + ';base64,' + ((this.state.files[0] || {}).base64 || '');\r\n\r\n let iconClass = classNames({\r\n 'fa-file-word-o': mimeType === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n 'fa-file-excel-o': mimeType === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'fa-file-pdf-o': mimeType === 'application/pdf',\r\n 'fa-file-o': mimeType !== 'image/jpeg' || 'image/png' || 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || 'application/pdf',\r\n });\r\n\r\n // if ((this.state.files[0] || {}).base64) this.getImgSize(fileContent, 'storedImgSize');\r\n\r\n var MAX_WIDTH = (options.MinImageSize || {}).Width;\r\n var MAX_HEIGHT = (options.MinImageSize || {}).Height;\r\n\r\n const storedIconImageSize = calcSize(this.state.storedImgSize.width, this.state.storedImgSize.height, MAX_WIDTH, MAX_HEIGHT);\r\n const uploadIconImageSize = calcSize(this.state.width, this.state.height, MAX_WIDTH, MAX_HEIGHT);\r\n\r\n const getPreviewURL = (o) => {\r\n const abc = {\r\n ...o, previewUrl: o.previewUrl || (\"data:\" + o.mimeType + \";base64,\" + o.base64),\r\n }\r\n // log.debug(abc);\r\n return abc;\r\n }\r\n\r\n const maxAllowed = (this.props.options || {}).maxFileCount;\r\n const filesAmount = (this.state.files || {}).length;\r\n\r\n // log.debug(maxAllowed, filesAmount);\r\n\r\n return (\r\n
    \r\n {/* \r\n \r\n
    \r\n
    \r\n \r\n \r\n {\r\n (fileInfo.base64 || '').length > 0 && \r\n }\r\n \r\n
    \r\n
    \r\n\r\n \r\n \r\n {\r\n (fileInfo.base64 || '').length > 0 && inPlaceImg &&\r\n
    \r\n

    {fileInfo.fileName}

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

    {fileInfo.fileName}

    \r\n
    \r\n \r\n \r\n {\r\n (fileInfo.base64 || '').length > 0 && inPlaceImg && (mimeType === 'image/jpeg' || mimeType === 'image/png' || mimeType === 'image/gif') &&\r\n \r\n }\r\n {\r\n (mimeType === 'image/jpeg' || mimeType === 'image/png' || mimeType === 'image/gif') &&\r\n \r\n }\r\n \r\n
    */}\r\n\r\n
    \r\n
    \r\n {(this.state.files || []).length > 0 &&\r\n this.state.files\r\n .filter(f => f && f.mimeType)\r\n .sort((a, b) => a.DocId - b.DocId)\r\n .map((obj, i) => {\r\n return (\r\n
    \r\n
    \r\n {(!(obj || {}).base64 && !(obj || {}).icon) && }\r\n {obj && (obj.mimeType || '').match(/image/) && (!obj.base64 && !obj.icon) && !obj.iconUrl &&\r\n \r\n }\r\n {obj && !(obj.mimeType || '').match(/image/) && !obj.iconUrl && \r\n \r\n }\r\n {obj && obj.ts &&

    {moment(obj.ts).format('MMM D, YYYY')}

    }\r\n {obj && obj.InputOn &&

    {moment(obj.InputOn, moment.ISO_8601).format('MMM D, YYYY')}

    }\r\n

    {obj && (((!obj.base64 && !obj.icon) ? 'Click to Load' : obj.fileName))}

    \r\n
    \r\n {!this.props.disabled\r\n && \r\n }\r\n
    \r\n )\r\n })\r\n }\r\n {(this.state.files || []).length < 1 && this.props.disabled &&\r\n
    No documents in this section
    \r\n }\r\n {!this.props.disabled &&
    = maxAllowed && 'd-none'}`}>\r\n \r\n = maxAllowed || this.props.disabled}\r\n />\r\n
    }\r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n {\r\n showNotification: showNotification,\r\n },\r\n ), dispatch)\r\n)\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FileInputField);","import React from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col } from 'reactstrap';\r\nimport log from '../../helpers/logger';\r\nimport { setSpinner, registerSaveAndExit, registerTopbarLeft, registerTopbarCenter, registerTopbarRight } from '../../redux/Global';\r\nimport { Formik, Field, Form } from 'formik';\r\nimport RadioboxBlankIcon from 'mdi-react/RadioboxBlankIcon';\r\nimport CheckCircleIcon from 'mdi-react/CheckCircleIcon';\r\nimport RintagiScreen from '../../components/custom/Screen';\r\nimport FileInputField from '../../components/custom/FileInput';\r\nimport { Prompt } from 'react-router';\r\nimport { registerBlocker, unregisterBlocker } from '../../helpers/navigation';\r\nimport ModalDialog from '../../components/custom/ModalDialog';\r\nimport KycPersonReduxObj, { ShowMstFilterApplied } from '../../redux/KycPerson';\r\nimport { login } from '../../redux/Auth';\r\nimport { InfoIcon } from \"../../components/InfoIcon\";\r\nimport { Spinner } from \"theme-ui\";\r\n\r\n\r\nfunction fileObjects(currentTrustProfile) {\r\n const files = ['photos'];\r\n files.forEach(o => {\r\n currentTrustProfile[o] = currentTrustProfile[o].filter(o => !o.isEmptyFileObject)\r\n });\r\n}\r\n\r\nclass SupportingDoc extends RintagiScreen {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n initialing: true,\r\n formikValidatedTime: null,\r\n currentDeclaration: {\r\n photos: '',\r\n },\r\n currentDeclarationKey: Date.now(),\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n submitting: false,\r\n reduxRefreshed: false,\r\n }\r\n\r\n // flushDeclaration();\r\n // this.props.setSpinner(true, 'SupportingDoc');\r\n\r\n // // this.props.registerTopbarLeft(this.Back.bind(this), this.props.history.location.pathname, true, 'Back');\r\n // this.props.registerTopbarLeft(this.Back.bind(this), this.props.history.location.pathname, true);\r\n // this.props.registerTopbarCenter(this.props.history.location.pathname, true, 'Basic Information');\r\n\r\n this.DateChange = this.DateChange.bind(this);\r\n this.DropdownChange = this.DropdownChange.bind(this);\r\n this.TextChange = this.TextChange.bind(this);\r\n this.ValidatePage = this.ValidatePage.bind(this);\r\n this.confirmUnload = this.confirmUnload.bind(this);\r\n this.OnModalReturn = this.OnModalReturn.bind(this);\r\n this.setDirtyFlag = this.setDirtyFlag.bind(this);\r\n // this.SavePage = this.SavePage.bind(this);\r\n\r\n const loadPageOptions = { SkipMetaData: true, SkipSupportingData: true };\r\n }\r\n\r\n GetKycPersonDoc15(setFieldValue, setFieldTouched, formikName, { mstId, dtlId } = {}) {\r\n return function (file) {\r\n return this.props.GetKycPersonDoc15({ mstId, docId: file.DocId });\r\n }.bind(this);\r\n }\r\n AddKycPersonDoc15(setFieldValue, setFieldTouched, formikName, { mstId, dtlId } = {}) {\r\n return function (file) {\r\n return this.props.AddKycPersonDoc15({ mstId, file });\r\n }.bind(this);\r\n }\r\n DelKycPersonDoc15(setFieldValue, setFieldTouched, formikName, { mstId, dtlId } = {}) {\r\n return function (file) {\r\n return this.props.DelKycPersonDoc15({ mstId, docId: file.DocId });\r\n }.bind(this);\r\n }\r\n\r\n Back() {\r\n this.props.history.goBack();\r\n }\r\n\r\n Continue() {\r\n // .....\r\n this.props.history.push('/liveness');\r\n\r\n }\r\n\r\n confirmUnload(message, callback) {\r\n const confirm = () => {\r\n callback(true);\r\n }\r\n const cancel = () => {\r\n callback(false);\r\n }\r\n this.setState({ ModalOpen: true, ModalSuccess: confirm, ModalCancel: cancel, ModalHeader: false, ModalColor: \"danger\", ModalTitle: 'Unsaved Changes', ModalMsg: 'You have unsaved changes on this page. Are you sure you want to leave?' });\r\n }\r\n\r\n ValidatePage(values) {\r\n const errors = {};\r\n /* sync formik values to state values */\r\n this.setState({ currentDeclaration: { ...values } });\r\n\r\n /* validators go here but not recommended unless it doesn't fit in field based validation */\r\n\r\n this.IsFormSubmit = false; // this is used by field validator and needs to be reset when we are here \r\n this.FormGroup = undefined; // this is used by field validator and needs to be reset when we are here \r\n\r\n /* arrange post validation actions, should be the last to call \r\n * for promise based validation, this call MUST BE DONE inside the then or error block\r\n * as Formik would wait for promise before revising its states\r\n */\r\n super.ValidatePage();\r\n\r\n return errors;\r\n }\r\n\r\n componentDidMount(a, b) {\r\n log.debug('component did mount');\r\n\r\n const { mstId } = { ...this.props.match.params };\r\n if (!(this.props.KycPerson || {}).AuthCol || true) {\r\n this.props.LoadPage('MstRecord', { mstId: mstId || '!' });\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps, prevStates) {\r\n log.debug('component did update');\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.blocker) {\r\n unregisterBlocker(this.blocker);\r\n this.blocker = null;\r\n }\r\n }\r\n\r\n render() {\r\n const reduxObj = this.props.KycPerson || {};\r\n const currMst = ((this.props.KycPerson || {}).Mst || {});\r\n const KycPersonDoc15 = currMst.KycPersonDoc15;\r\n\r\n const internalStatus = currMst.InternalStatus15 || \"\";\r\n const isDisabled = (internalStatus === \"p1\" || internalStatus === \"P3\" || internalStatus === \"P4\" || internalStatus === \"AP\" || internalStatus === \"DE\");\r\n\r\n const fileFileUploadOptions = {\r\n CancelFileButton: 'Cancel',\r\n DeleteFileButton: 'Delete',\r\n MaxImageSize: {\r\n Width: 1024,\r\n Height: 768,\r\n },\r\n MinImageSize: {\r\n Width: 40,\r\n Height: 40,\r\n },\r\n }\r\n const photos = ((reduxObj.currentTrustProfile || {}).photos || []);\r\n\r\n return (\r\n \r\n \r\n \r\n (\r\n
    \r\n {this.GrabFormikBag({ errors, touched, isSubmitting, dirty, isValid })}\r\n \r\n \r\n
    \r\n

    Step 2 of 4: Add Supporting Documentation

    \r\n {dirty && }\r\n
    \r\n \r\n
    \r\n {/* {this.setDirtyFlag(dirty && isSubmitted) &&\r\n \r\n } */}\r\n {/* {this.setDirtyFlag(dirty) &&\r\n \r\n } */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    Photo of original ID and proof of residential address (PDF/PNG/JPG)
    \r\n \r\n
    \r\n {/* !f.isEmptyFileObject)}\r\n label='Browse or take photo'\r\n onError={(e, fileName) => {\r\n this.props.showNotification(\"E\", { message: \"problem loading file \" + fileName })\r\n }}\r\n multiple\r\n /> */}\r\n\r\n !f.isEmptyFileObject)}\r\n label='Browse or take photo'\r\n // label={(columnLabel.KycPersonDoc15 || {}).ToolTip}\r\n onClick={this.GetKycPersonDoc15(setFieldValue, setFieldTouched, 'cKycPersonDoc15', { mstId: (currMst || {}).KycPersonId15 })}\r\n onDelete={this.DelKycPersonDoc15(setFieldValue, setFieldTouched, 'cKycPersonDoc15', { mstId: (currMst || {}).KycPersonId15 })}\r\n onAdd={this.AddKycPersonDoc15(setFieldValue, setFieldTouched, 'cKycPersonDoc15', { mstId: (currMst || {}).KycPersonId15 })}\r\n onChange={this.FileUploadChange(setFieldValue, setFieldTouched, 'cKycPersonDoc15')}\r\n onError={(e, fileName) => {\r\n this.props.showNotification('E', { message: 'problem loading file ' + fileName })\r\n }}\r\n multiple\r\n disabled={isDisabled}\r\n />\r\n
    \r\n {/* {errors.photos && touched.photos && {errors.photos}} */}\r\n
    \r\n\r\n {!isDisabled && \r\n { this.Continue() }}>\r\n Continue\r\n {(isSubmitting || reduxObj.loading) &&\r\n \r\n } \r\n \r\n }\r\n
    \r\n \r\n
    \r\n )}\r\n />\r\n \r\n \r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n KycPerson: state.KycPerson,\r\n // SupportingDoc: state.SupportingDoc,\r\n // guarantorList: state.guarantorList,\r\n // businessVerification: state.businessVerification,\r\n // businessSupportingDoc: state.businessSupportingDoc,\r\n // businessProfile: state.businessProfile,\r\n // legalConfirmation: state.legalConfirmation,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n // { setSpinner: setSpinner },\r\n // { showNotification: showNotification },\r\n // { registerSaveAndExit: registerSaveAndExit },\r\n // { registerTopbarLeft: registerTopbarLeft },\r\n // { registerTopbarCenter: registerTopbarCenter },\r\n // { registerTopbarRight: registerTopbarRight },\r\n { login: login },\r\n { LoadPage: KycPersonReduxObj.LoadPage.bind(KycPersonReduxObj) },\r\n { SavePage: KycPersonReduxObj.SavePage.bind(KycPersonReduxObj) },\r\n { GetKycPersonDoc15List: KycPersonReduxObj.SearchActions.GetKycPersonDoc15.bind(KycPersonReduxObj) },\r\n { GetKycPersonDoc15: KycPersonReduxObj.OnDemandActions.GetKycPersonDoc15Content.bind(KycPersonReduxObj) },\r\n { AddKycPersonDoc15: KycPersonReduxObj.OnDemandActions.AddKycPersonDoc15Content.bind(KycPersonReduxObj) },\r\n { DelKycPersonDoc15: KycPersonReduxObj.OnDemandActions.DelKycPersonDoc15Content.bind(KycPersonReduxObj) },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(SupportingDoc));","import React, { Component } from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col } from 'reactstrap';\r\nimport log from '../../helpers/logger';\r\nimport { setSpinner, registerTopbarLeft } from '../../redux/Global';\r\nimport { showNotification } from '../../redux/Notification';\r\nimport KycPersonReduxObj, { ShowMstFilterApplied } from '../../redux/KycPerson';\r\nimport { Spinner } from \"theme-ui\";\r\n\r\nclass Disclosures extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n reduxRefreshed: false,\r\n isSubmitting: false,\r\n };\r\n\r\n this.props.setSpinner(true, 'GSS');\r\n\r\n const loadPageOptions = { SkipMetaData: true, SkipSupportingData: true };\r\n\r\n log.debug('IM HERE');\r\n\r\n this.Continue = this.Continue.bind(this);\r\n }\r\n\r\n Back() {\r\n this.props.history.push('/what-next');\r\n }\r\n\r\n Continue() {\r\n this.setState({ isSubmitting: true });\r\n const currMst = (this.props.KycPerson || {}).Mst || {};\r\n const { ScreenButton, OnClickColumeName } = this;\r\n this.ScreenButton = null;\r\n this.OnClickColumeName = null;\r\n\r\n this.props.SavePage(\r\n this.props.KycPerson,\r\n {\r\n KycPersonId15: currMst.KycPersonId15 || '',\r\n DisclosuresChked15: 'Y',\r\n },\r\n [],\r\n {\r\n persist: true,\r\n ScreenButton: (ScreenButton || {}).buttonType,\r\n OnClickColumeName: OnClickColumeName,\r\n }\r\n ).then(result => {\r\n this.props.history.push('/kyc-Status');\r\n }).catch(error => {\r\n log.debug('submit disclosures error', error)\r\n this.setState({ isSubmitting: false });\r\n }).finally(\r\n () => {\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n const currMst = ((this.props.KycPerson || {}).Mst || {});\r\n const disclosuresChecked = currMst.DisclosuresChked15 || \"\";\r\n\r\n if (disclosuresChecked == \"Y\") {\r\n return ;\r\n }\r\n\r\n const envPublicUrl = process.env.PUBLIC_URL;\r\n const termsAndConditions = envPublicUrl + '/TermsAndConditions.pdf';\r\n\r\n return (\r\n \r\n \r\n \r\n
    \r\n

    Step 4 of 4: Risks and Disclosures

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

    Before you pay your DPT service provider any money or DPT, you should be aware of the following.

    \r\n

    1. Please note that you may not be able to recover all the money or DPTs you paid to your DPT service provider if your DPT service provider’s business fails.

    \r\n

    2. You should not transact in the DPT if you are not familiar with this DPT. Transacting in DPTs may not be suitable for you if you are not familiar with the technology that DPT services are provided.

    \r\n

    3. You should be aware that the value of DPTs may fluctuate greatly. You should buy DPTs only if you are prepared to accept the risk of losing all of the money you put into such tokens.

    \r\n

    4. Please note that you may not be able to withdraw your ETH stake until EVM allows withdrawal. Check the status on the official Ethereum website.

    \r\n

    5. By clicking below you also accept the terms and conditions.

    \r\n

    6. You declare that you are the beneficial owner and have ultimate ownership or effective control of the account and the connected wallet(s).

    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n \r\n \r\n { this.Continue() }}>\r\n Accept and Submit Application\r\n {this.state.isSubmitting &&\r\n \r\n }\r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n KycPerson: state.KycPerson,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { setSpinner: setSpinner },\r\n { registerTopbarLeft: registerTopbarLeft },\r\n { showNotification: showNotification },\r\n { LoadPage: KycPersonReduxObj.LoadPage.bind(KycPersonReduxObj) },\r\n { SavePage: KycPersonReduxObj.SavePage.bind(KycPersonReduxObj) },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Disclosures));","import React, { Component } from 'react';\r\nimport { useState, useEffect } from \"react\";\r\nimport Webcam from \"react-webcam\";\r\n\r\nconst CAPTURE_OPTIONS = {\r\n audio: false,\r\n video: { facingMode: \"environment\" },\r\n};\r\n\r\nconst videoConstraints = {\r\n width: 1280,\r\n height: 720,\r\n facingMode: \"user\"\r\n};\r\nconst facingMode = [\r\n \"user\", \"environment\"\r\n];\r\nexport default class WebcamCapture extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.webcamRef = React.createRef();\r\n this.state = {\r\n videoConstraints: {\r\n ...(this.props.videoConstraints || videoConstraints),\r\n facingMode: (this.props.videoConstraints || videoConstraints).facingMode || \"user\"\r\n },\r\n };\r\n this.onCapture = this.onCapture.bind(this);\r\n this.onSwapCamera = this.onSwapCamera.bind(this);\r\n }\r\n\r\n onCapture() {\r\n const imageSrc = this.webcamRef.current.getScreenshot();\r\n if (typeof this.props.onCameraCapture == \"function\") {\r\n this.props.onCameraCapture(imageSrc);\r\n }\r\n }\r\n\r\n onSwapCamera() {\r\n this.setState({\r\n videoConstraints: {\r\n ...this.state.videoConstraints,\r\n facingMode: this.state.videoConstraints.facingMode == 'user' ? \"environment\" : \"user\"\r\n }\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n );\r\n }\r\n}\r\n","import * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\nimport { bindActionCreators, compose } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Formik, Field, Form } from 'formik';\r\nimport { Subject } from 'rxjs';\r\nimport {\r\n LiveTestActions,\r\n LiveTestComponent,\r\n LiveTestResult,\r\n ThemeCustomization,\r\n LiveTestStates\r\n} from 'react-liveness';\r\nimport { GetAccessToken, FaceCompare, DocOCR } from '../../services/cynopsisService';\r\nimport RintagiScreen from '../../components/custom/Screen';\r\nimport WebcamCapture from '../../components/custom/Camera';\r\nimport CheckIcon from 'mdi-react/CheckIcon';\r\nimport PropTypes from 'prop-types';\r\nimport RadioboxBlankIcon from 'mdi-react/RadioboxBlankIcon';\r\nimport { Row } from \"../../components/Cache/Editor\";\r\n\r\nimport { Card, CardBody, Col } from 'reactstrap';\r\nimport KycPersonReduxObj, { ShowMstFilterApplied } from '../../redux/KycPerson';\r\nimport log from '../../helpers/logger';\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { sendLivenessIssueEmail } from '../../services/SupportRequestService';\r\nimport ModalDialog from '../../components/custom/ModalDialog';\r\n\r\nclass Liveness extends RintagiScreen {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n actionController: new Subject(),\r\n // For Dev mode, can use configs with your clientId and clientSecret\r\n configs: {\r\n clientId: '4dq42e8nfutrejohb81rap80hu', // add your clientId here\r\n clientSecret: '2aqkcl9k8579rmduhb6ilh3r5e7t5jev18aaf4km2ivq3gamcqm', // add yout clientSecret here\r\n domain: 'cynopsis',\r\n region: 'ap-southeast-1'\r\n },\r\n serviceBaseUrl: 'https://d1.cynopsis.co/service',\r\n // For Production mode, should use access token\r\n // access token should be generated from backend\r\n accessToken: undefined, // add your accessToken here\r\n status: 'Initializing...',\r\n selfie: null,\r\n disableStart: true,\r\n sessionId: '',\r\n data: '',\r\n displayLiveness: true,\r\n displayCamera: false,\r\n captureDoc: false,\r\n\r\n ModalColor: \"\",\r\n ModalTitle: \"\",\r\n ModalHeader: false,\r\n ModalMsg: '',\r\n ModalOpen: false,\r\n ModalSuccess: null,\r\n buttonDisable: false,\r\n }\r\n }\r\n\r\n onLivenessResult = (result) => {\r\n let status = result.status\r\n let data = ''\r\n switch (status) {\r\n case LiveTestStates.PASSED:\r\n case LiveTestStates.FAILED:\r\n data = 'Faceid - ' + result.faceId\r\n break;\r\n case LiveTestStates.ERROR:\r\n data = 'Error Message - ' + result.message\r\n break;\r\n default:\r\n break;\r\n }\r\n log.debug(\"imageResult\", result);\r\n this.setState({\r\n status: status,\r\n sessionId: 'SessionId - ' + result.sessionId,\r\n data: data,\r\n selfie: `data:image/png;base64,${result.selfieImageBase64}`,\r\n })\r\n }\r\n\r\n onLivenessReady = () => {\r\n // allow start\r\n this.setState({\r\n disableStart: false,\r\n status: 'READY'\r\n })\r\n }\r\n\r\n toggleLiveness = () => {\r\n this.setState({\r\n displayLiveness: !this.state.displayLiveness\r\n })\r\n }\r\n\r\n toggleCamera = () => {\r\n this.setState({\r\n displayCamera: !this.state.displayCamera\r\n })\r\n }\r\n\r\n toggleCapture = () => {\r\n this.setState({\r\n captureDoc: !this.state.captureDoc\r\n })\r\n }\r\n onLivenessStart = () => {\r\n this.state.actionController.next(LiveTestActions.START)\r\n }\r\n\r\n onCameraCapture = (imageUri) => {\r\n if (this.state.captureDoc) {\r\n this.setState({\r\n cameraCapture: imageUri\r\n });\r\n\r\n }\r\n else {\r\n this.setState({\r\n selfieCapture: imageUri\r\n });\r\n }\r\n }\r\n\r\n onFaceCompare = () => {\r\n const _this = this;\r\n FaceCompare(this.state.selfie || this.state.selfieCapture, this.state.cameraCapture)\r\n // FaceCompare(this.state.cameraCapture, this.state.cameraCapture)\r\n .then(\r\n result => {\r\n var x = JSON.parse(result.data);\r\n console.log(x);\r\n _this.setState({\r\n faceCompareServerLog: result.data\r\n });\r\n }\r\n )\r\n .catch(\r\n err => {\r\n console.log(err);\r\n }\r\n )\r\n }\r\n\r\n onDocOCR = () => {\r\n const _this = this;\r\n DocOCR(this.state.cameraCapture)\r\n .then(\r\n result => {\r\n var x = JSON.parse(result.data);\r\n console.log(x);\r\n _this.setState({\r\n docServerLog: result.data\r\n });\r\n }\r\n )\r\n .catch(\r\n err => {\r\n console.log(err);\r\n }\r\n )\r\n }\r\n\r\n Continue = () => {\r\n const currMst = (this.props.KycPerson || {}).Mst || {};\r\n const { ScreenButton, OnClickColumeName } = this;\r\n this.ScreenButton = null;\r\n this.OnClickColumeName = null;\r\n log.debug(\"selfie\", this.state.selfie.ts);\r\n\r\n this.setState({ buttonDisable: true });\r\n\r\n this.props.SavePage(\r\n this.props.KycPerson,\r\n {\r\n KycPersonId15: currMst.KycPersonId15 || '',\r\n LivenessPassed15: 'Y',\r\n PicMed15: this.state.selfie ?\r\n JSON.stringify({\r\n ...this.state.selfie,\r\n mimeType: \"image/png\",\r\n base64: this.StripEmbeddedBase64Prefix(this.state.selfie)\r\n }) : null,\r\n },\r\n [],\r\n {\r\n persist: true,\r\n ScreenButton: (ScreenButton || {}).buttonType,\r\n OnClickColumeName: OnClickColumeName,\r\n }\r\n ).then(result => {\r\n this.props.history.push('/disclosures');\r\n }).catch(error => {\r\n log.debug('submit liveness result error', error)\r\n }).finally(\r\n () => {\r\n }\r\n );\r\n }\r\n\r\n Skip = () => {\r\n //email function here\r\n const currMst = (this.props.KycPerson || {}).Mst || {};\r\n const userName = currMst.Name15 || '';\r\n const userEmail = currMst.EmailAddrs15 || '';\r\n const userInfo = userName + ' ' + userEmail;\r\n\r\n this.setState({ buttonDisable: true });\r\n\r\n sendLivenessIssueEmail(userInfo).then(\r\n (resp) => {\r\n if (resp.data.result == \"success\") {\r\n const confirm = () => {\r\n this.props.history.push('/disclosures');\r\n }\r\n const cancel = () => {\r\n this.props.history.push('/liveness');\r\n }\r\n const modalChange = (YesNo) => {\r\n this.setState({ ModalOpen: false });\r\n if (YesNo === \"Y\") confirm();\r\n else cancel();\r\n };\r\n\r\n var messageCnt = \"\";\r\n messageCnt = \"
    \" +\r\n \"

    A notification email has been sent to the FintruX team.
    One of our representatives will get in touch with you shortly.

    \" +\r\n \"
    \";\r\n\r\n this.setState({\r\n buttonDisable: false,\r\n ModalOpen: true,\r\n ModalSuccess: confirm,\r\n ModalCancel: cancel,\r\n OnModalReturn: modalChange,\r\n ModalHeader: false,\r\n ModalColor: \"success\",\r\n ModalTitle: 'Liveness Test Issue Email Sent',\r\n ModalMsg:
    \r\n });\r\n }\r\n },\r\n (error) => {\r\n log.debug(\"email error\", error);\r\n }\r\n )\r\n\r\n // this.props.history.push('/disclosures');\r\n }\r\n\r\n componentDidMount() {\r\n var _this = this;\r\n GetAccessToken()\r\n .then(\r\n result => {\r\n var x = JSON.parse(result.data);\r\n _this.setState({\r\n accessToken: x.access_token\r\n });\r\n }\r\n )\r\n .catch(\r\n err => {\r\n console.log(err);\r\n }\r\n )\r\n\r\n const { mstId } = { ...this.props.match.params };\r\n if (!(this.props.KycPerson || {}).AuthCol || true) {\r\n this.props.LoadPage('MstRecord', { mstId: mstId || '!' });\r\n }\r\n }\r\n render() {\r\n const currMst = ((this.props.KycPerson || {}).Mst || {});\r\n const checkLivenessPassed = currMst.LivenessPassed15 || \"\";\r\n\r\n if (checkLivenessPassed == \"Y\") {\r\n return ;\r\n }\r\n\r\n const fileFileUploadOptions = {\r\n CancelFileButton: 'Cancel',\r\n DeleteFileButton: 'Delete',\r\n MaxImageSize: {\r\n Width: 1024,\r\n Height: 768,\r\n },\r\n MinImageSize: {\r\n Width: 40,\r\n Height: 40,\r\n },\r\n maxSize: 5 * 1024 * 1024,\r\n }\r\n\r\n const livenessContainerCss = { badkground: \"#cdcdcd\" };\r\n const hideOcr = true;\r\n log.debug(\"status\", this.state.status);\r\n const livenessPassed = this.state.status == \"PASSED\" ? true : false;\r\n const showIssueSec = (this.state.status == \"ERROR\" || this.state.status == \"FAILED\") ? true : false;\r\n\r\n return (\r\n //
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n {/*
    \r\n
    */}\r\n
    \r\n
    \r\n
    \r\n
    \r\n {\r\n this.state.displayLiveness &&\r\n this.state.accessToken &&\r\n
    \r\n {/* Use configs for dev mode */}\r\n {/* Use accessToken for prod mode */}\r\n \r\n
    \r\n }\r\n\r\n
    \r\n

    Step 3 of 4: Liveness Test

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

    {this.state.status}

    \r\n
    \r\n {!livenessPassed &&
    \r\n

    Just for us to make sure you are not a robot

    \r\n
    \r\n }\r\n
    \r\n {!livenessPassed &&
    \r\n
    {this.state.sessionId}
    \r\n
    \r\n }\r\n {!livenessPassed &&\r\n
    \r\n
    {this.state.data}
    \r\n
    \r\n }\r\n {\r\n this.state.selfie && this.state.selfie != \"data:image/png;base64,undefined\" &&\r\n <>\r\n {/*
    Selfie image
    */}\r\n
    \r\n \"Selfie\"\r\n
    \r\n \r\n }\r\n
    \r\n {!livenessPassed && }\r\n {!livenessPassed &&\r\n

    *Please ensure you are in an environment with adequate lighting and your face is clearly visible. (No cap, hat, glasses, sunglasses or face mask etc to obscure eyes or face)

    \r\n }\r\n {livenessPassed && \r\n \r\n }\r\n {showIssueSec &&
    \r\n
    OR
    \r\n I have an issue\r\n

    *Support team will be informed that you are unable to complete the Liveness Test. We strive to get back to you within 7 days. Please note that in the meantime your application will not be able to proceed until Liveness Test is completed.

    \r\n
    \r\n }\r\n
    \r\n
    \r\n {/*
    \r\n
    */}\r\n {/*
    \r\n
    */}\r\n
    \r\n {hideOcr == false &&
    \r\n
    \r\n
    \r\n
    \r\n

    FACE COMPARE & DOC OCR

    \r\n
    \r\n \r\n {this.state.displayCamera &&\r\n
    \r\n \r\n
    \r\n }\r\n\r\n
    \r\n \r\n \r\n {/* Capture Selfie\r\n Capture Doc */}\r\n
    \r\n\r\n {/* */}\r\n {/* */}\r\n\r\n
    \r\n
    \r\n {\r\n this.state.selfieCapture &&\r\n
    \r\n
    \r\n

    SELFIE CAPTURE

    \r\n
    \r\n
    \r\n
    \"Selfie
    \r\n
    \r\n
    \r\n }\r\n
    \r\n
    \r\n {\r\n this.state.cameraCapture &&\r\n
    \r\n
    \r\n

    DOCUMENT CAPTURE

    \r\n
    \r\n
    \r\n
    \"Camera
    \r\n
    \r\n\r\n
    \r\n }\r\n
    \r\n
    \r\n\r\n {/* */}\r\n\r\n \r\n \r\n\r\n {this.state.faceCompareServerLog &&
    \r\n
    \r\n

    SERVER LOG - FACE COMPARE

    \r\n
    \r\n
    \r\n
    {this.state.faceCompareServerLog}
    \r\n
    \r\n
    \r\n }\r\n {this.state.docServerLog &&
    \r\n
    \r\n

    SERVER LOG - DOC OCR

    \r\n
    \r\n
    \r\n
    {this.state.docServerLog}
    \r\n
    \r\n
    \r\n }\r\n
    \r\n
    \r\n
    \r\n }\r\n
    \r\n
    \r\n \r\n \r\n \r\n //
    \r\n //
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n KycPerson: state.KycPerson,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { LoadPage: KycPersonReduxObj.LoadPage.bind(KycPersonReduxObj) },\r\n { SavePage: KycPersonReduxObj.SavePage.bind(KycPersonReduxObj) },\r\n ), dispatch)\r\n)\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Liveness);","import { fetchData, getAccessControlInfo, getAccessScope, baseUrl } from './webAPIBase';\r\nimport log from '../helpers/logger';\r\n\r\nexport function GetAccessToken(accessScope) {\r\n return fetchData(baseUrl + '/CynopsisWs.asmx/GetAccessToken'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function FaceCompare(selfieImageUri, idDocImageUri, accessScope) {\r\n return fetchData(baseUrl + '/CynopsisWs.asmx/FaceCompare'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n selfieImageUri: selfieImageUri,\r\n idDocImageUri: idDocImageUri,\r\n\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}\r\n\r\nexport function DocOCR(idDocImageUri1, idDocImageUri2, accessScope) {\r\n return fetchData(baseUrl + '/CynopsisWs.asmx/DocOCR'\r\n ,{\r\n requestOptions: {\r\n body: JSON.stringify({\r\n idDocImageUri1: idDocImageUri1,\r\n idDocImageUri2: idDocImageUri2 || '',\r\n }),\r\n },\r\n ...(getAccessControlInfo()),\r\n ...(accessScope)\r\n }\r\n )\r\n}","export default __webpack_public_path__ + \"static/media/kycStatus.f5e435bf.png\";","export default \"data:image/png;base64,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\"","import React, { Component } from 'react';\r\nimport { bindActionCreators } from 'redux';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect, withRouter } from 'react-router';\r\nimport { Card, CardBody, Button, Row, Col } from 'reactstrap';\r\nimport log from '../../helpers/logger';\r\nimport { setSpinner, registerTopbarLeft } from '../../redux/Global';\r\nimport CheckCircleIcon from 'mdi-react/CheckCircleIcon';\r\nimport { isEmpty } from '../../helpers/utils';\r\n// import { logout } from '../../redux/Auth';\r\n// import { showNotification } from '../../redux/Notification';\r\nimport KycPersonReduxObj, { ShowMstFilterApplied } from '../../redux/KycPerson';\r\nimport KycCorporateReduxObj from '../../redux/KycCorporate';\r\nimport kycStatus from '../../img/kycStatus.png';\r\nimport KycIssue from '../../img/kycIssue.png';\r\nimport InformationOutlineIcon from 'mdi-react/InformationOutlineIcon';\r\nimport CloseCircleOutlineIcon from 'mdi-react/CloseCircleOutlineIcon';\r\nimport ThumbUpOutlineIcon from 'mdi-react/ThumbUpOutlineIcon';\r\nimport CheckIcon from 'mdi-react/CheckIcon';\r\nimport { getRintagiConfig } from '../../helpers/config';\r\n\r\nclass KycStatus extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n reduxRefreshed: false,\r\n };\r\n\r\n this.props.setSpinner(true, 'GSS');\r\n\r\n const loadPageOptions = { SkipMetaData: true, SkipSupportingData: true };\r\n\r\n this.UpdatePersonalDetail = this.UpdatePersonalDetail.bind(this);\r\n this.ModifyDoc = this.ModifyDoc.bind(this);\r\n this.Continue = this.Continue.bind(this);\r\n\r\n const { mstId } = { ...this.props.match.params };\r\n if (!(this.props.KycPerson || {}).AuthCol || true) {\r\n this.props.LoadPage('MstRecord', { mstId: mstId || '!' });\r\n }\r\n\r\n if (!(this.props.KycCorporate || {}).AuthCol || true) {\r\n this.props.LoadCorpPage('MstRecord', { mstId: mstId || '!' });\r\n }\r\n\r\n }\r\n\r\n Back() {\r\n this.props.history.push('/what-next');\r\n }\r\n\r\n UpdatePersonalDetail() {\r\n this.props.history.push('/personal-detail');\r\n }\r\n\r\n ModifyDoc() {\r\n this.props.history.push('/supporting-doc');\r\n }\r\n\r\n\r\n Continue() {\r\n this.props.history.push('/dashboard');\r\n }\r\n\r\n // componentDidUpdate(prevProps, prevStates) {\r\n // if (!(this.props.declaration || {}).loading && !(this.props.businessProfile || {}).loading && !(this.props.trustProfile || {}).loading && this.props.global.pageSpinner) {\r\n // const _this = this;\r\n // setTimeout(() => _this.props.setSpinner(false), 500);\r\n // }\r\n // }\r\n\r\n render() {\r\n const runtimeConfig = getRintagiConfig() || {};\r\n const prdAllowKycOnly = runtimeConfig.prdAllowKycOnly || false;\r\n\r\n //KYC individual info\r\n const currMst = ((this.props.KycPerson || {}).Mst || {});\r\n const kycPersonId = currMst.KycPersonId15 || \"\";\r\n const internalStatus = currMst.InternalStatus15 || \"\";\r\n const reason = currMst.Reason15 || \"\";\r\n const livenessPassed = currMst.LivenessPassed15 || \"\";\r\n const disclosuresChked = currMst.DisclosuresChked15 || \"\";\r\n\r\n // //KYC Corporate info \r\n const currCorpMst = ((this.props.KycCorporate || {}).Mst || {});\r\n const kycCorpId = currCorpMst.KycCorpId16 || \"\";\r\n const corpInternalStatus = currCorpMst.InternalStatus16 || \"\";\r\n\r\n if (kycPersonId != \"\") { // check if this is individual account\r\n if (internalStatus == '') {\r\n return ;\r\n }else if( internalStatus !== '' && (disclosuresChked == \"N\" || disclosuresChked == \"\" )){\r\n return ;\r\n }\r\n }\r\n else if (kycCorpId != \"\") { // check if this is corporate account\r\n if (corpInternalStatus == '') {\r\n return ;\r\n }\r\n } else if (kycPersonId == \"\" && kycCorpId == \"\") {\r\n return ;\r\n }\r\n\r\n log.debug(\"kycstatusinfo\", currMst, currCorpMst);\r\n\r\n return (\r\n \r\n \r\n \r\n {(internalStatus == \"P1\" || internalStatus == \"P3\" || internalStatus == \"P4\" ||\r\n corpInternalStatus == \"P1\" || corpInternalStatus == \"P3\" || corpInternalStatus == \"P4\") &&\r\n
    \r\n
    \r\n

    Status: Waiting for Review

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

    Thank you for signing up for our waitlist. We will send you an email when your account is approved.

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    }\r\n\r\n {(internalStatus == \"P2\") &&
    \r\n
    \r\n

    Status: Problem With Data Collection

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    We’ve flagged the following issues:\r\n
    {reason}\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n { this.UpdatePersonalDetail() }}>Fix Issues\r\n \r\n \r\n
    \r\n
    \r\n
    }\r\n\r\n {(corpInternalStatus == \"P2\") &&
    \r\n
    \r\n

    Status: Problem With Data Collection

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    We’ve flagged the issues with data collection.\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    }\r\n\r\n {(internalStatus == \"DE\" || corpInternalStatus == \"DE\") &&
    \r\n
    \r\n

    Status: KYC Declined

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

    KYC Declined, Please contact customer service for more detail.
    {reason}

    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    }\r\n\r\n {/* individual KYC approved */}\r\n {internalStatus == \"AP\" &&
    \r\n {(livenessPassed == \"Y\" && disclosuresChked == \"Y\") &&
    \r\n
    \r\n

    Status: KYC Approved

    \r\n
    \r\n {prdAllowKycOnly == true &&\r\n
    \r\n

    We are excited to have you as part of staked.finance. We will be launching in November, check back soon.

    \r\n
    \r\n }\r\n
    \r\n }\r\n\r\n {(livenessPassed == \"N\" || livenessPassed == \"\") &&\r\n
    \r\n

    Status: Liveness Test Pending

    \r\n
    \r\n }\r\n\r\n {(disclosuresChked == \"N\" || disclosuresChked == \"\") &&\r\n
    \r\n

    Status: Risks & Disclosures NOT Accepted

    \r\n
    \r\n }\r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n {livenessPassed == \"Y\" &&\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    Liveness Test

    \r\n
    \r\n
    \r\n
    \r\n }\r\n\r\n {(livenessPassed == \"N\" || livenessPassed == \"\") &&\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n }\r\n\r\n {disclosuresChked == \"Y\" &&\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    Risks and Disclosures

    \r\n
    \r\n
    \r\n
    \r\n }\r\n\r\n {(disclosuresChked == \"N\" || disclosuresChked == \"\") &&\r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n }\r\n
    \r\n
    \r\n\r\n {(livenessPassed == \"Y\" && disclosuresChked == \"Y\") && prdAllowKycOnly != true &&\r\n
    \r\n
    \r\n \r\n \r\n { this.Continue() }}>Go to Dashboard\r\n \r\n \r\n
    \r\n
    \r\n }\r\n
    \r\n
    }\r\n\r\n {/* corporate KYC approved */}\r\n {corpInternalStatus == \"AP\" &&
    \r\n
    \r\n

    Status: KYC Approved

    \r\n
    \r\n\r\n {prdAllowKycOnly == true &&\r\n
    \r\n

    We are excited to have you as part of staked.finance. We will be launching in November, check back soon.

    \r\n
    \r\n }\r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n {prdAllowKycOnly != true &&\r\n
    \r\n
    \r\n \r\n \r\n { this.Continue() }}>Go to Dashboard\r\n \r\n \r\n
    \r\n
    \r\n }\r\n
    \r\n
    }\r\n
    \r\n
    \r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n error: state.error,\r\n global: state.global,\r\n KycPerson: state.KycPerson,\r\n KycCorporate: state.KycCorporate,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { setSpinner: setSpinner },\r\n { registerTopbarLeft: registerTopbarLeft },\r\n { LoadPage: KycPersonReduxObj.LoadPage.bind(KycPersonReduxObj) },\r\n { LoadCorpPage: KycCorporateReduxObj.LoadPage.bind(KycCorporateReduxObj) },\r\n // { logout: logout},\r\n // { showNotification: showNotification },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(KycStatus));\r\n","/* this is external interface(for import) for this screen */\r\nimport { naviPath } from '../../helpers/utils'\r\nimport Welcome from './Welcome';\r\nimport UserOption from './UserOption';\r\nimport GetStartedSteps from './GetStartedSteps';\r\nimport PersonalDetail from './PersonalDetail';\r\nimport CorporateDetail from './CorporateDetail';\r\nimport BusinessRequest from './BusinessRequest';\r\nimport SupportingDoc from './SupportingDoc';\r\nimport Disclosures from './Disclosures';\r\nimport Liveness from './Liveness';\r\nimport KycStatus from './KycStatus';\r\nimport log from '../../helpers/logger';\r\n\r\n// import InvitationStatus from './InvitationStatus';\r\n/* react router match by order of appearance in list so make sure wider match comes last, use order to control display order */\r\nexport const pagesRoutes = [\r\n {\r\n path: \"/welcome\",\r\n name: \"Welcome\",\r\n short: \"Welcome\",\r\n component: Welcome,\r\n icon: \"Home\",\r\n isPublic: false,\r\n type: 'Welcome',\r\n order: 12,\r\n inMenu: false,\r\n menuLabel: \"Welcome\"\r\n },\r\n {\r\n path: \"/user-option\",\r\n name: \"User Option\",\r\n short: \"User Option\",\r\n component: UserOption,\r\n icon: \"Home\",\r\n isPublic: false,\r\n type: 'UserOption',\r\n order: 12,\r\n inMenu: false,\r\n menuLabel: \"User Option\"\r\n },\r\n {\r\n path: \"/get-started-steps\",\r\n name: \"Get Started Steps\",\r\n short: \"Get Started Steps\",\r\n component: GetStartedSteps,\r\n icon: \"Home\",\r\n isPublic: false,\r\n type: 'GetStartedSteps',\r\n order: 12,\r\n inMenu: false,\r\n menuLabel: \"Get Started Steps\"\r\n },\r\n {\r\n path: \"/personal-detail\",\r\n name: \"PersonalDetail\",\r\n short: \"PersonalDetail\",\r\n component: PersonalDetail,\r\n icon: \"Home\",\r\n isPublic: false,\r\n type: 'PersonalDetail',\r\n order: 9,\r\n inMenu: false,\r\n menuLabel: \"Personal Detail\"\r\n },\r\n\r\n {\r\n path: \"/corporate-detail\",\r\n name: \"CorporateDetail\",\r\n short: \"CorporateDetail\",\r\n component: CorporateDetail,\r\n icon: \"Home\",\r\n isPublic: false,\r\n type: 'CorporateDetail',\r\n order: 9,\r\n inMenu: false,\r\n menuLabel: \"Corporate Detail\"\r\n },\r\n\r\n {\r\n path: \"/business-request\",\r\n name: \"BusinessRequest\",\r\n short: \"BusinessRequest\",\r\n component: BusinessRequest,\r\n icon: \"Home\",\r\n isPublic: false,\r\n type: 'BusinessRequest',\r\n order: 9,\r\n inMenu: false,\r\n menuLabel: \"Business Request\"\r\n },\r\n\r\n {\r\n path: \"/supporting-doc\",\r\n name: \"SupportingDoc\",\r\n short: \"SupportingDoc\",\r\n component: SupportingDoc,\r\n icon: \"Home\",\r\n isPublic: false,\r\n type: 'SupportingDoc',\r\n order: 9,\r\n inMenu: false,\r\n menuLabel: \"Supporting Doc\"\r\n },\r\n\r\n {\r\n path: \"/disclosures\",\r\n name: \"Disclosures\",\r\n short: \"Disclosures\",\r\n component: Disclosures,\r\n icon: \"Home\",\r\n isPublic: false,\r\n type: 'Disclosures',\r\n order: 9,\r\n inMenu: false,\r\n menuLabel: \"Disclosures\"\r\n },\r\n\r\n {\r\n path: \"/liveness\",\r\n name: \"Liveness\",\r\n short: \"Liveness\",\r\n component: Liveness,\r\n icon: \"Home\",\r\n isPublic: false,\r\n type: 'Liveness',\r\n order: 9,\r\n inMenu: false,\r\n menuLabel: \"Liveness\"\r\n },\r\n\r\n {\r\n path: \"/kyc-status\",\r\n name: \"KycStatus\",\r\n short: \"KycStatus\",\r\n component: KycStatus,\r\n icon: \"Home\",\r\n isPublic: false,\r\n type: 'KycStatus',\r\n order: 9,\r\n inMenu: false,\r\n menuLabel: \"KYC Status\"\r\n },\r\n]\r\n\r\nfunction naviLabel(label, type) {\r\n if (type === \"Welcome\") return \"Welcome\";\r\n else if (type === \"UserOption\") return \"User Option\";\r\n else if (type === \"GetStartedSteps\") return \"Get Started Steps\";\r\n else if (type === \"PersonalDetail\") return \"Personal Detail\";\r\n else if (type === \"CorporateDetail\") return \"Corporate Detail\";\r\n else if (type === \"BusinessRequest\") return \"Business Request\";\r\n else if (type === \"SupportingDoc\") return \"Supporting Doc\";\r\n else if (type === \"Disclosures\") return \"Disclosures\";\r\n else if (type === \"Liveness\") return \"Liveness\";\r\n else if (type === \"KycStatus\") return \"KYC Status\";\r\n else return type;\r\n}\r\n\r\nexport function getNaviBar(type, label) {\r\n return pagesRoutes\r\n .sort((a, b) => a.order - b.order)\r\n .map((v, i) => {\r\n return {\r\n path: v.path,\r\n label: naviLabel(label, v.type),\r\n type: v.type,\r\n active: v.type === type,\r\n }\r\n });\r\n}","import React, { Component } from 'react';\r\nimport { Nav, NavItem, NavLink } from 'reactstrap';\r\n\r\nconst iconClass = {\r\n MstList: \"fa-th-large\",\r\n MstRecord:\"fa-briefcase\",\r\n DtlList:\"fa-list-ul\",\r\n DtlRecord: \"fa-picture-o\",\r\n Profile: \"fa-address-card-o\",\r\n Setting: \"fa-cogs\",\r\n NewPassword: \"fa-unlock-alt\",\r\n}\r\n\r\nconst activeLinkClass = \"active\";\r\nconst activeTabClass = \"fill-fintrux\";\r\n\r\nexport default class NaviBar extends Component {\r\n constructor(props) {\r\n super(props); \r\n this.onClick = this.onClick.bind(this);\r\n }\r\n\r\n onClick (v) {\r\n return (function(evt) {\r\n if (this.props.mstListCount === 0) return;\r\n else if (this.props.history) this.props.history.push(v.path);\r\n else return;\r\n }).bind(this);\r\n }\r\n render() {\r\n return (\r\n \r\n ) \r\n };\r\n};\r\n","import React, { PureComponent } from 'react';\r\nimport { Card, CardBody, Col, Progress, Row } from 'reactstrap';\r\nimport classNames from 'classnames';\r\n\r\nexport default class ProgressBar extends PureComponent {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n value: 0,\r\n valueText: \"\",\r\n score: 0\r\n };\r\n\r\n this.scorePassword = this.scorePassword.bind(this);\r\n }\r\n\r\n scorePassword = (pass) => {\r\n var score = 0;\r\n if (!pass) {\r\n this.setState({\r\n score: 0\r\n });\r\n } else {\r\n var letters = {};\r\n for (var i = 0; i < pass.length; i++) {\r\n letters[pass[i]] = (letters[pass[i]] || 0) + 1;\r\n score += 5.0 / letters[pass[i]];\r\n }\r\n // bonus points for mixing it up\r\n var variations = {\r\n digits: /\\d/.test(pass),\r\n lower: /[a-z]/.test(pass),\r\n upper: /[A-Z]/.test(pass),\r\n nonWords: /\\W/.test(pass)\r\n };\r\n var variationCount = 0;\r\n for (var check in variations) {\r\n variationCount += (variations[check] == true) ? 1 : 0;\r\n }\r\n score += (variationCount - 1) * 10;\r\n if (pass.length >= 8) score += 40;\r\n else if (pass.length >= 6) score += 20;\r\n if (score > 100) score = 100;\r\n\r\n this.setState({\r\n score: parseInt(score, 10)\r\n });\r\n }\r\n }\r\n\r\n componentDidUpdate() {\r\n this.scorePassword(this.props.text);\r\n\r\n if (this.state.score === 0) {\r\n this.setState({\r\n value: 0,\r\n valueText: \"\"\r\n });\r\n } else if (this.state.score > 0 && this.state.score <= 30) {\r\n this.setState({\r\n value: 25,\r\n valueText: \"Weak\"\r\n });\r\n } else if (this.state.score > 30 && this.state.score <= 60) {\r\n this.setState({\r\n value: 50,\r\n valueText: \"Normal\"\r\n });\r\n } else if (this.state.score > 60 && this.state.score <= 80) {\r\n this.setState({\r\n value: 75,\r\n valueText: \"Good\"\r\n });\r\n } else {\r\n this.setState({\r\n value: 100,\r\n valueText: \"Strong\"\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n\r\n let progressBarClass = classNames({\r\n 'progress-wrap--pink': this.state.score <= 30 ? true : false,\r\n 'progress-wrap--yellow': this.state.score > 30 && this.state.score <= 60 ? true : false,\r\n 'progress-wrap--blue': this.state.score > 60 && this.state.score <= 80 ? true : false,\r\n 'progress-wrap--green': this.state.score > 80 ? true : false,\r\n });\r\n\r\n return (\r\n \r\n
    \r\n \r\n {this.state.valueText}\r\n \r\n
    \r\n \r\n )\r\n }\r\n}","import React, {PureComponent} from 'react';\r\nimport {Alert, Button} from 'reactstrap';\r\nimport PropTypes from 'prop-types';\r\nimport InformationOutlineIcon from 'mdi-react/InformationOutlineIcon';\r\nimport ThumbUpOutlineIcon from 'mdi-react/ThumbUpOutlineIcon';\r\nimport CommentAlertOutlineIcon from 'mdi-react/CommentAlertOutlineIcon';\r\nimport CloseCircleOutlineIcon from 'mdi-react/CloseCircleOutlineIcon';\r\n\r\nexport default class AlertComponent extends PureComponent {\r\n static propTypes = {\r\n color: PropTypes.string,\r\n icon: PropTypes.bool,\r\n className: PropTypes.string\r\n };\r\n \r\n constructor(props) {\r\n super(props);\r\n \r\n this.state = {\r\n visible: true\r\n };\r\n \r\n this.onShow = this.onShow.bind(this);\r\n this.onDismiss = this.onDismiss.bind(this);\r\n }\r\n \r\n onShow() {\r\n this.setState({visible: true});\r\n }\r\n \r\n onDismiss() {\r\n this.setState({visible: false});\r\n }\r\n \r\n render() {\r\n let Icon;\r\n \r\n switch (this.props.color) {\r\n case 'info':\r\n Icon = ;\r\n break;\r\n case 'success':\r\n Icon = ;\r\n break;\r\n case 'warning':\r\n Icon = ;\r\n break;\r\n case 'danger':\r\n Icon = ;\r\n break;\r\n default:\r\n break;\r\n }\r\n \r\n if (this.state.visible) {\r\n return (\r\n \r\n {this.props.icon &&
    {Icon}
    }\r\n \r\n
    \r\n {this.props.children}\r\n
    \r\n
    \r\n );\r\n }\r\n \r\n return ;\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { Card, CardBody, Button, Row, Col } from 'reactstrap';\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators } from 'redux';\r\nimport { Formik, Field, Form } from 'formik';\r\nimport { Redirect, withRouter } from 'react-router-dom';\r\nimport EyeIcon from 'mdi-react/EyeIcon';\r\nimport LoadingIcon from 'mdi-react/LoadingIcon';\r\nimport { login, logout, getCurrentUser, changePassword, ShowSpinner } from '../../redux/Auth';\r\nimport NaviBar from '../../components/custom/NaviBar';\r\nimport { getNaviBar } from './index';\r\nimport ProgressBar from '../../components/custom/ProgressBar';\r\nimport queryString from 'query-string'\r\nimport Alert from '../../components/Alert';\r\nimport log from '../../helpers/logger';\r\nimport { setTitle } from '../../redux/Global';\r\nimport { Spinner } from \"theme-ui\";\r\n\r\n\r\n//import * as sigUtil from 'eth-sig-util';\r\n\r\nclass NewPassword extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.titleSet = false;\r\n this.SystemName = (document.Rintagi || {}).systemName || 'Rintagi';\r\n this.state = {\r\n submitting: false,\r\n showPassword: false,\r\n j: '',\r\n p: ''\r\n };\r\n\r\n this.showPassword = this.showPassword.bind(this);\r\n this.changePassword = this.changePassword.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const qs = queryString.parse(this.props.location.search);\r\n\r\n this.setState({\r\n j: qs.j,\r\n p: qs.p,\r\n });\r\n\r\n }\r\n componentDidUpdate(prevprops, prevstates) {\r\n const emptyTitle = '';\r\n const siteTitle = this.SystemName;\r\n\r\n if (!this.titleSet) {\r\n this.props.setTitle(siteTitle);\r\n this.titleSet = true;\r\n }\r\n }\r\n\r\n showPassword(e) {\r\n e.preventDefault();\r\n this.setState({\r\n showPassword: !this.state.showPassword,\r\n submitting: false,\r\n })\r\n }\r\n\r\n static getDerivedStateFromProps(nextProps, prevState) {\r\n if (prevState.submitting) {\r\n prevState.setSubmitting(false);\r\n }\r\n return null;\r\n }\r\n\r\n changePassword(values, { setSubmitting, setErrors, resetForm, setValues /* setValues and other goodies */ }) {\r\n this.setState({ submitting: true, setSubmitting: setSubmitting });\r\n console.log(values);\r\n\r\n this.props.changePassword(\r\n {\r\n j: this.state.j || '',\r\n p: this.state.p || '',\r\n newUsrPassword: values.cNewUsrPassword,\r\n confirmPwd: values.cConfirmPwd,\r\n }\r\n );\r\n }\r\n\r\n render() {\r\n\r\n const naviBar = getNaviBar(\"NewPassword\", this.props.auth.Label);\r\n const siteTitle = (this.props.global || {}).pageTitle || '';\r\n const emptyTitle = '';\r\n return (\r\n \r\n \r\n
    \r\n
    \r\n

    Reset Password

    \r\n
    \r\n
    \r\n \r\n
    \r\n {this.props.user.loading &&
    }\r\n {ShowSpinner(this.props.auth) &&
    }\r\n {\r\n // // same as above, but feel free to move this into a class method now.\r\n let errors = {};\r\n if (!values.cNewUsrPassword) {\r\n errors.cNewUsrPassword = this.props.auth.Label.NewUsrPasswordEmpty;\r\n }\r\n if (values.cNewUsrPassword !== values.cConfirmPwd) {\r\n errors.cConfirmPwd = this.props.auth.Label.ConfirmPwdEmpty;\r\n }\r\n // if (!values.email) {\r\n // // errors.email = 'This field is required';\r\n // // } else\r\n // if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(values.email)) {\r\n // errors.email = 'Invalid email address';\r\n // }\r\n return errors;\r\n }}\r\n onSubmit={this.changePassword}\r\n render={({\r\n errors,\r\n touched,\r\n setSubmitting,\r\n isSubmitting,\r\n values\r\n }) => (\r\n
    {/* this line equals to \r\n
    \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n {errors.cNewUsrPassword && touched.cNewUsrPassword && {errors.cNewUsrPassword}}\r\n\r\n
    \r\n {/*
    \r\n \r\n
    */}\r\n\r\n
    \r\n \r\n
    \r\n \r\n \r\n
    \r\n {errors.cConfirmPwd && touched.cConfirmPwd && {errors.cConfirmPwd}}\r\n
    \r\n\r\n
    \r\n \r\n

    {this.props.auth.Label.Information}: {this.props.auth.Label.PwdHlpMsgLabel}

    \r\n
    \r\n
    \r\n\r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n )}\r\n />\r\n
    \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n auth: state.auth,\r\n global: state.global,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { login: login },\r\n { logout: logout },\r\n { getCurrentUser: getCurrentUser },\r\n { changePassword: changePassword },\r\n { setTitle: setTitle },\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(NewPassword));\r\n","/* this is external interface(for import) for this screen */\r\nimport NewPassword from './NewPassword';\r\nimport {naviPath} from '../../helpers/utils'\r\n/* react router match by order of appearance in list so make sure wider match comes last, use order to control display order */\r\nexport const pagesRoutes = [\r\n {\r\n path: \"/NewPassword\",\r\n name: \"NewPassword\",\r\n short: \"NewPassword\",\r\n component: NewPassword,\r\n icon: \"\",\r\n isPublic: true,\r\n type: 'NewPassword',\r\n order: 3\r\n },\r\n] \r\n\r\nfunction naviLabel(label,type)\r\n{ \r\n if (type===\"NewPassword\") return label.NewPassword;\r\n else return type;\r\n}\r\n\r\n export function getNaviBar(type,label)\r\n{\r\n return pagesRoutes\r\n .sort((a,b) => a.order - b.order)\r\n .map((v,i)=>{\r\n return {\r\n path: v.path,\r\n label: naviLabel(label,v.type),\r\n type:v.type,\r\n active: v.type===type,\r\n }\r\n });\r\n }","// import { pagesRoutes as AccountRoute } from './Account/index';\r\nimport { pagesRoutes as RegistrationRoute } from './Registration/index';\r\nimport { pagesRoutes as OnboardingRoute } from './Onboarding/index';\r\nimport {pagesRoutes as AccountRoute} from './Account/index';\r\n\r\nexport const CustomRoutePre = [\r\n // ...AccountRoute,\r\n ...RegistrationRoute,\r\n ...OnboardingRoute,\r\n ...AccountRoute,\r\n ]\r\n\r\n export const CustomRoutePost = []\r\n\r\n export const SuppressGenRoute = true;","\r\n// import {pagesRoutes as AccountRoute} from '../pages/Account/index'\r\n// import {pagesRoutes as SqlReportRoute} from '../pages/SqlReport/index'\r\n// import {pagesRoutes as DefaultRoute} from '../pages/Default/index'\r\nimport {CustomRoutePre, CustomRoutePost, SuppressGenRoute} from '../pages/CustomRoute'\r\n/* all these are dynamic, add the required route for each page */\r\n// import {pagesRoutes as KycPersonRoute} from '../pages/KycPerson/index'\r\nlet route = [\r\n...(CustomRoutePre || []),\r\n...(\r\nSuppressGenRoute ? [] : [\r\n// ...AccountRoute,\r\n// ...DefaultRoute,\r\n// ...SqlReportRoute,\r\n]\r\n),\r\n...(\r\nSuppressGenRoute ? [] : [\r\n// ...KycPersonRoute,\r\n]),\r\n...(CustomRoutePost || []),\r\n];\r\n\r\n document.Rintagi.systemId = '9';\r\n export default route;\r\n","import React, { Component } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport Alert from 'react-s-alert';\r\nimport { connect } from 'react-redux';\r\nimport { bindActionCreators } from 'redux';\r\nimport { clearNotification } from '../../redux/Notification'\r\nimport 'react-s-alert/dist/s-alert-default.css';\r\nimport 'react-s-alert/dist/s-alert-css-effects/slide.css';\r\nimport 'react-s-alert/dist/s-alert-css-effects/scale.css';\r\nimport 'react-s-alert/dist/s-alert-css-effects/flip.css';\r\nimport 'react-s-alert/dist/s-alert-css-effects/jelly.css';\r\nimport 'react-s-alert/dist/s-alert-css-effects/stackslide.css';\r\nimport 'react-s-alert/dist/s-alert-css-effects/genie.css';\r\nimport 'react-s-alert/dist/s-alert-css-effects/bouncyflip.css';\r\nimport log from '../../helpers/logger';\r\n\r\n\r\n// export default class Notification extends Component {\r\nclass Notification extends Component {\r\n\r\n componentDidUpdate(prevprops, prevstates) {\r\n if ((this.props.notification || {}).message)\r\n this.props.clearNotification();\r\n }\r\n\r\n render() {\r\n if ((this.props.notification || {}).message) {\r\n // alert(this.props.notification.message);\r\n if (this.props.notification.msgType === \"E\") {\r\n log.debug(this.props.notification.message);\r\n Alert.error(this.props.notification.message);\r\n // Alert.error(this.props.notification.message,{\r\n // timeout: this.props.notification.timeout || \"none\"\r\n // });\r\n } else {\r\n Alert.success(this.props.notification.message);\r\n // Alert.success(this.props.notification.message,{\r\n // timeout: this.props.notification.timeout || \"none\"\r\n // });\r\n }\r\n }\r\n return (\r\n \r\n )\r\n }\r\n\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n notification: state.notification,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators(Object.assign({},\r\n { clearNotification: clearNotification }\r\n ), dispatch)\r\n)\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(Notification));\r\n\r\n","import React from \"react\";\r\nimport { Flex, Container } from \"theme-ui\";\r\nimport { HashRouter as Hrouter, Switch, Route, Redirect, withRouter, useHistory } from \"react-router-dom\";\r\nimport { connect, shallowEqual, useSelector, useDispatch } from 'react-redux'\r\nimport { bindActionCreators } from 'redux';\r\nimport { Wallet } from \"@ethersproject/wallet\";\r\n\r\nimport { Decimal, Difference, Cache } from \"@liquity/lib-base\";\r\nimport { LiquityStoreProvider } from \"@liquity/lib-react\";\r\n\r\nimport { useLiquity } from \"../hooks/LiquityContext\";\r\nimport { useAuthorizedConnection } from \"../hooks/useAuthorizedConnection\";\r\nimport { Web3Provider } from \"@ethersproject/providers\";\r\nimport { useWeb3React } from \"@web3-react/core\";\r\nimport { TransactionMonitor } from \"../components/Transaction\";\r\nimport { WalletConnector, setHistory } from \"../components/WalletConnector\";\r\n\r\nimport Dashboard from \"../pages/Dashboard\";\r\nimport StakeOption from \"../pages/StakeOption\";\r\nimport StakeETH from \"../pages/StakeETH\";\r\nimport CustomerSupport from \"../pages/CustomerSupport\";\r\nimport WithdrawETH from \"../pages/WithdrawETH\";\r\nimport ManageValidator from \"../pages/ManageValidator\";\r\nimport Payment from \"../pages/Payment\";\r\nimport AccountStatus from \"../pages/AccountStatus\";\r\nimport StripeCheckout from \"../pages/StripeCheckout\";\r\nimport PaymentConfirm from \"../pages/PaymentConfirm\";\r\nimport RewardStatements from \"../pages/RewardStatements\";\r\nimport AccountStatements from \"../pages/AccountStatements\";\r\nimport RewardStatementDetail from \"../pages/RewardStatementDetail\";\r\nimport WithdrawConfirm from \"../pages/WithdrawConfirm\";\r\nimport Pricing from \"../pages/Pricing\";\r\nimport StmtDownloadConfirm from \"../pages/StmtDownloadConfirm\";\r\n\r\nimport { CacheViewProvider } from \"../components/Cache/context/CacheViewProvider\";\r\nimport { StabilityViewProvider } from \"../components/Stability/context/StabilityViewProvider\";\r\n\r\nimport Layout from '../pages/Layout/index';\r\nimport MainWrapper from './MainWrapper';\r\n\r\n\r\n// Pages import\r\nimport Login from '../pages/Login/Login';\r\nimport ForgotPassword from '../pages/Login/ForgotPassword';\r\nimport Error from '../pages/Error/Error';\r\nimport appRoutes from './route';\r\nimport log from '../helpers/logger';\r\n\r\nimport { setSpinner } from '../redux/Global';\r\nimport { logout } from '../redux/Auth';\r\nimport { showNotification } from '../redux/Notification';\r\nimport Notification from '../components/custom/Notification';\r\n\r\nexport const pagesRoutes = [\r\n {\r\n path: \"/login\",\r\n name: \"Login\",\r\n short: \"Login\",\r\n component: Login,\r\n icon: \"sign-in\",\r\n isPublic: true,\r\n inMenu: true,\r\n hideSidebar: true\r\n },\r\n {\r\n path: \"/forgot-password\",\r\n name: \"Forgot Password\",\r\n short: \"ForgotPassword\",\r\n component: ForgotPassword,\r\n icon: \"unlock-alt\",\r\n isPublic: true,\r\n isAdhoc: true,\r\n },\r\n {\r\n path: \"/error\",\r\n name: \"Error\",\r\n short: \"Error\",\r\n component: Error,\r\n icon: \"sign-in\",\r\n isPublic: true,\r\n isAdhoc: true,\r\n },\r\n {\r\n path: \"/Pricing\",\r\n name: \"Pricing\",\r\n short: \"Pricing\",\r\n component: Pricing,\r\n isPublic: true,\r\n hideSidebar: true\r\n },\r\n ...appRoutes,\r\n {\r\n /* this one should always come last as it matches everything or use exactMatch in the router definiton \r\n * this could be dynamic and should be revised as needed\r\n */\r\n redirect: true,\r\n path: \"/\",\r\n pathTo: \"/accountStatus\",\r\n name: \"accountStatus\",\r\n },\r\n];\r\n\r\nconst ProtectedRoute = ({ component: Component, isPublic, user, connectWallet, checkMetamaskState, ...rest }) => {\r\n const { provider, account, chainId, connector, active } = useWeb3React();\r\n console.log(user, provider, account, chainId, connector, active);\r\n const activate = useAuthorizedConnection(connectWallet);\r\n\r\n const from = (((rest.location || {}).state || {}).from || {}).pathname;\r\n const confirmed = ((rest.location || {}).state || {}).confirmed;\r\n\r\n if ((user && user.UsrId) || isPublic) {\r\n if (rest.path === '/login' && from && from !== rest.path && ((user && user.UsrId))) {\r\n return ()\r\n }\r\n\r\n if (checkMetamaskState) {\r\n log.debug(\"rest path\", from, rest.path, confirmed);\r\n if ((from === '/accountStatus')\r\n && ((rest.path === \"/dashboard\") || confirmed)\r\n ) {\r\n return ( ()} />)\r\n } else {\r\n return ( ()} />)\r\n }\r\n }\r\n\r\n return ( ()} />)\r\n }\r\n else {\r\n log.debug(\"forced to login without user info on protected route \", rest);\r\n return ( ()} />)\r\n }\r\n}\r\n\r\n// export const LiquityFrontend: React.FC = ({ loader }) => {\r\nexport const Router = ({ loader }) => {\r\n const { account, provider, liquity } = useLiquity();\r\n const history = useHistory();\r\n setHistory(history);\r\n console.log(history);\r\n const { user, auth, global } = useSelector((state) => {\r\n return { user: state.auth.user || {}, auth: state.auth, global: state.global };\r\n });\r\n // For console tinkering ;-)\r\n Object.assign(window, {\r\n account,\r\n provider,\r\n liquity,\r\n Cache,\r\n Decimal,\r\n Difference,\r\n Wallet\r\n });\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n {/*
    \r\n \r\n \r\n
    */}\r\n
    \r\n {(window.location.href.indexOf(\"/login\") < 0 && window.location.href.indexOf(\"/sign-up\") < 0\r\n && window.location.href.indexOf(\"/forgot-password\") < 0 && window.location.href.indexOf(\"/pricing\") < 0\r\n && window.location.href !== window.location.origin + '/') &&\r\n }\r\n {/*
    */}\r\n
    \r\n {/*
    */}\r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n {/* \r\n */}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* */}\r\n {pagesRoutes\r\n .map((prop, key) => {\r\n if (prop.redirect) {\r\n return (\r\n \r\n );\r\n }\r\n return (\r\n \r\n );\r\n }\r\n )}\r\n \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state) => ({\r\n user: (state.auth || {}).user,\r\n auth: state.auth,\r\n global: state.global\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => (\r\n bindActionCreators({\r\n logout: logout,\r\n showNotification: showNotification,\r\n setSpinner: setSpinner,\r\n }, dispatch)\r\n)\r\n\r\nexport default withRouter(connect(\r\n mapStateToProps, mapDispatchToProps\r\n)(Router));\r\n","import { useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withRouter } from 'react-router-dom';\r\n\r\nconst ScrollToTop = ({ location, children }) => {\r\n useEffect(() => {\r\n if (location && location.pathname) {\r\n window.scrollTo(0, 0);\r\n }\r\n }, [location]);\r\n\r\n return children;\r\n};\r\n\r\nScrollToTop.propTypes = {\r\n location: PropTypes.shape({\r\n pathname: PropTypes.string,\r\n }).isRequired,\r\n children: PropTypes.element.isRequired,\r\n};\r\n\r\nexport default withRouter(ScrollToTop);\r\n","/* your customer reducers goes into this file \r\n * like the following, it must be named as such and be empty object if no custom one is needed\r\n export const CustomReducer = {\r\n ReducerA,\r\n ReducerB,\r\n ...\r\n * }\r\n */\r\nimport { signUpReducer } from './SignUp';\r\n\r\nexport const CustomReducer = {\r\n signup: signUpReducer,\r\n}","\r\nimport { sidebarReducer } from './SideBar';\r\nimport { authReducer } from './Auth';\r\nimport { rintagiReducer } from './_Rintagi';\r\nimport { notificationReducer } from './Notification';\r\nimport { globalReducer } from './Global';\r\n// import { SqlReportReducer } from './SqlReport';\r\nimport { CustomReducer } from './Custom';\r\n\r\n/* below are dynamic, put shared static one above this */\r\n// import KycPersonReduxObj from './KycPerson';\r\n// import KycCorporateReduxObj from './KycCorporate';\r\n// import TransactionHistoryReduxObj from './TransactionHistory';\r\n// import KycWalletAddrCheckReduxObj from './KycWalletAddrCheck';\r\nimport SupportRequestReduxObj from './SupportRequest';\r\nimport Eth2WalletReduxObj from './Eth2Wallet'\r\nimport EthTxHistoryReduxObj from './EthTxHistory';\r\nimport StakePaymentReduxObj from './StakePayment'\r\nimport StakeWalletAddressReduxObj from './StakeWalletAddress';\r\nimport StakeStmtReduxObj from './StakeStmt';\r\nimport RewardStmtReduxObj from './RewardStmt';\r\nimport StakeUserInfoReduxObj from './StakeUserInfo';\r\n\r\nlet redux = {\r\n auth: authReducer,\r\n rintagi: rintagiReducer,\r\n global: globalReducer,\r\n sidebar: sidebarReducer,\r\n notification: notificationReducer,\r\n // SqlReport: SqlReportReducer,\r\n ...(CustomReducer || {}),\r\n /* dynamic go to here */\r\n // KycPerson: KycPersonReduxObj.ReduxReducer(),\r\n // KycCorporate: KycCorporateReduxObj.ReduxReducer(),\r\n //TransactionHistory: TransactionHistoryReduxObj.ReduxReducer(),\r\n //KycWalletAddrCheck: KycWalletAddrCheckReduxObj.ReduxReducer(),\r\n SupportRequest: SupportRequestReduxObj.ReduxReducer(),\r\n Eth2Wallet: Eth2WalletReduxObj.ReduxReducer(),\r\n EthTxHistory: EthTxHistoryReduxObj.ReduxReducer(),\r\n StakePayment: StakePaymentReduxObj.ReduxReducer(),\r\n StakeWalletAddress: StakeWalletAddressReduxObj.ReduxReducer(),\r\n StakeStmt: StakeStmtReduxObj.ReduxReducer(),\r\n RewardStmt: RewardStmtReduxObj.ReduxReducer(),\r\n StakeUserInfo: StakeUserInfoReduxObj.ReduxReducer(),\r\n}\r\n export default redux;\r\n\r\n\r\n\r\n/* below are dynamic, put shared static one above this */\r\n\r\n// let redux = {\r\n// /* dynamic go to here */\r\n// }\r\n// export default redux;","import { combineReducers, createStore, applyMiddleware } from 'redux';\r\nimport ReduxPromise from \"redux-promise\";\r\nimport thunk from 'redux-thunk';\r\nimport logger from 'redux-logger';\r\nimport reducers from '../redux/index';\r\nimport { Flush as FlushStorage } from '../redux/Persist';\r\nimport { LOGOUT } from '../redux/Auth';\r\n\r\nconst appReducer = combineReducers(reducers);\r\n\r\nconst rootReducer = (state, action) => {\r\n if (action.type === LOGOUT.SUCCEEDED) {\r\n // for all keys defined in your persistConfig(s)\r\n // FlushStorage();\r\n // storage.removeItem('persist:otherKey')\r\n\r\n return appReducer(undefined, action);\r\n }\r\n return appReducer(state, action);\r\n};\r\n\r\nconst middlewares = [];\r\n\r\nmiddlewares.push(thunk.withExtraArgument({\r\n apiBase: '',\r\n webApi: {}, // say replace the whole webapi with something else like a stub(basically dependency injection like for testing purpose)\r\n}));\r\nmiddlewares.push(ReduxPromise);\r\n\r\nif (process.env.NODE_ENV === `development` && true) {\r\n middlewares.push(logger);\r\n}\r\n\r\nconst createStoreWithMiddleware = applyMiddleware(...middlewares)(createStore);\r\n\r\nconst store = (window.devToolsExtension\r\n ? window.devToolsExtension()(createStoreWithMiddleware)\r\n : createStoreWithMiddleware)(rootReducer);\r\n\r\nexport default store;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { Web3ReactProvider } from \"@web3-react/core\";\r\nimport { Flex, Spinner, Heading, ThemeProvider, Paragraph, Link } from \"theme-ui\";\r\n\r\nimport { BatchedWebSocketAugmentedWeb3Provider } from \"@liquity/providers\";\r\nimport { LiquityProvider } from \"../hooks/LiquityContext\";\r\nimport { WalletConnector } from \"../components/WalletConnector\";\r\nimport { TransactionProvider } from \"../components/Transaction\";\r\nimport { Icon } from \"../components/Icon\";\r\nimport { getConfig } from \"../config\";\r\nimport theme from \"../theme\";\r\n\r\nimport { DisposableWalletProvider } from \"../testUtils/DisposableWalletProvider\";\r\nimport { LiquityFrontend } from \"../LiquityFrontend\";\r\n\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport 'bootstrap/dist/css/bootstrap.css';\r\nimport '../scss/app.scss';\r\nimport { Router } from './Router';\r\nimport ScrollToTop from './ScrollToTop';\r\n\r\nimport { Provider as ReduxProvider } from 'react-redux'\r\nimport store from './store';\r\n\r\nif (window.ethereum) {\r\n // Silence MetaMask warning in console\r\n Object.assign(window.ethereum, { autoRefreshOnNetworkChange: false });\r\n}\r\n\r\nif (process.env.REACT_APP_DEMO_MODE === \"true\") {\r\n const ethereum = new DisposableWalletProvider(\r\n `http://${window.location.hostname}:8545`,\r\n \"0x4d5db4107d237df6a3d58ee5f70ae63d73d7658d4026f2eefd2f204c81682cb7\"\r\n );\r\n\r\n Object.assign(window, { ethereum });\r\n}\r\n\r\n// Start pre-fetching the config\r\ngetConfig().then(config => {\r\n // console.log(\"Frontend config:\");\r\n // console.log(config);\r\n Object.assign(window, { config });\r\n});\r\n\r\n// const EthersWeb3ReactProvider: React.FC = ({ children }) => {\r\nconst EthersWeb3ReactProvider = ({ children }) => (\r\n // return (\r\n new BatchedWebSocketAugmentedWeb3Provider(provider)}>\r\n {children}\r\n \r\n // );\r\n // };\r\n);\r\n\r\n// const UnsupportedMainnetFallback: React.FC = () => (\r\nconst UnsupportedMainnetFallback = () => (\r\n \r\n \r\n This app is for testing purposes only.\r\n \r\n\r\n \r\n Please change your network to Ropsten, Rinkeby, Kovan or Görli.\r\n \r\n\r\n \r\n If you'd like to use the Liquity Protocol on mainnet, please pick a frontend{\" \"}\r\n \r\n here \r\n \r\n .\r\n \r\n \r\n);\r\n\r\nconst App = () => {\r\n // const [isLoading, setIsLoading] = useState(true);\r\n // const [isLoaded, setIsLoaded] = useState(false);\r\n\r\n // useEffect(() => {\r\n // window.addEventListener('load', () => {\r\n // setIsLoading(false);\r\n // setTimeout(() => setIsLoaded(true), 500);\r\n // });\r\n // }, []);\r\n\r\n const loader = (\r\n \r\n \r\n Loading...\r\n \r\n );\r\n\r\n // const unsupportedNetworkFallback = (chainId: number) => (\r\n const unsupportedNetworkFallback = ({ chainId }) => (\r\n \r\n \r\n staked.finance is not yet deployed to{\" \"}\r\n {chainId === 1 ? \"mainnet\" : \"this network \" + chainId}.\r\n \r\n Please switch to other networks.\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n }\r\n >\r\n \r\n {/* */}\r\n \r\n \r\n {/* {!isLoaded && (\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n )} */}\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n );\r\n};\r\n\r\nexport default App;\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\n\r\nimport \"./index.css\";\r\n//import App from \"./App\";\r\nimport App from './app/App';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);\r\n"],"sourceRoot":""}